cf2d4c6 qemu: Use correct flags for ABI stability check in SaveImageUpdateDef

Authored and Committed by mprivozn 9 years ago
    qemu: Use correct flags for ABI stability check in SaveImageUpdateDef
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1183869
    
    Soo. you've successfully started yourself a domain. And since you want
    to use it on your host exclusively you are confident enough to
    passthrough the host CPU model, like this:
    
      <cpu mode='host-passthrough'/>
    
    Then, after a while, you want to save the domain into a file (e.g.
    virsh save dom dom.save). And here comes the trouble. The file consist
    of two parts: Libvirt header (containing domain XML among other
    things), and qemu migration data. Now, the domain XML in the header is
    formatted using special flags (VIR_DOMAIN_XML_SECURE |
    VIR_DOMAIN_XML_UPDATE_CPU | VIR_DOMAIN_XML_INACTIVE |
    VIR_DOMAIN_XML_MIGRATABLE).
    
    Then, on your way back from the bar, you think of changing something
    in the XML in the saved file (we have a command for it after all), say
    listen address for graphics console. So you successfully type in the
    command:
    
      virsh save-image-edit dom.save
    
    Change all the bits, and exit the editor. But instead of success
    you're left with sad error message:
    
      error: unsupported configuration: Target CPU model <null> does not
      match source Pentium Pro
    
    Sigh. Digging into the code you see lines, where we check for ABI
    stability. The new XML you've produced is compared with the old one
    from the saved file to see if qemu ABI will break or not. Wait, what?
    We are using different flags to parse the XML you've provided so we
    were just lucky it worked in some cases? Yep, that's right.
    
    Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
    
        
file modified
+2 -2