Merge branch 'x86-xen-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* '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 ...
This commit is contained in:
@@ -452,10 +452,6 @@ void set_pte_mfn(unsigned long vaddr, unsigned long mfn, pgprot_t flags)
|
||||
void xen_set_pte_at(struct mm_struct *mm, unsigned long addr,
|
||||
pte_t *ptep, pte_t pteval)
|
||||
{
|
||||
/* updates to init_mm may be done without lock */
|
||||
if (mm == &init_mm)
|
||||
preempt_disable();
|
||||
|
||||
ADD_STATS(set_pte_at, 1);
|
||||
// ADD_STATS(set_pte_at_pinned, xen_page_pinned(ptep));
|
||||
ADD_STATS(set_pte_at_current, mm == current->mm);
|
||||
@@ -476,9 +472,7 @@ void xen_set_pte_at(struct mm_struct *mm, unsigned long addr,
|
||||
}
|
||||
xen_set_pte(ptep, pteval);
|
||||
|
||||
out:
|
||||
if (mm == &init_mm)
|
||||
preempt_enable();
|
||||
out: return;
|
||||
}
|
||||
|
||||
pte_t xen_ptep_modify_prot_start(struct mm_struct *mm,
|
||||
@@ -1152,10 +1146,8 @@ static void drop_other_mm_ref(void *info)
|
||||
|
||||
/* If this cpu still has a stale cr3 reference, then make sure
|
||||
it has been flushed. */
|
||||
if (percpu_read(xen_current_cr3) == __pa(mm->pgd)) {
|
||||
if (percpu_read(xen_current_cr3) == __pa(mm->pgd))
|
||||
load_cr3(swapper_pg_dir);
|
||||
arch_flush_lazy_cpu_mode();
|
||||
}
|
||||
}
|
||||
|
||||
static void xen_drop_mm_ref(struct mm_struct *mm)
|
||||
@@ -1168,7 +1160,6 @@ static void xen_drop_mm_ref(struct mm_struct *mm)
|
||||
load_cr3(swapper_pg_dir);
|
||||
else
|
||||
leave_mm(smp_processor_id());
|
||||
arch_flush_lazy_cpu_mode();
|
||||
}
|
||||
|
||||
/* Get the "official" set of cpus referring to our pagetable. */
|
||||
@@ -1876,6 +1867,14 @@ __init void xen_post_allocator_init(void)
|
||||
xen_mark_init_mm_pinned();
|
||||
}
|
||||
|
||||
static void xen_leave_lazy_mmu(void)
|
||||
{
|
||||
preempt_disable();
|
||||
xen_mc_flush();
|
||||
paravirt_leave_lazy_mmu();
|
||||
preempt_enable();
|
||||
}
|
||||
|
||||
const struct pv_mmu_ops xen_mmu_ops __initdata = {
|
||||
.pagetable_setup_start = xen_pagetable_setup_start,
|
||||
.pagetable_setup_done = xen_pagetable_setup_done,
|
||||
@@ -1949,7 +1948,7 @@ const struct pv_mmu_ops xen_mmu_ops __initdata = {
|
||||
|
||||
.lazy_mode = {
|
||||
.enter = paravirt_enter_lazy_mmu,
|
||||
.leave = xen_leave_lazy,
|
||||
.leave = xen_leave_lazy_mmu,
|
||||
},
|
||||
|
||||
.set_fixmap = xen_set_fixmap,
|
||||
|
Reference in New Issue
Block a user