GPLPV

I have put together this page as a general place for information regarding James Harper's GPLPV Windows Drivers for Xen. There seems to be a lot of discussion regarding this on the xen-users mailing list and no definitive source of information. Note that I am just collecting the information I find, please feel free to drop me an email and correct me.

So what do the drivers do? By all reports they greatly increase the performance of disk and network of Windows guest running on Xen.

I would also recommend reading the pages at the Xen wiki:
http://wiki.xensource.com/xenwiki/XenWindowsGplPv
http://wiki.xensource.com/xenwiki/XenWindowsGplPv/Building
http://wiki.xensource.com/xenwiki/XenWindowsGplPv/Installing
http://wiki.xensource.com/xenwiki/XenWindowsGplPv/XenVbd

I will (eventually) be updating those pages with the information I have here.

Releases

All of the releases are available from http://www.meadowcourt.org/downloads/.

0.10 Series

There is now one download per platform/architecture, named as follows: gplpv_<chk/fre>_<platform>_<arch>_<version>.msi

chk is a 'checked' build which contains debug info (please use these if you want any assistance in fixing bugs :)
fre is a 'free' build which contains no debug info
platform is 'wxp' for XP, 'wnet' for 2003, and 'wlh' for Vista/2008
arch is 'x86' for 32 bit and 'AMD64' for 64 bits

Please uninstall any 0.9.x.x or older version completely before installing this one. Some users have reported that uninstalling has caused problems so make sure you back up your DomU first.

Does not work with OpenSolaris Dom0.

0.9 Series

0.9.12-pre13 is the latest usable release in this series. However, I think the 0.10 series is recommended now.

Extras

16/5/2009: gplpv_uninstall_bat.zip
4/4/2009: uninstall_0.9.x.txt (rename to .bat and run to uninstall 0.9)

Release Notes

0.10.0.130

Date: 14/10/2009

Updates:
- Added XenUSB to the installer.
- Reshuffle of code to allow adding of different device interfaces (eg /dev/evtchn and /dev/gntdev implementations)
- Fix tcp offload issue
- Allow inactive cdrom devices to be removed
- Fix a hang in xenbus when a flurry of activity fills the xenstore ring
- Fixed a bug in the dma routines which was causing memory corruption. In some cases when Windows gave an MDL that was longer than the buffer to be dma'd, the end of the buffer would be overwritten. The only time I am aware of this occuring is on one particular map in Call Of Duty 4.

0.10.0.98 - don't use

Date: 25/8/2009

Update:
- xenbus dpc could be scheduled on multiple cpu's simultaneously. protect with a spinlock.
- Add bug check reporting via qemu.
- Minor change to inactive path on Restart
- fix config page overflow after multiple hibernations
- avoid 7b bsod by better defining installation and driver loading order so xenpci won't hide the boot disk before xenvbd is properly installed
- fixed bug in xenbus. forgot to release mutex on early exit.
- Fix a crash when an incorrectly formatted TCP packet is sent/forwarded by Dom0
- Added usbif.h and updated xenbus.h to include new Reconfiguring states
- Added DPC call in config page and Reconfiguring callback
- DPC and Reconfiguring update to xen_windows.h
- Fixed potential problem when XenPci_BalloonHandler() is called via xen watch, but no data was actually written. This happens sometime when the watch is first setup.
- Windows 7 fix. Interrupt affinity cannot be set to -1 anymore (this is the affinity returned in the resource list). A proper fix that works across multiple Windows OS was implemented. Also, the interrupt level had to be set properly (as outlined in the new Microsoft Windows DDK docs).
- Shut down threads properly on hibernate.
- Added hibernate response to shutdownmon (need to manually write 'hibernate' to /local/domain//control/shutdown)
- Found some bugs caused by the unavailability of the page file during restore from suspend.
- verify XenVbd_InitFromConfig() succeeded when resuming from hibernation and raise a bug check if it failed

0.10.0.86

Date: 15/7/2009

Updates:
- fixed warning causing build failure on fre build
- Fix a problem with pointer arithmetic that could cause a crash under high load
- Changed install sequence back again to reduce user interaction during install

0.10.0.83

Date: 11/7/2009

Updates:
- Fix the xennet shutdown race properly this time
- Make sure that we can still GC the last packets on shutdown
- Fix a case where rx tcp checksum calculation fails if the number of bytes in the packet is odd and the last buffer contains a single byte.
- Added support for the case where a ScatterGather list is requested with a non-zero offset into the MDL buffer. This fixes a crash when trying to scan a file in Sophos.
- Fixed up hot-add code (xm xxx-attach)
- Allow for a NULL MapRegisterBase parameter in FreeMapRegisters
- Make xennet work in the case where SG is not available. Limit GSO to PAGE_SIZE in such a case. Also Disable SG and GSO if disabled in the backend.
- Disable SG if it is not supported by the backend.
- Started implementing ballooning. GPLPV will now allocate and free memory from Windows based on the memory/target value, but doesn't yet actually return it to xen.
- If a device sharing the same IRQ triggered an interrupt, xenvbd could crash. Fixed.
- Fixed a problem where shutdown was hanging if there were packets in the tx ring
- Made the interrupt ack logic per-cpu to fix 'unacknowledged irq' errors and hangs in SMP
- Fixed the 'old key removal' from the inf file
- fixed the inverted meaning of the config_csum_rx_check setting

0.10.0.69

Date: 12/5/2009

Updates:
- Interrupt delivery updates.
- removed xenhide
- Allowed branding of disk names via registry.

0.10.0.55

Date: 20/4/2009

Not sure what got changed here? Nothing in the logs.

0.10.0.50

Date: 12/4/2009

I've just uploaded 0.10.0.50 which fixes a few bugs related to high network load (BSoD's & packet corruption). It should upgrade any previous 0.10.x.x.

0.10.0.49

Date: 11/4/2009

0.10.0.47

Date: 3/4/2009

New version with lots of changes and (probably) new bugs. Please read this email before installing.

The downloads can be found at http://www.meadowcourt.org/downloads
There is now one download per platform/architecture, named as follows:
gplpv__
__.msi

chk is a 'checked' build which contains debug info (please use these if you want any assistance in fixing bugs :)
fre is a 'free' build which contains no debug info
platform is 'wxp' for XP, 'wnet' for 2003, and 'wlh' for Vista/2008
arch is 'x86' for 32 bit and 'AMD64' for 64 bits

Please uninstall any 0.9.x.x or older version completely before installing this one. Some users have reported that uninstalling has caused problems so make sure you back up your DomU first.

The major changes are:
. Using WiX instead of NSIS to build the installer
. Each platform/arch is in a separate installer
. As per recent 0.9.x releases, no need for /GPLPV on the boot.ini file
. Drivers are disabled when booting in safe mode
. Add /NOGPLPV to the boot.ini file to disable drivers
. Add /PATCHTPR to the boot.ini file to make XP run faster
. Hiding of qemu devices with Xen 3.4 (or patched prior version)

Please make sure your system is backed up before testing, and please
test on a spare DomU first too - it is possible that the version of Xen
that ships with your distribution of choice is not compatible with these
drivers for some reason. Please do let me know if that is the case
though as I can probably fix it.

0.9.12-pre13

Date: 26/12/2008

0.9.11

Date: 7/11/2008

0.9.10

Date: 17/6/2008

Installation

You might also want to have a look at http://wiki.xensource.com/xenwiki/XenWindowsGplPv/Installing, which hasn't been updated for a while.

Windows 2008/Vista/7

These require signed drivers. The GPLPV drivers don't appear to be signed or at least the signatures don't seem to work.
You can either disable signature checking upon (every!) reboot (by pressing F8 and choosing to "Disable Driver Signature Enforcement") or permanently "test sign" drivers, the procedure is documented here: http://msdn.microsoft.com/en-us/library/aa906283.aspx. (http://wiki.xensource.com/xenwiki/XenWindowsGplPv/Installing)

The instructions at http://www.ngohq.com/home.php?page=dseo may also help. (http://lists.xensource.com/archives/html/xen-users/2009-05/msg00538.html)

http://www.citadelindustries.net/readydriverplus/index.php :D
It basically automates the process of choosing disable signature enforcement on Windows boot menu (you can see the cursor moving in the process). Somewhat funny :) (http://lists.xensource.com/archives/html/xen-users/2009-05/msg00805.html)

Windows 2008

For Windows 2008 x64 domU I had to do this workaround:
- after installting the driver, DO NOT REBOOT YET
- run bcdedit to add NOGPLV entry
- reboot WITH NOGPLPV, choosing disable driver signature enforcement
- reboot again using standard option (don't select NOGPLPV) and
choosing disable driver signature enforcement. It will say "new disk
installed" (or something like that).
- reboot again, choosing disable driver signature enforcement.
- setup ip address for xen net
(http://lists.xensource.com/archives/html/xen-users/2009-05/msg00533.html)

Issues, Caveats and Fixes

Enabling/Disabling

For one, the drivers are activated by default (without the need for any switch), but you can add NOGPLPV to deactivate it.
Note that booting to safe mode automatically disable GPLPV drivers, so if you lost all access you might want to boot safe mode first, then run bcdedit to create new entry with NOGPLPV. (http://lists.xensource.com/archives/html/xen-users/2009-05/msg00517.html)

bcdedit /enum /v <-- note the guid string next to "identifier" under "Windows Boot Loader"
bcdedit /copy {string from above} /d "Microsoft Windows Server 2008 NOGPLPV" <-- change description to whatever suits you and note the new guid that gets printed as a result
bcdedit /set {new guid from above} LOADOPTIONS "NOGPLPV"

(http://wiki.xensource.com/xenwiki/XenWindowsGplPv/Installing)

OpenSolairs

On Opensolaris dom0, you have to disable LSO and SG on Windows' XenNet driver advanced properties. It also requires older version of GPLPV (0.9.12-pre13). (http://lists.xensource.com/archives/html/xen-users/2009-05/msg00670.html)

Strange ping times

Try adding timer_mode=1 to the hvm config file. (http://lists.xensource.com/archives/html/xen-users/2009-05/msg00586.html)

Bluescreen 0x7b on reboot

What fixed it for me was a reboot with the NOGPLPV boot option and then reboot again with the GPLPV drivers enabled. The blue screen did not re-occur since. (http://lists.xensource.com/archives/html/xen-users/2009-05/msg00663.html)

I had this issue with win2k8 64bit domU (win2k8 32bit worked fine) dom0 was debian lenny with xen3.3.1 and 2.6.26-1-xen-amd64 kernel. What fixed the issue for me was, using phy:/dev/group/device (a lvcreate created device) instead of file://path/to/hda.img as backend device for the domU disk. (http://lists.xensource.com/archives/html/xen-users/2009-05/msg00720.html)

GPLPV and Xen 3.4

Under Xen 3.4, GPLPV should behave a little differently. The qemu devices will be hidden by qemu itself, meaning no yellow exclamation marks. Additionally, GPLPV will not provide a driver for CDROM devices, and qemu will leave the CDROM device enabled, so eject etc should still work.

I have only tested it with 3.3.1 + the patch that went into 3.4, not with 3.4 itself, so I haven't personally verified that it works as described. (http://lists.xensource.com/archives/html/xen-users/2009-05/msg00761.html)

GPLPV drivers and live migration

For quite a while, GPLPV would hang when doing live migrations (or even just save/restore). That bug was due to me allocating too much stack space in one of the scsiport routines (a real pain as the debugger wouldn't work either). If there are any problems now, I haven't heard of them. (http://lists.xensource.com/archives/html/xen-users/2009-06/msg00035.html)