提交 c60eaf25 编写于 作者: T Thomas Gleixner

x86: ioapic: Simplify irq chip and handler setup

Use pointers instead of ugly multiline if/else constructs.
Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
上级 2c778651
...@@ -1242,32 +1242,28 @@ static inline int IO_APIC_irq_trigger(int irq) ...@@ -1242,32 +1242,28 @@ static inline int IO_APIC_irq_trigger(int irq)
static void ioapic_register_intr(unsigned int irq, unsigned long trigger) static void ioapic_register_intr(unsigned int irq, unsigned long trigger)
{ {
struct irq_chip *chip = &ioapic_chip;
irq_flow_handler_t hdl;
bool fasteoi;
if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) || if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) ||
trigger == IOAPIC_LEVEL) trigger == IOAPIC_LEVEL) {
irq_set_status_flags(irq, IRQ_LEVEL); irq_set_status_flags(irq, IRQ_LEVEL);
else fasteoi = true;
} else {
irq_clear_status_flags(irq, IRQ_LEVEL); irq_clear_status_flags(irq, IRQ_LEVEL);
fasteoi = false;
}
if (irq_remapped(irq_get_chip_data(irq))) { if (irq_remapped(irq_get_chip_data(irq))) {
irq_set_status_flags(irq, IRQ_MOVE_PCNTXT); irq_set_status_flags(irq, IRQ_MOVE_PCNTXT);
if (trigger) chip = &ir_ioapic_chip;
irq_set_chip_and_handler_name(irq, &ir_ioapic_chip, fasteoi = trigger != 0;
handle_fasteoi_irq,
"fasteoi");
else
irq_set_chip_and_handler_name(irq, &ir_ioapic_chip,
handle_edge_irq, "edge");
return;
} }
if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) || hdl = fasteoi ? handle_fasteoi_irq : handle_edge_irq;
trigger == IOAPIC_LEVEL) irq_set_chip_and_handler_name(irq, chip, hdl,
irq_set_chip_and_handler_name(irq, &ioapic_chip, fasteoi ? "fasteoi" : "edge");
handle_fasteoi_irq, "fasteoi");
else
irq_set_chip_and_handler_name(irq, &ioapic_chip,
handle_edge_irq, "edge");
} }
static int setup_ioapic_entry(int apic_id, int irq, static 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,6 +3260,7 @@ static int msi_alloc_irte(struct pci_dev *dev, int irq, int nvec)
static int setup_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int irq) static int setup_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int irq)
{ {
struct irq_chip *chip = &msi_chip;
struct msi_msg msg; struct msi_msg msg;
int ret; int ret;
...@@ -3276,11 +3273,10 @@ static int setup_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int irq) ...@@ -3276,11 +3273,10 @@ static int setup_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int irq)
if (irq_remapped(irq_get_chip_data(irq))) { if (irq_remapped(irq_get_chip_data(irq))) {
irq_set_status_flags(irq, IRQ_MOVE_PCNTXT); irq_set_status_flags(irq, IRQ_MOVE_PCNTXT);
irq_set_chip_and_handler_name(irq, &msi_ir_chip, chip = &msi_ir_chip;
handle_edge_irq, "edge"); }
} else
irq_set_chip_and_handler_name(irq, &msi_chip, irq_set_chip_and_handler_name(irq, chip, handle_edge_irq, "edge");
handle_edge_irq, "edge");
dev_printk(KERN_DEBUG, &dev->dev, "irq %d for MSI/MSI-X\n", irq); dev_printk(KERN_DEBUG, &dev->dev, "irq %d for MSI/MSI-X\n", irq);
...@@ -3457,6 +3453,7 @@ static struct irq_chip hpet_msi_type = { ...@@ -3457,6 +3453,7 @@ static struct irq_chip hpet_msi_type = {
int arch_setup_hpet_msi(unsigned int irq, unsigned int id) int arch_setup_hpet_msi(unsigned int irq, unsigned int id)
{ {
struct irq_chip *chip = &hpet_msi_type;
struct msi_msg msg; struct msi_msg msg;
int ret; int ret;
...@@ -3479,12 +3476,9 @@ int arch_setup_hpet_msi(unsigned int irq, unsigned int id) ...@@ -3479,12 +3476,9 @@ int arch_setup_hpet_msi(unsigned int irq, unsigned int id)
hpet_msi_write(irq_get_handler_data(irq), &msg); hpet_msi_write(irq_get_handler_data(irq), &msg);
irq_set_status_flags(irq, IRQ_MOVE_PCNTXT); irq_set_status_flags(irq, IRQ_MOVE_PCNTXT);
if (irq_remapped(irq_get_chip_data(irq))) if (irq_remapped(irq_get_chip_data(irq)))
irq_set_chip_and_handler_name(irq, &ir_hpet_msi_type, chip = &ir_hpet_msi_type;
handle_edge_irq, "edge");
else
irq_set_chip_and_handler_name(irq, &hpet_msi_type,
handle_edge_irq, "edge");
irq_set_chip_and_handler_name(irq, chip, handle_edge_irq, "edge");
return 0; return 0;
} }
#endif #endif
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册