s390 updates for v6.0-rc7
- Fix potential hangs in VFIO AP driver. -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEE3QHqV+H2a8xAv27vjYWKoQLXFBgFAmMvKacACgkQjYWKoQLX FBivOQf/QZl/+75X+ZKUw7Mt6CpE8iIxxEhqFL5elhkl6CWx2JClGCl5IrzMBF8R ok9rvpg2vc/1ZCis0Vyfverhv8WzSang5zJ0lf80HTw9ZB0s8fxp7ojo8uaQkmJA ZWdbeXz4xk40ZpFaUmmJIh0djYGG+k8j/tcfjU5Gvy8IcGS6WoSD2Zh8hvAP+ezZ sUy+2dmEp70VCXBgTClHyfhrswg9A9VFmIVKusAewmy553R/OGyoYiXXe3CE3qpY DzrBvvQIh27q6MArlsC6Nu1R2U2Zwq2prKrKU9DjbV1uj4GX8JV2dDhavDC53ZfE 6Hxas6fj3UAv/11ItJQF0gxvw8c3bg== =8Acj -----END PGP SIGNATURE----- Merge tag 's390-6.0-5' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux Pull s390 fix from Vasily Gorbik: - Fix potential hangs in VFIO AP driver * tag 's390-6.0-5' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: s390/vfio-ap: bypass unnecessary processing of AP resources
This commit is contained in:
commit
23b99237f8
@ -984,6 +984,11 @@ static ssize_t assign_adapter_store(struct device *dev,
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (test_bit_inv(apid, matrix_mdev->matrix.apm)) {
|
||||
ret = count;
|
||||
goto done;
|
||||
}
|
||||
|
||||
set_bit_inv(apid, matrix_mdev->matrix.apm);
|
||||
|
||||
ret = vfio_ap_mdev_validate_masks(matrix_mdev);
|
||||
@ -1109,6 +1114,11 @@ static ssize_t unassign_adapter_store(struct device *dev,
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!test_bit_inv(apid, matrix_mdev->matrix.apm)) {
|
||||
ret = count;
|
||||
goto done;
|
||||
}
|
||||
|
||||
clear_bit_inv((unsigned long)apid, matrix_mdev->matrix.apm);
|
||||
vfio_ap_mdev_hot_unplug_adapter(matrix_mdev, apid);
|
||||
ret = count;
|
||||
@ -1183,6 +1193,11 @@ static ssize_t assign_domain_store(struct device *dev,
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (test_bit_inv(apqi, matrix_mdev->matrix.aqm)) {
|
||||
ret = count;
|
||||
goto done;
|
||||
}
|
||||
|
||||
set_bit_inv(apqi, matrix_mdev->matrix.aqm);
|
||||
|
||||
ret = vfio_ap_mdev_validate_masks(matrix_mdev);
|
||||
@ -1286,6 +1301,11 @@ static ssize_t unassign_domain_store(struct device *dev,
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!test_bit_inv(apqi, matrix_mdev->matrix.aqm)) {
|
||||
ret = count;
|
||||
goto done;
|
||||
}
|
||||
|
||||
clear_bit_inv((unsigned long)apqi, matrix_mdev->matrix.aqm);
|
||||
vfio_ap_mdev_hot_unplug_domain(matrix_mdev, apqi);
|
||||
ret = count;
|
||||
@ -1329,6 +1349,11 @@ static ssize_t assign_control_domain_store(struct device *dev,
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (test_bit_inv(id, matrix_mdev->matrix.adm)) {
|
||||
ret = count;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Set the bit in the ADM (bitmask) corresponding to the AP control
|
||||
* domain number (id). The bits in the mask, from most significant to
|
||||
* least significant, correspond to IDs 0 up to the one less than the
|
||||
@ -1378,6 +1403,11 @@ static ssize_t unassign_control_domain_store(struct device *dev,
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!test_bit_inv(domid, matrix_mdev->matrix.adm)) {
|
||||
ret = count;
|
||||
goto done;
|
||||
}
|
||||
|
||||
clear_bit_inv(domid, matrix_mdev->matrix.adm);
|
||||
|
||||
if (test_bit_inv(domid, matrix_mdev->shadow_apcb.adm)) {
|
||||
|
Loading…
Reference in New Issue
Block a user