diff options
author | Fernando Luis [** ISO-8859-1 charset **] VázquezCao <fernando@oss.ntt.co.jp> | 2007-05-02 13:27:18 -0400 |
---|---|---|
committer | Andi Kleen <andi@basil.nowhere.org> | 2007-05-02 13:27:18 -0400 |
commit | 9062d888aa448318e38792b6879a795dd10adda4 (patch) | |
tree | facddd433abf2adcc342bdcfb1ff5ddb3704b519 /arch/x86_64 | |
parent | 45ae5e968ea01d8326833ca2863cec5183ce1930 (diff) |
[PATCH] x86-64: __send_IPI_dest_field - x86_64
Implement __send_IPI_dest_field which can be used to send IPIs when the
"destination shorthand" field of the ICR is set to 00 (destination
field). Use it whenever possible.
Signed-off-by: Fernando Luis Vazquez Cao <fernando@oss.ntt.co.jp>
Signed-off-by: Andi Kleen <ak@suse.de>
Diffstat (limited to 'arch/x86_64')
-rw-r--r-- | arch/x86_64/kernel/genapic_flat.c | 23 |
1 files changed, 1 insertions, 22 deletions
diff --git a/arch/x86_64/kernel/genapic_flat.c b/arch/x86_64/kernel/genapic_flat.c index 9e0a552f0e4a..01d3939e3a9c 100644 --- a/arch/x86_64/kernel/genapic_flat.c +++ b/arch/x86_64/kernel/genapic_flat.c | |||
@@ -61,31 +61,10 @@ static void flat_init_apic_ldr(void) | |||
61 | static void flat_send_IPI_mask(cpumask_t cpumask, int vector) | 61 | static void flat_send_IPI_mask(cpumask_t cpumask, int vector) |
62 | { | 62 | { |
63 | unsigned long mask = cpus_addr(cpumask)[0]; | 63 | unsigned long mask = cpus_addr(cpumask)[0]; |
64 | unsigned long cfg; | ||
65 | unsigned long flags; | 64 | unsigned long flags; |
66 | 65 | ||
67 | local_irq_save(flags); | 66 | local_irq_save(flags); |
68 | 67 | __send_IPI_dest_field(mask, vector, APIC_DEST_LOGICAL); | |
69 | /* | ||
70 | * Wait for idle. | ||
71 | */ | ||
72 | apic_wait_icr_idle(); | ||
73 | |||
74 | /* | ||
75 | * prepare target chip field | ||
76 | */ | ||
77 | cfg = __prepare_ICR2(mask); | ||
78 | apic_write(APIC_ICR2, cfg); | ||
79 | |||
80 | /* | ||
81 | * program the ICR | ||
82 | */ | ||
83 | cfg = __prepare_ICR(0, vector, APIC_DEST_LOGICAL); | ||
84 | |||
85 | /* | ||
86 | * Send the IPI. The write to APIC_ICR fires this off. | ||
87 | */ | ||
88 | apic_write(APIC_ICR, cfg); | ||
89 | local_irq_restore(flags); | 68 | local_irq_restore(flags); |
90 | } | 69 | } |
91 | 70 | ||