• Oded Gabbay's avatar
    iommu/amd: fix accounting of device_state · a015c1e9
    Oded Gabbay authored
    This patch fixes a bug in the accounting of the device_state.
    In the current code, the device_state was put (decremented) too many times,
    which sometimes lead to the driver getting stuck permanently in
    put_device_state_wait(). That happen because the device_state->count would go
    below zero, which is never supposed to happen.
    
    The root cause is that the device_state was decremented in put_pasid_state()
    and put_pasid_state_wait() but also in all the functions that call those
    functions. Therefore, the device_state was decremented twice in each of these
    code paths.
    
    The fix is to decouple the device_state accounting from the pasid_state
    accounting - remove the call to put_device_state() from the
    put_pasid_state() and the put_pasid_state_wait())
    Signed-off-by: default avatarOded Gabbay <oded.gabbay@amd.com>
    a015c1e9
amd_iommu_v2.c 21.2 KB