KVM: s390: pci: add basic kvm_zdev structure
This structure will be used to carry kvm passthrough information related to zPCI devices. Reviewed-by: Niklas Schnelle <schnelle@linux.ibm.com> Reviewed-by: Pierre Morel <pmorel@linux.ibm.com> Reviewed-by: Christian Borntraeger <borntraeger@linux.ibm.com> Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com> Link: https://lore.kernel.org/r/20220606203325.110625-12-mjrosato@linux.ibm.com Signed-off-by: Christian Borntraeger <borntraeger@linux.ibm.com>
This commit is contained in:
Родитель
c435c54639
Коммит
6438e30714
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 = NULL;
|
||||
kfree(kzdev);
|
||||
}
|
|
@ -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 */
|
Загрузка…
Ссылка в новой задаче