On Mon, Nov 10, 2014 at 12:21:39PM +0200, Oded Gabbay wrote: > 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())
Right, there was a double drop of the reference to device state. An alternative would have been to remove the put_device_state call at the end of the amd_iommu_unbind_pasid() function. But this patch works as well and is slightly better, so: Applied, thanks. Joerg -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/