All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kurz <groug@kaod.org>
To: David Gibson <david@gibson.dropbear.id.au>
Cc: qemu-ppc@nongnu.org, agraf@suse.de, qemu-devel@nongnu.org,
	benh@kernel.crashing.org, bharata@linux.vnet.ibm.com,
	clg@kaod.org
Subject: Re: [Qemu-devel] [RFC for-2.13 05/12] target/ppc: Remove fallback 64k pagesize information
Date: Wed, 28 Mar 2018 10:01:38 +0200	[thread overview]
Message-ID: <20180328100112.4f0f5ad6@bahia.lab.toulouse-stg.fr.ibm.com> (raw)
In-Reply-To: <20180328003204.GD3510@umbus.fritz.box>

On Wed, 28 Mar 2018 11:32:04 +1100
David Gibson <david@gibson.dropbear.id.au> wrote:

> On Tue, Mar 27, 2018 at 03:54:55PM +0200, Greg Kurz wrote:
> > On Tue, 27 Mar 2018 15:37:34 +1100
> > David Gibson <david@gibson.dropbear.id.au> wrote:
> >   
> > > CPU definitions for cpus with the 64-bit hash MMU can include a table of
> > > available pagesizes.  If this isn't supplied ppc_cpu_instance_init() will
> > > fill it in a fallback table based on the POWERPC_MMU_64K bit in mmu_model.
> > > 
> > > However, it turns out all the cpus which support 64K pages already include
> > > an explicit table of page sizes, so there's no point to the fallback table
> > > including 64k pages.
> > >   
> > 
> > I was thinking that 64k pages came with POWER5+. At least, this is mentioned
> > in several places:
> > 
> > https://www.ibm.com/support/knowledgecenter/ssw_aix_72/com.ibm.aix.performance/supported_page_sizes_processor_type.htm
> > 
> > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a4a0f2524acc2c602cadd8e743be19d86f3a746b  
> 
> Ok, I didn't know that.  However, that was already wrong - we weren't
> setting the MMU_64K bit for POWER5+.
> 

Yes, I just happened to realize that while reviewing this patch. Hence the
remark :)

> > And we do support POWER5+ with TCG and KVM PR.  
> 
> Well, theoretically.  I doubt it's been tested in years, and I
> strongly suspect it won't actually work.
> 

For the records, I could successfully boot a rhel67 guest on a POWER8 host
with:

    -machine accel=kvm,kvm-type=PR,vsmt=1 -cpu power5+

but it fails with TCG. The guest kernel oopses at some point because
of an illegal instruction and panics later on.

> > Shouldn't we include an explicit
> > table of pages sizes there as well ?  
> 
> Yeah, but I think it makes more sense to fix that later.  Or, more
> likely, not, since no-one actually cares about POWER5.
> 

You're probably right.

Anyway, this patch is the way to go, so:

Reviewed-by: Greg Kurz <groug@kaod.org>

> >   
> > > That removes the only place which tests POWERPC_MMU_64K, so we can remove
> > > it.  Which in turn allows some logic to be removed from
> > > kvm_fixup_page_sizes().
> > > 
> > > Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
> > > ---
> > >  target/ppc/cpu-qom.h        |  4 ----
> > >  target/ppc/kvm.c            |  7 -------
> > >  target/ppc/translate_init.c | 20 ++------------------
> > >  3 files changed, 2 insertions(+), 29 deletions(-)
> > > 
> > > diff --git a/target/ppc/cpu-qom.h b/target/ppc/cpu-qom.h
> > > index deaa46a14b..9bbb05cf62 100644
> > > --- a/target/ppc/cpu-qom.h
> > > +++ b/target/ppc/cpu-qom.h
> > > @@ -70,7 +70,6 @@ enum powerpc_mmu_t {
> > >  #define POWERPC_MMU_64       0x00010000
> > >  #define POWERPC_MMU_1TSEG    0x00020000
> > >  #define POWERPC_MMU_AMR      0x00040000
> > > -#define POWERPC_MMU_64K      0x00080000
> > >  #define POWERPC_MMU_V3       0x00100000 /* ISA V3.00 MMU Support */
> > >      /* 64 bits PowerPC MMU                                     */
> > >      POWERPC_MMU_64B        = POWERPC_MMU_64 | 0x00000001,
> > > @@ -78,15 +77,12 @@ enum powerpc_mmu_t {
> > >      POWERPC_MMU_2_03       = POWERPC_MMU_64 | 0x00000002,
> > >      /* Architecture 2.06 variant                               */
> > >      POWERPC_MMU_2_06       = POWERPC_MMU_64 | POWERPC_MMU_1TSEG
> > > -                             | POWERPC_MMU_64K
> > >                               | POWERPC_MMU_AMR | 0x00000003,
> > >      /* Architecture 2.07 variant                               */
> > >      POWERPC_MMU_2_07       = POWERPC_MMU_64 | POWERPC_MMU_1TSEG
> > > -                             | POWERPC_MMU_64K
> > >                               | POWERPC_MMU_AMR | 0x00000004,
> > >      /* Architecture 3.00 variant                               */
> > >      POWERPC_MMU_3_00       = POWERPC_MMU_64 | POWERPC_MMU_1TSEG
> > > -                             | POWERPC_MMU_64K
> > >                               | POWERPC_MMU_AMR | POWERPC_MMU_V3
> > >                               | 0x00000005,
> > >  };
> > > diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
> > > index 79a436a384..6160356a4a 100644
> > > --- a/target/ppc/kvm.c
> > > +++ b/target/ppc/kvm.c
> > > @@ -425,7 +425,6 @@ static void kvm_fixup_page_sizes(PowerPCCPU *cpu)
> > >      static bool has_smmu_info;
> > >      CPUPPCState *env = &cpu->env;
> > >      int iq, ik, jq, jk;
> > > -    bool has_64k_pages = false;
> > >  
> > >      /* We only handle page sizes for 64-bit server guests for now */
> > >      if (!(env->mmu_model & POWERPC_MMU_64)) {
> > > @@ -471,9 +470,6 @@ static void kvm_fixup_page_sizes(PowerPCCPU *cpu)
> > >                                       ksps->enc[jk].page_shift)) {
> > >                  continue;
> > >              }
> > > -            if (ksps->enc[jk].page_shift == 16) {
> > > -                has_64k_pages = true;
> > > -            }
> > >              qsps->enc[jq].page_shift = ksps->enc[jk].page_shift;
> > >              qsps->enc[jq].pte_enc = ksps->enc[jk].pte_enc;
> > >              if (++jq >= PPC_PAGE_SIZES_MAX_SZ) {
> > > @@ -488,9 +484,6 @@ static void kvm_fixup_page_sizes(PowerPCCPU *cpu)
> > >      if (!(smmu_info.flags & KVM_PPC_1T_SEGMENTS)) {
> > >          env->mmu_model &= ~POWERPC_MMU_1TSEG;
> > >      }
> > > -    if (!has_64k_pages) {
> > > -        env->mmu_model &= ~POWERPC_MMU_64K;
> > > -    }
> > >  }
> > >  
> > >  bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path)
> > > diff --git a/target/ppc/translate_init.c b/target/ppc/translate_init.c
> > > index 29bd6f3654..99be6fcd68 100644
> > > --- a/target/ppc/translate_init.c
> > > +++ b/target/ppc/translate_init.c
> > > @@ -10469,7 +10469,7 @@ static void ppc_cpu_instance_init(Object *obj)
> > >          env->sps = *pcc->sps;
> > >      } else if (env->mmu_model & POWERPC_MMU_64) {
> > >          /* Use default sets of page sizes. We don't support MPSS */
> > > -        static const struct ppc_segment_page_sizes defsps_4k = {
> > > +        static const struct ppc_segment_page_sizes defsps = {
> > >              .sps = {
> > >                  { .page_shift = 12, /* 4K */
> > >                    .slb_enc = 0,
> > > @@ -10481,23 +10481,7 @@ static void ppc_cpu_instance_init(Object *obj)
> > >                  },
> > >              },
> > >          };
> > > -        static const struct ppc_segment_page_sizes defsps_64k = {
> > > -            .sps = {
> > > -                { .page_shift = 12, /* 4K */
> > > -                  .slb_enc = 0,
> > > -                  .enc = { { .page_shift = 12, .pte_enc = 0 } }
> > > -                },
> > > -                { .page_shift = 16, /* 64K */
> > > -                  .slb_enc = 0x110,
> > > -                  .enc = { { .page_shift = 16, .pte_enc = 1 } }
> > > -                },
> > > -                { .page_shift = 24, /* 16M */
> > > -                  .slb_enc = 0x100,
> > > -                  .enc = { { .page_shift = 24, .pte_enc = 0 } }
> > > -                },
> > > -            },
> > > -        };
> > > -        env->sps = (env->mmu_model & POWERPC_MMU_64K) ? defsps_64k : defsps_4k;
> > > +        env->sps = defsps;
> > >      }
> > >  #endif /* defined(TARGET_PPC64) */
> > >  }  
> >   
> 

  reply	other threads:[~2018-03-28  8:02 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-27  4:37 [Qemu-devel] [RFC for-2.13 00/12] target/ppc: Assorted cpu cleanups (esp. hash64 MMU) David Gibson
2018-03-27  4:37 ` [Qemu-devel] [RFC for-2.13 01/12] target/ppc: Standardize instance_init and realize function names David Gibson
2018-03-27  7:12   ` Greg Kurz
2018-03-27  4:37 ` [Qemu-devel] [RFC for-2.13 02/12] target/ppc: Simplify cpu valid check in ppc_cpu_realize David Gibson
2018-03-27  6:36   ` [Qemu-devel] [Qemu-ppc] " Thomas Huth
2018-03-27  7:13   ` [Qemu-devel] " Greg Kurz
2018-03-27  4:37 ` [Qemu-devel] [RFC for-2.13 03/12] target/ppc: Pass cpu instead of env to ppc_create_page_sizes_prop() David Gibson
2018-03-27  7:15   ` Greg Kurz
2018-03-27  8:41   ` Cédric Le Goater
2018-03-27  4:37 ` [Qemu-devel] [RFC for-2.13 04/12] target/ppc: Avoid taking "env" parameter to mmu-hash64 functions David Gibson
2018-03-27  8:17   ` Greg Kurz
2018-03-27  8:45   ` Cédric Le Goater
2018-03-27  4:37 ` [Qemu-devel] [RFC for-2.13 05/12] target/ppc: Remove fallback 64k pagesize information David Gibson
2018-03-27  8:54   ` Cédric Le Goater
2018-03-27 13:54   ` Greg Kurz
2018-03-28  0:32     ` David Gibson
2018-03-28  8:01       ` Greg Kurz [this message]
2018-03-28  8:54         ` David Gibson
2018-03-27  4:37 ` [Qemu-devel] [RFC for-2.13 06/12] target/ppc: Move page size setup to helper function David Gibson
2018-03-27  8:56   ` Cédric Le Goater
2018-03-27 13:58   ` Greg Kurz
2018-03-27  4:37 ` [Qemu-devel] [RFC for-2.13 07/12] target/ppc: Split page size information into a separate allocation David Gibson
2018-03-28  7:28   ` Cédric Le Goater
2018-03-29  4:46     ` David Gibson
2018-03-28  8:15   ` Greg Kurz
2018-03-27  4:37 ` [Qemu-devel] [RFC for-2.13 08/12] target/ppc: Make hash64_opts field mandatory for 64-bit hash MMUs David Gibson
2018-03-28  7:31   ` Cédric Le Goater
2018-03-28  8:33   ` Greg Kurz
2018-03-27  4:37 ` [Qemu-devel] [RFC for-2.13 09/12] target/ppc: Move 1T segment and AMR options to PPCHash64Options David Gibson
2018-03-28  7:40   ` Cédric Le Goater
2018-03-29  4:57     ` David Gibson
2018-03-28  8:48   ` Greg Kurz
2018-03-27  4:37 ` [Qemu-devel] [RFC for-2.13 10/12] target/ppc: Fold ci_large_pages flag into PPCHash64Options David Gibson
2018-03-28  7:41   ` Cédric Le Goater
2018-03-28  8:50   ` Greg Kurz
2018-03-27  4:37 ` [Qemu-devel] [RFC for-2.13 11/12] target/ppc: Remove unnecessary POWERPC_MMU_V3 flag from mmu_model David Gibson
2018-03-28  7:43   ` Cédric Le Goater
2018-03-28  7:49     ` Cédric Le Goater
2018-03-28  8:47       ` David Gibson
2018-03-28 10:19         ` Cédric Le Goater
2018-03-29  5:02           ` David Gibson
2018-03-28  9:10   ` Greg Kurz
2018-03-27  4:37 ` [Qemu-devel] [RFC for-2.13 12/12] target/ppc: Get rid of POWERPC_MMU_VER() macros David Gibson
2018-03-28  7:50   ` Cédric Le Goater
2018-03-28  9:26   ` Greg Kurz

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=20180328100112.4f0f5ad6@bahia.lab.toulouse-stg.fr.ibm.com \
    --to=groug@kaod.org \
    --cc=agraf@suse.de \
    --cc=benh@kernel.crashing.org \
    --cc=bharata@linux.vnet.ibm.com \
    --cc=clg@kaod.org \
    --cc=david@gibson.dropbear.id.au \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@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.