Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit be15f9d6 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'x86-xen-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (42 commits)
  xen: cache cr0 value to avoid trap'n'emulate for read_cr0
  xen/x86-64: clean up warnings about IST-using traps
  xen/x86-64: fix breakpoints and hardware watchpoints
  xen: reserve Xen start_info rather than e820 reserving
  xen: add FIX_TEXT_POKE to fixmap
  lguest: update lazy mmu changes to match lguest's use of kvm hypercalls
  xen: honour VCPU availability on boot
  xen: add "capabilities" file
  xen: drop kexec bits from /sys/hypervisor since kexec isn't implemented yet
  xen/sys/hypervisor: change writable_pt to features
  xen: add /sys/hypervisor support
  xen/xenbus: export xenbus_dev_changed
  xen: use device model for suspending xenbus devices
  xen: remove suspend_cancel hook
  xen/dev-evtchn: clean up locking in evtchn
  xen: export ioctl headers to userspace
  xen: add /dev/xen/evtchn driver
  xen: add irq_from_evtchn
  xen: clean up gate trap/interrupt constants
  xen: set _PAGE_NX in __supported_pte_mask before pagetable construction
  ...
parents 595dc54a a789ed5f
Loading
Loading
Loading
Loading
+11 −11
Original line number Original line Diff line number Diff line
@@ -56,6 +56,7 @@ struct desc_ptr;
struct tss_struct;
struct tss_struct;
struct mm_struct;
struct mm_struct;
struct desc_struct;
struct desc_struct;
struct task_struct;


/*
/*
 * Wrapper type for pointers to code which uses the non-standard
 * Wrapper type for pointers to code which uses the non-standard
@@ -203,7 +204,8 @@ struct pv_cpu_ops {


	void (*swapgs)(void);
	void (*swapgs)(void);


	struct pv_lazy_ops lazy_mode;
	void (*start_context_switch)(struct task_struct *prev);
	void (*end_context_switch)(struct task_struct *next);
};
};


struct pv_irq_ops {
struct pv_irq_ops {
@@ -1399,25 +1401,23 @@ enum paravirt_lazy_mode {
};
};


enum paravirt_lazy_mode paravirt_get_lazy_mode(void);
enum paravirt_lazy_mode paravirt_get_lazy_mode(void);
void paravirt_enter_lazy_cpu(void);
void paravirt_start_context_switch(struct task_struct *prev);
void paravirt_leave_lazy_cpu(void);
void paravirt_end_context_switch(struct task_struct *next);

void paravirt_enter_lazy_mmu(void);
void paravirt_enter_lazy_mmu(void);
void paravirt_leave_lazy_mmu(void);
void paravirt_leave_lazy_mmu(void);
void paravirt_leave_lazy(enum paravirt_lazy_mode mode);


#define  __HAVE_ARCH_ENTER_LAZY_CPU_MODE
#define  __HAVE_ARCH_START_CONTEXT_SWITCH
static inline void arch_enter_lazy_cpu_mode(void)
static inline void arch_start_context_switch(struct task_struct *prev)
{
{
	PVOP_VCALL0(pv_cpu_ops.lazy_mode.enter);
	PVOP_VCALL1(pv_cpu_ops.start_context_switch, prev);
}
}


static inline void arch_leave_lazy_cpu_mode(void)
static inline void arch_end_context_switch(struct task_struct *next)
{
{
	PVOP_VCALL0(pv_cpu_ops.lazy_mode.leave);
	PVOP_VCALL1(pv_cpu_ops.end_context_switch, next);
}
}


void arch_flush_lazy_cpu_mode(void);

#define  __HAVE_ARCH_ENTER_LAZY_MMU_MODE
#define  __HAVE_ARCH_ENTER_LAZY_MMU_MODE
static inline void arch_enter_lazy_mmu_mode(void)
static inline void arch_enter_lazy_mmu_mode(void)
{
{
+2 −0
Original line number Original line Diff line number Diff line
@@ -81,6 +81,8 @@ static inline void __init paravirt_pagetable_setup_done(pgd_t *base)
#define pte_val(x)	native_pte_val(x)
#define pte_val(x)	native_pte_val(x)
#define __pte(x)	native_make_pte(x)
#define __pte(x)	native_make_pte(x)


#define arch_end_context_switch(prev)	do {} while(0)

#endif	/* CONFIG_PARAVIRT */
#endif	/* CONFIG_PARAVIRT */


/*
/*
+7 −1
Original line number Original line Diff line number Diff line
@@ -48,9 +48,15 @@
#endif
#endif


#ifdef CONFIG_X86_64
#ifdef CONFIG_X86_64
#ifdef CONFIG_PARAVIRT
/* Paravirtualized systems may not have PSE or PGE available */
#define NEED_PSE	0
#define NEED_PSE	0
#define NEED_MSR	(1<<(X86_FEATURE_MSR & 31))
#define NEED_PGE	0
#define NEED_PGE	0
#else
#define NEED_PSE	(1<<(X86_FEATURE_PSE) & 31)
#define NEED_PGE	(1<<(X86_FEATURE_PGE) & 31)
#endif
#define NEED_MSR	(1<<(X86_FEATURE_MSR & 31))
#define NEED_FXSR	(1<<(X86_FEATURE_FXSR & 31))
#define NEED_FXSR	(1<<(X86_FEATURE_FXSR & 31))
#define NEED_XMM	(1<<(X86_FEATURE_XMM & 31))
#define NEED_XMM	(1<<(X86_FEATURE_XMM & 31))
#define NEED_XMM2	(1<<(X86_FEATURE_XMM2 & 31))
#define NEED_XMM2	(1<<(X86_FEATURE_XMM2 & 31))
+3 −1
Original line number Original line Diff line number Diff line
@@ -94,7 +94,8 @@ struct thread_info {
#define TIF_FORCED_TF		24	/* true if TF in eflags artificially */
#define TIF_FORCED_TF		24	/* true if TF in eflags artificially */
#define TIF_DEBUGCTLMSR		25	/* uses thread_struct.debugctlmsr */
#define TIF_DEBUGCTLMSR		25	/* uses thread_struct.debugctlmsr */
#define TIF_DS_AREA_MSR		26      /* uses thread_struct.ds_area_msr */
#define TIF_DS_AREA_MSR		26      /* uses thread_struct.ds_area_msr */
#define TIF_SYSCALL_FTRACE	27	/* for ftrace syscall instrumentation */
#define TIF_LAZY_MMU_UPDATES	27	/* task is updating the mmu lazily */
#define TIF_SYSCALL_FTRACE	28	/* for ftrace syscall instrumentation */


#define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE)
#define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE)
#define _TIF_NOTIFY_RESUME	(1 << TIF_NOTIFY_RESUME)
#define _TIF_NOTIFY_RESUME	(1 << TIF_NOTIFY_RESUME)
@@ -116,6 +117,7 @@ struct thread_info {
#define _TIF_FORCED_TF		(1 << TIF_FORCED_TF)
#define _TIF_FORCED_TF		(1 << TIF_FORCED_TF)
#define _TIF_DEBUGCTLMSR	(1 << TIF_DEBUGCTLMSR)
#define _TIF_DEBUGCTLMSR	(1 << TIF_DEBUGCTLMSR)
#define _TIF_DS_AREA_MSR	(1 << TIF_DS_AREA_MSR)
#define _TIF_DS_AREA_MSR	(1 << TIF_DS_AREA_MSR)
#define _TIF_LAZY_MMU_UPDATES	(1 << TIF_LAZY_MMU_UPDATES)
#define _TIF_SYSCALL_FTRACE	(1 << TIF_SYSCALL_FTRACE)
#define _TIF_SYSCALL_FTRACE	(1 << TIF_SYSCALL_FTRACE)


/* work to do in syscall_trace_enter() */
/* work to do in syscall_trace_enter() */
+3 −0
Original line number Original line Diff line number Diff line
@@ -14,6 +14,9 @@ asmlinkage void divide_error(void);
asmlinkage void debug(void);
asmlinkage void debug(void);
asmlinkage void nmi(void);
asmlinkage void nmi(void);
asmlinkage void int3(void);
asmlinkage void int3(void);
asmlinkage void xen_debug(void);
asmlinkage void xen_int3(void);
asmlinkage void xen_stack_segment(void);
asmlinkage void overflow(void);
asmlinkage void overflow(void);
asmlinkage void bounds(void);
asmlinkage void bounds(void);
asmlinkage void invalid_op(void);
asmlinkage void invalid_op(void);
Loading