Commit 7aaf4957 authored by Aneesh Kumar K.V's avatar Aneesh Kumar K.V Committed by Andreas Färber
Browse files

spapr_hcall: Fix h_enter to loop correctly



We wanted to loop till index is 8. On 8 we return with H_PTEG_FULL. If we
are successful in loading hpte with any other index, we continue with that
index value.

Reported-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Reviewed-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: default avatarAndreas Färber <afaerber@suse.de>
parent cfd54a04
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -110,16 +110,15 @@ static target_ulong h_enter(PowerPCCPU *cpu, sPAPREnvironment *spapr,
    if (likely((flags & H_EXACT) == 0)) {
        pte_index &= ~7ULL;
        token = ppc_hash64_start_access(cpu, pte_index);
        do {
            if (index == 8) {
                ppc_hash64_stop_access(token);
                return H_PTEG_FULL;
            }
        for (; index < 8; index++) {
            if ((ppc_hash64_load_hpte0(env, token, index) & HPTE64_V_VALID) == 0) {
                break;
            }
        } while (index++);
        }
        ppc_hash64_stop_access(token);
        if (index == 8) {
            return H_PTEG_FULL;
        }
    } else {
        token = ppc_hash64_start_access(cpu, pte_index);
        if (ppc_hash64_load_hpte0(env, token, 0) & HPTE64_V_VALID) {