Skip to content
Snippets Groups Projects
  1. May 13, 2022
    • Richard Henderson's avatar
      Merge tag 'linux-headers-v5.18-rc6' of https://gitlab.com/alex.williamson/qemu into staging · 48de9b09
      Richard Henderson authored
       * Linux header update to v5.18-rc6 and vfio file massaging (Alex Williamson)
      
      # -----BEGIN PGP SIGNATURE-----
      #
      # iQJPBAABCAA5FiEEQvbATlQL0amee4qQI5ubbjuwiyIFAmJ+ajgbHGFsZXgud2ls
      # bGlhbXNvbkByZWRoYXQuY29tAAoJECObm247sIsiqVUQAJV8iZ7UrgX9LpCo/kBg
      # VuPdzv8NVoaxe33FkkMlJYIcm1wCIC+lc/nKczkJg5rdfD4/E0oNyv8DER+2q2jC
      # Q94nq3CoSwnbNeRaAc6dcA/Hg9VL5VAwE8S/raDt+DbCBndR0o7zejm2CHZIYPxF
      # GZXgexNThYcSjNsfkP2Sju/SwjWSFRHXFeTg5P6BOm2qWVGMNmvlnarPTffWOC0Y
      # 6sT2VUykzahVSro5WxyuLdH114KI8QRZzSybMkLMpt3uaxZsFoAhO4FYZX4owiUn
      # rSoHS0am86KCRG3msD8UjKKy/R4dP0hXW41xAr4HwRZWouNtwGJVtd1mA6kF5euL
      # 23dQwSQeHvgFx0gY0FiFih/shZ24qvTDZDz8hNqgi3q42Tv8upghAyWL7v/aPpsy
      # 94RH3eNSBkNEvWdK/e40LpuN14voRMLov4XcVirP2kbBFWoU4SSIZmASSLG/OeQn
      # tQLatE53SMiXBabMRKeVCiyMxnoUtOd8fe97XFEONFIEU0NOABt5Zoldtbq4kwoQ
      # tcUydKB66df3uWccb6Tpl3V7h6b8sBL8trfBUD1qANjcDbEzQVUVBTmg+DRwzs8d
      # HQ4f6YQaJoyZlVDgC8GVA268ubAam8FEz1piro4gz8MaZJCeCdx5Teec0yCwjBL+
      # IlNS08zjV5fHFZuMPd/qswjk
      # =gegh
      # -----END PGP SIGNATURE-----
      # gpg: Signature made Fri 13 May 2022 07:24:56 AM PDT
      # gpg:                using RSA key 42F6C04E540BD1A99E7B8A90239B9B6E3BB08B22
      # gpg:                issuer "alex.williamson@redhat.com"
      # gpg: Good signature from "Alex Williamson <alex.williamson@redhat.com>" [undefined]
      # gpg:                 aka "Alex Williamson <alex@shazbot.org>" [undefined]
      # gpg:                 aka "Alex Williamson <alwillia@redhat.com>" [undefined]
      # gpg:                 aka "Alex Williamson <alex.l.williamson@gmail.com>" [undefined]
      # gpg: WARNING: This key is not certified with a trusted signature!
      # gpg:          There is no indication that the signature belongs to the owner.
      # Primary key fingerprint: 42F6 C04E 540B D1A9 9E7B  8A90 239B 9B6E 3BB0 8B22
      
      * tag 'linux-headers-v5.18-rc6' of https://gitlab.com/alex.williamson/qemu
      
      :
        linux-headers: Update to v5.18-rc6
      
      Signed-off-by: default avatarRichard Henderson <richard.henderson@linaro.org>
      48de9b09
    • Alex Williamson's avatar
      linux-headers: Update to v5.18-rc6 · e4082063
      Alex Williamson authored
      
      Update to c5eb0a61238d ("Linux 5.18-rc6").  Mechanical search and
      replace of vfio defines with white space massaging.
      
      Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
      e4082063
  2. May 12, 2022
    • Richard Henderson's avatar
      Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging · 9de5f2b4
      Richard Henderson authored
      * small cleanups for pc-bios/optionrom Makefiles
      * checkpatch: fix g_malloc check
      * fix mremap() and RDMA detection
      * confine igd-passthrough-isa-bridge to Xen-enabled builds
      * cover PCI in arm-virt machine qtests
      * add -M boot and -M mem compound properties
      * bump SLIRP submodule
      * support CFI with system libslirp (>= 4.7)
      * clean up CoQueue wakeup functions
      * fix vhost-vsock regression
      * fix --disable-vnc compilation
      * other minor bugfixes
      
      # -----BEGIN PGP SIGNATURE-----
      #
      # iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmJ8/KMUHHBib256aW5p
      # QHJlZGhhdC5jb20ACgkQv/vSX3jHroNTTAf9Et1C8iZn+OlZi99wMEeMy8a4mIE5
      # CpkBpFphhkBvt3AH7XNsCyL4Gea4QgsI7nOIEVUwvW7gPf85PiBUX8mjrIVg3x1k
      # bmMEwMKSTYPmDieAnYBP9zCqZQXNYP8L8WxVs2jFY2GXZ2ZogODYFbvCY4yEEB72
      # UR6uIvQRdpiB6BEj8UZ+5i+sDtb0zxqrjzUz8T/PJC9/2JSNgi+sAWWQoQT3PPU7
      # R7z2nmEa1VeVLPP6mUHvJKhBltVXF+LyIjQHvo+Tp9tSqp9JwXfFBNQ5W/MFes2D
      # skF47N7PdgKRH9Dp4r0j+MqBwoAq86+ao+MKsbQ1Gb91HhoCWt/MrVrVyg==
      # =1E6P
      # -----END PGP SIGNATURE-----
      # gpg: Signature made Thu 12 May 2022 05:25:07 AM PDT
      # gpg:                using RSA key F13338574B662389866C7682BFFBD25F78C7AE83
      # gpg:                issuer "pbonzini@redhat.com"
      # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [undefined]
      # gpg:                 aka "Paolo Bonzini <pbonzini@redhat.com>" [undefined]
      # gpg: WARNING: This key is not certified with a trusted signature!
      # gpg:          There is no indication that the signature belongs to the owner.
      # 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
      
      * tag 'for-upstream' of https://gitlab.com/bonzini/qemu
      
      : (27 commits)
        vmxcap: add tertiary execution controls
        vl: make machine type deprecation a warning
        meson: link libpng independent of vnc
        vhost-backend: do not depend on CONFIG_VHOST_VSOCK
        coroutine-lock: qemu_co_queue_restart_all is a coroutine-only qemu_co_enter_all
        coroutine-lock: introduce qemu_co_queue_enter_all
        coroutine-lock: qemu_co_queue_next is a coroutine-only qemu_co_enter_next
        net: slirp: allow CFI with libslirp >= 4.7
        net: slirp: add support for CFI-friendly timer API
        net: slirp: switch to slirp_new
        net: slirp: introduce a wrapper struct for QemuTimer
        slirp: bump submodule past 4.7 release
        machine: move more memory validation to Machine object
        machine: make memory-backend a link property
        machine: add mem compound property
        machine: add boot compound property
        machine: use QAPI struct for boot configuration
        tests/qtest/libqos: Add generic pci host bridge in arm-virt machine
        tests/qtest/libqos: Skip hotplug tests if pci root bus is not hotpluggable
        tests/qtest/libqos/pci: Introduce pio_limit
        ...
      
      Signed-off-by: default avatarRichard Henderson <richard.henderson@linaro.org>
      9de5f2b4
    • Richard Henderson's avatar
      Merge tag 'for-upstream' of git://repo.or.cz/qemu/kevin into staging · b32b3897
      Richard Henderson authored
      Block layer patches
      
      - coroutine: Fix crashes due to too large pool batch size
      - fdc: Prevent end-of-track overrun
      - nbd: MULTI_CONN for shared writable exports
      - iotests test runner improvements
      
      # -----BEGIN PGP SIGNATURE-----
      #
      # iQJFBAABCAAvFiEE3D3rFZqa+V09dFb+fwmycsiPL9YFAmJ9KCkRHGt3b2xmQHJl
      # ZGhhdC5jb20ACgkQfwmycsiPL9ZtSRAAmYDFBPqxfutpFXM7kIKwL6COXJC12MOx
      # Tmu8cDiGB/jNChdi3kl6I5h5njzo3U0ZlL/Ign6EzHoeoXLAPSeUWmuRsARwsZ+A
      # rL61gf6yrMjAo45FZuIS0GlMDk8BauRwPl9qPWeqQcrtOMYpxwZfyFGmcMpQgAOI
      # MSC1I8p3FA7oJhGpKIHDPOjaZA97Lm2rLnDIwZ4f0YgssbybFBcFCXOQbhpsVhLy
      # Tjp/L+qRUtna9xBsPHQvHZW0kITQbCQPdX+oVqqUmwzSvuHqfXKe1YppyPjBt/S0
      # H7nxtx4HOgP0lP5Kea+wbIRAk9Da5uaOW8hlMWRLShEKv1iTUenQSKteBB6CD03t
      # GD9ze1kGoR9b6szw795BXxZxcWii0cn359lIVHeKR/U8zDuz5w3zhyl0klK8xeJy
      # nj+JErLwQ7BD8kNR+7WAfXTF3tk2dQao1AvsBjn087KjMiJ/Mg8HY4K2zrjBUrHL
      # DLTyAIjzct3BWJDZ02fb5jb8pHmIP3JO6m9Zvjm7ibP65BqJOwIXUTFpbgnrOg45
      # oFLDV4JgC4Hh4GEtdm+UhQE51A0VVW5pDaqWTdWkCcuk3QgxUdM3Wm3SW6pw1Gvb
      # T0X0j5RgF/k3YrW576R/VIy6z4YPbzAtiG4O/zSlsujHoDcVNWnxApgSB/unaDh8
      # LNkFPGEMeSs=
      # =JmTm
      # -----END PGP SIGNATURE-----
      # gpg: Signature made Thu 12 May 2022 08:30:49 AM PDT
      # gpg:                using RSA key DC3DEB159A9AF95D3D7456FE7F09B272C88F2FD6
      # gpg:                issuer "kwolf@redhat.com"
      # gpg: Good signature from "Kevin Wolf <kwolf@redhat.com>" [full]
      
      * tag 'for-upstream' of git://repo.or.cz/qemu/kevin
      
      :
        qemu-iotests: inline common.config into common.rc
        nbd/server: Allow MULTI_CONN for shared writable exports
        qemu-nbd: Pass max connections to blockdev layer
        tests/qtest/fdc-test: Add a regression test for CVE-2021-3507
        hw/block/fdc: Prevent end-of-track overrun (CVE-2021-3507)
        .gitlab-ci.d: export meson testlog.txt as an artifact
        tests/qemu-iotests: print intent to run a test in TAP mode
        iotests/testrunner: Flush after run_test()
        coroutine: Revert to constant batch size
        coroutine: Rename qemu_coroutine_inc/dec_pool_size()
      
      Signed-off-by: default avatarRichard Henderson <richard.henderson@linaro.org>
      b32b3897
    • Paolo Bonzini's avatar
      qemu-iotests: inline common.config into common.rc · f7062529
      Paolo Bonzini authored
      
      common.rc has some complicated logic to find the common.config that
      dates back to xfstests and is completely unnecessary now.  Just include
      the contents of the file.
      
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Message-Id: <20220505094723.732116-1-pbonzini@redhat.com>
      Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
      f7062529
    • Paolo Bonzini's avatar
      333dbac3
    • Paolo Bonzini's avatar
      vl: make machine type deprecation a warning · 7adb75d6
      Paolo Bonzini authored
      
      error_report should generally be followed by a failure; if we can proceed
      anyway, that is just a warning and should be communicated properly to
      the user with warn_report.
      
      Reviewed-by: default avatarMarkus Armbruster <armbru@redhat.com>
      Message-Id: <20220511175043.27327-1-pbonzini@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      7adb75d6
    • Eric Blake's avatar
      nbd/server: Allow MULTI_CONN for shared writable exports · 58a6fdcc
      Eric Blake authored
      
      According to the NBD spec, a server that advertises
      NBD_FLAG_CAN_MULTI_CONN promises that multiple client connections will
      not see any cache inconsistencies: when properly separated by a single
      flush, actions performed by one client will be visible to another
      client, regardless of which client did the flush.
      
      We always satisfy these conditions in qemu - even when we support
      multiple clients, ALL clients go through a single point of reference
      into the block layer, with no local caching.  The effect of one client
      is instantly visible to the next client.  Even if our backend were a
      network device, we argue that any multi-path caching effects that
      would cause inconsistencies in back-to-back actions not seeing the
      effect of previous actions would be a bug in that backend, and not the
      fault of caching in qemu.  As such, it is safe to unconditionally
      advertise CAN_MULTI_CONN for any qemu NBD server situation that
      supports parallel clients.
      
      Note, however, that we don't want to advertise CAN_MULTI_CONN when we
      know that a second client cannot connect (for historical reasons,
      qemu-nbd defaults to a single connection while nbd-server-add and QMP
      commands default to unlimited connections; but we already have
      existing means to let either style of NBD server creation alter those
      defaults).  This is visible by no longer advertising MULTI_CONN for
      'qemu-nbd -r' without -e, as in the iotest nbd-qemu-allocation.
      
      The harder part of this patch is setting up an iotest to demonstrate
      behavior of multiple NBD clients to a single server.  It might be
      possible with parallel qemu-io processes, but I found it easier to do
      in python with the help of libnbd, and help from Nir and Vladimir in
      writing the test.
      
      Signed-off-by: default avatarEric Blake <eblake@redhat.com>
      Suggested-by: default avatarNir Soffer <nsoffer@redhat.com>
      Suggested-by: default avatarVladimir Sementsov-Ogievskiy <v.sementsov-og@mail.ru>
      Message-Id: <20220512004924.417153-3-eblake@redhat.com>
      Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
      58a6fdcc
    • Eric Blake's avatar
      qemu-nbd: Pass max connections to blockdev layer · a5fced40
      Eric Blake authored
      
      The next patch wants to adjust whether the NBD server code advertises
      MULTI_CONN based on whether it is known if the server limits to
      exactly one client.  For a server started by QMP, this information is
      obtained through nbd_server_start (which can support more than one
      export); but for qemu-nbd (which supports exactly one export), it is
      controlled only by the command-line option -e/--shared.  Since we
      already have a hook function used by qemu-nbd, it's easiest to just
      alter its signature to fit our needs.
      
      Signed-off-by: default avatarEric Blake <eblake@redhat.com>
      Message-Id: <20220512004924.417153-2-eblake@redhat.com>
      Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
      a5fced40
    • Philippe Mathieu-Daudé's avatar
      tests/qtest/fdc-test: Add a regression test for CVE-2021-3507 · 46609b90
      Philippe Mathieu-Daudé authored
      Add the reproducer from https://gitlab.com/qemu-project/qemu/-/issues/339
      
      
      
      Without the previous commit, when running 'make check-qtest-i386'
      with QEMU configured with '--enable-sanitizers' we get:
      
        ==4028352==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x619000062a00 at pc 0x5626d03c491a bp 0x7ffdb4199410 sp 0x7ffdb4198bc0
        READ of size 786432 at 0x619000062a00 thread T0
            #0 0x5626d03c4919 in __asan_memcpy (qemu-system-i386+0x1e65919)
            #1 0x5626d1c023cc in flatview_write_continue softmmu/physmem.c:2787:13
            #2 0x5626d1bf0c0f in flatview_write softmmu/physmem.c:2822:14
            #3 0x5626d1bf0798 in address_space_write softmmu/physmem.c:2914:18
            #4 0x5626d1bf0f37 in address_space_rw softmmu/physmem.c:2924:16
            #5 0x5626d1bf14c8 in cpu_physical_memory_rw softmmu/physmem.c:2933:5
            #6 0x5626d0bd5649 in cpu_physical_memory_write include/exec/cpu-common.h:82:5
            #7 0x5626d0bd0a07 in i8257_dma_write_memory hw/dma/i8257.c:452:9
            #8 0x5626d09f825d in fdctrl_transfer_handler hw/block/fdc.c:1616:13
            #9 0x5626d0a048b4 in fdctrl_start_transfer hw/block/fdc.c:1539:13
            #10 0x5626d09f4c3e in fdctrl_write_data hw/block/fdc.c:2266:13
            #11 0x5626d09f22f7 in fdctrl_write hw/block/fdc.c:829:9
            #12 0x5626d1c20bc5 in portio_write softmmu/ioport.c:207:17
      
        0x619000062a00 is located 0 bytes to the right of 512-byte region [0x619000062800,0x619000062a00)
        allocated by thread T0 here:
            #0 0x5626d03c66ec in posix_memalign (qemu-system-i386+0x1e676ec)
            #1 0x5626d2b988d4 in qemu_try_memalign util/oslib-posix.c:210:11
            #2 0x5626d2b98b0c in qemu_memalign util/oslib-posix.c:226:27
            #3 0x5626d09fbaf0 in fdctrl_realize_common hw/block/fdc.c:2341:20
            #4 0x5626d0a150ed in isabus_fdc_realize hw/block/fdc-isa.c:113:5
            #5 0x5626d2367935 in device_set_realized hw/core/qdev.c:531:13
      
        SUMMARY: AddressSanitizer: heap-buffer-overflow (qemu-system-i386+0x1e65919) in __asan_memcpy
        Shadow bytes around the buggy address:
          0x0c32800044f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
          0x0c3280004500: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
          0x0c3280004510: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
          0x0c3280004520: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
          0x0c3280004530: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        =>0x0c3280004540:[fa]fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
          0x0c3280004550: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
          0x0c3280004560: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
          0x0c3280004570: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
          0x0c3280004580: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
          0x0c3280004590: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
        Shadow byte legend (one shadow byte represents 8 application bytes):
          Addressable:           00
          Heap left redzone:       fa
          Freed heap region:       fd
        ==4028352==ABORTING
      
      [ kwolf: Added snapshot=on to prevent write file lock failure ]
      
      Reported-by: default avatarAlexander Bulekov <alxndr@bu.edu>
      Signed-off-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
      Reviewed-by: default avatarAlexander Bulekov <alxndr@bu.edu>
      Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
      46609b90
    • Philippe Mathieu-Daudé's avatar
      hw/block/fdc: Prevent end-of-track overrun (CVE-2021-3507) · defac5e2
      Philippe Mathieu-Daudé authored
      
      Per the 82078 datasheet, if the end-of-track (EOT byte in
      the FIFO) is more than the number of sectors per side, the
      command is terminated unsuccessfully:
      
      * 5.2.5 DATA TRANSFER TERMINATION
      
        The 82078 supports terminal count explicitly through
        the TC pin and implicitly through the underrun/over-
        run and end-of-track (EOT) functions. For full sector
        transfers, the EOT parameter can define the last
        sector to be transferred in a single or multisector
        transfer. If the last sector to be transferred is a par-
        tial sector, the host can stop transferring the data in
        mid-sector, and the 82078 will continue to complete
        the sector as if a hardware TC was received. The
        only difference between these implicit functions and
        TC is that they return "abnormal termination" result
        status. Such status indications can be ignored if they
        were expected.
      
      * 6.1.3 READ TRACK
      
        This command terminates when the EOT specified
        number of sectors have been read. If the 82078
        does not find an I D Address Mark on the diskette
        after the second· occurrence of a pulse on the
        INDX# pin, then it sets the IC code in Status Regis-
        ter 0 to "01" (Abnormal termination), sets the MA bit
        in Status Register 1 to "1", and terminates the com-
        mand.
      
      * 6.1.6 VERIFY
      
        Refer to Table 6-6 and Table 6-7 for information
        concerning the values of MT and EC versus SC and
        EOT value.
      
      * Table 6·6. Result Phase Table
      
      * Table 6-7. Verify Command Result Phase Table
      
      Fix by aborting the transfer when EOT > # Sectors Per Side.
      
      Cc: qemu-stable@nongnu.org
      Cc: Hervé Poussineau <hpoussin@reactos.org>
      Fixes: baca51fa ("floppy driver: disk geometry auto detect")
      Reported-by: default avatarAlexander Bulekov <alxndr@bu.edu>
      Resolves: https://gitlab.com/qemu-project/qemu/-/issues/339
      
      
      Signed-off-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
      Message-Id: <20211118115733.4038610-2-philmd@redhat.com>
      Reviewed-by: default avatarHanna Reitz <hreitz@redhat.com>
      Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
      defac5e2
    • Kshitij Suri's avatar
      meson: link libpng independent of vnc · e23a13c0
      Kshitij Suri authored
      
      Currently png support is dependent on vnc for linking object file to
      libpng. This commit makes the parameter independent of vnc as it breaks
      system emulator with --disable-vnc unless --disable-png is added.
      
      Fixes: 9a0a119a ("Added parameter to take screenshot with screendump as PNG", 2022-04-27)
      Signed-off-by: default avatarKshitij Suri <kshitij.suri@nutanix.com>
      Message-Id: <20220510161932.228481-1-kshitij.suri@nutanix.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      e23a13c0
    • Paolo Bonzini's avatar
      vhost-backend: do not depend on CONFIG_VHOST_VSOCK · d93e839c
      Paolo Bonzini authored
      
      The vsock callbacks .vhost_vsock_set_guest_cid and
      .vhost_vsock_set_running are the only ones to be conditional
      on #ifdef CONFIG_VHOST_VSOCK.  This is different from any other
      device-dependent callbacks like .vhost_scsi_set_endpoint, and it
      also broke when CONFIG_VHOST_VSOCK was changed to a per-target
      symbol.
      
      It would be possible to also use the CONFIG_DEVICES include, but
      really there is no reason for most virtio files to be per-target
      so just remove the #ifdef to fix the issue.
      
      Reported-by: default avatarDov Murik <dovmurik@linux.ibm.com>
      Fixes: 9972ae31 ("build: move vhost-vsock configuration to Kconfig")
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      d93e839c
    • Paolo Bonzini's avatar
      coroutine-lock: qemu_co_queue_restart_all is a coroutine-only qemu_co_enter_all · f0d43b1e
      Paolo Bonzini authored
      
      qemu_co_queue_restart_all is basically the same as qemu_co_enter_all
      but without a QemuLockable argument.  That's perfectly fine, but only as
      long as the function is marked coroutine_fn.  If used outside coroutine
      context, qemu_co_queue_wait will attempt to take the lock and that
      is just broken: if you are calling qemu_co_queue_restart_all outside
      coroutine context, the lock is going to be a QemuMutex which cannot be
      taken twice by the same thread.
      
      The patch adds the marker to qemu_co_queue_restart_all and to its sole
      non-coroutine_fn caller; it then reimplements the function in terms of
      qemu_co_enter_all_impl, to remove duplicated code and to clarify that the
      latter also works in coroutine context.
      
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Reviewed-by: default avatarEric Blake <eblake@redhat.com>
      Message-Id: <20220427130830.150180-4-pbonzini@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      f0d43b1e
    • Paolo Bonzini's avatar
      coroutine-lock: introduce qemu_co_queue_enter_all · d6ee15ad
      Paolo Bonzini authored
      
      Because qemu_co_queue_restart_all does not release the lock, it should
      be used only in coroutine context.  Introduce a new function that,
      like qemu_co_enter_next, does release the lock, and use it whenever
      qemu_co_queue_restart_all was used outside coroutine context.
      
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Reviewed-by: default avatarEric Blake <eblake@redhat.com>
      Message-Id: <20220427130830.150180-3-pbonzini@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      d6ee15ad
    • Paolo Bonzini's avatar
      coroutine-lock: qemu_co_queue_next is a coroutine-only qemu_co_enter_next · 248af9e8
      Paolo Bonzini authored
      
      qemu_co_queue_next is basically the same as qemu_co_enter_next but
      without a QemuLockable argument.  That's perfectly fine, but only
      as long as the function is marked coroutine_fn.  If used outside
      coroutine context, qemu_co_queue_wait will attempt to take the lock
      and that is just broken: if you are calling qemu_co_queue_next outside
      coroutine context, the lock is going to be a QemuMutex which cannot be
      taken twice by the same thread.
      
      The patch adds the marker and reimplements qemu_co_queue_next in terms of
      qemu_co_enter_next_impl, to remove duplicated code and to clarify that the
      latter also works in coroutine context.
      
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Reviewed-by: default avatarEric Blake <eblake@redhat.com>
      Message-Id: <20220427130830.150180-2-pbonzini@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      248af9e8
    • Paolo Bonzini's avatar
      net: slirp: allow CFI with libslirp >= 4.7 · bf2f69d0
      Paolo Bonzini authored
      
      slirp 4.7 introduces a new CFI-friendly timer callback that does
      not pass function pointers within libslirp as callbacks for timers.
      Check the version number and, if it is new enough, allow using CFI
      even with a system libslirp.
      
      Reviewed-by: default avatarSamuel Thibault <samuel.thibault@ens-lyon.org>
      Reviewed-by: default avatarMarc-André Lureau <malureau@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      bf2f69d0
    • Paolo Bonzini's avatar
      net: slirp: add support for CFI-friendly timer API · 6222e55d
      Paolo Bonzini authored
      
      libslirp 4.7 introduces a CFI-friendly version of the .timer_new callback.
      The new callback replaces the function pointer with an enum; invoking the
      callback is done with a new function slirp_handle_timer.
      
      Support the new API so that CFI can be made compatible with using a system
      libslirp.
      
      Reviewed-by: default avatarSamuel Thibault <samuel.thibault@ens-lyon.org>
      Reviewed-by: default avatarMarc-André Lureau <malureau@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      6222e55d
    • Paolo Bonzini's avatar
      net: slirp: switch to slirp_new · bce63ded
      Paolo Bonzini authored
      
      Replace slirp_init with slirp_new, so that a more recent cfg.version
      can be specified.  The function appeared in version 4.1.0.
      
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      bce63ded
    • Paolo Bonzini's avatar
      net: slirp: introduce a wrapper struct for QemuTimer · ad2e5b87
      Paolo Bonzini authored
      
      This struct will be extended in the next few patches to support the
      new slirp_handle_timer() call.  For that we need to store an additional
      "int" for each SLIRP timer, in addition to the cb_opaque.
      
      Reviewed-by: default avatarSamuel Thibault <samuel.thibault@ens-lyon.org>
      Reviewed-by: default avatarMarc-André Lureau <malureau@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      ad2e5b87
    • Paolo Bonzini's avatar
      slirp: bump submodule past 4.7 release · 0c1450e2
      Paolo Bonzini authored
      
      Version 4.7 of slirp provides a new timer API that works better with CFI,
      together with several other improvements:
      
      * Allow disabling the internal DHCP server !22
      * Support Unix sockets in hostfwd !103
      * IPv6 DNS proxying support !110
      * bootp: add support for UEFI HTTP boot !111
      
      and bugfixes.
      
      The submodule update also includes 2 commits to fix warnings in the
      Win32 build.
      
      Reviewed-by: default avatarMarc-André Lureau <malureau@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      0c1450e2
    • Paolo Bonzini's avatar
      machine: move more memory validation to Machine object · fb56b7a0
      Paolo Bonzini authored
      
      This allows setting memory properties without going through
      vl.c, and have them validated just the same.
      
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Message-Id: <20220414165300.555321-6-pbonzini@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      fb56b7a0
    • Paolo Bonzini's avatar
      machine: make memory-backend a link property · 26f88d84
      Paolo Bonzini authored
      
      Handle HostMemoryBackend creation and setting of ms->ram entirely in
      machine_run_board_init.
      
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Message-Id: <20220414165300.555321-5-pbonzini@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      26f88d84
    • Paolo Bonzini's avatar
      machine: add mem compound property · ce9d03fb
      Paolo Bonzini authored
      
      Make -m syntactic sugar for a compound property "-machine
      mem.{size,max-size,slots}".  The new property does not have
      the magic conversion to megabytes of unsuffixed arguments,
      and also does not understand that "0" means the default size
      (you have to leave it out to get the default).  This means
      that we need to convert the QemuOpts by hand to a QDict.
      
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Message-Id: <20220414165300.555321-4-pbonzini@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      ce9d03fb
    • Paolo Bonzini's avatar
      machine: add boot compound property · 8c4da4b5
      Paolo Bonzini authored
      
      Make -boot syntactic sugar for a compound property "-machine boot.{order,menu,...}".
      machine_boot_parse is replaced by the setter for the property.
      
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Message-Id: <20220414165300.555321-3-pbonzini@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      8c4da4b5
    • Paolo Bonzini's avatar
      machine: use QAPI struct for boot configuration · 97ec4d21
      Paolo Bonzini authored
      
      As part of converting -boot to a property with a QAPI type, define
      the struct and use it throughout QEMU to access boot configuration.
      machine_boot_parse takes care of doing the QemuOpts->QAPI conversion by
      hand, for now.
      
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Message-Id: <20220414165300.555321-2-pbonzini@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      97ec4d21
    • Daniel P. Berrangé's avatar
      .gitlab-ci.d: export meson testlog.txt as an artifact · 29a49376
      Daniel P. Berrangé authored
      
      When running 'make check' we only get a summary of progress on the
      console. Fortunately meson/ninja have saved the raw test output to a
      logfile. Exposing this log will make it easier to debug failures that
      happen in CI.
      
      Signed-off-by: default avatarDaniel P. Berrangé <berrange@redhat.com>
      Message-Id: <20220509124134.867431-3-berrange@redhat.com>
      Reviewed-by: default avatarThomas Huth <thuth@redhat.com>
      Reviewed-by: default avatarPhilippe Mathieu-Daudé <f4bug@amsat.org>
      Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
      29a49376
    • Daniel P. Berrangé's avatar
      tests/qemu-iotests: print intent to run a test in TAP mode · 5e781c70
      Daniel P. Berrangé authored
      
      When running I/O tests using TAP output mode, we get a single TAP test
      with a sub-test reported for each I/O test that is run. The output looks
      something like this:
      
       1..123
       ok qcow2 011
       ok qcow2 012
       ok qcow2 013
       ok qcow2 217
       ...
      
      If everything runs or fails normally this is fine, but periodically we
      have been seeing the test harness abort early before all 123 tests have
      been run, just leaving a fairly useless message like
      
        TAP parsing error: Too few tests run (expected 123, got 107)
      
      we have no idea which tests were running at the time the test harness
      abruptly exited. This change causes us to print a message about our
      intent to run each test, so we have a record of what is active at the
      time the harness exits abnormally.
      
       1..123
       # running qcow2 011
       ok qcow2 011
       # running qcow2 012
       ok qcow2 012
       # running qcow2 013
       ok qcow2 013
       # running qcow2 217
       ok qcow2 217
       ...
      
      Signed-off-by: default avatarDaniel P. Berrangé <berrange@redhat.com>
      Message-Id: <20220509124134.867431-2-berrange@redhat.com>
      Reviewed-by: default avatarThomas Huth <thuth@redhat.com>
      Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
      5e781c70
    • Hanna Reitz's avatar
      iotests/testrunner: Flush after run_test() · 22d92e71
      Hanna Reitz authored
      
      When stdout is not a terminal, the buffer may not be flushed at each end
      of line, so we should flush after each test is done.  This is especially
      apparent when run by check-block, in two ways:
      
      First, when running make check-block -jX with X > 1, progress indication
      was missing, even though testrunner.py does theoretically print each
      test's status once it has been run, even in multi-processing mode.
      Flushing after each test restores this progress indication.
      
      Second, sometimes make check-block failed altogether, with an error
      message that "too few tests [were] run".  I presume that's because one
      worker process in the job pool did not get to flush its stdout before
      the main process exited, and so meson did not get to see that worker's
      test results.  In any case, by flushing at the end of run_test(), the
      problem has disappeared for me.
      
      Signed-off-by: default avatarHanna Reitz <hreitz@redhat.com>
      Message-Id: <20220506134215.10086-1-hreitz@redhat.com>
      Reviewed-by: default avatarEric Blake <eblake@redhat.com>
      Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
      22d92e71
    • Kevin Wolf's avatar
      coroutine: Revert to constant batch size · 9ec7a59b
      Kevin Wolf authored
      Commit 4c41c69e changed the way the coroutine pool is sized because for
      virtio-blk devices with a large queue size and heavy I/O, it was just
      too small and caused coroutines to be deleted and reallocated soon
      afterwards. The change made the size dynamic based on the number of
      queues and the queue size of virtio-blk devices.
      
      There are two important numbers here: Slightly simplified, when a
      coroutine terminates, it is generally stored in the global release pool
      up to a certain pool size, and if the pool is full, it is freed.
      Conversely, when allocating a new coroutine, the coroutines in the
      release pool are reused if the pool already has reached a certain
      minimum size (the batch size), otherwise we allocate new coroutines.
      
      The problem after commit 4c41c69e is that it not only increases the
      maximum pool size (which is the intended effect), but also the batch
      size for reusing coroutines (which is a bug). It means that in cases
      with many devices and/or a large queue size (which defaults to the
      number of vcpus for virtio-blk-pci), many thousand coroutines could be
      sitting in the release pool without being reused.
      
      This is not only a waste of memory and allocations, but it actually
      makes the QEMU process likely to hit the vm.max_map_count limit on Linux
      because each coroutine requires two mappings (its stack and the guard
      page for the stack), causing it to abort() in qemu_alloc_stack() because
      when the limit is hit, mprotect() starts to fail with ENOMEM.
      
      In order to fix the problem, change the batch size back to 64 to avoid
      uselessly accumulating coroutines in the release pool, but keep the
      dynamic maximum pool size so that coroutines aren't freed too early
      in heavy I/O scenarios.
      
      Note that this fix doesn't strictly make it impossible to hit the limit,
      but this would only happen if most of the coroutines are actually in use
      at the same time, not just sitting in a pool. This is the same behaviour
      as we already had before commit 4c41c69e. Fully preventing this would
      require allowing qemu_coroutine_create() to return an error, but it
      doesn't seem to be a scenario that people hit in practice.
      
      Cc: qemu-stable@nongnu.org
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2079938
      
      
      Fixes: 4c41c69e
      Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
      Message-Id: <20220510151020.105528-3-kwolf@redhat.com>
      Tested-by: default avatarHiroki Narukawa <hnarukaw@yahoo-corp.jp>
      Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
      9ec7a59b
    • Kevin Wolf's avatar
      coroutine: Rename qemu_coroutine_inc/dec_pool_size() · 98e3ab35
      Kevin Wolf authored
      
      It's true that these functions currently affect the batch size in which
      coroutines are reused (i.e. moved from the global release pool to the
      allocation pool of a specific thread), but this is a bug and will be
      fixed in a separate patch.
      
      In fact, the comment in the header file already just promises that it
      influences the pool size, so reflect this in the name of the functions.
      As a nice side effect, the shorter function name makes some line
      wrapping unnecessary.
      
      Cc: qemu-stable@nongnu.org
      Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
      Message-Id: <20220510151020.105528-2-kwolf@redhat.com>
      Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
      98e3ab35
    • Eric Auger's avatar
      tests/qtest/libqos: Add generic pci host bridge in arm-virt machine · 70be1d93
      Eric Auger authored
      
      Up to now the virt-machine node contains a virtio-mmio node.
      However no driver produces any PCI interface node. Hence, PCI
      tests cannot be run with aarch64 binary.
      
      Add a GPEX driver node that produces a pci interface node. This latter
      then can be consumed by all the pci tests. One of the first motivation
      was to be able to run the virtio-iommu-pci tests.
      
      We still face an issue with pci hotplug tests as hotplug cannot happen
      on the pcie root bus and require a generic root port. This will be
      addressed later on.
      
      We force cpu=max along with aarch64/virt machine as some PCI tests
      require high MMIO regions to be available.
      
      Signed-off-by: default avatarEric Auger <eric.auger@redhat.com>
      
      Message-Id: <20220504152025.1785704-4-eric.auger@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      70be1d93
    • Eric Auger's avatar
      tests/qtest/libqos: Skip hotplug tests if pci root bus is not hotpluggable · 02ee7a8a
      Eric Auger authored
      
      ARM does not not support hotplug on pcie.0. Add a flag on the bus
      which tells if devices can be hotplugged and skip hotplug tests
      if the bus cannot be hotplugged. This is a temporary solution to
      enable the other pci tests on aarch64.
      
      Signed-off-by: default avatarEric Auger <eric.auger@redhat.com>
      Acked-by: default avatarThomas Huth <thuth@redhat.com>
      Reviewed-by: default avatarAlex Bennée <alex.bennee@linaro.org>
      
      Message-Id: <20220504152025.1785704-3-eric.auger@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      02ee7a8a
    • Eric Auger's avatar
      tests/qtest/libqos/pci: Introduce pio_limit · 3df72d1c
      Eric Auger authored
      
      At the moment the IO space limit is hardcoded to
      QPCI_PIO_LIMIT = 0x10000. When accesses are performed to a bar,
      the base address of this latter is compared against the limit
      to decide whether we perform an IO or a memory access.
      
      On ARM, we cannot keep this PIO limit as the arm-virt machine
      uses [0x3eff0000, 0x3f000000 ] for the IO space map and we
      are mandated to allocate at 0x0.
      
      Add a new flag in QPCIBar indicating whether it is an IO bar
      or a memory bar. This flag is set on QPCIBar allocation and
      provisionned based on the BAR configuration. Then the new flag
      is used in access functions and in iomap() function.
      
      Signed-off-by: default avatarEric Auger <eric.auger@redhat.com>
      Reviewed-by: default avatarThomas Huth <thuth@redhat.com>
      Reviewed-by: default avatarAlex Bennée <alex.bennee@linaro.org>
      Message-Id: <20220504152025.1785704-2-eric.auger@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      3df72d1c
    • Bernhard Beschow's avatar
      hw/xen/xen_pt: Resolve igd_passthrough_isa_bridge_create() indirection · 76acef2b
      Bernhard Beschow authored
      
      Now that igd_passthrough_isa_bridge_create() is implemented within the
      xen context it may use Xen* data types directly and become
      xen_igd_passthrough_isa_bridge_create(). This resolves an indirection.
      
      Signed-off-by: default avatarBernhard Beschow <shentey@gmail.com>
      Acked-by: default avatarAnthony PERARD <anthony.perard@citrix.com>
      Message-Id: <20220326165825.30794-3-shentey@gmail.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      76acef2b
    • Bernhard Beschow's avatar
      hw/xen/xen_pt: Confine igd-passthrough-isa-bridge to XEN · 4a802736
      Bernhard Beschow authored
      
      igd-passthrough-isa-bridge is only requested in xen_pt but was
      implemented in pc_piix.c. This caused xen_pt to dependend on i386/pc
      which is hereby resolved.
      
      Signed-off-by: default avatarBernhard Beschow <shentey@gmail.com>
      Acked-by: default avatarAnthony PERARD <anthony.perard@citrix.com>
      Message-Id: <20220326165825.30794-2-shentey@gmail.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      4a802736
    • Juan Quintela's avatar
      meson: Make mremap() detecting works correctly · 354d2d9b
      Juan Quintela authored
      
      Without this (at least in Fedora 35) it don't detect mremap()
      correctly.
      
      Signed-off-by: default avatarJuan Quintela <quintela@redhat.com>
      Message-Id: <20220502131119.2345-1-quintela@redhat.com>
      [Also switch the LEGACY_RDMA_REG_MR test to cc.links, otherwise
       Debian fails to build. - Paolo]
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      354d2d9b
    • Paolo Bonzini's avatar
      checkpatch: fix g_malloc check · dfdb4f3c
      Paolo Bonzini authored
      
      Use the string equality operator "eq", and ensure that $1 is defined by
      using "(try|)" instead of "(try)?".  The alternative "((?:try)?)" is
      longer and less readable.
      
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      dfdb4f3c
    • Paolo Bonzini's avatar
      target/i386: do not consult nonexistent host leaves · 798d8ec0
      Paolo Bonzini authored
      
      When cache_info_passthrough is requested, QEMU passes the host values
      of the cache information CPUID leaves down to the guest.  However,
      it blindly assumes that the CPUID leaf exists on the host, and this
      cannot be guaranteed: for example, KVM has recently started to
      synthesize AMD leaves up to 0x80000021 in order to provide accurate
      CPU bug information to guests.
      
      Querying a nonexistent host leaf fills the output arguments of
      host_cpuid with data that (albeit deterministic) is nonsensical
      as cache information, namely the data in the highest Intel CPUID
      leaf.  If said highest leaf is not ECX-dependent, this can even
      cause an infinite loop when kvm_arch_init_vcpu prepares the input
      to KVM_SET_CPUID2.  The infinite loop is only terminated by an
      abort() when the array gets full.
      
      Reported-by: default avatarMaxim Levitsky <mlevitsk@redhat.com>
      Reviewed-by: default avatarMaxim Levitsky <mlevitsk@redhat.com>
      Cc: qemu-stable@nongnu.org
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      798d8ec0
    • Paolo Bonzini's avatar
      pc-bios/optionrom: compile with -Wno-array-bounds · 236d1522
      Paolo Bonzini authored
      
      Avoids the following bogus warning:
      
      pvh_main.c: In function ‘pvh_load_kernel’:
      pvh_main.c:101:42: warning: array subscript 0 is outside array bounds of ‘uint16_t[0]’ {aka ‘short unsigned int[]’} [-Warray-bounds]
        101 |         uint32_t ebda_paddr = ((uint32_t)*((uint16_t *)EBDA_BASE_ADDR)) << 4;
            |                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      Cc: qemu-stable@nongnu.org
      Reviewed-by: default avatarRichard Henderson <richard.henderson@linaro.org>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      236d1522
Loading