[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 2/3] Make sure the NICS unplug count does not run away
In a tight loop of network attach/detach it's possible for a mismatch in the number of unplug requests and revocations to occur, leading to a run-away unplug count. This patch adjusts the location of the requests and revocations to make sure this does not happen. Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> --- src/xenvif/pdo.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/xenvif/pdo.c b/src/xenvif/pdo.c index 28f9eb0..6c4c9bd 100644 --- a/src/xenvif/pdo.c +++ b/src/xenvif/pdo.c @@ -91,6 +91,7 @@ struct _XENVIF_PDO { PXENBUS_SUSPEND_CALLBACK SuspendCallbackLate; XENBUS_UNPLUG_INTERFACE UnplugInterface; + BOOLEAN UnplugRequested; PXENVIF_FRONTEND Frontend; @@ -1174,6 +1175,9 @@ PdoUnplugRequest( { NTSTATUS status; + ASSERT3U(Pdo->UnplugRequested, !=, Make); + Pdo->UnplugRequested = Make; + status = XENBUS_UNPLUG(Acquire, &Pdo->UnplugInterface); if (!NT_SUCCESS(status)) return; @@ -1204,8 +1208,6 @@ PdoStartDevice( if (Pdo->HasAlias) goto fail1; - PdoUnplugRequest(Pdo, TRUE); - if (DriverSafeMode()) goto fail2; @@ -1268,6 +1270,8 @@ PdoStartDevice( Pdo->HasAlias = TRUE; + PdoUnplugRequest(Pdo, TRUE); + status = STATUS_UNSUCCESSFUL; goto fail9; } @@ -1278,6 +1282,8 @@ PdoStartDevice( if (!NT_SUCCESS(status)) goto fail10; + PdoUnplugRequest(Pdo, TRUE); + __PdoSetDevicePnpState(Pdo, Started); Irp->IoStatus.Status = STATUS_SUCCESS; @@ -1479,10 +1485,10 @@ PdoRemoveDevice( if (__PdoGetDevicePowerState(Pdo) != PowerDeviceD0) goto done; - PdoD0ToD3(Pdo); - PdoUnplugRequest(Pdo, FALSE); + PdoD0ToD3(Pdo); + done: RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS)); @@ -2777,6 +2783,7 @@ PdoDestroy( PDEVICE_OBJECT PhysicalDeviceObject = Dx->DeviceObject; PXENVIF_FDO Fdo = __PdoGetFdo(Pdo); + ASSERT(!Pdo->UnplugRequested); ASSERT3U(__PdoGetDevicePnpState(Pdo), ==, Deleted); Pdo->HasAlias = FALSE; -- 2.1.1 _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |