All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: "Gabriel L. Somlo" <somlo@cmu.edu>
Cc: kraxel@redhat.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] fw cfg files cross-version migration races
Date: Mon, 1 Jun 2015 17:44:47 +0200	[thread overview]
Message-ID: <20150601174409-mutt-send-email-mst@redhat.com> (raw)
In-Reply-To: <20150601153237.GE2120@HEDWIG.INI.CMU.EDU>

On Mon, Jun 01, 2015 at 11:32:37AM -0400, Gabriel L. Somlo wrote:
> On Mon, Jun 01, 2015 at 03:13:43PM +0100, Daniel P. Berrange wrote:
> > On Mon, Jun 01, 2015 at 04:10:54PM +0200, Michael S. Tsirkin wrote:
> > > Hi all,
> > > At the moment we have devices adding and removing fw cfg file entries.
> > > One problem is that this makes the contents of fw cfg
> > > depend on order of device initialization.
> > > Since the fw cfg file list is not migrated, this means that
> > > guest will break if it is migrated between qemu versions
> > > which generate the list diferently, and if migration triggers
> > > while guest happens to read fw cfg.
> > > 
> > > As there are plans to extend the use of fw cfg, I think it's
> > > important to fix this issue sooner rather than later.
> > > 
> > > Ideas:
> > > 	- sort fw cfg files by name before exposing them to guest
> > > 	- keep doing what we did for compat machine types,
> > > 	  hope that things don't break too often
> > > 
> > > More ideas? Comments? Anyone wants to try implementing this?
> > 
> > Shouldn't we migrate the fw cfg data that the source host generates
> > originally,  rather than trying to play games make sure the way it
> > is re-generated on dest doesn't change.
> 
> Right now, in hw/nvram/fw_cfg.c, we have:
> 
> struct FWCfgState {
>     /*< private >*/
>     SysBusDevice parent_obj; 
>     /*< public >*/
>     
>     FWCfgEntry entries[2][FW_CFG_MAX_ENTRY];
>     FWCfgFiles *files;
>     uint16_t cur_entry;
>     uint32_t cur_offset;
>     Notifier machine_ready;
> };
> 
> and, later:
> 
> static const VMStateDescription vmstate_fw_cfg = {
>     .name = "fw_cfg",
>     .version_id = 2,
>     .minimum_version_id = 1,
>     .fields = (VMStateField[]) {
>         VMSTATE_UINT16(cur_entry, FWCfgState),
>         VMSTATE_UINT16_HACK(cur_offset, FWCfgState, is_version_1),
>         VMSTATE_UINT32_V(cur_offset, FWCfgState, 2),
>         VMSTATE_END_OF_LIST() 
>     }
> };  
> 
> Would this be as simple as adding a VMSTATE_ARRAY* for 'entries'
> and something like a VMSTATE_VBUFFER_ALLOC_UINT32 for 'files', which
> is dynamically allocated the first time a fwcfg "file" is inserted ?
> 
> The one catch is that the value of the "files" pointer is itself a
> fw_cfg entry (FW_CFG_FILE_DIR), so that would need to be "patched"
> on the destination side...
> 
> I do like the idea of simply migrating the full content of the fw_cfg
> device though, seems like the safest solution.
> 
> Thanks much,
> --Gabriel

OK but you need to do a bunch of work on load, e.g. some fw cfg
entries trigger callbacks on access, etc.

  reply	other threads:[~2015-06-01 15:44 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-01 14:10 [Qemu-devel] fw cfg files cross-version migration races Michael S. Tsirkin
2015-06-01 14:13 ` Daniel P. Berrange
2015-06-01 15:32   ` Gabriel L. Somlo
2015-06-01 15:44     ` Michael S. Tsirkin [this message]
2015-06-01 18:00       ` Gabriel L. Somlo
2015-06-01 20:31         ` Gabriel L. Somlo
2015-06-02  7:04           ` Laszlo Ersek
2015-06-02  7:11           ` Gerd Hoffmann
2015-06-03  8:31             ` Paolo Bonzini
2015-06-03 16:03             ` Michael S. Tsirkin
2015-06-05 16:05             ` Gabriel L. Somlo
2015-06-08  7:21               ` Gerd Hoffmann
2015-06-08  9:43                 ` Michael S. Tsirkin
2015-06-08 11:19                   ` Gerd Hoffmann
2015-06-08 11:44                     ` Paolo Bonzini
2015-06-08 12:23                       ` Gabriel L. Somlo
2015-06-08 12:28                         ` Paolo Bonzini
2015-06-08 12:33                         ` Gerd Hoffmann
2015-06-08 13:32                           ` Gabriel L. Somlo
2015-06-08 15:53                             ` Michael S. Tsirkin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150601174409-mutt-send-email-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=somlo@cmu.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.