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;
|
bool success = true;
|
||||||
auto ioctlHelper = drm->getIoctlHelper();
|
auto ioctlHelper = drm->getIoctlHelper();
|
||||||
auto memoryClassDevice = ioctlHelper->getDrmParamValue(DrmParam::MemoryClassDevice);
|
auto memoryClassDevice = ioctlHelper->getDrmParamValue(DrmParam::MemoryClassDevice);
|
||||||
|
auto vmId = drm->getVirtualMemoryAddressSpace(subDeviceId);
|
||||||
|
|
||||||
for (auto bo : bufferObjects) {
|
for (auto bo : bufferObjects) {
|
||||||
if (bo != nullptr) {
|
if (bo != nullptr) {
|
||||||
auto region = static_cast<uint32_t>((memoryClassDevice << 16u) | subDeviceId);
|
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 getAtomicAdvise(bool isNonAtomic) = 0;
|
||||||
virtual uint32_t getPreferredLocationAdvise() = 0;
|
virtual uint32_t getPreferredLocationAdvise() = 0;
|
||||||
virtual bool setVmBoAdvise(int32_t handle, uint32_t attribute, void *region) = 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 uint32_t getDirectSubmissionFlag() = 0;
|
||||||
virtual std::unique_ptr<uint8_t[]> prepareVmBindExt(const StackVec<uint32_t, 2> &bindExtHandles) = 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;
|
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 getAtomicAdvise(bool isNonAtomic) override;
|
||||||
uint32_t getPreferredLocationAdvise() override;
|
uint32_t getPreferredLocationAdvise() override;
|
||||||
bool setVmBoAdvise(int32_t handle, uint32_t attribute, void *region) 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;
|
uint32_t getDirectSubmissionFlag() override;
|
||||||
std::unique_ptr<uint8_t[]> prepareVmBindExt(const StackVec<uint32_t, 2> &bindExtHandles) override;
|
std::unique_ptr<uint8_t[]> prepareVmBindExt(const StackVec<uint32_t, 2> &bindExtHandles) override;
|
||||||
uint64_t getFlagsForVmBind(bool bindCapture, bool bindImmediate, bool bindMakeResident) 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 getAtomicAdvise(bool isNonAtomic) override;
|
||||||
uint32_t getPreferredLocationAdvise() override;
|
uint32_t getPreferredLocationAdvise() override;
|
||||||
bool setVmBoAdvise(int32_t handle, uint32_t attribute, void *region) 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;
|
uint32_t getDirectSubmissionFlag() override;
|
||||||
std::unique_ptr<uint8_t[]> prepareVmBindExt(const StackVec<uint32_t, 2> &bindExtHandles) override;
|
std::unique_ptr<uint8_t[]> prepareVmBindExt(const StackVec<uint32_t, 2> &bindExtHandles) override;
|
||||||
uint64_t getFlagsForVmBind(bool bindCapture, bool bindImmediate, bool bindMakeResident) 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;
|
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{};
|
prelim_drm_i915_gem_vm_prefetch vmPrefetch{};
|
||||||
|
|
||||||
vmPrefetch.length = length;
|
vmPrefetch.length = length;
|
||||||
vmPrefetch.region = region;
|
vmPrefetch.region = region;
|
||||||
vmPrefetch.start = start;
|
vmPrefetch.start = start;
|
||||||
|
vmPrefetch.rsvd = vmId;
|
||||||
|
|
||||||
int ret = IoctlHelper::ioctl(DrmIoctl::GemVmPrefetch, &vmPrefetch);
|
int ret = IoctlHelper::ioctl(DrmIoctl::GemVmPrefetch, &vmPrefetch);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
|
|
|
@ -90,7 +90,7 @@ bool IoctlHelperUpstream::setVmBoAdvise(int32_t handle, uint32_t attribute, void
|
||||||
return true;
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -284,7 +284,7 @@ TEST(IoctlHelperTestsUpstream, givenUpstreamWhenSetVmPrefetchThenReturnTrue) {
|
||||||
auto drm = std::make_unique<DrmTipMock>(*executionEnvironment->rootDeviceEnvironments[0]);
|
auto drm = std::make_unique<DrmTipMock>(*executionEnvironment->rootDeviceEnvironments[0]);
|
||||||
|
|
||||||
auto ioctlHelper = drm->getIoctlHelper();
|
auto ioctlHelper = drm->getIoctlHelper();
|
||||||
EXPECT_TRUE(ioctlHelper->setVmPrefetch(0, 0, 0));
|
EXPECT_TRUE(ioctlHelper->setVmPrefetch(0, 0, 0, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(IoctlHelperTestsUpstream, givenUpstreamWhenDirectSubmissionEnabledThenNoFlagsAdded) {
|
TEST(IoctlHelperTestsUpstream, givenUpstreamWhenDirectSubmissionEnabledThenNoFlagsAdded) {
|
||||||
|
|
|
@ -88,6 +88,9 @@ int handlePrelimRequests(DrmIoctl request, void *arg, int ioctlRetVal, int query
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (request == DrmIoctl::GemVmPrefetch) {
|
||||||
|
auto vmPrefetchParams = static_cast<prelim_drm_i915_gem_vm_prefetch *>(arg);
|
||||||
|
EXPECT_NE(0u, vmPrefetchParams->rsvd);
|
||||||
}
|
}
|
||||||
return ioctlRetVal;
|
return ioctlRetVal;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue