forked from luck/tmp_suning_uos_patched
b937ff628f
KVM modifies CP0_HWREna during guest execution so it can trap and emulate RDHWR instructions, however it always restores the hardcoded value 0x2000000F. This assumes the presence of the UserLocal register, and the absence of any implementation dependent or future HW registers. Fix by exporting the value that traps.c write into CP0_HWREna, and loading from there instead of hard coding. Signed-off-by: James Hogan <james.hogan@imgtec.com> Acked-by: Ralf Baechle <ralf@linux-mips.org> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Radim Krčmář <rkrcmar@redhat.com> Cc: linux-mips@linux-mips.org Cc: kvm@vger.kernel.org Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
29 lines
846 B
C
29 lines
846 B
C
#ifndef _MIPS_SETUP_H
|
|
#define _MIPS_SETUP_H
|
|
|
|
#include <uapi/asm/setup.h>
|
|
|
|
extern void setup_early_printk(void);
|
|
|
|
#ifdef CONFIG_EARLY_PRINTK_8250
|
|
extern void setup_8250_early_printk_port(unsigned long base,
|
|
unsigned int reg_shift, unsigned int timeout);
|
|
#else
|
|
static inline void setup_8250_early_printk_port(unsigned long base,
|
|
unsigned int reg_shift, unsigned int timeout) {}
|
|
#endif
|
|
|
|
extern void set_handler(unsigned long offset, void *addr, unsigned long len);
|
|
extern void set_uncached_handler(unsigned long offset, void *addr, unsigned long len);
|
|
|
|
typedef void (*vi_handler_t)(void);
|
|
extern void *set_vi_handler(int n, vi_handler_t addr);
|
|
|
|
extern void *set_except_vector(int n, void *addr);
|
|
extern unsigned long ebase;
|
|
extern unsigned int hwrena;
|
|
extern void per_cpu_trap_init(bool);
|
|
extern void cpu_cache_init(void);
|
|
|
|
#endif /* __SETUP_H */
|