tree: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git irq/domain_cleanup head: 76a98e310bbd7bada3f24d6fda08858460fd6cd4 commit: 5dd760fc3140b85b7d8cf1ad003238c5a223fc76 [14/20] irqdomain: Introduce irq_resolve_mapping() config: mips-randconfig-m031-20210514 (attached as .config) compiler: mips-linux-gcc (GCC) 9.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git/commit/?id=5dd760fc3140b85b7d8cf1ad003238c5a223fc76 git remote add arm-platforms https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git git fetch --no-tags arm-platforms irq/domain_cleanup git checkout 5dd760fc3140b85b7d8cf1ad003238c5a223fc76 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=mips If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All errors (new ones prefixed by >>): In file included from include/linux/irqdomain.h:35, from arch/mips/include/asm/irq.h:14, from include/linux/irq.h:23, from include/asm-generic/hardirq.h:17, from arch/mips/include/asm/hardirq.h:16, from include/linux/hardirq.h:11, from include/linux/interrupt.h:11, from include/linux/kernel_stat.h:9, from include/linux/cgroup.h:26, from include/linux/memcontrol.h:13, from include/linux/swap.h:9, from include/linux/suspend.h:5, from arch/mips/kernel/asm-offsets.c:17: >> include/linux/irqdesc.h:56:25: error: field 'irq_common_data' has incomplete type 56 | struct irq_common_data irq_common_data; | ^~~~~~~~~~~~~~~ >> include/linux/irqdesc.h:57:19: error: field 'irq_data' has incomplete type 57 | struct irq_data irq_data; | ^~~~~~~~ >> include/linux/irqdesc.h:113:33: error: 'NR_IRQS' undeclared here (not in a function) 113 | extern struct irq_desc irq_desc[NR_IRQS]; | ^~~~~~~ In file included from include/linux/list.h:9, from include/linux/smp.h:12, from arch/mips/include/asm/cpu-type.h:12, from arch/mips/include/asm/timex.h:19, from include/linux/timex.h:65, from include/linux/time32.h:13, from include/linux/time.h:60, from include/linux/compat.h:10, from arch/mips/kernel/asm-offsets.c:12: include/linux/irqdesc.h: In function 'irq_data_to_desc': >> include/linux/irqdesc.h:124:26: error: dereferencing pointer to incomplete type 'struct irq_data' 124 | return container_of(data->common, struct irq_desc, irq_common_data); | ^~ include/linux/kernel.h:703:26: note: in definition of macro 'container_of' 703 | void *__mptr = (void *)(ptr); \ | ^~~ In file included from include/linux/irqdomain.h:35, from arch/mips/include/asm/irq.h:14, from include/linux/irq.h:23, from include/asm-generic/hardirq.h:17, from arch/mips/include/asm/hardirq.h:16, from include/linux/hardirq.h:11, from include/linux/interrupt.h:11, from include/linux/kernel_stat.h:9, from include/linux/cgroup.h:26, from include/linux/memcontrol.h:13, from include/linux/swap.h:9, from include/linux/suspend.h:5, from arch/mips/kernel/asm-offsets.c:17: include/linux/irqdesc.h: In function 'irq_balancing_disabled': >> include/linux/irqdesc.h:236:35: error: 'IRQ_NO_BALANCING_MASK' undeclared (first use in this function) 236 | return irq_check_status_bit(irq, IRQ_NO_BALANCING_MASK); | ^~~~~~~~~~~~~~~~~~~~~ include/linux/irqdesc.h:236:35: note: each undeclared identifier is reported only once for each function it appears in include/linux/irqdesc.h: In function 'irq_is_percpu': >> include/linux/irqdesc.h:241:35: error: 'IRQ_PER_CPU' undeclared (first use in this function) 241 | return irq_check_status_bit(irq, IRQ_PER_CPU); | ^~~~~~~~~~~ include/linux/irqdesc.h: In function 'irq_is_percpu_devid': >> include/linux/irqdesc.h:246:35: error: 'IRQ_PER_CPU_DEVID' undeclared (first use in this function) 246 | return irq_check_status_bit(irq, IRQ_PER_CPU_DEVID); | ^~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c: At top level: arch/mips/kernel/asm-offsets.c:26:6: warning: no previous prototype for 'output_ptreg_defines' [-Wmissing-prototypes] 26 | void output_ptreg_defines(void) | ^~~~~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c:78:6: warning: no previous prototype for 'output_task_defines' [-Wmissing-prototypes] 78 | void output_task_defines(void) | ^~~~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c:93:6: warning: no previous prototype for 'output_thread_info_defines' [-Wmissing-prototypes] 93 | void output_thread_info_defines(void) | ^~~~~~~~~~~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c:109:6: warning: no previous prototype for 'output_thread_defines' [-Wmissing-prototypes] 109 | void output_thread_defines(void) | ^~~~~~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c:137:6: warning: no previous prototype for 'output_thread_fpu_defines' [-Wmissing-prototypes] 137 | void output_thread_fpu_defines(void) | ^~~~~~~~~~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c:180:6: warning: no previous prototype for 'output_mm_defines' [-Wmissing-prototypes] 180 | void output_mm_defines(void) | ^~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c:219:6: warning: no previous prototype for 'output_sc_defines' [-Wmissing-prototypes] 219 | void output_sc_defines(void) | ^~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c:254:6: warning: no previous prototype for 'output_signal_defined' [-Wmissing-prototypes] 254 | void output_signal_defined(void) | ^~~~~~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c:333:6: warning: no previous prototype for 'output_pm_defines' [-Wmissing-prototypes] 333 | void output_pm_defines(void) | ^~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c:347:6: warning: no previous prototype for 'output_kvm_defines' [-Wmissing-prototypes] 347 | void output_kvm_defines(void) | ^~~~~~~~~~~~~~~~~~ -- In file included from include/linux/irqdomain.h:35, from arch/mips/include/asm/irq.h:14, from include/linux/irq.h:23, from include/asm-generic/hardirq.h:17, from arch/mips/include/asm/hardirq.h:16, from include/linux/hardirq.h:11, from include/linux/interrupt.h:11, from include/linux/kernel_stat.h:9, from include/linux/cgroup.h:26, from include/linux/memcontrol.h:13, from include/linux/swap.h:9, from include/linux/suspend.h:5, from arch/mips/kernel/asm-offsets.c:17: >> include/linux/irqdesc.h:56:25: error: field 'irq_common_data' has incomplete type 56 | struct irq_common_data irq_common_data; | ^~~~~~~~~~~~~~~ >> include/linux/irqdesc.h:57:19: error: field 'irq_data' has incomplete type 57 | struct irq_data irq_data; | ^~~~~~~~ >> include/linux/irqdesc.h:113:33: error: 'NR_IRQS' undeclared here (not in a function) 113 | extern struct irq_desc irq_desc[NR_IRQS]; | ^~~~~~~ In file included from include/linux/list.h:9, from include/linux/smp.h:12, from arch/mips/include/asm/cpu-type.h:12, from arch/mips/include/asm/timex.h:19, from include/linux/timex.h:65, from include/linux/time32.h:13, from include/linux/time.h:60, from include/linux/compat.h:10, from arch/mips/kernel/asm-offsets.c:12: include/linux/irqdesc.h: In function 'irq_data_to_desc': >> include/linux/irqdesc.h:124:26: error: dereferencing pointer to incomplete type 'struct irq_data' 124 | return container_of(data->common, struct irq_desc, irq_common_data); | ^~ include/linux/kernel.h:703:26: note: in definition of macro 'container_of' 703 | void *__mptr = (void *)(ptr); \ | ^~~ In file included from include/linux/irqdomain.h:35, from arch/mips/include/asm/irq.h:14, from include/linux/irq.h:23, from include/asm-generic/hardirq.h:17, from arch/mips/include/asm/hardirq.h:16, from include/linux/hardirq.h:11, from include/linux/interrupt.h:11, from include/linux/kernel_stat.h:9, from include/linux/cgroup.h:26, from include/linux/memcontrol.h:13, from include/linux/swap.h:9, from include/linux/suspend.h:5, from arch/mips/kernel/asm-offsets.c:17: include/linux/irqdesc.h: In function 'irq_balancing_disabled': >> include/linux/irqdesc.h:236:35: error: 'IRQ_NO_BALANCING_MASK' undeclared (first use in this function) 236 | return irq_check_status_bit(irq, IRQ_NO_BALANCING_MASK); | ^~~~~~~~~~~~~~~~~~~~~ include/linux/irqdesc.h:236:35: note: each undeclared identifier is reported only once for each function it appears in include/linux/irqdesc.h: In function 'irq_is_percpu': >> include/linux/irqdesc.h:241:35: error: 'IRQ_PER_CPU' undeclared (first use in this function) 241 | return irq_check_status_bit(irq, IRQ_PER_CPU); | ^~~~~~~~~~~ include/linux/irqdesc.h: In function 'irq_is_percpu_devid': >> include/linux/irqdesc.h:246:35: error: 'IRQ_PER_CPU_DEVID' undeclared (first use in this function) 246 | return irq_check_status_bit(irq, IRQ_PER_CPU_DEVID); | ^~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c: At top level: arch/mips/kernel/asm-offsets.c:26:6: warning: no previous prototype for 'output_ptreg_defines' [-Wmissing-prototypes] 26 | void output_ptreg_defines(void) | ^~~~~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c:78:6: warning: no previous prototype for 'output_task_defines' [-Wmissing-prototypes] 78 | void output_task_defines(void) | ^~~~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c:93:6: warning: no previous prototype for 'output_thread_info_defines' [-Wmissing-prototypes] 93 | void output_thread_info_defines(void) | ^~~~~~~~~~~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c:109:6: warning: no previous prototype for 'output_thread_defines' [-Wmissing-prototypes] 109 | void output_thread_defines(void) | ^~~~~~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c:137:6: warning: no previous prototype for 'output_thread_fpu_defines' [-Wmissing-prototypes] 137 | void output_thread_fpu_defines(void) | ^~~~~~~~~~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c:180:6: warning: no previous prototype for 'output_mm_defines' [-Wmissing-prototypes] 180 | void output_mm_defines(void) | ^~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c:219:6: warning: no previous prototype for 'output_sc_defines' [-Wmissing-prototypes] 219 | void output_sc_defines(void) | ^~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c:254:6: warning: no previous prototype for 'output_signal_defined' [-Wmissing-prototypes] 254 | void output_signal_defined(void) | ^~~~~~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c:333:6: warning: no previous prototype for 'output_pm_defines' [-Wmissing-prototypes] 333 | void output_pm_defines(void) | ^~~~~~~~~~~~~~~~~ arch/mips/kernel/asm-offsets.c:347:6: warning: no previous prototype for 'output_kvm_defines' [-Wmissing-prototypes] 347 | void output_kvm_defines(void) | ^~~~~~~~~~~~~~~~~~ make[2]: *** [scripts/Makefile.build:117: arch/mips/kernel/asm-offsets.s] Error 1 make[2]: Target '__build' not remade because of errors. make[1]: *** [Makefile:1227: prepare0] Error 2 make[1]: Target 'prepare' not remade because of errors. make: *** [Makefile:215: __sub-make] Error 2 make: Target 'prepare' not remade because of errors. vim +/irq_common_data +56 include/linux/irqdesc.h 293a7a0a165c4f Thomas Gleixner 2012-10-16 19 e144710b302525 Thomas Gleixner 2010-10-01 20 /** e144710b302525 Thomas Gleixner 2010-10-01 21 * struct irq_desc - interrupt descriptor 0d0b4c866bcce6 Jiang Liu 2015-06-01 22 * @irq_common_data: per irq and chip data passed down to chip functions e144710b302525 Thomas Gleixner 2010-10-01 23 * @kstat_irqs: irq stats per cpu 770767787c2304 Geert Uytterhoeven 2011-04-10 24 * @handle_irq: highlevel irq-events handler e144710b302525 Thomas Gleixner 2010-10-01 25 * @action: the irq action chain 80ebc420ec59a7 Yunfeng Ye 2019-09-18 26 * @status_use_accessors: status information dbec07bac614a6 Thomas Gleixner 2011-02-07 27 * @core_internal_state__do_not_mess_with_it: core internal status information e144710b302525 Thomas Gleixner 2010-10-01 28 * @depth: disable-depth, for nested irq_disable() calls 0911f124bf5535 Geert Uytterhoeven 2011-04-10 29 * @wake_depth: enable depth, for multiple irq_set_irq_wake() callers 030fc443aef663 Waiman Long 2019-02-12 30 * @tot_count: stats field for non-percpu irqs e144710b302525 Thomas Gleixner 2010-10-01 31 * @irq_count: stats field to detect stalled irqs e144710b302525 Thomas Gleixner 2010-10-01 32 * @last_unhandled: aging timer for unhandled count e144710b302525 Thomas Gleixner 2010-10-01 33 * @irqs_unhandled: stats field for spurious unhandled interrupts 1e77d0a1ed7417 Thomas Gleixner 2013-03-07 34 * @threads_handled: stats field for deferred spurious detection of threaded handlers a359f757965aaf Ingo Molnar 2021-03-22 35 * @threads_handled_last: comparator field for deferred spurious detection of threaded handlers e144710b302525 Thomas Gleixner 2010-10-01 36 * @lock: locking for SMP 770767787c2304 Geert Uytterhoeven 2011-04-10 37 * @affinity_hint: hint to user space for preferred irq affinity cd7eab44e9946c Ben Hutchings 2011-01-19 38 * @affinity_notify: context for notification of affinity changes e144710b302525 Thomas Gleixner 2010-10-01 39 * @pending_mask: pending rebalanced interrupts b5faba21a6805c Thomas Gleixner 2011-02-23 40 * @threads_oneshot: bitfield to handle shared oneshot threads e144710b302525 Thomas Gleixner 2010-10-01 41 * @threads_active: number of irqaction threads currently running e144710b302525 Thomas Gleixner 2010-10-01 42 * @wait_for_threads: wait queue for sync_irq to wait for threaded handlers cab303be91dc47 Thomas Gleixner 2014-08-28 43 * @nr_actions: number of installed actions on this descriptor cab303be91dc47 Thomas Gleixner 2014-08-28 44 * @no_suspend_depth: number of irqactions on a irq descriptor with cab303be91dc47 Thomas Gleixner 2014-08-28 45 * IRQF_NO_SUSPEND set cab303be91dc47 Thomas Gleixner 2014-08-28 46 * @force_resume_depth: number of irqactions on a irq descriptor with cab303be91dc47 Thomas Gleixner 2014-08-28 47 * IRQF_FORCE_RESUME set 425a5072dcd1bd Thomas Gleixner 2015-12-13 48 * @rcu: rcu head for delayed free ecb3f394c5dba8 Craig Gallek 2016-09-13 49 * @kobj: kobject used to represent this struct in sysfs 9114014cf4e6df Thomas Gleixner 2017-06-29 50 * @request_mutex: mutex to protect request/free before locking desc->lock e144710b302525 Thomas Gleixner 2010-10-01 51 * @dir: /proc/irq/ procfs entry 087cdfb662ae50 Thomas Gleixner 2017-06-20 52 * @debugfs_file: dentry for the debugfs file e144710b302525 Thomas Gleixner 2010-10-01 53 * @name: flow handler name for /proc/interrupts output e144710b302525 Thomas Gleixner 2010-10-01 54 */ e144710b302525 Thomas Gleixner 2010-10-01 55 struct irq_desc { 0d0b4c866bcce6 Jiang Liu 2015-06-01 @56 struct irq_common_data irq_common_data; e144710b302525 Thomas Gleixner 2010-10-01 @57 struct irq_data irq_data; 6c9ae009b29875 Eric Dumazet 2011-01-13 58 unsigned int __percpu *kstat_irqs; e144710b302525 Thomas Gleixner 2010-10-01 59 irq_flow_handler_t handle_irq; e144710b302525 Thomas Gleixner 2010-10-01 60 struct irqaction *action; /* IRQ action list */ a6967caf00ebbb Thomas Gleixner 2011-02-10 61 unsigned int status_use_accessors; dbec07bac614a6 Thomas Gleixner 2011-02-07 62 unsigned int core_internal_state__do_not_mess_with_it; e144710b302525 Thomas Gleixner 2010-10-01 63 unsigned int depth; /* nested irq disables */ e144710b302525 Thomas Gleixner 2010-10-01 64 unsigned int wake_depth; /* nested wake enables */ 1136b072896990 Thomas Gleixner 2019-02-08 65 unsigned int tot_count; e144710b302525 Thomas Gleixner 2010-10-01 66 unsigned int irq_count; /* For detecting broken IRQs */ e144710b302525 Thomas Gleixner 2010-10-01 67 unsigned long last_unhandled; /* Aging timer for unhandled count */ e144710b302525 Thomas Gleixner 2010-10-01 68 unsigned int irqs_unhandled; 1e77d0a1ed7417 Thomas Gleixner 2013-03-07 69 atomic_t threads_handled; 1e77d0a1ed7417 Thomas Gleixner 2013-03-07 70 int threads_handled_last; e144710b302525 Thomas Gleixner 2010-10-01 71 raw_spinlock_t lock; 31d9d9b6d83030 Marc Zyngier 2011-09-23 72 struct cpumask *percpu_enabled; 222df54fd8b764 Marc Zyngier 2016-04-11 73 const struct cpumask *percpu_affinity; e144710b302525 Thomas Gleixner 2010-10-01 74 #ifdef CONFIG_SMP e144710b302525 Thomas Gleixner 2010-10-01 75 const struct cpumask *affinity_hint; cd7eab44e9946c Ben Hutchings 2011-01-19 76 struct irq_affinity_notify *affinity_notify; e144710b302525 Thomas Gleixner 2010-10-01 77 #ifdef CONFIG_GENERIC_PENDING_IRQ e144710b302525 Thomas Gleixner 2010-10-01 78 cpumask_var_t pending_mask; e144710b302525 Thomas Gleixner 2010-10-01 79 #endif e144710b302525 Thomas Gleixner 2010-10-01 80 #endif b5faba21a6805c Thomas Gleixner 2011-02-23 81 unsigned long threads_oneshot; e144710b302525 Thomas Gleixner 2010-10-01 82 atomic_t threads_active; e144710b302525 Thomas Gleixner 2010-10-01 83 wait_queue_head_t wait_for_threads; cab303be91dc47 Thomas Gleixner 2014-08-28 84 #ifdef CONFIG_PM_SLEEP cab303be91dc47 Thomas Gleixner 2014-08-28 85 unsigned int nr_actions; cab303be91dc47 Thomas Gleixner 2014-08-28 86 unsigned int no_suspend_depth; 17f480342026e5 Rafael J. Wysocki 2015-02-27 87 unsigned int cond_suspend_depth; cab303be91dc47 Thomas Gleixner 2014-08-28 88 unsigned int force_resume_depth; cab303be91dc47 Thomas Gleixner 2014-08-28 89 #endif e144710b302525 Thomas Gleixner 2010-10-01 90 #ifdef CONFIG_PROC_FS e144710b302525 Thomas Gleixner 2010-10-01 91 struct proc_dir_entry *dir; 425a5072dcd1bd Thomas Gleixner 2015-12-13 92 #endif 087cdfb662ae50 Thomas Gleixner 2017-06-20 93 #ifdef CONFIG_GENERIC_IRQ_DEBUGFS 087cdfb662ae50 Thomas Gleixner 2017-06-20 94 struct dentry *debugfs_file; 07557ccb8c83f3 Thomas Gleixner 2017-09-13 95 const char *dev_name; 087cdfb662ae50 Thomas Gleixner 2017-06-20 96 #endif 425a5072dcd1bd Thomas Gleixner 2015-12-13 97 #ifdef CONFIG_SPARSE_IRQ 425a5072dcd1bd Thomas Gleixner 2015-12-13 98 struct rcu_head rcu; ecb3f394c5dba8 Craig Gallek 2016-09-13 99 struct kobject kobj; e144710b302525 Thomas Gleixner 2010-10-01 100 #endif 9114014cf4e6df Thomas Gleixner 2017-06-29 101 struct mutex request_mutex; 293a7a0a165c4f Thomas Gleixner 2012-10-16 102 int parent_irq; b6873807a7143b Sebastian Andrzej Siewior 2011-07-11 103 struct module *owner; e144710b302525 Thomas Gleixner 2010-10-01 104 const char *name; e144710b302525 Thomas Gleixner 2010-10-01 105 } ____cacheline_internodealigned_in_smp; e144710b302525 Thomas Gleixner 2010-10-01 106 a899418167264c Thomas Gleixner 2015-07-05 107 #ifdef CONFIG_SPARSE_IRQ a899418167264c Thomas Gleixner 2015-07-05 108 extern void irq_lock_sparse(void); a899418167264c Thomas Gleixner 2015-07-05 109 extern void irq_unlock_sparse(void); a899418167264c Thomas Gleixner 2015-07-05 110 #else a899418167264c Thomas Gleixner 2015-07-05 111 static inline void irq_lock_sparse(void) { } a899418167264c Thomas Gleixner 2015-07-05 112 static inline void irq_unlock_sparse(void) { } e144710b302525 Thomas Gleixner 2010-10-01 @113 extern struct irq_desc irq_desc[NR_IRQS]; e144710b302525 Thomas Gleixner 2010-10-01 114 #endif e144710b302525 Thomas Gleixner 2010-10-01 115 501e2db67fa426 Thomas Gleixner 2020-12-10 116 static inline unsigned int irq_desc_kstat_cpu(struct irq_desc *desc, 501e2db67fa426 Thomas Gleixner 2020-12-10 117 unsigned int cpu) 501e2db67fa426 Thomas Gleixner 2020-12-10 118 { 501e2db67fa426 Thomas Gleixner 2020-12-10 119 return desc->kstat_irqs ? *per_cpu_ptr(desc->kstat_irqs, cpu) : 0; 501e2db67fa426 Thomas Gleixner 2020-12-10 120 } 501e2db67fa426 Thomas Gleixner 2020-12-10 121 7bbf1dd24b17b9 Jiang Liu 2015-06-01 122 static inline struct irq_desc *irq_data_to_desc(struct irq_data *data) 7bbf1dd24b17b9 Jiang Liu 2015-06-01 123 { 755d119a620497 Thomas Gleixner 2015-09-16 @124 return container_of(data->common, struct irq_desc, irq_common_data); 7bbf1dd24b17b9 Jiang Liu 2015-06-01 125 } 7bbf1dd24b17b9 Jiang Liu 2015-06-01 126 304adf8a8fff97 Jiang Liu 2015-06-04 127 static inline unsigned int irq_desc_get_irq(struct irq_desc *desc) 304adf8a8fff97 Jiang Liu 2015-06-04 128 { 304adf8a8fff97 Jiang Liu 2015-06-04 129 return desc->irq_data.irq; 304adf8a8fff97 Jiang Liu 2015-06-04 130 } 304adf8a8fff97 Jiang Liu 2015-06-04 131 d9936bb3952a08 Thomas Gleixner 2011-03-11 132 static inline struct irq_data *irq_desc_get_irq_data(struct irq_desc *desc) d9936bb3952a08 Thomas Gleixner 2011-03-11 133 { d9936bb3952a08 Thomas Gleixner 2011-03-11 134 return &desc->irq_data; d9936bb3952a08 Thomas Gleixner 2011-03-11 135 } d9936bb3952a08 Thomas Gleixner 2011-03-11 136 a0cd9ca2b907d7 Thomas Gleixner 2011-02-10 137 static inline struct irq_chip *irq_desc_get_chip(struct irq_desc *desc) a0cd9ca2b907d7 Thomas Gleixner 2011-02-10 138 { a0cd9ca2b907d7 Thomas Gleixner 2011-02-10 139 return desc->irq_data.chip; a0cd9ca2b907d7 Thomas Gleixner 2011-02-10 140 } a0cd9ca2b907d7 Thomas Gleixner 2011-02-10 141 a0cd9ca2b907d7 Thomas Gleixner 2011-02-10 142 static inline void *irq_desc_get_chip_data(struct irq_desc *desc) a0cd9ca2b907d7 Thomas Gleixner 2011-02-10 143 { a0cd9ca2b907d7 Thomas Gleixner 2011-02-10 144 return desc->irq_data.chip_data; a0cd9ca2b907d7 Thomas Gleixner 2011-02-10 145 } a0cd9ca2b907d7 Thomas Gleixner 2011-02-10 146 a0cd9ca2b907d7 Thomas Gleixner 2011-02-10 147 static inline void *irq_desc_get_handler_data(struct irq_desc *desc) a0cd9ca2b907d7 Thomas Gleixner 2011-02-10 148 { af7080e040d223 Jiang Liu 2015-06-01 149 return desc->irq_common_data.handler_data; a0cd9ca2b907d7 Thomas Gleixner 2011-02-10 150 } a0cd9ca2b907d7 Thomas Gleixner 2011-02-10 151 e144710b302525 Thomas Gleixner 2010-10-01 152 /* e144710b302525 Thomas Gleixner 2010-10-01 153 * Architectures call this to let the generic IRQ layer 6584d84c3e504c Huang Shijie 2015-09-01 154 * handle an interrupt. e144710b302525 Thomas Gleixner 2010-10-01 155 */ bd0b9ac405e179 Thomas Gleixner 2015-09-14 156 static inline void generic_handle_irq_desc(struct irq_desc *desc) e144710b302525 Thomas Gleixner 2010-10-01 157 { bd0b9ac405e179 Thomas Gleixner 2015-09-14 158 desc->handle_irq(desc); e144710b302525 Thomas Gleixner 2010-10-01 159 } e144710b302525 Thomas Gleixner 2010-10-01 160 fe12bc2c996d3e Thomas Gleixner 2011-05-18 161 int generic_handle_irq(unsigned int irq); e144710b302525 Thomas Gleixner 2010-10-01 162 76ba59f8366f2d Marc Zyngier 2014-08-26 163 #ifdef CONFIG_HANDLE_DOMAIN_IRQ 76ba59f8366f2d Marc Zyngier 2014-08-26 164 /* 76ba59f8366f2d Marc Zyngier 2014-08-26 165 * Convert a HW interrupt number to a logical one using a IRQ domain, 76ba59f8366f2d Marc Zyngier 2014-08-26 166 * and handle the result interrupt number. Return -EINVAL if 76ba59f8366f2d Marc Zyngier 2014-08-26 167 * conversion failed. Providing a NULL domain indicates that the 76ba59f8366f2d Marc Zyngier 2014-08-26 168 * conversion has already been done. 76ba59f8366f2d Marc Zyngier 2014-08-26 169 */ 76ba59f8366f2d Marc Zyngier 2014-08-26 170 int __handle_domain_irq(struct irq_domain *domain, unsigned int hwirq, 76ba59f8366f2d Marc Zyngier 2014-08-26 171 bool lookup, struct pt_regs *regs); 76ba59f8366f2d Marc Zyngier 2014-08-26 172 76ba59f8366f2d Marc Zyngier 2014-08-26 173 static inline int handle_domain_irq(struct irq_domain *domain, 76ba59f8366f2d Marc Zyngier 2014-08-26 174 unsigned int hwirq, struct pt_regs *regs) 76ba59f8366f2d Marc Zyngier 2014-08-26 175 { 76ba59f8366f2d Marc Zyngier 2014-08-26 176 return __handle_domain_irq(domain, hwirq, true, regs); 76ba59f8366f2d Marc Zyngier 2014-08-26 177 } 6e4933a0066163 Julien Thierry 2019-01-31 178 6e4933a0066163 Julien Thierry 2019-01-31 179 #ifdef CONFIG_IRQ_DOMAIN 6e4933a0066163 Julien Thierry 2019-01-31 180 int handle_domain_nmi(struct irq_domain *domain, unsigned int hwirq, 6e4933a0066163 Julien Thierry 2019-01-31 181 struct pt_regs *regs); 6e4933a0066163 Julien Thierry 2019-01-31 182 #endif 76ba59f8366f2d Marc Zyngier 2014-08-26 183 #endif 76ba59f8366f2d Marc Zyngier 2014-08-26 184 e144710b302525 Thomas Gleixner 2010-10-01 185 /* Test to see if a driver has successfully requested an irq */ f61ae4fb66a4f7 Thomas Gleixner 2015-08-02 186 static inline int irq_desc_has_action(struct irq_desc *desc) e144710b302525 Thomas Gleixner 2010-10-01 187 { a313357e704f26 Thomas Gleixner 2020-12-10 188 return desc && desc->action != NULL; f61ae4fb66a4f7 Thomas Gleixner 2015-08-02 189 } f61ae4fb66a4f7 Thomas Gleixner 2015-08-02 190 bbc9d21fc0071c Thomas Gleixner 2015-06-23 191 /** bbc9d21fc0071c Thomas Gleixner 2015-06-23 192 * irq_set_handler_locked - Set irq handler from a locked region bbc9d21fc0071c Thomas Gleixner 2015-06-23 193 * @data: Pointer to the irq_data structure which identifies the irq bbc9d21fc0071c Thomas Gleixner 2015-06-23 194 * @handler: Flow control handler function for this interrupt bbc9d21fc0071c Thomas Gleixner 2015-06-23 195 * bbc9d21fc0071c Thomas Gleixner 2015-06-23 196 * Sets the handler in the irq descriptor associated to @data. bbc9d21fc0071c Thomas Gleixner 2015-06-23 197 * bbc9d21fc0071c Thomas Gleixner 2015-06-23 198 * Must be called with irq_desc locked and valid parameters. Typical bbc9d21fc0071c Thomas Gleixner 2015-06-23 199 * call site is the irq_set_type() callback. bbc9d21fc0071c Thomas Gleixner 2015-06-23 200 */ bbc9d21fc0071c Thomas Gleixner 2015-06-23 201 static inline void irq_set_handler_locked(struct irq_data *data, bbc9d21fc0071c Thomas Gleixner 2015-06-23 202 irq_flow_handler_t handler) bbc9d21fc0071c Thomas Gleixner 2015-06-23 203 { bbc9d21fc0071c Thomas Gleixner 2015-06-23 204 struct irq_desc *desc = irq_data_to_desc(data); bbc9d21fc0071c Thomas Gleixner 2015-06-23 205 bbc9d21fc0071c Thomas Gleixner 2015-06-23 206 desc->handle_irq = handler; bbc9d21fc0071c Thomas Gleixner 2015-06-23 207 } bbc9d21fc0071c Thomas Gleixner 2015-06-23 208 bbc9d21fc0071c Thomas Gleixner 2015-06-23 209 /** bbc9d21fc0071c Thomas Gleixner 2015-06-23 210 * irq_set_chip_handler_name_locked - Set chip, handler and name from a locked region bbc9d21fc0071c Thomas Gleixner 2015-06-23 211 * @data: Pointer to the irq_data structure for which the chip is set bbc9d21fc0071c Thomas Gleixner 2015-06-23 212 * @chip: Pointer to the new irq chip bbc9d21fc0071c Thomas Gleixner 2015-06-23 213 * @handler: Flow control handler function for this interrupt bbc9d21fc0071c Thomas Gleixner 2015-06-23 214 * @name: Name of the interrupt bbc9d21fc0071c Thomas Gleixner 2015-06-23 215 * bbc9d21fc0071c Thomas Gleixner 2015-06-23 216 * Replace the irq chip at the proper hierarchy level in @data and bbc9d21fc0071c Thomas Gleixner 2015-06-23 217 * sets the handler and name in the associated irq descriptor. bbc9d21fc0071c Thomas Gleixner 2015-06-23 218 * bbc9d21fc0071c Thomas Gleixner 2015-06-23 219 * Must be called with irq_desc locked and valid parameters. bbc9d21fc0071c Thomas Gleixner 2015-06-23 220 */ bbc9d21fc0071c Thomas Gleixner 2015-06-23 221 static inline void bbc9d21fc0071c Thomas Gleixner 2015-06-23 222 irq_set_chip_handler_name_locked(struct irq_data *data, struct irq_chip *chip, bbc9d21fc0071c Thomas Gleixner 2015-06-23 223 irq_flow_handler_t handler, const char *name) bbc9d21fc0071c Thomas Gleixner 2015-06-23 224 { bbc9d21fc0071c Thomas Gleixner 2015-06-23 225 struct irq_desc *desc = irq_data_to_desc(data); bbc9d21fc0071c Thomas Gleixner 2015-06-23 226 bbc9d21fc0071c Thomas Gleixner 2015-06-23 227 desc->handle_irq = handler; bbc9d21fc0071c Thomas Gleixner 2015-06-23 228 desc->name = name; bbc9d21fc0071c Thomas Gleixner 2015-06-23 229 data->chip = chip; bbc9d21fc0071c Thomas Gleixner 2015-06-23 230 } bbc9d21fc0071c Thomas Gleixner 2015-06-23 231 fdd029630434b4 Thomas Gleixner 2020-12-10 232 bool irq_check_status_bit(unsigned int irq, unsigned int bitmask); fdd029630434b4 Thomas Gleixner 2020-12-10 233 4ce413d1840b25 Will Deacon 2017-12-01 234 static inline bool irq_balancing_disabled(unsigned int irq) e144710b302525 Thomas Gleixner 2010-10-01 235 { fdd029630434b4 Thomas Gleixner 2020-12-10 @236 return irq_check_status_bit(irq, IRQ_NO_BALANCING_MASK); e144710b302525 Thomas Gleixner 2010-10-01 237 } 781295762defc7 Thomas Gleixner 2011-02-10 238 4ce413d1840b25 Will Deacon 2017-12-01 239 static inline bool irq_is_percpu(unsigned int irq) 7f4a8e7b1943c1 Vinayak Kale 2013-12-04 240 { fdd029630434b4 Thomas Gleixner 2020-12-10 @241 return irq_check_status_bit(irq, IRQ_PER_CPU); 7f4a8e7b1943c1 Vinayak Kale 2013-12-04 242 } 7f4a8e7b1943c1 Vinayak Kale 2013-12-04 243 4ce413d1840b25 Will Deacon 2017-12-01 244 static inline bool irq_is_percpu_devid(unsigned int irq) 08395c7f4d9f58 Julien Thierry 2017-10-13 245 { fdd029630434b4 Thomas Gleixner 2020-12-10 @246 return irq_check_status_bit(irq, IRQ_PER_CPU_DEVID); 08395c7f4d9f58 Julien Thierry 2017-10-13 247 } 08395c7f4d9f58 Julien Thierry 2017-10-13 248 :::::: The code at line 56 was first introduced by commit :::::: 0d0b4c866bcce647f40d73efe5e90aeeb079050a genirq: Introduce struct irq_common_data to host shared irq data :::::: TO: Jiang Liu :::::: CC: Thomas Gleixner --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org