Message ID | 1373661046-23421-1-git-send-email-aliguori@us.ibm.com |
---|---|
State | New |
Headers | show |
On 12.07.2013, at 22:30, Anthony Liguori wrote: > Setting it to LE forces a byte swap when host != guest endian but > this makes no sense at all. > > Herve made the suggestion upon observing that word writes/reads > were broken into byte writes/reads in such a way as to assume > devices are interpret registers as LE. > > However, even if this were a problem, marking the region as LE is > not useful because what's essentially happening here is that LE is > open coded. So by marking it LE in MemoryRegionOps, we're doing a > superflous swap. > > Now, the portio code is suspicious to begin with. The dispatch > layer really has no purpose in splitting I/O requests in the first > place... > > Cc: Hervé Poussineau <hpoussin@reactos.org> > Cc: Alex Graf <agraf@suse.de> > Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> > Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> Acked-by: Alexander Graf <agraf@suse.de> Let's take a look at the PReP breakage with a test case after we fixed everyone else again. Alex > --- > ioport.c | 1 - > 1 file changed, 1 deletion(-) > > diff --git a/ioport.c b/ioport.c > index 79b7f1a..89b17d6 100644 > --- a/ioport.c > +++ b/ioport.c > @@ -183,7 +183,6 @@ static void portio_write(void *opaque, hwaddr addr, uint64_t data, > static const MemoryRegionOps portio_ops = { > .read = portio_read, > .write = portio_write, > - .endianness = DEVICE_LITTLE_ENDIAN, > .valid.unaligned = true, > .impl.unaligned = true, > }; > -- > 1.8.0 >
Applied. Thanks. Regards, Anthony Liguori
diff --git a/ioport.c b/ioport.c index 79b7f1a..89b17d6 100644 --- a/ioport.c +++ b/ioport.c @@ -183,7 +183,6 @@ static void portio_write(void *opaque, hwaddr addr, uint64_t data, static const MemoryRegionOps portio_ops = { .read = portio_read, .write = portio_write, - .endianness = DEVICE_LITTLE_ENDIAN, .valid.unaligned = true, .impl.unaligned = true, };
Setting it to LE forces a byte swap when host != guest endian but this makes no sense at all. Herve made the suggestion upon observing that word writes/reads were broken into byte writes/reads in such a way as to assume devices are interpret registers as LE. However, even if this were a problem, marking the region as LE is not useful because what's essentially happening here is that LE is open coded. So by marking it LE in MemoryRegionOps, we're doing a superflous swap. Now, the portio code is suspicious to begin with. The dispatch layer really has no purpose in splitting I/O requests in the first place... Cc: Hervé Poussineau <hpoussin@reactos.org> Cc: Alex Graf <agraf@suse.de> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> --- ioport.c | 1 - 1 file changed, 1 deletion(-)