Skip to content

Commit 273866e

Browse files
committed
Fix events issue
1 parent 44392d3 commit 273866e

File tree

1 file changed

+62
-31
lines changed

1 file changed

+62
-31
lines changed

source/loader/layers/sanitizer/msan/msan_ddi.cpp

Lines changed: 62 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -736,24 +736,28 @@ ur_result_t urEnqueueMemBufferWrite(
736736
if (auto MemBuffer = getMsanInterceptor()->getMemBuffer(hBuffer)) {
737737
ur_device_handle_t Device = GetDevice(hQueue);
738738
char *pDst = nullptr;
739-
ur_event_handle_t Events[2];
739+
std::vector<ur_event_handle_t> Events;
740+
ur_event_handle_t Event{};
740741
UR_CALL(MemBuffer->getHandle(Device, pDst));
741742
UR_CALL(getContext()->urDdiTable.Enqueue.pfnUSMMemcpy(
742743
hQueue, blockingWrite, pDst + offset, pSrc, size,
743-
numEventsInWaitList, phEventWaitList, &Events[0]));
744+
numEventsInWaitList, phEventWaitList, &Event));
745+
Events.push_back(Event);
744746

745747
// Update shadow memory
746748
std::shared_ptr<DeviceInfo> DeviceInfo =
747749
getMsanInterceptor()->getDeviceInfo(Device);
748750
const char Val = 0;
749751
uptr ShadowAddr = DeviceInfo->Shadow->MemToShadow((uptr)pDst + offset);
752+
Event = nullptr;
750753
UR_CALL(getContext()->urDdiTable.Enqueue.pfnUSMFill(
751754
hQueue, (void *)ShadowAddr, 1, &Val, size, numEventsInWaitList,
752-
phEventWaitList, &Events[1]));
755+
phEventWaitList, &Event));
756+
Events.push_back(Event);
753757

754758
if (phEvent) {
755759
UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait(
756-
hQueue, 2, Events, phEvent));
760+
hQueue, Events.size(), Events.data(), phEvent));
757761
}
758762
} else {
759763
UR_CALL(pfnMemBufferWrite(hQueue, hBuffer, blockingWrite, offset, size,
@@ -922,23 +926,27 @@ ur_result_t urEnqueueMemBufferCopy(
922926
char *DstHandle = nullptr;
923927
UR_CALL(DstBuffer->getHandle(Device, DstHandle));
924928

925-
ur_event_handle_t Events[2];
929+
std::vector<ur_event_handle_t> Events;
930+
ur_event_handle_t Event{};
926931
UR_CALL(getContext()->urDdiTable.Enqueue.pfnUSMMemcpy(
927932
hQueue, false, DstHandle + dstOffset, SrcHandle + srcOffset, size,
928-
numEventsInWaitList, phEventWaitList, &Events[0]));
933+
numEventsInWaitList, phEventWaitList, &Event));
934+
Events.push_back(Event);
929935

930936
// Update shadow memory
931937
uptr DstShadowAddr =
932938
DeviceInfo->Shadow->MemToShadow((uptr)DstHandle + dstOffset);
933939
uptr SrcShadowAddr =
934940
DeviceInfo->Shadow->MemToShadow((uptr)SrcHandle + srcOffset);
941+
Event = nullptr;
935942
UR_CALL(getContext()->urDdiTable.Enqueue.pfnUSMMemcpy(
936943
hQueue, false, (void *)DstShadowAddr, (void *)SrcShadowAddr, size,
937-
numEventsInWaitList, phEventWaitList, &Events[1]));
944+
numEventsInWaitList, phEventWaitList, &Event));
945+
Events.push_back(Event);
938946

939947
if (phEvent) {
940948
UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait(
941-
hQueue, 2, Events, phEvent));
949+
hQueue, Events.size(), Events.data(), phEvent));
942950
}
943951
} else {
944952
UR_CALL(pfnMemBufferCopy(hQueue, hBufferSrc, hBufferDst, srcOffset,
@@ -1038,26 +1046,30 @@ ur_result_t urEnqueueMemBufferFill(
10381046

10391047
if (auto MemBuffer = getMsanInterceptor()->getMemBuffer(hBuffer)) {
10401048
char *Handle = nullptr;
1041-
ur_event_handle_t Events[2];
1049+
std::vector<ur_event_handle_t> Events;
1050+
ur_event_handle_t Event{};
10421051
ur_device_handle_t Device = GetDevice(hQueue);
10431052
UR_CALL(MemBuffer->getHandle(Device, Handle));
10441053
UR_CALL(getContext()->urDdiTable.Enqueue.pfnUSMFill(
10451054
hQueue, Handle + offset, patternSize, pPattern, size,
1046-
numEventsInWaitList, phEventWaitList, &Events[0]));
1055+
numEventsInWaitList, phEventWaitList, &Event));
1056+
Events.push_back(Event);
10471057

10481058
// Update shadow memory
10491059
std::shared_ptr<DeviceInfo> DeviceInfo =
10501060
getMsanInterceptor()->getDeviceInfo(Device);
10511061
const char Val = 0;
10521062
uptr ShadowAddr =
10531063
DeviceInfo->Shadow->MemToShadow((uptr)Handle + offset);
1064+
Event = nullptr;
10541065
UR_CALL(getContext()->urDdiTable.Enqueue.pfnUSMFill(
10551066
hQueue, (void *)ShadowAddr, 1, &Val, size, numEventsInWaitList,
1056-
phEventWaitList, &Events[1]));
1067+
phEventWaitList, &Event));
1068+
Events.push_back(Event);
10571069

10581070
if (phEvent) {
10591071
UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait(
1060-
hQueue, 2, Events, phEvent));
1072+
hQueue, Events.size(), Events.data(), phEvent));
10611073
}
10621074
} else {
10631075
UR_CALL(pfnMemBufferFill(hQueue, hBuffer, pPattern, patternSize, offset,
@@ -1324,9 +1336,11 @@ ur_result_t UR_APICALL urEnqueueUSMFill(
13241336
auto pfnUSMFill = getContext()->urDdiTable.Enqueue.pfnUSMFill;
13251337
getContext()->logger.debug("==== urEnqueueUSMFill");
13261338

1327-
ur_event_handle_t hEvents[2] = {};
1339+
std::vector<ur_event_handle_t> Events;
1340+
ur_event_handle_t Event{};
13281341
UR_CALL(pfnUSMFill(hQueue, pMem, patternSize, pPattern, size,
1329-
numEventsInWaitList, phEventWaitList, &hEvents[0]));
1342+
numEventsInWaitList, phEventWaitList, &Event));
1343+
Events.push_back(Event);
13301344

13311345
const auto Mem = (uptr)pMem;
13321346
auto MemInfoItOp = getMsanInterceptor()->findAllocInfoByAddress(Mem);
@@ -1337,13 +1351,15 @@ ur_result_t UR_APICALL urEnqueueUSMFill(
13371351
getMsanInterceptor()->getDeviceInfo(MemInfo->Device);
13381352
const auto MemShadow = DeviceInfo->Shadow->MemToShadow(Mem);
13391353

1354+
Event = nullptr;
13401355
UR_CALL(EnqueueUSMBlockingSet(hQueue, (void *)MemShadow, 0, size, 0,
1341-
nullptr, &hEvents[1]));
1356+
nullptr, &Event));
1357+
Events.push_back(Event);
13421358
}
13431359

13441360
if (phEvent) {
13451361
UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait(
1346-
hQueue, 2, hEvents, phEvent));
1362+
hQueue, Events.size(), Events.data(), phEvent));
13471363
}
13481364

13491365
return UR_RESULT_SUCCESS;
@@ -1373,9 +1389,11 @@ ur_result_t UR_APICALL urEnqueueUSMMemcpy(
13731389
auto pfnUSMMemcpy = getContext()->urDdiTable.Enqueue.pfnUSMMemcpy;
13741390
getContext()->logger.debug("==== pfnUSMMemcpy");
13751391

1376-
ur_event_handle_t hEvents[2] = {};
1392+
std::vector<ur_event_handle_t> Events;
1393+
ur_event_handle_t Event{};
13771394
UR_CALL(pfnUSMMemcpy(hQueue, blocking, pDst, pSrc, size,
1378-
numEventsInWaitList, phEventWaitList, &hEvents[0]));
1395+
numEventsInWaitList, phEventWaitList, &Event));
1396+
Events.push_back(Event);
13791397

13801398
const auto Src = (uptr)pSrc, Dst = (uptr)pDst;
13811399
auto SrcInfoItOp = getMsanInterceptor()->findAllocInfoByAddress(Src);
@@ -1390,22 +1408,26 @@ ur_result_t UR_APICALL urEnqueueUSMMemcpy(
13901408
const auto SrcShadow = DeviceInfo->Shadow->MemToShadow(Src);
13911409
const auto DstShadow = DeviceInfo->Shadow->MemToShadow(Dst);
13921410

1411+
Event = nullptr;
13931412
UR_CALL(pfnUSMMemcpy(hQueue, blocking, (void *)DstShadow,
1394-
(void *)SrcShadow, size, 0, nullptr, &hEvents[1]));
1413+
(void *)SrcShadow, size, 0, nullptr, &Event));
1414+
Events.push_back(Event);
13951415
} else if (DstInfoItOp) {
13961416
auto DstInfo = (*DstInfoItOp)->second;
13971417

13981418
const auto &DeviceInfo =
13991419
getMsanInterceptor()->getDeviceInfo(DstInfo->Device);
14001420
auto DstShadow = DeviceInfo->Shadow->MemToShadow(Dst);
14011421

1422+
Event = nullptr;
14021423
UR_CALL(EnqueueUSMBlockingSet(hQueue, (void *)DstShadow, 0, size, 0,
1403-
nullptr, &hEvents[1]));
1424+
nullptr, &Event));
1425+
Events.push_back(Event);
14041426
}
14051427

14061428
if (phEvent) {
14071429
UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait(
1408-
hQueue, 2, hEvents, phEvent));
1430+
hQueue, Events.size(), Events.data(), phEvent));
14091431
}
14101432

14111433
return UR_RESULT_SUCCESS;
@@ -1441,10 +1463,11 @@ ur_result_t UR_APICALL urEnqueueUSMFill2D(
14411463
auto pfnUSMFill2D = getContext()->urDdiTable.Enqueue.pfnUSMFill2D;
14421464
getContext()->logger.debug("==== urEnqueueUSMFill2D");
14431465

1444-
ur_event_handle_t hEvents[2] = {};
1466+
std::vector<ur_event_handle_t> Events;
1467+
ur_event_handle_t Event{};
14451468
UR_CALL(pfnUSMFill2D(hQueue, pMem, pitch, patternSize, pPattern, width,
1446-
height, numEventsInWaitList, phEventWaitList,
1447-
&hEvents[0]));
1469+
height, numEventsInWaitList, phEventWaitList, &Event));
1470+
Events.push_back(Event);
14481471

14491472
const auto Mem = (uptr)pMem;
14501473
auto MemInfoItOp = getMsanInterceptor()->findAllocInfoByAddress(Mem);
@@ -1456,13 +1479,15 @@ ur_result_t UR_APICALL urEnqueueUSMFill2D(
14561479
const auto MemShadow = DeviceInfo->Shadow->MemToShadow(Mem);
14571480

14581481
const char Pattern = 0;
1482+
Event = nullptr;
14591483
UR_CALL(pfnUSMFill2D(hQueue, (void *)MemShadow, pitch, 1, &Pattern,
1460-
width, height, 0, nullptr, &hEvents[1]));
1484+
width, height, 0, nullptr, &Event));
1485+
Events.push_back(Event);
14611486
}
14621487

14631488
if (phEvent) {
14641489
UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait(
1465-
hQueue, 2, hEvents, phEvent));
1490+
hQueue, Events.size(), Events.data(), phEvent));
14661491
}
14671492

14681493
return UR_RESULT_SUCCESS;
@@ -1497,10 +1522,12 @@ ur_result_t UR_APICALL urEnqueueUSMMemcpy2D(
14971522
auto pfnUSMMemcpy2D = getContext()->urDdiTable.Enqueue.pfnUSMMemcpy2D;
14981523
getContext()->logger.debug("==== pfnUSMMemcpy2D");
14991524

1500-
ur_event_handle_t hEvents[2] = {};
1525+
std::vector<ur_event_handle_t> Events;
1526+
ur_event_handle_t Event{};
15011527
UR_CALL(pfnUSMMemcpy2D(hQueue, blocking, pDst, dstPitch, pSrc, srcPitch,
15021528
width, height, numEventsInWaitList, phEventWaitList,
1503-
&hEvents[0]));
1529+
&Event));
1530+
Events.push_back(Event);
15041531

15051532
const auto Src = (uptr)pSrc, Dst = (uptr)pDst;
15061533
auto SrcInfoItOp = getMsanInterceptor()->findAllocInfoByAddress(Src);
@@ -1515,9 +1542,11 @@ ur_result_t UR_APICALL urEnqueueUSMMemcpy2D(
15151542
const auto SrcShadow = DeviceInfo->Shadow->MemToShadow(Src);
15161543
const auto DstShadow = DeviceInfo->Shadow->MemToShadow(Dst);
15171544

1545+
Event = nullptr;
15181546
UR_CALL(pfnUSMMemcpy2D(hQueue, blocking, (void *)DstShadow, dstPitch,
15191547
(void *)SrcShadow, srcPitch, width, height, 0,
1520-
nullptr, &hEvents[1]));
1548+
nullptr, &Event));
1549+
Events.push_back(Event);
15211550
} else if (DstInfoItOp) {
15221551
auto DstInfo = (*DstInfoItOp)->second;
15231552

@@ -1526,14 +1555,16 @@ ur_result_t UR_APICALL urEnqueueUSMMemcpy2D(
15261555
const auto DstShadow = DeviceInfo->Shadow->MemToShadow(Dst);
15271556

15281557
const char Pattern = 0;
1558+
Event = nullptr;
15291559
UR_CALL(getContext()->urDdiTable.Enqueue.pfnUSMFill2D(
15301560
hQueue, (void *)DstShadow, dstPitch, 1, &Pattern, width, height, 0,
1531-
nullptr, &hEvents[1]));
1561+
nullptr, &Event));
1562+
Events.push_back(Event);
15321563
}
15331564

15341565
if (phEvent) {
15351566
UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait(
1536-
hQueue, 2, hEvents, phEvent));
1567+
hQueue, Events.size(), Events.data(), phEvent));
15371568
}
15381569

15391570
return UR_RESULT_SUCCESS;

0 commit comments

Comments
 (0)