@@ -794,24 +794,30 @@ uint32_t IoctlHelperXe::getAtomicAccess(AtomicAccessMode mode) {
794794 return retVal;
795795}
796796
797- uint64_t IoctlHelperXe::getPreferredLocationArgs (MemAdvise memAdviseOp) {
797+ uint64_t IoctlHelperXe::getPreferredLocationArgs (int deviceFd, MemAdvise memAdviseOp) {
798798 xeLog (" -> IoctlHelperXe::%s\n " , __FUNCTION__);
799799 uint64_t param = 0 ;
800800
801801 switch (memAdviseOp) {
802- case MemAdvise::setPreferredLocation:
803802 case MemAdvise::clearPreferredLocation:
804-
805803 case MemAdvise::clearSystemMemoryPreferredLocation: {
806804 // Assumes that the default location is Device VRAM.
807805 const auto preferredLocation = static_cast <uint64_t >(getDrmParamValue (DrmParam::memoryAdviseLocationDevice));
808806 const auto policy = static_cast <uint64_t >(getDrmParamValue (DrmParam::memoryAdviseMigrationPolicyAllPages));
809- param = (preferredLocation << 32 ) | policy;
807+ const auto regionInstance = static_cast <uint64_t >(0 );
808+ param = (preferredLocation << 32 ) | (policy << 16 ) | regionInstance;
809+ } break ;
810+ case MemAdvise::setPreferredLocation: {
811+ const auto preferredLocation = static_cast <uint64_t >(deviceFd);
812+ const auto policy = static_cast <uint64_t >(getDrmParamValue (DrmParam::memoryAdviseMigrationPolicyAllPages));
813+ const auto regionInstance = static_cast <uint64_t >(1 );
814+ param = (preferredLocation << 32 ) | (policy << 16 ) | regionInstance;
810815 } break ;
811816 case MemAdvise::setSystemMemoryPreferredLocation: {
812817 const auto preferredLocation = static_cast <uint64_t >(getDrmParamValue (DrmParam::memoryAdviseLocationSystem));
813818 const auto policy = static_cast <uint64_t >(getDrmParamValue (DrmParam::memoryAdviseMigrationPolicySystemPages));
814- param = (preferredLocation << 32 ) | policy;
819+ const auto regionInstance = static_cast <uint64_t >(0 );
820+ param = (preferredLocation << 32 ) | (policy << 16 ) | regionInstance;
815821 } break ;
816822 default :
817823 xeLog (" Invalid advise operation %s\n " , __FUNCTION__);
@@ -837,10 +843,12 @@ bool IoctlHelperXe::setVmBoAdvise(int32_t handle, uint32_t attribute, void *regi
837843inline void setMemoryAdvisePreferredLocationParam (drm_xe_madvise &vmAdvise, const uint64_t param) {
838844
839845 uint32_t devmemFd = static_cast <uint32_t >(param >> 32 );
840- uint16_t migrationPolicy = static_cast <uint16_t >(param & 0xFFFF );
846+ uint16_t migrationPolicy = static_cast <uint16_t >((param >> 16 ) & 0xFFFF );
847+ uint16_t regionInstance = static_cast <uint16_t >(param & 0xFFFF );
841848
842849 vmAdvise.preferred_mem_loc .devmem_fd = devmemFd;
843850 vmAdvise.preferred_mem_loc .migration_policy = migrationPolicy;
851+ vmAdvise.preferred_mem_loc .region_instance = regionInstance;
844852}
845853
846854inline void setMemoryAdviseAtomicParam (drm_xe_madvise &vmAdvise, const uint64_t param) {
0 commit comments