diff options
author | David Hildenbrand <david@redhat.com> | 2023-09-06 14:05:02 +0200 |
---|---|---|
committer | David Hildenbrand <david@redhat.com> | 2023-09-19 10:23:21 +0200 |
commit | 6da4b1c25d89cc8e8d1be40b96602d08a3e88e0c (patch) | |
tree | 0530f99aad6da4cdb606326b367d59b313b334bc /softmmu | |
parent | 9cd9313fc3cb94243512bf36d0d67d4dbd60d6f1 (diff) |
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: ThinerLogoer <logoerthiner1@163.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
Diffstat (limited to 'softmmu')
-rw-r--r-- | softmmu/physmem.c | 19 |
1 files changed, 19 insertions, 0 deletions
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; } |