[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH 6/6] Dont always remove XenFilt from UpperFilters
-----Original Message----- From: win-pv-devel <win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx> On Behalf Of Paul Durrant Sent: Monday, June 21, 2021 3:03 PM To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx Subject: Re: [PATCH 6/6] Dont always remove XenFilt from UpperFilters [CAUTION - EXTERNAL EMAIL] DO NOT reply, click links, or open attachments unless you have verified the sender and know the content is safe. On 17/06/2021 13:33, Owen Smith wrote: > There is a race which can prevent XenFilt from having AddDevice > correctly called on some devices. This seems to happen more frequently > after driver upgrades. > It seems this is due to XenBus!DriverEntry removing XenFilt before > XenBus!AddDevice inserts XenFilt into the UpperFilters value. In this > gap, PnP manager can sample the UpperFilters key and fail to bind > XenFilt to the required device stacks. This leads to XenFilt failing > to determine the active device, which prevents the device unplugs from > occuring, leading to a constant cycle of reboot prompts from > xenbus_monitor. > > Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> This is a partial reversion of 9d28a9e9b798f "Avoid removing filters on upgrade installations". I think you need to state why that commit was wrong (assuming it was). Paul I have encountered upgrade issues, particularly involving Win10 in-place OS upgrade, that can affect the ordering the PnP manager handles driver load. I will see if I can pin down exactly the conditions that trigger the race here in 9d28a9e9b798f. Owen > --- > src/xenbus/driver.c | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/src/xenbus/driver.c b/src/xenbus/driver.c index > 1b621fa..e66bf45 100644 > --- a/src/xenbus/driver.c > +++ b/src/xenbus/driver.c > @@ -296,6 +296,9 @@ DriverRemoveFunctionDeviceObject( > RemoveEntryList(&Dx->ListEntry); > ASSERT3U(Driver.References, !=, 0); > References = --Driver.References; > + > + if (References == 1) > + FiltersUninstall(); > } > > // > @@ -859,16 +862,15 @@ DriverEntry( > MICRO_VERSION, > BUILD_NUMBER); > if (!NT_SUCCESS(status)) { > - if (status == STATUS_INCOMPATIBLE_DRIVER_BLOCKED) > + if (status == STATUS_INCOMPATIBLE_DRIVER_BLOCKED) { > + // Re-instate XenFilt to avoid a second required reboot > + FiltersInstall(); > __DriverRequestReboot(); > + } > > goto done; > } > > - // Remove the filters from the registry. They will be re-instated by > - // the first successful AddDevice. > - FiltersUninstall(); > - > DriverObject->DriverExtension->AddDevice = DriverAddDevice; > > for (Index = 0; Index <= IRP_MJ_MAXIMUM_FUNCTION; Index++) { >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |