[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] Clear unplug keys if Active device is not the Vendor device
If the Vendor device is distributed by Windows Update, the update process will queue a reboot. If the vendor device is not the active device, then the unplug keys will not be removed before the next reboot. The reboot will also replace the driver on the active device which requires rebinding child devices, which cannot happen during the early boot phase. This will lead to a 7B bugcheck because XenVbd has not been rebound to the new version of XenBus Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> --- src/coinst/coinst.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c index 7b96f59..8e57a10 100644 --- a/src/coinst/coinst.c +++ b/src/coinst/coinst.c @@ -1361,7 +1361,8 @@ static BOOLEAN IsActiveDevice( IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData, - OUT PBOOLEAN ActiveDevice + OUT PBOOLEAN ActiveDevice, + OUT PBOOLEAN VendorIsActive ) { PTCHAR ActiveDeviceID; @@ -1392,6 +1393,20 @@ IsActiveDevice( TRUE : FALSE; +#ifdef VENDOR_DEVICE_ID_STR + +#define DRIVER_VENDOR_DEVICE_ID "PCI\\VEN_5853&DEV_" ## VENDOR_DEVICE_ID_STR ## "&SUBSYS_C0005853&REV_01" + + *VendorIsActive = (_stricmp(ActiveDeviceID, DRIVER_VENDOR_DEVICE_ID) == 0) ? + TRUE : + FALSE; + +#undef DRIVER_VENDOR_DEVICE_ID + +#else + *VendorIsActive = FALSE; +#endif + free(DeviceID); free(InstanceID); @@ -1778,21 +1793,25 @@ DifInstallPostProcess( { BOOLEAN NewBinding; BOOLEAN Active; + BOOLEAN VendorIsActive; Log("====>"); NewBinding = (BOOLEAN)(ULONG_PTR)Context->PrivateData; Active = TRUE; + VendorIsActive = FALSE; (VOID) IsActiveDevice(DeviceInfoSet, DeviceInfoData, - &Active); + &Active, + &VendorIsActive); Log("Active = %s", Active ? "TRUE" : "FALSE"); Log("NewBinding = %s", NewBinding ? "TRUE" : "FALSE"); - if (Active && NewBinding) { + if ((Active && NewBinding) || + !VendorIsActive) { (VOID) ClearUnplugRequest("DISKS"); (VOID) ClearUnplugRequest("NICS"); } -- 2.16.2.windows.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |