CC: [email protected] CC: [email protected] TO: Huang Ying <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/vishal/tiering.git tiering-0.8 head: d58c7b0e1a99a2ec17f2910a310835bafc50b4d1 commit: a5991df63566277963f7ea69181a8341412fcc7b [4/44] memory tiering: hot page selection with hint page fault latency :::::: branch date: 2 days ago :::::: commit date: 10 weeks ago config: x86_64-randconfig-m001 (https://download.01.org/0day-ci/archive/20220114/[email protected]/config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.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:4397 do_numa_page() warn: bitwise AND condition is false here vim +4397 mm/memory.c 9532fec118d485 Mel Gorman 2012-11-15 4338 2b7403035459c7 Souptick Joarder 2018-08-23 4339 static vm_fault_t do_numa_page(struct vm_fault *vmf) d10e63f29488b0 Mel Gorman 2012-10-25 4340 { 82b0f8c39a3869 Jan Kara 2016-12-14 4341 struct vm_area_struct *vma = vmf->vma; 4daae3b4b9e49b Mel Gorman 2012-11-02 4342 struct page *page = NULL; 98fa15f34cb379 Anshuman Khandual 2019-03-05 4343 int page_nid = NUMA_NO_NODE; 90572890d20252 Peter Zijlstra 2013-10-07 4344 int last_cpupid; cbee9f88ec1b8d Peter Zijlstra 2012-10-25 4345 int target_nid; 04a8645304500b Aneesh Kumar K.V 2019-03-05 4346 pte_t pte, old_pte; 288bc54949fc26 Aneesh Kumar K.V 2017-02-24 4347 bool was_writable = pte_savedwrite(vmf->orig_pte); 6688cc05473b36 Peter Zijlstra 2013-10-07 4348 int flags = 0; d10e63f29488b0 Mel Gorman 2012-10-25 4349 d10e63f29488b0 Mel Gorman 2012-10-25 4350 /* d10e63f29488b0 Mel Gorman 2012-10-25 4351 * The "pte" at this point cannot be used safely without d10e63f29488b0 Mel Gorman 2012-10-25 4352 * validation through pte_unmap_same(). It's of NUMA type but d10e63f29488b0 Mel Gorman 2012-10-25 4353 * the pfn may be screwed if the read is non atomic. d10e63f29488b0 Mel Gorman 2012-10-25 4354 */ 82b0f8c39a3869 Jan Kara 2016-12-14 4355 vmf->ptl = pte_lockptr(vma->vm_mm, vmf->pmd); 82b0f8c39a3869 Jan Kara 2016-12-14 4356 spin_lock(vmf->ptl); cee216a696b200 Aneesh Kumar K.V 2017-02-24 4357 if (unlikely(!pte_same(*vmf->pte, vmf->orig_pte))) { 82b0f8c39a3869 Jan Kara 2016-12-14 4358 pte_unmap_unlock(vmf->pte, vmf->ptl); 4daae3b4b9e49b Mel Gorman 2012-11-02 4359 goto out; 4daae3b4b9e49b Mel Gorman 2012-11-02 4360 } 4daae3b4b9e49b Mel Gorman 2012-11-02 4361 b99a342d4f11a5 Huang Ying 2021-04-29 4362 /* Get the normal PTE */ b99a342d4f11a5 Huang Ying 2021-04-29 4363 old_pte = ptep_get(vmf->pte); 04a8645304500b Aneesh Kumar K.V 2019-03-05 4364 pte = pte_modify(old_pte, vma->vm_page_prot); d10e63f29488b0 Mel Gorman 2012-10-25 4365 82b0f8c39a3869 Jan Kara 2016-12-14 4366 page = vm_normal_page(vma, vmf->address, pte); b99a342d4f11a5 Huang Ying 2021-04-29 4367 if (!page) b99a342d4f11a5 Huang Ying 2021-04-29 4368 goto out_map; d10e63f29488b0 Mel Gorman 2012-10-25 4369 e81c48024f43b4 Kirill A. Shutemov 2016-01-15 4370 /* TODO: handle PTE-mapped THP */ b99a342d4f11a5 Huang Ying 2021-04-29 4371 if (PageCompound(page)) b99a342d4f11a5 Huang Ying 2021-04-29 4372 goto out_map; e81c48024f43b4 Kirill A. Shutemov 2016-01-15 4373 6688cc05473b36 Peter Zijlstra 2013-10-07 4374 /* bea66fbd11af1c Mel Gorman 2015-03-25 4375 * Avoid grouping on RO pages in general. RO pages shouldn't hurt as bea66fbd11af1c Mel Gorman 2015-03-25 4376 * much anyway since they can be in shared cache state. This misses bea66fbd11af1c Mel Gorman 2015-03-25 4377 * the case where a mapping is writable but the process never writes bea66fbd11af1c Mel Gorman 2015-03-25 4378 * to it but pte_write gets cleared during protection updates and bea66fbd11af1c Mel Gorman 2015-03-25 4379 * pte_dirty has unpredictable behaviour between PTE scan updates, bea66fbd11af1c Mel Gorman 2015-03-25 4380 * background writeback, dirty balancing and application behaviour. bea66fbd11af1c Mel Gorman 2015-03-25 4381 */ b99a342d4f11a5 Huang Ying 2021-04-29 4382 if (!was_writable) 6688cc05473b36 Peter Zijlstra 2013-10-07 4383 flags |= TNF_NO_GROUP; 6688cc05473b36 Peter Zijlstra 2013-10-07 4384 dabe1d992414a6 Rik van Riel 2013-10-07 4385 /* dabe1d992414a6 Rik van Riel 2013-10-07 4386 * Flag if the page is shared between multiple address spaces. This dabe1d992414a6 Rik van Riel 2013-10-07 4387 * is later used when determining whether to group tasks together dabe1d992414a6 Rik van Riel 2013-10-07 4388 */ dabe1d992414a6 Rik van Riel 2013-10-07 4389 if (page_mapcount(page) > 1 && (vma->vm_flags & VM_SHARED)) dabe1d992414a6 Rik van Riel 2013-10-07 4390 flags |= TNF_SHARED; dabe1d992414a6 Rik van Riel 2013-10-07 4391 8191acbd30c73e Mel Gorman 2013-10-07 4392 page_nid = page_to_nid(page); a5991df6356627 Huang Ying 2020-06-11 4393 /* a5991df6356627 Huang Ying 2020-06-11 4394 * In memory tiering mode, cpupid of slow memory page is used a5991df6356627 Huang Ying 2020-06-11 4395 * to record page access time. So use default value. a5991df6356627 Huang Ying 2020-06-11 4396 */ a5991df6356627 Huang Ying 2020-06-11 @4397 if ((sysctl_numa_balancing_mode & NUMA_BALANCING_MEMORY_TIERING) && a5991df6356627 Huang Ying 2020-06-11 4398 !node_is_toptier(page_nid)) a5991df6356627 Huang Ying 2020-06-11 4399 last_cpupid = (-1 & LAST_CPUPID_MASK); a5991df6356627 Huang Ying 2020-06-11 4400 else a5991df6356627 Huang Ying 2020-06-11 4401 last_cpupid = page_cpupid_last(page); 82b0f8c39a3869 Jan Kara 2016-12-14 4402 target_nid = numa_migrate_prep(page, vma, vmf->address, page_nid, bae473a423f65e Kirill A. Shutemov 2016-07-26 4403 &flags); 98fa15f34cb379 Anshuman Khandual 2019-03-05 4404 if (target_nid == NUMA_NO_NODE) { 4daae3b4b9e49b Mel Gorman 2012-11-02 4405 put_page(page); b99a342d4f11a5 Huang Ying 2021-04-29 4406 goto out_map; 4daae3b4b9e49b Mel Gorman 2012-11-02 4407 } b99a342d4f11a5 Huang Ying 2021-04-29 4408 pte_unmap_unlock(vmf->pte, vmf->ptl); 4daae3b4b9e49b Mel Gorman 2012-11-02 4409 4daae3b4b9e49b Mel Gorman 2012-11-02 4410 /* Migrate to the requested node */ bf90ac198e30d2 Wang Qing 2021-04-29 4411 if (migrate_misplaced_page(page, vma, target_nid)) { 8191acbd30c73e Mel Gorman 2013-10-07 4412 page_nid = target_nid; 6688cc05473b36 Peter Zijlstra 2013-10-07 4413 flags |= TNF_MIGRATED; b99a342d4f11a5 Huang Ying 2021-04-29 4414 } else { 074c238177a75f Mel Gorman 2015-03-25 4415 flags |= TNF_MIGRATE_FAIL; b99a342d4f11a5 Huang Ying 2021-04-29 4416 vmf->pte = pte_offset_map(vmf->pmd, vmf->address); b99a342d4f11a5 Huang Ying 2021-04-29 4417 spin_lock(vmf->ptl); b99a342d4f11a5 Huang Ying 2021-04-29 4418 if (unlikely(!pte_same(*vmf->pte, vmf->orig_pte))) { b99a342d4f11a5 Huang Ying 2021-04-29 4419 pte_unmap_unlock(vmf->pte, vmf->ptl); b99a342d4f11a5 Huang Ying 2021-04-29 4420 goto out; b99a342d4f11a5 Huang Ying 2021-04-29 4421 } b99a342d4f11a5 Huang Ying 2021-04-29 4422 goto out_map; b99a342d4f11a5 Huang Ying 2021-04-29 4423 } 4daae3b4b9e49b Mel Gorman 2012-11-02 4424 4daae3b4b9e49b Mel Gorman 2012-11-02 4425 out: 98fa15f34cb379 Anshuman Khandual 2019-03-05 4426 if (page_nid != NUMA_NO_NODE) 6688cc05473b36 Peter Zijlstra 2013-10-07 4427 task_numa_fault(last_cpupid, page_nid, 1, flags); d10e63f29488b0 Mel Gorman 2012-10-25 4428 return 0; b99a342d4f11a5 Huang Ying 2021-04-29 4429 out_map: b99a342d4f11a5 Huang Ying 2021-04-29 4430 /* b99a342d4f11a5 Huang Ying 2021-04-29 4431 * Make it present again, depending on how arch implements b99a342d4f11a5 Huang Ying 2021-04-29 4432 * non-accessible ptes, some can allow access by kernel mode. b99a342d4f11a5 Huang Ying 2021-04-29 4433 */ b99a342d4f11a5 Huang Ying 2021-04-29 4434 old_pte = ptep_modify_prot_start(vma, vmf->address, vmf->pte); b99a342d4f11a5 Huang Ying 2021-04-29 4435 pte = pte_modify(old_pte, vma->vm_page_prot); b99a342d4f11a5 Huang Ying 2021-04-29 4436 pte = pte_mkyoung(pte); b99a342d4f11a5 Huang Ying 2021-04-29 4437 if (was_writable) b99a342d4f11a5 Huang Ying 2021-04-29 4438 pte = pte_mkwrite(pte); b99a342d4f11a5 Huang Ying 2021-04-29 4439 ptep_modify_prot_commit(vma, vmf->address, vmf->pte, old_pte, pte); b99a342d4f11a5 Huang Ying 2021-04-29 4440 update_mmu_cache(vma, vmf->address, vmf->pte); b99a342d4f11a5 Huang Ying 2021-04-29 4441 pte_unmap_unlock(vmf->pte, vmf->ptl); b99a342d4f11a5 Huang Ying 2021-04-29 4442 goto out; d10e63f29488b0 Mel Gorman 2012-10-25 4443 } d10e63f29488b0 Mel Gorman 2012-10-25 4444 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
