Deleted Added
full compact
57c57
< __FBSDID("$FreeBSD: head/sys/powerpc/aim/copyinout.c 212715 2010-09-16 00:22:25Z nwhitehorn $");
---
> __FBSDID("$FreeBSD: head/sys/powerpc/aim/copyinout.c 214574 2010-10-30 23:07:30Z nwhitehorn $");
84c84
< register_t esid, vsid, slb1, slb2;
---
> register_t slbv;
86,87d85
< esid = USER_ADDR >> ADDR_SR_SHFT;
<
94c92
< vsid = va_to_vsid(pm, (vm_offset_t)addr);
---
> slbv = va_to_vsid(pm, (vm_offset_t)addr) << SLBV_VSID_SHIFT;
97c95
< vsid = slb->slbv >> SLBV_VSID_SHIFT;
---
> slbv = slb->slbv;
100,101c98,100
< slb1 = vsid << SLBV_VSID_SHIFT;
< slb2 = (esid << SLBE_ESID_SHIFT) | SLBE_VALID | USER_SR;
---
> /* If we have already set this VSID, we can just return */
> if (curthread->td_pcb->pcb_cpu.aim.usr_vsid == slbv)
> return;
102a102,103
> __asm __volatile ("isync; slbie %0; slbmte %1, %2; isync" ::
> "r"(USER_ADDR), "r"(slbv), "r"(USER_SLB_SLBE));
105,107c106
< __asm __volatile ("slbie %0; slbmte %1, %2" :: "r"(esid << 28),
< "r"(slb1), "r"(slb2));
< isync();
---
> curthread->td_pcb->pcb_cpu.aim.usr_vsid = slbv;
117,119c116,122
< isync();
< __asm __volatile ("mtsr %0,%1" :: "n"(USER_SR), "r"(vsid));
< isync();
---
> /* If we have already set this VSID, we can just return */
> if (curthread->td_pcb->pcb_cpu.aim.usr_vsid == vsid)
> return;
>
> __asm __volatile ("sync; mtsr %0,%1; sync; isync" :: "n"(USER_SR),
> "r"(vsid));
> curthread->td_pcb->pcb_cpu.aim.usr_vsid = vsid;