Hi Felix, [FYI, it's a private test report for your RFC patch.] [auto build test ERROR on wireless-drivers-next/master] [also build test ERROR on mac80211-next/master linus/master v5.14-rc1 next-20210713] [cannot apply to wireless-drivers/master mac80211/master] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Felix-Fietkau/Ethernet-WLAN-hardware-flow-offloading-support-on-MT7622/20210714-001409 base: https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next.git master config: powerpc-randconfig-r003-20210713 (attached as .config) compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 8d69635ed9ecf36fd0ca85906bfde17949671cbe) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install powerpc cross compiling tool for clang build # apt-get install binutils-powerpc-linux-gnu # https://github.com/0day-ci/linux/commit/16ac1606c5b18e61fb25775d621cd218f17bb913 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Felix-Fietkau/Ethernet-WLAN-hardware-flow-offloading-support-on-MT7622/20210714-001409 git checkout 16ac1606c5b18e61fb25775d621cd218f17bb913 # save the attached .config to linux build tree mkdir build_dir COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross O=build_dir ARCH=powerpc SHELL=/bin/bash drivers/net/wireless/mediatek/mt76/ If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All errors (new ones prefixed by >>): In file included from drivers/net/wireless/mediatek/mt76/dma.c:6: In file included from include/linux/dma-mapping.h:7: In file included from include/linux/device.h:15: In file included from include/linux/dev_printk.h:16: In file included from include/linux/ratelimit.h:6: In file included from include/linux/sched.h:14: In file included from include/linux/pid.h:5: In file included from include/linux/rculist.h:10: In file included from include/linux/list.h:9: In file included from include/linux/kernel.h:12: In file included from include/linux/bitops.h:32: In file included from arch/powerpc/include/asm/bitops.h:62: arch/powerpc/include/asm/barrier.h:49:9: warning: '__lwsync' macro redefined [-Wmacro-redefined] #define __lwsync() __asm__ __volatile__ (stringify_in_c(LWSYNC) : : :"memory") ^ :309:9: note: previous definition is here #define __lwsync __builtin_ppc_lwsync ^ drivers/net/wireless/mediatek/mt76/dma.c:111:2: warning: unused variable '_offset' [-Wunused-variable] Q_WRITE(dev, q, desc_base, q->desc_dma); ^ drivers/net/wireless/mediatek/mt76/dma.c:24:6: note: expanded from macro 'Q_WRITE' u32 _offset = offsetof(struct mt76_queue_regs, _field); \ ^ drivers/net/wireless/mediatek/mt76/dma.c:112:2: warning: unused variable '_offset' [-Wunused-variable] Q_WRITE(dev, q, ring_size, q->ndesc); ^ drivers/net/wireless/mediatek/mt76/dma.c:24:6: note: expanded from macro 'Q_WRITE' u32 _offset = offsetof(struct mt76_queue_regs, _field); \ ^ drivers/net/wireless/mediatek/mt76/dma.c:113:12: warning: unused variable '_offset' [-Wunused-variable] q->head = Q_READ(dev, q, dma_idx); ^ drivers/net/wireless/mediatek/mt76/dma.c:11:6: note: expanded from macro 'Q_READ' u32 _offset = offsetof(struct mt76_queue_regs, _field); \ ^ drivers/net/wireless/mediatek/mt76/dma.c:129:2: warning: unused variable '_offset' [-Wunused-variable] Q_WRITE(dev, q, cpu_idx, 0); ^ drivers/net/wireless/mediatek/mt76/dma.c:24:6: note: expanded from macro 'Q_WRITE' u32 _offset = offsetof(struct mt76_queue_regs, _field); \ ^ drivers/net/wireless/mediatek/mt76/dma.c:130:2: warning: unused variable '_offset' [-Wunused-variable] Q_WRITE(dev, q, dma_idx, 0); ^ drivers/net/wireless/mediatek/mt76/dma.c:24:6: note: expanded from macro 'Q_WRITE' u32 _offset = offsetof(struct mt76_queue_regs, _field); \ ^ >> drivers/net/wireless/mediatek/mt76/dma.c:154:23: error: no member named 'tx_ring' in 'struct mtk_wed_device' q->wed_regs = wed->tx_ring[ring].reg_base; ~~~ ^ >> drivers/net/wireless/mediatek/mt76/dma.c:163:54: error: too few arguments provided to function-like macro invocation ret = mtk_wed_device_txfree_ring_setup(wed, q->regs); ^ include/linux/soc/mediatek/mtk_wed.h:120:9: note: macro 'mtk_wed_device_txfree_ring_setup' defined here #define mtk_wed_device_txfree_ring_setup(_dev, _ring, _regs) -ENODEV ^ >> drivers/net/wireless/mediatek/mt76/dma.c:163:9: error: use of undeclared identifier 'mtk_wed_device_txfree_ring_setup' ret = mtk_wed_device_txfree_ring_setup(wed, q->regs); ^ >> drivers/net/wireless/mediatek/mt76/dma.c:165:23: error: no member named 'txfree_ring' in 'struct mtk_wed_device' q->wed_regs = wed->txfree_ring.reg_base; ~~~ ^ drivers/net/wireless/mediatek/mt76/dma.c:298:2: warning: unused variable '_offset' [-Wunused-variable] Q_WRITE(dev, q, cpu_idx, q->head); ^ drivers/net/wireless/mediatek/mt76/dma.c:24:6: note: expanded from macro 'Q_WRITE' u32 _offset = offsetof(struct mt76_queue_regs, _field); \ ^ drivers/net/wireless/mediatek/mt76/dma.c:314:10: warning: unused variable '_offset' [-Wunused-variable] last = Q_READ(dev, q, dma_idx); ^ drivers/net/wireless/mediatek/mt76/dma.c:11:6: note: expanded from macro 'Q_READ' u32 _offset = offsetof(struct mt76_queue_regs, _field); \ ^ drivers/net/wireless/mediatek/mt76/dma.c:326:11: warning: unused variable '_offset' [-Wunused-variable] last = Q_READ(dev, q, dma_idx); ^ drivers/net/wireless/mediatek/mt76/dma.c:11:6: note: expanded from macro 'Q_READ' u32 _offset = offsetof(struct mt76_queue_regs, _field); \ ^ drivers/net/wireless/mediatek/mt76/dma.c:634:13: warning: unused variable '_offset' [-Wunused-variable] dma_idx = Q_READ(dev, q, dma_idx); ^ drivers/net/wireless/mediatek/mt76/dma.c:11:6: note: expanded from macro 'Q_READ' u32 _offset = offsetof(struct mt76_queue_regs, _field); \ ^ drivers/net/wireless/mediatek/mt76/dma.c:643:15: warning: unused variable '_offset' [-Wunused-variable] dma_idx = Q_READ(dev, q, dma_idx); ^ drivers/net/wireless/mediatek/mt76/dma.c:11:6: note: expanded from macro 'Q_READ' u32 _offset = offsetof(struct mt76_queue_regs, _field); \ ^ 11 warnings and 4 errors generated. -- In file included from drivers/net/wireless/mediatek/mt76/tx.c:6: In file included from drivers/net/wireless/mediatek/mt76/mt76.h:9: In file included from include/linux/kernel.h:12: In file included from include/linux/bitops.h:32: In file included from arch/powerpc/include/asm/bitops.h:62: arch/powerpc/include/asm/barrier.h:49:9: warning: '__lwsync' macro redefined [-Wmacro-redefined] #define __lwsync() __asm__ __volatile__ (stringify_in_c(LWSYNC) : : :"memory") ^ :309:9: note: previous definition is here #define __lwsync __builtin_ppc_lwsync ^ >> drivers/net/wireless/mediatek/mt76/tx.c:700:20: error: no member named 'wlan' in 'struct mtk_wed_device' token >= wed->wlan.token_start) ~~~ ^ drivers/net/wireless/mediatek/mt76/tx.c:725:21: error: no member named 'wlan' in 'struct mtk_wed_device' token >= wed->wlan.token_start && ~~~ ^ 1 warning and 2 errors generated. -- In file included from drivers/net/wireless/mediatek/mt76/mt7915/pci.c:7: In file included from include/linux/kernel.h:12: In file included from include/linux/bitops.h:32: In file included from arch/powerpc/include/asm/bitops.h:62: arch/powerpc/include/asm/barrier.h:49:9: warning: '__lwsync' macro redefined [-Wmacro-redefined] #define __lwsync() __asm__ __volatile__ (stringify_in_c(LWSYNC) : : :"memory") ^ :309:9: note: previous definition is here #define __lwsync __builtin_ppc_lwsync ^ drivers/net/wireless/mediatek/mt76/mt7915/pci.c:100:25: warning: unused variable 'wed' [-Wunused-variable] struct mtk_wed_device *wed = &dev->mt76.mmio.wed; ^ drivers/net/wireless/mediatek/mt76/mt7915/pci.c:165:25: warning: unused variable 'wed' [-Wunused-variable] struct mtk_wed_device *wed = &dev->mt76.mmio.wed; ^ >> drivers/net/wireless/mediatek/mt76/mt7915/pci.c:238:30: error: no member named 'wlan' in 'struct mtk_wed_device' dev->mt76.token_size = wed->wlan.token_start; ~~~ ^ drivers/net/wireless/mediatek/mt76/mt7915/pci.c:322:7: error: no member named 'wlan' in 'struct mtk_wed_device' wed->wlan.pci_dev = pdev; ~~~ ^ drivers/net/wireless/mediatek/mt76/mt7915/pci.c:323:7: error: no member named 'wlan' in 'struct mtk_wed_device' wed->wlan.wpdma_phys = pci_resource_start(pdev, 0) + ~~~ ^ drivers/net/wireless/mediatek/mt76/mt7915/pci.c:325:7: error: no member named 'wlan' in 'struct mtk_wed_device' wed->wlan.nbuf = 4096; ~~~ ^ drivers/net/wireless/mediatek/mt76/mt7915/pci.c:326:7: error: no member named 'wlan' in 'struct mtk_wed_device' wed->wlan.token_start = MT7915_TOKEN_SIZE - wed->wlan.nbuf - 1; ~~~ ^ drivers/net/wireless/mediatek/mt76/mt7915/pci.c:326:51: error: no member named 'wlan' in 'struct mtk_wed_device' wed->wlan.token_start = MT7915_TOKEN_SIZE - wed->wlan.nbuf - 1; ~~~ ^ drivers/net/wireless/mediatek/mt76/mt7915/pci.c:327:7: error: no member named 'wlan' in 'struct mtk_wed_device' wed->wlan.init_buf = mt7915_wed_init_buf; ~~~ ^ drivers/net/wireless/mediatek/mt76/mt7915/pci.c:328:7: error: no member named 'wlan' in 'struct mtk_wed_device' wed->wlan.offload_enable = mt7915_wed_offload_enable; ~~~ ^ drivers/net/wireless/mediatek/mt76/mt7915/pci.c:329:7: error: no member named 'wlan' in 'struct mtk_wed_device' wed->wlan.offload_disable = mt7915_wed_offload_disable; ~~~ ^ >> drivers/net/wireless/mediatek/mt76/mt7915/pci.c:332:14: error: no member named 'irq' in 'struct mtk_wed_device' irq = wed->irq; ~~~ ^ 3 warnings and 10 errors generated. -- In file included from drivers/net/wireless/mediatek/mt76/mt7915/main.c:4: In file included from include/linux/etherdevice.h:20: In file included from include/linux/if_ether.h:19: In file included from include/linux/skbuff.h:13: In file included from include/linux/kernel.h:12: In file included from include/linux/bitops.h:32: In file included from arch/powerpc/include/asm/bitops.h:62: arch/powerpc/include/asm/barrier.h:49:9: warning: '__lwsync' macro redefined [-Wmacro-redefined] #define __lwsync() __asm__ __volatile__ (stringify_in_c(LWSYNC) : : :"memory") ^ :309:9: note: previous definition is here #define __lwsync __builtin_ppc_lwsync ^ >> drivers/net/wireless/mediatek/mt76/mt7915/main.c:1056:33: error: no member named 'wdma_idx' in 'struct mtk_wed_device' path->mtk_wdma.wdma_idx = wed->wdma_idx; ~~~ ^ 1 warning and 1 error generated. vim +154 drivers/net/wireless/mediatek/mt76/dma.c 22 23 #define Q_WRITE(_dev, _q, _field, _val) do { \ > 24 u32 _offset = offsetof(struct mt76_queue_regs, _field); \ 25 if (IS_ENABLED(CONFIG_NET_MEDIATEK_SOC_WED) && \ 26 (_q)->flags & MT_QFLAG_WED) \ 27 mtk_wed_device_reg_write(&(_dev)->mmio.wed, \ 28 ((_q)->wed_regs + _offset), \ 29 _val); \ 30 else \ 31 writel(_val, &(_q)->regs->_field); \ 32 } while (0) 33 34 static int mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q); 35 36 static struct mt76_txwi_cache * 37 mt76_alloc_txwi(struct mt76_dev *dev) 38 { 39 struct mt76_txwi_cache *t; 40 dma_addr_t addr; 41 u8 *txwi; 42 int size; 43 44 size = L1_CACHE_ALIGN(dev->drv->txwi_size + sizeof(*t)); 45 txwi = devm_kzalloc(dev->dev, size, GFP_ATOMIC); 46 if (!txwi) 47 return NULL; 48 49 addr = dma_map_single(dev->dev, txwi, dev->drv->txwi_size, 50 DMA_TO_DEVICE); 51 t = (struct mt76_txwi_cache *)(txwi + dev->drv->txwi_size); 52 t->dma_addr = addr; 53 54 return t; 55 } 56 57 static struct mt76_txwi_cache * 58 __mt76_get_txwi(struct mt76_dev *dev) 59 { 60 struct mt76_txwi_cache *t = NULL; 61 62 spin_lock(&dev->lock); 63 if (!list_empty(&dev->txwi_cache)) { 64 t = list_first_entry(&dev->txwi_cache, struct mt76_txwi_cache, 65 list); 66 list_del(&t->list); 67 } 68 spin_unlock(&dev->lock); 69 70 return t; 71 } 72 73 static struct mt76_txwi_cache * 74 mt76_get_txwi(struct mt76_dev *dev) 75 { 76 struct mt76_txwi_cache *t = __mt76_get_txwi(dev); 77 78 if (t) 79 return t; 80 81 return mt76_alloc_txwi(dev); 82 } 83 84 void 85 mt76_put_txwi(struct mt76_dev *dev, struct mt76_txwi_cache *t) 86 { 87 if (!t) 88 return; 89 90 spin_lock(&dev->lock); 91 list_add(&t->list, &dev->txwi_cache); 92 spin_unlock(&dev->lock); 93 } 94 EXPORT_SYMBOL_GPL(mt76_put_txwi); 95 96 static void 97 mt76_free_pending_txwi(struct mt76_dev *dev) 98 { 99 struct mt76_txwi_cache *t; 100 101 local_bh_disable(); 102 while ((t = __mt76_get_txwi(dev)) != NULL) 103 dma_unmap_single(dev->dev, t->dma_addr, dev->drv->txwi_size, 104 DMA_TO_DEVICE); 105 local_bh_enable(); 106 } 107 108 static void 109 mt76_dma_sync_idx(struct mt76_dev *dev, struct mt76_queue *q) 110 { 111 Q_WRITE(dev, q, desc_base, q->desc_dma); 112 Q_WRITE(dev, q, ring_size, q->ndesc); 113 q->head = Q_READ(dev, q, dma_idx); 114 q->tail = q->head; 115 } 116 117 static void 118 mt76_dma_queue_reset(struct mt76_dev *dev, struct mt76_queue *q) 119 { 120 int i; 121 122 if (!q) 123 return; 124 125 /* clear descriptors */ 126 for (i = 0; i < q->ndesc; i++) 127 q->desc[i].ctrl = cpu_to_le32(MT_DMA_CTL_DMA_DONE); 128 129 Q_WRITE(dev, q, cpu_idx, 0); > 130 Q_WRITE(dev, q, dma_idx, 0); 131 mt76_dma_sync_idx(dev, q); 132 } 133 134 static int 135 mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q) 136 { 137 struct mtk_wed_device *wed = &dev->mmio.wed; 138 int ret, type, ring; 139 u8 flags = q->flags; 140 141 if (!mtk_wed_device_active(wed)) 142 q->flags &= ~MT_QFLAG_WED; 143 144 if (!(q->flags & MT_QFLAG_WED)) 145 return 0; 146 147 type = FIELD_GET(MT_QFLAG_WED_TYPE, q->flags); 148 ring = FIELD_GET(MT_QFLAG_WED_RING, q->flags); 149 150 switch (type) { 151 case MT76_WED_Q_TX: 152 ret = mtk_wed_device_tx_ring_setup(wed, ring, q->regs); 153 if (!ret) > 154 q->wed_regs = wed->tx_ring[ring].reg_base; 155 break; 156 case MT76_WED_Q_TXFREE: 157 /* WED txfree queue needs ring to be initialized before setup */ 158 q->flags = 0; 159 mt76_dma_queue_reset(dev, q); 160 mt76_dma_rx_fill(dev, q); 161 q->flags = flags; 162 > 163 ret = mtk_wed_device_txfree_ring_setup(wed, q->regs); 164 if (!ret) > 165 q->wed_regs = wed->txfree_ring.reg_base; 166 break; 167 default: 168 ret = -EINVAL; 169 } 170 171 return ret; 172 } 173 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org