[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [RFC PATCH v1 2/4] xen/arm: Discovering PCI devices and add the PCI devices in XEN.
On Thu, Jul 23, 2020 at 01:44:03PM -0700, Stefano Stabellini wrote: > On Thu, 23 Jul 2020, Rahul Singh wrote: > > Hardware domain is in charge of doing the PCI enumeration and will > > discover the PCI devices and then will communicate to XEN via hyper > > call PHYSDEVOP_pci_device_add to add the PCI devices in XEN. > > > > Change-Id: Ie87e19741689503b4b62da911c8dc2ee318584ac > > Same question about Change-Id > > > > Signed-off-by: Rahul Singh <rahul.singh@xxxxxxx> > > --- > > xen/arch/arm/physdev.c | 42 +++++++++++++++++++++++++++++++++++++++--- > > 1 file changed, 39 insertions(+), 3 deletions(-) > > > > diff --git a/xen/arch/arm/physdev.c b/xen/arch/arm/physdev.c > > index e91355fe22..274720f98a 100644 > > --- a/xen/arch/arm/physdev.c > > +++ b/xen/arch/arm/physdev.c > > @@ -9,12 +9,48 @@ > > #include <xen/errno.h> > > #include <xen/sched.h> > > #include <asm/hypercall.h> > > - > > +#include <xen/guest_access.h> > > +#include <xsm/xsm.h> > > > > int do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg) > > { > > - gdprintk(XENLOG_DEBUG, "PHYSDEVOP cmd=%d: not implemented\n", cmd); > > - return -ENOSYS; > > + int ret = 0; > > + > > + switch ( cmd ) > > + { > > +#ifdef CONFIG_HAS_PCI > > + case PHYSDEVOP_pci_device_add: > > + { > > + struct physdev_pci_device_add add; > > + struct pci_dev_info pdev_info; > > + nodeid_t node = NUMA_NO_NODE; > > + > > + ret = -EFAULT; > > + if ( copy_from_guest(&add, arg, 1) != 0 ) > > + break; > > + > > + pdev_info.is_extfn = !!(add.flags & XEN_PCI_DEV_EXTFN); > > + if ( add.flags & XEN_PCI_DEV_VIRTFN ) > > + { > > + pdev_info.is_virtfn = 1; > > + pdev_info.physfn.bus = add.physfn.bus; > > + pdev_info.physfn.devfn = add.physfn.devfn; > > + } > > + else > > + pdev_info.is_virtfn = 0; > > + > > + ret = pci_add_device(add.seg, add.bus, add.devfn, > > + &pdev_info, node); > > + > > + break; > > + } > > +#endif > > + default: > > + gdprintk(XENLOG_DEBUG, "PHYSDEVOP cmd=%d: not implemented\n", > > cmd); > > + ret = -ENOSYS; > > + } > > I think we should make the implementation common between arm and x86 by > creating xen/common/physdev.c:do_physdev_op as a shared entry point for > PHYSDEVOP hypercalls implementations. See for instance: > > xen/common/sysctl.c:do_sysctl > > and > > xen/arch/arm/sysctl.c:arch_do_sysctl > xen/arch/x86/sysctl.c:arch_do_sysctl > > > Jan, Andrew, Roger, any opinions? Oh, physdev ops don't have a common entry point, it's all per-arch. Since Arm has no physdev ops at all, I think we should start by adding a common do_physdev_op and move PHYSDEVOP_pci_device_add into it, leaving the rest of x86 operations as arch_do_physdev_op. Thanks, Roger.
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |