[Spice-devel] [PATCH qxl-wddm-dod 4/8] Use normal pointer for VA addresses

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


As VA addresses are used as pointers there's no need to handle
them as 64-bit integer (which make the code more complicated)

Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
 qxldod/QxlDod.cpp | 22 ++++++++++------------
 qxldod/QxlDod.h   |  8 ++++----
 2 files changed, 14 insertions(+), 16 deletions(-)

diff --git a/qxldod/QxlDod.cpp b/qxldod/QxlDod.cpp
index f8f3e6d..2fa925d 100755
--- a/qxldod/QxlDod.cpp
+++ b/qxldod/QxlDod.cpp
@@ -3585,10 +3585,10 @@ _inline QXLPHYSICAL QxlDevice::PA(PVOID virt, UINT8 slot_id)
     PAGED_CODE();
     DbgPrint(TRACE_LEVEL_VERBOSE, ("<--> %s\n", __FUNCTION__));
     MemSlot *pSlot = &m_MemSlots[slot_id];
-    return pSlot->high_bits | ((UINT64)virt - pSlot->start_virt_addr);
+    return pSlot->high_bits | ((UINT8*)virt - pSlot->start_virt_addr);
 }
 
-_inline UINT64 QxlDevice::VA(QXLPHYSICAL paddr, UINT8 slot_id)
+_inline UINT8 *QxlDevice::VA(QXLPHYSICAL paddr, UINT8 slot_id)
 {
     PAGED_CODE();
     UINT64 virt;
@@ -3596,9 +3596,7 @@ _inline UINT64 QxlDevice::VA(QXLPHYSICAL paddr, UINT8 slot_id)
 
     DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
     virt = paddr & m_VaSlotMask;
-    virt += pSlot->start_virt_addr;;
-
-    return virt;
+    return pSlot->start_virt_addr + virt;
 }
 
 void QxlDevice::SetupHWSlot(UINT8 Idx, MemSlot *pSlot)
@@ -3672,7 +3670,7 @@ void QxlDevice::SyncIo(UCHAR  Port, UCHAR Value)
     ReleaseMutex(&m_IoLock, locked);
 }
 
-void QxlDevice::SetupMemSlot(UINT8 Idx, UINT64 pastart, UINT64 paend, UINT64 vastart, UINT64 vaend)
+void QxlDevice::SetupMemSlot(UINT8 Idx, UINT64 pastart, UINT64 paend, UINT8 *vastart, UINT8 *valast)
 {
     PAGED_CODE();
     UINT64 high_bits;
@@ -3685,7 +3683,7 @@ void QxlDevice::SetupMemSlot(UINT8 Idx, UINT64 pastart, UINT64 paend, UINT64 vas
     pSlot->start_phys_addr = pastart;
     pSlot->end_phys_addr = paend;
     pSlot->start_virt_addr = vastart;
-    pSlot->end_virt_addr = vaend;
+    pSlot->last_virt_addr = valast;
 
     SetupHWSlot(Idx + 1, pSlot);
 
@@ -3703,16 +3701,16 @@ BOOL QxlDevice::CreateMemSlots(void)
     DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s 3\n", __FUNCTION__));
     UINT64 len = m_RomHdr->surface0_area_size + m_RomHdr->num_pages * PAGE_SIZE;
     SetupMemSlot(m_MainMemSlot,
-                 (UINT64)m_RamPA.QuadPart,
+                 (UINT64)m_RamPA.QuadPart, 
                  (UINT64)(m_RamPA.QuadPart + len),
-                 (UINT64)m_RamStart,
-                 (UINT64)(m_RamStart + len));
+                 m_RamStart,
+                 m_RamStart + len - 1);
     len = m_VRamSize;
     SetupMemSlot(m_SurfaceMemSlot,
                  (UINT64)m_VRamPA.QuadPart,
                  (UINT64)(m_VRamPA.QuadPart + len),
-                 (UINT64)m_VRamStart,
-                 (UINT64)(m_VRamStart + len));
+                 m_VRamStart,
+                 m_VRamStart + len - 1);
     DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
     return TRUE;
 }
diff --git a/qxldod/QxlDod.h b/qxldod/QxlDod.h
index c8b9873..d642323 100755
--- a/qxldod/QxlDod.h
+++ b/qxldod/QxlDod.h
@@ -358,8 +358,8 @@ typedef struct _MemSlot {
     UINT8 generation;
     UINT64 start_phys_addr;
     UINT64 end_phys_addr;
-    UINT64 start_virt_addr;
-    UINT64 end_virt_addr;
+    UINT8 *start_virt_addr;
+    UINT8 *last_virt_addr;
     QXLPHYSICAL high_bits;
 } MemSlot;
 
@@ -574,10 +574,10 @@ private:
     void CreatePrimarySurface(PVIDEO_MODE_INFORMATION pModeInfo);
     void DestroyPrimarySurface(void);
     void SetupHWSlot(UINT8 Idx, MemSlot *pSlot);
-    void SetupMemSlot(UINT8 Idx, UINT64 pastart, UINT64 paend, UINT64 vastart, UINT64 vaend);
+    void SetupMemSlot(UINT8 Idx, UINT64 pastart, UINT64 paend, UINT8 *vastart, UINT8 *valast);
     BOOL CreateEvents(void);
     BOOL CreateRings(void);
-    UINT64 VA(QXLPHYSICAL paddr, UINT8 slot_id);
+    UINT8 *VA(QXLPHYSICAL paddr, UINT8 slot_id);
     QXLPHYSICAL PA(PVOID virt, UINT8 slot_id);
     void InitDeviceMemoryResources(void);
     void InitMonitorConfig();
-- 
2.9.3



More information about the Spice-devel mailing list