[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <94dcf710-276c-a3cc-48de-1c5caaf495f5@epam.com>
Date: Tue, 21 Sep 2021 08:01:11 +0000
From: Oleksandr Andrushchenko <Oleksandr_Andrushchenko@...m.com>
To: Juergen Gross <jgross@...e.com>,
Oleksandr Andrushchenko <andr2000@...il.com>,
"xen-devel@...ts.xenproject.org" <xen-devel@...ts.xenproject.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
CC: "boris.ostrovsky@...cle.com" <boris.ostrovsky@...cle.com>,
"julien@....org" <julien@....org>,
"sstabellini@...nel.org" <sstabellini@...nel.org>,
"jbeulich@...e.com" <jbeulich@...e.com>,
Anastasiia Lukianenko <Anastasiia_Lukianenko@...m.com>
Subject: 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@...m.com>
>>
>> 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@...m.com>
>> Signed-off-by: Anastasiia Lukianenko <anastasiia_lukianenko@...m.com>
>>
>> ---
>> 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
Powered by blists - more mailing lists