summaryrefslogtreecommitdiffstats
path: root/sys/i386
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2009-05-30 15:20:25 +0000
committeradrian <adrian@FreeBSD.org>2009-05-30 15:20:25 +0000
commite0e83e1ad263685fa033613da02f7fa0ed8ccccf (patch)
tree9a06d3a1f8f3bf969c2572ee9e5cee110349725b /sys/i386
parentb523608331b881784ac18a7dfcb65c7a679130b0 (diff)
downloadFreeBSD-src-e0e83e1ad263685fa033613da02f7fa0ed8ccccf.zip
FreeBSD-src-e0e83e1ad263685fa033613da02f7fa0ed8ccccf.tar.gz
Even though I'm not quite sure that the call_func stuff will work properly
in all the places/cases IPI messages will be generated, at least be consistent with how the call_data pointer is assigned and cleared (ie, all done inside the spinlock. Ensure that its NULL before continuing, just to try and identify situations where things are going horribly wrong.
Diffstat (limited to 'sys/i386')
-rw-r--r--sys/i386/xen/mp_machdep.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/sys/i386/xen/mp_machdep.c b/sys/i386/xen/mp_machdep.c
index ef1ef12..d4a34ad 100644
--- a/sys/i386/xen/mp_machdep.c
+++ b/sys/i386/xen/mp_machdep.c
@@ -973,14 +973,14 @@ smp_tlb_shootdown(u_int vector, vm_offset_t addr1, vm_offset_t addr2)
u_int ncpu;
struct _call_data data;
- call_data = &data;
-
ncpu = mp_ncpus - 1; /* does not shootdown self */
if (ncpu < 1)
return; /* no other cpus */
if (!(read_eflags() & PSL_I))
panic("%s: interrupts disabled", __func__);
mtx_lock_spin(&smp_ipi_mtx);
+ KASSERT(call_data == NULL, ("call_data isn't null?!"));
+ call_data = &data;
call_data->func_id = vector;
call_data->arg1 = addr1;
call_data->arg2 = addr2;
@@ -1021,6 +1021,7 @@ smp_targeted_tlb_shootdown(cpumask_t mask, u_int vector, vm_offset_t addr1, vm_o
if (!(read_eflags() & PSL_I))
panic("%s: interrupts disabled", __func__);
mtx_lock_spin(&smp_ipi_mtx);
+ KASSERT(call_data == NULL, ("call_data isn't null?!"));
call_data = &data;
call_data->func_id = vector;
call_data->arg1 = addr1;
OpenPOWER on IntegriCloud