Message ID | 20201021210922.572955-2-alxndr@bu.edu |
---|---|
State | Superseded |
Headers | show |
Series | Add a Generic Virtual Device Fuzzer | expand |
Hi Alex, On Wednesday, 2020-10-21 at 17:09:07 -04, Alexander Bulekov wrote: > Acked-by: Paolo Bonzini <pbonzini@redhat.com> > Signed-off-by: Alexander Bulekov <alxndr@bu.edu> > --- > include/exec/memory.h | 5 +++++ > softmmu/memory.c | 9 +++++++++ > 2 files changed, 14 insertions(+) > > diff --git a/include/exec/memory.h b/include/exec/memory.h > index 622207bde1..042918dd16 100644 > --- a/include/exec/memory.h > +++ b/include/exec/memory.h > @@ -719,6 +719,11 @@ static inline FlatView *address_space_to_flatview(AddressSpace *as) > return qatomic_rcu_read(&as->current_map); > } > > +typedef int (*flatview_cb)(Int128 start, > + Int128 len, > + const MemoryRegion*, void*); > + > +void flatview_for_each_range(FlatView *fv, flatview_cb cb , void *opaque); > > /** > * struct MemoryRegionSection: describes a fragment of a #MemoryRegion > diff --git a/softmmu/memory.c b/softmmu/memory.c > index 403ff3abc9..c46b0c6d65 100644 > --- a/softmmu/memory.c > +++ b/softmmu/memory.c > @@ -656,6 +656,15 @@ static void render_memory_region(FlatView *view, > } > } > > +void flatview_for_each_range(FlatView *fv, flatview_cb cb , void *opaque) > +{ > + FlatRange *fr; Just to be complete, you probably should check that both fv and cb are not NULL here - if not using an explicit if/return, at least with assertions just in case a developer does something silly... > + FOR_EACH_FLAT_RANGE(fr, fv) { > + if (cb(fr->addr.start, fr->addr.size, fr->mr, opaque)) > + break; > + } > +} > + > static MemoryRegion *memory_region_get_flatview_root(MemoryRegion *mr) > { > while (mr->enabled) { Otherwise, all looks good, so: Reviewed-by: Darren Kenny <darren.kenny@oracle.com> Thanks, Darren.
diff --git a/include/exec/memory.h b/include/exec/memory.h index 622207bde1..042918dd16 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -719,6 +719,11 @@ static inline FlatView *address_space_to_flatview(AddressSpace *as) return qatomic_rcu_read(&as->current_map); } +typedef int (*flatview_cb)(Int128 start, + Int128 len, + const MemoryRegion*, void*); + +void flatview_for_each_range(FlatView *fv, flatview_cb cb , void *opaque); /** * struct MemoryRegionSection: describes a fragment of a #MemoryRegion diff --git a/softmmu/memory.c b/softmmu/memory.c index 403ff3abc9..c46b0c6d65 100644 --- a/softmmu/memory.c +++ b/softmmu/memory.c @@ -656,6 +656,15 @@ static void render_memory_region(FlatView *view, } } +void flatview_for_each_range(FlatView *fv, flatview_cb cb , void *opaque) +{ + FlatRange *fr; + FOR_EACH_FLAT_RANGE(fr, fv) { + if (cb(fr->addr.start, fr->addr.size, fr->mr, opaque)) + break; + } +} + static MemoryRegion *memory_region_get_flatview_root(MemoryRegion *mr) { while (mr->enabled) {