On Thu, Sep 03, 2026 at 01:35:56PM -0600, Mathieu Poirier wrote: > From: Jean-Philippe Brucker <[email protected]> > > Add a function to register a notifier that is invoked when ROMs get > loaded into guest memory. > > It will be used by Arm confidential guest support, in order to register > all blobs loaded into memory with KVM, so that their content is moved > into Realm state and measured into the initial VM state. > > Signed-off-by: Jean-Philippe Brucker <[email protected]> > Signed-off-by: Lorenzo Pieralisi <[email protected]> > Signed-off-by: Mathieu Poirier <[email protected]> > --- > hw/core/loader.c | 15 +++++++++++++++ > include/hw/core/loader.h | 17 +++++++++++++++++ > 2 files changed, 32 insertions(+) > > diff --git a/hw/core/loader.c b/hw/core/loader.c > index 5cbfba0a86d2..388f10e828db 100644 > --- a/hw/core/loader.c > +++ b/hw/core/loader.c > @@ -74,6 +74,8 @@ > #endif > > static int roms_loaded; > +static NotifierList rom_loader_notifier = > + NOTIFIER_LIST_INITIALIZER(rom_loader_notifier); > > /* return the size or -1 if error */ > int64_t get_image_size(const char *filename, Error **errp) > @@ -1201,6 +1203,11 @@ MemoryRegion *rom_add_blob(const char *name, const > void *blob, size_t len, > return mr; > } > > +void rom_add_load_notifier(Notifier *notifier) > +{ > + notifier_list_add(&rom_loader_notifier, notifier); > +} > + > /* This function is specific for elf program because we don't need to > allocate > * all the rom. We just allocate the first part and the rest is just zeros. > This > * is why romsize and datasize are different. Also, this function takes its > own > @@ -1242,6 +1249,7 @@ ssize_t rom_add_option(const char *file, int32_t > bootindex) > static void rom_reset(void *unused) > { > Rom *rom; > + RomLoaderNotifyData notify; > > QTAILQ_FOREACH(rom, &roms, next) { > if (rom->fw_file) { > @@ -1290,6 +1298,13 @@ static void rom_reset(void *unused) > address_space_flush_icache_range(rom->as, rom->addr, rom->datasize); > > trace_loader_write_rom(rom->name, rom->addr, rom->datasize, > rom->isrom); > + > + notify = (RomLoaderNotifyData) { > + .addr = rom->addr, > + .len = rom->datasize, > + .data = rom->data, > + }; > + notifier_list_notify(&rom_loader_notifier, ¬ify);
I think it will easier to review this if it's squashed into the next patch where the fields are utilized. -Mike
