Skip to content
Snippets Groups Projects
  1. Apr 03, 2020
    • Peter Maydell's avatar
      target/arm: PSTATE.PAN should not clear exec bits · f4e1dbc5
      Peter Maydell authored
      
      Our implementation of the PSTATE.PAN bit incorrectly cleared all
      access permission bits for privileged access to memory which is
      user-accessible.  It should only affect the privileged read and write
      permissions; execute permission is dealt with via XN/PXN instead.
      
      Fixes: 81636b70
      Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
      Reviewed-by: default avatarRichard Henderson <richard.henderson@linaro.org>
      Message-id: 20200330170651.20901-1-peter.maydell@linaro.org
      f4e1dbc5
    • Peter Maydell's avatar
      hw/arm/collie: Put StrongARMState* into a CollieMachineState struct · 8a2b76ff
      Peter Maydell authored
      
      Coverity complains that the collie_init() function leaks the memory
      allocated in sa1110_init().  This is true but not significant since
      the function is called only once on machine init and the memory must
      remain in existence until QEMU exits anyway.
      
      Still, we can avoid the technical memory leak by keeping the pointer
      to the StrongARMState inside the machine state struct.  Switch from
      the simple DEFINE_MACHINE() style to defining a subclass of
      TYPE_MACHINE which extends the MachineState struct, and keep the
      pointer there.
      
      Fixes: CID 1421921
      Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
      Reviewed-by: default avatarRichard Henderson <richard.henderson@linaro.org>
      Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
      Message-id: 20200326204919.22006-1-peter.maydell@linaro.org
      8a2b76ff
    • Alex Bennée's avatar
      target/arm: don't expose "ieee_half" via gdbstub · 9231951a
      Alex Bennée authored
      
      While support for parsing ieee_half in the XML description was added
      to gdb in 2019 (a6d0f249) there is no easy way for the gdbstub to know
      if the gdb end will understand it. Disable it for now and allow older
      gdbs to successfully connect to the default -cpu max SVE enabled
      QEMUs.
      
      Signed-off-by: default avatarAlex Bennée <alex.bennee@linaro.org>
      Reviewed-by: default avatarRichard Henderson <richard.henderson@linaro.org>
      Message-id: 20200402143913.24005-1-alex.bennee@linaro.org
      Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
      9231951a
    • Peter Maydell's avatar
      Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into staging · 146aa0f1
      Peter Maydell authored
      
      Pull request
      
      # gpg: Signature made Fri 03 Apr 2020 12:50:57 BST
      # gpg:                using RSA key 8695A8BFD3F97CDAAC35775A9CA4ABB381AB73C8
      # gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>" [full]
      # gpg:                 aka "Stefan Hajnoczi <stefanha@gmail.com>" [full]
      # Primary key fingerprint: 8695 A8BF D3F9 7CDA AC35  775A 9CA4 ABB3 81AB 73C8
      
      * remotes/stefanha/tags/block-pull-request:
        aio-posix: fix test-aio /aio/event/wait with fdmon-io_uring
      
      Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
      146aa0f1
    • Peter Maydell's avatar
      Merge remote-tracking branch 'remotes/cohuck/tags/s390x-20200403' into staging · 64a3b4d5
      Peter Maydell authored
      
      - fix cpu number reporting in the stsi 3.2.2 block for kvm
      - fix migration for old machines with odd ram sizes
      
      # gpg: Signature made Fri 03 Apr 2020 10:11:06 BST
      # gpg:                using RSA key C3D0D66DC3624FF6A8C018CEDECF6B93C6F02FAF
      # gpg:                issuer "cohuck@redhat.com"
      # gpg: Good signature from "Cornelia Huck <conny@cornelia-huck.de>" [marginal]
      # gpg:                 aka "Cornelia Huck <huckc@linux.vnet.ibm.com>" [full]
      # gpg:                 aka "Cornelia Huck <cornelia.huck@de.ibm.com>" [full]
      # gpg:                 aka "Cornelia Huck <cohuck@kernel.org>" [marginal]
      # gpg:                 aka "Cornelia Huck <cohuck@redhat.com>" [marginal]
      # Primary key fingerprint: C3D0 D66D C362 4FF6 A8C0  18CE DECF 6B93 C6F0 2FAF
      
      * remotes/cohuck/tags/s390x-20200403:
        vl/s390x: fixup ram sizes for compat machines
        s390x: kvm: Fix number of cpu reports for stsi 3.2.2
      
      Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
      64a3b4d5
    • Stefan Hajnoczi's avatar
      aio-posix: fix test-aio /aio/event/wait with fdmon-io_uring · ae60ab7e
      Stefan Hajnoczi authored
      
      When a file descriptor becomes ready we must re-arm POLL_ADD.  This is
      done by adding an sqe to the io_uring sq ring.  The ->need_wait()
      function wasn't taking pending sqes into account and therefore
      io_uring_submit_and_wait() was not being called.  Polling for cqes
      failed to detect fd readiness since we hadn't submitted the sqe to
      io_uring.
      
      This patch fixes the following tests/test-aio -p /aio/event/wait
      failure:
      
        ok 11 /aio/event/wait
        **
        ERROR:tests/test-aio.c:374:test_flush_event_notifier: assertion failed: (aio_poll(ctx, false))
      
      Reported-by: default avatarCole Robinson <crobinso@redhat.com>
      Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
      Tested-by: default avatarCole Robinson <crobinso@redhat.com>
      Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
      Message-id: 20200402145434.99349-1-stefanha@redhat.com
      Fixes: 73fd282e
             ("aio-posix: add io_uring fd monitoring implementation")
      Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
      ae60ab7e
    • Peter Maydell's avatar
      Merge remote-tracking branch 'remotes/ehabkost/tags/x86-next-pull-request' into staging · f2a82611
      Peter Maydell authored
      
      x86 queue for -rc2
      
      Fixes:
      * EPYC CPU model APIC ID topology fixes (Babu Moger)
      * Fix crash when enabling intel-pt on older machine types
        (Luwei Kang)
      * Add missing ARCH_CAPABILITIES bits to Icelake-Server CPU model
        (Xiaoyao Li)
      
      # gpg: Signature made Thu 02 Apr 2020 23:18:30 BST
      # gpg:                using RSA key 5A322FD5ABC4D3DBACCFD1AA2807936F984DC5A6
      # gpg:                issuer "ehabkost@redhat.com"
      # gpg: Good signature from "Eduardo Habkost <ehabkost@redhat.com>" [full]
      # Primary key fingerprint: 5A32 2FD5 ABC4 D3DB ACCF  D1AA 2807 936F 984D C5A6
      
      * remotes/ehabkost/tags/x86-next-pull-request:
        target/i386: Add ARCH_CAPABILITIES related bits into Icelake-Server CPU model
        target/i386: set the CPUID level to 0x14 on old machine-type
        i386: Fix pkg_id offset for EPYC cpu models
        target/i386: Enable new apic id encoding for EPYC based cpus models
        hw/i386: Move arch_id decode inside x86_cpus_init
        i386: Introduce use_epyc_apic_id_encoding in X86CPUDefinition
        hw/i386: Introduce apicid functions inside X86MachineState
        target/i386: Cleanup and use the EPYC mode topology functions
        hw/386: Add EPYC mode topology decoding functions
      
      Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
      f2a82611
  2. Apr 02, 2020
    • Peter Maydell's avatar
      Merge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into staging · 5142ca07
      Peter Maydell authored
      
      Bugfixes for 5.0-rc2.
      
      # gpg: Signature made Thu 02 Apr 2020 19:57:47 BST
      # gpg:                using RSA key F13338574B662389866C7682BFFBD25F78C7AE83
      # gpg:                issuer "pbonzini@redhat.com"
      # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full]
      # gpg:                 aka "Paolo Bonzini <pbonzini@redhat.com>" [full]
      # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4  E2F7 7E15 100C CD36 69B1
      #      Subkey fingerprint: F133 3857 4B66 2389 866C  7682 BFFB D25F 78C7 AE83
      
      * remotes/bonzini/tags/for-upstream:
        xen: fixup RAM memory region initialization
        object-add: don't create return value if failed
        qmp: fix leak on callbacks that return both value and error
        migration: fix cleanup_bh leak on resume
        target/i386: do not set unsupported VMX secondary execution controls
        serial: Fix double migration data
        i386: hvf: Reset IRQ inhibition after moving RIP
        vl: fix broken IPA range for ARM -M virt with KVM enabled
        util/bufferiszero: improve avx2 accelerator
        util/bufferiszero: assign length_to_accel value for each accelerator case
        MAINTAINERS: Add an entry for the HVF accelerator
        softmmu: fix crash with invalid -M memory-backend=
        virtio-iommu: depend on PCI
        hw/isa/superio: Correct the license text
        hw/scsi/vmw_pvscsi: Remove assertion for kick after reset
      
      Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
      5142ca07
    • Igor Mammedov's avatar
      xen: fixup RAM memory region initialization · 0dc0389f
      Igor Mammedov authored
      
      Since bd457782 ("x86/pc: use memdev for RAM") Xen
      machine fails to start with:
         qemu-system-i386: xen: failed to populate ram at 0
      
      The reason is that xen_ram_alloc() which is called by
      memory_region_init_ram(), compares memory region with
      statically allocated 'global' ram_memory memory region
      that it uses for RAM, and does nothing in case it matches.
      
      While it's possible feed machine->ram to xen_ram_alloc()
      in the same manner to keep that hack working, I'd prefer
      not to keep that circular dependency and try to untangle that.
      
      However it doesn't look trivial to fix, so as temporary
      fixup opt out Xen machine from memdev based RAM allocation,
      and let xen_ram_alloc() do its trick for now.
      
      Reported-by: default avatarAnthony PERARD <anthony.perard@citrix.com>
      Signed-off-by: default avatarIgor Mammedov <imammedo@redhat.com>
      Message-Id: <20200402145418.5139-1-imammedo@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      0dc0389f
    • Paolo Bonzini's avatar
      object-add: don't create return value if failed · 7f5d9b20
      Paolo Bonzini authored
      
      No need to return an empty value from object-add (it would also leak
      if the command failed).  While at it, remove the "if" around object_unref
      since object_unref handles NULL arguments just fine.
      
      Reported-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
      Message-Id: <20200325184723.2029630-4-marcandre.lureau@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      7f5d9b20
    • Marc-André Lureau's avatar
      qmp: fix leak on callbacks that return both value and error · b3fbb328
      Marc-André Lureau authored
      
      Direct leak of 4120 byte(s) in 1 object(s) allocated from:
          #0 0x7fa114931887 in __interceptor_calloc (/lib64/libasan.so.6+0xb0887)
          #1 0x7fa1144ad8f0 in g_malloc0 (/lib64/libglib-2.0.so.0+0x588f0)
          #2 0x561e3c9c8897 in qmp_object_add /home/elmarco/src/qemu/qom/qom-qmp-cmds.c:291
          #3 0x561e3cf48736 in qmp_dispatch /home/elmarco/src/qemu/qapi/qmp-dispatch.c:155
          #4 0x561e3c8efb36 in monitor_qmp_dispatch /home/elmarco/src/qemu/monitor/qmp.c:145
          #5 0x561e3c8f09ed in monitor_qmp_bh_dispatcher /home/elmarco/src/qemu/monitor/qmp.c:234
          #6 0x561e3d08c993 in aio_bh_call /home/elmarco/src/qemu/util/async.c:136
          #7 0x561e3d08d0a5 in aio_bh_poll /home/elmarco/src/qemu/util/async.c:164
          #8 0x561e3d0a535a in aio_dispatch /home/elmarco/src/qemu/util/aio-posix.c:380
          #9 0x561e3d08e3ca in aio_ctx_dispatch /home/elmarco/src/qemu/util/async.c:298
          #10 0x7fa1144a776e in g_main_context_dispatch (/lib64/libglib-2.0.so.0+0x5276e)
      
      Signed-off-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
      Message-Id: <20200325184723.2029630-3-marcandre.lureau@redhat.com>
      Reviewed-by: default avatarMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      b3fbb328
    • Marc-André Lureau's avatar
      migration: fix cleanup_bh leak on resume · 9cbc3649
      Marc-André Lureau authored
      
      Since commit 8c6b0356 ("util/async:
      make bh_aio_poll() O(1)"), migration-test reveals a leak:
      
      QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64
      tests/qtest/migration-test  -p /x86_64/migration/postcopy/recovery
      tests/qtest/libqtest.c:140: kill_qemu() tried to terminate QEMU
      process but encountered exit status 1 (expected 0)
      
      =================================================================
      ==2082571==ERROR: LeakSanitizer: detected memory leaks
      
      Direct leak of 40 byte(s) in 1 object(s) allocated from:
          #0 0x7f25971dfc58 in __interceptor_malloc (/lib64/libasan.so.5+0x10dc58)
          #1 0x7f2596d08358 in g_malloc (/lib64/libglib-2.0.so.0+0x57358)
          #2 0x560970d006f8 in qemu_bh_new /home/elmarco/src/qemu/util/main-loop.c:532
          #3 0x5609704afa02 in migrate_fd_connect
      /home/elmarco/src/qemu/migration/migration.c:3407
          #4 0x5609704b6b6f in migration_channel_connect
      /home/elmarco/src/qemu/migration/channel.c:92
          #5 0x5609704b2bfb in socket_outgoing_migration
      /home/elmarco/src/qemu/migration/socket.c:108
          #6 0x560970b9bd6c in qio_task_complete /home/elmarco/src/qemu/io/task.c:196
          #7 0x560970b9aa97 in qio_task_thread_result
      /home/elmarco/src/qemu/io/task.c:111
          #8 0x7f2596cfee3a  (/lib64/libglib-2.0.so.0+0x4de3a)
      
      Signed-off-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
      Message-Id: <20200325184723.2029630-2-marcandre.lureau@redhat.com>
      Reviewed-by: default avatarJuan Quintela <quintela@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      9cbc3649
    • Vitaly Kuznetsov's avatar
      target/i386: do not set unsupported VMX secondary execution controls · 4a910e1f
      Vitaly Kuznetsov authored
      
      Commit 048c9516 ("target/i386: work around KVM_GET_MSRS bug for
      secondary execution controls") added a workaround for KVM pre-dating
      commit 6defc591846d ("KVM: nVMX: include conditional controls in /dev/kvm
      KVM_GET_MSRS") which wasn't setting certain available controls. The
      workaround uses generic CPUID feature bits to set missing VMX controls.
      
      It was found that in some cases it is possible to observe hosts which
      have certain CPUID features but lack the corresponding VMX control.
      
      In particular, it was reported that Azure VMs have RDSEED but lack
      VMX_SECONDARY_EXEC_RDSEED_EXITING; attempts to enable this feature
      bit result in QEMU abort.
      
      Resolve the issue but not applying the workaround when we don't have
      to. As there is no good way to find out if KVM has the fix itself, use
      95c5c7c77c ("KVM: nVMX: list VMX MSRs in KVM_GET_MSR_INDEX_LIST") instead
      as these [are supposed to] come together.
      
      Fixes: 048c9516 ("target/i386: work around KVM_GET_MSRS bug for secondary execution controls")
      Suggested-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
      Message-Id: <20200331162752.1209928-1-vkuznets@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      4a910e1f
    • Dr. David Alan Gilbert's avatar
      serial: Fix double migration data · f602d047
      Dr. David Alan Gilbert authored
      After c9808d60 we have both an object representing the serial-isa
      device and a separate object representing the underlying common serial
      uart.  Both of these have vmsd's associated with them and thus the
      migration stream ends up with two copies of the migration data - the
      serial-isa includes the vmstate of the core serial.   Besides
      being wrong, it breaks backwards migration compatibility.
      
      Fix this by removing the dc->vmsd from the core device, so it only
      gets migrated by any parent devices including it.
      Add a vmstate_serial_mm so that any device that uses serial_mm_init
      rather than creating a device still gets migrated.
      (That doesn't fix backwards migration for serial_mm_init users,
      but does seem to work forwards for ppce500).
      
      Fixes: c9808d60 ('serial: realize the serial device')
      Buglink: https://bugs.launchpad.net/qemu/+bug/1869426
      
      
      Signed-off-by: default avatarDr. David Alan Gilbert <dgilbert@redhat.com>
      Message-Id: <20200330164712.198282-1-dgilbert@redhat.com>
      Reviewed-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      f602d047
    • Roman Bolshakov's avatar
      i386: hvf: Reset IRQ inhibition after moving RIP · ddd31732
      Roman Bolshakov authored
      
      The sequence of instructions exposes an issue:
        sti
        hlt
      
      Interrupts cannot be delivered to hvf after hlt instruction cpu because
      HF_INHIBIT_IRQ_MASK is set just before hlt is handled and never reset
      after moving instruction pointer beyond hlt.
      
      So, after hvf_vcpu_exec() returns, CPU thread gets locked up forever in
      qemu_wait_io_event() (cpu_thread_is_idle() evaluates inhibition
      flag and considers the CPU idle if the flag is set).
      
      Cc: Cameron Esfahani <dirty@apple.com>
      Signed-off-by: default avatarRoman Bolshakov <r.bolshakov@yadro.com>
      Message-Id: <20200328174411.51491-1-r.bolshakov@yadro.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      ddd31732
    • Igor Mammedov's avatar
      vl: fix broken IPA range for ARM -M virt with KVM enabled · 622e99c5
      Igor Mammedov authored
      
      Commit a1b18df9, broke virt_kvm_type() logic, which depends on
      maxram_size, ram_size, ram_slots being parsed/set on machine instance
      at the time accelerator (KVM) is initialized.
      
      set_memory_options() part was already reverted by commit 2a7b18a3,
      so revert remaining initialization of above machine fields to make
      virt_kvm_type() work as it used to.
      
      Signed-off-by: default avatarIgor Mammedov <imammedo@redhat.com>
      Reported-by: default avatarAuger Eric <eric.auger@redhat.com>
      Reviewed-by: default avatarEric Auger <eric.auger@redhat.com>
      Tested-by: default avatarEric Auger <eric.auger@redhat.com>
      Message-Id: <20200326112829.19989-1-imammedo@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      622e99c5
    • Christian Borntraeger's avatar
      vl/s390x: fixup ram sizes for compat machines · 5c30ef93
      Christian Borntraeger authored
      
      Older QEMU versions did fixup the ram size to match what can be reported
      via sclp. We need to mimic this behaviour for machine types 4.2 and
      older to not fail on inbound migration for memory sizes that do not fit.
      Old machines with proper aligned memory sizes are not affected.
      
      Alignment table:
       VM size (<=) | Alignment
      --------------------------
            1020M   |     1M
            2040M   |     2M
            4080M   |     4M
            8160M   |     8M
           16320M   |    16M
           32640M   |    32M
           65280M   |    64M
          130560M   |   128M
          261120M   |   256M
          522240M   |   512M
         1044480M   |     1G
         2088960M   |     2G
         4177920M   |     4G
         8355840M   |     8G
      
      Suggested action is to replace unaligned -m value with a suitable
      aligned one or if a change to a newer machine type is possible, use a
      machine version >= 5.0.
      
      A future version might remove the compatibility handling.
      
      For machine types >= 5.0 we can simply use an increment size of 1M and
      use the full range of increment number which allows for all possible
      memory sizes. The old limitation of having a maximum of 1020 increments
      was added for standby memory, which we no longer support. With that we
      can now support even weird memory sizes like 10001234 MB.
      
      As we no longer fixup maxram_size as well, make other users use ram_size
      instead. Keep using maxram_size when setting the maximum ram size in KVM,
      as that will come in handy in the future when supporting memory hotplug
      (in contrast, storage keys and storage attributes for hotplugged memory
      will have to be migrated per RAM block in the future).
      
      Fixes: 3a12fc61 ("390x/s390-virtio-ccw: use memdev for RAM")
      Reported-by: default avatarLukáš Doktor <ldoktor@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
      Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
      Acked-by: default avatarIgor Mammedov <imammedo@redhat.com>
      Cc: Igor Mammedov <imammedo@redhat.com>
      Cc: Dr. David Alan Gilbert <dgilbert@redhat.com>
      Message-Id: <20200401123754.109602-1-borntraeger@de.ibm.com>
      [CH: fixed up message on memory size fixup]
      Signed-off-by: default avatarCornelia Huck <cohuck@redhat.com>
      5c30ef93
    • Janosch Frank's avatar
      s390x: kvm: Fix number of cpu reports for stsi 3.2.2 · edd075ae
      Janosch Frank authored
      
      The cpu number reporting is handled by KVM and QEMU only fills in the
      VM name, uuid and other values.
      
      Unfortunately KVM doesn't report reserved cpus and doesn't even know
      they exist until the are created via the ioctl.
      
      So let's fix up the cpu values after KVM has written its values to the
      3.2.2 sysib. To be consistent, we use the same code to retrieve the cpu
      numbers as the STSI TCG code in target/s390x/misc_helper.c:HELPER(stsi).
      
      Signed-off-by: default avatarJanosch Frank <frankja@linux.ibm.com>
      Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
      Message-Id: <20200331110123.3774-1-frankja@linux.ibm.com>
      Signed-off-by: default avatarCornelia Huck <cohuck@redhat.com>
      edd075ae
  3. Apr 01, 2020
  4. Mar 31, 2020
    • Xiaoyao Li's avatar
      target/i386: Add ARCH_CAPABILITIES related bits into Icelake-Server CPU model · d965dc35
      Xiaoyao Li authored
      
      Current Icelake-Server CPU model lacks all the features enumerated by
      MSR_IA32_ARCH_CAPABILITIES.
      
      Add them, so that guest of "Icelake-Server" can see all of them.
      
      Signed-off-by: default avatarXiaoyao Li <xiaoyao.li@intel.com>
      Message-Id: <20200316095605.12318-1-xiaoyao.li@intel.com>
      Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
      d965dc35
    • Luwei Kang's avatar
      target/i386: set the CPUID level to 0x14 on old machine-type · ddc2fc9e
      Luwei Kang authored
      
      The CPUID level need to be set to 0x14 manually on old
      machine-type if Intel PT is enabled in guest. E.g. the
      CPUID[0].EAX(level)=7 and CPUID[7].EBX[25](intel-pt)=1 when the
      Qemu with "-machine pc-i440fx-3.1 -cpu qemu64,+intel-pt" parameter.
      
      Some Intel PT capabilities are exposed by leaf 0x14 and the
      missing capabilities will cause some MSRs access failed.
      This patch add a warning message to inform the user to extend
      the CPUID level.
      
      Suggested-by: default avatarEduardo Habkost <ehabkost@redhat.com>
      Signed-off-by: default avatarLuwei Kang <luwei.kang@intel.com>
      Message-Id: <1584031686-16444-1-git-send-email-luwei.kang@intel.com>
      Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
      ddc2fc9e
    • Babu Moger's avatar
      i386: Fix pkg_id offset for EPYC cpu models · 7b225762
      Babu Moger authored
      
      If the system is numa configured the pkg_offset needs
      to be adjusted for EPYC cpu models. Fix it calling the
      model specific handler.
      
      Signed-off-by: default avatarBabu Moger <babu.moger@amd.com>
      Reviewed-by: default avatarIgor Mammedov <imammedo@redhat.com>
      Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Message-Id: <158396725589.58170.16424607815207074485.stgit@naples-babu.amd.com>
      Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
      7b225762
    • Babu Moger's avatar
      target/i386: Enable new apic id encoding for EPYC based cpus models · 247b18c5
      Babu Moger authored
      The APIC ID is decoded based on the sequence sockets->dies->cores->threads.
      This works fine for most standard AMD and other vendors' configurations,
      but this decoding sequence does not follow that of AMD's APIC ID enumeration
      strictly. In some cases this can cause CPU topology inconsistency.
      
      When booting a guest VM, the kernel tries to validate the topology, and finds
      it inconsistent with the enumeration of EPYC cpu models. The more details are
      in the bug https://bugzilla.redhat.com/show_bug.cgi?id=1728166.
      
      To fix the problem we need to build the topology as per the Processor
      Programming Reference (PPR) for AMD Family 17h Model 01h, Revision B1
      Processors. The documentation is available from the bugzilla Link below.
      
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=206537
      It is also available at
      https://www.amd.com/system/files/TechDocs/55570-B1_PUB.zip
      
      
      
      Here is the text from the PPR.
      Operating systems are expected to use Core::X86::Cpuid::SizeId[ApicIdSize], the
      number of least significant bits in the Initial APIC ID that indicate core ID
      within a processor, in constructing per-core CPUID masks.
      Core::X86::Cpuid::SizeId[ApicIdSize] determines the maximum number of cores
      (MNC) that the processor could theoretically support, not the actual number of
      cores that are actually implemented or enabled on the processor, as indicated
      by Core::X86::Cpuid::SizeId[NC].
      Each Core::X86::Apic::ApicId[ApicId] register is preset as follows:
      • ApicId[6] = Socket ID.
      • ApicId[5:4] = Node ID.
      • ApicId[3] = Logical CCX L3 complex ID
      • ApicId[2:0]= (SMT) ? {LogicalCoreID[1:0],ThreadId} : {1'b0,LogicalCoreID[1:0]}
      
      The new apic id encoding is enabled for EPYC and EPYC-Rome models.
      
      Signed-off-by: default avatarBabu Moger <babu.moger@amd.com>
      Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Acked-by: default avatarIgor Mammedov <imammedo@redhat.com>
      Message-Id: <158396724913.58170.3539083528095710811.stgit@naples-babu.amd.com>
      Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
      247b18c5
    • Babu Moger's avatar
      hw/i386: Move arch_id decode inside x86_cpus_init · 2e26f4ab
      Babu Moger authored
      
      Apicid calculation depends on knowing the total number of numa nodes
      for EPYC cpu models. Right now, we are calculating the arch_id while
      parsing the numa(parse_numa). At this time, it is not known how many
      total numa nodes are configured in the system.
      
      Move the arch_id calculation inside x86_cpus_init. At this time, smp
      parse is already completed and numa node information is available.
      
      Override the handlers if use_epyc_apic_id_encoding is enabled in
      cpu model definition.
      
      Also replace the calling convention to use handlers from
      X86MachineState.
      
      Signed-off-by: default avatarBabu Moger <babu.moger@amd.com>
      Message-Id: <158396724217.58170.12256158354204870716.stgit@naples-babu.amd.com>
      Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
      2e26f4ab
    • Babu Moger's avatar
      i386: Introduce use_epyc_apic_id_encoding in X86CPUDefinition · 0c1538cb
      Babu Moger authored
      
      Add a boolean variable use_epyc_apic_id_encoding in X86CPUDefinition.
      This will be set if this cpu model needs to use new EPYC based
      apic id encoding.
      
      Override the handlers with EPYC based handlers if use_epyc_apic_id_encoding
      is set. This will be done in x86_cpus_init.
      
      Signed-off-by: default avatarBabu Moger <babu.moger@amd.com>
      Message-Id: <158396723514.58170.14825482171652019765.stgit@naples-babu.amd.com>
      Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
      0c1538cb
    • Babu Moger's avatar
      hw/i386: Introduce apicid functions inside X86MachineState · 6121c7fb
      Babu Moger authored
      
      Introduce model specific apicid functions inside X86MachineState.
      These functions will be loaded from X86CPUDefinition.
      
      Signed-off-by: default avatarBabu Moger <babu.moger@amd.com>
      Reviewed-by: default avatarIgor Mammedov <imammedo@redhat.com>
      Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Message-Id: <158396722838.58170.5675998866484476427.stgit@naples-babu.amd.com>
      Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
      6121c7fb
    • Babu Moger's avatar
      target/i386: Cleanup and use the EPYC mode topology functions · dd08ef03
      Babu Moger authored
      
      Use the new functions from topology.h and delete the unused code. Given the
      sockets, nodes, cores and threads, the new functions generate apic id for EPYC
      mode. Removes all the hardcoded values.
      
      Signed-off-by: default avatarBabu Moger <babu.moger@amd.com>
      Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Acked-by: default avatarIgor Mammedov <imammedo@redhat.com>
      Message-Id: <158396722151.58170.8031705769621392927.stgit@naples-babu.amd.com>
      Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
      dd08ef03
    • Babu Moger's avatar
      hw/386: Add EPYC mode topology decoding functions · 7568b205
      Babu Moger authored
      These functions add support for building EPYC mode topology given the smp
      details like numa nodes, cores, threads and sockets.
      
      The new apic id decoding is mostly similar to current apic id decoding
      except that it adds a new field node_id when numa configured. Removes all
      the hardcoded values. Subsequent patches will use these functions to build
      the topology.
      
      Following functions are added.
      apicid_llc_width_epyc
      apicid_llc_offset_epyc
      apicid_pkg_offset_epyc
      apicid_from_topo_ids_epyc
      x86_topo_ids_from_idx_epyc
      x86_topo_ids_from_apicid_epyc
      x86_apicid_from_cpu_idx_epyc
      
      The topology details are available in Processor Programming Reference (PPR)
      for AMD Family 17h Model 01h, Revision B1 Processors. The revision guides are
      available from the bugzilla Link below.
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=206537
      
      
      
      Signed-off-by: default avatarBabu Moger <babu.moger@amd.com>
      Acked-by: default avatarIgor Mammedov <imammedo@redhat.com>
      Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Message-Id: <158396721426.58170.2930696192478912976.stgit@naples-babu.amd.com>
      Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
      7568b205
    • Peter Maydell's avatar
      2833ad48
    • Peter Maydell's avatar
      Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging · 82915fae
      Peter Maydell authored
      
      virtio, pci, pc: bugfixes, checkpatch, maintainers
      
      Bugfixes all over the place.
      Add a new balloon maintainer.
      A checkpatch enhancement to enforce ACPI change rules.
      
      Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      
      # gpg: Signature made Tue 31 Mar 2020 15:54:36 BST
      # gpg:                using RSA key 5D09FD0871C8F85B94CA8A0D281F0DB8D28D5469
      # gpg:                issuer "mst@redhat.com"
      # gpg: Good signature from "Michael S. Tsirkin <mst@kernel.org>" [full]
      # gpg:                 aka "Michael S. Tsirkin <mst@redhat.com>" [full]
      # Primary key fingerprint: 0270 606B 6F3C DF3D 0B17  0970 C350 3912 AFBE 8E67
      #      Subkey fingerprint: 5D09 FD08 71C8 F85B 94CA  8A0D 281F 0DB8 D28D 5469
      
      * remotes/mst/tags/for_upstream:
        vhost-vsock: fix double close() in the realize() error path
        acpi: add acpi=OnOffAuto machine property to x86 and arm virt
        fix vhost_user_blk_watch crash
        hw/i386/amd_iommu.c: Fix corruption of log events passed to guest
        virtio-iommu: avoid memleak in the unrealize
        virtio-blk: delete vqs on the error path in realize()
        acpi: pcihp: fix left shift undefined behavior in acpi_pcihp_eject_slot()
        virtio-serial-bus: Plug memory leak on realize() error paths
        MAINTAINERS: Add myself as virtio-balloon co-maintainer
        checkpatch: enforce process for expected files
      
      Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
      82915fae
    • Stefano Garzarella's avatar
      vhost-vsock: fix double close() in the realize() error path · e82cdba3
      Stefano Garzarella authored
      
      vhost_dev_cleanup() closes the vhostfd parameter passed to
      vhost_dev_init(), so this patch avoids closing it twice in
      the vhost_vsock_device_realize() error path.
      
      Signed-off-by: default avatarStefano Garzarella <sgarzare@redhat.com>
      Message-Id: <20200331075910.42529-1-sgarzare@redhat.com>
      Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Reviewed-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
      e82cdba3
    • Peter Maydell's avatar
      Merge remote-tracking branch 'remotes/jasowang/tags/net-pull-request' into staging · 17083d6d
      Peter Maydell authored
      
      # gpg: Signature made Tue 31 Mar 2020 14:15:18 BST
      # gpg:                using RSA key EF04965B398D6211
      # gpg: Good signature from "Jason Wang (Jason Wang on RedHat) <jasowang@redhat.com>" [marginal]
      # gpg: WARNING: This key is not certified with sufficiently trusted signatures!
      # gpg:          It is not certain that the signature belongs to the owner.
      # Primary key fingerprint: 215D 46F4 8246 689E C77F  3562 EF04 965B 398D 6211
      
      * remotes/jasowang/tags/net-pull-request:
        qtest: add tulip test case
        hw/net/allwinner-sun8i-emac.c: Fix REG_ADDR_HIGH/LOW reads
        net: tulip: check frame size and r/w data length
        net/colo-compare.c: Expose "expired_scan_cycle" to users
        net/colo-compare.c: Expose "compare_timeout" to users
        hw/net/can: Make CanBusClientInfo::can_receive() return a boolean
        hw/net: Make NetCanReceive() return a boolean
        hw/net/rtl8139: Update coding style to make checkpatch.pl happy
        hw/net/rtl8139: Simplify if/else statement
        hw/net/smc91c111: Let smc91c111_can_receive() return a boolean
        hw/net/e1000e_core: Let e1000e_can_receive() return a boolean
        Fixed integer overflow in e1000e
        hw/net/i82596.c: Avoid reading off end of buffer in i82596_receive()
        hw/net/i82596: Correct command bitmask (CID 1419392)
      
      Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
      17083d6d
    • Li Qiang's avatar
      qtest: add tulip test case · 1153cf9f
      Li Qiang authored
      
      The tulip networking card emulation has an OOB issue in
      'tulip_copy_tx_buffers' when the guest provide malformed descriptor.
      This test will trigger a ASAN heap overflow crash. To trigger this
      issue we can construct the data as following:
      
      1. construct a 'tulip_descriptor'. Its control is set to
      '0x7ff | 0x7ff << 11', this will make the 'tulip_copy_tx_buffers's
      'len1' and 'len2' to 0x7ff(2047). So 'len1+len2' will overflow
      'TULIPState's 'tx_frame' field. This descriptor's 'buf_addr1' and
      'buf_addr2' should set to a guest address.
      
      2. write this descriptor to tulip device's CSR4 register. This will
      set the 'TULIPState's 'current_tx_desc' field.
      
      3. write 'CSR6_ST' to tulip device's CSR6 register. This will trigger
      'tulip_xmit_list_update' and finally calls 'tulip_copy_tx_buffers'.
      
      Following shows the backtrack of crash:
      
      ==31781==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x628000007cd0 at pc 0x7fe03c5a077a bp 0x7fff05b46770 sp 0x7fff05b45f18
      WRITE of size 2047 at 0x628000007cd0 thread T0
          #0 0x7fe03c5a0779  (/usr/lib/x86_64-linux-gnu/libasan.so.4+0x79779)
          #1 0x5575fb6daa6a in flatview_read_continue /home/test/qemu/exec.c:3194
          #2 0x5575fb6daccb in flatview_read /home/test/qemu/exec.c:3227
          #3 0x5575fb6dae66 in address_space_read_full /home/test/qemu/exec.c:3240
          #4 0x5575fb6db0cb in address_space_rw /home/test/qemu/exec.c:3268
          #5 0x5575fbdfd460 in dma_memory_rw_relaxed /home/test/qemu/include/sysemu/dma.h:87
          #6 0x5575fbdfd4b5 in dma_memory_rw /home/test/qemu/include/sysemu/dma.h:110
          #7 0x5575fbdfd866 in pci_dma_rw /home/test/qemu/include/hw/pci/pci.h:787
          #8 0x5575fbdfd8a3 in pci_dma_read /home/test/qemu/include/hw/pci/pci.h:794
          #9 0x5575fbe02761 in tulip_copy_tx_buffers hw/net/tulip.c:585
          #10 0x5575fbe0366b in tulip_xmit_list_update hw/net/tulip.c:678
          #11 0x5575fbe04073 in tulip_write hw/net/tulip.c:783
      
      Signed-off-by: default avatarLi Qiang <liq3ea@163.com>
      Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
      1153cf9f
    • Peter Maydell's avatar
      hw/net/allwinner-sun8i-emac.c: Fix REG_ADDR_HIGH/LOW reads · b88fb124
      Peter Maydell authored
      
      Coverity points out (CID 1421926) that the read code for
      REG_ADDR_HIGH reads off the end of the buffer, because it does a
      32-bit read from byte 4 of a 6-byte buffer.
      
      The code also has an endianness issue for both REG_ADDR_HIGH and
      REG_ADDR_LOW, because it will do the wrong thing on a big-endian
      host.
      
      Rewrite the read code to use ldl_le_p() and lduw_le_p() to fix this;
      the write code is not incorrect, but for consistency we make it use
      stl_le_p() and stw_le_p().
      
      Reviewed-by: default avatarRichard Henderson <richard.henderson@linaro.org>
      Tested-by: default avatarNiek Linnenbank <nieklinnenbank@gmail.com>
      Reviewed-by: default avatarNiek Linnenbank <nieklinnenbank@gmail.com>
      Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
      Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
      b88fb124
Loading