Minor fixes to cleanup Windows para-virtualization changes
authorNikhil Joshi <nikhilj@nvidia.com>
Wed, 18 Sep 2019 03:32:20 +0000 (09:02 +0530)
committerNikhil Joshi <nikhilj@nvidia.com>
Thu, 19 Sep 2019 05:41:40 +0000 (11:11 +0530)
Fix indentation and variable name casing.
Fix adapterFree to remove null-pointer check and set it to null after
free.
Add missing header required for adapterAdd.
Add checks for malloced pointers.

loader/windows/icd_windows.c
loader/windows/icd_windows_dxgk.c
loader/windows/icd_windows_hkr.c
loader/windows/icd_windows_hkr.h

index 8d51242..f1609e8 100644 (file)
@@ -52,8 +52,10 @@ BOOL adapterAdd(const char* szName, LUID luid)
         {
             newCapacity = 1;
         }
-       else 
+       else if(newCapacity < UINT_MAX/2)
+       {
             newCapacity *= 2;
+       }
 
         WinAdapter* pNewBegin = malloc(newCapacity * sizeof(*pWinAdapterBegin));
         if (!pNewBegin)
@@ -88,8 +90,8 @@ BOOL adapterAdd(const char* szName, LUID luid)
 
 void adapterFree(WinAdapter *pWinAdapter)
 {
-    if(pWinAdapter->szName)
-        free(pWinAdapter->szName);
+    free(pWinAdapter->szName);
+    pWinAdapter->szName = NULL;
 }
 
 /*
@@ -192,16 +194,17 @@ BOOL CALLBACK khrIcdOsVendorsEnumerate(PINIT_ONCE InitOnce, PVOID Parameter, PVO
                 while (SUCCEEDED(pFactory->lpVtbl->EnumAdapters(pFactory, i++, &pAdapter)))
                 {
                     DXGI_ADAPTER_DESC AdapterDesc;
-                    pAdapter->lpVtbl->GetDesc(pAdapter, &AdapterDesc);
-
-                    for (WinAdapter* iterAdapter = pWinAdapterBegin; iterAdapter != pWinAdapterEnd; ++iterAdapter)
+                    if (SUCCEEDED(pAdapter->lpVtbl->GetDesc(pAdapter, &AdapterDesc)))
                     {
-                        if (iterAdapter->luid.LowPart == AdapterDesc.AdapterLuid.LowPart
-                            && iterAdapter->luid.HighPart == AdapterDesc.AdapterLuid.HighPart)
+                        for (WinAdapter* iterAdapter = pWinAdapterBegin; iterAdapter != pWinAdapterEnd; ++iterAdapter)
                         {
-                            khrIcdVendorAdd(iterAdapter->szName);
-                            break;
-                        }
+                            if (iterAdapter->luid.LowPart == AdapterDesc.AdapterLuid.LowPart
+                                && iterAdapter->luid.HighPart == AdapterDesc.AdapterLuid.HighPart)
+                            {
+                                khrIcdVendorAdd(iterAdapter->szName);
+                                break;
+                            }
+                       }
                     }
 
                     pAdapter->lpVtbl->Release(pAdapter);
index cf59f68..c55cbf7 100644 (file)
@@ -88,7 +88,7 @@ bool khrIcdOsVendorsEnumerateDXGK(void)
             KHR_ICD_TRACE("D3DKMT_ENUMADAPTERS2 status != SUCCESS\n");
             goto out;
         }
-        const char* cszOpenCLRegKeyName = GetOpenCLRegKeyName();
+        const char* cszOpenCLRegKeyName = getOpenCLRegKeyName();
         const int szOpenCLRegKeyName = (int)(strlen(cszOpenCLRegKeyName) + 1)*sizeof(cszOpenCLRegKeyName[0]);
         for (UINT AdapterIndex = 0; AdapterIndex < EnumAdapters.NumAdapters; AdapterIndex++)
         {
@@ -98,15 +98,16 @@ bool khrIcdOsVendorsEnumerateDXGK(void)
             queryArgs.QueryType = D3DDDI_QUERYREGISTRY_ADAPTERKEY;
             queryArgs.QueryFlags.TranslatePath = TRUE;
             queryArgs.ValueType = REG_SZ;
-           result = MultiByteToWideChar(
-                       CP_ACP,
-                       0,
-                       cszOpenCLRegKeyName,
-                       szOpenCLRegKeyName,
-                       queryArgs.ValueName,
-                       ARRAYSIZE(queryArgs.ValueName));
-           if (!result) {
-               KHR_ICD_TRACE("MultiByteToWideChar status != SUCCESS\n");
+            result = MultiByteToWideChar(
+                CP_ACP,
+                0,
+                cszOpenCLRegKeyName,
+                szOpenCLRegKeyName,
+                queryArgs.ValueName,
+                ARRAYSIZE(queryArgs.ValueName));
+           if (!result)
+           {
+                KHR_ICD_TRACE("MultiByteToWideChar status != SUCCESS\n");
                 continue;
            }
             D3DKMT_QUERYADAPTERINFO queryAdapterInfo = {0};
@@ -125,6 +126,8 @@ bool khrIcdOsVendorsEnumerateDXGK(void)
             {
                 ULONG queryBufferSize = sizeof(D3DDDI_QUERYREGISTRY_INFO) + queryArgs.OutputValueSize;
                 pQueryBuffer = (D3DDDI_QUERYREGISTRY_INFO*)malloc(queryBufferSize);
+                if (pQueryBuffer == NULL)
+                   continue;
                 memcpy(pQueryBuffer, &queryArgs, sizeof(D3DDDI_QUERYREGISTRY_INFO));
                 queryAdapterInfo.pPrivateDriverData = pQueryBuffer;
                 queryAdapterInfo.PrivateDriverDataSize = queryBufferSize;
index 060ce5b..a323312 100644 (file)
@@ -52,7 +52,7 @@ static const char OPENCL_REG_SUB_KEY_WOW[] = "OpenCLDriverNameWow";
 #endif
 
 // Do not free the memory returned by this function.
-const char* GetOpenCLRegKeyName(void)
+const char* getOpenCLRegKeyName(void)
 {
 #ifdef _WIN64
     return OPENCL_REG_SUB_KEY;
@@ -97,7 +97,7 @@ static bool ReadOpenCLKey(DEVINST dnDevNode)
     {
         result = RegQueryValueExA(
             hkey,
-            GetOpenCLRegKeyName(),
+            getOpenCLRegKeyName(),
             NULL,
             &dwLibraryNameType,
             NULL,
@@ -118,7 +118,7 @@ static bool ReadOpenCLKey(DEVINST dnDevNode)
 
         result = RegQueryValueExA(
             hkey,
-            GetOpenCLRegKeyName(),
+            getOpenCLRegKeyName(),
             NULL,
             &dwLibraryNameType,
             (LPBYTE)cszOclPath,
index 8aef473..039da05 100644 (file)
@@ -26,4 +26,4 @@ extern const LUID ZeroLuid;
 BOOL adapterAdd(const char* szName, LUID luid);
 
 // Do not free the memory returned by this function.
-const char* GetOpenCLRegKeyName(void);
+const char* getOpenCLRegKeyName(void);