1. 05 5月, 2018 18 次提交
  2. 04 5月, 2018 22 次提交
    • P
      Merge remote-tracking branch 'remotes/ericb/tags/pull-nbd-2018-05-04' into staging · c8b7e627
      Peter Maydell 提交于
      nbd patches for 2018-05-04
      
      - Vladimir Sementsov-Ogievskiy: 0/2 fix coverity bugs
      - Eric Blake: nbd/client: Fix error messages during NBD_INFO_BLOCK_SIZE
      - Eric Blake: nbd/client: Relax handling of large NBD_CMD_BLOCK_STATUS reply
      
      # gpg: Signature made Fri 04 May 2018 14:25:55 BST
      # gpg:                using RSA key A7A16B4A2527436A
      # gpg: Good signature from "Eric Blake <eblake@redhat.com>"
      # gpg:                 aka "Eric Blake (Free Software Programmer) <ebb9@byu.net>"
      # gpg:                 aka "[jpeg image of size 6874]"
      # Primary key fingerprint: 71C2 CC22 B1C4 6029 27D2  F3AA A7A1 6B4A 2527 436A
      
      * remotes/ericb/tags/pull-nbd-2018-05-04:
        nbd/client: Relax handling of large NBD_CMD_BLOCK_STATUS reply
        nbd/client: Fix error messages during NBD_INFO_BLOCK_SIZE
        migration/block-dirty-bitmap: fix memory leak in dirty_bitmap_load_bits
        nbd/client: fix nbd_negotiate_simple_meta_context
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      c8b7e627
    • E
      nbd/client: Relax handling of large NBD_CMD_BLOCK_STATUS reply · acfd8f7a
      Eric Blake 提交于
      The NBD spec is proposing a relaxation of NBD_CMD_BLOCK_STATUS
      where a server may have the final extent per context give a
      length beyond the original request, if it can easily prove that
      subsequent bytes have the same status, on the grounds that a
      client can take advantage of this information for fewer block
      status requests.  Since qemu 2.12 as a client always sends
      NBD_CMD_FLAG_REQ_ONE, and rejects a server that sends extra
      length, the upstream NBD spec will probably limit this behavior
      to clients that don't request REQ_ONE semantics; but it doesn't
      hurt to relax qemu to always be permissive of this server
      behavior, even if it continues to use REQ_ONE.
      
      CC: qemu-stable@nongnu.org
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <20180503222626.1303410-1-eblake@redhat.com>
      Reviewed-by: NVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
      acfd8f7a
    • E
      nbd/client: Fix error messages during NBD_INFO_BLOCK_SIZE · e475d108
      Eric Blake 提交于
      A missing space makes for poor error messages, and sizes can't
      go negative.  Also, we missed diagnosing a server that sends
      a maximum block size less than the minimum.
      
      Fixes: 081dd1fe
      CC: qemu-stable@nongnu.org
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Message-Id: <20180501154654.943782-1-eblake@redhat.com>
      Reviewed-by: NVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
      e475d108
    • V
      migration/block-dirty-bitmap: fix memory leak in dirty_bitmap_load_bits · 16a22278
      Vladimir Sementsov-Ogievskiy 提交于
      Release buf on error path too.
      
      Bug was introduced in b35ebdf0 "migration: add postcopy
      migration of dirty bitmaps" with the whole function.
      Signed-off-by: NVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
      Message-Id: <20180427142002.21930-3-vsementsov@virtuozzo.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      CC: qemu-stable@nongnu.org
      Signed-off-by: NEric Blake <eblake@redhat.com>
      16a22278
    • V
      nbd/client: fix nbd_negotiate_simple_meta_context · 89aa0d87
      Vladimir Sementsov-Ogievskiy 提交于
      Initialize received variable. Otherwise, is is possible for server to
      answer without any contexts, but we will set context_id to something
      random (received_id is not initialized too) and return 1, which is
      wrong.
      
      To solve it, just initialize received to false. Initialize received_id
      too, just to make all possible checkers happy.
      
      Bug was introduced in 78a33ab5 "nbd: BLOCK_STATUS for
      standard get_block_status function: client part" with the whole
      function.
      Signed-off-by: NVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
      Message-Id: <20180427142002.21930-2-vsementsov@virtuozzo.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      CC: qemu-stable@nongnu.org
      Signed-off-by: NEric Blake <eblake@redhat.com>
      89aa0d87
    • P
      Merge remote-tracking branch 'remotes/armbru/tags/pull-qapi-2018-05-04' into staging · 7c867af8
      Peter Maydell 提交于
      QAPI patches for 2018-05-04
      
      # gpg: Signature made Fri 04 May 2018 08:59:16 BST
      # gpg:                using RSA key 3870B400EB918653
      # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>"
      # gpg:                 aka "Markus Armbruster <armbru@pond.sub.org>"
      # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867  4E5F 3870 B400 EB91 8653
      
      * remotes/armbru/tags/pull-qapi-2018-05-04:
        qapi: deprecate CpuInfoFast.arch
        qapi: discriminate CpuInfoFast on SysEmuTarget, not CpuInfoArch
        qapi: change the type of TargetInfo.arch from string to enum SysEmuTarget
        qapi: add SysEmuTarget to "common.json"
        qapi: fill in CpuInfoFast.arch in query-cpus-fast
        qobject: Modify qobject_ref() to return obj
        qobject: Replace qobject_incref/QINCREF qobject_decref/QDECREF
        qobject: use a QObjectBase_ struct
        qobject: Ensure base is at offset 0
        qobject: Use qobject_to() instead of type cast
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      7c867af8
    • P
      Merge remote-tracking branch 'remotes/cohuck/tags/s390x-20180504' into staging · 46e04dac
      Peter Maydell 提交于
      First s390x pull request for 2.13.
      - new machine type
      - extend SCLP event masks
      - support configuration of consoles via -serial
      - firmware improvements: non-sequential entries in boot menu, support
        for indirect loading via .INS files in s390-netboot
      - bugfixes and cleanups
      
      # gpg: Signature made Fri 04 May 2018 08:19:57 BST
      # gpg:                using RSA key DECF6B93C6F02FAF
      # gpg: Good signature from "Cornelia Huck <conny@cornelia-huck.de>"
      # gpg:                 aka "Cornelia Huck <huckc@linux.vnet.ibm.com>"
      # gpg:                 aka "Cornelia Huck <cornelia.huck@de.ibm.com>"
      # gpg:                 aka "Cornelia Huck <cohuck@kernel.org>"
      # gpg:                 aka "Cornelia Huck <cohuck@redhat.com>"
      # Primary key fingerprint: C3D0 D66D C362 4FF6 A8C0  18CE DECF 6B93 C6F0 2FAF
      
      * remotes/cohuck/tags/s390x-20180504:
        pc-bios/s390: Update firmware images
        s390-ccw: force diag 308 subcode to unsigned long
        pc-bios/s390-ccw/net: Add support for .INS config files
        pc-bios/s390-ccw/net: Use diag308 to reset machine before jumping to the OS
        pc-bios/s390-ccw/net: Split up net_load() into init, load and release parts
        pc-bios/s390-ccw: fix non-sequential boot entries (enum)
        pc-bios/s390-ccw: fix non-sequential boot entries (eckd)
        pc-bios/s390-ccw: fix loadparm initialization and int conversion
        pc-bios/s390-ccw: rename MAX_TABLE_ENTRIES to MAX_BOOT_ENTRIES
        pc-bios/s390-ccw: size_t should be unsigned
        hw/s390x: Allow to configure the consoles with the "-serial" parameter
        s390x/kvm: cleanup calls to cpu_synchronize_state()
        vfio-ccw: introduce vfio_ccw_get_device()
        s390x/sclp: extend SCLP event masks to 64 bits
        s390x: introduce 2.13 compat machine
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      46e04dac
    • P
      Merge remote-tracking branch 'remotes/dgibson/tags/ppc-for-2.13-20180504' into staging · 2e4bd4a2
      Peter Maydell 提交于
      ppc patch queue 2018-05-04
      
      Second patch of patches for qemu-2.13 (or whatever the version ends up
      being called).  Highlights are:
        * Preliminary patches for POWER9 hash MMU support for powernv
        * A number of cleanups fo pseries startup and LPCR handling
        * Remove support for explicitly allocated RMAs (which require kernel
          support that's been gone for 3+ years)
        * Some mac_newworld cleanups
        * A few bugfixes
      
      # gpg: Signature made Fri 04 May 2018 06:07:43 BST
      # gpg:                using RSA key 6C38CACA20D9B392
      # gpg: Good signature from "David Gibson <david@gibson.dropbear.id.au>"
      # gpg:                 aka "David Gibson (Red Hat) <dgibson@redhat.com>"
      # gpg:                 aka "David Gibson (ozlabs.org) <dgibson@ozlabs.org>"
      # gpg:                 aka "David Gibson (kernel.org) <dwg@kernel.org>"
      # Primary key fingerprint: 75F4 6586 AE61 A66C C44E  87DC 6C38 CACA 20D9 B392
      
      * remotes/dgibson/tags/ppc-for-2.13-20180504:
        spapr: don't advertise radix GTSE if max-compat-cpu < power9
        spapr: don't migrate "spapr_option_vector_ov5_cas" to pre 2.8 machines
        target/ppc: always set PPC_MEM_TLBIE in pre 2.8 migration hack
        mac_newworld: move wiring of macio IRQs to macio_newworld_realize()
        mac_newworld: remove pics IRQ array and wire up macio to OpenPIC directly
        uninorth: create new uninorth device
        spapr: Clean up handling of LPCR power-saving exit bits
        spapr: Move PAPR mode cpu setup fully to spapr code
        target/ppc: Delay initialization of LPCR_UPRT for secondary cpus
        spapr: Clean up LPCR updates from hypercalls
        spapr: Make a helper to set up cpu entry point state
        spapr: Remove unhelpful helpers from rtas_start_cpu()
        spapr: Clean up rtas_start_cpu() & rtas_stop_self()
        target/ppc: Add ppc_store_lpcr() helper
        spapr: Remove support for explicitly allocated RMAs
        target/ppc: add basic support for PTCR on POWER9
        target/ppc: return a nil HPT base address on sPAPR machines
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      2e4bd4a2
    • P
      Merge remote-tracking branch 'remotes/vivier2/tags/linux-user-for-2.13-pull-request' into staging · f0c88952
      Peter Maydell 提交于
      # gpg: Signature made Thu 03 May 2018 22:38:35 BST
      # gpg:                using RSA key F30C38BD3F2FBE3C
      # gpg: Good signature from "Laurent Vivier <lvivier@redhat.com>"
      # gpg:                 aka "Laurent Vivier <laurent@vivier.eu>"
      # gpg:                 aka "Laurent Vivier (Red Hat) <lvivier@redhat.com>"
      # Primary key fingerprint: CD2F 75DD C8E3 A4DC 2E4F  5173 F30C 38BD 3F2F BE3C
      
      * remotes/vivier2/tags/linux-user-for-2.13-pull-request:
        linux-user: remove useless padding in flock64 structure
        linux-user: introduce target_sigsp() and target_save_altstack()
        linux-user: ARM-FDPIC: Add support for signals for FDPIC targets
        linux-user: ARM-FDPIC: Add support of FDPIC for ARM.
        linux-user: ARM-FDPIC: Identify ARM FDPIC binaries
        Remove CONFIG_USE_FDPIC.
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      f0c88952
    • L
      qapi: deprecate CpuInfoFast.arch · 6ffa3ab4
      Laszlo Ersek 提交于
      The TARGET_BASE_ARCH values from "configure" don't all map to the
      @CpuInfoArch enum constants; in particular "s390x" from the former does
      not match @s390 in the latter. Clients are known to rely on the @s390
      constant specifically, so we can't change it silently. Instead, deprecate
      the @CpuInfoFast.@arch member (in favor of @CpuInfoFast.@target) using the
      regular deprecation process.
      
      (No deprecation reminder is added to sysemu_target_to_cpuinfo_arch(): once
      @CpuInfoFast.@arch is removed, the assignment expression that calls
      sysemu_target_to_cpuinfo_arch() from qmp_query_cpus_fast() will have to
      disappear; in turn the static function left without callers will also
      break the build, thus it'll have to go.)
      
      Cc: "Daniel P. Berrange" <berrange@redhat.com>
      Cc: Eric Blake <eblake@redhat.com>
      Cc: Markus Armbruster <armbru@redhat.com>
      Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Message-Id: <20180427192852.15013-6-lersek@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      6ffa3ab4
    • L
      qapi: discriminate CpuInfoFast on SysEmuTarget, not CpuInfoArch · daa9d2bc
      Laszlo Ersek 提交于
      Add a new field @target (of type @SysEmuTarget) to the output of the
      @query-cpus-fast command, which provides more information about the
      emulation target than the field @arch (of type @CpuInfoArch). Make @target
      the new discriminator for the @CpuInfoFast return structure. Keep @arch
      for compatibility.
      
      Cc: "Daniel P. Berrange" <berrange@redhat.com>
      Cc: Eric Blake <eblake@redhat.com>
      Cc: Markus Armbruster <armbru@redhat.com>
      Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Message-Id: <20180427192852.15013-5-lersek@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      daa9d2bc
    • L
      qapi: change the type of TargetInfo.arch from string to enum SysEmuTarget · b47aa7b3
      Laszlo Ersek 提交于
      Now that we have @SysEmuTarget, it makes sense to restrict
      @TargetInfo.@arch to valid sysemu targets at the schema level.
      
      Cc: "Daniel P. Berrange" <berrange@redhat.com>
      Cc: Eric Blake <eblake@redhat.com>
      Cc: Markus Armbruster <armbru@redhat.com>
      Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Message-Id: <20180427192852.15013-4-lersek@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      b47aa7b3
    • L
      qapi: add SysEmuTarget to "common.json" · 9a801c7d
      Laszlo Ersek 提交于
      We'll soon need an enumeration type that lists all the softmmu targets
      that QEMU (the project) supports. Introduce @SysEmuTarget to
      "common.json".
      
      The enum constant @x86_64 doesn't match the QAPI convention of preferring
      hyphen ("-") over underscore ("_"). This is intentional; the @SysEmuTarget
      constants are supposed to produce QEMU executable names when stringified
      and appended to the "qemu-system-" prefix. Put differently, the
      replacement text of the TARGET_NAME preprocessor macro must be possible to
      look up in the list of (stringified) enum constants.
      
      Like other enum types, @SysEmuTarget too can be used for discriminator
      fields in unions. For the @i386 constant, a C-language union member called
      "i386" would be generated. On mingw build hosts, "i386" is a macro
      however. Add "i386" to "polluted_words" at once.
      
      Cc: "Daniel P. Berrange" <berrange@redhat.com>
      Cc: Eric Blake <eblake@redhat.com>
      Cc: Markus Armbruster <armbru@redhat.com>
      Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Message-Id: <20180427192852.15013-3-lersek@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      9a801c7d
    • L
      qapi: fill in CpuInfoFast.arch in query-cpus-fast · 96054f56
      Laszlo Ersek 提交于
      * Commit ca230ff3 added the @arch field to @CpuInfoFast, but it failed
        to set the new field in qmp_query_cpus_fast(), when TARGET_S390X was not
        defined. The updated @query-cpus-fast example in "qapi-schema.json"
        showed "arch":"x86" only because qmp_query_cpus_fast() calls g_malloc0()
        to allocate @CpuInfoFast, and the CPU_INFO_ARCH_X86 enum constant is
        generated with value 0.
      
        All @arch values other than @s390 implied the @CpuInfoOther sub-struct
        for @CpuInfoFast -- at the time of writing the patch --, thus no fields
        other than @arch needed to be set when TARGET_S390X was not defined. Set
        @arch now, by copying the corresponding assignments from
        qmp_query_cpus().
      
      * Commit 25fa194b added the @riscv enum constant to @CpuInfoArch (used
        in both @CpuInfo and @CpuInfoFast -- the return types of the @query-cpus
        and @query-cpus-fast commands, respectively), and assigned, in both
        return structures, the @CpuInfoRISCV sub-structure to the new enum
        value.
      
        However, qmp_query_cpus_fast() would not populate either the @arch field
        or the @CpuInfoRISCV sub-structure, when TARGET_RISCV was defined; only
        qmp_query_cpus() would.
      
        Assign @CpuInfoOther to the @riscv enum constant in @CpuInfoFast, and
        populate only the @arch field in qmp_query_cpus_fast(). Getting CPU
        state without interrupting KVM is an exceptional thing that only S390X
        does currently. Quoting Cornelia Huck <cohuck@redhat.com>, "s390x is
        exceptional in that it has state in QEMU that is actually interesting
        for upper layers and can be retrieved without performance penalty". See
        also
        <https://www.redhat.com/archives/libvir-list/2018-February/msg00121.html>.
      
      Cc: Cornelia Huck <cohuck@redhat.com>
      Cc: Eric Blake <eblake@redhat.com>
      Cc: Markus Armbruster <armbru@redhat.com>
      Cc: Viktor VM Mihajlovski <mihajlov@linux.vnet.ibm.com>
      Cc: qemu-stable@nongnu.org
      Fixes: ca230ff3
      Fixes: 25fa194bSigned-off-by: NLaszlo Ersek <lersek@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NCornelia Huck <cohuck@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Message-Id: <20180427192852.15013-2-lersek@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      96054f56
    • M
      qobject: Modify qobject_ref() to return obj · f5a74a5a
      Marc-André Lureau 提交于
      For convenience and clarity, make it possible to call qobject_ref() at
      the time when the reference is associated with a variable, or
      argument, by making qobject_ref() return the same pointer as given.
      Use that to simplify the callers.
      Signed-off-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Message-Id: <20180419150145.24795-5-marcandre.lureau@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      [Useless change to qobject_ref_impl() dropped, commit message improved
      slightly]
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      f5a74a5a
    • M
      qobject: Replace qobject_incref/QINCREF qobject_decref/QDECREF · cb3e7f08
      Marc-André Lureau 提交于
      Now that we can safely call QOBJECT() on QObject * as well as its
      subtypes, we can have macros qobject_ref() / qobject_unref() that work
      everywhere instead of having to use QINCREF() / QDECREF() for QObject
      and qobject_incref() / qobject_decref() for its subtypes.
      
      The replacement is mechanical, except I broke a long line, and added a
      cast in monitor_qmp_cleanup_req_queue_locked().  Unlike
      qobject_decref(), qobject_unref() doesn't accept void *.
      
      Note that the new macros evaluate their argument exactly once, thus no
      need to shout them.
      Signed-off-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Message-Id: <20180419150145.24795-4-marcandre.lureau@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      [Rebased, semantic conflict resolved, commit message improved]
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      cb3e7f08
    • M
      qobject: use a QObjectBase_ struct · 3d3eacae
      Marc-André Lureau 提交于
      By moving the base fields to a QObjectBase_, QObject can be a type
      which also has a 'base' field. This allows writing a generic QOBJECT()
      macro that will work with any QObject type, including QObject
      itself. The container_of() macro ensures that the object to cast has a
      QObjectBase_ base field, giving some type safety guarantees. QObject
      must have no members but QObjectBase_ base, or else QOBJECT() breaks.
      
      QObjectBase_ is not a typedef and uses a trailing underscore to make
      it obvious it is not for normal use and to avoid potential abuse.
      Signed-off-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Message-Id: <20180419150145.24795-3-marcandre.lureau@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      3d3eacae
    • M
      qobject: Ensure base is at offset 0 · 7ee9edfd
      Marc-André Lureau 提交于
      All QObject types have the base QObject as their first field. This
      allows the simplification of qobject_to().
      Signed-off-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Message-Id: <20180419150145.24795-2-marcandre.lureau@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      [Commit message paragraph on type casts dropped, to avoid giving the
      impression type casting would be okay]
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      7ee9edfd
    • M
      qobject: Use qobject_to() instead of type cast · 46cfbf13
      Markus Armbruster 提交于
      The proper way to convert from (abstract) QObject to a (concrete)
      subtype is qobject_to().  Look for offenders that type cast instead:
      
          $ git-grep '(Q[A-Z][a-z]* \*)'
          hmp.c:    qmp_device_add((QDict *)qdict, NULL, &err);
          include/qapi/qmp/qobject.h:        return (QObject *)obj;
          qobject/qobject.c:static void (*qdestroy[QTYPE__MAX])(QObject *) = {
          tests/check-qdict.c:    dst = (QDict *)qdict_crumple(src, &error_abort);
      
      The first two cast away const, the third isn't a type cast.  Fix the
      fourth.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Message-Id: <20180426152805.8469-1-armbru@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
      46cfbf13
    • G
      spapr: don't advertise radix GTSE if max-compat-cpu < power9 · 0550b120
      Greg Kurz 提交于
      On a POWER9 host, if a guest runs in pre POWER9 compat mode, it necessarily
      uses the hash MMU mode. In this case, we shouldn't advertise radix GTSE in
      the ibm,arch-vec-5-platform-support DT property as the current code does.
      The first reason is that it doesn't make sense, and the second one is that
      causes the CAS-negotiated options subsection to be migrated. This breaks
      backward migration to QEMU 2.7 and older versions on POWER8 hosts:
      
      qemu-system-ppc64: error while loading state for instance 0x0 of device
       'spapr'
      qemu-system-ppc64: load of migration failed: No such file or directory
      
      This patch hence initialize CPUs a bit earlier so that we can check the
      requested compat mode, and don't set OV5_MMU_RADIX_GTSE for power8 and
      older.
      Signed-off-by: NGreg Kurz <groug@kaod.org>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      0550b120
    • G
      spapr: don't migrate "spapr_option_vector_ov5_cas" to pre 2.8 machines · aef19c04
      Greg Kurz 提交于
      a324d6f1 "spapr: Support ibm,dynamic-memory-v2 property" added
      a new feature in the set of CAS-negotiatable options. This causes
      the CAS-negotiated options subsection to be migrated, even for old
      machine types that don't know about it, and breaks backward migration
      to QEMU 2.7 and older versions:
      
      qemu-system-ppc64: error while loading state for instance 0x0 of device
       'spapr'
      qemu-system-ppc64: load of migration failed: No such file or directory
      
      Since this feature only affects boot time behaviour, it should be
      filtered out when we decide to migrate CAS-negotiated options, like
      we already do with OV5_FORM1_AFFINITY and OV5_DRCONF_MEMORY.
      Signed-off-by: NGreg Kurz <groug@kaod.org>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      aef19c04
    • G
      target/ppc: always set PPC_MEM_TLBIE in pre 2.8 migration hack · bce00964
      Greg Kurz 提交于
      The pseries-2.7 and older machine types require CPUPPCState::insns_flags
      to be strictly equal between source and destination. This checking is
      abusive and breaks migration of KVM guests when the host CPU models
      are different, even if they are compatible enough to allow the guest
      to run transparently. This buggy behaviour was fixed for pseries-2.8
      and we added some hacks to allow backward migration of older machine
      types. These hacks assume that the CPU belongs to the POWER8 family,
      which was true for most KVM based setup we cared about at the time.
      But now POWER9 systems are coming, and backward migration of pre 2.8
      guests running in POWER8 architected mode from a POWER9 host to a
      POWER8 host is broken:
      
      qemu-system-ppc64: error while loading state for instance 0x0 of device
       'cpu'
      qemu-system-ppc64: load of migration failed: Invalid argument
      
      This happens because POWER9 doesn't set PPC_MEM_TLBIE in insns_flags,
      while POWER8 does. Let's force PPC_MEM_TLBIE in the migration hack to
      fix the issue. This is an acceptable hack because these old machine
      types only support CPU models that do set PPC_MEM_TLBIE.
      Signed-off-by: NGreg Kurz <groug@kaod.org>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      bce00964