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

[win-pv-devel] [PATCH 2/4] Dispense with long PDO descriptions



Windows does not present them well and they are somewhat ugly. The relation-
ship between interface versions and PDO revision is now simply logged.

Also this patch applies appropriate limits to the HardwareIDs and
CompatibleIDs.

Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
---
 src/xenbus/pdo.c | 153 ++++++++++++++-----------------------------------------
 1 file changed, 38 insertions(+), 115 deletions(-)

diff --git a/src/xenbus/pdo.c b/src/xenbus/pdo.c
index 7eb967c..8b86f3b 100644
--- a/src/xenbus/pdo.c
+++ b/src/xenbus/pdo.c
@@ -69,7 +69,6 @@ struct _XENBUS_PDO {
     BOOLEAN                     Ejectable;
 
     PULONG                      Revision;
-    PWCHAR                      *Description;
     ULONG                       Count;
 
     BUS_INTERFACE_STANDARD      BusInterface;
@@ -358,17 +357,7 @@ PdoGetFdo(
 static NTSTATUS
 PdoAddRevision(
     IN  PXENBUS_PDO Pdo,
-    IN  ULONG       Revision,
-    IN  ULONG       Suspend,
-    IN  ULONG       SharedInfo,
-    IN  ULONG       Evtchn,
-    IN  ULONG       Debug,
-    IN  ULONG       Store,
-    IN  ULONG       RangeSet,
-    IN  ULONG       Cache,
-    IN  ULONG       Gnttab,
-    IN  ULONG       Emulated,
-    IN  ULONG       Unplug
+    IN  ULONG       Revision
     )
 {
     PVOID           Buffer;
@@ -393,70 +382,11 @@ PdoAddRevision(
     Pdo->Revision = Buffer;
     Pdo->Revision[Pdo->Count] = Revision;
 
-    Buffer = __PdoAllocate(sizeof (PCHAR) * Count);
-
-    status = STATUS_NO_MEMORY;
-    if (Buffer == NULL)
-        goto fail2;
-
-    if (Pdo->Description != NULL) {
-        RtlCopyMemory(Buffer,
-                      Pdo->Description,
-                      sizeof (PWCHAR) * Pdo->Count);
-        __PdoFree(Pdo->Description);
-    }
-
-    Pdo->Description = Buffer;
-
-    Buffer = __PdoAllocate(MAXTEXTLEN * Count);
-
-    status = STATUS_NO_MEMORY;
-    if (Buffer == NULL)
-        goto fail3;
-
-    status = RtlStringCbPrintfW(Buffer,
-                                MAXTEXTLEN,
-                                L"%hs %hs: "
-                                L"SUSPEND v%u "
-                                L"SHARED_INFO v%u "
-                                L"EVTCHN v%u "
-                                L"DEBUG v%u "
-                                L"STORE v%u "
-                                L"RANGE_SET v%u "
-                                L"CACHE v%u "
-                                L"GNTTAB v%u "
-                                L"EMULATED v%u "
-                                L"UNPLUG v%u",
-                                FdoGetName(__PdoGetFdo(Pdo)),
-                                __PdoGetName(Pdo),
-                                Suspend,
-                                SharedInfo,
-                                Evtchn,
-                                Debug,
-                                Store,
-                                RangeSet,
-                                Cache,
-                                Gnttab,
-                                Emulated,
-                                Unplug);
-    ASSERT(NT_SUCCESS(status));
-
-    Pdo->Description[Pdo->Count] = Buffer;
-
-    Trace("%08x -> %ws\n",
-          Pdo->Revision[Pdo->Count],
-          Pdo->Description[Pdo->Count]);
-
     Pdo->Count++;
+    ASSERT3U(Pdo->Count, <=, 64);
 
     return STATUS_SUCCESS;
 
-fail3:
-    Error("fail3\n");
-
-fail2:
-    Error("fail2\n");
-
 fail1:
     Error("fail1 (%08x)\n", status);
 
@@ -521,17 +451,30 @@ PdoSetRevisions(
                                                 Gnttab >= 
XENBUS_GNTTAB_INTERFACE_VERSION_MIN &&
                                                 Emulated >= 
XENFILT_EMULATED_INTERFACE_VERSION_MIN &&
                                                 Unplug >= 
XENFILT_UNPLUG_INTERFACE_VERSION_MIN) {
-                                                status = PdoAddRevision(Pdo, 
Revision,
-                                                                        
Suspend,
-                                                                        
SharedInfo,
-                                                                        Evtchn,
-                                                                        Debug,
-                                                                        Store,
-                                                                        
RangeSet,
-                                                                        Cache,
-                                                                        Gnttab,
-                                                                        
Emulated,
-                                                                        
Unplug);
+                                                Info("%08X -> "
+                                                     "SUSPEND v%u "
+                                                     "SHARED_INFO v%u "
+                                                     "EVTCHN v%u "
+                                                     "DEBUG v%u "
+                                                     "STORE v%u "
+                                                     "RANGE_SET v%u "
+                                                     "CACHE v%u "
+                                                     "GNTTAB v%u "
+                                                     "EMULATED v%u\n",
+                                                     "UNPLUG v%u\n",
+                                                     Revision,
+                                                     Suspend,
+                                                     SharedInfo,
+                                                     Evtchn,
+                                                     Debug,
+                                                     Store,
+                                                     RangeSet,
+                                                     Cache,
+                                                     Gnttab,
+                                                     Emulated,
+                                                     Unplug);
+
+                                                status = PdoAddRevision(Pdo, 
Revision);
                                                 if (!NT_SUCCESS(status))
                                                     goto fail1;
                                             }   
@@ -552,13 +495,6 @@ PdoSetRevisions(
 fail1:
     Error("fail1 (%08x)\n", status);
 
-    if (Pdo->Description != NULL) {
-        while (--Revision > 0)
-            __PdoFree(Pdo->Description[Revision]);
-        __PdoFree(Pdo->Description);
-        Pdo->Description = NULL;
-    }
-
     if (Pdo->Revision != NULL) {
         __PdoFree(Pdo->Revision);
         Pdo->Revision = NULL;
@@ -1369,19 +1305,18 @@ PdoQueryDeviceText(
     Text.Length = 0;
 
     switch (StackLocation->Parameters.QueryDeviceText.DeviceTextType) {
-    case DeviceTextDescription: {
-        ULONG   Index = Pdo->Count - 1;
-
+    case DeviceTextDescription:
         status = RtlStringCbPrintfW(Buffer,
                                     MAXTEXTLEN,
-                                    L"%s",
-                                    Pdo->Description[Index]);
+                                    L"%hs %hs",
+                                    FdoGetName(__PdoGetFdo(Pdo)),
+                                    __PdoGetName(Pdo));
         ASSERT(NT_SUCCESS(status));
 
         Buffer += wcslen(Buffer);
 
         break;
-    }
+
     case DeviceTextLocationInformation:
         status = RtlStringCbPrintfW(Buffer,
                                     MAXTEXTLEN,
@@ -1440,7 +1375,7 @@ PdoWriteConfig(
     return STATUS_NOT_SUPPORTED;
 }
 
-#define MAX_DEVICE_ID_LEN   200
+#define REGSTR_VAL_MAX_HCID_LEN 1024
 
 static NTSTATUS
 PdoQueryId(
@@ -1553,6 +1488,8 @@ PdoQueryId(
         Buffer += wcslen(Buffer);
         Buffer++;
 
+        ASSERT3U((ULONG_PTR)Buffer - (ULONG_PTR)Id.Buffer, <,
+                 REGSTR_VAL_MAX_HCID_LEN);
         break;
     }
     default:
@@ -2144,7 +2081,6 @@ PdoCreate(
     PDEVICE_OBJECT      PhysicalDeviceObject;
     PXENBUS_DX          Dx;
     PXENBUS_PDO         Pdo;
-    ULONG               Index;
     NTSTATUS            status;
 
 #pragma prefast(suppress:28197) // Possibly leaking memory 
'PhysicalDeviceObject'
@@ -2204,12 +2140,10 @@ PdoCreate(
     ASSERT(NT_SUCCESS(status));
     ASSERT(Pdo->SuspendInterface.Interface.Context != NULL);
 
-    for (Index = 0; Index < Pdo->Count; Index++) {
-        Info("%p (%s %08X)\n",
-             PhysicalDeviceObject,
-             __PdoGetName(Pdo),
-             Pdo->Revision[Index]);
-    }
+    Info("%p (%s: Highest Revision = %08X)\n",
+         PhysicalDeviceObject,
+         __PdoGetName(Pdo),
+         Pdo->Revision[Pdo->Count - 1]);
 
     Dx->Pdo = Pdo;
     PhysicalDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
@@ -2221,11 +2155,6 @@ PdoCreate(
 fail6:
     Error("fail6\n");
 
-    for (Index = 0; Index < Pdo->Count; Index++)
-        __PdoFree(Pdo->Description[Index]);
-    __PdoFree(Pdo->Description);
-    Pdo->Description = NULL;
-
     __PdoFree(Pdo->Revision);
     Pdo->Revision = NULL;
     Pdo->Count = 0;
@@ -2274,7 +2203,6 @@ PdoDestroy(
     PXENBUS_DX      Dx = Pdo->Dx;
     PDEVICE_OBJECT  PhysicalDeviceObject = Dx->DeviceObject;
     PXENBUS_FDO     Fdo = __PdoGetFdo(Pdo);
-    ULONG           Index;
 
     ASSERT3U(__PdoGetDevicePnpState(Pdo), ==, Deleted);
 
@@ -2296,11 +2224,6 @@ PdoDestroy(
 
     BusTeardown(&Pdo->BusInterface);
 
-    for (Index = 0; Index < Pdo->Count; Index++)
-        __PdoFree(Pdo->Description[Index]);
-    __PdoFree(Pdo->Description);
-    Pdo->Description = NULL;
-
     __PdoFree(Pdo->Revision);
     Pdo->Revision = NULL;
     Pdo->Count = 0;
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel


 


Rackspace

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