Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

MIPS: Octeon: Simplify irq_cpu_on/offline irq chip functions

Make use of the IRQCHIP_ONOFFLINE_ENABLED flag and remove the
wrappers. Use irqd_irq_disabled() instead of desc->status, which will
go away.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: David Daney <ddaney@caviumnetworks.com>

+17 -54
+17 -54
arch/mips/cavium-octeon/octeon-irq.c
··· 152 152 mutex_unlock(&cd->core_irq_mutex); 153 153 } 154 154 155 - 156 - static void octeon_irq_core_cpu_online(struct irq_data *data) 157 - { 158 - if (irqd_irq_disabled(data)) 159 - octeon_irq_core_eoi(data); 160 - } 161 - 162 - static void octeon_irq_core_cpu_offline(struct irq_data *data) 163 - { 164 - if (irqd_irq_disabled(data)) 165 - octeon_irq_core_ack(data); 166 - } 167 - 168 155 static struct irq_chip octeon_irq_chip_core = { 169 156 .name = "Core", 170 157 .irq_enable = octeon_irq_core_enable, ··· 161 174 .irq_bus_lock = octeon_irq_core_bus_lock, 162 175 .irq_bus_sync_unlock = octeon_irq_core_bus_sync_unlock, 163 176 164 - .irq_cpu_online = octeon_irq_core_cpu_online, 165 - .irq_cpu_offline = octeon_irq_core_cpu_offline, 177 + .irq_cpu_online = octeon_irq_core_eoi, 178 + .irq_cpu_offline = octeon_irq_core_ack, 179 + .flags = IRQCHIP_ONOFFLINE_ENABLED, 166 180 }; 167 181 168 182 static void __init octeon_irq_init_core(void) ··· 505 517 } 506 518 } 507 519 508 - static void octeon_irq_cpu_online_mbox(struct irq_data *data) 509 - { 510 - if (irqd_irq_disabled(data)) 511 - octeon_irq_ciu_enable_local(data); 512 - } 513 - 514 - static void octeon_irq_cpu_online_mbox_v2(struct irq_data *data) 515 - { 516 - if (irqd_irq_disabled(data)) 517 - octeon_irq_ciu_enable_local_v2(data); 518 - } 519 - 520 - static void octeon_irq_cpu_offline_mbox(struct irq_data *data) 521 - { 522 - if (irqd_irq_disabled(data)) 523 - octeon_irq_ciu_disable_local(data); 524 - } 525 - 526 - static void octeon_irq_cpu_offline_mbox_v2(struct irq_data *data) 527 - { 528 - if (irqd_irq_disabled(data)) 529 - octeon_irq_ciu_disable_local_v2(data); 530 - } 531 - 532 520 #ifdef CONFIG_SMP 533 521 534 522 static void octeon_irq_cpu_offline_ciu(struct irq_data *data) ··· 534 570 const struct cpumask *dest, bool force) 535 571 { 536 572 int cpu; 537 - struct irq_desc *desc = irq_to_desc(data->irq); 538 - int enable_one = (desc->status & IRQ_DISABLED) == 0; 573 + bool enable_one = !irqd_irq_disabled(data) && !irqd_irq_masked(data); 539 574 unsigned long flags; 540 575 union octeon_ciu_chip_data cd; 541 576 ··· 548 585 if (cpumask_weight(dest) != 1) 549 586 return -EINVAL; 550 587 551 - if (desc->status & IRQ_DISABLED) 588 + if (!enable_one) 552 589 return 0; 553 590 554 591 if (cd.s.line == 0) { ··· 558 595 unsigned long *pen = &per_cpu(octeon_irq_ciu0_en_mirror, cpu); 559 596 560 597 if (cpumask_test_cpu(cpu, dest) && enable_one) { 561 - enable_one = 0; 598 + enable_one = false; 562 599 set_bit(cd.s.bit, pen); 563 600 } else { 564 601 clear_bit(cd.s.bit, pen); ··· 573 610 unsigned long *pen = &per_cpu(octeon_irq_ciu1_en_mirror, cpu); 574 611 575 612 if (cpumask_test_cpu(cpu, dest) && enable_one) { 576 - enable_one = 0; 613 + enable_one = false; 577 614 set_bit(cd.s.bit, pen); 578 615 } else { 579 616 clear_bit(cd.s.bit, pen); ··· 594 631 bool force) 595 632 { 596 633 int cpu; 597 - struct irq_desc *desc = irq_to_desc(data->irq); 598 - int enable_one = (desc->status & IRQ_DISABLED) == 0; 634 + bool enable_one = !irqd_irq_disabled(data) && !irqd_irq_masked(data); 599 635 u64 mask; 600 636 union octeon_ciu_chip_data cd; 601 637 602 - if (desc->status & IRQ_DISABLED) 638 + if (!enable_one) 603 639 return 0; 604 640 605 641 cd.p = data->chip_data; ··· 609 647 unsigned long *pen = &per_cpu(octeon_irq_ciu0_en_mirror, cpu); 610 648 int index = octeon_coreid_for_cpu(cpu) * 2; 611 649 if (cpumask_test_cpu(cpu, dest) && enable_one) { 612 - enable_one = 0; 650 + enable_one = false; 613 651 set_bit(cd.s.bit, pen); 614 652 cvmx_write_csr(CVMX_CIU_INTX_EN0_W1S(index), mask); 615 653 } else { ··· 622 660 unsigned long *pen = &per_cpu(octeon_irq_ciu1_en_mirror, cpu); 623 661 int index = octeon_coreid_for_cpu(cpu) * 2 + 1; 624 662 if (cpumask_test_cpu(cpu, dest) && enable_one) { 625 - enable_one = 0; 663 + enable_one = false; 626 664 set_bit(cd.s.bit, pen); 627 665 cvmx_write_csr(CVMX_CIU_INTX_EN1_W1S(index), mask); 628 666 } else { ··· 641 679 */ 642 680 static void octeon_irq_dummy_mask(struct irq_data *data) 643 681 { 644 - return; 645 682 } 646 683 647 684 /* ··· 702 741 .irq_ack = octeon_irq_ciu_disable_local_v2, 703 742 .irq_eoi = octeon_irq_ciu_enable_local_v2, 704 743 705 - .irq_cpu_online = octeon_irq_cpu_online_mbox_v2, 706 - .irq_cpu_offline = octeon_irq_cpu_offline_mbox_v2, 744 + .irq_cpu_online = octeon_irq_ciu_enable_local_v2, 745 + .irq_cpu_offline = octeon_irq_ciu_disable_local_v2, 746 + .flags = IRQCHIP_ONOFFLINE_ENABLED, 707 747 }; 708 748 709 749 static struct irq_chip octeon_irq_chip_ciu_mbox = { ··· 712 750 .irq_enable = octeon_irq_ciu_enable_all, 713 751 .irq_disable = octeon_irq_ciu_disable_all, 714 752 715 - .irq_cpu_online = octeon_irq_cpu_online_mbox, 716 - .irq_cpu_offline = octeon_irq_cpu_offline_mbox, 753 + .irq_cpu_online = octeon_irq_ciu_enable_local, 754 + .irq_cpu_offline = octeon_irq_ciu_disable_local, 755 + .flags = IRQCHIP_ONOFFLINE_ENABLED, 717 756 }; 718 757 719 758 /*