On Wed, Mar 13, 2013 at 05:41:33PM -0500, mdroth wrote: > 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?
Sorry, forgot to CC Juan :) > > > 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 > >