Re: [PATCH v5 16/21] KVM: vfio: add s390x hook to register KVM guest designation

From: Matthew Rosato
Date: Tue Apr 12 2022 - 09:40:20 EST


On 4/8/22 8:45 AM, Jason Gunthorpe wrote:
On Mon, Apr 04, 2022 at 01:43:44PM -0400, Matthew Rosato wrote:
At the time a KVM is associated with a vfio group, s390x zPCI devices
must register a special guest indication (GISA designation) to allow
for the use of interpretive execution facilities. This indication is
used to ensure that only the specified KVM can interact with the device.
Similarly, the indication must be removed once the KVM is no longer
associated with the device.

This patch adds an s390-specific hook to invoke a KVM registration routine
for each device associated with the iommu group; in reality, it will be a
NOP for all but zPCI devices on s390x.

Signed-off-by: Matthew Rosato <mjrosato@xxxxxxxxxxxxx>
---
virt/kvm/vfio.c | 35 ++++++++++++++++++++++++++++++++++-
1 file changed, 34 insertions(+), 1 deletion(-)

I wonder if this should be done in the vfio_pci side from the existing
kvm notifier


So you mean rather than hooking into virt as I do here, drive something out of drivers/vfio/vfio.c:vfio_group_set_kvm? Note, the kvm notifier is handled in vfio, not vfio_pci, so if you want to handle it in vfio_pci I think we'd need to add a new routine to vfio_device_ops and only define it vfio_pci for s390

e.g.

static const struct vfio_device_ops vfio_pci_ops = {
.name = "vfio-pci",
[...]
#ifdef CONFIG_S390
.set_kvm = vfio_pci_zdev_set_kvm,
#endif
};

and something like...

void vfio_group_set_kvm(struct vfio_group *group, struct kvm *kvm)
{
struct vfio_device *vdev;
group->kvm = kvm;

mutex_lock(&group->device_lock);
list_for_each_entry(vdev, &group->device_list, group_next) {
if (vdev->ops->set_kvm)
it->ops->set_kvm(vdev, kvm);
}
mutex_unlock(&group->device_lock);

blocking_notifier_call_chain(&group->notifier,
VFIO_GROUP_NOTIFY_SET_KVM, kvm);
}