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: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
cfd54a0409
commit
7aaf4957ef
@ -110,16 +110,15 @@ static target_ulong h_enter(PowerPCCPU *cpu, sPAPREnvironment *spapr,
|
|||||||
if (likely((flags & H_EXACT) == 0)) {
|
if (likely((flags & H_EXACT) == 0)) {
|
||||||
pte_index &= ~7ULL;
|
pte_index &= ~7ULL;
|
||||||
token = ppc_hash64_start_access(cpu, pte_index);
|
token = ppc_hash64_start_access(cpu, pte_index);
|
||||||
do {
|
for (; index < 8; index++) {
|
||||||
if (index == 8) {
|
|
||||||
ppc_hash64_stop_access(token);
|
|
||||||
return H_PTEG_FULL;
|
|
||||||
}
|
|
||||||
if ((ppc_hash64_load_hpte0(env, token, index) & HPTE64_V_VALID) == 0) {
|
if ((ppc_hash64_load_hpte0(env, token, index) & HPTE64_V_VALID) == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} while (index++);
|
}
|
||||||
ppc_hash64_stop_access(token);
|
ppc_hash64_stop_access(token);
|
||||||
|
if (index == 8) {
|
||||||
|
return H_PTEG_FULL;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
token = ppc_hash64_start_access(cpu, pte_index);
|
token = ppc_hash64_start_access(cpu, pte_index);
|
||||||
if (ppc_hash64_load_hpte0(env, token, 0) & HPTE64_V_VALID) {
|
if (ppc_hash64_load_hpte0(env, token, 0) & HPTE64_V_VALID) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user