microblaze: Fix pte_update function
Do not disable irq in asm but use irq macros. Systems with MSR=0 couldn't use pte_update function because msrclr was hardcoded. Signed-off-by: Michal Simek <monstr@monstr.eu>
This commit is contained in:
parent
1649700408
commit
1f80a67da2
@ -411,20 +411,19 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
||||
static inline unsigned long pte_update(pte_t *p, unsigned long clr,
|
||||
unsigned long set)
|
||||
{
|
||||
unsigned long old, tmp, msr;
|
||||
unsigned long flags, old, tmp;
|
||||
|
||||
__asm__ __volatile__("\
|
||||
msrclr %2, 0x2\n\
|
||||
nop\n\
|
||||
lw %0, %4, r0\n\
|
||||
andn %1, %0, %5\n\
|
||||
or %1, %1, %6\n\
|
||||
sw %1, %4, r0\n\
|
||||
mts rmsr, %2\n\
|
||||
nop"
|
||||
: "=&r" (old), "=&r" (tmp), "=&r" (msr), "=m" (*p)
|
||||
: "r" ((unsigned long)(p + 1) - 4), "r" (clr), "r" (set), "m" (*p)
|
||||
: "cc");
|
||||
raw_local_irq_save(flags);
|
||||
|
||||
__asm__ __volatile__( "lw %0, %2, r0 \n"
|
||||
"andn %1, %0, %3 \n"
|
||||
"or %1, %1, %4 \n"
|
||||
"sw %1, %2, r0 \n"
|
||||
: "=&r" (old), "=&r" (tmp)
|
||||
: "r" ((unsigned long)(p + 1) - 4), "r" (clr), "r" (set)
|
||||
: "cc");
|
||||
|
||||
raw_local_irq_restore(flags);
|
||||
|
||||
return old;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user