• Brett Creeley's avatar
    vfio/pds: Fix mutex lock->magic != lock warning · 91aeb563
    Brett Creeley authored
    The following BUG was found when running on a kernel with
    CONFIG_DEBUG_MUTEXES=y set:
    
    DEBUG_LOCKS_WARN_ON(lock->magic != lock)
    RIP: 0010:mutex_trylock+0x10d/0x120
    Call Trace:
     <TASK>
     ? __warn+0x85/0x140
     ? mutex_trylock+0x10d/0x120
     ? report_bug+0xfc/0x1e0
     ? handle_bug+0x3f/0x70
     ? exc_invalid_op+0x17/0x70
     ? asm_exc_invalid_op+0x1a/0x20
     ? mutex_trylock+0x10d/0x120
     ? mutex_trylock+0x10d/0x120
     pds_vfio_reset+0x3a/0x60 [pds_vfio_pci]
     pci_reset_function+0x4b/0x70
     reset_store+0x5b/0xa0
     kernfs_fop_write_iter+0x137/0x1d0
     vfs_write+0x2de/0x410
     ksys_write+0x5d/0xd0
     do_syscall_64+0x3b/0x90
     entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    
    As shown, lock->magic != lock. This is because
    mutex_init(&pds_vfio->state_mutex) is called in the VFIO open path. So,
    if a reset is initiated before the VFIO device is opened the mutex will
    have never been initialized. Fix this by calling
    mutex_init(&pds_vfio->state_mutex) in the VFIO init path.
    
    Also, don't destroy the mutex on close because the device may
    be re-opened, which would cause mutex to be uninitialized. Fix this by
    implementing a driver specific vfio_device_ops.release callback that
    destroys the mutex before calling vfio_pci_core_release_dev().
    
    Fixes: bb500dbe ("vfio/pds: Add VFIO live migration support")
    Signed-off-by: default avatarBrett Creeley <brett.creeley@amd.com>
    Reviewed-by: default avatarShannon Nelson <shannon.nelson@amd.com>
    Link: https://lore.kernel.org/r/20231122192532.25791-2-brett.creeley@amd.comSigned-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    91aeb563
vfio_dev.c 6.32 KB