On Wed, 2 Sep 2015 11:25:22 +0800 Jason Wang <jasow...@redhat.com> wrote:
> There's no need to adjust endianness for zero length eventfd since the > data wrote was actually ignored by kernel. So skip the adjust in this > case to fix a possible crash when trying to use wildcard mmio eventfd > in ppc. > > Cc: Greg Kurz <gk...@linux.vnet.ibm.com> > Cc: Peter Maydell <peter.mayd...@linaro.org> > Cc: Paolo Bonzini <pbonz...@redhat.com> > Signed-off-by: Jason Wang <jasow...@redhat.com> > --- Indeed, this patch prevents the crash to occur on ppc64. Acked-by: Greg Kurz <gk...@linux.vnet.ibm.com> > memory.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/memory.c b/memory.c > index 0d8b2d9..de2d999 100644 > --- a/memory.c > +++ b/memory.c > @@ -1653,7 +1653,9 @@ void memory_region_add_eventfd(MemoryRegion *mr, > }; > unsigned i; > > - adjust_endianness(mr, &mrfd.data, size); > + if (size) { > + adjust_endianness(mr, &mrfd.data, size); > + } > memory_region_transaction_begin(); > for (i = 0; i < mr->ioeventfd_nb; ++i) { > if (memory_region_ioeventfd_before(mrfd, mr->ioeventfds[i])) { > @@ -1686,7 +1688,9 @@ void memory_region_del_eventfd(MemoryRegion *mr, > }; > unsigned i; > > - adjust_endianness(mr, &mrfd.data, size); > + if (size) { > + adjust_endianness(mr, &mrfd.data, size); > + } > memory_region_transaction_begin(); > for (i = 0; i < mr->ioeventfd_nb; ++i) { > if (memory_region_ioeventfd_equal(mrfd, mr->ioeventfds[i])) {