All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <aliguori@us.ibm.com>
To: Paolo Bonzini <pbonzini@redhat.com>, qemu-devel@nongnu.org
Cc: aik@ozlabs.ru, agraf@suse.de, hpoussin@reactos.org,
	jan.kiszka@siemens.com, aurelien@aurel32.net
Subject: Re: [Qemu-devel] [PATCH 00/28] Memory API for 1.6: fix I/O port endianness mess
Date: Mon, 22 Jul 2013 10:34:04 -0500	[thread overview]
Message-ID: <87ip02wqvn.fsf@codemonkey.ws> (raw)
In-Reply-To: <1374501278-31549-1-git-send-email-pbonzini@redhat.com>

Paolo Bonzini <pbonzini@redhat.com> writes:

> This series fixes the I/O port endianness problems that came when
> port I/O was made to go through the normal dispatch path.  Targets
> that used isa_mmio to invoke cpu_inl and friends now tried to do
> byte swapping once more than they previously did, causing garbage
> to be written.
>
> This series drops isa_mmio and replace it with an alias of the
> root I/O memory region.  After applying back the LITTLE_ENDIAN
> mark for PortioLists, everything works as expected: the port memory
> regions appear directly in the FlatView with the right endianness,
> and MMIO is dispatched straight to them.
>
> PReP cannot use this due to the non-contiguous map, so we just
> make sure the prep_io_ops are marked DEVICE_NATIVE_ENDIAN; the swap
> will happen when prep_io_ops redispatch to the device.
>
> So we had a change that broke multiple ports, most of them
> under-maintained.  What better occasion to add a unit test?  This
> series does that, using the pc-testdev device as the harness.
> The test was run before and after the I/O changes (in particular
> on top of commit a014ed0, memory: accept mismatching sizes in
> memory_region_access_valid, 2013-05-24), and passes there too.
>
> This also found some unrelated problems caused by the new QOM cast in
> commit 7588e2b (pci: Fold host_buses list into PCIHostState functionality,
> 2013-06-06).
>
> I also smoke-tested prep, with the kernel that Herve provided, and
> pseries.  VGA works for both, which tests the PortioList path.
> Alexey tested Linux (with virtio) on pseries.
>
> Patches 1 to 15 fix all bugs and remove isa_mmio.
>
> Patches 16 to 23 prepare the boards so that the testcase runs
> successfully.  This includes adding missing devices and unbreaking
> other breakage.
>
> Patch 24 adds the test case, patches 25-27 fix big-endian split/combine,
> patch 28 adds a test case for that too.
>
> If preferred, I can prepare a pull request that merges the tests
> from an earlier branchpoint.  This makes it easy to run the tests
> on both the old and the new code.
>
> Paolo

Really nice series.  I'd prefer we simply got rid of the endianness flag
entirely but this is a good step.

Reviewed-by: Anthony Liguori <aliguori@us.ibm.com>

Regards,

Anthony Liguori

>
> Alexey Kardashevskiy (1):
>   spapr_pci: remove indirection for I/O port access
>
> Paolo Bonzini (27):
>   sh4: do not use isa_mmio
>   ppc_oldworld: do not use isa_mmio
>   ppc_newworld: do not use isa_mmio
>   prep: fix I/O port endianness
>   mips_jazz: do not use isa_mmio
>   mips_r4k: do not use isa_mmio
>   mips_malta: do not use isa_mmio
>   ppc440_bamboo: do not use isa_mmio
>   mipssim: do not use isa_mmio
>   mips_fulong2e: do not use isa_mmio
>   sparc64: remove indirection for I/O port access
>   ebus: do not use isa_mmio
>   isa_mmio: delete
>   Revert "ioport: remove LITTLE_ENDIAN mark for portio"
>   pc-testdev: support 8 and 16-bit accesses to 0xe0
>   pc-testdev: remove useless cpu_to_le64/le64_to_cpu
>   mips: degrade BIOS error to warning
>   sh4: unbreak r2d
>   sparc64: unbreak
>   default-configs: add test device to all machines supporting ISA
>   default-configs: add SuperIO to SH4
>   default-configs/ppc64: add all components of i82378 SuperIO chip used
>     by prep
>   qtest: add test for ISA I/O space endianness
>   memory: move functions around
>   memory: pass MemoryRegion to access_with_adjusted_size
>   memory: check memory region endianness, not target's
>   pc-testdev: add I/O port to test memory.c auto split/combine
>
>  default-configs/alpha-softmmu.mak    |   1 +
>  default-configs/mips-softmmu.mak     |   2 +-
>  default-configs/mips64-softmmu.mak   |   2 +-
>  default-configs/mips64el-softmmu.mak |   2 +-
>  default-configs/mipsel-softmmu.mak   |   2 +-
>  default-configs/ppc-softmmu.mak      |   1 +
>  default-configs/ppc64-softmmu.mak    |   7 +
>  default-configs/ppcemb-softmmu.mak   |   1 +
>  default-configs/sh4-softmmu.mak      |   9 +-
>  default-configs/sh4eb-softmmu.mak    |   9 +-
>  default-configs/sparc64-softmmu.mak  |   1 +
>  hw/isa/Makefile.objs                 |   1 -
>  hw/isa/isa_mmio.c                    |  81 ---------
>  hw/mips/gt64xxx_pci.c                |   3 +-
>  hw/mips/mips_fulong2e.c              |   3 +-
>  hw/mips/mips_jazz.c                  |   8 +-
>  hw/mips/mips_malta.c                 |   3 +-
>  hw/mips/mips_mipssim.c               |   8 +-
>  hw/mips/mips_r4k.c                   |   6 +-
>  hw/misc/pc-testdev.c                 |  28 +++-
>  hw/pci-host/apb.c                    | 101 ++++-------
>  hw/pci-host/bonito.c                 |  25 ++-
>  hw/ppc/mac_newworld.c                |   5 +-
>  hw/ppc/mac_oldworld.c                |   5 +-
>  hw/ppc/ppc440_bamboo.c               |   5 +-
>  hw/ppc/prep.c                        |   2 +-
>  hw/ppc/spapr_pci.c                   |  41 +----
>  hw/sh4/sh_pci.c                      |  42 +++--
>  hw/sparc64/sun4u.c                   |   6 +-
>  include/hw/isa/isa.h                 |   3 -
>  ioport.c                             |   1 +
>  memory.c                             | 101 +++++------
>  tests/Makefile                       |  14 +-
>  tests/endianness-test.c              | 316 +++++++++++++++++++++++++++++++++++
>  34 files changed, 543 insertions(+), 302 deletions(-)
>  delete mode 100644 hw/isa/isa_mmio.c
>  create mode 100644 tests/endianness-test.c
>
> -- 
> 1.8.1.4

  parent reply	other threads:[~2013-07-22 15:34 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-22 13:54 [Qemu-devel] [PATCH 00/28] Memory API for 1.6: fix I/O port endianness mess Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 01/28] sh4: do not use isa_mmio Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 02/28] ppc_oldworld: " Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 03/28] ppc_newworld: " Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 04/28] spapr_pci: remove indirection for I/O port access Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 05/28] prep: fix I/O port endianness Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 06/28] mips_jazz: do not use isa_mmio Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 07/28] mips_r4k: " Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 08/28] mips_malta: " Paolo Bonzini
2013-08-28 11:03   ` Aurelien Jarno
2013-08-28 11:13     ` Aurelien Jarno
2013-08-28 11:30       ` Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 09/28] ppc440_bamboo: " Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 10/28] mipssim: " Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 11/28] mips_fulong2e: " Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 12/28] sparc64: remove indirection for I/O port access Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 13/28] ebus: do not use isa_mmio Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 14/28] isa_mmio: delete Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 15/28] Revert "ioport: remove LITTLE_ENDIAN mark for portio" Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 16/28] pc-testdev: support 8 and 16-bit accesses to 0xe0 Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 17/28] pc-testdev: remove useless cpu_to_le64/le64_to_cpu Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 18/28] mips: degrade BIOS error to warning Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 19/28] sh4: unbreak r2d Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 20/28] sparc64: unbreak Paolo Bonzini
2013-07-22 15:32   ` Andreas Färber
2013-07-22 13:54 ` [Qemu-devel] [PATCH 21/28] default-configs: add test device to all machines supporting ISA Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 22/28] default-configs: add SuperIO to SH4 Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 23/28] default-configs/ppc64: add all components of i82378 SuperIO chip used by prep Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 24/28] qtest: add test for ISA I/O space endianness Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 25/28] memory: move functions around Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 26/28] memory: pass MemoryRegion to access_with_adjusted_size Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 27/28] memory: check memory region endianness, not target's Paolo Bonzini
2013-07-22 13:54 ` [Qemu-devel] [PATCH 28/28] pc-testdev: add I/O port to test memory.c auto split/combine Paolo Bonzini
2013-07-22 14:32 ` [Qemu-devel] [PATCH 00/28] Memory API for 1.6: fix I/O port endianness mess Peter Maydell
2013-07-22 14:36   ` Paolo Bonzini
2013-07-22 15:04     ` Peter Maydell
2013-07-22 15:07       ` Paolo Bonzini
2013-07-22 20:16         ` Hervé Poussineau
2013-07-22 21:22           ` Alexander Graf
2013-07-22 21:26           ` Andreas Färber
2013-07-23  9:30           ` Paolo Bonzini
2013-07-22 15:34 ` Anthony Liguori [this message]
2013-07-25  5:26   ` Benjamin Herrenschmidt
2013-07-25  5:47     ` Benjamin Herrenschmidt
2013-07-25  6:04       ` Jan Kiszka
2013-07-25  6:59         ` Alexey Kardashevskiy
2013-07-25  8:41         ` Paolo Bonzini
2013-07-25  8:40       ` Paolo Bonzini
2013-07-25  9:00         ` Benjamin Herrenschmidt
2013-07-25  9:38           ` Peter Maydell
2013-07-25  9:40             ` Paolo Bonzini
2013-07-25 10:25               ` Benjamin Herrenschmidt
2013-07-25 10:23             ` Benjamin Herrenschmidt
2013-07-25 10:25               ` Paolo Bonzini
2013-07-25 13:25                 ` Anthony Liguori
2013-07-25 13:28                   ` Peter Maydell
2013-07-25 13:33                     ` Paolo Bonzini
2013-07-25 13:45                       ` Peter Maydell
2013-07-25 14:44                         ` Anthony Liguori
2013-07-25 15:16                         ` Anthony Liguori
2013-07-25 13:23           ` Anthony Liguori
2013-07-25 14:19 ` Anthony Liguori

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87ip02wqvn.fsf@codemonkey.ws \
    --to=aliguori@us.ibm.com \
    --cc=agraf@suse.de \
    --cc=aik@ozlabs.ru \
    --cc=aurelien@aurel32.net \
    --cc=hpoussin@reactos.org \
    --cc=jan.kiszka@siemens.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.