[PATCH] powerpc64: fix spinlock recursion in native_hpte_clear
native_hpte_clear has a spinlock recursion problem with the native_tlbie_lock being called twice, once in native_hpte_clear() and once within tlbie(). Fix the problem by changing the call to tlbie() in native_hpte_clear() to __tlbie(). It still supports only 4k pages for now. Signed-off-by: R Sharada <sharada@in.ibm.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
Родитель
611ae59c62
Коммит
47f78a4920
|
@ -403,12 +403,17 @@ static void native_hpte_clear(void)
|
||||||
*/
|
*/
|
||||||
hpte_v = hptep->v;
|
hpte_v = hptep->v;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Call __tlbie() here rather than tlbie() since we
|
||||||
|
* already hold the native_tlbie_lock.
|
||||||
|
*/
|
||||||
if (hpte_v & HPTE_V_VALID) {
|
if (hpte_v & HPTE_V_VALID) {
|
||||||
hptep->v = 0;
|
hptep->v = 0;
|
||||||
tlbie(slot2va(hpte_v, slot), MMU_PAGE_4K, 0);
|
__tlbie(slot2va(hpte_v, slot), MMU_PAGE_4K);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
asm volatile("eieio; tlbsync; ptesync":::"memory");
|
||||||
spin_unlock(&native_tlbie_lock);
|
spin_unlock(&native_tlbie_lock);
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче