Hi Dmitry,

kernel test robot noticed the following build errors:

[auto build test ERROR on linus/master]
[also build test ERROR on v7.0-rc1 next-20260226]
[cannot apply to akpm-mm/mm-everything rppt-memblock/for-next 
rppt-memblock/fixes]
[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#_base_tree_information]

url:    
https://github.com/intel-lab-lkp/linux/commits/Dmitry-Ilvokhin/mm-introduce-zone-lock-wrappers/20260227-022914
base:   linus/master
patch link:    
https://lore.kernel.org/r/1221b8e7fa9f5694f3c4e411f01581b5aba9bc63.1772129168.git.d%40ilvokhin.com
patch subject: [PATCH v3 4/5] mm: rename zone->lock to zone->_lock
config: microblaze-randconfig-r073-20260227 
(https://download.01.org/0day-ci/archive/20260227/[email protected]/config)
compiler: microblaze-linux-gcc (GCC) 11.5.0
smatch version: v0.5.0-8994-gd50c5a4c
reproduce (this is a W=1 build): 
(https://download.01.org/0day-ci/archive/20260227/[email protected]/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: 
https://lore.kernel.org/oe-kbuild-all/[email protected]/

All errors (new ones prefixed by >>):

   In file included from include/linux/mmzone.h:8,
                    from include/linux/gfp.h:7,
                    from include/linux/mm.h:8,
                    from mm/shuffle.c:4:
   mm/shuffle.c: In function '__shuffle_zone':
>> mm/shuffle.c:88:31: error: 'struct zone' has no member named 'lock'; did you 
>> mean '_lock'?
      88 |         spin_lock_irqsave(&z->lock, flags);
         |                               ^~~~
   include/linux/spinlock.h:244:48: note: in definition of macro 
'raw_spin_lock_irqsave'
     244 |                 flags = _raw_spin_lock_irqsave(lock);   \
         |                                                ^~~~
   mm/shuffle.c:88:9: note: in expansion of macro 'spin_lock_irqsave'
      88 |         spin_lock_irqsave(&z->lock, flags);
         |         ^~~~~~~~~~~~~~~~~
   mm/shuffle.c:141:52: error: 'struct zone' has no member named 'lock'; did 
you mean '_lock'?
     141 |                         spin_unlock_irqrestore(&z->lock, flags);
         |                                                    ^~~~
         |                                                    _lock
   In file included from include/linux/mmzone.h:8,
                    from include/linux/gfp.h:7,
                    from include/linux/mm.h:8,
                    from mm/shuffle.c:4:
   mm/shuffle.c:143:47: error: 'struct zone' has no member named 'lock'; did 
you mean '_lock'?
     143 |                         spin_lock_irqsave(&z->lock, flags);
         |                                               ^~~~
   include/linux/spinlock.h:244:48: note: in definition of macro 
'raw_spin_lock_irqsave'
     244 |                 flags = _raw_spin_lock_irqsave(lock);   \
         |                                                ^~~~
   mm/shuffle.c:143:25: note: in expansion of macro 'spin_lock_irqsave'
     143 |                         spin_lock_irqsave(&z->lock, flags);
         |                         ^~~~~~~~~~~~~~~~~
   mm/shuffle.c:146:36: error: 'struct zone' has no member named 'lock'; did 
you mean '_lock'?
     146 |         spin_unlock_irqrestore(&z->lock, flags);
         |                                    ^~~~
         |                                    _lock


vim +88 mm/shuffle.c

e900a918b0984e Dan Williams            2019-05-14    3  
e900a918b0984e Dan Williams            2019-05-14   @4  #include <linux/mm.h>
e900a918b0984e Dan Williams            2019-05-14    5  #include <linux/init.h>
e900a918b0984e Dan Williams            2019-05-14    6  #include 
<linux/mmzone.h>
e900a918b0984e Dan Williams            2019-05-14    7  #include 
<linux/random.h>
e900a918b0984e Dan Williams            2019-05-14    8  #include 
<linux/moduleparam.h>
e900a918b0984e Dan Williams            2019-05-14    9  #include "internal.h"
e900a918b0984e Dan Williams            2019-05-14   10  #include "shuffle.h"
e900a918b0984e Dan Williams            2019-05-14   11  
e900a918b0984e Dan Williams            2019-05-14   12  
DEFINE_STATIC_KEY_FALSE(page_alloc_shuffle_key);
e900a918b0984e Dan Williams            2019-05-14   13  
e900a918b0984e Dan Williams            2019-05-14   14  static bool 
shuffle_param;
e900a918b0984e Dan Williams            2019-05-14   15  
85a34107eba913 Liu Shixin              2022-09-09   16  static __meminit int 
shuffle_param_set(const char *val,
e900a918b0984e Dan Williams            2019-05-14   17                  const 
struct kernel_param *kp)
e900a918b0984e Dan Williams            2019-05-14   18  {
85a34107eba913 Liu Shixin              2022-09-09   19          if 
(param_set_bool(val, kp))
85a34107eba913 Liu Shixin              2022-09-09   20                  return 
-EINVAL;
85a34107eba913 Liu Shixin              2022-09-09   21          if (*(bool 
*)kp->arg)
839195352d8235 David Hildenbrand       2020-08-06   22                  
static_branch_enable(&page_alloc_shuffle_key);
e900a918b0984e Dan Williams            2019-05-14   23          return 0;
e900a918b0984e Dan Williams            2019-05-14   24  }
85a34107eba913 Liu Shixin              2022-09-09   25  
85a34107eba913 Liu Shixin              2022-09-09   26  static const struct 
kernel_param_ops shuffle_param_ops = {
85a34107eba913 Liu Shixin              2022-09-09   27          .set = 
shuffle_param_set,
85a34107eba913 Liu Shixin              2022-09-09   28          .get = 
param_get_bool,
85a34107eba913 Liu Shixin              2022-09-09   29  };
85a34107eba913 Liu Shixin              2022-09-09   30  
module_param_cb(shuffle, &shuffle_param_ops, &shuffle_param, 0400);
e900a918b0984e Dan Williams            2019-05-14   31  
e900a918b0984e Dan Williams            2019-05-14   32  /*
e900a918b0984e Dan Williams            2019-05-14   33   * For two pages to be 
swapped in the shuffle, they must be free (on a
e900a918b0984e Dan Williams            2019-05-14   34   * 'free_area' lru), 
have the same order, and have the same migratetype.
e900a918b0984e Dan Williams            2019-05-14   35   */
4a93025cbe4a0b David Hildenbrand       2020-08-06   36  static struct page * 
__meminit shuffle_valid_page(struct zone *zone,
4a93025cbe4a0b David Hildenbrand       2020-08-06   37                          
                          unsigned long pfn, int order)
e900a918b0984e Dan Williams            2019-05-14   38  {
4a93025cbe4a0b David Hildenbrand       2020-08-06   39          struct page 
*page = pfn_to_online_page(pfn);
e900a918b0984e Dan Williams            2019-05-14   40  
e900a918b0984e Dan Williams            2019-05-14   41          /*
e900a918b0984e Dan Williams            2019-05-14   42           * Given we're 
dealing with randomly selected pfns in a zone we
e900a918b0984e Dan Williams            2019-05-14   43           * need to ask 
questions like...
e900a918b0984e Dan Williams            2019-05-14   44           */
e900a918b0984e Dan Williams            2019-05-14   45  
4a93025cbe4a0b David Hildenbrand       2020-08-06   46          /* ... is the 
page managed by the buddy? */
4a93025cbe4a0b David Hildenbrand       2020-08-06   47          if (!page)
e900a918b0984e Dan Williams            2019-05-14   48                  return 
NULL;
e900a918b0984e Dan Williams            2019-05-14   49  
4a93025cbe4a0b David Hildenbrand       2020-08-06   50          /* ... is the 
page assigned to the same zone? */
4a93025cbe4a0b David Hildenbrand       2020-08-06   51          if 
(page_zone(page) != zone)
e900a918b0984e Dan Williams            2019-05-14   52                  return 
NULL;
e900a918b0984e Dan Williams            2019-05-14   53  
e900a918b0984e Dan Williams            2019-05-14   54          /* ...is the 
page free and currently on a free_area list? */
e900a918b0984e Dan Williams            2019-05-14   55          if 
(!PageBuddy(page))
e900a918b0984e Dan Williams            2019-05-14   56                  return 
NULL;
e900a918b0984e Dan Williams            2019-05-14   57  
e900a918b0984e Dan Williams            2019-05-14   58          /*
e900a918b0984e Dan Williams            2019-05-14   59           * ...is the 
page on the same list as the page we will
e900a918b0984e Dan Williams            2019-05-14   60           * shuffle it 
with?
e900a918b0984e Dan Williams            2019-05-14   61           */
ab130f9108dcf2 Matthew Wilcox (Oracle  2020-10-15   62)         if 
(buddy_order(page) != order)
e900a918b0984e Dan Williams            2019-05-14   63                  return 
NULL;
e900a918b0984e Dan Williams            2019-05-14   64  
e900a918b0984e Dan Williams            2019-05-14   65          return page;
e900a918b0984e Dan Williams            2019-05-14   66  }
e900a918b0984e Dan Williams            2019-05-14   67  
e900a918b0984e Dan Williams            2019-05-14   68  /*
e900a918b0984e Dan Williams            2019-05-14   69   * Fisher-Yates shuffle 
the freelist which prescribes iterating through an
e900a918b0984e Dan Williams            2019-05-14   70   * array, pfns in this 
case, and randomly swapping each entry with another in
e900a918b0984e Dan Williams            2019-05-14   71   * the span, end_pfn - 
start_pfn.
e900a918b0984e Dan Williams            2019-05-14   72   *
e900a918b0984e Dan Williams            2019-05-14   73   * To keep the 
implementation simple it does not attempt to correct for sources
e900a918b0984e Dan Williams            2019-05-14   74   * of bias in the 
distribution, like modulo bias or pseudo-random number
e900a918b0984e Dan Williams            2019-05-14   75   * generator bias. I.e. 
the expectation is that this shuffling raises the bar
e900a918b0984e Dan Williams            2019-05-14   76   * for attacks that 
exploit the predictability of page allocations, but need not
e900a918b0984e Dan Williams            2019-05-14   77   * be a perfect shuffle.
e900a918b0984e Dan Williams            2019-05-14   78   */
e900a918b0984e Dan Williams            2019-05-14   79  #define SHUFFLE_RETRY 10
e900a918b0984e Dan Williams            2019-05-14   80  void __meminit 
__shuffle_zone(struct zone *z)
e900a918b0984e Dan Williams            2019-05-14   81  {
e900a918b0984e Dan Williams            2019-05-14   82          unsigned long 
i, flags;
e900a918b0984e Dan Williams            2019-05-14   83          unsigned long 
start_pfn = z->zone_start_pfn;
e900a918b0984e Dan Williams            2019-05-14   84          unsigned long 
end_pfn = zone_end_pfn(z);
e900a918b0984e Dan Williams            2019-05-14   85          const int order 
= SHUFFLE_ORDER;
e900a918b0984e Dan Williams            2019-05-14   86          const int 
order_pages = 1 << order;
e900a918b0984e Dan Williams            2019-05-14   87  
e900a918b0984e Dan Williams            2019-05-14  @88          
spin_lock_irqsave(&z->lock, flags);
e900a918b0984e Dan Williams            2019-05-14   89          start_pfn = 
ALIGN(start_pfn, order_pages);
e900a918b0984e Dan Williams            2019-05-14   90          for (i = 
start_pfn; i < end_pfn; i += order_pages) {
e900a918b0984e Dan Williams            2019-05-14   91                  
unsigned long j;
e900a918b0984e Dan Williams            2019-05-14   92                  int 
migratetype, retry;
e900a918b0984e Dan Williams            2019-05-14   93                  struct 
page *page_i, *page_j;
e900a918b0984e Dan Williams            2019-05-14   94  
e900a918b0984e Dan Williams            2019-05-14   95                  /*
e900a918b0984e Dan Williams            2019-05-14   96                   * We 
expect page_i, in the sub-range of a zone being added
e900a918b0984e Dan Williams            2019-05-14   97                   * 
(@start_pfn to @end_pfn), to more likely be valid compared to
e900a918b0984e Dan Williams            2019-05-14   98                   * 
page_j randomly selected in the span @zone_start_pfn to
e900a918b0984e Dan Williams            2019-05-14   99                   * 
@spanned_pages.
e900a918b0984e Dan Williams            2019-05-14  100                   */
4a93025cbe4a0b David Hildenbrand       2020-08-06  101                  page_i 
= shuffle_valid_page(z, i, order);
e900a918b0984e Dan Williams            2019-05-14  102                  if 
(!page_i)
e900a918b0984e Dan Williams            2019-05-14  103                          
continue;
e900a918b0984e Dan Williams            2019-05-14  104  
e900a918b0984e Dan Williams            2019-05-14  105                  for 
(retry = 0; retry < SHUFFLE_RETRY; retry++) {
e900a918b0984e Dan Williams            2019-05-14  106                          
/*
e900a918b0984e Dan Williams            2019-05-14  107                          
 * Pick a random order aligned page in the zone span as
e900a918b0984e Dan Williams            2019-05-14  108                          
 * a swap target. If the selected pfn is a hole, retry
e900a918b0984e Dan Williams            2019-05-14  109                          
 * up to SHUFFLE_RETRY attempts find a random valid pfn
e900a918b0984e Dan Williams            2019-05-14  110                          
 * in the zone.
e900a918b0984e Dan Williams            2019-05-14  111                          
 */
e900a918b0984e Dan Williams            2019-05-14  112                          
j = z->zone_start_pfn +
e900a918b0984e Dan Williams            2019-05-14  113                          
        ALIGN_DOWN(get_random_long() % z->spanned_pages,
e900a918b0984e Dan Williams            2019-05-14  114                          
                        order_pages);
4a93025cbe4a0b David Hildenbrand       2020-08-06  115                          
page_j = shuffle_valid_page(z, j, order);
e900a918b0984e Dan Williams            2019-05-14  116                          
if (page_j && page_j != page_i)
e900a918b0984e Dan Williams            2019-05-14  117                          
        break;
e900a918b0984e Dan Williams            2019-05-14  118                  }
e900a918b0984e Dan Williams            2019-05-14  119                  if 
(retry >= SHUFFLE_RETRY) {
e900a918b0984e Dan Williams            2019-05-14  120                          
pr_debug("%s: failed to swap %#lx\n", __func__, i);
e900a918b0984e Dan Williams            2019-05-14  121                          
continue;
e900a918b0984e Dan Williams            2019-05-14  122                  }
e900a918b0984e Dan Williams            2019-05-14  123  
e900a918b0984e Dan Williams            2019-05-14  124                  /*
e900a918b0984e Dan Williams            2019-05-14  125                   * Each 
migratetype corresponds to its own list, make sure the
e900a918b0984e Dan Williams            2019-05-14  126                   * 
types match otherwise we're moving pages to lists where they
e900a918b0984e Dan Williams            2019-05-14  127                   * do 
not belong.
e900a918b0984e Dan Williams            2019-05-14  128                   */
e900a918b0984e Dan Williams            2019-05-14  129                  
migratetype = get_pageblock_migratetype(page_i);
e900a918b0984e Dan Williams            2019-05-14  130                  if 
(get_pageblock_migratetype(page_j) != migratetype) {
e900a918b0984e Dan Williams            2019-05-14  131                          
pr_debug("%s: migratetype mismatch %#lx\n", __func__, i);
e900a918b0984e Dan Williams            2019-05-14  132                          
continue;
e900a918b0984e Dan Williams            2019-05-14  133                  }
e900a918b0984e Dan Williams            2019-05-14  134  
e900a918b0984e Dan Williams            2019-05-14  135                  
list_swap(&page_i->lru, &page_j->lru);
e900a918b0984e Dan Williams            2019-05-14  136  
e900a918b0984e Dan Williams            2019-05-14  137                  
pr_debug("%s: swap: %#lx -> %#lx\n", __func__, i, j);
e900a918b0984e Dan Williams            2019-05-14  138  
e900a918b0984e Dan Williams            2019-05-14  139                  /* take 
it easy on the zone lock */
e900a918b0984e Dan Williams            2019-05-14  140                  if ((i 
% (100 * order_pages)) == 0) {
e900a918b0984e Dan Williams            2019-05-14  141                          
spin_unlock_irqrestore(&z->lock, flags);
e900a918b0984e Dan Williams            2019-05-14  142                          
cond_resched();
e900a918b0984e Dan Williams            2019-05-14  143                          
spin_lock_irqsave(&z->lock, flags);
e900a918b0984e Dan Williams            2019-05-14  144                  }
e900a918b0984e Dan Williams            2019-05-14  145          }
e900a918b0984e Dan Williams            2019-05-14  146          
spin_unlock_irqrestore(&z->lock, flags);
e900a918b0984e Dan Williams            2019-05-14  147  }
e900a918b0984e Dan Williams            2019-05-14  148  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

Reply via email to