[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH] Add registry overrides for features (v2)
From: Owen Smith <owen.smith@xxxxxxxxxx> * Add a REG_DWORD to XenVbd's Parameters key, with names based on the features, as per xenstore value, and set to 0 to override use of that feature. Changes over v1: * removed check on DriverGerParametersKey() return value, as its guaranteed to be valid (failure to get the key results in DriverEntry failing) For example, "HKLM\System\CCS\Services\XenVbd\Parameters" "feature-barrier" 0 will prevent the frontend issuing BLKIF_OP_WRITE_BARRIERs "HKLM\System\CCS\Services\XenVbd\Parameters" "feature-discard" 0 will prevent the frontend issuing BLKIF_OP_DISCARDs Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> --- src/xenvbd/driver.c | 16 ++++++++++++++++ src/xenvbd/driver.h | 5 +++++ src/xenvbd/frontend.c | 29 +++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/src/xenvbd/driver.c b/src/xenvbd/driver.c index 114c740..1f713c4 100644 --- a/src/xenvbd/driver.c +++ b/src/xenvbd/driver.c @@ -82,6 +82,22 @@ __DriverParseOption( RegistryFreeSzValue(Option); } +static FORCEINLINE HANDLE +__DriverGetParametersKey( + VOID + ) +{ + return Driver.ParametersKey; +} + +HANDLE +DriverGetParametersKey( + VOID + ) +{ + return __DriverGetParametersKey(); +} + NTSTATUS DriverDispatchPnp( IN PDEVICE_OBJECT DeviceObject, diff --git a/src/xenvbd/driver.h b/src/xenvbd/driver.h index cf55330..e7730a9 100644 --- a/src/xenvbd/driver.h +++ b/src/xenvbd/driver.h @@ -57,6 +57,11 @@ typedef struct _XENVBD_PARAMETERS { extern XENVBD_PARAMETERS DriverParameters; +extern HANDLE +DriverGetParametersKey( + VOID + ); + extern NTSTATUS DriverDispatchPnp( IN PDEVICE_OBJECT DeviceObject, diff --git a/src/xenvbd/frontend.c b/src/xenvbd/frontend.c index 11e9121..e65a3b0 100644 --- a/src/xenvbd/frontend.c +++ b/src/xenvbd/frontend.c @@ -30,6 +30,7 @@ */ #include "frontend.h" +#include "registry.h" #include "driver.h" #include "fdo.h" #include "pdoinquiry.h" @@ -621,6 +622,7 @@ FrontendReadFeature( { NTSTATUS status; PCHAR Buffer; + ULONG Override; BOOLEAN Old = *Value; status = XENBUS_STORE(Read, @@ -637,6 +639,15 @@ FrontendReadFeature( Frontend->Store, Buffer); + // check registry for disable-override + status = RegistryQueryDwordValue(DriverGetParametersKey(), + Name, + &Override); + if (NT_SUCCESS(status)) { + if (Override == 0) + *Value = FALSE; + } + return Old != *Value; } @@ -644,11 +655,13 @@ static FORCEINLINE BOOLEAN FrontendReadValue32( IN PXENVBD_FRONTEND Frontend, IN PCHAR Name, + IN BOOLEAN AllowOverride, IN PULONG Value ) { NTSTATUS status; PCHAR Buffer; + ULONG Override; ULONG Old = *Value; status = XENBUS_STORE(Read, @@ -665,6 +678,16 @@ FrontendReadValue32( Frontend->Store, Buffer); + // check registry for disable-override + if (AllowOverride) { + status = RegistryQueryDwordValue(DriverGetParametersKey(), + Name, + &Override); + if (NT_SUCCESS(status)) { + *Value = Override; + } + } + return Old != *Value; } @@ -727,12 +750,15 @@ __ReadDiskInfo( Changed |= FrontendReadValue32(Frontend, "info", + FALSE, &Frontend->DiskInfo.DiskInfo); Changed |= FrontendReadValue32(Frontend, "sector-size", + FALSE, &Frontend->DiskInfo.SectorSize); Changed |= FrontendReadValue32(Frontend, "physical-sector-size", + FALSE, &Frontend->DiskInfo.PhysSectorSize); Changed |= FrontendReadValue64(Frontend, "sectors", @@ -780,6 +806,7 @@ FrontendReadFeatures( &Frontend->Caps.Removable); Changed |= FrontendReadValue32(Frontend, "feature-max-indirect-segments", + TRUE, &Frontend->Features.Indirect); Changed |= FrontendReadFeature(Frontend, "feature-persistent", @@ -821,9 +848,11 @@ FrontendReadDiskInfo( &Frontend->DiskInfo.DiscardSecure); Changed |= FrontendReadValue32(Frontend, "discard-alignment", + TRUE, &Frontend->DiskInfo.DiscardAlignment); Changed |= FrontendReadValue32(Frontend, "discard-granularity", + TRUE, &Frontend->DiskInfo.DiscardGranularity); if (!Changed) -- 2.8.3 _______________________________________________ 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 |