CC: [email protected] BCC: [email protected] In-Reply-To: <[email protected]> References: <[email protected]> TO: Huang Ying <[email protected]>
Hi Huang, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on tip/sched/core] [also build test WARNING on mcgrof/sysctl-next linus/master v5.18-rc6 next-20220510] [cannot apply to hnaz-mm/master] [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] url: https://github.com/intel-lab-lkp/linux/commits/Huang-Ying/memory-tiering-hot-page-selection/20220510-144141 base: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git d70522fc541224b8351ac26f4765f2c6268f8d72 :::::: branch date: 13 hours ago :::::: commit date: 13 hours ago config: i386-randconfig-m021-20220509 (https://download.01.org/0day-ci/archive/20220511/[email protected]/config) compiler: gcc-11 (Debian 11.2.0-20) 11.2.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> smatch warnings: mm/memory.c:4456 do_numa_page() warn: bitwise AND condition is false here vim +4456 mm/memory.c 9532fec118d485 Mel Gorman 2012-11-15 4397 2b7403035459c7 Souptick Joarder 2018-08-23 4398 static vm_fault_t do_numa_page(struct vm_fault *vmf) d10e63f29488b0 Mel Gorman 2012-10-25 4399 { 82b0f8c39a3869 Jan Kara 2016-12-14 4400 struct vm_area_struct *vma = vmf->vma; 4daae3b4b9e49b Mel Gorman 2012-11-02 4401 struct page *page = NULL; 98fa15f34cb379 Anshuman Khandual 2019-03-05 4402 int page_nid = NUMA_NO_NODE; 90572890d20252 Peter Zijlstra 2013-10-07 4403 int last_cpupid; cbee9f88ec1b8d Peter Zijlstra 2012-10-25 4404 int target_nid; 04a8645304500b Aneesh Kumar K.V 2019-03-05 4405 pte_t pte, old_pte; 288bc54949fc26 Aneesh Kumar K.V 2017-02-24 4406 bool was_writable = pte_savedwrite(vmf->orig_pte); 6688cc05473b36 Peter Zijlstra 2013-10-07 4407 int flags = 0; d10e63f29488b0 Mel Gorman 2012-10-25 4408 d10e63f29488b0 Mel Gorman 2012-10-25 4409 /* d10e63f29488b0 Mel Gorman 2012-10-25 4410 * The "pte" at this point cannot be used safely without d10e63f29488b0 Mel Gorman 2012-10-25 4411 * validation through pte_unmap_same(). It's of NUMA type but d10e63f29488b0 Mel Gorman 2012-10-25 4412 * the pfn may be screwed if the read is non atomic. d10e63f29488b0 Mel Gorman 2012-10-25 4413 */ 82b0f8c39a3869 Jan Kara 2016-12-14 4414 vmf->ptl = pte_lockptr(vma->vm_mm, vmf->pmd); 82b0f8c39a3869 Jan Kara 2016-12-14 4415 spin_lock(vmf->ptl); cee216a696b200 Aneesh Kumar K.V 2017-02-24 4416 if (unlikely(!pte_same(*vmf->pte, vmf->orig_pte))) { 82b0f8c39a3869 Jan Kara 2016-12-14 4417 pte_unmap_unlock(vmf->pte, vmf->ptl); 4daae3b4b9e49b Mel Gorman 2012-11-02 4418 goto out; 4daae3b4b9e49b Mel Gorman 2012-11-02 4419 } 4daae3b4b9e49b Mel Gorman 2012-11-02 4420 b99a342d4f11a5 Huang Ying 2021-04-29 4421 /* Get the normal PTE */ b99a342d4f11a5 Huang Ying 2021-04-29 4422 old_pte = ptep_get(vmf->pte); 04a8645304500b Aneesh Kumar K.V 2019-03-05 4423 pte = pte_modify(old_pte, vma->vm_page_prot); d10e63f29488b0 Mel Gorman 2012-10-25 4424 82b0f8c39a3869 Jan Kara 2016-12-14 4425 page = vm_normal_page(vma, vmf->address, pte); b99a342d4f11a5 Huang Ying 2021-04-29 4426 if (!page) b99a342d4f11a5 Huang Ying 2021-04-29 4427 goto out_map; d10e63f29488b0 Mel Gorman 2012-10-25 4428 e81c48024f43b4 Kirill A. Shutemov 2016-01-15 4429 /* TODO: handle PTE-mapped THP */ b99a342d4f11a5 Huang Ying 2021-04-29 4430 if (PageCompound(page)) b99a342d4f11a5 Huang Ying 2021-04-29 4431 goto out_map; e81c48024f43b4 Kirill A. Shutemov 2016-01-15 4432 6688cc05473b36 Peter Zijlstra 2013-10-07 4433 /* bea66fbd11af1c Mel Gorman 2015-03-25 4434 * Avoid grouping on RO pages in general. RO pages shouldn't hurt as bea66fbd11af1c Mel Gorman 2015-03-25 4435 * much anyway since they can be in shared cache state. This misses bea66fbd11af1c Mel Gorman 2015-03-25 4436 * the case where a mapping is writable but the process never writes bea66fbd11af1c Mel Gorman 2015-03-25 4437 * to it but pte_write gets cleared during protection updates and bea66fbd11af1c Mel Gorman 2015-03-25 4438 * pte_dirty has unpredictable behaviour between PTE scan updates, bea66fbd11af1c Mel Gorman 2015-03-25 4439 * background writeback, dirty balancing and application behaviour. bea66fbd11af1c Mel Gorman 2015-03-25 4440 */ b99a342d4f11a5 Huang Ying 2021-04-29 4441 if (!was_writable) 6688cc05473b36 Peter Zijlstra 2013-10-07 4442 flags |= TNF_NO_GROUP; 6688cc05473b36 Peter Zijlstra 2013-10-07 4443 dabe1d992414a6 Rik van Riel 2013-10-07 4444 /* dabe1d992414a6 Rik van Riel 2013-10-07 4445 * Flag if the page is shared between multiple address spaces. This dabe1d992414a6 Rik van Riel 2013-10-07 4446 * is later used when determining whether to group tasks together dabe1d992414a6 Rik van Riel 2013-10-07 4447 */ dabe1d992414a6 Rik van Riel 2013-10-07 4448 if (page_mapcount(page) > 1 && (vma->vm_flags & VM_SHARED)) dabe1d992414a6 Rik van Riel 2013-10-07 4449 flags |= TNF_SHARED; dabe1d992414a6 Rik van Riel 2013-10-07 4450 8191acbd30c73e Mel Gorman 2013-10-07 4451 page_nid = page_to_nid(page); 8f54435bb59e21 Huang Ying 2022-05-10 4452 /* 8f54435bb59e21 Huang Ying 2022-05-10 4453 * For memory tiering mode, cpupid of slow memory page is used 8f54435bb59e21 Huang Ying 2022-05-10 4454 * to record page access time. So use default value. 8f54435bb59e21 Huang Ying 2022-05-10 4455 */ 8f54435bb59e21 Huang Ying 2022-05-10 @4456 if ((sysctl_numa_balancing_mode & NUMA_BALANCING_MEMORY_TIERING) && 8f54435bb59e21 Huang Ying 2022-05-10 4457 !node_is_toptier(page_nid)) 8f54435bb59e21 Huang Ying 2022-05-10 4458 last_cpupid = (-1 & LAST_CPUPID_MASK); 8f54435bb59e21 Huang Ying 2022-05-10 4459 else 8f54435bb59e21 Huang Ying 2022-05-10 4460 last_cpupid = page_cpupid_last(page); 82b0f8c39a3869 Jan Kara 2016-12-14 4461 target_nid = numa_migrate_prep(page, vma, vmf->address, page_nid, bae473a423f65e Kirill A. Shutemov 2016-07-26 4462 &flags); 98fa15f34cb379 Anshuman Khandual 2019-03-05 4463 if (target_nid == NUMA_NO_NODE) { 4daae3b4b9e49b Mel Gorman 2012-11-02 4464 put_page(page); b99a342d4f11a5 Huang Ying 2021-04-29 4465 goto out_map; 4daae3b4b9e49b Mel Gorman 2012-11-02 4466 } b99a342d4f11a5 Huang Ying 2021-04-29 4467 pte_unmap_unlock(vmf->pte, vmf->ptl); 4daae3b4b9e49b Mel Gorman 2012-11-02 4468 4daae3b4b9e49b Mel Gorman 2012-11-02 4469 /* Migrate to the requested node */ bf90ac198e30d2 Wang Qing 2021-04-29 4470 if (migrate_misplaced_page(page, vma, target_nid)) { 8191acbd30c73e Mel Gorman 2013-10-07 4471 page_nid = target_nid; 6688cc05473b36 Peter Zijlstra 2013-10-07 4472 flags |= TNF_MIGRATED; b99a342d4f11a5 Huang Ying 2021-04-29 4473 } else { 074c238177a75f Mel Gorman 2015-03-25 4474 flags |= TNF_MIGRATE_FAIL; b99a342d4f11a5 Huang Ying 2021-04-29 4475 vmf->pte = pte_offset_map(vmf->pmd, vmf->address); b99a342d4f11a5 Huang Ying 2021-04-29 4476 spin_lock(vmf->ptl); b99a342d4f11a5 Huang Ying 2021-04-29 4477 if (unlikely(!pte_same(*vmf->pte, vmf->orig_pte))) { b99a342d4f11a5 Huang Ying 2021-04-29 4478 pte_unmap_unlock(vmf->pte, vmf->ptl); b99a342d4f11a5 Huang Ying 2021-04-29 4479 goto out; b99a342d4f11a5 Huang Ying 2021-04-29 4480 } b99a342d4f11a5 Huang Ying 2021-04-29 4481 goto out_map; b99a342d4f11a5 Huang Ying 2021-04-29 4482 } 4daae3b4b9e49b Mel Gorman 2012-11-02 4483 4daae3b4b9e49b Mel Gorman 2012-11-02 4484 out: 98fa15f34cb379 Anshuman Khandual 2019-03-05 4485 if (page_nid != NUMA_NO_NODE) 6688cc05473b36 Peter Zijlstra 2013-10-07 4486 task_numa_fault(last_cpupid, page_nid, 1, flags); d10e63f29488b0 Mel Gorman 2012-10-25 4487 return 0; b99a342d4f11a5 Huang Ying 2021-04-29 4488 out_map: b99a342d4f11a5 Huang Ying 2021-04-29 4489 /* b99a342d4f11a5 Huang Ying 2021-04-29 4490 * Make it present again, depending on how arch implements b99a342d4f11a5 Huang Ying 2021-04-29 4491 * non-accessible ptes, some can allow access by kernel mode. b99a342d4f11a5 Huang Ying 2021-04-29 4492 */ b99a342d4f11a5 Huang Ying 2021-04-29 4493 old_pte = ptep_modify_prot_start(vma, vmf->address, vmf->pte); b99a342d4f11a5 Huang Ying 2021-04-29 4494 pte = pte_modify(old_pte, vma->vm_page_prot); b99a342d4f11a5 Huang Ying 2021-04-29 4495 pte = pte_mkyoung(pte); b99a342d4f11a5 Huang Ying 2021-04-29 4496 if (was_writable) b99a342d4f11a5 Huang Ying 2021-04-29 4497 pte = pte_mkwrite(pte); b99a342d4f11a5 Huang Ying 2021-04-29 4498 ptep_modify_prot_commit(vma, vmf->address, vmf->pte, old_pte, pte); b99a342d4f11a5 Huang Ying 2021-04-29 4499 update_mmu_cache(vma, vmf->address, vmf->pte); b99a342d4f11a5 Huang Ying 2021-04-29 4500 pte_unmap_unlock(vmf->pte, vmf->ptl); b99a342d4f11a5 Huang Ying 2021-04-29 4501 goto out; d10e63f29488b0 Mel Gorman 2012-10-25 4502 } d10e63f29488b0 Mel Gorman 2012-10-25 4503 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
