From 943ac082804413a2f11d7330082095aa94def6c2 Mon Sep 17 00:00:00 2001 From: Gurchetan Singh Date: Wed, 17 Sep 2025 10:00:52 -0700 Subject: [PATCH] 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 Part-of: --- .../GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp | 4 ++++ src/gfxstream/guest/platform/drm/DrmVirtGpuDevice.cpp | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/src/gfxstream/guest/GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp b/src/gfxstream/guest/GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp index a1ac3edd3f5..62a860d197b 100644 --- a/src/gfxstream/guest/GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp +++ b/src/gfxstream/guest/GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp @@ -8,10 +8,13 @@ #include #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; } diff --git a/src/gfxstream/guest/platform/drm/DrmVirtGpuDevice.cpp b/src/gfxstream/guest/platform/drm/DrmVirtGpuDevice.cpp index 79a68d9331d..b22c336531f 100644 --- a/src/gfxstream/guest/platform/drm/DrmVirtGpuDevice.cpp +++ b/src/gfxstream/guest/platform/drm/DrmVirtGpuDevice.cpp @@ -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 @@ -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;