From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: "Mark Cave-Ayland" <mark.cave-ayland@ilande.co.uk>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Cédric Le Goater" <clg@kaod.org>
Cc: laurent@vivier.eu, elliotnunn@fastmail.com, qemu-devel@nongnu.org
Subject: Re: [PATCH 1/2] nubus-device: round Declaration ROM memory region address to qemu_target_page_size()
Date: Mon, 8 Jan 2024 13:01:00 +0100 [thread overview]
Message-ID: <685bc632-4cdb-499e-a23a-584578792681@linaro.org> (raw)
In-Reply-To: <20240107212538.227627-2-mark.cave-ayland@ilande.co.uk>
On 7/1/24 22:25, Mark Cave-Ayland wrote:
> Declaration ROM binary images can be any arbitrary size, however if a host ROM
> memory region is not aligned to qemu_target_page_size() then we fail the
> "assert(!(iotlb & ~TARGET_PAGE_MASK))" check in tlb_set_page_full().
IIUC this isn't specific to NuBus but to any ROM used to execute code
in place.
Shouldn't this be handled in memory_region_init_rom()?
> Ensure that the host ROM memory region is aligned to qemu_target_page_size()
> and adjust the offset at which the Declaration ROM image is loaded so that the
> image is still aligned to the end of the Nubus slot.
>
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
> hw/nubus/nubus-device.c | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/hw/nubus/nubus-device.c b/hw/nubus/nubus-device.c
> index 49008e4938..e4f824d58b 100644
> --- a/hw/nubus/nubus-device.c
> +++ b/hw/nubus/nubus-device.c
> @@ -10,6 +10,7 @@
>
> #include "qemu/osdep.h"
> #include "qemu/datadir.h"
> +#include "exec/target_page.h"
> #include "hw/irq.h"
> #include "hw/loader.h"
> #include "hw/nubus/nubus.h"
> @@ -30,7 +31,7 @@ static void nubus_device_realize(DeviceState *dev, Error **errp)
> NubusDevice *nd = NUBUS_DEVICE(dev);
> char *name, *path;
> hwaddr slot_offset;
> - int64_t size;
> + int64_t size, align_size;
> int ret;
>
> /* Super */
> @@ -76,16 +77,23 @@ static void nubus_device_realize(DeviceState *dev, Error **errp)
> }
>
> name = g_strdup_printf("nubus-slot-%x-declaration-rom", nd->slot);
> - memory_region_init_rom(&nd->decl_rom, OBJECT(dev), name, size,
> +
> + /*
> + * Ensure ROM memory region is aligned to target page size regardless
> + * of the size of the Declaration ROM image
> + */
> + align_size = ROUND_UP(size, qemu_target_page_size());
> + memory_region_init_rom(&nd->decl_rom, OBJECT(dev), name, align_size,
> &error_abort);
> - ret = load_image_mr(path, &nd->decl_rom);
> + ret = load_image_size(path, memory_region_get_ram_ptr(&nd->decl_rom) +
> + (uintptr_t)align_size - size, size);
> g_free(path);
> g_free(name);
> if (ret < 0) {
> error_setg(errp, "could not load romfile \"%s\"", nd->romfile);
> return;
> }
> - memory_region_add_subregion(&nd->slot_mem, NUBUS_SLOT_SIZE - size,
> + memory_region_add_subregion(&nd->slot_mem, NUBUS_SLOT_SIZE - align_size,
> &nd->decl_rom);
> }
> }
next prev parent reply other threads:[~2024-01-08 12:01 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-07 21:25 [PATCH 0/2] nubus: add nubus-virtio-mmio device Mark Cave-Ayland
2024-01-07 21:25 ` [PATCH 1/2] nubus-device: round Declaration ROM memory region address to qemu_target_page_size() Mark Cave-Ayland
2024-01-08 12:01 ` Philippe Mathieu-Daudé [this message]
2024-01-08 12:46 ` Mark Cave-Ayland
2024-01-08 13:17 ` Philippe Mathieu-Daudé
2024-01-08 19:21 ` Mark Cave-Ayland
2024-01-07 21:25 ` [PATCH 2/2] nubus: add nubus-virtio-mmio device Mark Cave-Ayland
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=685bc632-4cdb-499e-a23a-584578792681@linaro.org \
--to=philmd@linaro.org \
--cc=clg@kaod.org \
--cc=elliotnunn@fastmail.com \
--cc=kraxel@redhat.com \
--cc=laurent@vivier.eu \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).