tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 3516bd729358a2a9b090c1905bd2a3fa926e24c6
commit: 0cd1ad2d7fd41e0de4969fd1dd0aa846c99830d1 iwlwifi: move all bus-independent TX functions to common code
date: 3 months ago
config: powerpc-randconfig-r001-20210103 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 20670ba44066df0aae536822b7f7834ee3198c0d)
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://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0cd1ad2d7fd41e0de4969fd1dd0aa846c99830d1
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 0cd1ad2d7fd41e0de4969fd1dd0aa846c99830d1
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=powerpc
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
All warnings (new ones prefixed by >>):
>> drivers/net/wireless/intel/iwlwifi/queue/tx.c:310:18: warning: result of comparison of constant 262140 with expression of type 'u16' (aka 'unsigned short') is always false [-Wtautological-constant-out-of-range-compare]
if (WARN_ON(len > PAGE_SIZE - sizeof(void *))) {
~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/bug.h:188:25: note: expanded from macro 'WARN_ON'
int __ret_warn_on = !!(condition); \
^~~~~~~~~
include/linux/compiler.h:56:47: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:58:52: note: expanded from macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^~~~
>> drivers/net/wireless/intel/iwlwifi/queue/tx.c:310:18: warning: result of comparison of constant 262140 with expression of type 'u16' (aka 'unsigned short') is always false [-Wtautological-constant-out-of-range-compare]
if (WARN_ON(len > PAGE_SIZE - sizeof(void *))) {
~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/bug.h:188:25: note: expanded from macro 'WARN_ON'
int __ret_warn_on = !!(condition); \
^~~~~~~~~
include/linux/compiler.h:56:47: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:58:86: note: expanded from macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
~~~~~~~~~~~~~~~~~^~~~~
include/linux/compiler.h:69:3: note: expanded from macro '__trace_if_value'
(cond) ? \
^~~~
2 warnings generated.
vim +310 drivers/net/wireless/intel/iwlwifi/queue/tx.c
268
269 /*
270 * Add a TB and if needed apply the FH HW bug workaround;
271 * meta != NULL indicates that it's a page mapping and we
272 * need to dma_unmap_page() and set the meta->tbs bit in
273 * this case.
274 */
275 static int iwl_txq_gen2_set_tb_with_wa(struct iwl_trans *trans,
276 struct sk_buff *skb,
277 struct iwl_tfh_tfd *tfd,
278 dma_addr_t phys, void *virt,
279 u16 len, struct iwl_cmd_meta *meta)
280 {
281 dma_addr_t oldphys = phys;
282 struct page *page;
283 int ret;
284
285 if (unlikely(dma_mapping_error(trans->dev, phys)))
286 return -ENOMEM;
287
288 if (likely(!iwl_txq_crosses_4g_boundary(phys, len))) {
289 ret = iwl_txq_gen2_set_tb(trans, tfd, phys, len);
290
291 if (ret < 0)
292 goto unmap;
293
294 if (meta)
295 meta->tbs |= BIT(ret);
296
297 ret = 0;
298 goto trace;
299 }
300
301 /*
302 * Work around a hardware bug. If (as expressed in the
303 * condition above) the TB ends on a 32-bit boundary,
304 * then the next TB may be accessed with the wrong
305 * address.
306 * To work around it, copy the data elsewhere and make
307 * a new mapping for it so the device will not fail.
308 */
309
> 310 if (WARN_ON(len > PAGE_SIZE - sizeof(void *))) {
311 ret = -ENOBUFS;
312 goto unmap;
313 }
314
315 page = get_workaround_page(trans, skb);
316 if (!page) {
317 ret = -ENOMEM;
318 goto unmap;
319 }
320
321 memcpy(page_address(page), virt, len);
322
323 phys = dma_map_single(trans->dev, page_address(page), len,
324 DMA_TO_DEVICE);
325 if (unlikely(dma_mapping_error(trans->dev, phys)))
326 return -ENOMEM;
327 ret = iwl_txq_gen2_set_tb(trans, tfd, phys, len);
328 if (ret < 0) {
329 /* unmap the new allocation as single */
330 oldphys = phys;
331 meta = NULL;
332 goto unmap;
333 }
334 IWL_WARN(trans,
335 "TB bug workaround: copied %d bytes from 0x%llx to 0x%llx\n",
336 len, (unsigned long long)oldphys, (unsigned long long)phys);
337
338 ret = 0;
339 unmap:
340 if (meta)
341 dma_unmap_page(trans->dev, oldphys, len, DMA_TO_DEVICE);
342 else
343 dma_unmap_single(trans->dev, oldphys, len, DMA_TO_DEVICE);
344 trace:
345 trace_iwlwifi_dev_tx_tb(trans->dev, skb, virt, phys, len);
346
347 return ret;
348 }
349
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
On Sun, Jan 03, 2021 at 09:51:17AM +0800, kernel test robot wrote:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: 3516bd729358a2a9b090c1905bd2a3fa926e24c6
> commit: 0cd1ad2d7fd41e0de4969fd1dd0aa846c99830d1 iwlwifi: move all bus-independent TX functions to common code
> date: 3 months ago
> config: powerpc-randconfig-r001-20210103 (attached as .config)
> compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 20670ba44066df0aae536822b7f7834ee3198c0d)
> 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://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0cd1ad2d7fd41e0de4969fd1dd0aa846c99830d1
> git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
> git fetch --no-tags linus master
> git checkout 0cd1ad2d7fd41e0de4969fd1dd0aa846c99830d1
> # save the attached .config to linux build tree
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=powerpc
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <[email protected]>
>
> All warnings (new ones prefixed by >>):
>
> >> drivers/net/wireless/intel/iwlwifi/queue/tx.c:310:18: warning: result of comparison of constant 262140 with expression of type 'u16' (aka 'unsigned short') is always false [-Wtautological-constant-out-of-range-compare]
> if (WARN_ON(len > PAGE_SIZE - sizeof(void *))) {
> ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> include/asm-generic/bug.h:188:25: note: expanded from macro 'WARN_ON'
> int __ret_warn_on = !!(condition); \
> ^~~~~~~~~
> include/linux/compiler.h:56:47: note: expanded from macro 'if'
> #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
> ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
> include/linux/compiler.h:58:52: note: expanded from macro '__trace_if_var'
> #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
> ^~~~
> >> drivers/net/wireless/intel/iwlwifi/queue/tx.c:310:18: warning: result of comparison of constant 262140 with expression of type 'u16' (aka 'unsigned short') is always false [-Wtautological-constant-out-of-range-compare]
> if (WARN_ON(len > PAGE_SIZE - sizeof(void *))) {
> ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> include/asm-generic/bug.h:188:25: note: expanded from macro 'WARN_ON'
> int __ret_warn_on = !!(condition); \
> ^~~~~~~~~
> include/linux/compiler.h:56:47: note: expanded from macro 'if'
> #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
> ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
> include/linux/compiler.h:58:86: note: expanded from macro '__trace_if_var'
> #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
> ~~~~~~~~~~~~~~~~~^~~~~
> include/linux/compiler.h:69:3: note: expanded from macro '__trace_if_value'
> (cond) ? \
> ^~~~
> 2 warnings generated.
This warning happens due to PAGE_SIZE being 256K, which is larger than
u16.
$ rg "PPC_256K_PAGES|PPC_PAGE_SHIFT" .config
CONFIG_PPC_256K_PAGES=y
CONFIG_PPC_PAGE_SHIFT=18
On most configurations, which will use 64K or less, this check is valid.
I am not sure how it should be dealt with, aside from increasing len to
u32.
Cheers,
Nathan