All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCHv2 00/10] Clean up page size handling for ppc 64-bit hash MMUs with TCG
@ 2016-01-27 10:13 David Gibson
  2016-01-27 10:13 ` [Qemu-devel] [PATCHv2 01/10] target-ppc: Remove unused kvmppc_read_segment_page_sizes() stub David Gibson
                   ` (10 more replies)
  0 siblings, 11 replies; 33+ messages in thread
From: David Gibson @ 2016-01-27 10:13 UTC (permalink / raw)
  To: benh; +Cc: lvivier, thuth, aik, agraf, qemu-devel, qemu-ppc, David Gibson

Encoding of page sizes on 64-bit hash MMUs for Power is rather arcane,
involving control bits in both the SLB and HPTE.  At present we
support a few of the options, but far fewer than real hardware.

We're able to get away with that in practice, because guests use a
device tree property to determine which page sizes are available and
we are setting that to match.  However, the fact that the actual code
doesn't necessarily what we put into the table of available page sizes
is another ugliness.

This series makes a number of cleanups to the page size handling.  The
upshot is that afterwards the softmmu code operates off the same page
size encoding table that is advertised to the guests, ensuring that
they will be in sync.

Finally, we extend the table of allowed sizes for POWER7 and POWER8 to
include the options allowed in hardware (including MPSS).  We can fix
other hash MMU based CPUs in future if anyone cares enough.

For a simple benchmark I timed fully booting then cleanly shutting
down a TCG guest (RHEL7.2 userspace with a recent upstream kernel).
Repeated 5 times on the current master branch, my current ppc-for-2.6
branch and this branch.  It looks like it improves speed, although the
difference is pretty much negligible:

master:		2m25 2m28 2m26 2m26 2m26
ppc-for-2.6:    2m26 2m25 2m26 2m27 2m25
this series:    2m20 2m23 2m23 2m25 2m21

Please review, and I'll fold into ppc-for-2.6 for my next pull.

Changes since v1:
  * Fix a couple of simple but serious bugs in logic
  * Did some rudimentary benchmarking
Changes since RFC:
  * Moved lookup of SLB encodings table from SLB lookup time to SLB
      store time

David Gibson (10):
  target-ppc: Remove unused kvmppc_read_segment_page_sizes() stub
  target-ppc: Convert mmu-hash{32,64}.[ch] from CPUPPCState to
    PowerPCCPU
  target-ppc: Rework ppc_store_slb
  target-ppc: Rework SLB page size lookup
  target-ppc: Use actual page size encodings from HPTE
  target-ppc: Remove unused mmu models from ppc_tlb_invalidate_one
  target-ppc: Split 44x tlbiva from ppc_tlb_invalidate_one()
  target-ppc: Add new TLB invalidate by HPTE call for hash64 MMUs
  target-ppc: Helper to determine page size information from hpte alone
  target-ppc: Allow more page sizes for POWER7 & POWER8 in TCG

 hw/ppc/spapr_hcall.c        | 102 ++++-------------
 target-ppc/cpu.h            |   1 +
 target-ppc/helper.h         |   1 +
 target-ppc/kvm.c            |   2 +-
 target-ppc/kvm_ppc.h        |   5 -
 target-ppc/machine.c        |  20 ++++
 target-ppc/mmu-hash32.c     |  68 ++++++-----
 target-ppc/mmu-hash32.h     |  30 ++---
 target-ppc/mmu-hash64.c     | 270 +++++++++++++++++++++++++++++++-------------
 target-ppc/mmu-hash64.h     |  30 +++--
 target-ppc/mmu_helper.c     |  59 ++++------
 target-ppc/translate.c      |   2 +-
 target-ppc/translate_init.c |  32 ++++++
 13 files changed, 372 insertions(+), 250 deletions(-)

-- 
2.5.0

^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2016-01-29  4:06 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-01-27 10:13 [Qemu-devel] [PATCHv2 00/10] Clean up page size handling for ppc 64-bit hash MMUs with TCG David Gibson
2016-01-27 10:13 ` [Qemu-devel] [PATCHv2 01/10] target-ppc: Remove unused kvmppc_read_segment_page_sizes() stub David Gibson
2016-01-27 12:16   ` Thomas Huth
2016-01-27 12:55   ` Laurent Vivier
2016-01-27 10:13 ` [Qemu-devel] [PATCHv2 02/10] target-ppc: Convert mmu-hash{32, 64}.[ch] from CPUPPCState to PowerPCCPU David Gibson
2016-01-27 14:11   ` Laurent Vivier
2016-01-27 10:13 ` [Qemu-devel] [PATCHv2 03/10] target-ppc: Rework ppc_store_slb David Gibson
2016-01-27 17:21   ` Laurent Vivier
2016-01-28  4:16   ` Benjamin Herrenschmidt
2016-01-27 10:13 ` [Qemu-devel] [PATCHv2 04/10] target-ppc: Rework SLB page size lookup David Gibson
2016-01-28  4:17   ` Benjamin Herrenschmidt
2016-01-27 10:13 ` [Qemu-devel] [PATCHv2 05/10] target-ppc: Use actual page size encodings from HPTE David Gibson
2016-01-28  4:18   ` Benjamin Herrenschmidt
2016-01-27 10:13 ` [Qemu-devel] [PATCHv2 06/10] target-ppc: Remove unused mmu models from ppc_tlb_invalidate_one David Gibson
2016-01-27 18:06   ` Laurent Vivier
2016-01-27 23:47     ` David Gibson
2016-01-28  4:20   ` Benjamin Herrenschmidt
2016-01-28  5:55     ` David Gibson
2016-01-28 15:45   ` Thomas Huth
2016-01-29  2:31     ` David Gibson
2016-01-27 10:13 ` [Qemu-devel] [PATCHv2 07/10] target-ppc: Split 44x tlbiva from ppc_tlb_invalidate_one() David Gibson
2016-01-27 17:58   ` Laurent Vivier
2016-01-27 23:31     ` David Gibson
2016-01-28  4:20   ` Benjamin Herrenschmidt
2016-01-27 10:13 ` [Qemu-devel] [PATCHv2 08/10] target-ppc: Add new TLB invalidate by HPTE call for hash64 MMUs David Gibson
2016-01-28  4:33   ` Benjamin Herrenschmidt
2016-01-28  5:57     ` David Gibson
2016-01-27 10:13 ` [Qemu-devel] [PATCHv2 09/10] target-ppc: Helper to determine page size information from hpte alone David Gibson
2016-01-28  4:33   ` Benjamin Herrenschmidt
2016-01-27 10:13 ` [Qemu-devel] [PATCHv2 10/10] target-ppc: Allow more page sizes for POWER7 & POWER8 in TCG David Gibson
2016-01-28  4:36   ` Benjamin Herrenschmidt
2016-01-28 20:44 ` [Qemu-devel] [PATCHv2 00/10] Clean up page size handling for ppc 64-bit hash MMUs with TCG Alexander Graf
2016-01-29  2:36   ` David Gibson

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.