From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: [nsaenz-rpi:pcplists-rcu-drain-v1 1/2] mm/page_alloc.c:1481:30: sparse: sparse: incorrect type in assignment (different modifiers)
Date: Fri, 04 Feb 2022 18:31:40 +0800 [thread overview]
Message-ID: <202202041807.DLd23Ex7-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 23717 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/nsaenz/linux-rpi.git pcplists-rcu-drain-v1
head: 01b58921eae8d67b3ad6b05e73c2a1dd7106ae28
commit: eb4d0c9ef79083312513bfbbf26d6ef7defcc6b3 [1/2] mm/page_alloc: Access lists in 'struct per_cpu_pages' indirectly
config: h8300-randconfig-s032-20220201 (https://download.01.org/0day-ci/archive/20220204/202202041807.DLd23Ex7-lkp(a)intel.com/config)
compiler: h8300-linux-gcc (GCC) 11.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.4-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/nsaenz/linux-rpi.git/commit/?id=eb4d0c9ef79083312513bfbbf26d6ef7defcc6b3
git remote add nsaenz-rpi https://git.kernel.org/pub/scm/linux/kernel/git/nsaenz/linux-rpi.git
git fetch --no-tags nsaenz-rpi pcplists-rcu-drain-v1
git checkout eb4d0c9ef79083312513bfbbf26d6ef7defcc6b3
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=h8300 SHELL=/bin/bash
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
>> mm/page_alloc.c:1481:30: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected struct list_head *list @@ got struct list_head [noderef] * @@
mm/page_alloc.c:1481:30: sparse: expected struct list_head *list
mm/page_alloc.c:1481:30: sparse: got struct list_head [noderef] *
>> mm/page_alloc.c:3442:40: sparse: sparse: incorrect type in argument 2 (different modifiers) @@ expected struct list_head *head @@ got struct list_head [noderef] * @@
mm/page_alloc.c:3442:40: sparse: expected struct list_head *head
mm/page_alloc.c:3442:40: sparse: got struct list_head [noderef] *
mm/page_alloc.c:3733:14: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected struct list_head *list @@ got struct list_head [noderef] * @@
mm/page_alloc.c:3733:14: sparse: expected struct list_head *list
mm/page_alloc.c:3733:14: sparse: got struct list_head [noderef] *
>> mm/page_alloc.c:3734:15: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected int *count @@ got int [noderef] * @@
mm/page_alloc.c:3734:15: sparse: expected int *count
mm/page_alloc.c:3734:15: sparse: got int [noderef] *
>> mm/page_alloc.c:5356:18: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected struct list_head *pcp_list @@ got struct list_head [noderef] * @@
mm/page_alloc.c:5356:18: sparse: expected struct list_head *pcp_list
mm/page_alloc.c:5356:18: sparse: got struct list_head [noderef] *
mm/page_alloc.c:5357:15: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected int *count @@ got int [noderef] * @@
mm/page_alloc.c:5357:15: sparse: expected int *count
mm/page_alloc.c:5357:15: sparse: got int [noderef] *
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
>> mm/page_alloc.c:7022:47: sparse: sparse: incorrect type in argument 1 (different modifiers) @@ expected struct list_head *list @@ got struct list_head [noderef] * @@
mm/page_alloc.c:7022:47: sparse: expected struct list_head *list
mm/page_alloc.c:7022:47: sparse: got struct list_head [noderef] *
>> mm/page_alloc.c:1466:17: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:1521:9: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3163:13: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3164:42: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3277:29: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3282:37: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3443:9: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3445:13: sparse: sparse: dereference of noderef expression
mm/page_alloc.c: note: in included file (through include/linux/mm.h):
include/linux/gfp.h:368:27: sparse: sparse: restricted gfp_t degrades to integer
include/linux/gfp.h:368:27: sparse: sparse: restricted gfp_t degrades to integer
mm/page_alloc.c:5971:76: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:6065:76: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:6068:17: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:6068:17: sparse: sparse: dereference of noderef expression
vim +1481 mm/page_alloc.c
1445
1446 /*
1447 * Frees a number of pages from the PCP lists
1448 * Assumes all pages on list are in same zone.
1449 * count is the number of pages to free.
1450 */
1451 static void free_pcppages_bulk(struct zone *zone, int count,
1452 int batch, struct pcplists *lp)
1453 {
1454 int pindex = 0;
1455 int batch_free = 0;
1456 int nr_freed = 0;
1457 unsigned int order;
1458 bool isolated_pageblocks;
1459 struct page *page, *tmp;
1460 LIST_HEAD(head);
1461
1462 /*
1463 * Ensure proper count is passed which otherwise would stuck in the
1464 * below while (list_empty(list)) loop.
1465 */
> 1466 count = min(lp->count, count);
1467 while (count > 0) {
1468 struct list_head *list;
1469
1470 /*
1471 * Remove pages from lists in a round-robin fashion. A
1472 * batch_free count is maintained that is incremented when an
1473 * empty list is encountered. This is so more pages are freed
1474 * off fuller lists instead of spinning excessively around empty
1475 * lists
1476 */
1477 do {
1478 batch_free++;
1479 if (++pindex == NR_PCP_LISTS)
1480 pindex = 0;
> 1481 list = &lp->lists[pindex];
1482 } while (list_empty(list));
1483
1484 /* This is the only non-empty list. Free them all. */
1485 if (batch_free == NR_PCP_LISTS)
1486 batch_free = count;
1487
1488 order = pindex_to_order(pindex);
1489 BUILD_BUG_ON(MAX_ORDER >= (1<<NR_PCP_ORDER_WIDTH));
1490 do {
1491 page = list_last_entry(list, struct page, lru);
1492 /* must delete to avoid corrupting pcp list */
1493 list_del(&page->lru);
1494 nr_freed += 1 << order;
1495 count -= 1 << order;
1496
1497 if (bulkfree_pcp_prepare(page))
1498 continue;
1499
1500 /* Encode order with the migratetype */
1501 page->index <<= NR_PCP_ORDER_WIDTH;
1502 page->index |= order;
1503
1504 list_add_tail(&page->lru, &head);
1505
1506 /*
1507 * We are going to put the page back to the global
1508 * pool, prefetch its buddy to speed up later access
1509 * under zone->lock. It is believed the overhead of
1510 * an additional test and calculating buddy_pfn here
1511 * can be offset by reduced memory latency later. To
1512 * avoid excessive prefetching due to large count, only
1513 * prefetch buddy for the first pcp->batch nr of pages.
1514 */
1515 if (batch) {
1516 prefetch_buddy(page);
1517 batch--;
1518 }
1519 } while (count > 0 && --batch_free && !list_empty(list));
1520 }
1521 lp->count -= nr_freed;
1522
1523 /*
1524 * local_lock_irq held so equivalent to spin_lock_irqsave for
1525 * both PREEMPT_RT and non-PREEMPT_RT configurations.
1526 */
1527 spin_lock(&zone->lock);
1528 isolated_pageblocks = has_isolate_pageblock(zone);
1529
1530 /*
1531 * Use safe version since after __free_one_page(),
1532 * page->lru.next will not point to original list.
1533 */
1534 list_for_each_entry_safe(page, tmp, &head, lru) {
1535 int mt = get_pcppage_migratetype(page);
1536
1537 /* mt has been encoded with the order (see above) */
1538 order = mt & NR_PCP_ORDER_MASK;
1539 mt >>= NR_PCP_ORDER_WIDTH;
1540
1541 /* MIGRATE_ISOLATE page should not go to pcplists */
1542 VM_BUG_ON_PAGE(is_migrate_isolate(mt), page);
1543 /* Pageblock could have been isolated meanwhile */
1544 if (unlikely(isolated_pageblocks))
1545 mt = get_pageblock_migratetype(page);
1546
1547 __free_one_page(page, page_to_pfn(page), zone, order, mt, FPI_NONE);
1548 trace_mm_page_pcpu_drain(page, order, mt);
1549 }
1550 spin_unlock(&zone->lock);
1551 }
1552
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Nicolas Saenz Julienne <nsaenzju@redhat.com>
Cc: kbuild-all@lists.01.org, linux-kernel@vger.kernel.org
Subject: [nsaenz-rpi:pcplists-rcu-drain-v1 1/2] mm/page_alloc.c:1481:30: sparse: sparse: incorrect type in assignment (different modifiers)
Date: Fri, 4 Feb 2022 18:31:40 +0800 [thread overview]
Message-ID: <202202041807.DLd23Ex7-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/nsaenz/linux-rpi.git pcplists-rcu-drain-v1
head: 01b58921eae8d67b3ad6b05e73c2a1dd7106ae28
commit: eb4d0c9ef79083312513bfbbf26d6ef7defcc6b3 [1/2] mm/page_alloc: Access lists in 'struct per_cpu_pages' indirectly
config: h8300-randconfig-s032-20220201 (https://download.01.org/0day-ci/archive/20220204/202202041807.DLd23Ex7-lkp@intel.com/config)
compiler: h8300-linux-gcc (GCC) 11.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.4-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/nsaenz/linux-rpi.git/commit/?id=eb4d0c9ef79083312513bfbbf26d6ef7defcc6b3
git remote add nsaenz-rpi https://git.kernel.org/pub/scm/linux/kernel/git/nsaenz/linux-rpi.git
git fetch --no-tags nsaenz-rpi pcplists-rcu-drain-v1
git checkout eb4d0c9ef79083312513bfbbf26d6ef7defcc6b3
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=h8300 SHELL=/bin/bash
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
>> mm/page_alloc.c:1481:30: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected struct list_head *list @@ got struct list_head [noderef] * @@
mm/page_alloc.c:1481:30: sparse: expected struct list_head *list
mm/page_alloc.c:1481:30: sparse: got struct list_head [noderef] *
>> mm/page_alloc.c:3442:40: sparse: sparse: incorrect type in argument 2 (different modifiers) @@ expected struct list_head *head @@ got struct list_head [noderef] * @@
mm/page_alloc.c:3442:40: sparse: expected struct list_head *head
mm/page_alloc.c:3442:40: sparse: got struct list_head [noderef] *
mm/page_alloc.c:3733:14: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected struct list_head *list @@ got struct list_head [noderef] * @@
mm/page_alloc.c:3733:14: sparse: expected struct list_head *list
mm/page_alloc.c:3733:14: sparse: got struct list_head [noderef] *
>> mm/page_alloc.c:3734:15: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected int *count @@ got int [noderef] * @@
mm/page_alloc.c:3734:15: sparse: expected int *count
mm/page_alloc.c:3734:15: sparse: got int [noderef] *
>> mm/page_alloc.c:5356:18: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected struct list_head *pcp_list @@ got struct list_head [noderef] * @@
mm/page_alloc.c:5356:18: sparse: expected struct list_head *pcp_list
mm/page_alloc.c:5356:18: sparse: got struct list_head [noderef] *
mm/page_alloc.c:5357:15: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected int *count @@ got int [noderef] * @@
mm/page_alloc.c:5357:15: sparse: expected int *count
mm/page_alloc.c:5357:15: sparse: got int [noderef] *
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
mm/page_alloc.c:6068:17: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct per_cpu_pages [noderef] __percpu ** @@
mm/page_alloc.c:6068:17: sparse: expected void const [noderef] __percpu *__vpp_verify
mm/page_alloc.c:6068:17: sparse: got struct per_cpu_pages [noderef] __percpu **
>> mm/page_alloc.c:7022:47: sparse: sparse: incorrect type in argument 1 (different modifiers) @@ expected struct list_head *list @@ got struct list_head [noderef] * @@
mm/page_alloc.c:7022:47: sparse: expected struct list_head *list
mm/page_alloc.c:7022:47: sparse: got struct list_head [noderef] *
>> mm/page_alloc.c:1466:17: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:1521:9: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3163:13: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3164:42: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3277:29: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3282:37: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3443:9: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3445:13: sparse: sparse: dereference of noderef expression
mm/page_alloc.c: note: in included file (through include/linux/mm.h):
include/linux/gfp.h:368:27: sparse: sparse: restricted gfp_t degrades to integer
include/linux/gfp.h:368:27: sparse: sparse: restricted gfp_t degrades to integer
mm/page_alloc.c:5971:76: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:6065:76: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:6068:17: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:6068:17: sparse: sparse: dereference of noderef expression
vim +1481 mm/page_alloc.c
1445
1446 /*
1447 * Frees a number of pages from the PCP lists
1448 * Assumes all pages on list are in same zone.
1449 * count is the number of pages to free.
1450 */
1451 static void free_pcppages_bulk(struct zone *zone, int count,
1452 int batch, struct pcplists *lp)
1453 {
1454 int pindex = 0;
1455 int batch_free = 0;
1456 int nr_freed = 0;
1457 unsigned int order;
1458 bool isolated_pageblocks;
1459 struct page *page, *tmp;
1460 LIST_HEAD(head);
1461
1462 /*
1463 * Ensure proper count is passed which otherwise would stuck in the
1464 * below while (list_empty(list)) loop.
1465 */
> 1466 count = min(lp->count, count);
1467 while (count > 0) {
1468 struct list_head *list;
1469
1470 /*
1471 * Remove pages from lists in a round-robin fashion. A
1472 * batch_free count is maintained that is incremented when an
1473 * empty list is encountered. This is so more pages are freed
1474 * off fuller lists instead of spinning excessively around empty
1475 * lists
1476 */
1477 do {
1478 batch_free++;
1479 if (++pindex == NR_PCP_LISTS)
1480 pindex = 0;
> 1481 list = &lp->lists[pindex];
1482 } while (list_empty(list));
1483
1484 /* This is the only non-empty list. Free them all. */
1485 if (batch_free == NR_PCP_LISTS)
1486 batch_free = count;
1487
1488 order = pindex_to_order(pindex);
1489 BUILD_BUG_ON(MAX_ORDER >= (1<<NR_PCP_ORDER_WIDTH));
1490 do {
1491 page = list_last_entry(list, struct page, lru);
1492 /* must delete to avoid corrupting pcp list */
1493 list_del(&page->lru);
1494 nr_freed += 1 << order;
1495 count -= 1 << order;
1496
1497 if (bulkfree_pcp_prepare(page))
1498 continue;
1499
1500 /* Encode order with the migratetype */
1501 page->index <<= NR_PCP_ORDER_WIDTH;
1502 page->index |= order;
1503
1504 list_add_tail(&page->lru, &head);
1505
1506 /*
1507 * We are going to put the page back to the global
1508 * pool, prefetch its buddy to speed up later access
1509 * under zone->lock. It is believed the overhead of
1510 * an additional test and calculating buddy_pfn here
1511 * can be offset by reduced memory latency later. To
1512 * avoid excessive prefetching due to large count, only
1513 * prefetch buddy for the first pcp->batch nr of pages.
1514 */
1515 if (batch) {
1516 prefetch_buddy(page);
1517 batch--;
1518 }
1519 } while (count > 0 && --batch_free && !list_empty(list));
1520 }
1521 lp->count -= nr_freed;
1522
1523 /*
1524 * local_lock_irq held so equivalent to spin_lock_irqsave for
1525 * both PREEMPT_RT and non-PREEMPT_RT configurations.
1526 */
1527 spin_lock(&zone->lock);
1528 isolated_pageblocks = has_isolate_pageblock(zone);
1529
1530 /*
1531 * Use safe version since after __free_one_page(),
1532 * page->lru.next will not point to original list.
1533 */
1534 list_for_each_entry_safe(page, tmp, &head, lru) {
1535 int mt = get_pcppage_migratetype(page);
1536
1537 /* mt has been encoded with the order (see above) */
1538 order = mt & NR_PCP_ORDER_MASK;
1539 mt >>= NR_PCP_ORDER_WIDTH;
1540
1541 /* MIGRATE_ISOLATE page should not go to pcplists */
1542 VM_BUG_ON_PAGE(is_migrate_isolate(mt), page);
1543 /* Pageblock could have been isolated meanwhile */
1544 if (unlikely(isolated_pageblocks))
1545 mt = get_pageblock_migratetype(page);
1546
1547 __free_one_page(page, page_to_pfn(page), zone, order, mt, FPI_NONE);
1548 trace_mm_page_pcpu_drain(page, order, mt);
1549 }
1550 spin_unlock(&zone->lock);
1551 }
1552
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
next reply other threads:[~2022-02-04 10:31 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-04 10:31 kernel test robot [this message]
2022-02-04 10:31 ` [nsaenz-rpi:pcplists-rcu-drain-v1 1/2] mm/page_alloc.c:1481:30: sparse: sparse: incorrect type in assignment (different modifiers) kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202202041807.DLd23Ex7-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild-all@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.