This is the result of the previous discussion of: * "[PATCH v2] softmmu/physmem: try opening file readonly before failure in file_ram_open" [1] * "[PATCH v1 0/3] softmmu/physmem: file_ram_open() readonly improvements" [2]
After looking into various ways to avoid a new parameter for memory-backend-file to cleanly support VM templating with R/O files, I concluded that it might be easier and cleaner to hust have a new parameter. The alternatives all had their own problems. Looking back, we could have designed the "readonly=on/off" parameter slightly differently. So this series adds a new "rom=on/off/auto" option and wires it up internally. It uses new internal RAM flags to improve qemu_ram_remap() and ram_block_discard_range(). Further, improve file_ram_open() with readonly=on and update+add some documentation. While working on this and testing some configurations, I realized that an NVDIMM with label data on ROM does not work as expected (QEMU crashes). Fix included as patch #1. v2 -> v3: - "softmmu/physmem: Distinguish between file access mode and mmap protection" -> Use !!(ram_flags & RAM_READONLY); - "backends/hostmem-file: Add "rom" property to support VM templating with R/O files" -> Improved documentation in qapi/qom.json and qemu-options.hx - "docs: Start documenting VM templating" -> Create proper RST and link it -> Add "Security Alert" section -> Add MAINTAINER entry - "softmmu/physmem: Hint that "readonly=on,rom=off" exists when opening file R/W for private mapping fails" -> Added - "machine: Improve error message when using default RAM backend id" -> Added Cc: Paolo Bonzini <[email protected]> Cc: Peter Xu <[email protected]> Cc: Igor Mammedov <[email protected]> Cc: Thiner Logoer <[email protected]> Cc: "Philippe Mathieu-Daudé" <[email protected]> Cc: Daniel P. Berrangé <[email protected]> Cc: Stefan Hajnoczi <[email protected]> Cc: Elena Ufimtseva <[email protected]> Cc: Jagannathan Raman <[email protected]> Cc: "Michael S. Tsirkin" <[email protected]> Cc: Ani Sinha <[email protected]> Cc: Xiao Guangrong <[email protected]> Cc: Daniel Henrique Barboza <[email protected]> Cc: Greg Kurz <[email protected]> Cc: Eric Blake <[email protected]> Cc: Markus Armbruster <[email protected]> Cc: "Daniel P. Berrangé" <[email protected]> Cc: Eduardo Habkost <[email protected]> [1] https://lkml.kernel.org/r/[email protected] [2] https://lkml.kernel.org/r/[email protected] David Hildenbrand (11): nvdimm: Reject writing label data to ROM instead of crashing QEMU softmmu/physmem: Distinguish between file access mode and mmap protection backends/hostmem-file: Add "rom" property to support VM templating with R/O files softmmu/physmem: Remap with proper protection in qemu_ram_remap() softmmu/physmem: Bail out early in ram_block_discard_range() with readonly files softmmu/physmem: Fail creation of new files in file_ram_open() with readonly=true softmmu/physmem: Never return directories from file_ram_open() docs: Don't mention "-mem-path" in multi-process.rst docs: Start documenting VM templating softmmu/physmem: Hint that "readonly=on,rom=off" exists when opening file R/W for private mapping fails machine: Improve error message when using default RAM backend id MAINTAINERS | 1 + backends/hostmem-file.c | 61 ++++++++++++++++- docs/devel/multi-process.rst | 5 +- docs/system/index.rst | 1 + docs/system/vm-templating.rst | 125 ++++++++++++++++++++++++++++++++++ hw/acpi/nvdimm.c | 11 ++- hw/core/machine.c | 4 +- hw/mem/nvdimm.c | 10 ++- hw/ppc/spapr_nvdimm.c | 3 +- include/exec/memory.h | 14 ++-- include/exec/ram_addr.h | 8 +-- include/hw/mem/nvdimm.h | 6 ++ qapi/qom.json | 17 ++++- qemu-options.hx | 16 ++++- softmmu/memory.c | 8 +-- softmmu/physmem.c | 93 +++++++++++++++++++------ 16 files changed, 336 insertions(+), 47 deletions(-) create mode 100644 docs/system/vm-templating.rst -- 2.41.0
