On Wed, Mar 13, 2013 at 05:28:56PM -0400, Stefan Berger wrote: > On 03/13/2013 05:11 PM, mdroth wrote: > >On Wed, Mar 13, 2013 at 01:56:23PM -0500, Joel Schopp wrote: > >>This patch adds support functions for operating on in memory sized file > >>buffers. > >There's been some past refactorings to remove non-migration users of > >QEMUFile, and AFAIK that's still the case today. QEMUFile satisfies > >funky requirements like rate-limiting, buffering, etc that were specific > >to migration. > > > >IIUC all we want here is an abstraction on top of write()/memcpy(), > >and access to qemu_{put|get}_be* utility functions. > > > >Have you considered rolling those abstractions in the visitor > >implementations as opposed to extending QEMUFile, and using > >be*_to_cpus/cpus_to_be* helpers directly instead (like block/qcow2.c > >does, for example)? > > The advantage of using the QEMUFile abstractions is that now you can > build a visitor on top of it and read from buffers, sockets, BDRV's > (later on), plain files, and whatever else you can hide underneath > that interface. Back in 2011 when I initially wrote this code there
Maybe a case can be made for making it a general utility library, but I'm having a hard time thinking of any reasons that aren't specific to migration, and I wonder if it's even necessary now that we have a migration thread that can handle the rate-limiting/buffering considerations. But I'm not sure exactly why we decided to drop non-migration users, so I think it's worth clarifying before we attempt to tether another component to it. Here's the thread I'm referencing: https://lists.gnu.org/archive/html/qemu-devel/2011-09/msg02589.html Juan, any background/input on this? > that interface. Back in 2011 when I initially wrote this code there > at least was talk about using ASN.1 for migration, but this is > nearly 2 years ago and it may never be done that way, so this was > one driving force behind using QEMUFile inside the visitor. Besides Well, even back then goal was to abstract away direct calls to QEMUFile and replace them with visitor calls, and then to provide legacy support via a QEMUFile Visitor. A BER visitor could then be dropped in to provide a BER migration protocol (how exactly this would be done was somewhat of a ???, might've ended up layering on to of the QEMUFile visitor anyway, but more out of pragmatism than anything else) > that we later want to use the visitors for writing into virtual > NVRAM, which we would build on top of a QEMUFile wrapping BDRVs. So > there are some immediate advantages of using the common QEMUFile > interface for reading and writing of data from different types of > sources. Can you describe the requirements for the BDRV wrapper a bit more? Everything else seems reasonably doable via visitor internals but maybe there's more to it I'm not considering. > > Regards, > Stefan >