[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH 3/6] Delete stornvme's StartOverride
-----Original Message----- From: win-pv-devel <win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx> On Behalf Of Paul Durrant Sent: Monday, June 21, 2021 2:48 PM To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx Subject: Re: [PATCH 3/6] Delete stornvme's StartOverride [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: > Using an emulated NVMe device for installation will not be able to > revert to emulated NVMe device once xenvbd has been used to boot. This > is due to stornvme creating a StartOverride value that overrides > stornvme's StartType to manual (from boot) when stornvme is not loaded > during boot. This occurs when xenbus has unplugged the emulated NVMe > controller at boot. Disabling the unplug is not sufficient to have > stornvme load at boot, which results in a 0x7B bugcheck. Ick! > > Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> > --- > src/monitor/monitor.c | 60 +++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 60 insertions(+) > > diff --git a/src/monitor/monitor.c b/src/monitor/monitor.c Not sure the monitor is the best place to do this; it seems a little too critical for that. Could we use this ancient interface instead? https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddk/nf-ntddk-ioregisterbootdriverreinitialization Paul This looks doable, calling IoRegisterBootDriverReinitialization from XenVbd's DriverEntry and clearing the StartOverride from the reinitialize routine Owen > index 9adfb79..c858249 100644 > --- a/src/monitor/monitor.c > +++ b/src/monitor/monitor.c > @@ -1172,6 +1172,64 @@ fail1: > return FALSE; > } > > +static BOOL > +DeleteStartOverride( > + _In_ LPTSTR DriverName > + ) > +{ > + TCHAR ServiceKeyName[MAX_PATH]; > + HKEY Key; > + HRESULT Error; > + > + Error = StringCbPrintf(ServiceKeyName, > + MAX_PATH, > + SERVICES_KEY "\\%s", > + DriverName); > + if (!SUCCEEDED(Error)) > + goto fail1; > + > + Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE, > + ServiceKeyName, > + 0, > + KEY_ALL_ACCESS, > + &Key); > + if (Error != ERROR_SUCCESS) { > + SetLastError(Error); > + goto fail2; > + } > + > + Error = RegDeleteTree(Key, > + "StartOverride"); > + if (Error != ERROR_SUCCESS) { > + SetLastError(Error); > + goto fail3; > + } > + > + RegCloseKey(Key); > + > + return TRUE; > + > +fail3: > + Log("fail3"); > + > + RegCloseKey(Key); > + > +fail2: > + Log("fail2"); > + > +fail1: > + Error = GetLastError(); > + > + { > + PTCHAR Message; > + Message = GetErrorMessage(Error); > + Log("fail1 (%s)", Message); > + LocalFree(Message); > + } > + > + return FALSE; > +} > + > VOID WINAPI > MonitorMain( > _In_ DWORD argc, > @@ -1251,6 +1309,7 @@ MonitorMain( > if (!Success) > goto fail9; > > + (VOID) DeleteStartOverride("stornvme"); > SetEvent(Context->RequestEvent); > > ReportStatus(SERVICE_RUNNING, NO_ERROR, 0); @@ -1285,6 +1344,7 > @@ MonitorMain( > } > > done: > + (VOID) DeleteStartOverride("stornvme"); > (VOID) RegDeleteTree(Context->RequestKey, NULL); > > free(Context->Question); >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |