Changeset 81528 in vbox for trunk/src/VBox/Devices/USB
- Timestamp:
- Oct 25, 2019 10:00:16 AM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 134261
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/USB/DevOHCI.cpp
r81527 r81528 248 248 RTGCPHYS GCPhysReadCacheAddr; 249 249 /** Copy of last read physical page. */ 250 uint8_t au8PhysReadCache[PAGE_SIZE]; 251 } OHCIPAGECACHE, *POHCIPAGECACHE; 250 uint8_t abPhysReadCache[PAGE_SIZE]; 251 } OHCIPAGECACHE; 252 typedef OHCIPAGECACHE *POHCIPAGECACHE; 252 253 #endif 253 254 … … 408 409 #ifdef VBOX_WITH_OHCI_PHYS_READ_CACHE 409 410 /** Last read physical page for caching ED reads in the framer thread. */ 410 R3PTRTYPE(POHCIPAGECACHE) pCacheED;411 OHCIPAGECACHE CacheED; 411 412 /** Last read physical page for caching TD reads in the framer thread. */ 412 R3PTRTYPE(POHCIPAGECACHE) pCacheTD;413 OHCIPAGECACHE CacheTD; 413 414 #endif 414 415 } OHCIR3; … … 889 890 static void ohciR3BusStop(POHCI pThis); 890 891 #ifdef VBOX_WITH_OHCI_PHYS_READ_CACHE 891 static void ohciR3PhysReadCache Clear(POHCIPAGECACHE pPageCache);892 static void ohciR3PhysReadCacheInvalidate(POHCIPAGECACHE pPageCache); 892 893 #endif 893 894 … … 1282 1283 1283 1284 #ifdef VBOX_WITH_OHCI_PHYS_READ_CACHE 1284 ohciR3PhysReadCache Clear(pThisCC->pCacheED);1285 ohciR3PhysReadCache Clear(pThisCC->pCacheTD);1285 ohciR3PhysReadCacheInvalidate(&pThisCC->CacheED); 1286 ohciR3PhysReadCacheInvalidate(&pThisCC->CacheTD); 1286 1287 #endif 1287 1288 … … 1428 1429 # ifdef VBOX_WITH_OHCI_PHYS_READ_CACHE 1429 1430 1430 static POHCIPAGECACHE ohciR3PhysReadCacheAlloc(void) 1431 { 1432 return (POHCIPAGECACHE)RTMemAlloc(sizeof(OHCIPAGECACHE)); 1433 } 1434 1435 static void ohciR3PhysReadCacheFree(POHCIPAGECACHE pPageCache) 1436 { 1437 RTMemFree(pPageCache); 1438 } 1439 1440 static void ohciR3PhysReadCacheClear(POHCIPAGECACHE pPageCache) 1431 static void ohciR3PhysReadCacheInvalidate(POHCIPAGECACHE pPageCache) 1441 1432 { 1442 1433 pPageCache->GCPhysReadCacheAddr = NIL_RTGCPHYS; … … 1451 1442 if (PageAddr != pPageCache->GCPhysReadCacheAddr) 1452 1443 { 1453 PDMDevHlpPhysRead(pDevIns, PageAddr, pPageCache->a u8PhysReadCache, sizeof(pPageCache->au8PhysReadCache));1444 PDMDevHlpPhysRead(pDevIns, PageAddr, pPageCache->abPhysReadCache, sizeof(pPageCache->abPhysReadCache)); 1454 1445 pPageCache->GCPhysReadCacheAddr = PageAddr; 1455 1446 # ifdef VBOX_WITH_OHCI_PHYS_READ_STATS … … 1458 1449 } 1459 1450 1460 memcpy(pvBuf, &pPageCache->a u8PhysReadCache[GCPhys & PAGE_OFFSET_MASK], cbBuf);1451 memcpy(pvBuf, &pPageCache->abPhysReadCache[GCPhys & PAGE_OFFSET_MASK], cbBuf); 1461 1452 # ifdef VBOX_WITH_OHCI_PHYS_READ_STATS 1462 1453 ++g_PhysReadState.cCacheReads; … … 1490 1481 { 1491 1482 uint32_t offPage = GCPhys & PAGE_OFFSET_MASK; 1492 memcpy(&pPageCache->a u8PhysReadCache[offPage], pvBuf, RT_MIN(PAGE_SIZE - offPage, cbBuf));1483 memcpy(&pPageCache->abPhysReadCache[offPage], pvBuf, RT_MIN(PAGE_SIZE - offPage, cbBuf)); 1493 1484 } 1494 1485 } … … 1504 1495 DECLINLINE(void) ohciR3CacheEdUpdate(POHCICC pThisCC, RTGCPHYS32 EdAddr, PCOHCIED pEd) 1505 1496 { 1506 ohciR3PhysCacheUpdate( pThisCC->pCacheED, EdAddr + RT_OFFSETOF(OHCIED, HeadP), &pEd->HeadP, sizeof(uint32_t));1497 ohciR3PhysCacheUpdate(&pThisCC->CacheED, EdAddr + RT_OFFSETOF(OHCIED, HeadP), &pEd->HeadP, sizeof(uint32_t)); 1507 1498 } 1508 1499 … … 1518 1509 DECLINLINE(void) ohciR3CacheTdUpdate(POHCICC pThisCC, RTGCPHYS32 TdAddr, PCOHCITD pTd) 1519 1510 { 1520 ohciR3PhysCacheUpdate( pThisCC->pCacheTD, TdAddr, pTd, sizeof(*pTd));1511 ohciR3PhysCacheUpdate(&pThisCC->CacheTD, TdAddr, pTd, sizeof(*pTd)); 1521 1512 } 1522 1513 … … 1534 1525 #ifdef VBOX_WITH_OHCI_PHYS_READ_CACHE 1535 1526 POHCICC pThisCC = PDMINS_2_DATA_CC(pDevIns, POHCICC); 1536 ohciR3PhysReadCacheRead(pDevIns, pThisCC->pCacheED, EdAddr, pEd, sizeof(*pEd));1527 ohciR3PhysReadCacheRead(pDevIns, &pThisCC->CacheED, EdAddr, pEd, sizeof(*pEd)); 1537 1528 #else 1538 1529 ohciR3GetDWords(pDevIns, EdAddr, (uint32_t *)pEd, sizeof(*pEd) >> 2); … … 1551 1542 #ifdef VBOX_WITH_OHCI_PHYS_READ_CACHE 1552 1543 POHCICC pThisCC = PDMINS_2_DATA_CC(pDevIns, POHCICC); 1553 ohciR3PhysReadCacheRead(pDevIns, pThisCC->pCacheTD, TdAddr, pTd, sizeof(*pTd));1544 ohciR3PhysReadCacheRead(pDevIns, &pThisCC->CacheTD, TdAddr, pTd, sizeof(*pTd)); 1554 1545 #else 1555 1546 ohciR3GetDWords(pDevIns, TdAddr, (uint32_t *)pTd, sizeof(*pTd) >> 2); … … 2529 2520 /* Clear all caches here to avoid reading stale data from previous lock holders. */ 2530 2521 POHCICC pThisCC = pThis->pThisR3; 2531 ohciR3PhysReadCache Clear(pThisCC->pCacheED);2532 ohciR3PhysReadCache Clear(pThisCC->pCacheTD);2522 ohciR3PhysReadCacheInvalidate(&pThisCC->CacheED); 2523 ohciR3PhysReadCacheInvalidate(&pThisCC->CacheTD); 2533 2524 # endif 2534 2525 } … … 2549 2540 */ 2550 2541 POHCICC pThisCC = pThis->pThisR3; 2551 ohciR3PhysReadCache Clear(pThisCC->pCacheED);2552 ohciR3PhysReadCache Clear(pThisCC->pCacheTD);2542 ohciR3PhysReadCacheInvalidate(&pThisCC->CacheED); 2543 ohciR3PhysReadCacheInvalidate(&pThisCC->CacheTD); 2553 2544 # endif 2554 2545 … … 3162 3153 # ifdef VBOX_WITH_OHCI_PHYS_READ_CACHE 3163 3154 POHCICC pThisCC = PDMINS_2_DATA_CC(pDevIns, POHCICC); 3164 ohciR3PhysReadCache Clear(pThisCC->pCacheTD);3155 ohciR3PhysReadCacheInvalidate(&pThisCC->CacheTD); 3165 3156 # endif 3166 3157 … … 4109 4100 { 4110 4101 # ifdef VBOX_WITH_OHCI_PHYS_READ_CACHE 4111 ohciR3PhysReadCache Clear(pThisCC->pCacheTD);4102 ohciR3PhysReadCacheInvalidate(&pThisCC->CacheTD); 4112 4103 # endif 4113 4104 do … … 5963 5954 PDMDEV_CHECK_VERSIONS_RETURN_QUIET(pDevIns); 5964 5955 POHCI pThis = PDMINS_2_DATA(pDevIns, POHCI); 5965 #ifdef VBOX_WITH_OHCI_PHYS_READ_CACHE5966 POHCIR3 pThisCC = PDMINS_2_DATA_CC(pDevIns, POHCIR3);5967 5968 ohciR3PhysReadCacheFree(pThisCC->pCacheED);5969 pThisCC->pCacheED = NULL;5970 ohciR3PhysReadCacheFree(pThisCC->pCacheTD);5971 pThisCC->pCacheTD = NULL;5972 #endif5973 5956 5974 5957 if (RTCritSectIsInitialized(&pThis->CritSect)) … … 6145 6128 return PDMDevHlpVMSetError(pDevIns, rc, RT_SRC_POS, 6146 6129 N_("OHCI: Failed to create critical section")); 6147 6148 #ifdef VBOX_WITH_OHCI_PHYS_READ_CACHE6149 pThisCC->pCacheED = ohciR3PhysReadCacheAlloc();6150 pThisCC->pCacheTD = ohciR3PhysReadCacheAlloc();6151 if (pThisCC->pCacheED == NULL || pThisCC->pCacheTD == NULL)6152 return PDMDevHlpVMSetError(pDevIns, VERR_NO_MEMORY, RT_SRC_POS, N_("OHCI: Failed to allocate PhysRead cache"));6153 #endif6154 6130 6155 6131 /*
Note:
See TracChangeset
for help on using the changeset viewer.