:::::: 
:::::: Manual check reason: "low confidence static check warning: 
drivers/ufs/core/ufshpb.c:1583:17: warning: Access to field 'is_last' results 
in a dereference of an undefined pointer value (loaded from variable 'srgn') 
[clang-analyzer-core.NullDereference]"
:::::: 

CC: [email protected]
CC: [email protected]
BCC: [email protected]
CC: [email protected]
TO: Bart Van Assche <[email protected]>
CC: "Martin K. Petersen" <[email protected]>
CC: Bean Huo <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   018ab4fabddd94f1c96f3b59e180691b9e88d5d8
commit: dd11376b9f1b73aca3f8c6eb541486bbb6996f05 scsi: ufs: Split the 
drivers/scsi/ufs directory
date:   4 weeks ago
:::::: branch date: 8 hours ago
:::::: commit date: 4 weeks ago
config: arm-randconfig-c002-20220613 
(https://download.01.org/0day-ci/archive/20220615/[email protected]/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 
d378268ead93c85803c270277f0243737b536ae7)
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 arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=dd11376b9f1b73aca3f8c6eb541486bbb6996f05
        git remote add linus 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout dd11376b9f1b73aca3f8c6eb541486bbb6996f05
        # save the config file
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm 
clang-analyzer 

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


clang-analyzer warnings: (new ones prefixed by >>)
   include/linux/of.h:265:2: note: expanded from macro 
'for_each_of_allnodes_from'
           for (dn = __of_find_all_nodes(from); dn; dn = 
__of_find_all_nodes(dn))
           ^
   drivers/of/unittest.c:3131:6: note: 'of_symbols' is non-null
           if (of_symbols) {
               ^~~~~~~~~~
   drivers/of/unittest.c:3131:2: note: Taking true branch
           if (of_symbols) {
           ^
   drivers/of/unittest.c:3133:29: note: Access to field 'properties' results in 
a dereference of an undefined pointer value (loaded from variable 
'overlay_base_symbols')
                   for_each_property_of_node(overlay_base_symbols, prop) {
                                             ^
   include/linux/of.h:359:12: note: expanded from macro 
'for_each_property_of_node'
           for (pp = dn->properties; pp != NULL; pp = pp->next)
                     ^~
   Suppressed 48 warnings (48 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.
   55 warnings generated.
   drivers/ufs/core/ufshpb.c:306:2: warning: Call to function 'memcpy' is 
insecure as it does not provide security checks introduced in the C11 standard. 
Replace with analogous functions that support length arguments or provides 
boundary checks such as 'memcpy_s' in case of C11 
[clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memcpy(ppn_buf, page_address(page) + (offset * HPB_ENTRY_SIZE),
           ^
   include/linux/fortify-string.h:369:26: note: expanded from macro 'memcpy'
   #define memcpy(p, q, s)  __fortify_memcpy_chk(p, q, s,                  \
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/fortify-string.h:362:2: note: expanded from macro 
'__fortify_memcpy_chk'
           __underlying_##op(p, q, __fortify_size);                        \
           ^~~~~~~~~~~~~~~~~
   note: expanded from here
   include/linux/fortify-string.h:45:29: note: expanded from macro 
'__underlying_memcpy'
   #define __underlying_memcpy     __builtin_memcpy
                                   ^~~~~~~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:306:2: note: Call to function 'memcpy' is insecure 
as it does not provide security checks introduced in the C11 standard. Replace 
with analogous functions that support length arguments or provides boundary 
checks such as 'memcpy_s' in case of C11
           memcpy(ppn_buf, page_address(page) + (offset * HPB_ENTRY_SIZE),
           ^
   include/linux/fortify-string.h:369:26: note: expanded from macro 'memcpy'
   #define memcpy(p, q, s)  __fortify_memcpy_chk(p, q, s,                  \
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/fortify-string.h:362:2: note: expanded from macro 
'__fortify_memcpy_chk'
           __underlying_##op(p, q, __fortify_size);                        \
           ^~~~~~~~~~~~~~~~~
   note: expanded from here
   include/linux/fortify-string.h:45:29: note: expanded from macro 
'__underlying_memcpy'
   #define __underlying_memcpy     __builtin_memcpy
                                   ^~~~~~~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:336:2: warning: Call to function 'memcpy' is 
insecure as it does not provide security checks introduced in the C11 standard. 
Replace with analogous functions that support length arguments or provides 
boundary checks such as 'memcpy_s' in case of C11 
[clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memcpy(&cdb[6], &ppn_tmp, sizeof(__be64));
           ^
   include/linux/fortify-string.h:369:26: note: expanded from macro 'memcpy'
   #define memcpy(p, q, s)  __fortify_memcpy_chk(p, q, s,                  \
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/fortify-string.h:362:2: note: expanded from macro 
'__fortify_memcpy_chk'
           __underlying_##op(p, q, __fortify_size);                        \
           ^~~~~~~~~~~~~~~~~
   note: expanded from here
   include/linux/fortify-string.h:45:29: note: expanded from macro 
'__underlying_memcpy'
   #define __underlying_memcpy     __builtin_memcpy
                                   ^~~~~~~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:336:2: note: Call to function 'memcpy' is insecure 
as it does not provide security checks introduced in the C11 standard. Replace 
with analogous functions that support length arguments or provides boundary 
checks such as 'memcpy_s' in case of C11
           memcpy(&cdb[6], &ppn_tmp, sizeof(__be64));
           ^
   include/linux/fortify-string.h:369:26: note: expanded from macro 'memcpy'
   #define memcpy(p, q, s)  __fortify_memcpy_chk(p, q, s,                  \
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/fortify-string.h:362:2: note: expanded from macro 
'__fortify_memcpy_chk'
           __underlying_##op(p, q, __fortify_size);                        \
           ^~~~~~~~~~~~~~~~~
   note: expanded from here
   include/linux/fortify-string.h:45:29: note: expanded from macro 
'__underlying_memcpy'
   #define __underlying_memcpy     __builtin_memcpy
                                   ^~~~~~~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:754:3: warning: Call to function 'memset' is 
insecure as it does not provide security checks introduced in the C11 standard. 
Replace with analogous functions that support length arguments or provides 
boundary checks such as 'memset_s' in case of C11 
[clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
                   clear_page(page_address(mctx->m_page[i]));
                   ^
   arch/arm/include/asm/page-nommu.h:11:26: note: expanded from macro 
'clear_page'
   #define clear_page(page)        memset((page), 0, PAGE_SIZE)
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/fortify-string.h:272:25: note: expanded from macro 'memset'
   #define memset(p, c, s) __fortify_memset_chk(p, c, s,                   \
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/fortify-string.h:265:2: note: expanded from macro 
'__fortify_memset_chk'
           __underlying_memset(p, c, __fortify_size);                      \
           ^~~~~~~~~~~~~~~~~~~
   include/linux/fortify-string.h:47:29: note: expanded from macro 
'__underlying_memset'
   #define __underlying_memset     __builtin_memset
                                   ^~~~~~~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:754:3: note: Call to function 'memset' is insecure 
as it does not provide security checks introduced in the C11 standard. Replace 
with analogous functions that support length arguments or provides boundary 
checks such as 'memset_s' in case of C11
                   clear_page(page_address(mctx->m_page[i]));
                   ^
   arch/arm/include/asm/page-nommu.h:11:26: note: expanded from macro 
'clear_page'
   #define clear_page(page)        memset((page), 0, PAGE_SIZE)
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/fortify-string.h:272:25: note: expanded from macro 'memset'
   #define memset(p, c, s) __fortify_memset_chk(p, c, s,                   \
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/fortify-string.h:265:2: note: expanded from macro 
'__fortify_memset_chk'
           __underlying_memset(p, c, __fortify_size);                      \
           ^~~~~~~~~~~~~~~~~~~
   include/linux/fortify-string.h:47:29: note: expanded from macro 
'__underlying_memset'
   #define __underlying_memset     __builtin_memset
                                   ^~~~~~~~~~~~~~~~
>> drivers/ufs/core/ufshpb.c:1583:17: warning: Access to field 'is_last' 
>> results in a dereference of an undefined pointer value (loaded from variable 
>> 'srgn') [clang-analyzer-core.NullDereference]
                   srgn->is_last = true;
                                 ^
   drivers/ufs/core/ufshpb.c:2498:6: note: Assuming 'lun' is < field 
'max_lu_supported'
           if (lun >= hba->dev_info.max_lu_supported)
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:2498:2: note: Taking false branch
           if (lun >= hba->dev_info.max_lu_supported)
           ^
   drivers/ufs/core/ufshpb.c:2502:6: note: 'ret' is 0
           if (ret)
               ^~~
   drivers/ufs/core/ufshpb.c:2502:2: note: Taking false branch
           if (ret)
           ^
   drivers/ufs/core/ufshpb.c:2505:8: note: Calling 'ufshpb_alloc_hpb_lu'
           hpb = ufshpb_alloc_hpb_lu(hba, sdev, &hba->ufshpb_dev,
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:2230:6: note: Assuming 'hpb' is non-null
           if (!hpb)
               ^~~~
   drivers/ufs/core/ufshpb.c:2230:2: note: Taking false branch
           if (!hpb)
           ^
   drivers/ufs/core/ufshpb.c:2238:8: note: Calling 'ufshpb_lu_hpb_init'
           ret = ufshpb_lu_hpb_init(hba, hpb);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:2153:2: note: Loop condition is false.  Exiting 
loop
           spin_lock_init(&hpb->rgn_state_lock);
           ^
   include/linux/spinlock.h:339:34: note: expanded from macro 'spin_lock_init'
   # define spin_lock_init(_lock)                  \
                                                   ^
   drivers/ufs/core/ufshpb.c:2154:2: note: Loop condition is false.  Exiting 
loop
           spin_lock_init(&hpb->rsp_list_lock);
           ^
   include/linux/spinlock.h:339:34: note: expanded from macro 'spin_lock_init'
   # define spin_lock_init(_lock)                  \
                                                   ^
   drivers/ufs/core/ufshpb.c:2155:2: note: Loop condition is false.  Exiting 
loop
           spin_lock_init(&hpb->param_lock);
           ^
   include/linux/spinlock.h:339:34: note: expanded from macro 'spin_lock_init'
   # define spin_lock_init(_lock)                  \
                                                   ^
   drivers/ufs/core/ufshpb.c:2162:2: note: Loop condition is false.  Exiting 
loop
           INIT_WORK(&hpb->map_work, ufshpb_map_work_handler);
           ^
   include/linux/workqueue.h:245:2: note: expanded from macro 'INIT_WORK'
           __INIT_WORK((_work), (_func), 0)
           ^
   include/linux/workqueue.h:236:2: note: expanded from macro '__INIT_WORK'
           do {                                                            \
           ^
   drivers/ufs/core/ufshpb.c:2163:6: note: Assuming field 'is_hcm' is false
           if (hpb->is_hcm) {
               ^~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:2163:2: note: Taking false branch
           if (hpb->is_hcm) {
           ^
   drivers/ufs/core/ufshpb.c:2172:6: note: Assuming field 'map_req_cache' is 
non-null
           if (!hpb->map_req_cache) {
               ^~~~~~~~~~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:2172:2: note: Taking false branch
           if (!hpb->map_req_cache) {
           ^
   drivers/ufs/core/ufshpb.c:2181:6: note: Assuming field 'm_page_cache' is 
non-null
           if (!hpb->m_page_cache) {
               ^~~~~~~~~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:2181:2: note: Taking false branch
           if (!hpb->m_page_cache) {
           ^
   drivers/ufs/core/ufshpb.c:2189:6: note: 'ret' is 0
           if (ret) {
               ^~~
   drivers/ufs/core/ufshpb.c:2189:2: note: Taking false branch
           if (ret) {
           ^
   drivers/ufs/core/ufshpb.c:2195:8: note: Calling 'ufshpb_alloc_region_tbl'
           ret = ufshpb_alloc_region_tbl(hba, hpb);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:1659:6: note: Assuming 'rgn_table' is non-null
           if (!rgn_table)
               ^~~~~~~~~~
   drivers/ufs/core/ufshpb.c:1659:2: note: Taking false branch
           if (!rgn_table)
           ^
   drivers/ufs/core/ufshpb.c:1662:20: note: Assuming 'rgn_idx' is < field 
'rgns_per_lu'
           for (rgn_idx = 0; rgn_idx < hpb->rgns_per_lu; rgn_idx++) {
                             ^~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:1662:2: note: Loop condition is true.  Entering 
loop body
           for (rgn_idx = 0; rgn_idx < hpb->rgns_per_lu; rgn_idx++) {
           ^
   drivers/ufs/core/ufshpb.c:1669:3: note: Loop condition is false.  Exiting 
loop
                   spin_lock_init(&rgn->rgn_lock);
                   ^
   include/linux/spinlock.h:339:34: note: expanded from macro 'spin_lock_init'
   # define spin_lock_init(_lock)                  \
                                                   ^
   drivers/ufs/core/ufshpb.c:1675:7: note: Assuming the condition is true
                   if (rgn_idx == hpb->rgns_per_lu - 1) {
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:1675:3: note: Taking true branch
                   if (rgn_idx == hpb->rgns_per_lu - 1) {
                   ^
   drivers/ufs/core/ufshpb.c:1682:7: note: 'ret' is 0
                   if (ret)
                       ^~~
   drivers/ufs/core/ufshpb.c:1682:3: note: Taking false branch
                   if (ret)
                   ^
   drivers/ufs/core/ufshpb.c:1684:3: note: Calling 'ufshpb_init_subregion_tbl'
                   ufshpb_init_subregion_tbl(hpb, rgn, last_srgn);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:1572:2: note: 'srgn' declared without an initial 
value
           struct ufshpb_subregion *srgn;
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:1574:2: note: Assuming 'srgn_idx' is >= field 
'srgn_cnt'
           for_each_sub_region(rgn, srgn_idx, srgn) {
           ^
   drivers/ufs/core/ufshpb.h:143:8: note: expanded from macro 
'for_each_sub_region'
                ((i) < (rgn)->srgn_cnt) && ((srgn) = &(rgn)->srgn_tbl[i]); \
                 ^~~~~~~~~~~~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:1574:2: note: Left side of '&&' is false
           for_each_sub_region(rgn, srgn_idx, srgn) {
           ^
   drivers/ufs/core/ufshpb.h:143:31: note: expanded from macro 
'for_each_sub_region'
                ((i) < (rgn)->srgn_cnt) && ((srgn) = &(rgn)->srgn_tbl[i]); \
                                        ^
   drivers/ufs/core/ufshpb.c:1582:15: note: 'last' is true
           if (unlikely(last && hpb->last_srgn_entries))
                        ^
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   drivers/ufs/core/ufshpb.c:1582:15: note: Left side of '&&' is true
           if (unlikely(last && hpb->last_srgn_entries))
                        ^
   drivers/ufs/core/ufshpb.c:1582:6: note: Assuming the condition is false
           if (unlikely(last && hpb->last_srgn_entries))
               ^
   include/linux/compiler.h:78:40: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                             ^~~~
   drivers/ufs/core/ufshpb.c:1582:2: note: Taking true branch
           if (unlikely(last && hpb->last_srgn_entries))
           ^
   drivers/ufs/core/ufshpb.c:1583:17: note: Access to field 'is_last' results 
in a dereference of an undefined pointer value (loaded from variable 'srgn')
                   srgn->is_last = true;
                   ~~~~          ^
>> drivers/ufs/core/ufshpb.c:1640:22: warning: Division by zero 
>> [clang-analyzer-core.DivideZero]
           hpb->srgns_per_lu = DIV_ROUND_UP(hpb_lu_info->num_blocks,
                               ^
   include/linux/math.h:37:22: note: expanded from macro 'DIV_ROUND_UP'
   #define DIV_ROUND_UP __KERNEL_DIV_ROUND_UP
                        ^
   include/uapi/linux/const.h:34:54: note: expanded from macro 
'__KERNEL_DIV_ROUND_UP'
   #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
                                        ~~~~~~~~~~~~~~~~^~~~~
   drivers/ufs/core/ufshpb.c:1606:6: note: Assuming the condition is true
           if (ufshpb_is_legacy(hba))
               ^~~~~~~~~~~~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:1606:2: note: Taking true branch
           if (ufshpb_is_legacy(hba))
           ^
   drivers/ufs/core/ufshpb.c:1612:23: note: Assuming field 'num_pinned' is 0
           hpb->lu_pinned_end = hpb_lu_info->num_pinned ?
                                ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/ufs/core/ufshpb.c:1612:23: note: '?' condition is false
   drivers/ufs/core/ufshpb.c:1620:2: note: Left side of '&&' is false
           do_div(rgn_mem_size, HPB_ENTRY_BLOCK_SIZE);
           ^
   include/asm-generic/div64.h:223:35: note: expanded from macro 'do_div'
           if (__builtin_constant_p(__base) &&             \
                                            ^
   drivers/ufs/core/ufshpb.c:1620:2: note: Left side of '&&' is false
           do_div(rgn_mem_size, HPB_ENTRY_BLOCK_SIZE);
           ^
   include/asm-generic/div64.h:227:42: note: expanded from macro 'do_div'
           } else if (__builtin_constant_p(__base) &&      \
                                                   ^
   drivers/ufs/core/ufshpb.c:1620:2: note: Assuming the condition is true
           do_div(rgn_mem_size, HPB_ENTRY_BLOCK_SIZE);
           ^
   include/asm-generic/div64.h:234:20: note: expanded from macro 'do_div'
           } else if (likely(((n) >> 32) == 0)) {          \
                      ~~~~~~~^~~~~~~~~~~~~~~~~
   include/linux/compiler.h:77:40: note: expanded from macro 'likely'
   # define likely(x)      __builtin_expect(!!(x), 1)
                                               ^
   drivers/ufs/core/ufshpb.c:1620:2: note: Taking true branch
           do_div(rgn_mem_size, HPB_ENTRY_BLOCK_SIZE);
           ^
   include/asm-generic/div64.h:234:9: note: expanded from macro 'do_div'
           } else if (likely(((n) >> 32) == 0)) {          \
                  ^
   drivers/ufs/core/ufshpb.c:1625:2: note: Left side of '&&' is false
           do_div(tmp, HPB_ENTRY_SIZE);
           ^
   include/asm-generic/div64.h:223:35: note: expanded from macro 'do_div'
           if (__builtin_constant_p(__base) &&             \
                                            ^
   drivers/ufs/core/ufshpb.c:1625:2: note: Left side of '&&' is false
           do_div(tmp, HPB_ENTRY_SIZE);
           ^
   include/asm-generic/div64.h:227:42: note: expanded from macro 'do_div'
           } else if (__builtin_constant_p(__base) &&      \
                                                   ^
   drivers/ufs/core/ufshpb.c:1625:2: note: Assuming the condition is true
           do_div(tmp, HPB_ENTRY_SIZE);
           ^
   include/asm-generic/div64.h:234:20: note: expanded from macro 'do_div'
           } else if (likely(((n) >> 32) == 0)) {          \
                      ~~~~~~~^~~~~~~~~~~~~~~~~
   include/linux/compiler.h:77:40: note: expanded from macro 'likely'
   # define likely(x)      __builtin_expect(!!(x), 1)
                                               ^
   drivers/ufs/core/ufshpb.c:1625:2: note: Taking true branch
           do_div(tmp, HPB_ENTRY_SIZE);
           ^
   include/asm-generic/div64.h:234:9: note: expanded from macro 'do_div'
           } else if (likely(((n) >> 32) == 0)) {          \
                  ^
   drivers/ufs/core/ufshpb.c:1627:31: note: '?' condition is false
           hpb->entries_per_rgn_shift = ilog2(entries_per_rgn);
                                        ^
   include/linux/log2.h:158:2: note: expanded from macro 'ilog2'
           __builtin_constant_p(n) ?       \
           ^
   drivers/ufs/core/ufshpb.c:1627:31: note: '?' condition is true
           hpb->entries_per_rgn_shift = ilog2(entries_per_rgn);
                                        ^
   include/linux/log2.h:161:2: note: expanded from macro 'ilog2'
           (sizeof(n) <= 4) ?              \
           ^
   drivers/ufs/core/ufshpb.c:1631:32: note: '?' condition is false
           hpb->entries_per_srgn_shift = ilog2(hpb->entries_per_srgn);
                                         ^
   include/linux/log2.h:158:2: note: expanded from macro 'ilog2'
           __builtin_constant_p(n) ?       \
           ^
   drivers/ufs/core/ufshpb.c:1631:32: note: '?' condition is true
           hpb->entries_per_srgn_shift = ilog2(hpb->entries_per_srgn);
                                         ^
   include/linux/log2.h:161:2: note: expanded from macro 'ilog2'
           (sizeof(n) <= 4) ?              \
           ^
   drivers/ufs/core/ufshpb.c:1635:2: note: Left side of '&&' is false
           do_div(tmp, hpb->srgn_mem_size);
           ^
   include/asm-generic/div64.h:223:35: note: expanded from macro 'do_div'

vim +1583 drivers/ufs/core/ufshpb.c

4b5f49079c52a7 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1567  
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1568  static 
void ufshpb_init_subregion_tbl(struct ufshpb_lu *hpb,
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1569           
                      struct ufshpb_region *rgn, bool last)
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1570  {
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1571   int 
srgn_idx;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1572   struct 
ufshpb_subregion *srgn;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1573  
4b5f49079c52a7 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1574   
for_each_sub_region(rgn, srgn_idx, srgn) {
4b5f49079c52a7 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1575           
INIT_LIST_HEAD(&srgn->list_act_srgn);
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1576  
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1577           
srgn->rgn_idx = rgn->rgn_idx;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1578           
srgn->srgn_idx = srgn_idx;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1579           
srgn->srgn_state = HPB_SRGN_UNUSED;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1580   }
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1581  
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12 @1582   if 
(unlikely(last && hpb->last_srgn_entries))
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12 @1583           
srgn->is_last = true;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1584  }
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1585  
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1586  static 
int ufshpb_alloc_subregion_tbl(struct ufshpb_lu *hpb,
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1587           
                      struct ufshpb_region *rgn, int srgn_cnt)
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1588  {
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1589   
rgn->srgn_tbl = kvcalloc(srgn_cnt, sizeof(struct ufshpb_subregion),
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1590           
                 GFP_KERNEL);
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1591   if 
(!rgn->srgn_tbl)
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1592           
return -ENOMEM;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1593  
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1594   
rgn->srgn_cnt = srgn_cnt;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1595   return 
0;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1596  }
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1597  
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1598  static 
void ufshpb_lu_parameter_init(struct ufs_hba *hba,
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1599           
                     struct ufshpb_lu *hpb,
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1600           
                     struct ufshpb_dev_info *hpb_dev_info,
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1601           
                     struct ufshpb_lu_info *hpb_lu_info)
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1602  {
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1603   u32 
entries_per_rgn;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1604   u64 
rgn_mem_size, tmp;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1605  
41d8a9333cc96f drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1606   if 
(ufshpb_is_legacy(hba))
41d8a9333cc96f drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1607           
hpb->pre_req_max_tr_len = HPB_LEGACY_CHUNK_HIGH;
41d8a9333cc96f drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1608   else
9ec5128a8b5631 drivers/scsi/ufs/ufshpb.c Avri Altman 2021-10-31  1609           
hpb->pre_req_max_tr_len = hpb_dev_info->max_hpb_single_cmd;
41d8a9333cc96f drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1610  
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1611   
hpb->lu_pinned_start = hpb_lu_info->pinned_start;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1612   
hpb->lu_pinned_end = hpb_lu_info->num_pinned ?
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1613           
(hpb_lu_info->pinned_start + hpb_lu_info->num_pinned - 1)
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1614           
: PINNED_NOT_SET;
4b5f49079c52a7 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1615   
hpb->lru_info.max_lru_active_cnt =
4b5f49079c52a7 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1616           
hpb_lu_info->max_active_rgns - hpb_lu_info->num_pinned;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1617  
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1618   
rgn_mem_size = (1ULL << hpb_dev_info->rgn_size) * HPB_RGN_SIZE_UNIT
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1619           
        * HPB_ENTRY_SIZE;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1620   
do_div(rgn_mem_size, HPB_ENTRY_BLOCK_SIZE);
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1621   
hpb->srgn_mem_size = (1ULL << hpb_dev_info->srgn_size)
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1622           
* HPB_RGN_SIZE_UNIT / HPB_ENTRY_BLOCK_SIZE * HPB_ENTRY_SIZE;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1623  
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1624   tmp = 
rgn_mem_size;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1625   
do_div(tmp, HPB_ENTRY_SIZE);
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1626   
entries_per_rgn = (u32)tmp;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1627   
hpb->entries_per_rgn_shift = ilog2(entries_per_rgn);
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1628   
hpb->entries_per_rgn_mask = entries_per_rgn - 1;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1629  
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1630   
hpb->entries_per_srgn = hpb->srgn_mem_size / HPB_ENTRY_SIZE;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1631   
hpb->entries_per_srgn_shift = ilog2(hpb->entries_per_srgn);
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1632   
hpb->entries_per_srgn_mask = hpb->entries_per_srgn - 1;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1633  
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1634   tmp = 
rgn_mem_size;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1635   
do_div(tmp, hpb->srgn_mem_size);
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1636   
hpb->srgns_per_rgn = (int)tmp;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1637  
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1638   
hpb->rgns_per_lu = DIV_ROUND_UP(hpb_lu_info->num_blocks,
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1639           
                entries_per_rgn);
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12 @1640   
hpb->srgns_per_lu = DIV_ROUND_UP(hpb_lu_info->num_blocks,
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1641           
                (hpb->srgn_mem_size / HPB_ENTRY_SIZE));
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1642   
hpb->last_srgn_entries = hpb_lu_info->num_blocks
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1643           
                 % (hpb->srgn_mem_size / HPB_ENTRY_SIZE);
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1644  
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1645   
hpb->pages_per_srgn = DIV_ROUND_UP(hpb->srgn_mem_size, PAGE_SIZE);
119ee38c10fa34 drivers/scsi/ufs/ufshpb.c Avri Altman 2021-07-12  1646  
119ee38c10fa34 drivers/scsi/ufs/ufshpb.c Avri Altman 2021-07-12  1647   if 
(hpb_dev_info->control_mode == HPB_HOST_CONTROL)
119ee38c10fa34 drivers/scsi/ufs/ufshpb.c Avri Altman 2021-07-12  1648           
hpb->is_hcm = true;
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1649  }
f02bc9754a6887 drivers/scsi/ufs/ufshpb.c Daejun Park 2021-07-12  1650  

:::::: The code at line 1583 was first introduced by commit
:::::: f02bc9754a6887bf5e286889265d24ce5e3b1952 scsi: ufs: ufshpb: Introduce 
Host Performance Buffer feature

:::::: TO: Daejun Park <[email protected]>
:::::: CC: Martin K. Petersen <[email protected]>

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

Reply via email to