[Pkg-xen-devel] Bug#776742: Solved for jessie: Bug#776742: xen-utils-common: no support for VGA Passthrough

Chuck Zmudzinski brchuckz at netscape.net
Thu Feb 23 16:18:29 UTC 2017


I have a solution to this bug for jessie that is essentially the 
upstream xen solution for VGA passthrough for version 4.4 of xen that is 
installed on jessie: use the traditional qemu device model (qemu-dm), 
which is only supported by upstream xen with the rombios bios. In 
Debian, qemu-xen-traditional was removed some time ago, as was the 
rombios bios. To use my solution on jessie, it is necessary to rebuild 
the xen source package for jessie with support for qemu-xen-traditional 
and rombios, which is easily accomplished by changing those two 
configure options for the build of the xen packages for jessie in the 
debian/rules.real file of the xen source package for jessie and then 
debugging the build process and testing it until it works. I have done 
this and it is not that difficult.

I have three ways to package my fix for this bug on Debian jessie on 
either amd64 or i386 that work well for me and I am willing to share my 
solutions with Debian if Debian will consider them. Some detail about my 
three ways of packaging upstream's solution for providing VGA 
passthrough support on xen 4.4 in a way that integrates with the current 
xen packages for jessie follow below.

1. The first way modifies the xen source package, to which I assigned 
nmu version number 4.4.1-9+deb8u8.1, in such a way that the 
/usr/lib/xen-4.4/bin/qemu-dm binary and a modified version of the 
/usr/lib/xen-4.4/boot/hvmloader binary are added to the xen-utils-4.4 
binary package on amd64 and i386.  I restricted my modifications to 
amd64 and i386 because I doubt my fix will work on the arm 
architectures, and Ubuntu trusty, which also uses xen version 4.4, only 
supplies qemu-dm for amd64 and i386. This way of packaging my fix also 
rebuilds all the binaries in the xen source package although this is not 
really necessary because the fix only requires an upgraded version of 
the xen-utils-4.4 binary package. The fix should be implemented in 
xen-utils-4.4, not xen-utils-common, because the files that fix the bug 
are architecture dependent. To implement this fix, it is necessary to 
upgrade the official Debian version of the xen-utils-4.4 binary package 
(version 4.4.1-9+deb8u8) to my nmu version (4.4.1-9+deb8u8.1) on the 
target amd64 or i386 system running jessie. The other xen binary 
packages need not be upgraded. Even though this fix changes hvmloader by 
adding rombios support to hvmloader, the seabios support remains in 
hvmloader and remains the default, and my tests show that my fix does 
not affect any domain that does not explicitly select the 
qemu-xen-traditional device model in the config file and such domains 
will still use the Debian seabios bios and the upstream Debian qemu 
device model.

2. The second way to package my fix adds a new architecture dependent 
binary package, which I named xen-qemu-dm-4.4, to the list of binary 
packages that are built by the modified xen source package, my nmu 
version 4.4.1-9+deb8u8.2, for amd64 and i386. This package consists of 
the /usr/lib/xen-4.4/bin/qemu-dm binary and a modified version of the 
/usr/lib/xen-4.4/boot/hvmloader binary that overrides the version of the 
same file from xen-utils-4.4 using dpkg-divert. The diversion is added 
or removed as needed using preinst and postrm maintainer scripts as 
described in the Debian Policy Manual. This fix also rebuilds the entire 
xen source package although this is not really necessary because the fix 
only requires the new xen-qemu-dm-4.4 binary package, and the fix is 
implemented by installing the new xen-qemu-dm-4.4 binary package, my nmu 
version 4.4.1-9+deb8u8.2, on an amd64 or i386 system that already has 
the normal up-to-date xen system installed on jessie with xen-utils-4.4 
and its recommended packages installed. None of the other binary 
packages from my nmu build of xen need to be installed to implement the 
fix, because they are identical to the official Debian versions, but 
they have different version numbers because they are built from the 
modified xen source package with a different version number. Once the 
package is built, all that needs to done is run 'sudo dpkg -i 
xen-qemu-dm-4.4_4.4.1-9+deb8u8.1_amd64.deb' on the target amd64 or i386 
system. This solution has the advantage of not making any modifications 
to the official xen binary packages, but it does require modifications 
to the xen source package which may cause problems unless the build 
process is tested extensively to verify that it behaves as intended. 
This fix also keeps the upstream Debian qemu and the Debian seabios bios 
as the defaults.

3. The third way to package my fix starts from a new source package, 
which I named xen-qemu-traditional, to which I assigned the nmu version 
number 4.4.1-9+deb8u8.1 because its source files are derived from 
version 4.4.1-9+deb8u8 of the official xen source package for jessie. 
This source package builds a single binary package named 
xen-qemu-traditional-4.4 on amd64 and i386 that consists of the 
/usr/lib/xen-4.4/bin/qemu-dm binary and a modified version of the 
/usr/lib/xen-4.4/boot/hvmloader binary that overrides the version of the 
same file from xen-utils-4.4 using dpkg-divert. The diversion is added 
or removed as needed using preinst and postrm maintainer scripts as 
described in the Debian Policy Manual. This fix does not require 
rebuilding anything in the official Debian xen source package for jessie 
and in fact does not modify it or the binaries it builds in any way, 
with the single exception that the hvmloader binary from xen-utils-4.4 
is diverted when this fix is installed. Only the components that are 
needed to implement the fix are built from my new xen-qemu-traditional 
source package, and the fix is implemented by installing the new 
xen-qemu-traditional-4.4 binary package, my nmu version 
4.4.1-9+deb8u8.1, on an amd64 or i386 system that already has the xen 
system installed using dpkg -i as described in my second solution. This 
binary package is essentially identical to the xen-qemu-dm-4.4 binary 
package produced by my second solution, but this way of packaging the 
fix has the advantage of not modifying the current xen source package 
for jessie in any way and therefore minimizes any negative unintended 
consequences of adding my fix to the Debian repository. This way of 
packaging the fix also makes it easy to add my fix to the contrib or 
non-free areas of the repository if it is not appropriate for main or 
for inclusion as part of the current official xen source package for jessie.

Other notes about my fixes:

1. In the first two ways of packaging my fix for the bug, it was 
necessary to add the original source files from version 4.4.1 of the 
qemu-xen-traditional.git repository at xenbits.xen.org to the xen source 
package. This was implemented by generating a new original source 
archive named xen_4.4.1.orig-qemu-dm.tar.xz and adding it to the xen 
source package. In the third fix, new original source file archives 
needed to be generated from the exact same original source files in the 
first two fixes.

2. In all these fixes, the hvmloader binary had to be modified or 
overridden because the traditional qemu device model requires support 
for the rombios bios in hvmloader, but the official Debian build of 
xen-utils-4.4 does not include this support in the hvmloader binary. The 
modified hvmloader in all these fixes also supports the seabios bios 
which is required when using the upstream qemu device model, and no 
changes are made to the other components of xen so Debian's upstream 
qemu device model and Debian's system seabios bios remain the defaults.

3. In all these fixes, VGA passthrough is enabled by setting 
device_model_version = 'qemu-xen-traditional' in an HVM DomU config 
file, along with all the other requirements such as setting up the VGA 
pci device to be passed through using the xen-pciback kernel module and 
running on hardware with the necessary features to support VGA 
passthrough. Also, setting gfx_passthru = '1' will make the passed 
through VGA adapter the primary adapter in an HVM DomU that uses 
qemu-xen-traditional. I verified that without explicitly setting the 
device model version to qemu-xen-traditional, the HVM will default to 
the upstream qemu-xen device model and the seabios bios but there will 
not be support for VGA passthrough in this default case. I also verified 
that setting gfx_passthru = '1' with the default upstream qemu-xen 
device model will generate an error, but this option of gfx_passthru 
works fine with the qemu-xen-traditional device model after applying any 
one of my three fixes and properly configuring the system for VGA 
passthrough.

4. In all these fixes, I included the 44 upstream security and stability 
patches to the stable-4.4 branch of the qemu-xen-traditional.git 
repositiory on xenbits.xen.org since the 4.4.1 release of xen and did my 
best to handle dependencies in a reasonable way for nmu versions so that 
dpkg -i will work without needing to upgrade the official Debian xen 
binary packages that do not need to be upgraded. If older versions of 
the xen 4.4.x xen binary packages for jessie are installed, these fixes 
might not work, and they definitely won't work if the upstream version 
is less than 4.4. I have only tested these fixes with the current 
version of xen for jessie (4.4.1-9+deb8u8).

5. I spent some time tweaking my nmu source packages that fix this bug 
in order to document my solution to the VGA passthrough bug using a 
debian/README.source file, comments in the patchfiles, and a 
README.Debian file in the binary package that implements the fix. There 
are three 'source-is-missing' lintian errors reported when building my 
source packages that is caused by three binaries in the original source 
archive of qemu-xen-traditional from xenbits.xen.org, but I verified 
that with a simple patch these binaries are not needed for the build 
process, and they are not installed in any of the binary packages 
produced by my builds.

6. I am willing to contribute a fix based on one of my nmu packages to 
the Debian project if the Debian Xen team is interested in adding it to 
the Debian packages archive, either in main, contrib, or non-free as 
appropriate. I am not including any debdiff patches here because they 
are too large.

Chuck Zmudzinski



More information about the Pkg-xen-devel mailing list