On Tue, Apr 05, 2022 at 12:01:35AM -0700, Christoph Hellwig wrote: > On Tue, Apr 05, 2022 at 08:29:36AM +0200, Arnd Bergmann wrote: > > I think the users all have their own copies, at least the ones I could > > find on codesearch.debian.org. However, there are 27 virtio_*.h > > files in include/uapi/linux that probably should stay together for > > the purpose of defining the virtio protocol, and some others might > > be uapi relevant. > > > > I see that at least include/uapi/linux/vhost.h has ioctl() definitions > > in it, and includes the virtio_ring.h header indirectly. > > Uhh. We had a somilar mess (but at a smaller scale) in nvme, where > the uapi nvme.h contained both the UAPI and the protocol definition. > We took a hard break to only have a nvme_ioctl.h in the uapi header > and linux/nvme.h for the protocol. This did break a bit of userspace > compilation (but not running obviously) at the time, but really made > the headers much easier to main. Some userspace keeps on copying > nvme.h with the protocol definitions. So far we are quite happy with the status quo, I don't see any issues maintaining the headers. And yes, through vhost and vringh they are part of UAPI. Yes users have their own copies but they synch with the kernel. That's generally. Specifically the vring_init thing is a legacy thingy used by kvmtool and maybe others, and it inits the ring in the way that vring/virtio expect. Has been there since day 1 and we are careful not to add more stuff like that, so I don't see a lot of gain from incurring this pain for users. -- MST