Skip to content
Snippets Groups Projects
  1. Sep 20, 2023
  2. Sep 19, 2023
    • Stefan Hajnoczi's avatar
      Merge tag 'mem-2023-09-19' of https://github.com/davidhildenbrand/qemu into staging · 49076448
      Stefan Hajnoczi authored
      Hi,
      
      "Host Memory Backends" and "Memory devices" queue ("mem"):
      - Support and document VM templating with R/O files using a new "rom"
        parameter for memory-backend-file
      - Some cleanups and fixes around NVDIMMs and R/O file handling for guest
        RAM
      - Optimize ioeventfd updates by skipping address spaces that are not
        applicable
      
      # -----BEGIN PGP SIGNATURE-----
      #
      # iQJFBAABCAAvFiEEG9nKrXNcTDpGDfzKTd4Q9wD/g1oFAmUJdykRHGRhdmlkQHJl
      # ZGhhdC5jb20ACgkQTd4Q9wD/g1pf2w//akOUoYMuamySGjXtKLVyMKZkjIys+Ama
      # k2C0xzsWAHBP572ezwHi8uxf5j9kzAjsw6GxDZ7FAamD9MhiohkEvkecloBx6f/c
      # q3fVHblBNkG7v2urtf4+6PJtJvhzOST2SFXfWeYhO/vaA04AYCDgexv82JN3gA6B
      # OS8WyOX62b8wILPSY2GLZ8IqpE9XnOYZwzVBn6YB1yo7ZkYEfXO6cA8nykNuNcOE
      # vppqDo7uVIX6317FWj8ygxmzFfOaj0WT2MT2XFzEIDfg8BInQN8HC4mTn0hcVKMa
      # N1y+eZH733CQKT+uNBRZ5YOeljOi4d6gEEyvkkA/L7e5D3Qg9hIdvHb4uryCFSWX
      # Vt07OP1XLBwCZFobOC6sg+2gtTZJxxYK89e6ZzEd0454S24w5bnEteRAaCGOP0XL
      # ww9xYULqhtZs55UC4rvZHJwdUAk1fIY4VqynwkeQXegvz6BxedNeEkJiiEU0Tizx
      # N2VpsxAJ7H/LLSFeZoCRESo4azrH6U4n7S/eS1tkCniFqibfe2yIQCDoJVfb42ec
      # gfg/vThCrDwHkIHzkMmoV8NndA7Q7SIkyMfYeEEBeZMeg8JzYll4DJEw/jQCacxh
      # KRUa+AZvGlTJUq0mkvyOVfLki+iaehoIUuY1yvMrmdWijPO8n3YybmP9Ljhr8VdR
      # 9MSYZe+I2v8=
      # =iraT
      # -----END PGP SIGNATURE-----
      # gpg: Signature made Tue 19 Sep 2023 06:25:45 EDT
      # gpg:                using RSA key 1BD9CAAD735C4C3A460DFCCA4DDE10F700FF835A
      # gpg:                issuer "david@redhat.com"
      # gpg: Good signature from "David Hildenbrand <david@redhat.com>" [unknown]
      # gpg:                 aka "David Hildenbrand <davidhildenbrand@gmail.com>" [full]
      # gpg:                 aka "David Hildenbrand <hildenbr@in.tum.de>" [unknown]
      # gpg: WARNING: The key's User ID is not certified with a trusted signature!
      # gpg:          There is no indication that the signature belongs to the owner.
      # Primary key fingerprint: 1BD9 CAAD 735C 4C3A 460D  FCCA 4DDE 10F7 00FF 835A
      
      * tag 'mem-2023-09-19' of https://github.com/davidhildenbrand/qemu
      
      :
        memory: avoid updating ioeventfds for some address_space
        machine: Improve error message when using default RAM backend id
        softmmu/physmem: Hint that "readonly=on,rom=off" exists when opening file R/W for private mapping fails
        docs: Start documenting VM templating
        docs: Don't mention "-mem-path" in multi-process.rst
        softmmu/physmem: Never return directories from file_ram_open()
        softmmu/physmem: Fail creation of new files in file_ram_open() with readonly=true
        softmmu/physmem: Bail out early in ram_block_discard_range() with readonly files
        softmmu/physmem: Remap with proper protection in qemu_ram_remap()
        backends/hostmem-file: Add "rom" property to support VM templating with R/O files
        softmmu/physmem: Distinguish between file access mode and mmap protection
        nvdimm: Reject writing label data to ROM instead of crashing QEMU
      
      Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
      49076448
    • Stefan Hajnoczi's avatar
      Merge tag 'firmware/edk2-20230918-pull-request' of https://gitlab.com/kraxel/qemu into staging · 1361bba5
      Stefan Hajnoczi authored
      edk2: update to edk2-stable202308
      
      v2: include acpi test data updates
      
      # -----BEGIN PGP SIGNATURE-----
      #
      # iQIzBAABCgAdFiEEoDKM/7k6F6eZAf59TLbY7tPocTgFAmUIUYUACgkQTLbY7tPo
      # cTiPgQ/9Hfn4ooawA2k7i4KB5mAdNMhG1TYmR05hjIPur8S+UBhfHx3Qdv/lojzr
      # 9hRkXsi3CpV8E/t7sA/ZUVbc17ukBrJvL2VbW1nGqPZytiNqmU/2HOZEd88WByyg
      # O1UYg9FZ1JbrqVbFkrE7Y0CHJmrr4EDWRxEGd7ITPDbR4UEuiQUm7+TeHIbQFCll
      # T5vNxkCBP6smY9n/OEMZHX964D7906pBflHSjzpLPV/mXBrlM/rDNtPXA6dcIquh
      # cCOndACPpenM8ngtgbW2gvDkkflXv4gtLozJR8XE8O434HmCviUjcxGW6L7nelcZ
      # +madon48CZ/5AJUvC09R3xuzWHOBuLOn21O3ooprnCBFWAgCtaMEDWwNbgf1Pig3
      # PgwOd1HeiQTKRuNCFDwNX1GJRN7Cyq6tY+ALQal3glDmWEMiyihUHViSsqux3c01
      # RAkyyOJAMOZ6+MbZ4HMWNVI9pKRTYY7IDxg3NWSvlCD3KmDuDt8YBuQftZMN+T8X
      # yMSa1wQda7ATlrsjUZL5LsEYO3qkho4ybffiFFDVz8QR/sO0TQg9uw6mggIghLAh
      # GsSUE9SpVZmu+1lZYV/+/KomGeyNlhfchgIVPApMLQS3j0kDgVeNsrsjfbDgCqsn
      # q3Ame+Roul54cv437F02ugt6JoxP76gNXXn8KdZPIDqOHWxMeS0=
      # =Grjx
      # -----END PGP SIGNATURE-----
      # gpg: Signature made Mon 18 Sep 2023 09:32:53 EDT
      # gpg:                using RSA key A0328CFFB93A17A79901FE7D4CB6D8EED3E87138
      # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" [full]
      # gpg:                 aka "Gerd Hoffmann <gerd@kraxel.org>" [full]
      # gpg:                 aka "Gerd Hoffmann (private) <kraxel@gmail.com>" [full]
      # Primary key fingerprint: A032 8CFF B93A 17A7 9901  FE7D 4CB6 D8EE D3E8 7138
      
      * tag 'firmware/edk2-20230918-pull-request' of https://gitlab.com/kraxel/qemu
      
      :
        tests/acpi: disallow virt/SSDT.memhp updates
        tests/acpi: update virt/SSDT.memhp
        edk2: update binaries to edk2-stable202308
        edk2: update submodule to edk2-stable202308
        edk2: workaround edk-stable202308 bug
        edk2: update build config
        edk2: update build script
        tests/acpi: allow virt/SSDT.memhp updates
      
      Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
      1361bba5
    • Stefan Hajnoczi's avatar
      Merge tag 'pull-ppc-20230918' of https://gitlab.com/danielhb/qemu into staging · 6a0eddb3
      Stefan Hajnoczi authored
      ppc patch queue for 2023-09-18:
      
      In this short queue we're making two important changes:
      
      - Nicholas Piggin is now the qemu-ppc maintainer. Cédric Le Goater and
      Daniel Barboza will act as backup during Nick's transition to this new
      role.
      
      - Support for NVIDIA V100 GPU with NVLink2 is dropped from qemu-ppc.
      Linux removed the same support back in 5.13, we're following suit now.
      
      A xive Coverity fix is also included.
      
      # -----BEGIN PGP SIGNATURE-----
      #
      # iIwEABYKADQWIQQX6/+ZI9AYAK8oOBk82cqW3gMxZAUCZQhPnBYcZGFuaWVsaGI0
      # MTNAZ21haWwuY29tAAoJEDzZypbeAzFk5QUBAJJNnCtv/SPP6bQVNGMgtfI9sz2z
      # MEttDa7SINyLCiVxAP0Y9z8ZHEj6vhztTX0AAv2QubCKWIVbJZbPV5RWrHCEBQ==
      # =y3nh
      # -----END PGP SIGNATURE-----
      # gpg: Signature made Mon 18 Sep 2023 09:24:44 EDT
      # gpg:                using EDDSA key 17EBFF9923D01800AF2838193CD9CA96DE033164
      # gpg:                issuer "danielhb413@gmail.com"
      # gpg: Good signature from "Daniel Henrique Barboza <danielhb413@gmail.com>" [unknown]
      # gpg: WARNING: The key's User ID is not certified with a trusted signature!
      # gpg:          There is no indication that the signature belongs to the owner.
      # Primary key fingerprint: 17EB FF99 23D0 1800 AF28  3819 3CD9 CA96 DE03 3164
      
      * tag 'pull-ppc-20230918' of https://gitlab.com/danielhb/qemu
      
      :
        spapr: Remove support for NVIDIA V100 GPU with NVLink2
        ppc/xive: Fix uint32_t overflow
        MAINTAINERS: Nick Piggin PPC maintainer, other PPC changes
      
      Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
      6a0eddb3
    • Stefan Hajnoczi's avatar
      Merge tag 'net-pull-request' of https://github.com/jasowang/qemu into staging · dd0c8498
      Stefan Hajnoczi authored
      # -----BEGIN PGP SIGNATURE-----
      # Version: GnuPG v1
      #
      # iQEcBAABAgAGBQJlB/SLAAoJEO8Ells5jWIR7EQH/1kAbxHcSGJXDOgQAXJ/rOZi
      # UKn3ugJzD0Hxd4Xz8cvdVLM+9/JoEEOK1uB+NIG7Ask/gA5D7eUYzaLtp1OJ8VNO
      # mamfKmn3EIBWJoLSHH19TKzfW2tGMJHQ0Nj+sbDQRkK5f2c7hwLTRXa1EmlJd4dB
      # VoVzX4OiJtrQyv4OVmpP/PSETXJDvYYX/DNcRl9/3ccKtQW/wVDI3YzrMzXrsgyc
      # w9ItJi8k+19mVH6RgQwciqRvTbVMdzkOxqvU//LY0TxnjsHfbyHr+KlNAa2WTY2N
      # QgpAlMZhHqUG6/XXAs0o2VEtA66zmw932Xfy/CZUEcdGWfkG/9CEVfbuT4CKGY4=
      # =tF7K
      # -----END PGP SIGNATURE-----
      # gpg: Signature made Mon 18 Sep 2023 02:56:11 EDT
      # gpg:                using RSA key EF04965B398D6211
      # gpg: Good signature from "Jason Wang (Jason Wang on RedHat) <jasowang@redhat.com>" [full]
      # Primary key fingerprint: 215D 46F4 8246 689E C77F  3562 EF04 965B 398D 6211
      
      * tag 'net-pull-request' of https://github.com/jasowang/qemu
      
      :
        net/tap: Avoid variable-length array
        net/dump: Avoid variable length array
        hw/net/rocker: Avoid variable length array
        hw/net/fsl_etsec/rings.c: Avoid variable length array
        net: add initial support for AF_XDP network backend
        tests: bump libvirt-ci for libasan and libxdp
        e1000e: rename e1000e_ba_state and e1000e_write_hdr_to_rx_buffers
        igb: packet-split descriptors support
        igb: add IPv6 extended headers traffic detection
        igb: RX payload guest writting refactoring
        igb: RX descriptors guest writting refactoring
        igb: rename E1000E_RingInfo_st
        igb: remove TCP ACK detection
        virtio-net: Add support for USO features
        virtio-net: Add USO flags to vhost support.
        tap: Add check for USO features
        tap: Add USO support to tap device.
      
      Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
      dd0c8498
    • Stefan Hajnoczi's avatar
      Merge tag 'pull-tcg-20230915-2' of https://gitlab.com/rth7680/qemu into staging · d7754940
      Stefan Hajnoczi authored
      *: Delete checks for old host definitions
      tcg/loongarch64: Generate LSX instructions
      fpu: Add conversions between bfloat16 and [u]int8
      fpu: Handle m68k extended precision denormals properly
      accel/tcg: Improve cputlb i/o organization
      accel/tcg: Simplify tlb_plugin_lookup
      accel/tcg: Remove false-negative halted assertion
      tcg: Add gvec compare with immediate and scalar operand
      tcg/aarch64: Emit BTI insns at jump landing pads
      
      [Resolved conflict between CPUINFO_PMULL and CPUINFO_BTI.
      --Stefan]
      
      * tag 'pull-tcg-20230915-2' of https://gitlab.com/rth7680/qemu
      
      : (39 commits)
        tcg: Map code_gen_buffer with PROT_BTI
        tcg/aarch64: Emit BTI insns at jump landing pads
        util/cpuinfo-aarch64: Add CPUINFO_BTI
        tcg: Add tcg_out_tb_start backend hook
        fpu: Handle m68k extended precision denormals properly
        fpu: Add conversions between bfloat16 and [u]int8
        accel/tcg: Introduce do_st16_mmio_leN
        accel/tcg: Introduce do_ld16_mmio_beN
        accel/tcg: Merge io_writex into do_st_mmio_leN
        accel/tcg: Merge io_readx into do_ld_mmio_beN
        accel/tcg: Replace direct use of io_readx/io_writex in do_{ld,st}_1
        accel/tcg: Merge cpu_transaction_failed into io_failed
        plugin: Simplify struct qemu_plugin_hwaddr
        accel/tcg: Use CPUTLBEntryFull.phys_addr in io_failed
        accel/tcg: Split out io_prepare and io_failed
        accel/tcg: Simplify tlb_plugin_lookup
        target/arm: Use tcg_gen_gvec_cmpi for compare vs 0
        tcg: Add gvec compare with immediate and scalar operand
        tcg/loongarch64: Implement 128-bit load & store
        tcg/loongarch64: Lower rotli_vec to vrotri
        ...
      
      Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
      d7754940
    • hongmianquan's avatar
      memory: avoid updating ioeventfds for some address_space · 544cff46
      hongmianquan authored
      
      When updating ioeventfds, we need to iterate all address spaces,
      but some address spaces do not register eventfd_add|del call when
      memory_listener_register() and they do nothing when updating ioeventfds.
      So we can skip these AS in address_space_update_ioeventfds().
      
      The overhead of memory_region_transaction_commit() can be significantly
      reduced. For example, a VM with 8 vhost net devices and each one has
      64 vectors, can reduce the time spent on memory_region_transaction_commit by 20%.
      
      Message-ID: <20230830032906.12488-1-hongmianquan@bytedance.com>
      Reviewed-by: default avatarPeter Xu <peterx@redhat.com>
      Signed-off-by: default avatarhongmianquan <hongmianquan@bytedance.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      544cff46
    • David Hildenbrand's avatar
      machine: Improve error message when using default RAM backend id · 41ddcd23
      David Hildenbrand authored
      
      For migration purposes, users might want to reuse the default RAM
      backend id, but specify a different memory backend.
      
      For example, to reuse "pc.ram" on q35, one has to set
          -machine q35,memory-backend=pc.ram
      Only then, can a memory backend with the id "pc.ram" be created
      manually.
      
      Let's improve the error message by improving the hint. Use
      error_append_hint() -- which in turn requires ERRP_GUARD().
      
      Message-ID: <20230906120503.359863-12-david@redhat.com>
      Suggested-by: default avatarThinerLogoer <logoerthiner1@163.com>
      Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@linaro.org>
      Tested-by: default avatarMario Casquero <mcasquer@redhat.com>
      Reviewed-by: default avatarMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      41ddcd23
    • David Hildenbrand's avatar
      softmmu/physmem: Hint that "readonly=on,rom=off" exists when opening file R/W... · 6da4b1c2
      David Hildenbrand authored
      softmmu/physmem: Hint that "readonly=on,rom=off" exists when opening file R/W for private mapping fails
      
      It's easy to miss that memory-backend-file with "share=off" (default)
      will always try opening the file R/W as default, and fail if we don't
      have write permissions to the file.
      
      In that case, the user has to explicit specify "readonly=on,rom=off" to
      get usable RAM, for example, for VM templating.
      
      Let's hint that '-object memory-backend-file,readonly=on,rom=off,...'
      exists to consume R/O files in a private mapping to create writable RAM,
      but only if we have permissions to open the file read-only.
      
      Message-ID: <20230906120503.359863-11-david@redhat.com>
      Suggested-by: default avatarThinerLogoer <logoerthiner1@163.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      6da4b1c2
    • David Hildenbrand's avatar
      docs: Start documenting VM templating · 9cd9313f
      David Hildenbrand authored
      
      Let's add some details about VM templating, focusing on the VM memory
      configuration only.
      
      There is much more to VM templating (VM state? block devices?), but I leave
      that as future work.
      
      Message-ID: <20230906120503.359863-10-david@redhat.com>
      Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@linaro.org>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      9cd9313f
    • David Hildenbrand's avatar
      docs: Don't mention "-mem-path" in multi-process.rst · 9e6180d2
      David Hildenbrand authored
      
      "-mem-path" corresponds to "memory-backend-file,share=off" and,
      therefore, creates a private COW mapping of the file. For multi-proces
      QEMU, we need proper shared file-backed memory.
      
      Let's make that clearer.
      
      Message-ID: <20230906120503.359863-9-david@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      9e6180d2
    • David Hildenbrand's avatar
      softmmu/physmem: Never return directories from file_ram_open() · ca01f1b8
      David Hildenbrand authored
      
      open() does not fail on directories when opening them readonly (O_RDONLY).
      
      Currently, we succeed opening such directories and fail later during
      mmap(), resulting in a misleading error message.
      
      $ ./qemu-system-x86_64 \
          -object memory-backend-file,id=ram0,mem-path=tmp,readonly=true,size=1g
       qemu-system-x86_64: unable to map backing store for guest RAM: No such device
      
      To identify directories and handle them accordingly in file_ram_open()
      also when readonly=true was specified, detect if we just opened a directory
      using fstat() instead. Then, fail file_ram_open() right away, similarly
      to how we now fail if the file does not exist and we want to open the
      file readonly.
      
      With this change, we get a nicer error message:
       qemu-system-x86_64: can't open backing store tmp for guest RAM: Is a directory
      
      Note that the only memory-backend-file will end up calling
      memory_region_init_ram_from_file() -> qemu_ram_alloc_from_file() ->
      file_ram_open().
      
      Message-ID: <20230906120503.359863-8-david@redhat.com>
      Reported-by: default avatarThiner Logoer <logoerthiner1@163.com>
      Reviewed-by: default avatarPeter Xu <peterx@redhat.com>
      Tested-by: default avatarMario Casquero <mcasquer@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      ca01f1b8
    • David Hildenbrand's avatar
      softmmu/physmem: Fail creation of new files in file_ram_open() with readonly=true · 4d6b23f7
      David Hildenbrand authored
      
      Currently, if a file does not exist yet, file_ram_open() will create new
      empty file and open it writable. However, it even does that when
      readonly=true was specified.
      
      Specifying O_RDONLY instead to create a new readonly file would
      theoretically work, however, ftruncate() will refuse to resize the new
      empty file and we'll get a warning:
          ftruncate: Invalid argument
      And later eventually more problems when actually mmap'ing that file and
      accessing it.
      
      If someone intends to let QEMU open+mmap a file read-only, better
      create+resize+fill that file ahead of time outside of QEMU context.
      
      We'll now fail with:
      ./qemu-system-x86_64 \
          -object memory-backend-file,id=ram0,mem-path=tmp,readonly=true,size=1g
      qemu-system-x86_64: can't open backing store tmp for guest RAM: No such file or directory
      
      All use cases of readonly files (R/O NVDIMMs, VM templating) work on
      existing files, so silently creating new files might just hide user
      errors when accidentally specifying a non-existent file.
      
      Note that the only memory-backend-file will end up calling
      memory_region_init_ram_from_file() -> qemu_ram_alloc_from_file() ->
      file_ram_open().
      
      Move error reporting to the single caller.
      
      Message-ID: <20230906120503.359863-7-david@redhat.com>
      Acked-by: default avatarPeter Xu <peterx@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      4d6b23f7
    • David Hildenbrand's avatar
      softmmu/physmem: Bail out early in ram_block_discard_range() with readonly files · b2cccb52
      David Hildenbrand authored
      
      fallocate() will fail, let's print a nicer error message.
      
      Message-ID: <20230906120503.359863-6-david@redhat.com>
      Suggested-by: default avatarPeter Xu <peterx@redhat.com>
      Reviewed-by: default avatarPeter Xu <peterx@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      b2cccb52
    • David Hildenbrand's avatar
      softmmu/physmem: Remap with proper protection in qemu_ram_remap() · 9e6b9f37
      David Hildenbrand authored
      
      Let's remap with the proper protection that we can derive from
      RAM_READONLY.
      
      Message-ID: <20230906120503.359863-5-david@redhat.com>
      Reviewed-by: default avatarPeter Xu <peterx@redhat.com>
      Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@linaro.org>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      9e6b9f37
    • David Hildenbrand's avatar
      backends/hostmem-file: Add "rom" property to support VM templating with R/O files · e92666b0
      David Hildenbrand authored
      
      For now, "share=off,readonly=on" would always result in us opening the
      file R/O and mmap'ing the opened file MAP_PRIVATE R/O -- effectively
      turning it into ROM.
      
      Especially for VM templating, "share=off" is a common use case. However,
      that use case is impossible with files that lack write permissions,
      because "share=off,readonly=on" will not give us writable RAM.
      
      The sole user of ROM via memory-backend-file are R/O NVDIMMs, but as we
      have users (Kata Containers) that rely on the existing behavior --
      malicious VMs should not be able to consume COW memory for R/O NVDIMMs --
      we cannot change the semantics of "share=off,readonly=on"
      
      So let's add a new "rom" property with on/off/auto values. "auto" is
      the default and what most people will use: for historical reasons, to not
      change the old semantics, it defaults to the value of the "readonly"
      property.
      
      For VM templating, one can now use:
          -object memory-backend-file,share=off,readonly=on,rom=off,...
      
      But we'll disallow:
          -object memory-backend-file,share=on,readonly=on,rom=off,...
      because we would otherwise get an error when trying to mmap the R/O file
      shared and writable. An explicit error message is cleaner.
      
      We will also disallow for now:
          -object memory-backend-file,share=off,readonly=off,rom=on,...
          -object memory-backend-file,share=on,readonly=off,rom=on,...
      It's not harmful, but also not really required for now.
      
      Alternatives that were abandoned:
      * Make "unarmed=on" for the NVDIMM set the memory region container
        readonly. We would still see a change of ROM->RAM and possibly run
        into memslot limits with vhost-user. Further, there might be use cases
        for "unarmed=on" that should still allow writing to that memory
        (temporary files, system RAM, ...).
      * Add a new "readonly=on/off/auto" parameter for NVDIMMs. Similar issues
        as with "unarmed=on".
      * Make "readonly" consume "on/off/file" instead of being a 'bool' type.
        This would slightly changes the behavior of the "readonly" parameter:
        values like true/false (as accepted by a 'bool'type) would no longer be
        accepted.
      
      Message-ID: <20230906120503.359863-4-david@redhat.com>
      Acked-by: default avatarMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      e92666b0
    • David Hildenbrand's avatar
      softmmu/physmem: Distinguish between file access mode and mmap protection · 5c52a219
      David Hildenbrand authored
      
      There is a difference between how we open a file and how we mmap it,
      and we want to support writable private mappings of readonly files. Let's
      define RAM_READONLY and RAM_READONLY_FD flags, to replace the single
      "readonly" parameter for file-related functions.
      
      In memory_region_init_ram_from_fd() and memory_region_init_ram_from_file(),
      initialize mr->readonly based on the new RAM_READONLY flag.
      
      While at it, add some RAM_* flags we missed to add to the list of accepted
      flags in the documentation of some functions.
      
      No change in functionality intended. We'll make use of both flags next
      and start setting them independently for memory-backend-file.
      
      Message-ID: <20230906120503.359863-3-david@redhat.com>
      Acked-by: default avatarPeter Xu <peterx@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      5c52a219
    • David Hildenbrand's avatar
      nvdimm: Reject writing label data to ROM instead of crashing QEMU · 3a125839
      David Hildenbrand authored
      
      Currently, when using a true R/O NVDIMM (ROM memory backend) with a label
      area, the VM can easily crash QEMU by trying to write to the label area,
      because the ROM memory is mmap'ed without PROT_WRITE.
      
          [root@vm-0 ~]# ndctl disable-region region0
          disabled 1 region
          [root@vm-0 ~]# ndctl zero-labels nmem0
          -> QEMU segfaults
      
      Let's remember whether we have a ROM memory backend and properly
      reject the write request:
      
          [root@vm-0 ~]# ndctl disable-region region0
          disabled 1 region
          [root@vm-0 ~]# ndctl zero-labels nmem0
          zeroed 0 nmem
      
      In comparison, on a system with a R/W NVDIMM:
      
          [root@vm-0 ~]# ndctl disable-region region0
          disabled 1 region
          [root@vm-0 ~]# ndctl zero-labels nmem0
          zeroed 1 nmem
      
      For ACPI, just return "unsupported", like if no label exists. For spapr,
      return "H_P2", similar to when no label area exists.
      
      Could we rely on the "unarmed" property? Maybe, but it looks cleaner to
      only disallow what certainly cannot work.
      
      After all "unarmed=on" primarily means: cannot accept persistent writes. In
      theory, there might be setups where devices with "unarmed=on" set could
      be used to host non-persistent data (temporary files, system RAM, ...); for
      example, in Linux, admins can overwrite the "readonly" setting and still
      write to the device -- which will work as long as we're not using ROM.
      Allowing writing label data in such configurations can make sense.
      
      Message-ID: <20230906120503.359863-2-david@redhat.com>
      Fixes: dbd730e8 ("nvdimm: check -object memory-backend-file, readonly=on option")
      Reviewed-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      3a125839
  3. Sep 18, 2023
Loading