Set destination vm id in vm prefetch call
Use rsvd in prelim_drm_i915_gem_vm_prefetch to pass vm id to prefetch to Related-To: NEO-6740 Signed-off-by: Slawomir Milczarek <slawomir.milczarek@intel.com>
This commit is contained in:
parent
083168dafb
commit
d942660b20
|
@ -320,11 +320,12 @@ bool DrmAllocation::setMemPrefetch(Drm *drm, uint32_t subDeviceId) {
|
|||
bool success = true;
|
||||
auto ioctlHelper = drm->getIoctlHelper();
|
||||
auto memoryClassDevice = ioctlHelper->getDrmParamValue(DrmParam::MemoryClassDevice);
|
||||
auto vmId = drm->getVirtualMemoryAddressSpace(subDeviceId);
|
||||
|
||||
for (auto bo : bufferObjects) {
|
||||
if (bo != nullptr) {
|
||||
auto region = static_cast<uint32_t>((memoryClassDevice << 16u) | subDeviceId);
|
||||
success &= ioctlHelper->setVmPrefetch(bo->peekAddress(), bo->peekSize(), region);
|
||||
success &= ioctlHelper->setVmPrefetch(bo->peekAddress(), bo->peekSize(), region, vmId);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@ class IoctlHelper {
|
|||
virtual uint32_t getAtomicAdvise(bool isNonAtomic) = 0;
|
||||
virtual uint32_t getPreferredLocationAdvise() = 0;
|
||||
virtual bool setVmBoAdvise(int32_t handle, uint32_t attribute, void *region) = 0;
|
||||
virtual bool setVmPrefetch(uint64_t start, uint64_t length, uint32_t region) = 0;
|
||||
virtual bool setVmPrefetch(uint64_t start, uint64_t length, uint32_t region, uint32_t vmId) = 0;
|
||||
virtual uint32_t getDirectSubmissionFlag() = 0;
|
||||
virtual std::unique_ptr<uint8_t[]> prepareVmBindExt(const StackVec<uint32_t, 2> &bindExtHandles) = 0;
|
||||
virtual uint64_t getFlagsForVmBind(bool bindCapture, bool bindImmediate, bool bindMakeResident) = 0;
|
||||
|
@ -159,7 +159,7 @@ class IoctlHelperUpstream : public IoctlHelper {
|
|||
uint32_t getAtomicAdvise(bool isNonAtomic) override;
|
||||
uint32_t getPreferredLocationAdvise() override;
|
||||
bool setVmBoAdvise(int32_t handle, uint32_t attribute, void *region) override;
|
||||
bool setVmPrefetch(uint64_t start, uint64_t length, uint32_t region) override;
|
||||
bool setVmPrefetch(uint64_t start, uint64_t length, uint32_t region, uint32_t vmId) override;
|
||||
uint32_t getDirectSubmissionFlag() override;
|
||||
std::unique_ptr<uint8_t[]> prepareVmBindExt(const StackVec<uint32_t, 2> &bindExtHandles) override;
|
||||
uint64_t getFlagsForVmBind(bool bindCapture, bool bindImmediate, bool bindMakeResident) override;
|
||||
|
@ -225,7 +225,7 @@ class IoctlHelperPrelim20 : public IoctlHelper {
|
|||
uint32_t getAtomicAdvise(bool isNonAtomic) override;
|
||||
uint32_t getPreferredLocationAdvise() override;
|
||||
bool setVmBoAdvise(int32_t handle, uint32_t attribute, void *region) override;
|
||||
bool setVmPrefetch(uint64_t start, uint64_t length, uint32_t region) override;
|
||||
bool setVmPrefetch(uint64_t start, uint64_t length, uint32_t region, uint32_t vmId) override;
|
||||
uint32_t getDirectSubmissionFlag() override;
|
||||
std::unique_ptr<uint8_t[]> prepareVmBindExt(const StackVec<uint32_t, 2> &bindExtHandles) override;
|
||||
uint64_t getFlagsForVmBind(bool bindCapture, bool bindImmediate, bool bindMakeResident) override;
|
||||
|
|
|
@ -229,12 +229,13 @@ bool IoctlHelperPrelim20::setVmBoAdvise(int32_t handle, uint32_t attribute, void
|
|||
return true;
|
||||
}
|
||||
|
||||
bool IoctlHelperPrelim20::setVmPrefetch(uint64_t start, uint64_t length, uint32_t region) {
|
||||
bool IoctlHelperPrelim20::setVmPrefetch(uint64_t start, uint64_t length, uint32_t region, uint32_t vmId) {
|
||||
prelim_drm_i915_gem_vm_prefetch vmPrefetch{};
|
||||
|
||||
vmPrefetch.length = length;
|
||||
vmPrefetch.region = region;
|
||||
vmPrefetch.start = start;
|
||||
vmPrefetch.rsvd = vmId;
|
||||
|
||||
int ret = IoctlHelper::ioctl(DrmIoctl::GemVmPrefetch, &vmPrefetch);
|
||||
if (ret != 0) {
|
||||
|
|
|
@ -90,7 +90,7 @@ bool IoctlHelperUpstream::setVmBoAdvise(int32_t handle, uint32_t attribute, void
|
|||
return true;
|
||||
}
|
||||
|
||||
bool IoctlHelperUpstream::setVmPrefetch(uint64_t start, uint64_t length, uint32_t region) {
|
||||
bool IoctlHelperUpstream::setVmPrefetch(uint64_t start, uint64_t length, uint32_t region, uint32_t vmId) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -284,7 +284,7 @@ TEST(IoctlHelperTestsUpstream, givenUpstreamWhenSetVmPrefetchThenReturnTrue) {
|
|||
auto drm = std::make_unique<DrmTipMock>(*executionEnvironment->rootDeviceEnvironments[0]);
|
||||
|
||||
auto ioctlHelper = drm->getIoctlHelper();
|
||||
EXPECT_TRUE(ioctlHelper->setVmPrefetch(0, 0, 0));
|
||||
EXPECT_TRUE(ioctlHelper->setVmPrefetch(0, 0, 0, 0));
|
||||
}
|
||||
|
||||
TEST(IoctlHelperTestsUpstream, givenUpstreamWhenDirectSubmissionEnabledThenNoFlagsAdded) {
|
||||
|
|
|
@ -88,6 +88,9 @@ int handlePrelimRequests(DrmIoctl request, void *arg, int ioctlRetVal, int query
|
|||
break;
|
||||
}
|
||||
}
|
||||
} else if (request == DrmIoctl::GemVmPrefetch) {
|
||||
auto vmPrefetchParams = static_cast<prelim_drm_i915_gem_vm_prefetch *>(arg);
|
||||
EXPECT_NE(0u, vmPrefetchParams->rsvd);
|
||||
}
|
||||
return ioctlRetVal;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue