This series of patches cleans up various aspects of the PCI pass-through
code. This is working towards multi-function pass-through devices in
guests. But most of these changes are useful in their own right, so I am
posting this batch without the rest of the multi-function changes.
This series of patches extends VT-d pass-through to allow multi-function
devices to appear in guests as multi-function devices.
The interface for this is a new extension to BDF notation that
can be used in configuration files for boot-time (static) assignment
and on the xm command like with pci-attach and pci-detach for hot-plug
and hot-unplug respectively.
If the existing BDF notation, which only specifies a single function, is
used then the existing single-function pass-through scheme is used.
That is, when a function is passed-through its will appear as function zero
of a vslot in the guest.
For example, the following physical to virtual mapping may occur. The
critical part is the treatment of the function numbers which will always be
consistent. That is, the virtual function number is always zero.
Physical | Virtual
-----------+--------
00:1d.0 | 00:06.0
00:1d.1 | 00:07.0
00:1d.7 | 00:08.0
If the new extensions to BDF notation are used, thereby specifying multiple
functions of a device, then a multi-function scheme is used. Two
such schemes are proposed:
1. Identity mapping, whereby physical function numbers are
identity mapped into virtual functions.
For example the following physical to virtual mapping may occur. Again,
the treatment of the function numbers is critical and will always be
consistent. That is it is the virtual function number is always the same
as the physical function number. It is also important that both the
physical and virtual device numbers are the same.
Physical | Virtual
-----------+--------
00:1d.0 | 00:07.0
00:1d.1 | 00:07.1
00:1d.7 | 00:07.7
2. Least mapping, whereby the lowest available virtual function is used.
The example above would become:
Physical | Virtual
-----------+--------
00:1d.0 | 00:07.0
00:1d.1 | 00:07.1
00:1d.7 | 00:07.2
Unlike identity mapping, this scheme is dependant on the order
that functions are supplied. So if the order in the above
example was reversed, then the result would be:
Physical | Virtual
-----------+--------
00:1d.7 | 00:07.0
00:1d.1 | 00:07.1
00:1d.0 | 00:07.1
As physical function 0 need not be present, this scheme allows multiple
virtual multi-function devices to be formed from functions of the same
physical multi-function device.
It is not known if this scheme violates hardware restrictions.
This scheme is activated by applying the last patch in this series.
There is no mechanism to switch schemes at this time.
Least mapping was proposed by Masaki Kanno.
The above multi-function mappings will occur when the following extension to
the BDF notation is used. In the case of unplug the VSLOT and OPT must be
omitted.
Existing: SEQ:BUS:DEV.FUNC[@VSLOT][,OPT...]
New: SEQ:BUS:DEV.FUNC0-FUNCN[@VSLOT][,OPT...]
SEQ:BUS:DEV.FUNC0,FUNCM,FUNCN[@VSLOT][,OPT...]
SEQ:BUS:DEV.*[@VSLOT][,OPT...]
This notation is expanded into more conventional parameters
which are passed to qemu-xen.
E.g:
0000:00:1d.0-2 becomes:
0000:00:1d.0
0000:00:1d.1
0000:00:1d.2
0000:00:1d.0,3,5,7 becomes:
0000:00:0d.0
0000:00:0d.3
0000:00:0d.5
0000:00:0d.7
For a device that has functions 0, 1, 2, 3, 5 and 7,
0000:00:1d.* becomes:
0000:00:1d.00
0000:00:1d.01
0000:00:1d.02
0000:00:1d.03
0000:00:1d.05
0000:00:1d.07
Limitation:
* This scheme does not allow for the physical and virtual function
to be specified..
Bugs:
* Suspended domains with PCI pass-through devices may not
be restored correctly because the vslot field is no
longer honoured after these patches. This needs
further investigation.
I will post a document that includes a fuller description of this
code as a follow-up.
This patch series applies against:
http://xenbits.xensource.com/unstable/xen-unstable.hg
changeset: 19783:61ec78692b13
user: Keir Fraser <keir.fraser@xxxxxxxxxx>
date: Wed Jun 17 07:39:27 2009 +0100
summary: xend: pass-through: Clean up hvm_destroyPCIDevice()
Please apply the patches in order, many of the patches in
this series depend on previous patches in the series to
function correctly.
There are both xen and xen-qemu patch series relating to this change.
Where they depend on each other this is noted in the patch's comment.
Only applying one series will break pass-through.
I will be taking a holiday from the 24th June - 8th July.
I will not be able to make any fixes or answer email during that time.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|