Loading arch/x86/kernel/apic/io_apic.c +21 −27 Original line number Original line Diff line number Diff line Loading @@ -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, Loading Loading @@ -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; Loading @@ -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); Loading Loading @@ -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; Loading @@ -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 Loading Loading
arch/x86/kernel/apic/io_apic.c +21 −27 Original line number Original line Diff line number Diff line Loading @@ -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, Loading Loading @@ -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; Loading @@ -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); Loading Loading @@ -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; Loading @@ -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 Loading