From: Halil Pasic <pasic@linux.ibm.com>
To: Tony Krowiak <akrowiak@linux.ibm.com>
Cc: linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org,
borntraeger@de.ibm.com, cohuck@redhat.com,
pasic@linux.vnet.ibm.com, jjherne@linux.ibm.com, jgg@nvidia.com,
alex.williamson@redhat.com, kwankhede@nvidia.com,
david@redhat.com
Subject: Re: [PATCH 2/2] s390/vfio-ap: replace open coded locks for VFIO_GROUP_NOTIFY_SET_KVM notification
Date: Wed, 21 Jul 2021 16:45:50 +0200 [thread overview]
Message-ID: <20210721164550.5402fe1c.pasic@linux.ibm.com> (raw)
In-Reply-To: <20210719193503.793910-3-akrowiak@linux.ibm.com>
On Mon, 19 Jul 2021 15:35:03 -0400
Tony Krowiak <akrowiak@linux.ibm.com> wrote:
> It was pointed out during an unrelated patch review that locks should not
[..]
> -static void vfio_ap_mdev_unset_kvm(struct ap_matrix_mdev *matrix_mdev)
> +static void vfio_ap_mdev_unset_kvm(struct ap_matrix_mdev *matrix_mdev,
> + struct kvm *kvm)
> {
> - /*
> - * If the KVM pointer is in the process of being set, wait until the
> - * process has completed.
> - */
> - wait_event_cmd(matrix_mdev->wait_for_kvm,
> - !matrix_mdev->kvm_busy,
> - mutex_unlock(&matrix_dev->lock),
> - mutex_lock(&matrix_dev->lock));
> -
> - if (matrix_mdev->kvm) {
We used to check if matrix_mdev->kvm is null, but ...
> - matrix_mdev->kvm_busy = true;
> - mutex_unlock(&matrix_dev->lock);
> -
> - if (matrix_mdev->kvm->arch.crypto.crycbd) {
> - down_write(&matrix_mdev->kvm->arch.crypto.pqap_hook_rwsem);
> - matrix_mdev->kvm->arch.crypto.pqap_hook = NULL;
> - up_write(&matrix_mdev->kvm->arch.crypto.pqap_hook_rwsem);
> -
> - kvm_arch_crypto_clear_masks(matrix_mdev->kvm);
> - }
> + if (kvm->arch.crypto.crycbd) {
... now we just try to dereference it. And ..
> + down_write(&kvm->arch.crypto.pqap_hook_rwsem);
> + kvm->arch.crypto.pqap_hook = NULL;
> + up_write(&kvm->arch.crypto.pqap_hook_rwsem);
>
> + mutex_lock(&kvm->lock);
> mutex_lock(&matrix_dev->lock);
> +
> + kvm_arch_crypto_clear_masks(kvm);
> vfio_ap_mdev_reset_queues(matrix_mdev->mdev);
> - kvm_put_kvm(matrix_mdev->kvm);
> + kvm_put_kvm(kvm);
> matrix_mdev->kvm = NULL;
> - matrix_mdev->kvm_busy = false;
> - wake_up_all(&matrix_mdev->wait_for_kvm);
> +
> + mutex_unlock(&kvm->lock);
> + mutex_unlock(&matrix_dev->lock);
> }
> }
>
[..]
> @@ -1363,14 +1323,11 @@ static void vfio_ap_mdev_release(struct mdev_device *mdev)
> {
> struct ap_matrix_mdev *matrix_mdev = mdev_get_drvdata(mdev);
>
> - mutex_lock(&matrix_dev->lock);
> - vfio_ap_mdev_unset_kvm(matrix_mdev);
> - mutex_unlock(&matrix_dev->lock);
> -
.. before access to the matrix_mdev->kvm used to be protected by
the matrix_dev->lock ...
> vfio_unregister_notifier(mdev_dev(mdev), VFIO_IOMMU_NOTIFY,
> &matrix_mdev->iommu_notifier);
> vfio_unregister_notifier(mdev_dev(mdev), VFIO_GROUP_NOTIFY,
> &matrix_mdev->group_notifier);
> + vfio_ap_mdev_unset_kvm(matrix_mdev, matrix_mdev->kvm);
... but it is not any more. BTW I don't think the code is guaranteed
to fetch ->kvm just once.
Can you please explain why can we get away with being more
lax when dealing with matrix_mdev->kvm?
Regards,
Halil
[..]
next prev parent reply other threads:[~2021-07-21 14:46 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-19 19:35 [PATCH 0/2] s390/vfio-ap: do not open code locks for VFIO_GROUP_NOTIFY_SET_KVM notification Tony Krowiak
2021-07-19 19:35 ` [PATCH 1/2] s390/vfio-ap: r/w lock for PQAP interception handler function pointer Tony Krowiak
2021-08-18 17:03 ` Christian Borntraeger
2021-08-18 23:25 ` Halil Pasic
2021-08-19 6:56 ` Christian Borntraeger
2021-08-19 13:36 ` Tony Krowiak
2021-08-19 21:42 ` Halil Pasic
2021-08-23 13:08 ` Tony Krowiak
2021-08-19 13:20 ` Tony Krowiak
2021-08-19 17:54 ` Alex Williamson
2021-08-19 17:58 ` Jason Gunthorpe
2021-08-20 15:59 ` Tony Krowiak
2021-08-20 22:05 ` Tony Krowiak
2021-08-20 22:30 ` Jason Gunthorpe
2021-08-23 15:17 ` Tony Krowiak
2021-08-20 22:41 ` Alex Williamson
2021-08-23 20:51 ` Tony Krowiak
2021-07-19 19:35 ` [PATCH 2/2] s390/vfio-ap: replace open coded locks for VFIO_GROUP_NOTIFY_SET_KVM notification Tony Krowiak
2021-07-21 14:45 ` Halil Pasic [this message]
2021-07-22 13:09 ` Tony Krowiak
2021-07-23 14:26 ` Halil Pasic
2021-07-23 21:24 ` Tony Krowiak
2021-07-26 20:36 ` Halil Pasic
2021-07-26 22:03 ` Jason Gunthorpe
2021-07-26 22:43 ` Halil Pasic
2021-07-28 13:43 ` Tony Krowiak
2021-07-28 19:42 ` Halil Pasic
2021-07-30 13:33 ` Tony Krowiak
2021-07-27 6:54 ` Christoph Hellwig
2021-07-21 19:37 ` Jason J. Herne
2021-07-22 13:16 ` Tony Krowiak
2021-08-02 13:10 ` [PATCH 0/2] s390/vfio-ap: do not open code " Tony Krowiak
2021-08-02 13:53 ` Halil Pasic
2021-08-02 16:32 ` Tony Krowiak
2021-08-03 13:08 ` Jason Gunthorpe
2021-08-03 13:34 ` Tony Krowiak
2021-08-18 15:59 ` Christian Borntraeger
2021-08-18 16:39 ` Alex Williamson
2021-08-18 16:50 ` Christian Borntraeger
2021-08-18 22:52 ` Halil Pasic
2021-08-19 15:30 ` Cornelia Huck
2021-08-20 14:24 ` Tony Krowiak
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210721164550.5402fe1c.pasic@linux.ibm.com \
--to=pasic@linux.ibm.com \
--cc=akrowiak@linux.ibm.com \
--cc=alex.williamson@redhat.com \
--cc=borntraeger@de.ibm.com \
--cc=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=jgg@nvidia.com \
--cc=jjherne@linux.ibm.com \
--cc=kwankhede@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=pasic@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.