Message ID | 20220606203325.110625-19-mjrosato@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: s390: enable zPCI for interpretive execution | expand |
On Mon, 6 Jun 2022 16:33:22 -0400 Matthew Rosato <mjrosato@linux.ibm.com> wrote: > The function handle is a system-wide unique identifier for a zPCI > device. With zPCI instruction interpretation, the host will no > longer be executing the zPCI instructions on behalf of the guest. > As a result, the guest needs to use the real function handle in > order for firmware to associate the instruction with the proper > PCI function. Let's provide that handle to the guest. > > Reviewed-by: Christian Borntraeger <borntraeger@linux.ibm.com> > Reviewed-by: Pierre Morel <pmorel@linux.ibm.com> > Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com> > --- > drivers/vfio/pci/vfio_pci_zdev.c | 5 +++-- > include/uapi/linux/vfio_zdev.h | 3 +++ > 2 files changed, 6 insertions(+), 2 deletions(-) Acked-by: Alex Williamson <alex.williamson@redhat.com> > diff --git a/drivers/vfio/pci/vfio_pci_zdev.c b/drivers/vfio/pci/vfio_pci_zdev.c > index 686f2e75e392..4f28cdd7ecd1 100644 > --- a/drivers/vfio/pci/vfio_pci_zdev.c > +++ b/drivers/vfio/pci/vfio_pci_zdev.c > @@ -24,14 +24,15 @@ static int zpci_base_cap(struct zpci_dev *zdev, struct vfio_info_cap *caps) > { > struct vfio_device_info_cap_zpci_base cap = { > .header.id = VFIO_DEVICE_INFO_CAP_ZPCI_BASE, > - .header.version = 1, > + .header.version = 2, > .start_dma = zdev->start_dma, > .end_dma = zdev->end_dma, > .pchid = zdev->pchid, > .vfn = zdev->vfn, > .fmb_length = zdev->fmb_length, > .pft = zdev->pft, > - .gid = zdev->pfgid > + .gid = zdev->pfgid, > + .fh = zdev->fh > }; > > return vfio_info_add_capability(caps, &cap.header, sizeof(cap)); > diff --git a/include/uapi/linux/vfio_zdev.h b/include/uapi/linux/vfio_zdev.h > index b4309397b6b2..78c022af3d29 100644 > --- a/include/uapi/linux/vfio_zdev.h > +++ b/include/uapi/linux/vfio_zdev.h > @@ -29,6 +29,9 @@ struct vfio_device_info_cap_zpci_base { > __u16 fmb_length; /* Measurement Block Length (in bytes) */ > __u8 pft; /* PCI Function Type */ > __u8 gid; /* PCI function group ID */ > + /* End of version 1 */ > + __u32 fh; /* PCI function handle */ > + /* End of version 2 */ > }; > > /**
diff --git a/drivers/vfio/pci/vfio_pci_zdev.c b/drivers/vfio/pci/vfio_pci_zdev.c index 686f2e75e392..4f28cdd7ecd1 100644 --- a/drivers/vfio/pci/vfio_pci_zdev.c +++ b/drivers/vfio/pci/vfio_pci_zdev.c @@ -24,14 +24,15 @@ static int zpci_base_cap(struct zpci_dev *zdev, struct vfio_info_cap *caps) { struct vfio_device_info_cap_zpci_base cap = { .header.id = VFIO_DEVICE_INFO_CAP_ZPCI_BASE, - .header.version = 1, + .header.version = 2, .start_dma = zdev->start_dma, .end_dma = zdev->end_dma, .pchid = zdev->pchid, .vfn = zdev->vfn, .fmb_length = zdev->fmb_length, .pft = zdev->pft, - .gid = zdev->pfgid + .gid = zdev->pfgid, + .fh = zdev->fh }; return vfio_info_add_capability(caps, &cap.header, sizeof(cap)); diff --git a/include/uapi/linux/vfio_zdev.h b/include/uapi/linux/vfio_zdev.h index b4309397b6b2..78c022af3d29 100644 --- a/include/uapi/linux/vfio_zdev.h +++ b/include/uapi/linux/vfio_zdev.h @@ -29,6 +29,9 @@ struct vfio_device_info_cap_zpci_base { __u16 fmb_length; /* Measurement Block Length (in bytes) */ __u8 pft; /* PCI Function Type */ __u8 gid; /* PCI function group ID */ + /* End of version 1 */ + __u32 fh; /* PCI function handle */ + /* End of version 2 */ }; /**