|
| From: | Paolo Bonzini |
| Subject: | Re: [Qemu-devel] [PULL 125/130] target-ppc: Fix page table lookup with kvm enabled |
| Date: | Fri, 14 Mar 2014 12:26:59 +0100 |
| User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 |
Il 07/03/2014 00:34, Alexander Graf ha scritto:
@@ -105,30 +106,37 @@ static target_ulong h_enter(PowerPCCPU *cpu,
sPAPREnvironment *spapr,
if (!valid_pte_index(env, pte_index)) {
return H_PARAMETER;
}
+
+ index = 0;
+ hpte = pte_index * HASH_PTE_SIZE_64;
if (likely((flags & H_EXACT) == 0)) {
pte_index &= ~7ULL;
- hpte = pte_index * HASH_PTE_SIZE_64;
- for (i = 0; ; ++i) {
- if (i == 8) {
+ token = ppc_hash64_start_access(cpu, pte_index);
+ do {
+ if (index == 8) {
+ ppc_hash64_stop_access(token);
return H_PTEG_FULL;
}
- if ((ppc_hash64_load_hpte0(env, hpte) & HPTE64_V_VALID) == 0) {
+ if ((ppc_hash64_load_hpte0(env, token, index) & HPTE64_V_VALID) ==
0) {
break;
}
- hpte += HASH_PTE_SIZE_64;
- }
+ } while (index++);
+ ppc_hash64_stop_access(token);
I'm afraid you have a bug here, as spotted by Coverity. The do...while loop only loops once. I'm not sure what you meant, could you rewrite it with a "for (index = 0; index < 8; i++)" instead?
Paolo
| [Prev in Thread] | Current Thread | [Next in Thread] |