Haren Myneni b59c9dc4d9 powerpc/pseries/vas: Hold mmap_mutex after mmap lock during window close
Commit 8ef7b9e1765a ("powerpc/pseries/vas: Close windows with DLPAR
core removal") unmaps the window paste address and issues HCALL to
close window in the hypervisor for migration or DLPAR core removal
events. So holds mmap_mutex and then mmap lock before unmap the
paste address. But if the user space issue mmap paste address at
the same time with the migration event, coproc_mmap() is called
after holding the mmap lock which can trigger deadlock when trying
to acquire mmap_mutex in coproc_mmap().

t1: mmap() call to mmap              t2: Migration event
    window paste address

do_mmap2()                           migration_store()
 ksys_mmap_pgoff()                    pseries_migrate_partition()
  vm_mmap_pgoff()                      vas_migration_handler()
    Acquire mmap lock                   reconfig_close_windows()
    do_mmap()                             lock mmap_mutex
     mmap_region()                        Acquire mmap lock
      call_mmap()                         //Wait for mmap lock
       coproc_mmap()                        unmap vma
         lock mmap_mutex                    update window status
         //wait for mmap_mutex            Release mmap lock
          mmap vma                        unlock mmap_mutex
          update window status
         unlock mmap_mutex
    ...
    Release mmap lock

Fix this deadlock issue by holding mmap lock first before mmap_mutex
in reconfig_close_windows().

Fixes: 8ef7b9e1765a ("powerpc/pseries/vas: Close windows with DLPAR core removal")
Signed-off-by: Haren Myneni <haren@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20230716100506.7833-1-haren@linux.ibm.com
2023-07-17 10:35:06 +10:00
..
2023-06-28 20:35:21 -07:00
2023-07-06 10:06:04 -07:00
2023-07-06 10:06:04 -07:00
2023-07-01 21:12:32 -07:00
2023-06-28 20:35:21 -07:00
2023-07-01 09:24:31 -07:00
2023-07-06 10:06:04 -07:00
2023-07-06 10:06:04 -07:00
2023-06-29 16:34:12 -07:00
2023-07-09 10:02:49 -07:00
2023-06-29 16:34:12 -07:00
2023-07-12 16:28:53 -07:00
2023-07-14 11:14:07 -07:00
2023-07-13 13:34:00 -07:00