[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 5/7] Install filters on first FDO creation and remove on last deletion
When XENBUS binds to two devices (as it may when the vendor PCI device is present) then installing/removing filters on a per-FDO basis does not work properly. Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> --- src/xenbus/driver.c | 13 +++++++++++-- src/xenbus/fdo.c | 4 ---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/xenbus/driver.c b/src/xenbus/driver.c index 3409270..46712e3 100644 --- a/src/xenbus/driver.c +++ b/src/xenbus/driver.c @@ -39,6 +39,7 @@ #include "driver.h" #include "names.h" #include "mutex.h" +#include "filters.h" #include "dbg_print.h" #include "assert.h" #include "util.h" @@ -193,13 +194,17 @@ DriverAddFunctionDeviceObject( { PDEVICE_OBJECT DeviceObject; PXENBUS_DX Dx; + ULONG References; DeviceObject = FdoGetDeviceObject(Fdo); Dx = (PXENBUS_DX)DeviceObject->DeviceExtension; ASSERT3U(Dx->Type, ==, FUNCTION_DEVICE_OBJECT); InsertTailList(&Driver.List, &Dx->ListEntry); - Driver.References++; + References = Driver.References++; + + if (References == 1) + FiltersInstall(); } VOID @@ -209,6 +214,7 @@ DriverRemoveFunctionDeviceObject( { PDEVICE_OBJECT DeviceObject; PXENBUS_DX Dx; + ULONG References; DeviceObject = FdoGetDeviceObject(Fdo); Dx = (PXENBUS_DX)DeviceObject->DeviceExtension; @@ -216,7 +222,10 @@ DriverRemoveFunctionDeviceObject( RemoveEntryList(&Dx->ListEntry); ASSERT3U(Driver.References, !=, 0); - --Driver.References; + References = --Driver.References; + + if (References == 1) + FiltersUninstall(); } DRIVER_UNLOAD DriverUnload; diff --git a/src/xenbus/fdo.c b/src/xenbus/fdo.c index 5d03f8c..1e55381 100644 --- a/src/xenbus/fdo.c +++ b/src/xenbus/fdo.c @@ -59,7 +59,6 @@ #include "driver.h" #include "range_set.h" #include "unplug.h" -#include "filters.h" #include "dbg_print.h" #include "assert.h" #include "util.h" @@ -4837,7 +4836,6 @@ FdoCreate( goto fail8; if (Fdo->PvdeviceInterface.Interface.Context == NULL) { - (VOID) FiltersInstall(); DriverRequestReboot(); goto done; } @@ -5148,8 +5146,6 @@ FdoDestroy( FdoClearActive(Fdo); } - (VOID) FiltersUninstall(); - RtlZeroMemory(&Fdo->PvdeviceInterface, sizeof (XENFILT_PVDEVICE_INTERFACE)); -- 2.1.1 _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |