Skip to content
Snippets Groups Projects
  1. May 14, 2022
  2. 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
  3. 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
Loading