mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 06:49:52 +08:00
Unprotect memory after migration to CPU
Change-Id: I280296422ec30583752a0b62c7c1c8777aa84c32 Signed-off-by: Lukasz Jobczyk <lukasz.jobczyk@intel.com>
This commit is contained in:
committed by
sys_ocldev
parent
e34ba2a233
commit
f825364770
@@ -18,59 +18,12 @@
|
||||
|
||||
#include <csignal>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <thread>
|
||||
#include <unistd.h>
|
||||
|
||||
using namespace NEO;
|
||||
|
||||
using PageFaultManagerLinuxTest = PageFaultManagerConfigFixture;
|
||||
using MockPageFaultManagerLinux = MockPageFaultManagerHandlerInvoke<PageFaultManagerLinux>;
|
||||
|
||||
struct UserSignalMockPageFaultManagerLinux : public PageFaultManagerLinux {
|
||||
using PageFaultManager::verifyPageFault;
|
||||
|
||||
UserSignalMockPageFaultManagerLinux() {
|
||||
ownThread = std::thread([&]() {
|
||||
while (!waitForCopyCalled) {
|
||||
if (ownThreadId == -1) {
|
||||
ownThreadId = static_cast<int>(syscall(__NR_gettid));
|
||||
}
|
||||
}
|
||||
});
|
||||
while (ownThreadId == -1) {
|
||||
}
|
||||
}
|
||||
|
||||
void allowCPUMemoryAccess(void *ptr, size_t size) override {}
|
||||
void transferToCpu(void *ptr, size_t size, void *cmdQ) override {}
|
||||
void setAubWritable(bool writable, void *ptr, SVMAllocsManager *unifiedMemoryManager) override {}
|
||||
|
||||
void sendSignalToThread(int threadId) override {
|
||||
PageFaultManagerLinux::sendSignalToThread(ownThreadId);
|
||||
}
|
||||
|
||||
void waitForCopy() override {
|
||||
PageFaultManagerLinux::waitForCopy();
|
||||
waitForCopyCalled = true;
|
||||
}
|
||||
|
||||
std::thread ownThread;
|
||||
int ownThreadId = -1;
|
||||
bool waitForCopyCalled = false;
|
||||
};
|
||||
|
||||
TEST_F(PageFaultManagerLinuxTest, whenVeryfyingPageFaultThenUserSignalIsSentToOtherThreads) {
|
||||
auto pageFaultManager = std::make_unique<UserSignalMockPageFaultManagerLinux>();
|
||||
|
||||
auto alloc = reinterpret_cast<void *>(0x1);
|
||||
pageFaultManager->insertAllocation(alloc, 10, nullptr, nullptr, {});
|
||||
pageFaultManager->verifyPageFault(alloc);
|
||||
pageFaultManager->ownThread.join();
|
||||
|
||||
EXPECT_TRUE(pageFaultManager->waitForCopyCalled);
|
||||
}
|
||||
|
||||
TEST_F(PageFaultManagerLinuxTest, whenPageFaultIsRaisedThenHandlerIsInvoked) {
|
||||
auto pageFaultManager = std::make_unique<MockPageFaultManagerLinux>();
|
||||
EXPECT_FALSE(pageFaultManager->handlerInvoked);
|
||||
|
||||
@@ -49,7 +49,6 @@ class MockPageFaultManager : public PageFaultManager {
|
||||
void baseGpuTransfer(void *ptr, void *cmdQ) {
|
||||
PageFaultManager::transferToGpu(ptr, cmdQ);
|
||||
}
|
||||
void broadcastWaitSignal() override {}
|
||||
void evictMemoryAfterImplCopy(GraphicsAllocation *allocation, Device *device) override {}
|
||||
|
||||
int allowMemoryAccessCalled = 0;
|
||||
|
||||
Reference in New Issue
Block a user