[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GIT PULL 10/12] softmmu/physmem: Hint that "readonly=on, rom=off" exist
From: |
David Hildenbrand |
Subject: |
[GIT PULL 10/12] softmmu/physmem: Hint that "readonly=on, rom=off" exists when opening file R/W for private mapping fails |
Date: |
Tue, 19 Sep 2023 12:30:27 +0200 |
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: ThinerLogoer <logoerthiner1@163.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
---
softmmu/physmem.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/softmmu/physmem.c b/softmmu/physmem.c
index f1cd3ec28a..4f6ca653b3 100644
--- a/softmmu/physmem.c
+++ b/softmmu/physmem.c
@@ -1969,6 +1969,25 @@ RAMBlock *qemu_ram_alloc_from_file(ram_addr_t size,
MemoryRegion *mr,
if (fd < 0) {
error_setg_errno(errp, -fd, "can't open backing store %s for guest
RAM",
mem_path);
+ if (!(ram_flags & RAM_READONLY_FD) && !(ram_flags & RAM_SHARED) &&
+ fd == -EACCES) {
+ /*
+ * If we can open the file R/O (note: will never create a new file)
+ * and we are dealing with a private mapping, there are still ways
+ * to consume such files and get RAM instead of ROM.
+ */
+ fd = file_ram_open(mem_path, memory_region_name(mr), true,
+ &created);
+ if (fd < 0) {
+ return NULL;
+ }
+ assert(!created);
+ close(fd);
+ error_append_hint(errp, "Consider opening the backing store"
+ " read-only but still creating writable RAM using"
+ " '-object memory-backend-file,readonly=on,rom=off...'"
+ " (see \"VM templating\" documentation)\n");
+ }
return NULL;
}
--
2.41.0
- [GIT PULL 00/12] Host Memory Backends and Memory devices queue 2023-09-19, David Hildenbrand, 2023/09/19
- [GIT PULL 04/12] softmmu/physmem: Remap with proper protection in qemu_ram_remap(), David Hildenbrand, 2023/09/19
- [GIT PULL 10/12] softmmu/physmem: Hint that "readonly=on, rom=off" exists when opening file R/W for private mapping fails,
David Hildenbrand <=
- [GIT PULL 01/12] nvdimm: Reject writing label data to ROM instead of crashing QEMU, David Hildenbrand, 2023/09/19
- [GIT PULL 08/12] docs: Don't mention "-mem-path" in multi-process.rst, David Hildenbrand, 2023/09/19
- [GIT PULL 03/12] backends/hostmem-file: Add "rom" property to support VM templating with R/O files, David Hildenbrand, 2023/09/19
- [GIT PULL 05/12] softmmu/physmem: Bail out early in ram_block_discard_range() with readonly files, David Hildenbrand, 2023/09/19
- [GIT PULL 02/12] softmmu/physmem: Distinguish between file access mode and mmap protection, David Hildenbrand, 2023/09/19
- [GIT PULL 06/12] softmmu/physmem: Fail creation of new files in file_ram_open() with readonly=true, David Hildenbrand, 2023/09/19
- [GIT PULL 11/12] machine: Improve error message when using default RAM backend id, David Hildenbrand, 2023/09/19
- [GIT PULL 09/12] docs: Start documenting VM templating, David Hildenbrand, 2023/09/19
- [GIT PULL 07/12] softmmu/physmem: Never return directories from file_ram_open(), David Hildenbrand, 2023/09/19
- [GIT PULL 12/12] memory: avoid updating ioeventfds for some address_space, David Hildenbrand, 2023/09/19