wsl/libhsakmt: refactor handling of kmd priv data

Signed-off-by: Flora Cui <flora.cui@amd.com>
Reviewed-by: Longlong Yao <Longlong.Yao@amd.com>
Part-of: <http://10.67.69.192/wsl/rocr-runtime/-/merge_requests/98>
This commit is contained in:
Flora Cui
2025-08-01 15:18:51 +08:00
committed by Frank Min
parent c3f022822b
commit 72cbeeff6d
3 changed files with 52 additions and 26 deletions
+18 -10
View File
@@ -285,16 +285,24 @@ ErrorCode GpuMemory::CreatePhysicalMemory() {
const auto num_allocations = NumChunks();
void *priv_drv_data;
void *alloc_priv;
void *priv_alloc_data;
int priv_drv_data_size;
int alloc_priv_data_size;
int priv_alloc_data_size;
if (!thunk_proxy::CreatePrivateAllocInfo(NumChunks(), &priv_drv_data, &alloc_priv,
&priv_drv_data_size, &alloc_priv_data_size))
thunk_proxy::GetAllocPrivDataSize(&priv_drv_data_size, &priv_alloc_data_size);
int total_size = priv_drv_data_size +
num_allocations * priv_alloc_data_size +
num_allocations * sizeof(D3DDDI_ALLOCATIONINFO2);
priv_drv_data = malloc(total_size);
if (!priv_drv_data)
return ErrorCode::OutOfMemory;
memset(priv_drv_data, 0, total_size);
thunk_proxy::FillinAllocPrivDrvData(priv_drv_data, priv_alloc_data_size);
priv_alloc_data = static_cast<unsigned char*>(priv_drv_data) + priv_drv_data_size;
auto alloc_info = reinterpret_cast<D3DDDI_ALLOCATIONINFO2*>(
static_cast<unsigned char*>(priv_drv_data) + priv_drv_data_size * num_allocations);
static_cast<unsigned char*>(priv_alloc_data) + priv_alloc_data_size * num_allocations);
size_t size = desc_.size;
uint64_t addr = desc_.gpu_addr;
@@ -303,7 +311,7 @@ ErrorCode GpuMemory::CreatePhysicalMemory() {
for (size_t i = 0; i < num_allocations; i++) {
void* priv_data = (void*)((char*)priv_drv_data + priv_drv_data_size * i);
void* priv_data = (void*)((char*)priv_alloc_data + priv_alloc_data_size * i);
size_t block_size = std::min(size, WDDMDevice::GpuMemoryChunkSize);
if (IsUserMemory() || IsSystem()) {
@@ -318,14 +326,14 @@ ErrorCode GpuMemory::CreatePhysicalMemory() {
addr += block_size;
alloc_info[i].pPrivateDriverData = priv_data;
alloc_info[i].PrivateDriverDataSize = priv_drv_data_size;
alloc_info[i].PrivateDriverDataSize = priv_alloc_data_size;
alloc_info[i].VidPnSourceId = D3DDDI_ID_UNINITIALIZED;
}
D3DKMT_CREATEALLOCATION args = {};
args.hDevice = device_->DeviceHandle();
args.pPrivateDriverData = alloc_priv;
args.PrivateDriverDataSize = alloc_priv_data_size;
args.pPrivateDriverData = priv_drv_data;
args.PrivateDriverDataSize = priv_drv_data_size;
args.NumAllocations = num_allocations;
args.pAllocationInfo2 = alloc_info;
@@ -357,7 +365,7 @@ ErrorCode GpuMemory::CreatePhysicalMemory() {
resource_ = args.hResource;
}
thunk_proxy::DestroyPrivateAllocInfo(priv_drv_data, alloc_priv);
free(priv_drv_data);
return status;
}