Hi Greg,

can you try the below patch and see if it fix the TCG mode failure ?

-aneesh

commit d98b5098bc04f44ef4e175f689345e92cf469231
Author: Aneesh Kumar K.V <aneesh.ku...@linux.vnet.ibm.com>
Date:   Tue Feb 11 23:43:12 2014 +0530

    tcg fixes

diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
index e1f778faf3ae..d3aca706fdc9 100644
--- a/hw/ppc/spapr_hcall.c
+++ b/hw/ppc/spapr_hcall.c
@@ -91,7 +91,10 @@ static target_ulong h_enter(PowerPCCPU *cpu, 
sPAPREnvironment *spapr,
 
     pteh &= ~0x60ULL;
 
-    if ((pte_index * HASH_PTE_SIZE_64) & ~env->htab_mask) {
+    /*
+     * hash value/pteg group index is normalized by htab_mask
+     */
+    if (((pte_index & ~7ULL) / HPTES_PER_GROUP) & ~env->htab_mask) {
         return H_PARAMETER;
     }
 
@@ -140,7 +143,10 @@ static RemoveResult remove_hpte(CPUPPCState *env, 
target_ulong ptex,
     uint64_t token;
     target_ulong v, r, rb;
 
-    if ((ptex * HASH_PTE_SIZE_64) & ~env->htab_mask) {
+    /*
+     * hash value/pteg group index is normalized by htab_mask
+     */
+    if (((ptex & ~7ULL) / HPTES_PER_GROUP) & ~env->htab_mask) {
         return REMOVE_PARM;
     }
 
@@ -266,7 +272,10 @@ static target_ulong h_protect(PowerPCCPU *cpu, 
sPAPREnvironment *spapr,
     uint64_t token;
     target_ulong v, r, rb;
 
-    if ((pte_index * HASH_PTE_SIZE_64) & ~env->htab_mask) {
+    /*
+     * hash value/pteg group index is normalized by htab_mask
+     */
+    if (((pte_index & ~7ULL) / HPTES_PER_GROUP) & ~env->htab_mask) {
         return H_PARAMETER;
     }
 
@@ -303,7 +312,10 @@ static target_ulong h_read(PowerPCCPU *cpu, 
sPAPREnvironment *spapr,
     uint8_t *hpte;
     int i, ridx, n_entries = 1;
 
-    if ((pte_index * HASH_PTE_SIZE_64) & ~env->htab_mask) {
+    /*
+     * hash value/pteg group index is normalized by htab_mask
+     */
+    if (((pte_index & ~7ULL) / HPTES_PER_GROUP) & ~env->htab_mask) {
         return H_PARAMETER;
     }
 


Reply via email to