diff options
| -rw-r--r-- | arch/x86/xen/enlighten.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index 8c5ff24a492b..bc129146f99f 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c | |||
| @@ -532,26 +532,37 @@ static void xen_apic_write(unsigned long reg, u32 val) | |||
| 532 | static void xen_flush_tlb(void) | 532 | static void xen_flush_tlb(void) |
| 533 | { | 533 | { |
| 534 | struct mmuext_op *op; | 534 | struct mmuext_op *op; |
| 535 | struct multicall_space mcs = xen_mc_entry(sizeof(*op)); | 535 | struct multicall_space mcs; |
| 536 | |||
| 537 | preempt_disable(); | ||
| 538 | |||
| 539 | mcs = xen_mc_entry(sizeof(*op)); | ||
| 536 | 540 | ||
| 537 | op = mcs.args; | 541 | op = mcs.args; |
| 538 | op->cmd = MMUEXT_TLB_FLUSH_LOCAL; | 542 | op->cmd = MMUEXT_TLB_FLUSH_LOCAL; |
| 539 | MULTI_mmuext_op(mcs.mc, op, 1, NULL, DOMID_SELF); | 543 | MULTI_mmuext_op(mcs.mc, op, 1, NULL, DOMID_SELF); |
| 540 | 544 | ||
| 541 | xen_mc_issue(PARAVIRT_LAZY_MMU); | 545 | xen_mc_issue(PARAVIRT_LAZY_MMU); |
| 546 | |||
| 547 | preempt_enable(); | ||
| 542 | } | 548 | } |
| 543 | 549 | ||
| 544 | static void xen_flush_tlb_single(unsigned long addr) | 550 | static void xen_flush_tlb_single(unsigned long addr) |
| 545 | { | 551 | { |
| 546 | struct mmuext_op *op; | 552 | struct mmuext_op *op; |
| 547 | struct multicall_space mcs = xen_mc_entry(sizeof(*op)); | 553 | struct multicall_space mcs; |
| 554 | |||
| 555 | preempt_disable(); | ||
| 548 | 556 | ||
| 557 | mcs = xen_mc_entry(sizeof(*op)); | ||
| 549 | op = mcs.args; | 558 | op = mcs.args; |
| 550 | op->cmd = MMUEXT_INVLPG_LOCAL; | 559 | op->cmd = MMUEXT_INVLPG_LOCAL; |
| 551 | op->arg1.linear_addr = addr & PAGE_MASK; | 560 | op->arg1.linear_addr = addr & PAGE_MASK; |
| 552 | MULTI_mmuext_op(mcs.mc, op, 1, NULL, DOMID_SELF); | 561 | MULTI_mmuext_op(mcs.mc, op, 1, NULL, DOMID_SELF); |
| 553 | 562 | ||
| 554 | xen_mc_issue(PARAVIRT_LAZY_MMU); | 563 | xen_mc_issue(PARAVIRT_LAZY_MMU); |
| 564 | |||
| 565 | preempt_enable(); | ||
| 555 | } | 566 | } |
| 556 | 567 | ||
| 557 | static void xen_flush_tlb_others(const cpumask_t *cpus, struct mm_struct *mm, | 568 | static void xen_flush_tlb_others(const cpumask_t *cpus, struct mm_struct *mm, |
