|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] RFC: [PATCH 1/3] Enhance platform support for PCI
On Mon, 2015-02-23 at 15:27 +0000, Jan Beulich wrote:
> >>> On 23.02.15 at 16:02, <ian.campbell@xxxxxxxxxx> wrote:
> > On Mon, 2015-02-23 at 14:45 +0000, Jan Beulich wrote:
> >> In which case the Dom0 OS doing so would need to communicate
> >> its decisions to the hypervisor, as you suggest further down.
> >
> > So more concretely something like:
> > #define PHYSDEVOP_pci_host_bridge_add <XX>
> > struct physdev_pci_host_bridge_add {
> > /* IN */
> > uint16_t seg;
> > uint8_t bus;
> > uint64_t address;
> > };
> > typedef struct physdev_pci_host_bridge_add
> > physdev_pci_host_bridge_add_t;
> > DEFINE_XEN_GUEST_HANDLE(physdev_pci_host_bridge_add_t);
> >
> > Where seg+bus are enumerated/assigned by dom0 and address is some unique
> > property of the host bridge -- most likely its pci cfg space base
> > address (which is what physdev_pci_mmcfg_reserved also takes, I think?)
>
> Right.
>
> > Do you think we would need start_bus + end_bus here? Xen could enumerate
> > this itself I think, and perhaps should even if dom0 tells us something?
>
> That depends - if what you get presented here by Dom0 is a PCI
> device at <seg>:<bus>:00.0, and if all other setup was already
> done on it, then you could read the secondary and subordinate
> bus numbers from its config space. If that's not possible, then
> Dom0 handing you these values would seem to be necessary.
>
> As a result you may also need a hook from PCI device registration,
> allowing to associate it with the right host bridge (and refusing to
> add any for which there's none).
Right.
My thinking was that PHYSDEVOP_pci_host_bridge_add would add an entry
into some mapping data structure from (segment,bus) to a handle
associated with the associated pci host bridge driver in Xen.
PHYSDEVOP_manage_pci_add would have to lookup the host bridge driver
from the (segment,bus) I think to construct the necessary linkage for
use later when we try to do things to the device, and it should indeed
fail if it can't find one.
> As an alternative, extending PHYSDEVOP_manage_pci_add_ext in
> a suitable manner may be worth considering, provided (like on x86
> and ia64) the host bridges get surfaced as distinct PCI devices.
>
> >> This
> >> basically replaces the bus scan (on segment 0) that Xen does on
> >> x86 (which topology information gets derived from).
> >
> > Is the reason for the scan being of segment 0 only is that it is the one
> > which lives at the legacy PCI CFG addresses (or those magic I/O ports)?
>
> Right - ideally we would scan all segments, but we need Dom0 to
> tell us which MMCFG regions are safe to access,
Is this done via PHYSDEVOP_pci_mmcfg_reserved?
> and hence can't
> do that scan at boot time. But we also won't get away without
> scanning, as we need to set up the IOMMU(s) to at least cover
> the devices used for booting the system.
Which hopefully are all segment 0 or aren't needed until after dom0
tells Xen about them I suppose.
> > What about other host bridges in segment 0 which aren't at that address?
>
> At which address?
I meant this to be a back reference to "the legacy PCI CFG addresses (or
those magic I/O ports)".
> (All devices on segment zero are supposed to
> be accessible via config space access method 1.)
Is that "the legacy .... or magic ..." again?
> > You could do the others based on MMCFG tables if you wanted, right?
>
> Yes, with the above mentioned caveat.
>
> Jan
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |