KVM: PPC: move compute_tlbie_rb to book3s_64 common header
compute_tlbie_rb is only used on ppc64 and cannot be compiled on ppc32. Signed-off-by: Andreas Schwab <schwab@linux-m68k.org> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
4d25a066b6
commit
36cc66d638
|
@ -381,39 +381,6 @@ static inline bool kvmppc_critical_section(struct kvm_vcpu *vcpu)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static inline unsigned long compute_tlbie_rb(unsigned long v, unsigned long r,
|
|
||||||
unsigned long pte_index)
|
|
||||||
{
|
|
||||||
unsigned long rb, va_low;
|
|
||||||
|
|
||||||
rb = (v & ~0x7fUL) << 16; /* AVA field */
|
|
||||||
va_low = pte_index >> 3;
|
|
||||||
if (v & HPTE_V_SECONDARY)
|
|
||||||
va_low = ~va_low;
|
|
||||||
/* xor vsid from AVA */
|
|
||||||
if (!(v & HPTE_V_1TB_SEG))
|
|
||||||
va_low ^= v >> 12;
|
|
||||||
else
|
|
||||||
va_low ^= v >> 24;
|
|
||||||
va_low &= 0x7ff;
|
|
||||||
if (v & HPTE_V_LARGE) {
|
|
||||||
rb |= 1; /* L field */
|
|
||||||
if (cpu_has_feature(CPU_FTR_ARCH_206) &&
|
|
||||||
(r & 0xff000)) {
|
|
||||||
/* non-16MB large page, must be 64k */
|
|
||||||
/* (masks depend on page size) */
|
|
||||||
rb |= 0x1000; /* page encoding in LP field */
|
|
||||||
rb |= (va_low & 0x7f) << 16; /* 7b of VA in AVA/LP field */
|
|
||||||
rb |= (va_low & 0xfe); /* AVAL field (P7 doesn't seem to care) */
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* 4kB page */
|
|
||||||
rb |= (va_low & 0x7ff) << 12; /* remaining 11b of VA */
|
|
||||||
}
|
|
||||||
rb |= (v >> 54) & 0x300; /* B field */
|
|
||||||
return rb;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Magic register values loaded into r3 and r4 before the 'sc' assembly
|
/* Magic register values loaded into r3 and r4 before the 'sc' assembly
|
||||||
* instruction for the OSI hypercalls */
|
* instruction for the OSI hypercalls */
|
||||||
#define OSI_SC_MAGIC_R3 0x113724FA
|
#define OSI_SC_MAGIC_R3 0x113724FA
|
||||||
|
|
|
@ -29,4 +29,37 @@ static inline struct kvmppc_book3s_shadow_vcpu *to_svcpu(struct kvm_vcpu *vcpu)
|
||||||
|
|
||||||
#define SPAPR_TCE_SHIFT 12
|
#define SPAPR_TCE_SHIFT 12
|
||||||
|
|
||||||
|
static inline unsigned long compute_tlbie_rb(unsigned long v, unsigned long r,
|
||||||
|
unsigned long pte_index)
|
||||||
|
{
|
||||||
|
unsigned long rb, va_low;
|
||||||
|
|
||||||
|
rb = (v & ~0x7fUL) << 16; /* AVA field */
|
||||||
|
va_low = pte_index >> 3;
|
||||||
|
if (v & HPTE_V_SECONDARY)
|
||||||
|
va_low = ~va_low;
|
||||||
|
/* xor vsid from AVA */
|
||||||
|
if (!(v & HPTE_V_1TB_SEG))
|
||||||
|
va_low ^= v >> 12;
|
||||||
|
else
|
||||||
|
va_low ^= v >> 24;
|
||||||
|
va_low &= 0x7ff;
|
||||||
|
if (v & HPTE_V_LARGE) {
|
||||||
|
rb |= 1; /* L field */
|
||||||
|
if (cpu_has_feature(CPU_FTR_ARCH_206) &&
|
||||||
|
(r & 0xff000)) {
|
||||||
|
/* non-16MB large page, must be 64k */
|
||||||
|
/* (masks depend on page size) */
|
||||||
|
rb |= 0x1000; /* page encoding in LP field */
|
||||||
|
rb |= (va_low & 0x7f) << 16; /* 7b of VA in AVA/LP field */
|
||||||
|
rb |= (va_low & 0xfe); /* AVAL field (P7 doesn't seem to care) */
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* 4kB page */
|
||||||
|
rb |= (va_low & 0x7ff) << 12; /* remaining 11b of VA */
|
||||||
|
}
|
||||||
|
rb |= (v >> 54) & 0x300; /* B field */
|
||||||
|
return rb;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* __ASM_KVM_BOOK3S_64_H__ */
|
#endif /* __ASM_KVM_BOOK3S_64_H__ */
|
||||||
|
|
Loading…
Reference in New Issue