Compile __do_IRQ() when really needed
Subsystems (2)
PATCH 1/1 Compile __do_IRQ() when really needed
From: Franck Bui-Huu <[email protected]>
__do_IRQ() is needed only by irq handlers that can't use default handler defined in kernel/irq/chip.c.
For others platforms there's no need to compile this function since it won't be used. For those platforms this patch defines GENERIC_HARDIRQS_NO__DO_IRQ symbol which is used exactly for this purpose.
Futhermore for platforms which do not use __do_IRQ(), end() method which is part of the 'irq_chip' structure is not used. This patch simply removes this method in this case.
---
Eyeballs from people impacted by this patch are greatly appreciated. Thanks.
arch/mips/Kconfig | 16 +++++++++++ arch/mips/dec/ioasic-irq.c | 15 ---------- arch/mips/dec/kn02-irq.c | 7 ----- arch/mips/emma2rh/common/irq_emma2rh.c | 7 ----- arch/mips/emma2rh/markeins/irq_markeins.c | 7 ----- arch/mips/jazz/irq.c | 7 ----- arch/mips/kernel/irq-mv6434x.c | 10 ------- arch/mips/kernel/irq-rm7000.c | 7 ----- arch/mips/kernel/irq-rm9000.c | 8 ----- arch/mips/kernel/irq_cpu.c | 7 ----- arch/mips/lasat/interrupt.c | 7 ----- arch/mips/momentum/ocelot_c/cpci-irq.c | 10 ------- arch/mips/momentum/ocelot_c/uart-irq.c | 10 ------- arch/mips/philips/pnx8550/common/int.c | 8 ----- arch/mips/sgi-ip22/ip22-int.c | 28 -------------------- arch/mips/sgi-ip27/ip27-irq.c | 8 ----- arch/mips/sgi-ip27/ip27-timer.c | 5 --- arch/mips/tx4927/common/tx4927_irq.c | 22 --------------- .../tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c | 19 ------------- arch/mips/tx4938/common/irq.c | 20 -------------- arch/mips/tx4938/toshiba_rbtx4938/irq.c | 10 ------- arch/mips/vr41xx/common/icu.c | 14 ---------- 22 files changed, 16 insertions(+), 236 deletions(-)
arch/mips/Kconfig +16 -0
@@ -171,6 +171,7 @@ config MACH_DECSTATION select SYS_SUPPORTS_128HZ select SYS_SUPPORTS_256HZ select SYS_SUPPORTS_1024HZ + select GENERIC_HARDIRQS_NO__DO_IRQ help This enables support for DEC's MIPS based workstations. For details see the Linux/MIPS FAQ on <http://www.linux-mips.org/> and the
@@ -216,6 +217,7 @@ config MACH_JAZZ select SYS_SUPPORTS_32BIT_KERNEL select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL select SYS_SUPPORTS_100HZ + select GENERIC_HARDIRQS_NO__DO_IRQ help This a family of machines based on the MIPS R4030 chipset which was used by several vendors to build RISC/os and Windows NT workstations.
@@ -233,6 +235,7 @@ config LASAT select SYS_SUPPORTS_32BIT_KERNEL select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL select SYS_SUPPORTS_LITTLE_ENDIAN + select GENERIC_HARDIRQS_NO__DO_IRQ config MIPS_ATLAS bool "MIPS Atlas board"
@@ -256,6 +259,7 @@ config MIPS_ATLAS select SYS_SUPPORTS_BIG_ENDIAN select SYS_SUPPORTS_LITTLE_ENDIAN select SYS_SUPPORTS_MULTITHREADING if EXPERIMENTAL + select GENERIC_HARDIRQS_NO__DO_IRQ help This enables support for the MIPS Technologies Atlas evaluation board.
@@ -410,6 +414,7 @@ config MOMENCO_OCELOT_C select SYS_SUPPORTS_32BIT_KERNEL select SYS_SUPPORTS_64BIT_KERNEL select SYS_SUPPORTS_BIG_ENDIAN + select GENERIC_HARDIRQS_NO__DO_IRQ help The Ocelot is a MIPS-based Single Board Computer (SBC) made by Momentum Computer <http://www.momenco.com/>.
@@ -468,6 +473,7 @@ config DDB5477 config MACH_VR41XX bool "NEC VR41XX-based machines" select SYS_HAS_CPU_VR41XX + select GENERIC_HARDIRQS_NO__DO_IRQ config PMC_YOSEMITE bool "PMC-Sierra Yosemite eval board"
@@ -519,6 +525,7 @@ config MARKEINS select SYS_SUPPORTS_BIG_ENDIAN select SYS_SUPPORTS_LITTLE_ENDIAN select SYS_HAS_CPU_R5000 + select GENERIC_HARDIRQS_NO__DO_IRQ help This enables support for the R5432-based NEC Mark-eins boards with R5500 CPU.
@@ -539,6 +546,7 @@ config SGI_IP22 select SYS_SUPPORTS_32BIT_KERNEL select SYS_SUPPORTS_64BIT_KERNEL select SYS_SUPPORTS_BIG_ENDIAN + select GENERIC_HARDIRQS_NO__DO_IRQ help This are the SGI Indy, Challenge S and Indigo2, as well as certain OEM variants like the Tandem CMN B006S. To compile a Linux kernel
@@ -558,6 +566,7 @@ config SGI_IP27 select SYS_SUPPORTS_BIG_ENDIAN select SYS_SUPPORTS_NUMA select SYS_SUPPORTS_SMP + select GENERIC_HARDIRQS_NO__DO_IRQ help This are the SGI Origin 200, Origin 2000 and Onyx 2 Graphics workstations. To compile a Linux kernel that runs on these, say Y
@@ -739,6 +748,7 @@ config TOSHIBA_RBTX4927 select SYS_SUPPORTS_64BIT_KERNEL select SYS_SUPPORTS_BIG_ENDIAN select TOSHIBA_BOARDS + select GENERIC_HARDIRQS_NO__DO_IRQ help This Toshiba board is based on the TX4927 processor. Say Y here to support this machine type
@@ -758,6 +768,7 @@ config TOSHIBA_RBTX4938 select SYS_SUPPORTS_LITTLE_ENDIAN select SYS_SUPPORTS_BIG_ENDIAN select TOSHIBA_BOARDS + select GENERIC_HARDIRQS_NO__DO_IRQ help This Toshiba board is based on the TX4938 processor. Say Y here to support this machine type
@@ -824,6 +835,10 @@ config SCHED_NO_NO_OMIT_FRAME_POINTER bool default y +config GENERIC_HARDIRQS_NO__DO_IRQ + bool + default n + # # Select some configuration options automatically based on user selections. #
@@ -985,6 +1000,7 @@ config SOC_PNX8550 select HW_HAS_PCI select SYS_HAS_CPU_MIPS32_R1 select SYS_SUPPORTS_32BIT_KERNEL + select GENERIC_HARDIRQS_NO__DO_IRQ config SWAP_IO_SPACE bool
arch/mips/dec/ioasic-irq.c +0 -15
@@ -55,19 +55,12 @@ static inline void ack_ioasic_irq(unsignfast_iob (); } -static inline void end_ioasic_irq (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -unmask_ioasic_irq (irq); -} -static struct irq_chip ioasic_irq_type = { .typename ="IO-ASIC" , .ack = ack_ioasic_irq, .mask = mask_ioasic_irq, .mask_ack = ack_ioasic_irq, .unmask = unmask_ioasic_irq, - .end = end_ioasic_irq, };
@@ -77,20 +70,12 @@ static struct irq_chip ioasic_irq_type =#define ack_ioasic_dma_irq ack_ioasic_irq -static inline void end_ioasic_dma_irq (unsigned int irq) -{ -clear_ioasic_irq (irq); -fast_iob (); -end_ioasic_irq (irq); -} -static struct irq_chip ioasic_dma_irq_type = { .typename ="IO-ASIC-DMA" , .ack = ack_ioasic_dma_irq, .mask = mask_ioasic_dma_irq, .mask_ack = ack_ioasic_dma_irq, .unmask = unmask_ioasic_dma_irq, - .end = end_ioasic_dma_irq, };
arch/mips/dec/kn02-irq.c +0 -7
@@ -57,19 +57,12 @@ static void ack_kn02_irq(unsigned int iriob (); } -static void end_kn02_irq (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -unmask_kn02_irq (irq); -} -static struct irq_chip kn02_irq_type = { .typename ="KN02-CSR" , .ack = ack_kn02_irq, .mask = mask_kn02_irq, .mask_ack = ack_kn02_irq, .unmask = unmask_kn02_irq, - .end = end_kn02_irq, };
arch/mips/emma2rh/common/irq_emma2rh.c +0 -7
@@ -56,19 +56,12 @@ static void emma2rh_irq_disable(unsignedll_emma2rh_irq_disable (irq - emma2rh_irq_base); } -static void emma2rh_irq_end (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -ll_emma2rh_irq_enable (irq - emma2rh_irq_base); -} -struct irq_chip emma2rh_irq_controller = { .typename ="emma2rh_irq" , .ack = emma2rh_irq_disable, .mask = emma2rh_irq_disable, .mask_ack = emma2rh_irq_disable, .unmask = emma2rh_irq_enable, - .end = emma2rh_irq_end, };void emma2rh_irq_init (u32 irq_base)
arch/mips/emma2rh/markeins/irq_markeins.c +0 -7
@@ -48,19 +48,12 @@ static void emma2rh_sw_irq_disable(unsigll_emma2rh_sw_irq_disable (irq - emma2rh_sw_irq_base); } -static void emma2rh_sw_irq_end (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -ll_emma2rh_sw_irq_enable (irq - emma2rh_sw_irq_base); -} -struct irq_chip emma2rh_sw_irq_controller = { .typename ="emma2rh_sw_irq" , .ack = emma2rh_sw_irq_disable, .mask = emma2rh_sw_irq_disable, .mask_ack = emma2rh_sw_irq_disable, .unmask = emma2rh_sw_irq_enable, - .end = emma2rh_sw_irq_end, };void emma2rh_sw_irq_init (u32 irq_base)
arch/mips/jazz/irq.c +0 -7
@@ -39,19 +39,12 @@ void disable_r4030_irq(unsigned int irq)spin_unlock_irqrestore (&r4030_lock, flags); } -static void end_r4030_irq (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -enable_r4030_irq (irq); -} -static struct irq_chip r4030_irq_type = { .typename ="R4030" , .ack = disable_r4030_irq, .mask = disable_r4030_irq, .mask_ack = disable_r4030_irq, .unmask = enable_r4030_irq, - .end = end_r4030_irq, };void __init init_r4030_ints (void )
arch/mips/kernel/irq-mv6434x.c +0 -10
@@ -67,15 +67,6 @@ static inline void unmask_mv64340_irq(un }/* -* End IRQ processing -*/ -static void end_mv64340_irq (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -unmask_mv64340_irq (irq); -} - -/* * Interrupt handler for interrupts coming from the Marvell chip. * It could be built in ethernet ports etc... */
@@ -106,7 +97,6 @@ struct irq_chip mv64340_irq_type = { .mask = mask_mv64340_irq, .mask_ack = mask_mv64340_irq, .unmask = unmask_mv64340_irq, - .end = end_mv64340_irq, };void __init mv64340_irq_init (unsigned int base)
arch/mips/kernel/irq-rm7000.c +0 -7
@@ -29,19 +29,12 @@ static inline void mask_rm7k_irq(unsigneclear_c0_intcontrol (0x100 << (irq - irq_base)); } -static void rm7k_cpu_irq_end (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -unmask_rm7k_irq (irq); -} -static struct irq_chip rm7k_irq_controller = { .typename ="RM7000" , .ack = mask_rm7k_irq, .mask = mask_rm7k_irq, .mask_ack = mask_rm7k_irq, .unmask = unmask_rm7k_irq, - .end = rm7k_cpu_irq_end, };void __init rm7k_cpu_irq_init (int base)
arch/mips/kernel/irq-rm9000.c +0 -8
@@ -80,19 +80,12 @@ static void rm9k_perfcounter_irq_shutdowon_each_cpu (local_rm9k_perfcounter_irq_shutdown, (void *) irq,0 ,1 ); } -static void rm9k_cpu_irq_end (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -unmask_rm9k_irq (irq); -} -static struct irq_chip rm9k_irq_controller = { .typename ="RM9000" , .ack = mask_rm9k_irq, .mask = mask_rm9k_irq, .mask_ack = mask_rm9k_irq, .unmask = unmask_rm9k_irq, - .end = rm9k_cpu_irq_end, };static struct irq_chip rm9k_perfcounter_irq = {
@@ -103,7 +96,6 @@ static struct irq_chip rm9k_perfcounter_ .mask = mask_rm9k_irq, .mask_ack = mask_rm9k_irq, .unmask = unmask_rm9k_irq, - .end = rm9k_cpu_irq_end, };unsigned int rm9000_perfcount_irq;
arch/mips/kernel/irq_cpu.c +0 -7
@@ -50,12 +50,6 @@ static inline void mask_mips_irq(unsigneirq_disable_hazard (); } -static void mips_cpu_irq_end (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -unmask_mips_irq (irq); -} -static struct irq_chip mips_cpu_irq_controller = { .typename ="MIPS" , .ack = mask_mips_irq,
@@ -63,7 +57,6 @@ static struct irq_chip mips_cpu_irq_cont .mask_ack = mask_mips_irq, .unmask = unmask_mips_irq, .eoi = unmask_mips_irq, - .end = mips_cpu_irq_end, };/*
arch/mips/lasat/interrupt.c +0 -7
@@ -44,19 +44,12 @@ void enable_lasat_irq(unsigned int irq_n *lasat_int_mask |= (1 << irq_nr) << lasat_int_mask_shift; } -static void end_lasat_irq (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -enable_lasat_irq (irq); -} -static struct irq_chip lasat_irq_type = { .typename ="Lasat" , .ack = disable_lasat_irq, .mask = disable_lasat_irq, .mask_ack = disable_lasat_irq, .unmask = enable_lasat_irq, - .end = end_lasat_irq, };static inline int ls1bit32 (unsigned int x)
arch/mips/momentum/ocelot_c/cpci-irq.c +0 -10
@@ -66,15 +66,6 @@ static inline void unmask_cpci_irq(unsig }/* -* End IRQ processing -*/ -static void end_cpci_irq (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -unmask_cpci_irq (irq); -} - -/* * Interrupt handler for interrupts coming from the FPGA chip. * It could be built in ethernet ports etc... */
@@ -98,7 +89,6 @@ struct irq_chip cpci_irq_type = { .mask = mask_cpci_irq, .mask_ack = mask_cpci_irq, .unmask = unmask_cpci_irq, - .end = end_cpci_irq, };void cpci_irq_init (void )
arch/mips/momentum/ocelot_c/uart-irq.c +0 -10
@@ -60,15 +60,6 @@ static inline void unmask_uart_irq(unsig }/* -* End IRQ processing -*/ -static void end_uart_irq (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -unmask_uart_irq (irq); -} - -/* * Interrupt handler for interrupts coming from the FPGA chip. */ void ll_uart_irq (void )
@@ -91,7 +82,6 @@ struct irq_chip uart_irq_type = { .mask = mask_uart_irq, .mask_ack = mask_uart_irq, .unmask = unmask_uart_irq, - .end = end_uart_irq, };void uart_irq_init (void )
arch/mips/philips/pnx8550/common/int.c +0 -8
@@ -158,20 +158,12 @@ int pnx8550_set_gic_priority(int irq, inreturn prev_priority; } -static void end_irq (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) { -unmask_irq (irq); - } -} -static struct irq_chip level_irq_type = { .typename ="PNX Level IRQ" , .ack = mask_irq, .mask = mask_irq, .mask_ack = mask_irq, .unmask = unmask_irq, - .end = end_irq, };static struct irqaction gic_action = {
arch/mips/sgi-ip22/ip22-int.c +0 -28
@@ -51,19 +51,12 @@ static void disable_local0_irq(unsigned sgint->imask0 &= ~(1 << (irq -SGINT_LOCAL0 )); } -static void end_local0_irq (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -enable_local0_irq (irq); -} -static struct irq_chip ip22_local0_irq_type = { .typename ="IP22 local 0" , .ack = disable_local0_irq, .mask = disable_local0_irq, .mask_ack = disable_local0_irq, .unmask = enable_local0_irq, - .end = end_local0_irq, };static void enable_local1_irq (unsigned int irq)
@@ -79,19 +72,12 @@ void disable_local1_irq(unsigned int irq sgint->imask1 &= ~(1 << (irq -SGINT_LOCAL1 )); } -static void end_local1_irq (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -enable_local1_irq (irq); -} -static struct irq_chip ip22_local1_irq_type = { .typename ="IP22 local 1" , .ack = disable_local1_irq, .mask = disable_local1_irq, .mask_ack = disable_local1_irq, .unmask = enable_local1_irq, - .end = end_local1_irq, };static void enable_local2_irq (unsigned int irq)
@@ -107,19 +93,12 @@ void disable_local2_irq(unsigned int irq sgint->imask0 &= ~(1 << (SGI_MAP_0_IRQ -SGINT_LOCAL0 )); } -static void end_local2_irq (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -enable_local2_irq (irq); -} -static struct irq_chip ip22_local2_irq_type = { .typename ="IP22 local 2" , .ack = disable_local2_irq, .mask = disable_local2_irq, .mask_ack = disable_local2_irq, .unmask = enable_local2_irq, - .end = end_local2_irq, };static void enable_local3_irq (unsigned int irq)
@@ -135,19 +114,12 @@ void disable_local3_irq(unsigned int irq sgint->imask1 &= ~(1 << (SGI_MAP_1_IRQ -SGINT_LOCAL1 )); } -static void end_local3_irq (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -enable_local3_irq (irq); -} -static struct irq_chip ip22_local3_irq_type = { .typename ="IP22 local 3" , .ack = disable_local3_irq, .mask = disable_local3_irq, .mask_ack = disable_local3_irq, .unmask = enable_local3_irq, - .end = end_local3_irq, };static void indy_local0_irqdispatch (void )
arch/mips/sgi-ip27/ip27-irq.c +0 -8
@@ -332,13 +332,6 @@ static inline void disable_bridge_irq(unintr_disconnect_level (cpu, swlevel); } -static void end_bridge_irq (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS )) && - irq_desc[irq].action) -enable_bridge_irq (irq); -} -static struct irq_chip bridge_irq_type = { .typename ="bridge" , .startup = startup_bridge_irq,
@@ -347,7 +340,6 @@ static struct irq_chip bridge_irq_type = .mask = disable_bridge_irq, .mask_ack = disable_bridge_irq, .unmask = enable_bridge_irq, - .end = end_bridge_irq, };void __devinit register_bridge_irq (unsigned int irq)
arch/mips/sgi-ip27/ip27-timer.c +0 -5
@@ -180,10 +180,6 @@ static void disable_rt_irq(unsigned int { } -static void end_rt_irq (unsigned int irq) -{ -} -static struct irq_chip rt_irq_type = { .typename ="SN HUB RT timer" , .ack = disable_rt_irq,
@@ -191,7 +187,6 @@ static struct irq_chip rt_irq_type = { .mask_ack = disable_rt_irq, .unmask = enable_rt_irq, .eoi = enable_rt_irq, - .end = end_rt_irq, };static struct irqaction rt_irqaction = {
arch/mips/tx4927/common/tx4927_irq.c +0 -22
@@ -114,11 +114,9 @@ static const u32 tx4927_irq_debug_flag =static void tx4927_irq_cp0_enable (unsigned int irq);static void tx4927_irq_cp0_disable (unsigned int irq); -static void tx4927_irq_cp0_end (unsigned int irq);static void tx4927_irq_pic_enable (unsigned int irq);static void tx4927_irq_pic_disable (unsigned int irq); -static void tx4927_irq_pic_end (unsigned int irq);/* * Kernel structs for all pic's
@@ -131,7 +129,6 @@ static struct irq_chip tx4927_irq_cp0_ty .mask = tx4927_irq_cp0_disable, .mask_ack = tx4927_irq_cp0_disable, .unmask = tx4927_irq_cp0_enable, - .end = tx4927_irq_cp0_end, };#define TX4927_PIC_NAME "TX4927-PIC"
@@ -141,7 +138,6 @@ static struct irq_chip tx4927_irq_pic_ty .mask = tx4927_irq_pic_disable, .mask_ack = tx4927_irq_pic_disable, .unmask = tx4927_irq_pic_enable, - .end = tx4927_irq_pic_end, };#define TX4927_PIC_ACTION (s) { no_action, 0, CPU_MASK_NONE, s, NULL, NULL }
@@ -214,15 +210,6 @@ static void tx4927_irq_cp0_disable(unsigtx4927_irq_cp0_modify (CCP0_STATUS ,tx4927_irq_cp0_mask (irq),0 ); } -static void tx4927_irq_cp0_end (unsigned int irq) -{ -TX4927_IRQ_DPRINTK (TX4927_IRQ_CP0_ENDIRQ ,"irq=%d \n" , irq); - -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) { -tx4927_irq_cp0_enable (irq); - } -} -/* * Functions for pic */
@@ -376,15 +363,6 @@ static void tx4927_irq_pic_disable(unsig tx4927_irq_pic_mask(irq), 0); } -static void tx4927_irq_pic_end (unsigned int irq) -{ -TX4927_IRQ_DPRINTK (TX4927_IRQ_PIC_ENDIRQ ,"irq=%d\n" , irq); - -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) { -tx4927_irq_pic_enable (irq); - } -} -/* * Main init functions */
arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c +0 -19
@@ -223,7 +223,6 @@ extern void mask_and_ack_8259A(unsignedstatic void toshiba_rbtx4927_irq_ioc_enable (unsigned int irq);static void toshiba_rbtx4927_irq_ioc_disable (unsigned int irq); -static void toshiba_rbtx4927_irq_ioc_end (unsigned int irq);#ifdef CONFIG_TOSHIBA_FPCIB0 static void toshiba_rbtx4927_irq_isa_enable (unsigned int irq);
@@ -239,7 +238,6 @@ static struct irq_chip toshiba_rbtx4927_ .mask = toshiba_rbtx4927_irq_ioc_disable, .mask_ack = toshiba_rbtx4927_irq_ioc_disable, .unmask = toshiba_rbtx4927_irq_ioc_enable, - .end = toshiba_rbtx4927_irq_ioc_end, };#define TOSHIBA_RBTX4927_IOC_INTR_ENAB 0xbc002000#define TOSHIBA_RBTX4927_IOC_INTR_STAT 0xbc002006
@@ -388,23 +386,6 @@ static void toshiba_rbtx4927_irq_ioc_disTOSHIBA_RBTX4927_WR08 (TOSHIBA_RBTX4927_IOC_INTR_ENAB , v); } -static void toshiba_rbtx4927_irq_ioc_end (unsigned int irq) -{ -TOSHIBA_RBTX4927_IRQ_DPRINTK (TOSHIBA_RBTX4927_IRQ_IOC_ENDIRQ , -"irq=%d\n" , irq); - -if (irq <TOSHIBA_RBTX4927_IRQ_IOC_BEG - || irq >TOSHIBA_RBTX4927_IRQ_IOC_END ) { -TOSHIBA_RBTX4927_IRQ_DPRINTK (TOSHIBA_RBTX4927_IRQ_EROR , -"bad irq=%d\n" , irq); -panic ("\n" ); - } - -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) { -toshiba_rbtx4927_irq_ioc_enable (irq); - } -} -/**********************************************************************************/ /* Functions for isa */
arch/mips/tx4938/common/irq.c +0 -20
@@ -39,11 +39,9 @@static void tx4938_irq_cp0_enable (unsigned int irq);static void tx4938_irq_cp0_disable (unsigned int irq); -static void tx4938_irq_cp0_end (unsigned int irq);static void tx4938_irq_pic_enable (unsigned int irq);static void tx4938_irq_pic_disable (unsigned int irq); -static void tx4938_irq_pic_end (unsigned int irq);/**********************************************************************************/ /* Kernel structs for all pic's */
@@ -56,7 +54,6 @@ static struct irq_chip tx4938_irq_cp0_ty .mask = tx4938_irq_cp0_disable, .mask_ack = tx4938_irq_cp0_disable, .unmask = tx4938_irq_cp0_enable, - .end = tx4938_irq_cp0_end, };#define TX4938_PIC_NAME "TX4938-PIC"
@@ -66,7 +63,6 @@ static struct irq_chip tx4938_irq_pic_ty .mask = tx4938_irq_pic_disable, .mask_ack = tx4938_irq_pic_disable, .unmask = tx4938_irq_pic_enable, - .end = tx4938_irq_pic_end, };static struct irqaction tx4938_irq_pic_action = {
@@ -104,14 +100,6 @@ tx4938_irq_cp0_disable(unsigned int irq)clear_c0_status (tx4938_irq_cp0_mask (irq)); } -static void -tx4938_irq_cp0_end (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) { -tx4938_irq_cp0_enable (irq); - } -} -/**********************************************************************************/ /* Functions for pic */ /**********************************************************************************/
@@ -269,14 +257,6 @@ tx4938_irq_pic_disable(unsigned int irq) tx4938_irq_pic_mask(irq), 0); } -static void -tx4938_irq_pic_end (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) { -tx4938_irq_pic_enable (irq); - } -} -/**********************************************************************************/ /* Main init functions */ /**********************************************************************************/
arch/mips/tx4938/toshiba_rbtx4938/irq.c +0 -10
@@ -89,7 +89,6 @@ IRQ Devicestatic void toshiba_rbtx4938_irq_ioc_enable (unsigned int irq);static void toshiba_rbtx4938_irq_ioc_disable (unsigned int irq); -static void toshiba_rbtx4938_irq_ioc_end (unsigned int irq);#define TOSHIBA_RBTX4938_IOC_NAME "RBTX4938-IOC"static struct irq_chip toshiba_rbtx4938_irq_ioc_type = {
@@ -98,7 +97,6 @@ static struct irq_chip toshiba_rbtx4938_ .mask = toshiba_rbtx4938_irq_ioc_disable, .mask_ack = toshiba_rbtx4938_irq_ioc_disable, .unmask = toshiba_rbtx4938_irq_ioc_enable, - .end = toshiba_rbtx4938_irq_ioc_end, };#define TOSHIBA_RBTX4938_IOC_INTR_ENAB 0xb7f02000
@@ -167,14 +165,6 @@ toshiba_rbtx4938_irq_ioc_disable(unsigneTX4938_RD08 (TOSHIBA_RBTX4938_IOC_INTR_ENAB ); } -static void -toshiba_rbtx4938_irq_ioc_end (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) { -toshiba_rbtx4938_irq_ioc_enable (irq); - } -} -extern void __init txx9_spi_irqinit (int irc_irq);void __init arch_init_irq (void )
arch/mips/vr41xx/common/icu.c +0 -14
@@ -427,19 +427,12 @@ static void enable_sysint1_irq(unsignedicu1_set (MSYSINT1REG ,1 <<SYSINT1_IRQ_TO_PIN (irq)); } -static void end_sysint1_irq (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -icu1_set (MSYSINT1REG ,1 <<SYSINT1_IRQ_TO_PIN (irq)); -} -static struct irq_chip sysint1_irq_type = { .typename ="SYSINT1" , .ack = disable_sysint1_irq, .mask = disable_sysint1_irq, .mask_ack = disable_sysint1_irq, .unmask = enable_sysint1_irq, - .end = end_sysint1_irq, };static void disable_sysint2_irq (unsigned int irq)
@@ -452,19 +445,12 @@ static void enable_sysint2_irq(unsignedicu2_set (MSYSINT2REG ,1 <<SYSINT2_IRQ_TO_PIN (irq)); } -static void end_sysint2_irq (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -icu2_set (MSYSINT2REG ,1 <<SYSINT2_IRQ_TO_PIN (irq)); -} -static struct irq_chip sysint2_irq_type = { .typename ="SYSINT2" , .ack = disable_sysint2_irq, .mask = disable_sysint2_irq, .mask_ack = disable_sysint2_irq, .unmask = enable_sysint2_irq, - .end = end_sysint2_irq, };static inline int set_sysint1_assign (unsigned int irq,unsigned char assign)
Signature · 1 line
1.4.4.1
Quoted 11 lines · Franck Bui-Huu
__do_IRQ()is needed only by irq handlers that can't use default handler defined inkernel/irq/chip.c.For others platforms there's no need to compile this function since it won't be used. For those platforms this patch defines
GENERIC_HARDIRQS_NO__DO_IRQsymbol which is used exactly for this purpose.Futhermore for platforms which do not use
__do_IRQ(),end()method which is part of the 'irq_chip' structure is not used. This patch simply removes this method in this case.
As I wrote in separate mail, I think I had fault on ioasic_dma_irq_type. So please drop some part from your patch.
arch/mips/Kconfig config MACH_DECSTATION · line 177
Quoted 8 lines
arch/mips/Kconfig +1
-0@@ -171,6 +171,7 @@ config MACH_DECSTATION select SYS_SUPPORTS_128HZ select SYS_SUPPORTS_256HZ select SYS_SUPPORTS_1024HZ + select GENERIC_HARDIRQS_NO__DO_IRQ help This enables support for DEC's MIPS based workstations. For details see the Linux/MIPS FAQ on <http://www.linux-mips.org/> and the
and
Quoted 11 lines
arch/mips/dec/ioasic-irq.c +0
-7@@ -77,20 +70,12 @@ static struct irq_chip ioasic_irq_type =#define ack_ioasic_dma_irq ack_ioasic_irq -static inline void end_ioasic_dma_irq (unsigned int irq) -{ -clear_ioasic_irq (irq); -fast_iob (); -end_ioasic_irq (irq); -} -
arch/mips/dec/ioasic-irq.c static struct irq_chip ioasic_irq_type = · line 81
Quoted 10 lines
arch/mips/dec/ioasic-irq.c +0
-1static struct irq_chip ioasic_dma_irq_type = { .typename ="IO-ASIC-DMA" , .ack = ack_ioasic_dma_irq, .mask = mask_ioasic_dma_irq, .mask_ack = ack_ioasic_dma_irq, .unmask = unmask_ioasic_dma_irq, - .end = end_ioasic_dma_irq, };
Sorry for confusion...
---
Atsushi Nemoto
Quoted 9 lines · Atsushi Nemoto
Quoted 8 lines · Franck Bui-Huu
__do_IRQ()is needed only by irq handlers that can't use default handler defined inkernel/irq/chip.c.For others platforms there's no need to compile this function since it won't be used. For those platforms this patch defines
GENERIC_HARDIRQS_NO__DO_IRQsymbol which is used exactly for this purpose.
Quoted 7 lines
Quoted 3 lines
Futhermore for platforms which do not use
__do_IRQ(),end()method which is part of the 'irq_chip' structure is not used. This patch simply removes this method in this case.As I wrote in separate mail, I think I had fault on
ioasic_dma_irq_type. So please drop some part from your patch.
Yes, I just noticed your latest patch which makes this one obsolete and wrong. I'm going to drop DEC's part.
thanks
Signature · 1 line
Franck
Quoted 35 lines · Franck Bui-Huu
arch/mips/dec/ioasic-irq.c +0
-14@@ -55,19 +55,12 @@ static inline void ack_ioasic_irq(unsignfast_iob (); } -static inline void end_ioasic_irq (unsigned int irq) -{ -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) -unmask_ioasic_irq (irq); -} -static struct irq_chip ioasic_irq_type = { .typename ="IO-ASIC" , .ack = ack_ioasic_irq, .mask = mask_ioasic_irq, .mask_ack = ack_ioasic_irq, .unmask = unmask_ioasic_irq, - .end = end_ioasic_irq, };@@ -77,20 +70,12 @@ static struct irq_chip ioasic_irq_type =#define ack_ioasic_dma_irq ack_ioasic_irq -static inline void end_ioasic_dma_irq (unsigned int irq) -{ -clear_ioasic_irq (irq); -fast_iob (); -end_ioasic_irq (irq); -} -
arch/mips/dec/ioasic-irq.c static struct irq_chip ioasic_irq_type = · line 81
Quoted 10 lines
arch/mips/dec/ioasic-irq.c +0
-1static struct irq_chip ioasic_dma_irq_type = { .typename ="IO-ASIC-DMA" , .ack = ack_ioasic_dma_irq, .mask = mask_ioasic_dma_irq, .mask_ack = ack_ioasic_dma_irq, .unmask = unmask_ioasic_dma_irq, - .end = end_ioasic_dma_irq, };
You have removed a call to clear_ioasic_irq() -- I/O ASIC DMA engines
will cease to work as a result.
Maciej
Hi,
arch/mips/Kconfig config DDB5477 · line 476
Quoted 4 lines · On Fri, 01 Dec 2006 15:58:07 +0100 Franck Bui-Huu <[email protected]> wrote:
config
MACH_VR41XXarch/mips/Kconfig +1
-0bool "NEC VR41XX-based machines" select SYS_HAS_CPU_VR41XX + select GENERIC_HARDIRQS_NO__DO_IRQ
NEC CMBVR4133 has i8259.
The other vr41xx boards have no problem.
Thanks,
Yoichi
Hi,
Quoted 5 lines · Yoichi Yuasa
Hi,
On Fri, 01 Dec 2006 15:58:07 +0100
Franck Bui-Huu <[email protected]> wrote:
Quoted 8 lines
Quoted 4 lines
config
MACH_VR41XX
bool "NEC VR41XX-based machines"
selectSYS_HAS_CPU_VR41XX
+ selectGENERIC_HARDIRQS_NO__DO_IRQNEC CMBVR4133 has i8259.
The other vr41xx boards have no problem.
Thanks for testing.
Signature · 1 line
Franck
arch/mips/Kconfig config MACH_JAZZ · line 223
Quoted 8 lines · Franck Bui-Huu
arch/mips/Kconfig +1
-0@@ -216,6 +217,7 @@ config MACH_JAZZ select SYS_SUPPORTS_32BIT_KERNEL select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL select SYS_SUPPORTS_100HZ + select GENERIC_HARDIRQS_NO__DO_IRQ help This a family of machines based on the MIPS R4030 chipset which was used by several vendors to build RISC/os and Windows NT workstations.
JAZZ uses i8259 which is not converted to irq flow handler yet.
arch/mips/Kconfig config DDB5477 · line 479
Quoted 8 lines
arch/mips/Kconfig +1
-0@@ -468,6 +473,7 @@ config DDB5477 config MACH_VR41XX bool "NEC VR41XX-based machines" select SYS_HAS_CPU_VR41XX + select GENERIC_HARDIRQS_NO__DO_IRQ config PMC_YOSEMITE bool "PMC-Sierra Yosemite eval board"
Same here.
arch/mips/Kconfig config MARKEINS · line 531
Quoted 8 lines
arch/mips/Kconfig +1
-0@@ -519,6 +525,7 @@ config MARKEINS select SYS_SUPPORTS_BIG_ENDIAN select SYS_SUPPORTS_LITTLE_ENDIAN select SYS_HAS_CPU_R5000 + select GENERIC_HARDIRQS_NO__DO_IRQ help This enables support for the R5432-based NEC Mark-eins boards with R5500 CPU.
For now emma2rh_gpio_irq_controller still needs __do_IRQ().
arch/mips/Kconfig config SGI_IP22 · line 552
Quoted 8 lines
arch/mips/Kconfig +1
-0@@ -539,6 +546,7 @@ config SGI_IP22 select SYS_SUPPORTS_32BIT_KERNEL select SYS_SUPPORTS_64BIT_KERNEL select SYS_SUPPORTS_BIG_ENDIAN + select GENERIC_HARDIRQS_NO__DO_IRQ help This are the SGI Indy, Challenge S and Indigo2, as well as certain OEM variants like the Tandem CMN B006S. To compile a Linux kernel
For now ip22_eisa1_irq_type and ip22_eisa2_irq_type need __do_IRQ().
arch/mips/Kconfig config TOSHIBA_RBTX4927 · line 754
Quoted 8 lines
arch/mips/Kconfig +1
-0@@ -739,6 +748,7 @@ config TOSHIBA_RBTX4927 select SYS_SUPPORTS_64BIT_KERNEL select SYS_SUPPORTS_BIG_ENDIAN select TOSHIBA_BOARDS + select GENERIC_HARDIRQS_NO__DO_IRQ help This Toshiba board is based on the TX4927 processor. Say Y here to support this machine type
For now toshiba_rbtx4927_irq_isa_type still needs __do_IRQ().
arch/mips/Kconfig config TOSHIBA_RBTX4938 · line 774
Quoted 8 lines
arch/mips/Kconfig +1
-0@@ -758,6 +768,7 @@ config TOSHIBA_RBTX4938 select SYS_SUPPORTS_LITTLE_ENDIAN select SYS_SUPPORTS_BIG_ENDIAN select TOSHIBA_BOARDS + select GENERIC_HARDIRQS_NO__DO_IRQ help This Toshiba board is based on the TX4938 processor. Say Y here to support this machine type
RBTX4938(rbhma4500) uses i8259 which is not converted to irq flow handler yet.
Quoted 22 lines
arch/mips/tx4927/common/tx4927_irq.c +0
-11@@ -214,15 +210,6 @@ static void tx4927_irq_cp0_disable(unsigtx4927_irq_cp0_modify (CCP0_STATUS ,tx4927_irq_cp0_mask (irq),0 ); } -static void tx4927_irq_cp0_end (unsigned int irq) -{ -TX4927_IRQ_DPRINTK (TX4927_IRQ_CP0_ENDIRQ ,"irq=%d \n" , irq); - -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) { -tx4927_irq_cp0_enable (irq); - } -} -/* * Functions for pic */ @@ -376,15 +363,6 @@ static void tx4927_irq_pic_disable(unsig tx4927_irq_pic_mask(irq), 0); } -static void tx4927_irq_pic_end (unsigned int irq) -{
arch/mips/tx4927/common/tx4927_irq.c static void tx4927_irq_pic_disable(unsig · line 368
Quoted 10 lines
arch/mips/tx4927/common/tx4927_irq.c +0
-7-TX4927_IRQ_DPRINTK (TX4927_IRQ_PIC_ENDIRQ ,"irq=%d\n" , irq); - -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) { -tx4927_irq_pic_enable (irq); - } -} -/* * Main init functions */
You can remove those lines too:
#define TX4927_IRQ_CP0_ENDIRQ ( 1 << 16 )
#define TX4927_IRQ_PIC_ENDIRQ ( 1 << 26 )
Quoted 18 lines
arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c +0
-10@@ -388,23 +386,6 @@ static void toshiba_rbtx4927_irq_ioc_disTOSHIBA_RBTX4927_WR08 (TOSHIBA_RBTX4927_IOC_INTR_ENAB , v); } -static void toshiba_rbtx4927_irq_ioc_end (unsigned int irq) -{ -TOSHIBA_RBTX4927_IRQ_DPRINTK (TOSHIBA_RBTX4927_IRQ_IOC_ENDIRQ , -"irq=%d\n" , irq); - -if (irq <TOSHIBA_RBTX4927_IRQ_IOC_BEG - || irq >TOSHIBA_RBTX4927_IRQ_IOC_END ) { -TOSHIBA_RBTX4927_IRQ_DPRINTK (TOSHIBA_RBTX4927_IRQ_EROR , -"bad irq=%d\n" , irq); -panic ("\n" );
arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c static void toshiba_rbtx4927_irq_ioc_dis · line 391
Quoted 10 lines
arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c +0
-7- } - -if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) { -toshiba_rbtx4927_irq_ioc_enable (irq); - } -} -/**********************************************************************************/ /* Functions for isa */
You can remove this line too:
#define TOSHIBA_RBTX4927_IRQ_IOC_ENDIRQ ( 1 << 16 )
Hello.
Quoted 11 lines · Atsushi Nemoto
arch/mips/Kconfig config TOSHIBA_RBTX4938 · line 774
Quoted 8 lines
arch/mips/Kconfig +1
-0@@ -758,6 +768,7 @@ config TOSHIBA_RBTX4938 select SYS_SUPPORTS_LITTLE_ENDIAN select SYS_SUPPORTS_BIG_ENDIAN select TOSHIBA_BOARDS + select GENERIC_HARDIRQS_NO__DO_IRQ help This Toshiba board is based on the TX4938 processor. Say Y here to support this machine typeRBTX4938(rbhma4500) uses i8259 which is not converted to irq flow handler yet.
I'm afraid there's some mistake in Kconfig -- RBTX4938 doesn't have 8259
compatible controller. And the backplane that has it isn't supported by the current code anyway.
WBR, Sergei
Quoted 12 lines · Atsushi Nemoto
arch/mips/Kconfig config MACH_JAZZ · line 223
Quoted 8 lines · Franck Bui-Huu
arch/mips/Kconfig +1
-0@@ -216,6 +217,7 @@ config MACH_JAZZ select SYS_SUPPORTS_32BIT_KERNEL select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL select SYS_SUPPORTS_100HZ + select GENERIC_HARDIRQS_NO__DO_IRQ help This a family of machines based on the MIPS R4030 chipset which was used by several vendors to build RISC/os and Windows NT workstations.JAZZ uses i8259 which is not converted to irq flow handler yet.
stupid me, I completely forgot this point ! I'm going to take a cool shower before updating that...
Quoted 11 lines
arch/mips/Kconfig config DDB5477 · line 479
Quoted 8 lines
arch/mips/Kconfig +1
-0@@ -468,6 +473,7 @@ config DDB5477 config MACH_VR41XX bool "NEC VR41XX-based machines" select SYS_HAS_CPU_VR41XX + select GENERIC_HARDIRQS_NO__DO_IRQ config PMC_YOSEMITE bool "PMC-Sierra Yosemite eval board"Same here.
are you sure ? I don't see any traces of i8259 selection. Moreover, Yoichi's vr41xx boards seem to have no problem
I agree with all the rest.
Thanks
Signature · 1 line
Franck
Hello.
Quoted 6 lines · Franck Bui-Huu
Quoted 6 lines
Quoted 6 lines
arch/mips/Kconfig +1
-0@@ -468,6 +473,7 @@ config DDB5477 config MACH_VR41XX bool "NEC VR41XX-based machines" select SYS_HAS_CPU_VR41XX + select GENERIC_HARDIRQS_NO__DO_IRQ
Quoted 7 lines
Quoted 4 lines
arch/mips/Kconfig config DDB5477 · line 479
Quoted 2 lines
arch/mips/Kconfig +0
-0config PMC_YOSEMITE bool "PMC-Sierra Yosemite eval board"Same here.
are you sure ? I don't see any traces of i8259 selection. Moreover, Yoichi's vr41xx boards seem to have no problem
CMB-Vr4133 has the Rockhopper backplane with 8259 integrated into ALi chip
-- and it is supported via CONFIG_ROCKHOPPER.
Quoted 3 lines
I agree with all the rest.
Thanks
WBR, Sergei
Quoted 3 lines · Sergei Shtylyov
CMB-Vr4133 has the Rockhopper backplane with 8259 integrated into ALi chip
-- and it is supported viaCONFIG_ROCKHOPPER.
thanks, I can see it now.
Signature · 1 line
Franck
Quoted 6 lines · Franck Bui-Huu
Quoted 6 lines
Quoted 6 lines
arch/mips/Kconfig +1
-0@@ -468,6 +473,7 @@ config DDB5477 config MACH_VR41XX bool "NEC VR41XX-based machines" select SYS_HAS_CPU_VR41XX + select GENERIC_HARDIRQS_NO__DO_IRQ
Quoted 8 lines
Quoted 5 lines
arch/mips/Kconfig config DDB5477 · line 479
Quoted 2 lines
arch/mips/Kconfig +0
-0config PMC_YOSEMITE bool "PMC-Sierra Yosemite eval board"Same here.
are you sure ? I don't see any traces of i8259 selection. Moreover, Yoichi's vr41xx boards seem to have no problem
Oh I was wrong. I had misread VR41XX as DDB5477...
---
Atsushi Nemoto
Quoted 13 lines · Atsushi Nemoto
Quoted 12 lines · Franck Bui-Huu
Quoted 11 lines
arch/mips/Kconfig config DDB5477 · line 479
Quoted 8 lines
arch/mips/Kconfig +1
-0@@ -468,6 +473,7 @@ config DDB5477 config MACH_VR41XX bool "NEC VR41XX-based machines" select SYS_HAS_CPU_VR41XX + select GENERIC_HARDIRQS_NO__DO_IRQ config PMC_YOSEMITE bool "PMC-Sierra Yosemite eval board"Same here.
Quoted 5 lines
Quoted 2 lines
are you sure ? I don't see any traces of i8259 selection. Moreover, Yoichi's vr41xx boards seem to have no problem
Oh I was wrong. I had misread VR41XX as DDB5477...
No you were not ;) take a look to Sergei reply.
Signature · 1 line
Franck