WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] xen: Fix xen_flush_tlb_others

To: Ingo Molnar <mingo@xxxxxxx>
Subject: [Xen-devel] [PATCH] xen: Fix xen_flush_tlb_others
From: Jeremy Fitzhardinge <jeremy@xxxxxxxx>
Date: Thu, 12 Feb 2009 16:25:42 -0800
Cc: Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>, the arch/x86 maintainers <x86@xxxxxxxxxx>, Linux Kernel Mailing List <linux-kernel@xxxxxxxxxxxxxxx>
Delivery-date: Thu, 12 Feb 2009 16:26:13 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 2.0.0.19 (X11/20090105)
From: Ian Campbell <Ian.Campbell@xxxxxxxxxx>

   xen: Fix xen_flush_tlb_others
The commit
       commit 4595f9620cda8a1e973588e743cf5f8436dd20c6
       Author: Rusty Russell <rusty@xxxxxxxxxxxxxxx>
       Date:   Sat Jan 10 21:58:09 2009 -0800
x86: change flush_tlb_others to take a const struct cpumask causes xen_flush_tlb_others to allocate a multicall and then issue it
   without initializing it in the case where the cpumask is empty,
   leading to:
[ 8.354898] 1 multicall(s) failed: cpu 1
           [    8.354921] Pid: 2213, comm: bootclean Not tainted 
2.6.29-rc3-x86_32p-xenU-tip #135
           [    8.354937] Call Trace:
           [    8.354955]  [<c01036e3>] xen_mc_flush+0x133/0x1b0
           [    8.354971]  [<c0105d2a>] ? xen_force_evtchn_callback+0x1a/0x30
           [    8.354988]  [<c0105a60>] xen_flush_tlb_others+0xb0/0xd0
           [    8.355003]  [<c0126643>] flush_tlb_page+0x53/0xa0
           [    8.355018]  [<c0176a80>] do_wp_page+0x2a0/0x7c0
           [    8.355034]  [<c0238f0a>] ? notify_remote_via_irq+0x3a/0x70
           [    8.355049]  [<c0178950>] handle_mm_fault+0x7b0/0xa50
           [    8.355065]  [<c0131a3e>] ? wake_up_new_task+0x8e/0xb0
           [    8.355079]  [<c01337b5>] ? do_fork+0xe5/0x320
           [    8.355095]  [<c0121919>] do_page_fault+0xe9/0x240
           [    8.355109]  [<c0121830>] ? do_page_fault+0x0/0x240
           [    8.355125]  [<c032457a>] error_code+0x72/0x78
           [    8.355139]   call  1/1: op=2863311530 arg=[aaaaaaaa] result=-38  
   xen_flush_tlb_others+0x41/0xd0
Since empty cpumasks are rare and undoing an xen_mc_entry() is tricky
   just issue such requests normally.
Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
   Cc: Jeremy Fitzhardinge <jeremy@xxxxxxxx>
   Cc: Ingo Molnar <mingo@xxxxxxx>
   Cc: Rusty Russell <rusty@xxxxxxxxxxxxxxx>
   Cc: Mike Travis <travis@xxxxxxx>
   Cc: x86@xxxxxxxxxx

diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index d2e8ed1..319bd40 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -1273,8 +1273,6 @@ static void xen_flush_tlb_others(const struct cpumask 
*cpus,
        /* Remove us, and any offline CPUS. */
        cpumask_and(to_cpumask(args->mask), cpus, cpu_online_mask);
        cpumask_clear_cpu(smp_processor_id(), to_cpumask(args->mask));
-       if (unlikely(cpumask_empty(to_cpumask(args->mask))))
-               goto issue;

        if (va == TLB_FLUSH_ALL) {
                args->op.cmd = MMUEXT_TLB_FLUSH_MULTI;
@@ -1285,7 +1283,6 @@ static void xen_flush_tlb_others(const struct cpumask 
*cpus,

        MULTI_mmuext_op(mcs.mc, &args->op, 1, NULL, DOMID_SELF);

-issue:
        xen_mc_issue(PARAVIRT_LAZY_MMU);
}




_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>