aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64/kernel/iosapic.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/ia64/kernel/iosapic.c')
-rw-r--r--arch/ia64/kernel/iosapic.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c
index 398e2fd1cd25..082c31dcfd99 100644
--- a/arch/ia64/kernel/iosapic.c
+++ b/arch/ia64/kernel/iosapic.c
@@ -345,7 +345,7 @@ iosapic_set_affinity (unsigned int irq, cpumask_t mask)
345 if (cpus_empty(mask)) 345 if (cpus_empty(mask))
346 return; 346 return;
347 347
348 if (reassign_irq_vector(irq, first_cpu(mask))) 348 if (irq_prepare_move(irq, first_cpu(mask)))
349 return; 349 return;
350 350
351 dest = cpu_physical_id(first_cpu(mask)); 351 dest = cpu_physical_id(first_cpu(mask));
@@ -397,6 +397,7 @@ iosapic_end_level_irq (unsigned int irq)
397 struct iosapic_rte_info *rte; 397 struct iosapic_rte_info *rte;
398 int do_unmask_irq = 0; 398 int do_unmask_irq = 0;
399 399
400 irq_complete_move(irq);
400 if (unlikely(irq_desc[irq].status & IRQ_MOVE_PENDING)) { 401 if (unlikely(irq_desc[irq].status & IRQ_MOVE_PENDING)) {
401 do_unmask_irq = 1; 402 do_unmask_irq = 1;
402 mask_irq(irq); 403 mask_irq(irq);
@@ -450,6 +451,7 @@ iosapic_ack_edge_irq (unsigned int irq)
450{ 451{
451 irq_desc_t *idesc = irq_desc + irq; 452 irq_desc_t *idesc = irq_desc + irq;
452 453
454 irq_complete_move(irq);
453 move_native_irq(irq); 455 move_native_irq(irq);
454 /* 456 /*
455 * Once we have recorded IRQ_PENDING already, we can mask the 457 * Once we have recorded IRQ_PENDING already, we can mask the
@@ -532,7 +534,7 @@ iosapic_reassign_vector (int irq)
532 if (iosapic_intr_info[irq].count) { 534 if (iosapic_intr_info[irq].count) {
533 new_irq = create_irq(); 535 new_irq = create_irq();
534 if (new_irq < 0) 536 if (new_irq < 0)
535 panic("%s: out of interrupt vectors!\n", __FUNCTION__); 537 panic("%s: out of interrupt vectors!\n", __func__);
536 printk(KERN_INFO "Reassigning vector %d to %d\n", 538 printk(KERN_INFO "Reassigning vector %d to %d\n",
537 irq_to_vector(irq), irq_to_vector(new_irq)); 539 irq_to_vector(irq), irq_to_vector(new_irq));
538 memcpy(&iosapic_intr_info[new_irq], &iosapic_intr_info[irq], 540 memcpy(&iosapic_intr_info[new_irq], &iosapic_intr_info[irq],
@@ -597,7 +599,7 @@ register_intr (unsigned int gsi, int irq, unsigned char delivery,
597 index = find_iosapic(gsi); 599 index = find_iosapic(gsi);
598 if (index < 0) { 600 if (index < 0) {
599 printk(KERN_WARNING "%s: No IOSAPIC for GSI %u\n", 601 printk(KERN_WARNING "%s: No IOSAPIC for GSI %u\n",
600 __FUNCTION__, gsi); 602 __func__, gsi);
601 return -ENODEV; 603 return -ENODEV;
602 } 604 }
603 605
@@ -606,7 +608,7 @@ register_intr (unsigned int gsi, int irq, unsigned char delivery,
606 rte = iosapic_alloc_rte(); 608 rte = iosapic_alloc_rte();
607 if (!rte) { 609 if (!rte) {
608 printk(KERN_WARNING "%s: cannot allocate memory\n", 610 printk(KERN_WARNING "%s: cannot allocate memory\n",
609 __FUNCTION__); 611 __func__);
610 return -ENOMEM; 612 return -ENOMEM;
611 } 613 }
612 614
@@ -623,7 +625,7 @@ register_intr (unsigned int gsi, int irq, unsigned char delivery,
623 (info->trigger != trigger || info->polarity != polarity)){ 625 (info->trigger != trigger || info->polarity != polarity)){
624 printk (KERN_WARNING 626 printk (KERN_WARNING
625 "%s: cannot override the interrupt\n", 627 "%s: cannot override the interrupt\n",
626 __FUNCTION__); 628 __func__);
627 return -EINVAL; 629 return -EINVAL;
628 } 630 }
629 rte->refcnt++; 631 rte->refcnt++;
@@ -645,7 +647,7 @@ register_intr (unsigned int gsi, int irq, unsigned char delivery,
645 if (idesc->chip != &no_irq_type) 647 if (idesc->chip != &no_irq_type)
646 printk(KERN_WARNING 648 printk(KERN_WARNING
647 "%s: changing vector %d from %s to %s\n", 649 "%s: changing vector %d from %s to %s\n",
648 __FUNCTION__, irq_to_vector(irq), 650 __func__, irq_to_vector(irq),
649 idesc->chip->name, irq_type->name); 651 idesc->chip->name, irq_type->name);
650 idesc->chip = irq_type; 652 idesc->chip = irq_type;
651 } 653 }
@@ -918,7 +920,7 @@ iosapic_register_platform_intr (u32 int_type, unsigned int gsi,
918 case ACPI_INTERRUPT_INIT: 920 case ACPI_INTERRUPT_INIT:
919 irq = create_irq(); 921 irq = create_irq();
920 if (irq < 0) 922 if (irq < 0)
921 panic("%s: out of interrupt vectors!\n", __FUNCTION__); 923 panic("%s: out of interrupt vectors!\n", __func__);
922 vector = irq_to_vector(irq); 924 vector = irq_to_vector(irq);
923 delivery = IOSAPIC_INIT; 925 delivery = IOSAPIC_INIT;
924 break; 926 break;
@@ -929,7 +931,7 @@ iosapic_register_platform_intr (u32 int_type, unsigned int gsi,
929 mask = 1; 931 mask = 1;
930 break; 932 break;
931 default: 933 default:
932 printk(KERN_ERR "%s: invalid int type 0x%x\n", __FUNCTION__, 934 printk(KERN_ERR "%s: invalid int type 0x%x\n", __func__,
933 int_type); 935 int_type);
934 return -1; 936 return -1;
935 } 937 }
@@ -994,7 +996,7 @@ iosapic_system_init (int system_pcat_compat)
994 */ 996 */
995 printk(KERN_INFO 997 printk(KERN_INFO
996 "%s: Disabling PC-AT compatible 8259 interrupts\n", 998 "%s: Disabling PC-AT compatible 8259 interrupts\n",
997 __FUNCTION__); 999 __func__);
998 outb(0xff, 0xA1); 1000 outb(0xff, 0xA1);
999 outb(0xff, 0x21); 1001 outb(0xff, 0x21);
1000 } 1002 }
@@ -1009,7 +1011,7 @@ iosapic_alloc (void)
1009 if (!iosapic_lists[index].addr) 1011 if (!iosapic_lists[index].addr)
1010 return index; 1012 return index;
1011 1013
1012 printk(KERN_WARNING "%s: failed to allocate iosapic\n", __FUNCTION__); 1014 printk(KERN_WARNING "%s: failed to allocate iosapic\n", __func__);
1013 return -1; 1015 return -1;
1014} 1016}
1015 1017
@@ -1107,14 +1109,14 @@ iosapic_remove (unsigned int gsi_base)
1107 index = find_iosapic(gsi_base); 1109 index = find_iosapic(gsi_base);
1108 if (index < 0) { 1110 if (index < 0) {
1109 printk(KERN_WARNING "%s: No IOSAPIC for GSI base %u\n", 1111 printk(KERN_WARNING "%s: No IOSAPIC for GSI base %u\n",
1110 __FUNCTION__, gsi_base); 1112 __func__, gsi_base);
1111 goto out; 1113 goto out;
1112 } 1114 }
1113 1115
1114 if (iosapic_lists[index].rtes_inuse) { 1116 if (iosapic_lists[index].rtes_inuse) {
1115 err = -EBUSY; 1117 err = -EBUSY;
1116 printk(KERN_WARNING "%s: IOSAPIC for GSI base %u is busy\n", 1118 printk(KERN_WARNING "%s: IOSAPIC for GSI base %u is busy\n",
1117 __FUNCTION__, gsi_base); 1119 __func__, gsi_base);
1118 goto out; 1120 goto out;
1119 } 1121 }
1120 1122
@@ -1135,7 +1137,7 @@ map_iosapic_to_node(unsigned int gsi_base, int node)
1135 index = find_iosapic(gsi_base); 1137 index = find_iosapic(gsi_base);
1136 if (index < 0) { 1138 if (index < 0) {
1137 printk(KERN_WARNING "%s: No IOSAPIC for GSI %u\n", 1139 printk(KERN_WARNING "%s: No IOSAPIC for GSI %u\n",
1138 __FUNCTION__, gsi_base); 1140 __func__, gsi_base);
1139 return; 1141 return;
1140 } 1142 }
1141 iosapic_lists[index].node = node; 1143 iosapic_lists[index].node = node;