virtgpu virgl: assume 0 caps for unrecognized capset IDs

minigbm gralloc + gfxstream on the host will always fail the get caps
ioctl, but gralloc itself still works fine.

TEST=build and run the emulator
BUG=b:322199104

Change-Id: I35ebbdddbfb050ead76d61626f13f028cf909229
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/minigbm/+/5241884
Auto-Submit: Kaiyi Li <kaiyili@google.com>
Commit-Queue: Kaiyi Li <kaiyili@google.com>
Tested-by: Kaiyi Li <kaiyili@google.com>
Reviewed-by: Dominik Behr <dbehr@chromium.org>
This commit is contained in:
Kaiyi Li 2024-01-18 12:03:35 -08:00 committed by Chromeos LUCI
parent 6a402a9d24
commit 52c63ae1a7

View file

@ -548,10 +548,26 @@ static int virgl_get_caps(struct driver *drv, union virgl_caps *caps, int *caps_
int ret;
struct drm_virtgpu_get_caps cap_args = { 0 };
memset(caps, 0, sizeof(union virgl_caps));
*caps_is_v2 = 0;
cap_args.addr = (unsigned long long)caps;
if (params[param_capset_fix].value) {
if (params[param_supported_capset_ids].value) {
drv_logi("Supported CAPSET IDs: %u.", params[param_supported_capset_ids].value);
if (params[param_supported_capset_ids].value & (1 << 2)) {
*caps_is_v2 = 1;
} else if (params[param_supported_capset_ids].value & (1 << 1)) {
*caps_is_v2 = 0;
} else {
drv_logi("Unrecognized CAPSET IDs: %u. Assuming all zero caps.",
params[param_supported_capset_ids].value);
return 0;
}
} else if (params[param_capset_fix].value) {
*caps_is_v2 = 1;
}
cap_args.addr = (unsigned long long)caps;
if (*caps_is_v2) {
cap_args.cap_set_id = 2;
cap_args.size = sizeof(union virgl_caps);
} else {