[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 3/6] Delete stornvme's StartOverride


  • To: <win-pv-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Owen Smith <owen.smith@xxxxxxxxxx>
  • Date: Thu, 17 Jun 2021 13:33:53 +0100
  • Authentication-results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
  • Cc: Owen Smith <owen.smith@xxxxxxxxxx>
  • Delivery-date: Thu, 17 Jun 2021 12:34:15 +0000
  • Ironport-hdrordr: A9a23:zvY7OKF4uuFJ3VB+pLqE0MeALOsnbusQ8zAXP0AYc3Jom6uj5q aTdZUgpGfJYVkqOE3I9ertBEDEewK4yXcX2/h3AV7BZniEhILAFugLhuGO/9SjIVybygc079 YYT0EUMrzN5DZB4voSmDPIceod/A==
  • Ironport-sdr: O59M6TDKu5uhCFbLxxNtVN/NeR+KvLXVlXXLB4uBX/MVBXR+02zGsuPfic6PhXa7wILfrxLsjZ h0Qt3ghBuj3Y7II7lSiK2ua5ts+NwO5r/sPvdzhUFJEApzGiMWNNBstrKQTBpVJS3+wf5L4tWP UI+/n/cKcu41aK7L/7+mb8nXeei/be+UBbhLziQok95NwhP+aGwGd+sIBHTyQ+/+l134smmD61 y/ZKt8YkBlRZNFl8Ptyvq9qSrRsRdEhdWyCA/Xp6BLUJfRi0GcW+jlRUv13jwO+1pfFqJnb4CE r6U=
  • List-id: Developer list for the Windows PV Drivers subproject <win-pv-devel.lists.xenproject.org>

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.

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
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);
-- 
2.31.1.windows.1




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.