[Spice-devel] [PATCH qxl-wddm-dod 3/8] Allocate m_MemSlots statically inside QxlDevice

Frediano Ziglio fziglio at redhat.com
Mon Apr 10 15:30:58 UTC 2017


There were always 2 slots used so make no sense to allocate
always dynamically.
Also in this way m_MainMemSlot and m_SurfaceMemSlot become
constant making the code slightly smaller.

Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
 qxldod/QxlDod.cpp | 39 ++++++++++++++-------------------------
 qxldod/QxlDod.h   |  7 +++----
 2 files changed, 17 insertions(+), 29 deletions(-)

diff --git a/qxldod/QxlDod.cpp b/qxldod/QxlDod.cpp
index d29bce8..f8f3e6d 100755
--- a/qxldod/QxlDod.cpp
+++ b/qxldod/QxlDod.cpp
@@ -3537,24 +3537,14 @@ BOOL QxlDevice::InitMemSlots(void)
     m_SlotGenBits = m_RomHdr->slot_gen_bits;
     m_SlotIdBits = m_RomHdr->slot_id_bits;
     m_VaSlotMask = (~(uint64_t)0) >> (m_SlotIdBits + m_SlotGenBits);
-    size_t size = m_RomHdr->slots_end * sizeof(MemSlot);
-    m_MemSlots = reinterpret_cast<MemSlot*>
-                                (new (PagedPool) BYTE[size]);
-    if (m_MemSlots)
-    {
-        RtlZeroMemory(m_MemSlots, size);
-        return TRUE;
-    }
-    DbgPrint(TRACE_LEVEL_ERROR, ("---> %s Failed to init mem slot\n", __FUNCTION__));
-    return FALSE;
+    RtlZeroMemory(m_MemSlots, sizeof(m_MemSlots));
+    return TRUE;
 }
 
 void QxlDevice::DestroyMemSlots(void)
 {
     PAGED_CODE();
     DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
-    delete [] reinterpret_cast<BYTE*>(m_MemSlots);
-    m_MemSlots = NULL;
     DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
 }
 
@@ -3682,7 +3672,7 @@ void QxlDevice::SyncIo(UCHAR  Port, UCHAR Value)
     ReleaseMutex(&m_IoLock, locked);
 }
 
-UINT8 QxlDevice::SetupMemSlot(UINT8 Idx, UINT64 pastart, UINT64 paend, UINT64 vastart, UINT64 vaend)
+void QxlDevice::SetupMemSlot(UINT8 Idx, UINT64 pastart, UINT64 paend, UINT64 vastart, UINT64 vaend)
 {
     PAGED_CODE();
     UINT64 high_bits;
@@ -3691,7 +3681,7 @@ UINT8 QxlDevice::SetupMemSlot(UINT8 Idx, UINT64 pastart, UINT64 paend, UINT64 va
 
     DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
     slot_index = m_RomHdr->slots_start + Idx;
-    pSlot = &m_MemSlots[slot_index];
+    pSlot = &m_MemSlots[Idx];
     pSlot->start_phys_addr = pastart;
     pSlot->end_phys_addr = paend;
     pSlot->start_virt_addr = vastart;
@@ -3705,7 +3695,6 @@ UINT8 QxlDevice::SetupMemSlot(UINT8 Idx, UINT64 pastart, UINT64 paend, UINT64 va
     high_bits <<= (64 - (m_SlotGenBits + m_SlotIdBits));
     pSlot->high_bits = high_bits;
     DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
-    return slot_index;
 }
 
 BOOL QxlDevice::CreateMemSlots(void)
@@ -3713,17 +3702,17 @@ BOOL QxlDevice::CreateMemSlots(void)
     PAGED_CODE();
     DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s 3\n", __FUNCTION__));
     UINT64 len = m_RomHdr->surface0_area_size + m_RomHdr->num_pages * PAGE_SIZE;
-    m_MainMemSlot = SetupMemSlot(0,
-                                (UINT64)m_RamPA.QuadPart, 
-                                (UINT64)(m_RamPA.QuadPart + len),
-                                (UINT64)m_RamStart,
-                                (UINT64)(m_RamStart + len));
+    SetupMemSlot(m_MainMemSlot,
+                 (UINT64)m_RamPA.QuadPart,
+                 (UINT64)(m_RamPA.QuadPart + len),
+                 (UINT64)m_RamStart,
+                 (UINT64)(m_RamStart + len));
     len = m_VRamSize;
-    m_SurfaceMemSlot = SetupMemSlot(1,
-                                (UINT64)m_VRamPA.QuadPart,
-                                (UINT64)(m_VRamPA.QuadPart + len),
-                                (UINT64)m_VRamStart,
-                                (UINT64)(m_VRamStart + len));
+    SetupMemSlot(m_SurfaceMemSlot,
+                 (UINT64)m_VRamPA.QuadPart,
+                 (UINT64)(m_VRamPA.QuadPart + len),
+                 (UINT64)m_VRamStart,
+                 (UINT64)(m_VRamStart + len));
     DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
     return TRUE;
 }
diff --git a/qxldod/QxlDod.h b/qxldod/QxlDod.h
index 9702314..c8b9873 100755
--- a/qxldod/QxlDod.h
+++ b/qxldod/QxlDod.h
@@ -574,7 +574,7 @@ private:
     void CreatePrimarySurface(PVIDEO_MODE_INFORMATION pModeInfo);
     void DestroyPrimarySurface(void);
     void SetupHWSlot(UINT8 Idx, MemSlot *pSlot);
-    UINT8 SetupMemSlot(UINT8 Idx, UINT64 pastart, UINT64 paend, UINT64 vastart, UINT64 vaend);
+    void SetupMemSlot(UINT8 Idx, UINT64 pastart, UINT64 paend, UINT64 vastart, UINT64 vaend);
     BOOL CreateEvents(void);
     BOOL CreateRings(void);
     UINT64 VA(QXLPHYSICAL paddr, UINT8 slot_id);
@@ -636,9 +636,8 @@ private:
     QXLRom *m_RomHdr;
     ULONG m_RomSize;
 
-    MemSlot *m_MemSlots;
-    UINT8 m_MainMemSlot;
-    UINT8 m_SurfaceMemSlot;
+    MemSlot m_MemSlots[2];
+    enum { m_MainMemSlot = 0, m_SurfaceMemSlot = 1 };
     UINT8 m_SlotIdBits;
     UINT8 m_SlotGenBits;
     QXLPHYSICAL m_VaSlotMask;
-- 
2.9.3



More information about the Spice-devel mailing list