Showing posts from February, 2018

virgl caps - oops I messed.up

When I designed virgl I added a capability system to pass some info about the host GL to the guest driver along the lines of gallium caps. The design was at the virtio GPU level you have a number of capsets each of which has a max version and max size. The virgl capset is capset 1 with max version 1 and size 308 bytes. Until now we've happily been using version 1 at 308 bytes. Recently we decided we wanted to have a v2 at 380 bytes, and the world fell apart. It turned out there is a bug in the guest kernel driver, it asks the host for a list of capsets and allows guest userspace to retrieve from it. The guest userspace has it's own copy of the struct. The flow is: Guest mesa driver gives kernel a caps struct to fill out for capset 1. Kernel driver asks the host over virtio for latest capset 1 info, max size, version. Host gives it the max_size, version for capset 1. Kernel driver asks host to fill out malloced memory of the max_size with the caps struct. Kernel dr