git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
arch
/
i386
/
kernel
/
smp-xen.c
diff --git
a/arch/i386/kernel/smp-xen.c
b/arch/i386/kernel/smp-xen.c
index
78e3784
..
38166e2
100644
(file)
--- a/
arch/i386/kernel/smp-xen.c
+++ b/
arch/i386/kernel/smp-xen.c
@@
-118,7
+118,17
@@
DEFINE_PER_CPU(struct tlb_state, cpu_tlbstate) ____cacheline_aligned = { &init_m
static inline int __prepare_ICR (unsigned int shortcut, int vector)
{
static inline int __prepare_ICR (unsigned int shortcut, int vector)
{
- return APIC_DM_FIXED | shortcut | vector | APIC_DEST_LOGICAL;
+ unsigned int icr = shortcut | APIC_DEST_LOGICAL;
+
+ switch (vector) {
+ default:
+ icr |= APIC_DM_FIXED | vector;
+ break;
+ case NMI_VECTOR:
+ icr |= APIC_DM_NMI;
+ break;
+ }
+ return icr;
}
static inline int __prepare_ICR2 (unsigned int mask)
}
static inline int __prepare_ICR2 (unsigned int mask)
@@
-167,16
+177,17
@@
void fastcall send_IPI_self(int vector)
/*
* This is only used on smaller machines.
*/
/*
* This is only used on smaller machines.
*/
-void send_IPI_mask_bitmask(cpumask_t mask, int vector)
+void send_IPI_mask_bitmask(cpumask_t
cpu
mask, int vector)
{
{
+ unsigned long mask = cpus_addr(cpumask)[0];
unsigned long flags;
unsigned int cpu;
local_irq_save(flags);
unsigned long flags;
unsigned int cpu;
local_irq_save(flags);
- WARN_ON(
cpus_addr(mask)[0]
& ~cpus_addr(cpu_online_map)[0]);
+ WARN_ON(
mask
& ~cpus_addr(cpu_online_map)[0]);
for (cpu = 0; cpu < NR_CPUS; ++cpu) {
for (cpu = 0; cpu < NR_CPUS; ++cpu) {
- if (cpu_isset(cpu, mask)) {
+ if (cpu_isset(cpu,
cpu
mask)) {
__send_IPI_one(cpu, vector);
}
}
__send_IPI_one(cpu, vector);
}
}
@@
-409,7
+420,7
@@
void flush_tlb_page(struct vm_area_struct * vma, unsigned long va)
if (current->active_mm == mm) {
if(current->mm)
__flush_tlb_one(va);
if (current->active_mm == mm) {
if(current->mm)
__flush_tlb_one(va);
- else
+
else
leave_mm(smp_processor_id());
}
leave_mm(smp_processor_id());
}
@@
-582,7
+593,6
@@
void smp_send_stop(void)
irqreturn_t smp_reschedule_interrupt(int irq, void *dev_id,
struct pt_regs *regs)
{
irqreturn_t smp_reschedule_interrupt(int irq, void *dev_id,
struct pt_regs *regs)
{
-
return IRQ_HANDLED;
}
return IRQ_HANDLED;
}