[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [PATCH 4/6] target/ppc: Cleanup HPTE accessors for 64-bit
From: |
David Gibson |
Subject: |
Re: [Qemu-ppc] [PATCH 4/6] target/ppc: Cleanup HPTE accessors for 64-bit hash MMU |
Date: |
Mon, 27 Feb 2017 16:06:48 +1100 |
User-agent: |
Mutt/1.7.1 (2016-10-04) |
On Thu, Feb 23, 2017 at 04:02:54PM +1100, Alexey Kardashevskiy wrote:
> On 23/02/17 13:09, David Gibson wrote:
> > Accesses to the hashed page table (HPT) are complicated by the fact that
> > the HPT could be in one of three places:
> > 1) Within guest memory - when we're emulating a full guest CPU at the
> > hardware level (e.g. powernv, mac99, g3beige)
> > 2) Within qemu, but outside guest memory - when we're emulating user and
> > supervisor instructions within TCG, but instead of emulating
> > the CPU's hypervisor mode, we just emulate a hypervisor's behaviour
> > (pseries in TCG)
> > 3) Within KVM - a pseries machine using KVM acceleration. Mostly
> > accesses to the HPT are handled by KVM, but there are a few cases
> > where qemu needs to access it via a special fd for the purpose.
> >
> > In order to batch accesses to the fd in case (3), we use a somewhat awkward
> > ppc_hash64_start_access() / ppc_hash64_stop_access() pair, which for case
> > (3) reads / releases a whole PTEG from the kernel. For cases (1) & (2)
> > it just returns an address value. The actual HPTE load helpers then need
> > to interpret the returned token differently in the 3 cases.
> >
> > This patch keeps the same basic structure, but simplfiies the details.
> > First start_access() / stop_access() are renamed to get_pteg() and
> > put_pteg() to make their operation more obvious.
[snip]
> >
> > /*****************************************************************************/
> > -/* Types used to describe some PowerPC registers */
> > +/* Types used to describe some PowerPC registers etc. */
> > typedef struct DisasContext DisasContext;
> > typedef struct ppc_spr_t ppc_spr_t;
> > typedef union ppc_avr_t ppc_avr_t;
> > typedef union ppc_tlb_t ppc_tlb_t;
> > +typedef struct ppc_hash_pte64 ppc_hash_pte64_t;
> >
> > /* SPR access micro-ops generations callbacks */
> > struct ppc_spr_t {
> > diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
> > index 52bbea5..9d3e57e 100644
> > --- a/target/ppc/kvm.c
> > +++ b/target/ppc/kvm.c
> > @@ -2601,17 +2601,17 @@ struct kvm_get_htab_buf {
> > /*
> > * We require one extra byte for read
> > */
> > - target_ulong hpte[(HPTES_PER_GROUP * 2) + 1];
> > + ppc_hash_pte64_t hpte[HPTES_PER_GROUP];
>
>
> The "one extra byte" (which was ulong) is not needed any more why?
>
>
> > };
> >
> > -uint64_t kvmppc_hash64_read_pteg(PowerPCCPU *cpu, target_ulong pte_index)
> > +const ppc_hash_pte64_t *kvmppc_map_hptes(hwaddr ptex, int n)
>
>
> This "int n" is ignored here by a reason?
So looking at these comments, I realized the current code for reading
the HPTEs from KVM is just broken. So, for v2, I've prepended a patch
to fix that first, after which I don't need to touch the KVM side for
the rest of the series.
[snip]
> > +const ppc_hash_pte64_t *ppc_hash64_map_hptes(PowerPCCPU *cpu,\
>
>
> You do not need the trailing '\'.
Missed this comment on my first pass, fixed now, thanks.
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature
- [Qemu-ppc] [PATCH 3/6] target/ppc: SDR1 is a hypervisor resource, (continued)
- [Qemu-ppc] [PATCH 3/6] target/ppc: SDR1 is a hypervisor resource, David Gibson, 2017/02/22
- [Qemu-ppc] [PATCH 2/6] target/ppc: Merge cpu_ppc_set_vhyp() with cpu_ppc_set_papr(), David Gibson, 2017/02/22
- [Qemu-ppc] [PATCH 1/6] pseries: Minor cleanups to HPT management hypercalls, David Gibson, 2017/02/22
- [Qemu-ppc] [PATCH 4/6] target/ppc: Cleanup HPTE accessors for 64-bit hash MMU, David Gibson, 2017/02/22
- [Qemu-ppc] [PATCH 6/6] target/ppc: Manage external HPT via virtual hypervisor, David Gibson, 2017/02/22
- [Qemu-ppc] [PATCH 5/6] target/ppc: Eliminate htab_base and htab_mask variables, David Gibson, 2017/02/22