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:
committed by
Marge Bot
parent
0c6c1fa484
commit
943ac08280
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user