Avi Kivity <a...@redhat.com> writes: > Many listeners don't need to respond to all MemoryListener callbacks; > provide suitable defaults instead. > > Signed-off-by: Avi Kivity <a...@redhat.com> > --- > memory.c | 15 +++++++++++++++ > memory.h | 21 +++++++++++++++++++++ > 2 files changed, 36 insertions(+) > > diff --git a/memory.c b/memory.c > index b58b97c..efefcb8 100644 > --- a/memory.c > +++ b/memory.c > @@ -1514,6 +1514,21 @@ void memory_listener_unregister(MemoryListener > *listener) > QTAILQ_REMOVE(&memory_listeners, listener, link); > } > > +void memory_listener_default_global(MemoryListener *listener) > +{ > +} > + > +void memory_listener_default_section(MemoryListener *listener, > + MemoryRegionSection *section) > +{ > +} > + > +void memory_listener_default_eventfd(MemoryListener *listener, > + MemoryRegionSection *section, > + bool match_data, uint64_t data, > EventNotifier *e) > +{ > +} > + > void address_space_init(AddressSpace *as, MemoryRegion *root) > { > memory_region_transaction_begin(); > diff --git a/memory.h b/memory.h > index 46bc5e1..0ef95cb 100644 > --- a/memory.h > +++ b/memory.h > @@ -223,6 +223,27 @@ struct MemoryListener { > QTAILQ_ENTRY(MemoryListener) link; > }; > > +#define MEMORY_LISTENER_DEFAULT_OPS \ > + .begin = memory_listener_default_global, \ > + .commit = memory_listener_default_global, \ > + .region_add = memory_listener_default_section, \ > + .region_del = memory_listener_default_section, \ > + .region_nop = memory_listener_default_section, \ > + .log_start = memory_listener_default_section, \ > + .log_stop = memory_listener_default_section, \ > + .log_sync = memory_listener_default_section, \ > + .log_global_start = memory_listener_default_global, \ > + .log_global_stop = memory_listener_default_global, \ > + .eventfd_add = memory_listener_default_eventfd, \ > + .eventfd_del = memory_listener_default_eventfd \ > + > +void memory_listener_default_global(MemoryListener *listener); > +void memory_listener_default_section(MemoryListener *listener, > + MemoryRegionSection *section); > +void memory_listener_default_eventfd(MemoryListener *listener, > + MemoryRegionSection *section, > + bool match_data, uint64_t data, > EventNotifier *e); > + > /** > * memory_region_init: Initialize a memory region > *
I think it'd be nicer to check for NULL when invoking the functions in the memory core. Then you avoid the exported stub functions entirely. Regards, Anthony Liguori > -- > 1.7.12