Message ID | 20220524185907.140285-12-mjrosato@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: s390: enable zPCI for interpretive execution | expand |
On Tue, 24 May 2022 14:58:56 -0400 Matthew Rosato <mjrosato@linux.ibm.com> wrote: > diff --git a/arch/s390/kvm/pci.c b/arch/s390/kvm/pci.c > new file mode 100644 > index 000000000000..21c2be5c2713 > --- /dev/null > +++ b/arch/s390/kvm/pci.c > @@ -0,0 +1,36 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * s390 kvm PCI passthrough support > + * > + * Copyright IBM Corp. 2022 > + * > + * Author(s): Matthew Rosato <mjrosato@linux.ibm.com> > + */ > + > +#include <linux/kvm_host.h> > +#include <linux/pci.h> > +#include "pci.h" > + > +static int kvm_s390_pci_dev_open(struct zpci_dev *zdev) > +{ > + struct kvm_zdev *kzdev; > + > + kzdev = kzalloc(sizeof(struct kvm_zdev), GFP_KERNEL); > + if (!kzdev) > + return -ENOMEM; > + > + kzdev->zdev = zdev; > + zdev->kzdev = kzdev; > + > + return 0; > +} > + > +static void kvm_s390_pci_dev_release(struct zpci_dev *zdev) > +{ > + struct kvm_zdev *kzdev; > + > + kzdev = zdev->kzdev; > + WARN_ON(kzdev->zdev != zdev); > + zdev->kzdev = 0; I imagine this should be s/0/NULL/, right? I feel like there was a recent similar discussion, but I can't think of any unique search terms to sort it out of my inbox. Thanks, Alex
On 5/24/22 6:50 PM, Alex Williamson wrote: > On Tue, 24 May 2022 14:58:56 -0400 > Matthew Rosato <mjrosato@linux.ibm.com> wrote: >> diff --git a/arch/s390/kvm/pci.c b/arch/s390/kvm/pci.c >> new file mode 100644 >> index 000000000000..21c2be5c2713 >> --- /dev/null >> +++ b/arch/s390/kvm/pci.c >> @@ -0,0 +1,36 @@ >> +// SPDX-License-Identifier: GPL-2.0 >> +/* >> + * s390 kvm PCI passthrough support >> + * >> + * Copyright IBM Corp. 2022 >> + * >> + * Author(s): Matthew Rosato <mjrosato@linux.ibm.com> >> + */ >> + >> +#include <linux/kvm_host.h> >> +#include <linux/pci.h> >> +#include "pci.h" >> + >> +static int kvm_s390_pci_dev_open(struct zpci_dev *zdev) >> +{ >> + struct kvm_zdev *kzdev; >> + >> + kzdev = kzalloc(sizeof(struct kvm_zdev), GFP_KERNEL); >> + if (!kzdev) >> + return -ENOMEM; >> + >> + kzdev->zdev = zdev; >> + zdev->kzdev = kzdev; >> + >> + return 0; >> +} >> + >> +static void kvm_s390_pci_dev_release(struct zpci_dev *zdev) >> +{ >> + struct kvm_zdev *kzdev; >> + >> + kzdev = zdev->kzdev; >> + WARN_ON(kzdev->zdev != zdev); >> + zdev->kzdev = 0; > > I imagine this should be s/0/NULL/, right? I feel like there was a > recent similar discussion, but I can't think of any unique search terms > to sort it out of my inbox. Thanks, > Yup, I recall a similar comment on a prior version but I don't recall if it was this particular patch or not -- anyway will change
diff --git a/arch/s390/include/asm/pci.h b/arch/s390/include/asm/pci.h index 4c5b8fbc2079..50f1851edfbe 100644 --- a/arch/s390/include/asm/pci.h +++ b/arch/s390/include/asm/pci.h @@ -97,6 +97,7 @@ struct zpci_bar_struct { }; struct s390_domain; +struct kvm_zdev; #define ZPCI_FUNCTIONS_PER_BUS 256 struct zpci_bus { @@ -189,7 +190,9 @@ struct zpci_dev { struct dentry *debugfs_dev; + /* IOMMU and passthrough */ struct s390_domain *s390_domain; /* s390 IOMMU domain data */ + struct kvm_zdev *kzdev; }; static inline bool zdev_enabled(struct zpci_dev *zdev) diff --git a/arch/s390/kvm/Makefile b/arch/s390/kvm/Makefile index 26f4a74e5ce4..02217fb4ae10 100644 --- a/arch/s390/kvm/Makefile +++ b/arch/s390/kvm/Makefile @@ -10,4 +10,5 @@ ccflags-y := -Ivirt/kvm -Iarch/s390/kvm kvm-y += kvm-s390.o intercept.o interrupt.o priv.o sigp.o kvm-y += diag.o gaccess.o guestdbg.o vsie.o pv.o +kvm-$(CONFIG_VFIO_PCI_ZDEV_KVM) += pci.o obj-$(CONFIG_KVM) += kvm.o diff --git a/arch/s390/kvm/pci.c b/arch/s390/kvm/pci.c new file mode 100644 index 000000000000..21c2be5c2713 --- /dev/null +++ b/arch/s390/kvm/pci.c @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * s390 kvm PCI passthrough support + * + * Copyright IBM Corp. 2022 + * + * Author(s): Matthew Rosato <mjrosato@linux.ibm.com> + */ + +#include <linux/kvm_host.h> +#include <linux/pci.h> +#include "pci.h" + +static int kvm_s390_pci_dev_open(struct zpci_dev *zdev) +{ + struct kvm_zdev *kzdev; + + kzdev = kzalloc(sizeof(struct kvm_zdev), GFP_KERNEL); + if (!kzdev) + return -ENOMEM; + + kzdev->zdev = zdev; + zdev->kzdev = kzdev; + + return 0; +} + +static void kvm_s390_pci_dev_release(struct zpci_dev *zdev) +{ + struct kvm_zdev *kzdev; + + kzdev = zdev->kzdev; + WARN_ON(kzdev->zdev != zdev); + zdev->kzdev = 0; + kfree(kzdev); +} diff --git a/arch/s390/kvm/pci.h b/arch/s390/kvm/pci.h new file mode 100644 index 000000000000..ce93978e8913 --- /dev/null +++ b/arch/s390/kvm/pci.h @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * s390 kvm PCI passthrough support + * + * Copyright IBM Corp. 2022 + * + * Author(s): Matthew Rosato <mjrosato@linux.ibm.com> + */ + +#ifndef __KVM_S390_PCI_H +#define __KVM_S390_PCI_H + +#include <linux/kvm_host.h> +#include <linux/pci.h> + +struct kvm_zdev { + struct zpci_dev *zdev; + struct kvm *kvm; +}; + +#endif /* __KVM_S390_PCI_H */