Loading arch/ia64/kernel/iosapic.c +38 −32 Original line number Diff line number Diff line Loading @@ -257,7 +257,7 @@ set_rte (unsigned int gsi, unsigned int irq, unsigned int dest, int mask) } static void nop (unsigned int irq) nop (struct irq_data *data) { /* do nothing... */ } Loading Loading @@ -287,8 +287,9 @@ kexec_disable_iosapic(void) #endif static void mask_irq (unsigned int irq) mask_irq (struct irq_data *data) { unsigned int irq = data->irq; u32 low32; int rte_index; struct iosapic_rte_info *rte; Loading @@ -305,8 +306,9 @@ mask_irq (unsigned int irq) } static void unmask_irq (unsigned int irq) unmask_irq (struct irq_data *data) { unsigned int irq = data->irq; u32 low32; int rte_index; struct iosapic_rte_info *rte; Loading @@ -323,9 +325,11 @@ unmask_irq (unsigned int irq) static int iosapic_set_affinity(unsigned int irq, const struct cpumask *mask) iosapic_set_affinity(struct irq_data *data, const struct cpumask *mask, bool force) { #ifdef CONFIG_SMP unsigned int irq = data->irq; u32 high32, low32; int cpu, dest, rte_index; int redir = (irq & IA64_IRQ_REDIRECTED) ? 1 : 0; Loading Loading @@ -379,15 +383,16 @@ iosapic_set_affinity(unsigned int irq, const struct cpumask *mask) */ static unsigned int iosapic_startup_level_irq (unsigned int irq) iosapic_startup_level_irq (struct irq_data *data) { unmask_irq(irq); unmask_irq(data); return 0; } static void iosapic_unmask_level_irq (unsigned int irq) iosapic_unmask_level_irq (struct irq_data *data) { unsigned int irq = data->irq; ia64_vector vec = irq_to_vector(irq); struct iosapic_rte_info *rte; int do_unmask_irq = 0; Loading @@ -395,16 +400,16 @@ iosapic_unmask_level_irq (unsigned int irq) irq_complete_move(irq); if (unlikely(irq_desc[irq].status & IRQ_MOVE_PENDING)) { do_unmask_irq = 1; mask_irq(irq); mask_irq(data); } else unmask_irq(irq); unmask_irq(data); list_for_each_entry(rte, &iosapic_intr_info[irq].rtes, rte_list) iosapic_eoi(rte->iosapic->addr, vec); if (unlikely(do_unmask_irq)) { move_masked_irq(irq); unmask_irq(irq); unmask_irq(data); } } Loading @@ -415,14 +420,14 @@ iosapic_unmask_level_irq (unsigned int irq) static struct irq_chip irq_type_iosapic_level = { .name = "IO-SAPIC-level", .startup = iosapic_startup_level_irq, .shutdown = iosapic_shutdown_level_irq, .enable = iosapic_enable_level_irq, .disable = iosapic_disable_level_irq, .ack = iosapic_ack_level_irq, .mask = mask_irq, .unmask = iosapic_unmask_level_irq, .set_affinity = iosapic_set_affinity .irq_startup = iosapic_startup_level_irq, .irq_shutdown = iosapic_shutdown_level_irq, .irq_enable = iosapic_enable_level_irq, .irq_disable = iosapic_disable_level_irq, .irq_ack = iosapic_ack_level_irq, .irq_mask = mask_irq, .irq_unmask = iosapic_unmask_level_irq, .irq_set_affinity = iosapic_set_affinity }; /* Loading @@ -430,9 +435,9 @@ static struct irq_chip irq_type_iosapic_level = { */ static unsigned int iosapic_startup_edge_irq (unsigned int irq) iosapic_startup_edge_irq (struct irq_data *data) { unmask_irq(irq); unmask_irq(data); /* * IOSAPIC simply drops interrupts pended while the * corresponding pin was masked, so we can't know if an Loading @@ -442,8 +447,9 @@ iosapic_startup_edge_irq (unsigned int irq) } static void iosapic_ack_edge_irq (unsigned int irq) iosapic_ack_edge_irq (struct irq_data *data) { unsigned int irq = data->irq; struct irq_desc *idesc = irq_desc + irq; irq_complete_move(irq); Loading @@ -455,7 +461,7 @@ iosapic_ack_edge_irq (unsigned int irq) */ if ((idesc->status & (IRQ_PENDING|IRQ_DISABLED)) == (IRQ_PENDING|IRQ_DISABLED)) mask_irq(irq); mask_irq(data); } #define iosapic_enable_edge_irq unmask_irq Loading @@ -463,14 +469,14 @@ iosapic_ack_edge_irq (unsigned int irq) static struct irq_chip irq_type_iosapic_edge = { .name = "IO-SAPIC-edge", .startup = iosapic_startup_edge_irq, .shutdown = iosapic_disable_edge_irq, .enable = iosapic_enable_edge_irq, .disable = iosapic_disable_edge_irq, .ack = iosapic_ack_edge_irq, .mask = mask_irq, .unmask = unmask_irq, .set_affinity = iosapic_set_affinity .irq_startup = iosapic_startup_edge_irq, .irq_shutdown = iosapic_disable_edge_irq, .irq_enable = iosapic_enable_edge_irq, .irq_disable = iosapic_disable_edge_irq, .irq_ack = iosapic_ack_edge_irq, .irq_mask = mask_irq, .irq_unmask = unmask_irq, .irq_set_affinity = iosapic_set_affinity }; static unsigned int Loading Loading
arch/ia64/kernel/iosapic.c +38 −32 Original line number Diff line number Diff line Loading @@ -257,7 +257,7 @@ set_rte (unsigned int gsi, unsigned int irq, unsigned int dest, int mask) } static void nop (unsigned int irq) nop (struct irq_data *data) { /* do nothing... */ } Loading Loading @@ -287,8 +287,9 @@ kexec_disable_iosapic(void) #endif static void mask_irq (unsigned int irq) mask_irq (struct irq_data *data) { unsigned int irq = data->irq; u32 low32; int rte_index; struct iosapic_rte_info *rte; Loading @@ -305,8 +306,9 @@ mask_irq (unsigned int irq) } static void unmask_irq (unsigned int irq) unmask_irq (struct irq_data *data) { unsigned int irq = data->irq; u32 low32; int rte_index; struct iosapic_rte_info *rte; Loading @@ -323,9 +325,11 @@ unmask_irq (unsigned int irq) static int iosapic_set_affinity(unsigned int irq, const struct cpumask *mask) iosapic_set_affinity(struct irq_data *data, const struct cpumask *mask, bool force) { #ifdef CONFIG_SMP unsigned int irq = data->irq; u32 high32, low32; int cpu, dest, rte_index; int redir = (irq & IA64_IRQ_REDIRECTED) ? 1 : 0; Loading Loading @@ -379,15 +383,16 @@ iosapic_set_affinity(unsigned int irq, const struct cpumask *mask) */ static unsigned int iosapic_startup_level_irq (unsigned int irq) iosapic_startup_level_irq (struct irq_data *data) { unmask_irq(irq); unmask_irq(data); return 0; } static void iosapic_unmask_level_irq (unsigned int irq) iosapic_unmask_level_irq (struct irq_data *data) { unsigned int irq = data->irq; ia64_vector vec = irq_to_vector(irq); struct iosapic_rte_info *rte; int do_unmask_irq = 0; Loading @@ -395,16 +400,16 @@ iosapic_unmask_level_irq (unsigned int irq) irq_complete_move(irq); if (unlikely(irq_desc[irq].status & IRQ_MOVE_PENDING)) { do_unmask_irq = 1; mask_irq(irq); mask_irq(data); } else unmask_irq(irq); unmask_irq(data); list_for_each_entry(rte, &iosapic_intr_info[irq].rtes, rte_list) iosapic_eoi(rte->iosapic->addr, vec); if (unlikely(do_unmask_irq)) { move_masked_irq(irq); unmask_irq(irq); unmask_irq(data); } } Loading @@ -415,14 +420,14 @@ iosapic_unmask_level_irq (unsigned int irq) static struct irq_chip irq_type_iosapic_level = { .name = "IO-SAPIC-level", .startup = iosapic_startup_level_irq, .shutdown = iosapic_shutdown_level_irq, .enable = iosapic_enable_level_irq, .disable = iosapic_disable_level_irq, .ack = iosapic_ack_level_irq, .mask = mask_irq, .unmask = iosapic_unmask_level_irq, .set_affinity = iosapic_set_affinity .irq_startup = iosapic_startup_level_irq, .irq_shutdown = iosapic_shutdown_level_irq, .irq_enable = iosapic_enable_level_irq, .irq_disable = iosapic_disable_level_irq, .irq_ack = iosapic_ack_level_irq, .irq_mask = mask_irq, .irq_unmask = iosapic_unmask_level_irq, .irq_set_affinity = iosapic_set_affinity }; /* Loading @@ -430,9 +435,9 @@ static struct irq_chip irq_type_iosapic_level = { */ static unsigned int iosapic_startup_edge_irq (unsigned int irq) iosapic_startup_edge_irq (struct irq_data *data) { unmask_irq(irq); unmask_irq(data); /* * IOSAPIC simply drops interrupts pended while the * corresponding pin was masked, so we can't know if an Loading @@ -442,8 +447,9 @@ iosapic_startup_edge_irq (unsigned int irq) } static void iosapic_ack_edge_irq (unsigned int irq) iosapic_ack_edge_irq (struct irq_data *data) { unsigned int irq = data->irq; struct irq_desc *idesc = irq_desc + irq; irq_complete_move(irq); Loading @@ -455,7 +461,7 @@ iosapic_ack_edge_irq (unsigned int irq) */ if ((idesc->status & (IRQ_PENDING|IRQ_DISABLED)) == (IRQ_PENDING|IRQ_DISABLED)) mask_irq(irq); mask_irq(data); } #define iosapic_enable_edge_irq unmask_irq Loading @@ -463,14 +469,14 @@ iosapic_ack_edge_irq (unsigned int irq) static struct irq_chip irq_type_iosapic_edge = { .name = "IO-SAPIC-edge", .startup = iosapic_startup_edge_irq, .shutdown = iosapic_disable_edge_irq, .enable = iosapic_enable_edge_irq, .disable = iosapic_disable_edge_irq, .ack = iosapic_ack_edge_irq, .mask = mask_irq, .unmask = unmask_irq, .set_affinity = iosapic_set_affinity .irq_startup = iosapic_startup_edge_irq, .irq_shutdown = iosapic_disable_edge_irq, .irq_enable = iosapic_enable_edge_irq, .irq_disable = iosapic_disable_edge_irq, .irq_ack = iosapic_ack_edge_irq, .irq_mask = mask_irq, .irq_unmask = unmask_irq, .irq_set_affinity = iosapic_set_affinity }; static unsigned int Loading