CC: [email protected]
CC: Linux Memory Management List <[email protected]>
TO: Alistair Popple <[email protected]>
CC: Christoph Hellwig <[email protected]>
CC: Andrew Morton <[email protected]>
CC: Linux Memory Management List <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 
master
head:   7f09e895a7f3e0af63bf9ec6c7c22893ec7e6c8e
commit: f5f527a1d5a54729468ddd11b589e95e4ba55f3d [7146/7700] mm: device 
exclusive memory access
:::::: branch date: 17 hours ago
:::::: commit date: 2 days ago
config: parisc-randconfig-s032-20210607 (attached as .config)
compiler: hppa64-linux-gcc (GCC) 9.3.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.3-341-g8af24329-dirty
        # 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=f5f527a1d5a54729468ddd11b589e95e4ba55f3d
        git remote add linux-next 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
        git fetch --no-tags linux-next master
        git checkout f5f527a1d5a54729468ddd11b589e95e4ba55f3d
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 
CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=parisc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>


sparse warnings: (new ones prefixed by >>)
   mm/rmap.c: note: in included file (through include/linux/ksm.h):
   include/linux/rmap.h:221:28: sparse: sparse: context imbalance in 
'page_referenced_one' - unexpected unlock
   mm/rmap.c:970:25: sparse: sparse: context imbalance in 'page_mkclean_one' - 
different lock contexts for basic block
   include/linux/rmap.h:221:28: sparse: sparse: context imbalance in 
'try_to_unmap_one' - unexpected unlock
   mm/rmap.c:1899:17: sparse: sparse: context imbalance in 'try_to_migrate_one' 
- different lock contexts for basic block
   include/linux/rmap.h:221:28: sparse: sparse: context imbalance in 
'page_mlock_one' - unexpected unlock
>> mm/rmap.c:2097:17: sparse: sparse: context imbalance in 
>> 'page_make_device_exclusive_one' - different lock contexts for basic block

vim +/page_make_device_exclusive_one +2097 mm/rmap.c

f5f527a1d5a547 Alistair Popple 2021-06-04  2017  
f5f527a1d5a547 Alistair Popple 2021-06-04  2018  static bool 
page_make_device_exclusive_one(struct page *page,
f5f527a1d5a547 Alistair Popple 2021-06-04  2019                 struct 
vm_area_struct *vma, unsigned long address, void *priv)
f5f527a1d5a547 Alistair Popple 2021-06-04  2020  {
f5f527a1d5a547 Alistair Popple 2021-06-04  2021         struct mm_struct *mm = 
vma->vm_mm;
f5f527a1d5a547 Alistair Popple 2021-06-04  2022         struct 
page_vma_mapped_walk pvmw = {
f5f527a1d5a547 Alistair Popple 2021-06-04  2023                 .page = page,
f5f527a1d5a547 Alistair Popple 2021-06-04  2024                 .vma = vma,
f5f527a1d5a547 Alistair Popple 2021-06-04  2025                 .address = 
address,
f5f527a1d5a547 Alistair Popple 2021-06-04  2026         };
f5f527a1d5a547 Alistair Popple 2021-06-04  2027         struct 
make_exclusive_args *args = priv;
f5f527a1d5a547 Alistair Popple 2021-06-04  2028         pte_t pteval;
f5f527a1d5a547 Alistair Popple 2021-06-04  2029         struct page *subpage;
f5f527a1d5a547 Alistair Popple 2021-06-04  2030         bool ret = true;
f5f527a1d5a547 Alistair Popple 2021-06-04  2031         struct 
mmu_notifier_range range;
f5f527a1d5a547 Alistair Popple 2021-06-04  2032         swp_entry_t entry;
f5f527a1d5a547 Alistair Popple 2021-06-04  2033         pte_t swp_pte;
f5f527a1d5a547 Alistair Popple 2021-06-04  2034  
f5f527a1d5a547 Alistair Popple 2021-06-04  2035         
mmu_notifier_range_init_owner(&range, MMU_NOTIFY_EXCLUSIVE, 0, vma,
f5f527a1d5a547 Alistair Popple 2021-06-04  2036                                 
      vma->vm_mm, address, min(vma->vm_end,
f5f527a1d5a547 Alistair Popple 2021-06-04  2037                                 
      address + page_size(page)), args->owner);
f5f527a1d5a547 Alistair Popple 2021-06-04  2038         
mmu_notifier_invalidate_range_start(&range);
f5f527a1d5a547 Alistair Popple 2021-06-04  2039  
f5f527a1d5a547 Alistair Popple 2021-06-04  2040         while 
(page_vma_mapped_walk(&pvmw)) {
f5f527a1d5a547 Alistair Popple 2021-06-04  2041                 /* Unexpected 
PMD-mapped THP? */
f5f527a1d5a547 Alistair Popple 2021-06-04  2042                 
VM_BUG_ON_PAGE(!pvmw.pte, page);
f5f527a1d5a547 Alistair Popple 2021-06-04  2043  
f5f527a1d5a547 Alistair Popple 2021-06-04  2044                 if 
(!pte_present(*pvmw.pte)) {
f5f527a1d5a547 Alistair Popple 2021-06-04  2045                         ret = 
false;
f5f527a1d5a547 Alistair Popple 2021-06-04  2046                         
page_vma_mapped_walk_done(&pvmw);
f5f527a1d5a547 Alistair Popple 2021-06-04  2047                         break;
f5f527a1d5a547 Alistair Popple 2021-06-04  2048                 }
f5f527a1d5a547 Alistair Popple 2021-06-04  2049  
f5f527a1d5a547 Alistair Popple 2021-06-04  2050                 subpage = page 
- page_to_pfn(page) + pte_pfn(*pvmw.pte);
f5f527a1d5a547 Alistair Popple 2021-06-04  2051                 address = 
pvmw.address;
f5f527a1d5a547 Alistair Popple 2021-06-04  2052  
f5f527a1d5a547 Alistair Popple 2021-06-04  2053                 /* Nuke the 
page table entry. */
f5f527a1d5a547 Alistair Popple 2021-06-04  2054                 
flush_cache_page(vma, address, pte_pfn(*pvmw.pte));
f5f527a1d5a547 Alistair Popple 2021-06-04  2055                 pteval = 
ptep_clear_flush(vma, address, pvmw.pte);
f5f527a1d5a547 Alistair Popple 2021-06-04  2056  
f5f527a1d5a547 Alistair Popple 2021-06-04  2057                 /* Move the 
dirty bit to the page. Now the pte is gone. */
f5f527a1d5a547 Alistair Popple 2021-06-04  2058                 if 
(pte_dirty(pteval))
f5f527a1d5a547 Alistair Popple 2021-06-04  2059                         
set_page_dirty(page);
f5f527a1d5a547 Alistair Popple 2021-06-04  2060  
f5f527a1d5a547 Alistair Popple 2021-06-04  2061                 if 
(arch_unmap_one(mm, vma, address, pteval) < 0) {
f5f527a1d5a547 Alistair Popple 2021-06-04  2062                         
set_pte_at(mm, address, pvmw.pte, pteval);
f5f527a1d5a547 Alistair Popple 2021-06-04  2063                         ret = 
false;
f5f527a1d5a547 Alistair Popple 2021-06-04  2064                         
page_vma_mapped_walk_done(&pvmw);
f5f527a1d5a547 Alistair Popple 2021-06-04  2065                         break;
f5f527a1d5a547 Alistair Popple 2021-06-04  2066                 }
f5f527a1d5a547 Alistair Popple 2021-06-04  2067  
f5f527a1d5a547 Alistair Popple 2021-06-04  2068                 /*
f5f527a1d5a547 Alistair Popple 2021-06-04  2069                  * Check that 
our target page is still mapped at the expected
f5f527a1d5a547 Alistair Popple 2021-06-04  2070                  * address.
f5f527a1d5a547 Alistair Popple 2021-06-04  2071                  */
f5f527a1d5a547 Alistair Popple 2021-06-04  2072                 if (args->mm == 
mm && args->address == address &&
f5f527a1d5a547 Alistair Popple 2021-06-04  2073                     
pte_write(pteval))
f5f527a1d5a547 Alistair Popple 2021-06-04  2074                         
args->valid = true;
f5f527a1d5a547 Alistair Popple 2021-06-04  2075  
f5f527a1d5a547 Alistair Popple 2021-06-04  2076                 /*
f5f527a1d5a547 Alistair Popple 2021-06-04  2077                  * Store the 
pfn of the page in a special migration
f5f527a1d5a547 Alistair Popple 2021-06-04  2078                  * pte. 
do_swap_page() will wait until the migration
f5f527a1d5a547 Alistair Popple 2021-06-04  2079                  * pte is 
removed and then restart fault handling.
f5f527a1d5a547 Alistair Popple 2021-06-04  2080                  */
f5f527a1d5a547 Alistair Popple 2021-06-04  2081                 if 
(pte_write(pteval))
f5f527a1d5a547 Alistair Popple 2021-06-04  2082                         entry = 
make_writable_device_exclusive_entry(
f5f527a1d5a547 Alistair Popple 2021-06-04  2083                                 
                        page_to_pfn(subpage));
f5f527a1d5a547 Alistair Popple 2021-06-04  2084                 else
f5f527a1d5a547 Alistair Popple 2021-06-04  2085                         entry = 
make_readable_device_exclusive_entry(
f5f527a1d5a547 Alistair Popple 2021-06-04  2086                                 
                        page_to_pfn(subpage));
f5f527a1d5a547 Alistair Popple 2021-06-04  2087                 swp_pte = 
swp_entry_to_pte(entry);
f5f527a1d5a547 Alistair Popple 2021-06-04  2088                 if 
(pte_soft_dirty(pteval))
f5f527a1d5a547 Alistair Popple 2021-06-04  2089                         swp_pte 
= pte_swp_mksoft_dirty(swp_pte);
f5f527a1d5a547 Alistair Popple 2021-06-04  2090                 if 
(pte_uffd_wp(pteval))
f5f527a1d5a547 Alistair Popple 2021-06-04  2091                         swp_pte 
= pte_swp_mkuffd_wp(swp_pte);
f5f527a1d5a547 Alistair Popple 2021-06-04  2092  
f5f527a1d5a547 Alistair Popple 2021-06-04  2093                 /* Take a 
reference for the swap entry */
f5f527a1d5a547 Alistair Popple 2021-06-04  2094                 get_page(page);
f5f527a1d5a547 Alistair Popple 2021-06-04  2095                 set_pte_at(mm, 
address, pvmw.pte, swp_pte);
f5f527a1d5a547 Alistair Popple 2021-06-04  2096  
f5f527a1d5a547 Alistair Popple 2021-06-04 @2097                 
page_remove_rmap(subpage, PageHuge(page));
f5f527a1d5a547 Alistair Popple 2021-06-04  2098                 put_page(page);
f5f527a1d5a547 Alistair Popple 2021-06-04  2099         }
f5f527a1d5a547 Alistair Popple 2021-06-04  2100  
f5f527a1d5a547 Alistair Popple 2021-06-04  2101         
mmu_notifier_invalidate_range_end(&range);
f5f527a1d5a547 Alistair Popple 2021-06-04  2102  
f5f527a1d5a547 Alistair Popple 2021-06-04  2103         return ret;
f5f527a1d5a547 Alistair Popple 2021-06-04  2104  }
f5f527a1d5a547 Alistair Popple 2021-06-04  2105  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to