[Qemu-devel] [PATCH 2/6] ppc/spapr: Use proper HPTE accessors for H_READ

Cédric Le Goater posted 6 patches 6 years, 10 months ago
[Qemu-devel] [PATCH 2/6] ppc/spapr: Use proper HPTE accessors for H_READ
Posted by Cédric Le Goater 6 years, 10 months ago
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
---
 hw/ppc/spapr_hcall.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
index be8044a92f2f..7761d4a841af 100644
--- a/hw/ppc/spapr_hcall.c
+++ b/hw/ppc/spapr_hcall.c
@@ -304,8 +304,8 @@ static target_ulong h_read(PowerPCCPU *cpu, SpaprMachineState *spapr,
 {
     target_ulong flags = args[0];
     target_ulong ptex = args[1];
-    uint8_t *hpte;
     int i, ridx, n_entries = 1;
+    const ppc_hash_pte64_t *hptes;
 
     if (!valid_ptex(cpu, ptex)) {
         return H_PARAMETER;
@@ -317,13 +317,12 @@ static target_ulong h_read(PowerPCCPU *cpu, SpaprMachineState *spapr,
         n_entries = 4;
     }
 
-    hpte = spapr->htab + (ptex * HASH_PTE_SIZE_64);
-
+    hptes = ppc_hash64_map_hptes(cpu, ptex, n_entries);
     for (i = 0, ridx = 0; i < n_entries; i++) {
-        args[ridx++] = ldq_p(hpte);
-        args[ridx++] = ldq_p(hpte + (HASH_PTE_SIZE_64/2));
-        hpte += HASH_PTE_SIZE_64;
+        args[ridx++] = ppc_hash64_hpte0(cpu, hptes, i);
+        args[ridx++] = ppc_hash64_hpte1(cpu, hptes, i);
     }
+    ppc_hash64_unmap_hptes(cpu, hptes, ptex, n_entries);
 
     return H_SUCCESS;
 }
-- 
2.20.1


Re: [Qemu-devel] [PATCH 2/6] ppc/spapr: Use proper HPTE accessors for H_READ
Posted by David Gibson 6 years, 10 months ago
On Thu, Apr 11, 2019 at 10:00:00AM +0200, Cédric Le Goater wrote:
> From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> 
> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> Signed-off-by: Cédric Le Goater <clg@kaod.org>

Applied, thanks.

> ---
>  hw/ppc/spapr_hcall.c | 11 +++++------
>  1 file changed, 5 insertions(+), 6 deletions(-)
> 
> diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
> index be8044a92f2f..7761d4a841af 100644
> --- a/hw/ppc/spapr_hcall.c
> +++ b/hw/ppc/spapr_hcall.c
> @@ -304,8 +304,8 @@ static target_ulong h_read(PowerPCCPU *cpu, SpaprMachineState *spapr,
>  {
>      target_ulong flags = args[0];
>      target_ulong ptex = args[1];
> -    uint8_t *hpte;
>      int i, ridx, n_entries = 1;
> +    const ppc_hash_pte64_t *hptes;
>  
>      if (!valid_ptex(cpu, ptex)) {
>          return H_PARAMETER;
> @@ -317,13 +317,12 @@ static target_ulong h_read(PowerPCCPU *cpu, SpaprMachineState *spapr,
>          n_entries = 4;
>      }
>  
> -    hpte = spapr->htab + (ptex * HASH_PTE_SIZE_64);
> -
> +    hptes = ppc_hash64_map_hptes(cpu, ptex, n_entries);
>      for (i = 0, ridx = 0; i < n_entries; i++) {
> -        args[ridx++] = ldq_p(hpte);
> -        args[ridx++] = ldq_p(hpte + (HASH_PTE_SIZE_64/2));
> -        hpte += HASH_PTE_SIZE_64;
> +        args[ridx++] = ppc_hash64_hpte0(cpu, hptes, i);
> +        args[ridx++] = ppc_hash64_hpte1(cpu, hptes, i);
>      }
> +    ppc_hash64_unmap_hptes(cpu, hptes, ptex, n_entries);
>  
>      return H_SUCCESS;
>  }

-- 
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