1. 21 Jun, 2013 5 commits
  2. 20 Jun, 2013 27 commits
  3. 19 Jun, 2013 8 commits
    • Markus Armbruster's avatar
      doc: Drop ref to Bochs from -no-fd-bootchk documentation · 4eda32f5
      Markus Armbruster authored
      
      
      Manual page and qemu-doc on talk about "Bochs BIOS".  We use SeaBIOS,
      and it implements the feature.  Replace by just "BIOS", and drop the
      TODO line wondering about the Bochs reference.
      Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
      Message-id: 1371208516-7857-7-git-send-email-armbru@redhat.com
      Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
      4eda32f5
    • Markus Armbruster's avatar
      pc: Make -no-fd-bootchk stick across boot order changes · e1123015
      Markus Armbruster authored
      Option -no-fd-bootchk asks the BIOS to attempt booting from a floppy
      even when the boot sector signature isn't there, by setting a bit in
      RTC CMOS.  It was added back in 2006 (commit 52ca8d6a).
      
      Two years later, commit 0ecdffbb added monitor command boot_set.
      Implemented by new function pc_boot_set().  It unconditionally clears
      the floppy signature bit in CMOS.
      
      Commit e0f084bf added -boot option once to automatically change the
      boot order on first reset.  Reuses pc_boot_set(), thus also clears the
      floppy signature bit.  Commit d9346e81
      
       took care to preserve this
      behavior.
      
      Thus, -no-fd-bootchk applies to any number of boots.  Except it
      applies just to the first boot with -boot once, and never after
      boot_set.  Weird.  Make it stick instead: set the bit according to
      -no-fd-bootchk in pc_boot_set().
      Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
      Message-id: 1371208516-7857-6-git-send-email-armbru@redhat.com
      Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
      e1123015
    • Markus Armbruster's avatar
      vl: Rename *boot_devices to *boot_order, for consistency · 083b79c9
      Markus Armbruster authored
      
      Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
      Message-id: 1371208516-7857-5-git-send-email-armbru@redhat.com
      Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
      083b79c9
    • Markus Armbruster's avatar
      vl: Fix -boot order and once regressions, and related bugs · 8281abd5
      Markus Armbruster authored
      Option "once" sets up a different boot order just for the initial
      boot.  Boot order reverts back to normal on reset.  Option "order"
      changes the normal boot order.
      
      The reversal is implemented by reset handler restore_boot_devices(),
      which takes the boot order to revert to as argument.
      restore_boot_devices() does nothing on its first call, because that
      must be the initial machine reset.  On its second call, it changes the
      boot order back, and unregisters itself.
      
      Because we register the handler right when -boot gets parsed, we can
      revert to an incorrect normal boot order, and multiple -boot can
      interact in funny ways.
      
      Here's how things work without -boot once or order:
      
      * boot_devices is "".
      
      * main() passes machine->boot_order to to machine->init(), because
        boot_devices is "".  machine->init() configures firmware
        accordingly.  For PC machines, machine->boot_order is "cad", and
        pc_cmos_init() writes it to RTC CMOS, where SeaBIOS picks it up.
      
      Now consider -boot order=:
      
      * boot_devices is "".
      
      * -boot order= sets boot_devices to "" (no change).
      
      * main() passes machine->boot_order to to machine->init(), because
        boot_devices is "", as above.
      
        Bug: -boot order= has no effect.  Broken in commit e4ada29e.
      
      Next, consider -boot once=a:
      
      * boot_devices is "".
      
      * -boot once=a registers restore_boot_devices() with argument "", and
        sets boot_devices to "a".
      
      * main() passes boot_devices "a" to machine->init(), which configures
        firmware accordingly.  For PC machines, pc_cmos_init() writes the
        boot order to RTC CMOS.
      
      * main() calls qemu_system_reset().  This runs reset handlers.
      
        - restore_boot_devices() gets called with argument "".  Does
          nothing, because it's the first call.
      
      * Machine boots, boot order is "a".
      
      * Machine resets (e.g. monitor command).  Reset handlers run.
      
        - restore_boot_devices() gets called with argument "".  Calls
          qemu_boot_set("") to reconfigure firmware.  For PC machines,
          pc_boot_set() writes it into RTC CMOS.  Reset handler
          unregistered.
      
          Bug: boot order reverts to "" instead of machine->boot_order.  The
          actual boot order depends on how firmware interprets "".  Broken
          in commit e4ada29e.
      
      Next, consider -boot once=a -boot order=c:
      
      * boot_devices is "".
      
      * -boot once=a registers restore_boot_devices() with argument "", and
        sets boot_devices to "a".
      
      * -boot order=c sets boot_devices to "c".
      
      * main() passes boot_devices "c" to machine->init(), which configures
        firmware accordingly.  For PC machines, pc_cmos_init() writes the
        boot order to RTC CMOS.
      
      * main() calls qemu_system_reset().  This runs reset handlers.
      
        - restore_boot_devices() gets called with argument "".  Does
          nothing, because it's the first call.
      
      * Machine boots, boot order is "c".
      
        Bug: it should be "a".  I figure this has always been broken.
      
      * Machine resets (e.g. monitor command).  Reset handlers run.
      
        - restore_boot_devices() gets called with argument "".  Calls
          qemu_boot_set("") to reconfigure firmware.  For PC machines,
          pc_boot_set() writes it into RTC CMOS.  Reset handler
          unregistered.
      
          Bug: boot order reverts to "" instead of "c".  I figure this has
          always been broken, just differently broken before commit
          e4ada29e.
      
      Next, consider -boot once=a -boot once=b -boot once=c:
      
      * boot_devices is "".
      
      * -boot once=a registers restore_boot_devices() with argument "", and
        sets boot_devices to "a".
      
      * -boot once=b registers restore_boot_devices() with argument "a", and
        sets boot_devices to "b".
      
      * -boot once=c registers restore_boot_devices() with argument "b", and
        sets boot_devices to "c".
      
      * main() passes boot_devices "c" to machine->init(), which configures
        firmware accordingly.  For PC machines, pc_cmos_init() writes the
        boot order to RTC CMOS.
      
      * main() calls qemu_system_reset().  This runs reset handlers.
      
        - restore_boot_devices() gets called with argument "".  Does
          nothing, because it's the first call.
      
        - restore_boot_devices() gets called with argument "a".  Calls
          qemu_boot_set("a") to reconfigure firmware.  For PC machines,
          pc_boot_set() writes it into RTC CMOS.  Reset handler
          unregistered.
      
        - restore_boot_devices() gets called with argument "b".  Calls
          qemu_boot_set("b") to reconfigure firmware.  For PC machines,
          pc_boot_set() writes it into RTC CMOS.  Reset handler
          unregistered.
      
      * Machine boots, boot order is "b".
      
        Bug: should really be "c", because that came last, and for all other
        -boot options, the last one wins.  I figure this was broken some
        time before commit 37905d6a
      
      , and fixed there only for a single
        occurence of "once".
      
      * Machine resets (e.g. monitor command).  Reset handlers run.
      
        - restore_boot_devices() gets called with argument "".  Calls
          qemu_boot_set("") to reconfigure firmware.  For PC machines,
          pc_boot_set() writes it into RTC CMOS.  Reset handler
          unregistered.
      
          Same bug as above: boot order reverts to "" instead of
          machine->boot_order.
      
      Fix by acting upon -boot options order, once and menu only after
      option parsing is complete, and the machine is known.  This is how the
      other -boot options work already.
      Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
      Message-id: 1371208516-7857-4-git-send-email-armbru@redhat.com
      Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
      8281abd5
    • Markus Armbruster's avatar
      qemu-option: check_params() is now unused, drop it · a86b35f9
      Markus Armbruster authored
      
      Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
      Message-id: 1371208516-7857-3-git-send-email-armbru@redhat.com
      Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
      a86b35f9
    • Markus Armbruster's avatar
      vl: Clean up parsing of -boot option argument · 6ef4716c
      Markus Armbruster authored
      Commit 3d3b8303
      
       threw in some QemuOpts parsing without replacing the
      existing ad hoc parser, resulting in a confusing mess.  Clean it up.
      
      Two user-visible changes:
      
      1. Invalid options are reported more nicely.  Before:
      
              qemu: unknown boot parameter 'x' in 'x=y'
      
         After:
      
              qemu-system-x86_64: -boot x=y: Invalid parameter 'x'
      
      2. If -boot is given multiple times, options accumulate, just like for
         -machine.  Before, only options order, once and menu accumulated.
         For the other ones, all but the first -boot in non-legacy syntax
         got simply ignored.
      Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
      Message-id: 1371208516-7857-2-git-send-email-armbru@redhat.com
      Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
      6ef4716c
    • Gertjan Halkes's avatar
      make user networking hostfwd work with restrict=y · b5a87d26
      Gertjan Halkes authored
      This patch allows the hostfwd option to override the restrict=y setting in
      the user network stack, as explicitly stated in the documentation on the
      restrict option:
      
           restrict=on|off
               If this option is enabled, the guest will be isolated, i.e. it
               will not be able to contact the host and no guest IP packets
               will be routed over the host to the outside. This option does
               not affect any explicitly set forwarding rules.
      
      Qemu bug tracker:
      https://bugs.launchpad.net/qemu/+bug/829455
      
      Signed-off-by: default avatarGertjan Halkes <qemu@ghalkes.nl>
      Signed-off-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
      b5a87d26
    • Bas van Sisseren's avatar
      fix -net user checks by reordering checks · 68756ba8
      Bas van Sisseren authored
      
      
      reorder slirp config options. first check the dns-server-address,
      then check the first-dhcp-address. the original code was comparing
      the first-dhcp-address with the default dns-server-address, not
      the configured dns-server-address.
      Signed-off-by: default avatarBas van Sisseren <bas@quarantainenet.nl>
      Signed-off-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
      68756ba8