The commit 206cc44588f7 ("virtio: reject shm region if length is zero") breaks the Virtio-gpu `host_visible` feature. As you can see in the snippet below, host_visible_region is zero because of the `kzalloc`. It's using the `vm_get_shm_region` (drivers/virtio/virtio_mmio.c:536) to read the `addr` and `len` from qemu/crosvm. ``` drivers/gpu/drm/virtio/virtgpu_kms.c 132 vgdev = drmm_kzalloc(dev, sizeof(struct virtio_gpu_device), GFP_KERNEL); [...] 177 if (virtio_get_shm_region(vgdev->vdev, &vgdev->host_visible_region, 178 VIRTIO_GPU_SHM_ID_HOST_VISIBLE)) { ``` Now it always fails. To fix, revert the offending commit.
Unified · Split
| @@ -328,8 +328,6 @@ static inline · 327 unmodified lines | ||
| 328 | 328 | bool virtio_get_shm_region(struct virtio_device *vdev, |
| 329 | 329 | struct virtio_shm_region *region, u8 id) |
| 330 | 330 | { |
| 331 | − if (!region->len) | |
| 332 | − return false; | |
| 333 | 331 | if (!vdev->config->get_shm_region) |
| 334 | 332 | return false; |
| 335 | 333 | return vdev->config->get_shm_region(vdev, region, id); |