aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorFernando Luis [** ISO-8859-1 charset **] VázquezCao <fernando@oss.ntt.co.jp>2007-05-02 13:27:18 -0400
committerAndi Kleen <andi@basil.nowhere.org>2007-05-02 13:27:18 -0400
commit9062d888aa448318e38792b6879a795dd10adda4 (patch)
treefacddd433abf2adcc342bdcfb1ff5ddb3704b519 /arch
parent45ae5e968ea01d8326833ca2863cec5183ce1930 (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')
-rw-r--r--arch/x86_64/kernel/genapic_flat.c23
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)
61static void flat_send_IPI_mask(cpumask_t cpumask, int vector) 61static 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