diff options
Diffstat (limited to 'arch/powerpc/sysdev/mpic.c')
-rw-r--r-- | arch/powerpc/sysdev/mpic.c | 84 |
1 files changed, 39 insertions, 45 deletions
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index 30c44e6b0413..260295b10557 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <linux/bootmem.h> | 26 | #include <linux/bootmem.h> |
27 | #include <linux/spinlock.h> | 27 | #include <linux/spinlock.h> |
28 | #include <linux/pci.h> | 28 | #include <linux/pci.h> |
29 | #include <linux/slab.h> | ||
29 | 30 | ||
30 | #include <asm/ptrace.h> | 31 | #include <asm/ptrace.h> |
31 | #include <asm/signal.h> | 32 | #include <asm/signal.h> |
@@ -46,7 +47,7 @@ | |||
46 | 47 | ||
47 | static struct mpic *mpics; | 48 | static struct mpic *mpics; |
48 | static struct mpic *mpic_primary; | 49 | static struct mpic *mpic_primary; |
49 | static DEFINE_SPINLOCK(mpic_lock); | 50 | static DEFINE_RAW_SPINLOCK(mpic_lock); |
50 | 51 | ||
51 | #ifdef CONFIG_PPC32 /* XXX for now */ | 52 | #ifdef CONFIG_PPC32 /* XXX for now */ |
52 | #ifdef CONFIG_IRQ_ALL_CPUS | 53 | #ifdef CONFIG_IRQ_ALL_CPUS |
@@ -347,10 +348,10 @@ static inline void mpic_ht_end_irq(struct mpic *mpic, unsigned int source) | |||
347 | unsigned int mask = 1U << (fixup->index & 0x1f); | 348 | unsigned int mask = 1U << (fixup->index & 0x1f); |
348 | writel(mask, fixup->applebase + soff); | 349 | writel(mask, fixup->applebase + soff); |
349 | } else { | 350 | } else { |
350 | spin_lock(&mpic->fixup_lock); | 351 | raw_spin_lock(&mpic->fixup_lock); |
351 | writeb(0x11 + 2 * fixup->index, fixup->base + 2); | 352 | writeb(0x11 + 2 * fixup->index, fixup->base + 2); |
352 | writel(fixup->data, fixup->base + 4); | 353 | writel(fixup->data, fixup->base + 4); |
353 | spin_unlock(&mpic->fixup_lock); | 354 | raw_spin_unlock(&mpic->fixup_lock); |
354 | } | 355 | } |
355 | } | 356 | } |
356 | 357 | ||
@@ -366,7 +367,7 @@ static void mpic_startup_ht_interrupt(struct mpic *mpic, unsigned int source, | |||
366 | 367 | ||
367 | DBG("startup_ht_interrupt(0x%x, 0x%x) index: %d\n", | 368 | DBG("startup_ht_interrupt(0x%x, 0x%x) index: %d\n", |
368 | source, irqflags, fixup->index); | 369 | source, irqflags, fixup->index); |
369 | spin_lock_irqsave(&mpic->fixup_lock, flags); | 370 | raw_spin_lock_irqsave(&mpic->fixup_lock, flags); |
370 | /* Enable and configure */ | 371 | /* Enable and configure */ |
371 | writeb(0x10 + 2 * fixup->index, fixup->base + 2); | 372 | writeb(0x10 + 2 * fixup->index, fixup->base + 2); |
372 | tmp = readl(fixup->base + 4); | 373 | tmp = readl(fixup->base + 4); |
@@ -374,7 +375,7 @@ static void mpic_startup_ht_interrupt(struct mpic *mpic, unsigned int source, | |||
374 | if (irqflags & IRQ_LEVEL) | 375 | if (irqflags & IRQ_LEVEL) |
375 | tmp |= 0x22; | 376 | tmp |= 0x22; |
376 | writel(tmp, fixup->base + 4); | 377 | writel(tmp, fixup->base + 4); |
377 | spin_unlock_irqrestore(&mpic->fixup_lock, flags); | 378 | raw_spin_unlock_irqrestore(&mpic->fixup_lock, flags); |
378 | 379 | ||
379 | #ifdef CONFIG_PM | 380 | #ifdef CONFIG_PM |
380 | /* use the lowest bit inverted to the actual HW, | 381 | /* use the lowest bit inverted to the actual HW, |
@@ -396,12 +397,12 @@ static void mpic_shutdown_ht_interrupt(struct mpic *mpic, unsigned int source, | |||
396 | DBG("shutdown_ht_interrupt(0x%x, 0x%x)\n", source, irqflags); | 397 | DBG("shutdown_ht_interrupt(0x%x, 0x%x)\n", source, irqflags); |
397 | 398 | ||
398 | /* Disable */ | 399 | /* Disable */ |
399 | spin_lock_irqsave(&mpic->fixup_lock, flags); | 400 | raw_spin_lock_irqsave(&mpic->fixup_lock, flags); |
400 | writeb(0x10 + 2 * fixup->index, fixup->base + 2); | 401 | writeb(0x10 + 2 * fixup->index, fixup->base + 2); |
401 | tmp = readl(fixup->base + 4); | 402 | tmp = readl(fixup->base + 4); |
402 | tmp |= 1; | 403 | tmp |= 1; |
403 | writel(tmp, fixup->base + 4); | 404 | writel(tmp, fixup->base + 4); |
404 | spin_unlock_irqrestore(&mpic->fixup_lock, flags); | 405 | raw_spin_unlock_irqrestore(&mpic->fixup_lock, flags); |
405 | 406 | ||
406 | #ifdef CONFIG_PM | 407 | #ifdef CONFIG_PM |
407 | /* use the lowest bit inverted to the actual HW, | 408 | /* use the lowest bit inverted to the actual HW, |
@@ -515,7 +516,7 @@ static void __init mpic_scan_ht_pics(struct mpic *mpic) | |||
515 | BUG_ON(mpic->fixups == NULL); | 516 | BUG_ON(mpic->fixups == NULL); |
516 | 517 | ||
517 | /* Init spinlock */ | 518 | /* Init spinlock */ |
518 | spin_lock_init(&mpic->fixup_lock); | 519 | raw_spin_lock_init(&mpic->fixup_lock); |
519 | 520 | ||
520 | /* Map U3 config space. We assume all IO-APICs are on the primary bus | 521 | /* Map U3 config space. We assume all IO-APICs are on the primary bus |
521 | * so we only need to map 64kB. | 522 | * so we only need to map 64kB. |
@@ -567,20 +568,18 @@ static void __init mpic_scan_ht_pics(struct mpic *mpic) | |||
567 | #endif /* CONFIG_MPIC_U3_HT_IRQS */ | 568 | #endif /* CONFIG_MPIC_U3_HT_IRQS */ |
568 | 569 | ||
569 | #ifdef CONFIG_SMP | 570 | #ifdef CONFIG_SMP |
570 | static int irq_choose_cpu(unsigned int virt_irq) | 571 | static int irq_choose_cpu(const cpumask_t *mask) |
571 | { | 572 | { |
572 | cpumask_t mask; | ||
573 | int cpuid; | 573 | int cpuid; |
574 | 574 | ||
575 | cpumask_copy(&mask, irq_desc[virt_irq].affinity); | 575 | if (cpumask_equal(mask, cpu_all_mask)) { |
576 | if (cpus_equal(mask, CPU_MASK_ALL)) { | ||
577 | static int irq_rover; | 576 | static int irq_rover; |
578 | static DEFINE_SPINLOCK(irq_rover_lock); | 577 | static DEFINE_RAW_SPINLOCK(irq_rover_lock); |
579 | unsigned long flags; | 578 | unsigned long flags; |
580 | 579 | ||
581 | /* Round-robin distribution... */ | 580 | /* Round-robin distribution... */ |
582 | do_round_robin: | 581 | do_round_robin: |
583 | spin_lock_irqsave(&irq_rover_lock, flags); | 582 | raw_spin_lock_irqsave(&irq_rover_lock, flags); |
584 | 583 | ||
585 | while (!cpu_online(irq_rover)) { | 584 | while (!cpu_online(irq_rover)) { |
586 | if (++irq_rover >= NR_CPUS) | 585 | if (++irq_rover >= NR_CPUS) |
@@ -592,22 +591,17 @@ static int irq_choose_cpu(unsigned int virt_irq) | |||
592 | irq_rover = 0; | 591 | irq_rover = 0; |
593 | } while (!cpu_online(irq_rover)); | 592 | } while (!cpu_online(irq_rover)); |
594 | 593 | ||
595 | spin_unlock_irqrestore(&irq_rover_lock, flags); | 594 | raw_spin_unlock_irqrestore(&irq_rover_lock, flags); |
596 | } else { | 595 | } else { |
597 | cpumask_t tmp; | 596 | cpuid = cpumask_first_and(mask, cpu_online_mask); |
598 | 597 | if (cpuid >= nr_cpu_ids) | |
599 | cpus_and(tmp, cpu_online_map, mask); | ||
600 | |||
601 | if (cpus_empty(tmp)) | ||
602 | goto do_round_robin; | 598 | goto do_round_robin; |
603 | |||
604 | cpuid = first_cpu(tmp); | ||
605 | } | 599 | } |
606 | 600 | ||
607 | return get_hard_smp_processor_id(cpuid); | 601 | return get_hard_smp_processor_id(cpuid); |
608 | } | 602 | } |
609 | #else | 603 | #else |
610 | static int irq_choose_cpu(unsigned int virt_irq) | 604 | static int irq_choose_cpu(const cpumask_t *mask) |
611 | { | 605 | { |
612 | return hard_smp_processor_id(); | 606 | return hard_smp_processor_id(); |
613 | } | 607 | } |
@@ -621,7 +615,7 @@ static struct mpic *mpic_find(unsigned int irq) | |||
621 | if (irq < NUM_ISA_INTERRUPTS) | 615 | if (irq < NUM_ISA_INTERRUPTS) |
622 | return NULL; | 616 | return NULL; |
623 | 617 | ||
624 | return irq_desc[irq].chip_data; | 618 | return irq_to_desc(irq)->chip_data; |
625 | } | 619 | } |
626 | 620 | ||
627 | /* Determine if the linux irq is an IPI */ | 621 | /* Determine if the linux irq is an IPI */ |
@@ -648,14 +642,14 @@ static inline u32 mpic_physmask(u32 cpumask) | |||
648 | /* Get the mpic structure from the IPI number */ | 642 | /* Get the mpic structure from the IPI number */ |
649 | static inline struct mpic * mpic_from_ipi(unsigned int ipi) | 643 | static inline struct mpic * mpic_from_ipi(unsigned int ipi) |
650 | { | 644 | { |
651 | return irq_desc[ipi].chip_data; | 645 | return irq_to_desc(ipi)->chip_data; |
652 | } | 646 | } |
653 | #endif | 647 | #endif |
654 | 648 | ||
655 | /* Get the mpic structure from the irq number */ | 649 | /* Get the mpic structure from the irq number */ |
656 | static inline struct mpic * mpic_from_irq(unsigned int irq) | 650 | static inline struct mpic * mpic_from_irq(unsigned int irq) |
657 | { | 651 | { |
658 | return irq_desc[irq].chip_data; | 652 | return irq_to_desc(irq)->chip_data; |
659 | } | 653 | } |
660 | 654 | ||
661 | /* Send an EOI */ | 655 | /* Send an EOI */ |
@@ -735,7 +729,7 @@ static void mpic_unmask_ht_irq(unsigned int irq) | |||
735 | 729 | ||
736 | mpic_unmask_irq(irq); | 730 | mpic_unmask_irq(irq); |
737 | 731 | ||
738 | if (irq_desc[irq].status & IRQ_LEVEL) | 732 | if (irq_to_desc(irq)->status & IRQ_LEVEL) |
739 | mpic_ht_end_irq(mpic, src); | 733 | mpic_ht_end_irq(mpic, src); |
740 | } | 734 | } |
741 | 735 | ||
@@ -745,7 +739,7 @@ static unsigned int mpic_startup_ht_irq(unsigned int irq) | |||
745 | unsigned int src = mpic_irq_to_hw(irq); | 739 | unsigned int src = mpic_irq_to_hw(irq); |
746 | 740 | ||
747 | mpic_unmask_irq(irq); | 741 | mpic_unmask_irq(irq); |
748 | mpic_startup_ht_interrupt(mpic, src, irq_desc[irq].status); | 742 | mpic_startup_ht_interrupt(mpic, src, irq_to_desc(irq)->status); |
749 | 743 | ||
750 | return 0; | 744 | return 0; |
751 | } | 745 | } |
@@ -755,7 +749,7 @@ static void mpic_shutdown_ht_irq(unsigned int irq) | |||
755 | struct mpic *mpic = mpic_from_irq(irq); | 749 | struct mpic *mpic = mpic_from_irq(irq); |
756 | unsigned int src = mpic_irq_to_hw(irq); | 750 | unsigned int src = mpic_irq_to_hw(irq); |
757 | 751 | ||
758 | mpic_shutdown_ht_interrupt(mpic, src, irq_desc[irq].status); | 752 | mpic_shutdown_ht_interrupt(mpic, src, irq_to_desc(irq)->status); |
759 | mpic_mask_irq(irq); | 753 | mpic_mask_irq(irq); |
760 | } | 754 | } |
761 | 755 | ||
@@ -772,7 +766,7 @@ static void mpic_end_ht_irq(unsigned int irq) | |||
772 | * latched another edge interrupt coming in anyway | 766 | * latched another edge interrupt coming in anyway |
773 | */ | 767 | */ |
774 | 768 | ||
775 | if (irq_desc[irq].status & IRQ_LEVEL) | 769 | if (irq_to_desc(irq)->status & IRQ_LEVEL) |
776 | mpic_ht_end_irq(mpic, src); | 770 | mpic_ht_end_irq(mpic, src); |
777 | mpic_eoi(mpic); | 771 | mpic_eoi(mpic); |
778 | } | 772 | } |
@@ -816,7 +810,7 @@ int mpic_set_affinity(unsigned int irq, const struct cpumask *cpumask) | |||
816 | unsigned int src = mpic_irq_to_hw(irq); | 810 | unsigned int src = mpic_irq_to_hw(irq); |
817 | 811 | ||
818 | if (mpic->flags & MPIC_SINGLE_DEST_CPU) { | 812 | if (mpic->flags & MPIC_SINGLE_DEST_CPU) { |
819 | int cpuid = irq_choose_cpu(irq); | 813 | int cpuid = irq_choose_cpu(cpumask); |
820 | 814 | ||
821 | mpic_irq_write(src, MPIC_INFO(IRQ_DESTINATION), 1 << cpuid); | 815 | mpic_irq_write(src, MPIC_INFO(IRQ_DESTINATION), 1 << cpuid); |
822 | } else { | 816 | } else { |
@@ -856,7 +850,7 @@ int mpic_set_irq_type(unsigned int virq, unsigned int flow_type) | |||
856 | { | 850 | { |
857 | struct mpic *mpic = mpic_from_irq(virq); | 851 | struct mpic *mpic = mpic_from_irq(virq); |
858 | unsigned int src = mpic_irq_to_hw(virq); | 852 | unsigned int src = mpic_irq_to_hw(virq); |
859 | struct irq_desc *desc = get_irq_desc(virq); | 853 | struct irq_desc *desc = irq_to_desc(virq); |
860 | unsigned int vecpri, vold, vnew; | 854 | unsigned int vecpri, vold, vnew; |
861 | 855 | ||
862 | DBG("mpic: set_irq_type(mpic:@%p,virq:%d,src:0x%x,type:0x%x)\n", | 856 | DBG("mpic: set_irq_type(mpic:@%p,virq:%d,src:0x%x,type:0x%x)\n", |
@@ -994,7 +988,7 @@ static int mpic_host_map(struct irq_host *h, unsigned int virq, | |||
994 | } | 988 | } |
995 | 989 | ||
996 | static int mpic_host_xlate(struct irq_host *h, struct device_node *ct, | 990 | static int mpic_host_xlate(struct irq_host *h, struct device_node *ct, |
997 | u32 *intspec, unsigned int intsize, | 991 | const u32 *intspec, unsigned int intsize, |
998 | irq_hw_number_t *out_hwirq, unsigned int *out_flags) | 992 | irq_hw_number_t *out_hwirq, unsigned int *out_flags) |
999 | 993 | ||
1000 | { | 994 | { |
@@ -1062,19 +1056,19 @@ struct mpic * __init mpic_alloc(struct device_node *node, | |||
1062 | mpic->name = name; | 1056 | mpic->name = name; |
1063 | 1057 | ||
1064 | mpic->hc_irq = mpic_irq_chip; | 1058 | mpic->hc_irq = mpic_irq_chip; |
1065 | mpic->hc_irq.typename = name; | 1059 | mpic->hc_irq.name = name; |
1066 | if (flags & MPIC_PRIMARY) | 1060 | if (flags & MPIC_PRIMARY) |
1067 | mpic->hc_irq.set_affinity = mpic_set_affinity; | 1061 | mpic->hc_irq.set_affinity = mpic_set_affinity; |
1068 | #ifdef CONFIG_MPIC_U3_HT_IRQS | 1062 | #ifdef CONFIG_MPIC_U3_HT_IRQS |
1069 | mpic->hc_ht_irq = mpic_irq_ht_chip; | 1063 | mpic->hc_ht_irq = mpic_irq_ht_chip; |
1070 | mpic->hc_ht_irq.typename = name; | 1064 | mpic->hc_ht_irq.name = name; |
1071 | if (flags & MPIC_PRIMARY) | 1065 | if (flags & MPIC_PRIMARY) |
1072 | mpic->hc_ht_irq.set_affinity = mpic_set_affinity; | 1066 | mpic->hc_ht_irq.set_affinity = mpic_set_affinity; |
1073 | #endif /* CONFIG_MPIC_U3_HT_IRQS */ | 1067 | #endif /* CONFIG_MPIC_U3_HT_IRQS */ |
1074 | 1068 | ||
1075 | #ifdef CONFIG_SMP | 1069 | #ifdef CONFIG_SMP |
1076 | mpic->hc_ipi = mpic_ipi_chip; | 1070 | mpic->hc_ipi = mpic_ipi_chip; |
1077 | mpic->hc_ipi.typename = name; | 1071 | mpic->hc_ipi.name = name; |
1078 | #endif /* CONFIG_SMP */ | 1072 | #endif /* CONFIG_SMP */ |
1079 | 1073 | ||
1080 | mpic->flags = flags; | 1074 | mpic->flags = flags; |
@@ -1375,14 +1369,14 @@ void __init mpic_set_serial_int(struct mpic *mpic, int enable) | |||
1375 | unsigned long flags; | 1369 | unsigned long flags; |
1376 | u32 v; | 1370 | u32 v; |
1377 | 1371 | ||
1378 | spin_lock_irqsave(&mpic_lock, flags); | 1372 | raw_spin_lock_irqsave(&mpic_lock, flags); |
1379 | v = mpic_read(mpic->gregs, MPIC_GREG_GLOBAL_CONF_1); | 1373 | v = mpic_read(mpic->gregs, MPIC_GREG_GLOBAL_CONF_1); |
1380 | if (enable) | 1374 | if (enable) |
1381 | v |= MPIC_GREG_GLOBAL_CONF_1_SIE; | 1375 | v |= MPIC_GREG_GLOBAL_CONF_1_SIE; |
1382 | else | 1376 | else |
1383 | v &= ~MPIC_GREG_GLOBAL_CONF_1_SIE; | 1377 | v &= ~MPIC_GREG_GLOBAL_CONF_1_SIE; |
1384 | mpic_write(mpic->gregs, MPIC_GREG_GLOBAL_CONF_1, v); | 1378 | mpic_write(mpic->gregs, MPIC_GREG_GLOBAL_CONF_1, v); |
1385 | spin_unlock_irqrestore(&mpic_lock, flags); | 1379 | raw_spin_unlock_irqrestore(&mpic_lock, flags); |
1386 | } | 1380 | } |
1387 | 1381 | ||
1388 | void mpic_irq_set_priority(unsigned int irq, unsigned int pri) | 1382 | void mpic_irq_set_priority(unsigned int irq, unsigned int pri) |
@@ -1395,7 +1389,7 @@ void mpic_irq_set_priority(unsigned int irq, unsigned int pri) | |||
1395 | if (!mpic) | 1389 | if (!mpic) |
1396 | return; | 1390 | return; |
1397 | 1391 | ||
1398 | spin_lock_irqsave(&mpic_lock, flags); | 1392 | raw_spin_lock_irqsave(&mpic_lock, flags); |
1399 | if (mpic_is_ipi(mpic, irq)) { | 1393 | if (mpic_is_ipi(mpic, irq)) { |
1400 | reg = mpic_ipi_read(src - mpic->ipi_vecs[0]) & | 1394 | reg = mpic_ipi_read(src - mpic->ipi_vecs[0]) & |
1401 | ~MPIC_VECPRI_PRIORITY_MASK; | 1395 | ~MPIC_VECPRI_PRIORITY_MASK; |
@@ -1407,7 +1401,7 @@ void mpic_irq_set_priority(unsigned int irq, unsigned int pri) | |||
1407 | mpic_irq_write(src, MPIC_INFO(IRQ_VECTOR_PRI), | 1401 | mpic_irq_write(src, MPIC_INFO(IRQ_VECTOR_PRI), |
1408 | reg | (pri << MPIC_VECPRI_PRIORITY_SHIFT)); | 1402 | reg | (pri << MPIC_VECPRI_PRIORITY_SHIFT)); |
1409 | } | 1403 | } |
1410 | spin_unlock_irqrestore(&mpic_lock, flags); | 1404 | raw_spin_unlock_irqrestore(&mpic_lock, flags); |
1411 | } | 1405 | } |
1412 | 1406 | ||
1413 | void mpic_setup_this_cpu(void) | 1407 | void mpic_setup_this_cpu(void) |
@@ -1422,7 +1416,7 @@ void mpic_setup_this_cpu(void) | |||
1422 | 1416 | ||
1423 | DBG("%s: setup_this_cpu(%d)\n", mpic->name, hard_smp_processor_id()); | 1417 | DBG("%s: setup_this_cpu(%d)\n", mpic->name, hard_smp_processor_id()); |
1424 | 1418 | ||
1425 | spin_lock_irqsave(&mpic_lock, flags); | 1419 | raw_spin_lock_irqsave(&mpic_lock, flags); |
1426 | 1420 | ||
1427 | /* let the mpic know we want intrs. default affinity is 0xffffffff | 1421 | /* let the mpic know we want intrs. default affinity is 0xffffffff |
1428 | * until changed via /proc. That's how it's done on x86. If we want | 1422 | * until changed via /proc. That's how it's done on x86. If we want |
@@ -1438,7 +1432,7 @@ void mpic_setup_this_cpu(void) | |||
1438 | /* Set current processor priority to 0 */ | 1432 | /* Set current processor priority to 0 */ |
1439 | mpic_cpu_write(MPIC_INFO(CPU_CURRENT_TASK_PRI), 0); | 1433 | mpic_cpu_write(MPIC_INFO(CPU_CURRENT_TASK_PRI), 0); |
1440 | 1434 | ||
1441 | spin_unlock_irqrestore(&mpic_lock, flags); | 1435 | raw_spin_unlock_irqrestore(&mpic_lock, flags); |
1442 | #endif /* CONFIG_SMP */ | 1436 | #endif /* CONFIG_SMP */ |
1443 | } | 1437 | } |
1444 | 1438 | ||
@@ -1467,7 +1461,7 @@ void mpic_teardown_this_cpu(int secondary) | |||
1467 | BUG_ON(mpic == NULL); | 1461 | BUG_ON(mpic == NULL); |
1468 | 1462 | ||
1469 | DBG("%s: teardown_this_cpu(%d)\n", mpic->name, hard_smp_processor_id()); | 1463 | DBG("%s: teardown_this_cpu(%d)\n", mpic->name, hard_smp_processor_id()); |
1470 | spin_lock_irqsave(&mpic_lock, flags); | 1464 | raw_spin_lock_irqsave(&mpic_lock, flags); |
1471 | 1465 | ||
1472 | /* let the mpic know we don't want intrs. */ | 1466 | /* let the mpic know we don't want intrs. */ |
1473 | for (i = 0; i < mpic->num_sources ; i++) | 1467 | for (i = 0; i < mpic->num_sources ; i++) |
@@ -1481,7 +1475,7 @@ void mpic_teardown_this_cpu(int secondary) | |||
1481 | */ | 1475 | */ |
1482 | mpic_eoi(mpic); | 1476 | mpic_eoi(mpic); |
1483 | 1477 | ||
1484 | spin_unlock_irqrestore(&mpic_lock, flags); | 1478 | raw_spin_unlock_irqrestore(&mpic_lock, flags); |
1485 | } | 1479 | } |
1486 | 1480 | ||
1487 | 1481 | ||
@@ -1582,7 +1576,7 @@ void mpic_request_ipis(void) | |||
1582 | int i; | 1576 | int i; |
1583 | BUG_ON(mpic == NULL); | 1577 | BUG_ON(mpic == NULL); |
1584 | 1578 | ||
1585 | printk(KERN_INFO "mpic: requesting IPIs ... \n"); | 1579 | printk(KERN_INFO "mpic: requesting IPIs...\n"); |
1586 | 1580 | ||
1587 | for (i = 0; i < 4; i++) { | 1581 | for (i = 0; i < 4; i++) { |
1588 | unsigned int vipi = irq_create_mapping(mpic->irqhost, | 1582 | unsigned int vipi = irq_create_mapping(mpic->irqhost, |