This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
Home Products Support Community News


[Xen-devel] [PATCH 0/5] take 2: PCIe IO space multiplexing for bootable

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH 0/5] take 2: PCIe IO space multiplexing for bootable pass through HVM domain
From: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
Date: Fri, 17 Apr 2009 17:09:20 +0900
Cc: shimada-yxb@xxxxxxxxxxxxxxx, Ian.Jackson@xxxxxxxxxxxxx, Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
Delivery-date: Fri, 17 Apr 2009 01:12:22 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.18 (2008-05-17)
This patch series is for PCIe IO space multiplexing patch take 2.
Now PCI hotplug is supported and the patches are ready to commit, I think.
The commit might be after 3.4.0 release, though.

It is not uncommon that a big iron for server consolidation has
many (e.g. > 16) PCIe slots. It will hold many domains, and
the administrator wants them to boot from pass through devices.
But currently up to 16 hvm domains can boot from pass through device.
This patch series address it by multiplexing PCI IO space access.

Add the following options to dom0 kernel command line

  guestdev=<device path>+iomul
  (append "+iomul")
  (In this case, don't forget to add related options. pciback.hide,
   reassign_resources or guestdev.)

Then dom0 Linux will allocate IO ports which are shared by specified devices.
And ioemu will automatically recognize IO-port-shared devices.
The unspecified devices will be treated same as before.
Note: Specifying unit to share IO port is PCI slot (device), on the other
      hand the unit of guestdev is function.
      If you specify a function to guestdev with "+iomul", all the
      functions of the given slot will share IO port even if you specify
      some of functions.

This patch series addresses the issue by multiplexing IO space access.
The patches are composed of
        Linux part: backport: preliminary patch
        Linux part: IO space ressignment code and multiplexing driver
        Linux part: guestdev kernel parameter support.
        xen part:   udev script for the driver
        ioemu part: make use of the PCIe io space multiplexing driver

PCI expansion ROM BIOS often uses IO port access to boot from its device
and Linux as dom0 exclusively assigns IO space to downstream PCI bridges
and the assignment unit of PCI bridge IO space is 4K. So the only up to
16 PCIe device can be accessed via IO space within 64K IO ports.
So on virtualized environment, it means only up to 16 guest domains
can boot from such pass-through devices.

The solution is to assign the same IO port region to pci devices
under same PCIe switch and disable IO bit in command register.
When accessing to one of IO port shared devices, the IO bit
of the device is enabled, and then issues IOIO.

PCI devices or root complex integrated endpoints aren't supported.
IO port of IO shared devices can't be accessed from dom0 Linux device driver.
But those wouldn't be big issues because PCIe specification discourages
the use of IO space and recommends that IO space should be used only
for bootable device with ROM code. OS device driver should work without
IO space access.

At present I have tested with only single multifunction PCIe because
I don't have a machine with complicated PCIe topology nor many PCIe cards.
PCI hotplug was tested with Linux fakephp. Only pci device(not bridge)
hot plug/remove was tested.

take 2:
- support PCI hotplug
- guestdev kernel paremeter.


Xen-devel mailing list

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH 0/5] take 2: PCIe IO space multiplexing for bootable pass through HVM domain, Isaku Yamahata <=