[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] xen-pciback: allow compiling on other archs than x86
On 21.09.21 10:54, Juergen Gross wrote: > On 17.09.21 15:01, Oleksandr Andrushchenko wrote: >> From: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx> >> >> Xen-pciback driver was designed to be built for x86 only. But it >> can also be used by other architectures, e.g. Arm. >> Re-structure the driver in a way that it can be built for other >> platforms as well. >> >> Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx> >> Signed-off-by: Anastasiia Lukianenko <anastasiia_lukianenko@xxxxxxxx> >> >> --- >> Tested on Arm and x86. >> --- >> arch/x86/include/asm/xen/pci.h | 24 ---------- >> arch/x86/pci/xen.c | 74 +---------------------------- >> drivers/xen/Kconfig | 2 +- >> drivers/xen/events/events_base.c | 1 + >> drivers/xen/pci.c | 75 ++++++++++++++++++++++++++++++ >> drivers/xen/xen-pciback/pci_stub.c | 3 +- >> drivers/xen/xen-pciback/xenbus.c | 2 +- >> include/xen/pci.h | 34 ++++++++++++++ >> 8 files changed, 115 insertions(+), 100 deletions(-) >> create mode 100644 include/xen/pci.h >> >> diff --git a/arch/x86/include/asm/xen/pci.h b/arch/x86/include/asm/xen/pci.h >> index 3506d8c598c1..9ff7b49bca08 100644 >> --- a/arch/x86/include/asm/xen/pci.h >> +++ b/arch/x86/include/asm/xen/pci.h >> @@ -14,30 +14,6 @@ static inline int pci_xen_hvm_init(void) >> return -1; >> } >> #endif >> -#if defined(CONFIG_XEN_DOM0) >> -int __init pci_xen_initial_domain(void); > > Why are you removing this prototype? It is X86 specific. Indeed it is. Will not remove it form x86 code > >> -int xen_find_device_domain_owner(struct pci_dev *dev); >> -int xen_register_device_domain_owner(struct pci_dev *dev, uint16_t domain); >> -int xen_unregister_device_domain_owner(struct pci_dev *dev); >> -#else >> -static inline int __init pci_xen_initial_domain(void) >> -{ >> - return -1; >> -} >> -static inline int xen_find_device_domain_owner(struct pci_dev *dev) >> -{ >> - return -1; >> -} >> -static inline int xen_register_device_domain_owner(struct pci_dev *dev, >> - uint16_t domain) >> -{ >> - return -1; >> -} >> -static inline int xen_unregister_device_domain_owner(struct pci_dev *dev) >> -{ >> - return -1; >> -} >> -#endif >> #if defined(CONFIG_PCI_MSI) >> #if defined(CONFIG_PCI_XEN) >> diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c >> index 3d41a09c2c14..4a45b0bf9ae4 100644 >> --- a/arch/x86/pci/xen.c >> +++ b/arch/x86/pci/xen.c >> @@ -23,6 +23,7 @@ >> #include <xen/features.h> >> #include <xen/events.h> >> +#include <xen/pci.h> >> #include <asm/xen/pci.h> >> #include <asm/xen/cpuid.h> >> #include <asm/apic.h> >> @@ -583,77 +584,4 @@ int __init pci_xen_initial_domain(void) >> } >> return 0; >> } >> - >> -struct xen_device_domain_owner { >> - domid_t domain; >> - struct pci_dev *dev; >> - struct list_head list; >> -}; >> - >> -static DEFINE_SPINLOCK(dev_domain_list_spinlock); >> -static struct list_head dev_domain_list = LIST_HEAD_INIT(dev_domain_list); >> - >> -static struct xen_device_domain_owner *find_device(struct pci_dev *dev) >> -{ >> - struct xen_device_domain_owner *owner; >> - >> - list_for_each_entry(owner, &dev_domain_list, list) { >> - if (owner->dev == dev) >> - return owner; >> - } >> - return NULL; >> -} >> - >> -int xen_find_device_domain_owner(struct pci_dev *dev) >> -{ >> - struct xen_device_domain_owner *owner; >> - int domain = -ENODEV; >> - >> - spin_lock(&dev_domain_list_spinlock); >> - owner = find_device(dev); >> - if (owner) >> - domain = owner->domain; >> - spin_unlock(&dev_domain_list_spinlock); >> - return domain; >> -} >> -EXPORT_SYMBOL_GPL(xen_find_device_domain_owner); >> - >> -int xen_register_device_domain_owner(struct pci_dev *dev, uint16_t domain) >> -{ >> - struct xen_device_domain_owner *owner; >> - >> - owner = kzalloc(sizeof(struct xen_device_domain_owner), GFP_KERNEL); >> - if (!owner) >> - return -ENODEV; >> - >> - spin_lock(&dev_domain_list_spinlock); >> - if (find_device(dev)) { >> - spin_unlock(&dev_domain_list_spinlock); >> - kfree(owner); >> - return -EEXIST; >> - } >> - owner->domain = domain; >> - owner->dev = dev; >> - list_add_tail(&owner->list, &dev_domain_list); >> - spin_unlock(&dev_domain_list_spinlock); >> - return 0; >> -} >> -EXPORT_SYMBOL_GPL(xen_register_device_domain_owner); >> - >> -int xen_unregister_device_domain_owner(struct pci_dev *dev) >> -{ >> - struct xen_device_domain_owner *owner; >> - >> - spin_lock(&dev_domain_list_spinlock); >> - owner = find_device(dev); >> - if (!owner) { >> - spin_unlock(&dev_domain_list_spinlock); >> - return -ENODEV; >> - } >> - list_del(&owner->list); >> - spin_unlock(&dev_domain_list_spinlock); >> - kfree(owner); >> - return 0; >> -} >> -EXPORT_SYMBOL_GPL(xen_unregister_device_domain_owner); >> #endif >> diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig >> index a37eb52fb401..057ddf61ef61 100644 >> --- a/drivers/xen/Kconfig >> +++ b/drivers/xen/Kconfig >> @@ -182,7 +182,7 @@ config SWIOTLB_XEN >> config XEN_PCIDEV_BACKEND >> tristate "Xen PCI-device backend driver" >> - depends on PCI && X86 && XEN >> + depends on PCI && XEN >> depends on XEN_BACKEND >> default m >> help >> diff --git a/drivers/xen/events/events_base.c >> b/drivers/xen/events/events_base.c >> index a78704ae3618..35493ff0d146 100644 >> --- a/drivers/xen/events/events_base.c >> +++ b/drivers/xen/events/events_base.c >> @@ -65,6 +65,7 @@ >> #include <xen/interface/vcpu.h> >> #include <xen/xenbus.h> >> #include <asm/hw_irq.h> >> +#include <xen/pci.h> > > This wouldn't be needed if you'd let the pci_xen_initial_domain() > prototype where it has been. Sure, will leave it where it was > > > Juergen
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |