From 3f777d51e0c44dcc9fa6737ab57bfbdcf6d91f17 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sun, 31 Jan 2021 17:09:58 +0100 Subject: [PATCH] drop s390-vfio-ap-clean-up-vfio_ap-resources-when-kvm-pointer-invalidated.patch --- ...sources-when-kvm-pointer-invalidated.patch | 140 ------------------ queue-5.10/series | 1 - ...sources-when-kvm-pointer-invalidated.patch | 140 ------------------ queue-5.4/series | 1 - 4 files changed, 282 deletions(-) delete mode 100644 queue-5.10/s390-vfio-ap-clean-up-vfio_ap-resources-when-kvm-pointer-invalidated.patch delete mode 100644 queue-5.4/s390-vfio-ap-clean-up-vfio_ap-resources-when-kvm-pointer-invalidated.patch diff --git a/queue-5.10/s390-vfio-ap-clean-up-vfio_ap-resources-when-kvm-pointer-invalidated.patch b/queue-5.10/s390-vfio-ap-clean-up-vfio_ap-resources-when-kvm-pointer-invalidated.patch deleted file mode 100644 index 34c3bd4293c..00000000000 --- a/queue-5.10/s390-vfio-ap-clean-up-vfio_ap-resources-when-kvm-pointer-invalidated.patch +++ /dev/null @@ -1,140 +0,0 @@ -From f21916ec4826766463fe9fb55a5f43d2a365811d Mon Sep 17 00:00:00 2001 -From: Tony Krowiak -Date: Tue, 22 Dec 2020 20:20:13 -0500 -Subject: s390/vfio-ap: clean up vfio_ap resources when KVM pointer invalidated - -From: Tony Krowiak - -commit f21916ec4826766463fe9fb55a5f43d2a365811d upstream. - -The vfio_ap device driver registers a group notifier with VFIO when the -file descriptor for a VFIO mediated device for a KVM guest is opened to -receive notification that the KVM pointer is set (VFIO_GROUP_NOTIFY_SET_KVM -event). When the KVM pointer is set, the vfio_ap driver takes the -following actions: -1. Stashes the KVM pointer in the vfio_ap_mdev struct that holds the state - of the mediated device. -2. Calls the kvm_get_kvm() function to increment its reference counter. -3. Sets the function pointer to the function that handles interception of - the instruction that enables/disables interrupt processing. -4. Sets the masks in the KVM guest's CRYCB to pass AP resources through to - the guest. - -In order to avoid memory leaks, when the notifier is called to receive -notification that the KVM pointer has been set to NULL, the vfio_ap device -driver should reverse the actions taken when the KVM pointer was set. - -Fixes: 258287c994de ("s390: vfio-ap: implement mediated device open callback") -Signed-off-by: Tony Krowiak -Reviewed-by: Halil Pasic -Reviewed-by: Cornelia Huck -Cc: stable@vger.kernel.org -Link: https://lore.kernel.org/r/20201223012013.5418-1-akrowiak@linux.ibm.com -Signed-off-by: Christian Borntraeger -Signed-off-by: Vasily Gorbik -Signed-off-by: Greg Kroah-Hartman - ---- - drivers/s390/crypto/vfio_ap_ops.c | 49 +++++++++++++++++++++----------------- - 1 file changed, 28 insertions(+), 21 deletions(-) - ---- a/drivers/s390/crypto/vfio_ap_ops.c -+++ b/drivers/s390/crypto/vfio_ap_ops.c -@@ -1038,19 +1038,14 @@ static int vfio_ap_mdev_set_kvm(struct a - { - struct ap_matrix_mdev *m; - -- mutex_lock(&matrix_dev->lock); -- - list_for_each_entry(m, &matrix_dev->mdev_list, node) { -- if ((m != matrix_mdev) && (m->kvm == kvm)) { -- mutex_unlock(&matrix_dev->lock); -+ if ((m != matrix_mdev) && (m->kvm == kvm)) - return -EPERM; -- } - } - - matrix_mdev->kvm = kvm; - kvm_get_kvm(kvm); - kvm->arch.crypto.pqap_hook = &matrix_mdev->pqap_hook; -- mutex_unlock(&matrix_dev->lock); - - return 0; - } -@@ -1084,35 +1079,52 @@ static int vfio_ap_mdev_iommu_notifier(s - return NOTIFY_DONE; - } - -+static void vfio_ap_mdev_unset_kvm(struct ap_matrix_mdev *matrix_mdev) -+{ -+ kvm_arch_crypto_clear_masks(matrix_mdev->kvm); -+ matrix_mdev->kvm->arch.crypto.pqap_hook = NULL; -+ vfio_ap_mdev_reset_queues(matrix_mdev->mdev); -+ kvm_put_kvm(matrix_mdev->kvm); -+ matrix_mdev->kvm = NULL; -+} -+ - static int vfio_ap_mdev_group_notifier(struct notifier_block *nb, - unsigned long action, void *data) - { -- int ret; -+ int ret, notify_rc = NOTIFY_OK; - struct ap_matrix_mdev *matrix_mdev; - - if (action != VFIO_GROUP_NOTIFY_SET_KVM) - return NOTIFY_OK; - - matrix_mdev = container_of(nb, struct ap_matrix_mdev, group_notifier); -+ mutex_lock(&matrix_dev->lock); - - if (!data) { -- matrix_mdev->kvm = NULL; -- return NOTIFY_OK; -+ if (matrix_mdev->kvm) -+ vfio_ap_mdev_unset_kvm(matrix_mdev); -+ goto notify_done; - } - - ret = vfio_ap_mdev_set_kvm(matrix_mdev, data); -- if (ret) -- return NOTIFY_DONE; -+ if (ret) { -+ notify_rc = NOTIFY_DONE; -+ goto notify_done; -+ } - - /* If there is no CRYCB pointer, then we can't copy the masks */ -- if (!matrix_mdev->kvm->arch.crypto.crycbd) -- return NOTIFY_DONE; -+ if (!matrix_mdev->kvm->arch.crypto.crycbd) { -+ notify_rc = NOTIFY_DONE; -+ goto notify_done; -+ } - - kvm_arch_crypto_set_masks(matrix_mdev->kvm, matrix_mdev->matrix.apm, - matrix_mdev->matrix.aqm, - matrix_mdev->matrix.adm); - -- return NOTIFY_OK; -+notify_done: -+ mutex_unlock(&matrix_dev->lock); -+ return notify_rc; - } - - static struct vfio_ap_queue *vfio_ap_find_queue(int apqn) -@@ -1246,13 +1258,8 @@ static void vfio_ap_mdev_release(struct - struct ap_matrix_mdev *matrix_mdev = mdev_get_drvdata(mdev); - - mutex_lock(&matrix_dev->lock); -- if (matrix_mdev->kvm) { -- kvm_arch_crypto_clear_masks(matrix_mdev->kvm); -- matrix_mdev->kvm->arch.crypto.pqap_hook = NULL; -- vfio_ap_mdev_reset_queues(mdev); -- kvm_put_kvm(matrix_mdev->kvm); -- matrix_mdev->kvm = NULL; -- } -+ if (matrix_mdev->kvm) -+ vfio_ap_mdev_unset_kvm(matrix_mdev); - mutex_unlock(&matrix_dev->lock); - - vfio_unregister_notifier(mdev_dev(mdev), VFIO_IOMMU_NOTIFY, diff --git a/queue-5.10/series b/queue-5.10/series index 2e4ed9ac167..ef5942c7b4c 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -28,5 +28,4 @@ bcache-only-check-feature-sets-when-sb-version-bcache_sb_version_cdev_with_featu net-usb-qmi_wwan-added-support-for-thales-cinterion-plsx3-modem-family.patch s390-uv-fix-sysfs-max-number-of-vcpus-reporting.patch s390-vfio-ap-no-need-to-disable-irq-after-queue-reset.patch -s390-vfio-ap-clean-up-vfio_ap-resources-when-kvm-pointer-invalidated.patch pm-hibernate-flush-swap-writer-after-marking.patch diff --git a/queue-5.4/s390-vfio-ap-clean-up-vfio_ap-resources-when-kvm-pointer-invalidated.patch b/queue-5.4/s390-vfio-ap-clean-up-vfio_ap-resources-when-kvm-pointer-invalidated.patch deleted file mode 100644 index 34c3bd4293c..00000000000 --- a/queue-5.4/s390-vfio-ap-clean-up-vfio_ap-resources-when-kvm-pointer-invalidated.patch +++ /dev/null @@ -1,140 +0,0 @@ -From f21916ec4826766463fe9fb55a5f43d2a365811d Mon Sep 17 00:00:00 2001 -From: Tony Krowiak -Date: Tue, 22 Dec 2020 20:20:13 -0500 -Subject: s390/vfio-ap: clean up vfio_ap resources when KVM pointer invalidated - -From: Tony Krowiak - -commit f21916ec4826766463fe9fb55a5f43d2a365811d upstream. - -The vfio_ap device driver registers a group notifier with VFIO when the -file descriptor for a VFIO mediated device for a KVM guest is opened to -receive notification that the KVM pointer is set (VFIO_GROUP_NOTIFY_SET_KVM -event). When the KVM pointer is set, the vfio_ap driver takes the -following actions: -1. Stashes the KVM pointer in the vfio_ap_mdev struct that holds the state - of the mediated device. -2. Calls the kvm_get_kvm() function to increment its reference counter. -3. Sets the function pointer to the function that handles interception of - the instruction that enables/disables interrupt processing. -4. Sets the masks in the KVM guest's CRYCB to pass AP resources through to - the guest. - -In order to avoid memory leaks, when the notifier is called to receive -notification that the KVM pointer has been set to NULL, the vfio_ap device -driver should reverse the actions taken when the KVM pointer was set. - -Fixes: 258287c994de ("s390: vfio-ap: implement mediated device open callback") -Signed-off-by: Tony Krowiak -Reviewed-by: Halil Pasic -Reviewed-by: Cornelia Huck -Cc: stable@vger.kernel.org -Link: https://lore.kernel.org/r/20201223012013.5418-1-akrowiak@linux.ibm.com -Signed-off-by: Christian Borntraeger -Signed-off-by: Vasily Gorbik -Signed-off-by: Greg Kroah-Hartman - ---- - drivers/s390/crypto/vfio_ap_ops.c | 49 +++++++++++++++++++++----------------- - 1 file changed, 28 insertions(+), 21 deletions(-) - ---- a/drivers/s390/crypto/vfio_ap_ops.c -+++ b/drivers/s390/crypto/vfio_ap_ops.c -@@ -1038,19 +1038,14 @@ static int vfio_ap_mdev_set_kvm(struct a - { - struct ap_matrix_mdev *m; - -- mutex_lock(&matrix_dev->lock); -- - list_for_each_entry(m, &matrix_dev->mdev_list, node) { -- if ((m != matrix_mdev) && (m->kvm == kvm)) { -- mutex_unlock(&matrix_dev->lock); -+ if ((m != matrix_mdev) && (m->kvm == kvm)) - return -EPERM; -- } - } - - matrix_mdev->kvm = kvm; - kvm_get_kvm(kvm); - kvm->arch.crypto.pqap_hook = &matrix_mdev->pqap_hook; -- mutex_unlock(&matrix_dev->lock); - - return 0; - } -@@ -1084,35 +1079,52 @@ static int vfio_ap_mdev_iommu_notifier(s - return NOTIFY_DONE; - } - -+static void vfio_ap_mdev_unset_kvm(struct ap_matrix_mdev *matrix_mdev) -+{ -+ kvm_arch_crypto_clear_masks(matrix_mdev->kvm); -+ matrix_mdev->kvm->arch.crypto.pqap_hook = NULL; -+ vfio_ap_mdev_reset_queues(matrix_mdev->mdev); -+ kvm_put_kvm(matrix_mdev->kvm); -+ matrix_mdev->kvm = NULL; -+} -+ - static int vfio_ap_mdev_group_notifier(struct notifier_block *nb, - unsigned long action, void *data) - { -- int ret; -+ int ret, notify_rc = NOTIFY_OK; - struct ap_matrix_mdev *matrix_mdev; - - if (action != VFIO_GROUP_NOTIFY_SET_KVM) - return NOTIFY_OK; - - matrix_mdev = container_of(nb, struct ap_matrix_mdev, group_notifier); -+ mutex_lock(&matrix_dev->lock); - - if (!data) { -- matrix_mdev->kvm = NULL; -- return NOTIFY_OK; -+ if (matrix_mdev->kvm) -+ vfio_ap_mdev_unset_kvm(matrix_mdev); -+ goto notify_done; - } - - ret = vfio_ap_mdev_set_kvm(matrix_mdev, data); -- if (ret) -- return NOTIFY_DONE; -+ if (ret) { -+ notify_rc = NOTIFY_DONE; -+ goto notify_done; -+ } - - /* If there is no CRYCB pointer, then we can't copy the masks */ -- if (!matrix_mdev->kvm->arch.crypto.crycbd) -- return NOTIFY_DONE; -+ if (!matrix_mdev->kvm->arch.crypto.crycbd) { -+ notify_rc = NOTIFY_DONE; -+ goto notify_done; -+ } - - kvm_arch_crypto_set_masks(matrix_mdev->kvm, matrix_mdev->matrix.apm, - matrix_mdev->matrix.aqm, - matrix_mdev->matrix.adm); - -- return NOTIFY_OK; -+notify_done: -+ mutex_unlock(&matrix_dev->lock); -+ return notify_rc; - } - - static struct vfio_ap_queue *vfio_ap_find_queue(int apqn) -@@ -1246,13 +1258,8 @@ static void vfio_ap_mdev_release(struct - struct ap_matrix_mdev *matrix_mdev = mdev_get_drvdata(mdev); - - mutex_lock(&matrix_dev->lock); -- if (matrix_mdev->kvm) { -- kvm_arch_crypto_clear_masks(matrix_mdev->kvm); -- matrix_mdev->kvm->arch.crypto.pqap_hook = NULL; -- vfio_ap_mdev_reset_queues(mdev); -- kvm_put_kvm(matrix_mdev->kvm); -- matrix_mdev->kvm = NULL; -- } -+ if (matrix_mdev->kvm) -+ vfio_ap_mdev_unset_kvm(matrix_mdev); - mutex_unlock(&matrix_dev->lock); - - vfio_unregister_notifier(mdev_dev(mdev), VFIO_IOMMU_NOTIFY, diff --git a/queue-5.4/series b/queue-5.4/series index f14b6b532ba..f9f8a853e03 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -10,5 +10,4 @@ arm-dts-imx6qdl-gw52xx-fix-duplicate-regulator-naming.patch wext-fix-null-ptr-dereference-with-cfg80211-s-lack-of-commit.patch net-usb-qmi_wwan-added-support-for-thales-cinterion-plsx3-modem-family.patch s390-vfio-ap-no-need-to-disable-irq-after-queue-reset.patch -s390-vfio-ap-clean-up-vfio_ap-resources-when-kvm-pointer-invalidated.patch pm-hibernate-flush-swap-writer-after-marking.patch -- 2.47.3