powerpc: Fix little endian lppaca, slb_shadow and dtl_entry
The lppaca, slb_shadow and dtl_entry hypervisor structures are big endian, so we have to byte swap them in little endian builds. LE KVM hosts will also need to be fixed but for now add an #error to remind us. Signed-off-by: Anton Blanchard <anton@samba.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:

committed by
Benjamin Herrenschmidt

parent
c72cd555e8
commit
7ffcf8ec26
@@ -443,8 +443,12 @@ good_area:
|
||||
regs, address);
|
||||
#ifdef CONFIG_PPC_SMLPAR
|
||||
if (firmware_has_feature(FW_FEATURE_CMO)) {
|
||||
u32 page_ins;
|
||||
|
||||
preempt_disable();
|
||||
get_lppaca()->page_ins += (1 << PAGE_FACTOR);
|
||||
page_ins = be32_to_cpu(get_lppaca()->page_ins);
|
||||
page_ins += 1 << PAGE_FACTOR;
|
||||
get_lppaca()->page_ins = cpu_to_be32(page_ins);
|
||||
preempt_enable();
|
||||
}
|
||||
#endif /* CONFIG_PPC_SMLPAR */
|
||||
|
@@ -66,8 +66,10 @@ static inline void slb_shadow_update(unsigned long ea, int ssize,
|
||||
* we only update the current CPU's SLB shadow buffer.
|
||||
*/
|
||||
get_slb_shadow()->save_area[entry].esid = 0;
|
||||
get_slb_shadow()->save_area[entry].vsid = mk_vsid_data(ea, ssize, flags);
|
||||
get_slb_shadow()->save_area[entry].esid = mk_esid_data(ea, ssize, entry);
|
||||
get_slb_shadow()->save_area[entry].vsid =
|
||||
cpu_to_be64(mk_vsid_data(ea, ssize, flags));
|
||||
get_slb_shadow()->save_area[entry].esid =
|
||||
cpu_to_be64(mk_esid_data(ea, ssize, entry));
|
||||
}
|
||||
|
||||
static inline void slb_shadow_clear(unsigned long entry)
|
||||
@@ -112,7 +114,8 @@ static void __slb_flush_and_rebolt(void)
|
||||
} else {
|
||||
/* Update stack entry; others don't change */
|
||||
slb_shadow_update(get_paca()->kstack, mmu_kernel_ssize, lflags, 2);
|
||||
ksp_vsid_data = get_slb_shadow()->save_area[2].vsid;
|
||||
ksp_vsid_data =
|
||||
be64_to_cpu(get_slb_shadow()->save_area[2].vsid);
|
||||
}
|
||||
|
||||
/* We need to do this all in asm, so we're sure we don't touch
|
||||
|
Reference in New Issue
Block a user