gfxstream: determine page size based on guest properties too

blobAlignment helps with running a 4KB guest on a 16KB host.
But for 16KB guest on 4KB host, we'll need to check guest
size too.  os_get_page_size(..) might not work on all target
guest OSes now, so default to 4KB.

TEST=CF 16KB works

Reviewed-by: David Gilhooley <djgilhooley.gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37460>
This commit is contained in:
Gurchetan Singh
2025-09-17 10:00:52 -07:00
committed by Marge Bot
parent 0c6c1fa484
commit 943ac08280
2 changed files with 10 additions and 0 deletions
@@ -8,10 +8,13 @@
#include <errno.h>
#include "util/log.h"
#include "util/os_misc.h"
static bool GetRingParamsFromCapset(enum VirtGpuCapset capset, const VirtGpuCaps& caps,
uint32_t& ringSize, uint32_t& bufferSize,
uint32_t& blobAlignment) {
uint64_t guest_page_size = 4096;
os_get_page_size(&guest_page_size);
switch (capset) {
case kCapsetGfxStreamVulkan:
ringSize = caps.vulkanCapset.ringSize;
@@ -37,6 +40,7 @@ static bool GetRingParamsFromCapset(enum VirtGpuCapset capset, const VirtGpuCaps
return false;
}
blobAlignment = std::max(blobAlignment, (uint32_t)guest_page_size);
return true;
}
@@ -20,6 +20,7 @@
#include "drm-uapi/virtgpu_drm.h"
#include "util/detect_os.h"
#include "util/log.h"
#include "util/os_misc.h"
#ifdef MAJOR_IN_MKDEV
#include <sys/mkdev.h>
@@ -243,6 +244,11 @@ int32_t DrmVirtGpuDevice::init(int32_t descriptor) {
mCaps.vulkanCapset.blobAlignment = 4096;
}
uint64_t guest_page_size = 4096;
os_get_page_size(&guest_page_size);
mCaps.vulkanCapset.blobAlignment =
std::max((uint32_t)guest_page_size, mCaps.vulkanCapset.blobAlignment);
ctx_set_params[0].param = VIRTGPU_CONTEXT_PARAM_NUM_RINGS;
ctx_set_params[0].value = 2;
init.num_params = 1;