[POWERPC] Implement SLB shadow buffer
This adds a shadow buffer for the SLBs and regsiters it with PHYP. Only the bolted SLB entries (top 3) are shadowed. The SLB shadow buffer tells the hypervisor what the kernel needs to have in the SLB for the kernel to be able to function. The hypervisor can use this information to speed up partition context switches. Signed-off-by: Michael Neuling <mikey@neuling.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:

committed by
Paul Mackerras

parent
452b5e2121
commit
2f6093c847
@@ -27,7 +27,9 @@
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
#include <linux/cache.h>
|
||||
#include <asm/types.h>
|
||||
#include <asm/mmu.h>
|
||||
|
||||
/* The Hypervisor barfs if the lppaca crosses a page boundary. A 1k
|
||||
* alignment is sufficient to prevent this */
|
||||
@@ -133,5 +135,22 @@ struct lppaca {
|
||||
|
||||
extern struct lppaca lppaca[];
|
||||
|
||||
/*
|
||||
* SLB shadow buffer structure as defined in the PAPR. The save_area
|
||||
* contains adjacent ESID and VSID pairs for each shadowed SLB. The
|
||||
* ESID is stored in the lower 64bits, then the VSID.
|
||||
*/
|
||||
struct slb_shadow {
|
||||
u32 persistent; // Number of persistent SLBs x00-x03
|
||||
u32 buffer_length; // Total shadow buffer length x04-x07
|
||||
u64 reserved; // Alignment x08-x0f
|
||||
struct {
|
||||
u64 esid;
|
||||
u64 vsid;
|
||||
} save_area[SLB_NUM_BOLTED]; // x10-x40
|
||||
} ____cacheline_aligned;
|
||||
|
||||
extern struct slb_shadow slb_shadow[];
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _ASM_POWERPC_LPPACA_H */
|
||||
|
Reference in New Issue
Block a user