|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH] Clear unplug keys if Active device is not the Vendor device
> -----Original Message-----
> From: win-pv-devel <win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx> On Behalf Of
> Owen Smith
> Sent: 16 July 2020 09:38
> To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx
> Cc: Owen Smith <owen.smith@xxxxxxxxxx>
> Subject: [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.
Well, the device is not distributed by Windows Update. Do you mean "If a
version of XENBUS supporting a vendor device"? (Bear in
mind there could theoretically be vendor devices other than the Citrix one).
> 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
What is *supposed* to happen is that the, when a vendor device appears in the
system necessitating a new XENBUS binding, the
co-installer clears the unplug keys because the PDOs beneath the non-vendor
device will disappear at next boot because XENBUS's
active device will change. This could equally happen if a vendor device
subsequently disappears, which I don't think this patch
covers.
Paul
>
> 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 |