* [linux-next:master 10324/10719] mm/huge_memory.c:3587:46: sparse: sparse: Using plain integer as NULL pointer
@ 2025-03-13 3:17 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2025-03-13 3:17 UTC (permalink / raw)
To: Zi Yan; +Cc: oe-kbuild-all, Andrew Morton, Linux Memory Management List
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: 9fbcd7b32bf7c0a5bda0f22c25df29d00a872017
commit: fb4b4b748b3a140c49115c9ad2973d56e6e1f7c5 [10324/10719] mm/huge_memory: unfreeze head folio after page cache entries are updated
config: mips-randconfig-r132-20250313 (https://download.01.org/0day-ci/archive/20250313/202503131109.s7iuWfGq-lkp@intel.com/config)
compiler: mips-linux-gcc (GCC) 14.2.0
reproduce: (https://download.01.org/0day-ci/archive/20250313/202503131109.s7iuWfGq-lkp@intel.com/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 <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202503131109.s7iuWfGq-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
>> mm/huge_memory.c:3587:46: sparse: sparse: Using plain integer as NULL pointer
mm/huge_memory.c: note: in included file (through include/linux/mmzone.h, include/linux/gfp.h, include/linux/mm.h):
include/linux/page-flags.h:275:46: sparse: sparse: self-comparison always evaluates to false
include/linux/page-flags.h:275:46: sparse: sparse: self-comparison always evaluates to false
mm/huge_memory.c:2191:20: sparse: sparse: context imbalance in 'madvise_free_huge_pmd' - unexpected unlock
include/linux/page-flags.h:275:46: sparse: sparse: self-comparison always evaluates to false
mm/huge_memory.c:2229:28: sparse: sparse: context imbalance in 'zap_huge_pmd' - unexpected unlock
mm/huge_memory.c:2353:28: sparse: sparse: context imbalance in 'move_huge_pmd' - unexpected unlock
mm/huge_memory.c:2493:20: sparse: sparse: context imbalance in 'change_huge_pmd' - unexpected unlock
mm/huge_memory.c:2690:12: sparse: sparse: context imbalance in '__pmd_trans_huge_lock' - wrong count at exit
include/linux/page-flags.h:275:46: sparse: sparse: self-comparison always evaluates to false
mm/huge_memory.c:3450:27: sparse: sparse: context imbalance in '__split_huge_page' - unexpected unlock
include/linux/page-flags.h:275:46: sparse: sparse: self-comparison always evaluates to false
mm/huge_memory.c: note: in included file (through include/linux/mm.h):
include/linux/page_ref.h:291:27: sparse: sparse: context imbalance in '__split_unmapped_folio' - unexpected unlock
mm/huge_memory.c:4112:17: sparse: sparse: context imbalance in 'split_huge_page_to_list_to_order' - different lock contexts for basic block
mm/huge_memory.c: note: in included file (through include/linux/mmzone.h, include/linux/gfp.h, include/linux/mm.h):
include/linux/page-flags.h:275:46: sparse: sparse: self-comparison always evaluates to false
mm/huge_memory.c:4546:17: sparse: sparse: context imbalance in 'split_huge_pages_pid' - unexpected unlock
vim +3587 mm/huge_memory.c
3518
3519 /*
3520 * It splits @folio into @new_order folios and copies the @folio metadata to
3521 * all the resulting folios.
3522 */
3523 static void __split_folio_to_order(struct folio *folio, int old_order,
3524 int new_order)
3525 {
3526 long new_nr_pages = 1 << new_order;
3527 long nr_pages = 1 << old_order;
3528 long i;
3529
3530 /*
3531 * Skip the first new_nr_pages, since the new folio from them have all
3532 * the flags from the original folio.
3533 */
3534 for (i = new_nr_pages; i < nr_pages; i += new_nr_pages) {
3535 struct page *new_head = &folio->page + i;
3536
3537 /*
3538 * Careful: new_folio is not a "real" folio before we cleared PageTail.
3539 * Don't pass it around before clear_compound_head().
3540 */
3541 struct folio *new_folio = (struct folio *)new_head;
3542
3543 VM_BUG_ON_PAGE(atomic_read(&new_folio->_mapcount) != -1, new_head);
3544
3545 /*
3546 * Clone page flags before unfreezing refcount.
3547 *
3548 * After successful get_page_unless_zero() might follow flags change,
3549 * for example lock_page() which set PG_waiters.
3550 *
3551 * Note that for mapped sub-pages of an anonymous THP,
3552 * PG_anon_exclusive has been cleared in unmap_folio() and is stored in
3553 * the migration entry instead from where remap_page() will restore it.
3554 * We can still have PG_anon_exclusive set on effectively unmapped and
3555 * unreferenced sub-pages of an anonymous THP: we can simply drop
3556 * PG_anon_exclusive (-> PG_mappedtodisk) for these here.
3557 */
3558 new_folio->flags &= ~PAGE_FLAGS_CHECK_AT_PREP;
3559 new_folio->flags |= (folio->flags &
3560 ((1L << PG_referenced) |
3561 (1L << PG_swapbacked) |
3562 (1L << PG_swapcache) |
3563 (1L << PG_mlocked) |
3564 (1L << PG_uptodate) |
3565 (1L << PG_active) |
3566 (1L << PG_workingset) |
3567 (1L << PG_locked) |
3568 (1L << PG_unevictable) |
3569 #ifdef CONFIG_ARCH_USES_PG_ARCH_2
3570 (1L << PG_arch_2) |
3571 #endif
3572 #ifdef CONFIG_ARCH_USES_PG_ARCH_3
3573 (1L << PG_arch_3) |
3574 #endif
3575 (1L << PG_dirty) |
3576 LRU_GEN_MASK | LRU_REFS_MASK));
3577
3578 new_folio->mapping = folio->mapping;
3579 new_folio->index = folio->index + i;
3580
3581 /*
3582 * page->private should not be set in tail pages. Fix up and warn once
3583 * if private is unexpectedly set.
3584 */
3585 if (unlikely(new_folio->private)) {
3586 VM_WARN_ON_ONCE_PAGE(true, new_head);
> 3587 new_folio->private = 0;
3588 }
3589
3590 if (folio_test_swapcache(folio))
3591 new_folio->swap.val = folio->swap.val + i;
3592
3593 /* Page flags must be visible before we make the page non-compound. */
3594 smp_wmb();
3595
3596 /*
3597 * Clear PageTail before unfreezing page refcount.
3598 *
3599 * After successful get_page_unless_zero() might follow put_page()
3600 * which needs correct compound_head().
3601 */
3602 clear_compound_head(new_head);
3603 if (new_order) {
3604 prep_compound_page(new_head, new_order);
3605 folio_set_large_rmappable(new_folio);
3606 }
3607
3608 if (folio_test_young(folio))
3609 folio_set_young(new_folio);
3610 if (folio_test_idle(folio))
3611 folio_set_idle(new_folio);
3612
3613 folio_xchg_last_cpupid(new_folio, folio_last_cpupid(folio));
3614 }
3615
3616 if (new_order)
3617 folio_set_order(folio, new_order);
3618 else
3619 ClearPageCompound(&folio->page);
3620 }
3621
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2025-03-13 3:17 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-03-13 3:17 [linux-next:master 10324/10719] mm/huge_memory.c:3587:46: sparse: sparse: Using plain integer as NULL pointer kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox