Message ID | 20220404174349.58530-11-mjrosato@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: s390: enable zPCI for interpretive execution | expand |
On Mon, 2022-04-04 at 13:43 -0400, Matthew Rosato wrote: > This structure will be used to carry kvm passthrough information related to > zPCI devices. > > Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com> > --- > arch/s390/include/asm/pci.h | 3 +++ > arch/s390/kvm/Makefile | 1 + > arch/s390/kvm/pci.c | 38 +++++++++++++++++++++++++++++++++++++ > arch/s390/kvm/pci.h | 21 ++++++++++++++++++++ > 4 files changed, 63 insertions(+) > create mode 100644 arch/s390/kvm/pci.c > create mode 100644 arch/s390/kvm/pci.h > > diff --git a/arch/s390/include/asm/pci.h b/arch/s390/include/asm/pci.h > index 4c5b8fbc2079..9eb20cebaa18 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 { > @@ -190,6 +191,8 @@ struct zpci_dev { > struct dentry *debugfs_dev; > > struct s390_domain *s390_domain; /* s390 IOMMU domain data */ > + > + struct kvm_zdev *kzdev; /* passthrough data */ > }; The struct zpci_dev tries to use semantic groups in its formatting. It's not perfect and we probably need to clean this up to remove some holes in the future. For now let's put the new kzdev without a blank line together with s390_domain and add a "section comment" like "IOMMU and passthrough". Also I'd drop the "... data" part of the line end comment or even drop it entirely, the name is pretty clear already when combined with the section comment. With that Reviewed-by: Niklas Schnelle <schnelle@linux.ibm.com>
On 4/5/22 4:20 AM, Niklas Schnelle wrote: > On Mon, 2022-04-04 at 13:43 -0400, Matthew Rosato wrote: >> This structure will be used to carry kvm passthrough information related to >> zPCI devices. >> >> Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com> >> --- >> arch/s390/include/asm/pci.h | 3 +++ >> arch/s390/kvm/Makefile | 1 + >> arch/s390/kvm/pci.c | 38 +++++++++++++++++++++++++++++++++++++ >> arch/s390/kvm/pci.h | 21 ++++++++++++++++++++ >> 4 files changed, 63 insertions(+) >> create mode 100644 arch/s390/kvm/pci.c >> create mode 100644 arch/s390/kvm/pci.h >> >> diff --git a/arch/s390/include/asm/pci.h b/arch/s390/include/asm/pci.h >> index 4c5b8fbc2079..9eb20cebaa18 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 { >> @@ -190,6 +191,8 @@ struct zpci_dev { >> struct dentry *debugfs_dev; >> >> struct s390_domain *s390_domain; /* s390 IOMMU domain data */ >> + >> + struct kvm_zdev *kzdev; /* passthrough data */ >> }; > > The struct zpci_dev tries to use semantic groups in its formatting. > It's not perfect and we probably need to clean this up to remove some > holes in the future. For now let's put the new kzdev without a blank > line together with s390_domain and add a "section comment" like > "IOMMU and passthrough". > Also I'd drop the "... data" part of the line end comment or even drop > it entirely, the name is pretty clear already when combined with the > section comment. Sure, will do > > With that Reviewed-by: Niklas Schnelle <schnelle@linux.ibm.com> > Thanks!
Am 04.04.22 um 19:43 schrieb Matthew Rosato: > This structure will be used to carry kvm passthrough information related to > zPCI devices. > > Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com> Reviewed-by: Christian Borntraeger <borntraeger@linux.ibm.com>
On 4/4/22 19:43, Matthew Rosato wrote: > This structure will be used to carry kvm passthrough information related to > zPCI devices. > > Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com> Reviewed-by: Pierre Morel <pmorel@linux.ibm.com> > --- > arch/s390/include/asm/pci.h | 3 +++ > arch/s390/kvm/Makefile | 1 + > arch/s390/kvm/pci.c | 38 +++++++++++++++++++++++++++++++++++++ > arch/s390/kvm/pci.h | 21 ++++++++++++++++++++ > 4 files changed, 63 insertions(+) > create mode 100644 arch/s390/kvm/pci.c > create mode 100644 arch/s390/kvm/pci.h > > diff --git a/arch/s390/include/asm/pci.h b/arch/s390/include/asm/pci.h > index 4c5b8fbc2079..9eb20cebaa18 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 { > @@ -190,6 +191,8 @@ struct zpci_dev { > struct dentry *debugfs_dev; > > struct s390_domain *s390_domain; /* s390 IOMMU domain data */ > + > + struct kvm_zdev *kzdev; /* passthrough data */ > }; > > static inline bool zdev_enabled(struct zpci_dev *zdev) > diff --git a/arch/s390/kvm/Makefile b/arch/s390/kvm/Makefile > index 26f4a74e5ce4..00cf6853d93f 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_PCI) += 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..213be236c05a > --- /dev/null > +++ b/arch/s390/kvm/pci.c > @@ -0,0 +1,38 @@ > +// 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" > + > +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; > +} > +EXPORT_SYMBOL_GPL(kvm_s390_pci_dev_open); > + > +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); > +} > +EXPORT_SYMBOL_GPL(kvm_s390_pci_dev_release); > 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 */ >
diff --git a/arch/s390/include/asm/pci.h b/arch/s390/include/asm/pci.h index 4c5b8fbc2079..9eb20cebaa18 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 { @@ -190,6 +191,8 @@ struct zpci_dev { struct dentry *debugfs_dev; struct s390_domain *s390_domain; /* s390 IOMMU domain data */ + + struct kvm_zdev *kzdev; /* passthrough data */ }; static inline bool zdev_enabled(struct zpci_dev *zdev) diff --git a/arch/s390/kvm/Makefile b/arch/s390/kvm/Makefile index 26f4a74e5ce4..00cf6853d93f 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_PCI) += 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..213be236c05a --- /dev/null +++ b/arch/s390/kvm/pci.c @@ -0,0 +1,38 @@ +// 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" + +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; +} +EXPORT_SYMBOL_GPL(kvm_s390_pci_dev_open); + +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); +} +EXPORT_SYMBOL_GPL(kvm_s390_pci_dev_release); 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 */
This structure will be used to carry kvm passthrough information related to zPCI devices. Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com> --- arch/s390/include/asm/pci.h | 3 +++ arch/s390/kvm/Makefile | 1 + arch/s390/kvm/pci.c | 38 +++++++++++++++++++++++++++++++++++++ arch/s390/kvm/pci.h | 21 ++++++++++++++++++++ 4 files changed, 63 insertions(+) create mode 100644 arch/s390/kvm/pci.c create mode 100644 arch/s390/kvm/pci.h