CC: [email protected]
CC: [email protected]
CC: [email protected]
TO: Alexandre Ghiti <[email protected]>
CC: Palmer Dabbelt <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   3498e7f2bb415e447354a3debef6738d9655768c
commit: 0aba691a7443a7541c1dc56423e0c92cc6ea7164 riscv: Introduce 
va_kernel_pa_offset for 32-bit kernel
date:   4 months ago
:::::: branch date: 5 hours ago
:::::: commit date: 4 months ago
config: riscv-randconfig-c006-20211127 
(https://download.01.org/0day-ci/archive/20211128/[email protected]/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 
5162b558d8c0b542e752b037e72a69d5fd51eb1e)
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 riscv cross compiling tool for clang build
        # apt-get install binutils-riscv64-linux-gnu
        # 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0aba691a7443a7541c1dc56423e0c92cc6ea7164
        git remote add linus 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout 0aba691a7443a7541c1dc56423e0c92cc6ea7164
        # save the config file to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv 
clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>


clang-analyzer warnings: (new ones prefixed by >>)
                   ^
   include/linux/compiler.h:56:23: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                         ^
   include/kunit/test.h:405:31: note: Loop condition is false.  Exiting loop
           struct kunit_resource *res = container_of(kref, struct 
kunit_resource,
                                        ^
   include/linux/kernel.h:495:2: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
           ^
   include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG'
   #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                       ^
   include/linux/compiler_types.h:328:2: note: expanded from macro 
'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, 
__COUNTER__)
           ^
   include/linux/compiler_types.h:316:2: note: expanded from macro 
'_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:306:2: note: expanded from macro 
'__compiletime_assert'
           do {                                                            \
           ^
   include/kunit/test.h:409:2: note: Assuming field 'free' is non-null
           if (res->free) {
           ^
   include/linux/compiler.h:56:45: 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))
                                                      ^~~~
   include/kunit/test.h:409:2: note: '?' condition is false
           if (res->free) {
           ^
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:31: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                 ^
   include/kunit/test.h:409:11: note: Field 'free' is non-null
           if (res->free) {
                    ^
   include/kunit/test.h:409:2: note: '?' condition is true
           if (res->free) {
           ^
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:69: 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:2: note: expanded from macro '__trace_if_value'
           (cond) ?                                        \
           ^
   include/kunit/test.h:409:2: note: Taking true branch
           if (res->free) {
           ^
   include/linux/compiler.h:56:23: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                         ^
   include/kunit/test.h:411:3: note: Argument to kfree() is the address of a 
local stack variable, which is not memory allocated by malloc()
                   kfree(res);
                   ^     ~~~
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   4 warnings generated.
   Suppressed 4 warnings (4 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   12 warnings generated.
   kernel/sched/fair.c:644:15: warning: Value stored to 'nr_running' during its 
initialization is never read [clang-analyzer-deadcode.DeadStores]
           unsigned int nr_running = cfs_rq->nr_running;
                        ^~~~~~~~~~   ~~~~~~~~~~~~~~~~~~
   kernel/sched/fair.c:644:15: note: Value stored to 'nr_running' during its 
initialization is never read
           unsigned int nr_running = cfs_rq->nr_running;
                        ^~~~~~~~~~   ~~~~~~~~~~~~~~~~~~
   Suppressed 11 warnings (4 in non-user code, 7 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (4 in non-user code, 5 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   6 warnings generated.
   Suppressed 6 warnings (4 in non-user code, 2 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   4 warnings generated.
   Suppressed 4 warnings (4 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (2 in non-user code, 1 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   5 warnings generated.
>> drivers/nvme/host/core.c:872:4: warning: Potential leak of memory pointed to 
>> by '_x' [clang-analyzer-unix.Malloc]
                           clear_bit_unlock(0, &ns->ctrl->discard_page_busy);
                           ^
   drivers/nvme/host/core.c:845:10: note: Calling 'kzalloc'
           range = kzalloc(alloc_size, GFP_ATOMIC | __GFP_NOWARN);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/slab.h:721:9: note: Memory is allocated
           return kmalloc(size, flags | __GFP_ZERO);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/nvme/host/core.c:845:10: note: Returned allocated memory
           range = kzalloc(alloc_size, GFP_ATOMIC | __GFP_NOWARN);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/nvme/host/core.c:846:6: note: Assuming 'range' is non-null
           if (!range) {
               ^
   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/nvme/host/core.c:846:2: note: '?' condition is false
           if (!range) {
           ^
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:31: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                 ^
   drivers/nvme/host/core.c:846:7: note: 'range' is non-null
           if (!range) {
                ^
   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) ?                                        \
            ^~~~
   drivers/nvme/host/core.c:846:2: note: '?' condition is false
           if (!range) {
           ^
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:69: 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:2: note: expanded from macro '__trace_if_value'
           (cond) ?                                        \
           ^
   drivers/nvme/host/core.c:846:2: note: Taking false branch
           if (!range) {
           ^
   include/linux/compiler.h:56:23: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                         ^
   drivers/nvme/host/core.c:858:2: note: Assuming field 'bio' is null
           __rq_for_each_bio(bio, req) {
           ^
   include/linux/blkdev.h:848:2: note: expanded from macro '__rq_for_each_bio'
           if ((rq->bio))                  \
           ^~~~~~~~~~~~~~
   include/linux/compiler.h:56:45: 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/nvme/host/core.c:858:2: note: '?' condition is false
           __rq_for_each_bio(bio, req) {
           ^
   include/linux/blkdev.h:848:2: note: expanded from macro '__rq_for_each_bio'
           if ((rq->bio))                  \
           ^
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:31: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                 ^
   drivers/nvme/host/core.c:858:2: note: Field 'bio' is null
           __rq_for_each_bio(bio, req) {
           ^
   include/linux/blkdev.h:848:11: note: expanded from macro '__rq_for_each_bio'
           if ((rq->bio))                  \
                    ^
   drivers/nvme/host/core.c:858:2: note: '?' condition is false
           __rq_for_each_bio(bio, req) {
           ^
   include/linux/blkdev.h:848:2: note: expanded from macro '__rq_for_each_bio'
           if ((rq->bio))                  \
           ^
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:69: 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:58:31: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                 ^
   drivers/nvme/host/core.c:871:7: note: '_x' is >= -1073741824
                   if (virt_to_page(range) == ns->ctrl->discard_page)
                       ^
   arch/riscv/include/asm/page.h:152:42: note: expanded from macro 
'virt_to_page'
   #define virt_to_page(vaddr)     (pfn_to_page(virt_to_pfn(vaddr)))
                                                ^
   arch/riscv/include/asm/page.h:149:41: note: expanded from macro 'virt_to_pfn'
   #define virt_to_pfn(vaddr)      (phys_to_pfn(__pa(vaddr)))
                                                ^
   arch/riscv/include/asm/page.h:143:18: note: expanded from macro '__pa'
   #define __pa(x)         __virt_to_phys((unsigned long)(x))
                           ^
   note: (skipping 6 expansions in backtrace; use -fmacro-backtrace-limit=0 to 
see all)
   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) ?                                        \
            ^~~~
   drivers/nvme/host/core.c:871:7: note: Left side of '&&' is true
                   if (virt_to_page(range) == ns->ctrl->discard_page)
                       ^
   arch/riscv/include/asm/page.h:152:42: note: expanded from macro 
'virt_to_page'
   #define virt_to_page(vaddr)     (pfn_to_page(virt_to_pfn(vaddr)))
                                                ^
   arch/riscv/include/asm/page.h:149:41: note: expanded from macro 'virt_to_pfn'
   #define virt_to_pfn(vaddr)      (phys_to_pfn(__pa(vaddr)))
                                                ^
   arch/riscv/include/asm/page.h:143:18: note: expanded from macro '__pa'
   #define __pa(x)         __virt_to_phys((unsigned long)(x))
                           ^
   arch/riscv/include/asm/page.h:138:27: note: expanded from macro 
'__virt_to_phys'
   #define __virt_to_phys(x)       __va_to_pa_nodebug(x)
                                   ^
   arch/riscv/include/asm/page.h:130:2: note: expanded from macro 
'__va_to_pa_nodebug'
           is_linear_mapping(_x) ?                                              
   \
           ^
   arch/riscv/include/asm/page.h:109:3: note: expanded from macro 
'is_linear_mapping'
           ((x) >= PAGE_OFFSET && (!IS_ENABLED(CONFIG_64BIT) || (x) < 
kernel_map.virt_addr))
            ^
   drivers/nvme/host/core.c:871:7: note: Left side of '||' is true
                   if (virt_to_page(range) == ns->ctrl->discard_page)
                       ^
   arch/riscv/include/asm/page.h:152:42: note: expanded from macro 
'virt_to_page'
   #define virt_to_page(vaddr)     (pfn_to_page(virt_to_pfn(vaddr)))
                                                ^
   arch/riscv/include/asm/page.h:149:41: note: expanded from macro 'virt_to_pfn'
   #define virt_to_pfn(vaddr)      (phys_to_pfn(__pa(vaddr)))
                                                ^
   arch/riscv/include/asm/page.h:143:18: note: expanded from macro '__pa'
   #define __pa(x)         __virt_to_phys((unsigned long)(x))
                           ^
   arch/riscv/include/asm/page.h:138:27: note: expanded from macro 
'__virt_to_phys'
   #define __virt_to_phys(x)       __va_to_pa_nodebug(x)
                                   ^
   arch/riscv/include/asm/page.h:130:2: note: expanded from macro 
'__va_to_pa_nodebug'
           is_linear_mapping(_x) ?                                              
   \
           ^
   arch/riscv/include/asm/page.h:109:52: note: expanded from macro 
'is_linear_mapping'
           ((x) >= PAGE_OFFSET && (!IS_ENABLED(CONFIG_64BIT) || (x) < 
kernel_map.virt_addr))
                                                             ^
   drivers/nvme/host/core.c:871:3: note: Assuming the condition is true
                   if (virt_to_page(range) == ns->ctrl->discard_page)
                   ^
   include/linux/compiler.h:56:44: 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) ?                                        \
            ^~~~
   drivers/nvme/host/core.c:871:3: note: '?' condition is true
                   if (virt_to_page(range) == ns->ctrl->discard_page)
                   ^
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:69: 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:2: note: expanded from macro '__trace_if_value'
           (cond) ?                                        \
           ^
   drivers/nvme/host/core.c:871:3: note: Taking true branch
                   if (virt_to_page(range) == ns->ctrl->discard_page)
                   ^
   include/linux/compiler.h:56:23: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                         ^
   drivers/nvme/host/core.c:872:4: note: Potential leak of memory pointed to by 
'_x'
                           clear_bit_unlock(0, &ns->ctrl->discard_page_busy);
                           ^
>> drivers/nvme/host/core.c:872:4: warning: Potential leak of memory pointed to 
>> by '_y' [clang-analyzer-unix.Malloc]
                           clear_bit_unlock(0, &ns->ctrl->discard_page_busy);
                           ^
   drivers/nvme/host/core.c:845:10: note: Calling 'kzalloc'
           range = kzalloc(alloc_size, GFP_ATOMIC | __GFP_NOWARN);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/slab.h:721:9: note: Memory is allocated
           return kmalloc(size, flags | __GFP_ZERO);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/nvme/host/core.c:845:10: note: Returned allocated memory
           range = kzalloc(alloc_size, GFP_ATOMIC | __GFP_NOWARN);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/nvme/host/core.c:846:6: note: Assuming 'range' is non-null
           if (!range) {
               ^
   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/nvme/host/core.c:846:2: note: '?' condition is false
           if (!range) {
           ^
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:31: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                 ^
   drivers/nvme/host/core.c:846:7: note: 'range' is non-null
           if (!range) {
                ^
   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) ?                                        \
            ^~~~
   drivers/nvme/host/core.c:846:2: note: '?' condition is false
           if (!range) {
           ^
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:69: 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:2: note: expanded from macro '__trace_if_value'
           (cond) ?                                        \
           ^
   drivers/nvme/host/core.c:846:2: note: Taking false branch
           if (!range) {
           ^
   include/linux/compiler.h:56:23: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                         ^
   drivers/nvme/host/core.c:858:2: note: Assuming field 'bio' is null
           __rq_for_each_bio(bio, req) {
           ^
   include/linux/blkdev.h:848:2: note: expanded from macro '__rq_for_each_bio'
           if ((rq->bio))                  \
           ^~~~~~~~~~~~~~
   include/linux/compiler.h:56:45: 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/nvme/host/core.c:858:2: note: '?' condition is false
           __rq_for_each_bio(bio, req) {
           ^
   include/linux/blkdev.h:848:2: note: expanded from macro '__rq_for_each_bio'
           if ((rq->bio))                  \
           ^
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:31: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                 ^
   drivers/nvme/host/core.c:858:2: note: Field 'bio' is null
           __rq_for_each_bio(bio, req) {
           ^
   include/linux/blkdev.h:848:11: note: expanded from macro '__rq_for_each_bio'
           if ((rq->bio))                  \
                    ^
   drivers/nvme/host/core.c:858:2: note: '?' condition is false
           __rq_for_each_bio(bio, req) {
           ^
   include/linux/blkdev.h:848:2: note: expanded from macro '__rq_for_each_bio'
           if ((rq->bio))                  \
           ^
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:69: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))

vim +/_x +872 drivers/nvme/host/core.c

8093f7ca73c163 Ming Lin             2016-04-12  830  
fc17b6534eb839 Christoph Hellwig    2017-06-03  831  static blk_status_t 
nvme_setup_discard(struct nvme_ns *ns, struct request *req,
8093f7ca73c163 Ming Lin             2016-04-12  832             struct 
nvme_command *cmnd)
8093f7ca73c163 Ming Lin             2016-04-12  833  {
b35ba01ea69791 Christoph Hellwig    2017-02-08  834     unsigned short segments 
= blk_rq_nr_discard_segments(req), n = 0;
8093f7ca73c163 Ming Lin             2016-04-12  835     struct nvme_dsm_range 
*range;
b35ba01ea69791 Christoph Hellwig    2017-02-08  836     struct bio *bio;
8093f7ca73c163 Ming Lin             2016-04-12  837  
530436c45ef2e4 Eduard Hasenleithner 2019-11-12  838     /*
530436c45ef2e4 Eduard Hasenleithner 2019-11-12  839      * Some devices do not 
consider the DSM 'Number of Ranges' field when
530436c45ef2e4 Eduard Hasenleithner 2019-11-12  840      * determining how much 
data to DMA. Always allocate memory for maximum
530436c45ef2e4 Eduard Hasenleithner 2019-11-12  841      * number of segments 
to prevent device reading beyond end of buffer.
530436c45ef2e4 Eduard Hasenleithner 2019-11-12  842      */
530436c45ef2e4 Eduard Hasenleithner 2019-11-12  843     static const size_t 
alloc_size = sizeof(*range) * NVME_DSM_MAX_RANGES;
530436c45ef2e4 Eduard Hasenleithner 2019-11-12  844  
530436c45ef2e4 Eduard Hasenleithner 2019-11-12  845     range = 
kzalloc(alloc_size, GFP_ATOMIC | __GFP_NOWARN);
cb5b7262b011cf Jens Axboe           2018-12-12  846     if (!range) {
cb5b7262b011cf Jens Axboe           2018-12-12  847             /*
cb5b7262b011cf Jens Axboe           2018-12-12  848              * If we fail 
allocation our range, fallback to the controller
cb5b7262b011cf Jens Axboe           2018-12-12  849              * discard 
page. If that's also busy, it's safe to return
cb5b7262b011cf Jens Axboe           2018-12-12  850              * busy, as we 
know we can make progress once that's freed.
cb5b7262b011cf Jens Axboe           2018-12-12  851              */
cb5b7262b011cf Jens Axboe           2018-12-12  852             if 
(test_and_set_bit_lock(0, &ns->ctrl->discard_page_busy))
fc17b6534eb839 Christoph Hellwig    2017-06-03  853                     return 
BLK_STS_RESOURCE;
8093f7ca73c163 Ming Lin             2016-04-12  854  
cb5b7262b011cf Jens Axboe           2018-12-12  855             range = 
page_address(ns->ctrl->discard_page);
cb5b7262b011cf Jens Axboe           2018-12-12  856     }
cb5b7262b011cf Jens Axboe           2018-12-12  857  
b35ba01ea69791 Christoph Hellwig    2017-02-08  858     __rq_for_each_bio(bio, 
req) {
314d48dd224897 Damien Le Moal       2019-10-21  859             u64 slba = 
nvme_sect_to_lba(ns, bio->bi_iter.bi_sector);
b35ba01ea69791 Christoph Hellwig    2017-02-08  860             u32 nlb = 
bio->bi_iter.bi_size >> ns->lba_shift;
b35ba01ea69791 Christoph Hellwig    2017-02-08  861  
8cb6af7b3a6d47 Keith Busch          2018-01-31  862             if (n < 
segments) {
b35ba01ea69791 Christoph Hellwig    2017-02-08  863                     
range[n].cattr = cpu_to_le32(0);
b35ba01ea69791 Christoph Hellwig    2017-02-08  864                     
range[n].nlb = cpu_to_le32(nlb);
b35ba01ea69791 Christoph Hellwig    2017-02-08  865                     
range[n].slba = cpu_to_le64(slba);
8cb6af7b3a6d47 Keith Busch          2018-01-31  866             }
b35ba01ea69791 Christoph Hellwig    2017-02-08  867             n++;
b35ba01ea69791 Christoph Hellwig    2017-02-08  868     }
b35ba01ea69791 Christoph Hellwig    2017-02-08  869  
b35ba01ea69791 Christoph Hellwig    2017-02-08  870     if (WARN_ON_ONCE(n != 
segments)) {
cb5b7262b011cf Jens Axboe           2018-12-12  871             if 
(virt_to_page(range) == ns->ctrl->discard_page)
cb5b7262b011cf Jens Axboe           2018-12-12 @872                     
clear_bit_unlock(0, &ns->ctrl->discard_page_busy);
cb5b7262b011cf Jens Axboe           2018-12-12  873             else
b35ba01ea69791 Christoph Hellwig    2017-02-08  874                     
kfree(range);
fc17b6534eb839 Christoph Hellwig    2017-06-03  875             return 
BLK_STS_IOERR;
b35ba01ea69791 Christoph Hellwig    2017-02-08  876     }
8093f7ca73c163 Ming Lin             2016-04-12  877  
8093f7ca73c163 Ming Lin             2016-04-12  878     cmnd->dsm.opcode = 
nvme_cmd_dsm;
ed754e5deeb17f Christoph Hellwig    2017-11-09  879     cmnd->dsm.nsid = 
cpu_to_le32(ns->head->ns_id);
f1dd03a84dbf3e Christoph Hellwig    2017-03-31  880     cmnd->dsm.nr = 
cpu_to_le32(segments - 1);
8093f7ca73c163 Ming Lin             2016-04-12  881     cmnd->dsm.attributes = 
cpu_to_le32(NVME_DSMGMT_AD);
8093f7ca73c163 Ming Lin             2016-04-12  882  
f9d03f96b98800 Christoph Hellwig    2016-12-08  883     
req->special_vec.bv_page = virt_to_page(range);
f9d03f96b98800 Christoph Hellwig    2016-12-08  884     
req->special_vec.bv_offset = offset_in_page(range);
530436c45ef2e4 Eduard Hasenleithner 2019-11-12  885     req->special_vec.bv_len 
= alloc_size;
f9d03f96b98800 Christoph Hellwig    2016-12-08  886     req->rq_flags |= 
RQF_SPECIAL_PAYLOAD;
8093f7ca73c163 Ming Lin             2016-04-12  887  
fc17b6534eb839 Christoph Hellwig    2017-06-03  888     return BLK_STS_OK;
8093f7ca73c163 Ming Lin             2016-04-12  889  }
8093f7ca73c163 Ming Lin             2016-04-12  890  

:::::: The code at line 872 was first introduced by commit
:::::: cb5b7262b011cfb793519bf97e54dff5282da23c nvme: provide fallback for 
discard alloc failure

:::::: TO: Jens Axboe <[email protected]>
:::::: CC: Christoph Hellwig <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to