aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2011-03-11 07:17:16 -0500
committerThomas Gleixner <tglx@linutronix.de>2011-03-12 08:12:00 -0500
commitc60eaf25cd211d2282a6edddb3ce26b1e5795097 (patch)
tree0488fa2a88af78e765476f43f768e023d5622aa7 /arch/x86/kernel
parent2c778651f73d92edb847e65d371bb29b17c7ca60 (diff)
x86: ioapic: Simplify irq chip and handler setup
Use pointers instead of ugly multiline if/else constructs. Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r--arch/x86/kernel/apic/io_apic.c48
1 files changed, 21 insertions, 27 deletions
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 7a88b04202e2..224edce72b87 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -1242,32 +1242,28 @@ static inline int IO_APIC_irq_trigger(int irq)
1242 1242
1243static void ioapic_register_intr(unsigned int irq, unsigned long trigger) 1243static void ioapic_register_intr(unsigned int irq, unsigned long trigger)
1244{ 1244{
1245 struct irq_chip *chip = &ioapic_chip;
1246 irq_flow_handler_t hdl;
1247 bool fasteoi;
1245 1248
1246 if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) || 1249 if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) ||
1247 trigger == IOAPIC_LEVEL) 1250 trigger == IOAPIC_LEVEL) {
1248 irq_set_status_flags(irq, IRQ_LEVEL); 1251 irq_set_status_flags(irq, IRQ_LEVEL);
1249 else 1252 fasteoi = true;
1253 } else {
1250 irq_clear_status_flags(irq, IRQ_LEVEL); 1254 irq_clear_status_flags(irq, IRQ_LEVEL);
1255 fasteoi = false;
1256 }
1251 1257
1252 if (irq_remapped(irq_get_chip_data(irq))) { 1258 if (irq_remapped(irq_get_chip_data(irq))) {
1253 irq_set_status_flags(irq, IRQ_MOVE_PCNTXT); 1259 irq_set_status_flags(irq, IRQ_MOVE_PCNTXT);
1254 if (trigger) 1260 chip = &ir_ioapic_chip;
1255 irq_set_chip_and_handler_name(irq, &ir_ioapic_chip, 1261 fasteoi = trigger != 0;
1256 handle_fasteoi_irq,
1257 "fasteoi");
1258 else
1259 irq_set_chip_and_handler_name(irq, &ir_ioapic_chip,
1260 handle_edge_irq, "edge");
1261 return;
1262 } 1262 }
1263 1263
1264 if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) || 1264 hdl = fasteoi ? handle_fasteoi_irq : handle_edge_irq;
1265 trigger == IOAPIC_LEVEL) 1265 irq_set_chip_and_handler_name(irq, chip, hdl,
1266 irq_set_chip_and_handler_name(irq, &ioapic_chip, 1266 fasteoi ? "fasteoi" : "edge");
1267 handle_fasteoi_irq, "fasteoi");
1268 else
1269 irq_set_chip_and_handler_name(irq, &ioapic_chip,
1270 handle_edge_irq, "edge");
1271} 1267}
1272 1268
1273static int setup_ioapic_entry(int apic_id, int irq, 1269static int setup_ioapic_entry(int apic_id, int irq,
@@ -3264,6 +3260,7 @@ static int msi_alloc_irte(struct pci_dev *dev, int irq, int nvec)
3264 3260
3265static int setup_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int irq) 3261static int setup_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int irq)
3266{ 3262{
3263 struct irq_chip *chip = &msi_chip;
3267 struct msi_msg msg; 3264 struct msi_msg msg;
3268 int ret; 3265 int ret;
3269 3266
@@ -3276,11 +3273,10 @@ static int setup_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int irq)
3276 3273
3277 if (irq_remapped(irq_get_chip_data(irq))) { 3274 if (irq_remapped(irq_get_chip_data(irq))) {
3278 irq_set_status_flags(irq, IRQ_MOVE_PCNTXT); 3275 irq_set_status_flags(irq, IRQ_MOVE_PCNTXT);
3279 irq_set_chip_and_handler_name(irq, &msi_ir_chip, 3276 chip = &msi_ir_chip;
3280 handle_edge_irq, "edge"); 3277 }
3281 } else 3278
3282 irq_set_chip_and_handler_name(irq, &msi_chip, 3279 irq_set_chip_and_handler_name(irq, chip, handle_edge_irq, "edge");
3283 handle_edge_irq, "edge");
3284 3280
3285 dev_printk(KERN_DEBUG, &dev->dev, "irq %d for MSI/MSI-X\n", irq); 3281 dev_printk(KERN_DEBUG, &dev->dev, "irq %d for MSI/MSI-X\n", irq);
3286 3282
@@ -3457,6 +3453,7 @@ static struct irq_chip hpet_msi_type = {
3457 3453
3458int arch_setup_hpet_msi(unsigned int irq, unsigned int id) 3454int arch_setup_hpet_msi(unsigned int irq, unsigned int id)
3459{ 3455{
3456 struct irq_chip *chip = &hpet_msi_type;
3460 struct msi_msg msg; 3457 struct msi_msg msg;
3461 int ret; 3458 int ret;
3462 3459
@@ -3479,12 +3476,9 @@ int arch_setup_hpet_msi(unsigned int irq, unsigned int id)
3479 hpet_msi_write(irq_get_handler_data(irq), &msg); 3476 hpet_msi_write(irq_get_handler_data(irq), &msg);
3480 irq_set_status_flags(irq, IRQ_MOVE_PCNTXT); 3477 irq_set_status_flags(irq, IRQ_MOVE_PCNTXT);
3481 if (irq_remapped(irq_get_chip_data(irq))) 3478 if (irq_remapped(irq_get_chip_data(irq)))
3482 irq_set_chip_and_handler_name(irq, &ir_hpet_msi_type, 3479 chip = &ir_hpet_msi_type;
3483 handle_edge_irq, "edge");
3484 else
3485 irq_set_chip_and_handler_name(irq, &hpet_msi_type,
3486 handle_edge_irq, "edge");
3487 3480
3481 irq_set_chip_and_handler_name(irq, chip, handle_edge_irq, "edge");
3488 return 0; 3482 return 0;
3489} 3483}
3490#endif 3484#endif