Lines Matching refs:desc

39 static int alloc_masks(struct irq_desc *desc, gfp_t gfp, int node)  in alloc_masks()  argument
41 if (!zalloc_cpumask_var_node(&desc->irq_common_data.affinity, in alloc_masks()
46 if (!zalloc_cpumask_var_node(&desc->pending_mask, gfp, node)) { in alloc_masks()
47 free_cpumask_var(desc->irq_common_data.affinity); in alloc_masks()
54 static void desc_smp_init(struct irq_desc *desc, int node) in desc_smp_init() argument
56 cpumask_copy(desc->irq_common_data.affinity, irq_default_affinity); in desc_smp_init()
58 cpumask_clear(desc->pending_mask); in desc_smp_init()
61 desc->irq_common_data.node = node; in desc_smp_init()
67 alloc_masks(struct irq_desc *desc, gfp_t gfp, int node) { return 0; } in alloc_masks() argument
68 static inline void desc_smp_init(struct irq_desc *desc, int node) { } in desc_smp_init() argument
71 static void desc_set_defaults(unsigned int irq, struct irq_desc *desc, int node, in desc_set_defaults() argument
76 desc->irq_common_data.handler_data = NULL; in desc_set_defaults()
77 desc->irq_common_data.msi_desc = NULL; in desc_set_defaults()
79 desc->irq_data.common = &desc->irq_common_data; in desc_set_defaults()
80 desc->irq_data.irq = irq; in desc_set_defaults()
81 desc->irq_data.chip = &no_irq_chip; in desc_set_defaults()
82 desc->irq_data.chip_data = NULL; in desc_set_defaults()
83 irq_settings_clr_and_set(desc, ~0, _IRQ_DEFAULT_INIT_FLAGS); in desc_set_defaults()
84 irqd_set(&desc->irq_data, IRQD_IRQ_DISABLED); in desc_set_defaults()
85 desc->handle_irq = handle_bad_irq; in desc_set_defaults()
86 desc->depth = 1; in desc_set_defaults()
87 desc->irq_count = 0; in desc_set_defaults()
88 desc->irqs_unhandled = 0; in desc_set_defaults()
89 desc->name = NULL; in desc_set_defaults()
90 desc->owner = owner; in desc_set_defaults()
92 *per_cpu_ptr(desc->kstat_irqs, cpu) = 0; in desc_set_defaults()
93 desc_smp_init(desc, node); in desc_set_defaults()
106 static void irq_insert_desc(unsigned int irq, struct irq_desc *desc) in irq_insert_desc() argument
108 radix_tree_insert(&irq_desc_tree, irq, desc); in irq_insert_desc()
123 static void free_masks(struct irq_desc *desc) in free_masks() argument
126 free_cpumask_var(desc->pending_mask); in free_masks()
128 free_cpumask_var(desc->irq_common_data.affinity); in free_masks()
131 static inline void free_masks(struct irq_desc *desc) { } in free_masks() argument
146 struct irq_desc *desc; in alloc_desc() local
149 desc = kzalloc_node(sizeof(*desc), gfp, node); in alloc_desc()
150 if (!desc) in alloc_desc()
153 desc->kstat_irqs = alloc_percpu(unsigned int); in alloc_desc()
154 if (!desc->kstat_irqs) in alloc_desc()
157 if (alloc_masks(desc, gfp, node)) in alloc_desc()
160 raw_spin_lock_init(&desc->lock); in alloc_desc()
161 lockdep_set_class(&desc->lock, &irq_desc_lock_class); in alloc_desc()
163 desc_set_defaults(irq, desc, node, owner); in alloc_desc()
165 return desc; in alloc_desc()
168 free_percpu(desc->kstat_irqs); in alloc_desc()
170 kfree(desc); in alloc_desc()
176 struct irq_desc *desc = irq_to_desc(irq); in free_desc() local
178 unregister_irq_proc(irq, desc); in free_desc()
190 free_masks(desc); in free_desc()
191 free_percpu(desc->kstat_irqs); in free_desc()
192 kfree(desc); in free_desc()
198 struct irq_desc *desc; in alloc_descs() local
202 desc = alloc_desc(start + i, node, owner); in alloc_descs()
203 if (!desc) in alloc_descs()
206 irq_insert_desc(start + i, desc); in alloc_descs()
232 struct irq_desc *desc; in early_irq_init() local
250 desc = alloc_desc(i, node, NULL); in early_irq_init()
252 irq_insert_desc(i, desc); in early_irq_init()
270 struct irq_desc *desc; in early_irq_init() local
276 desc = irq_desc; in early_irq_init()
280 desc[i].kstat_irqs = alloc_percpu(unsigned int); in early_irq_init()
281 alloc_masks(&desc[i], GFP_KERNEL, node); in early_irq_init()
282 raw_spin_lock_init(&desc[i].lock); in early_irq_init()
283 lockdep_set_class(&desc[i].lock, &irq_desc_lock_class); in early_irq_init()
284 desc_set_defaults(i, &desc[i], node, NULL); in early_irq_init()
297 struct irq_desc *desc = irq_to_desc(irq); in free_desc() local
300 raw_spin_lock_irqsave(&desc->lock, flags); in free_desc()
301 desc_set_defaults(irq, desc, irq_desc_get_node(desc), NULL); in free_desc()
302 raw_spin_unlock_irqrestore(&desc->lock, flags); in free_desc()
311 struct irq_desc *desc = irq_to_desc(start + i); in alloc_descs() local
313 desc->owner = owner; in alloc_descs()
346 struct irq_desc *desc = irq_to_desc(irq); in generic_handle_irq() local
348 if (!desc) in generic_handle_irq()
350 generic_handle_irq_desc(desc); in generic_handle_irq()
541 struct irq_desc *desc = irq_to_desc(irq); in __irq_get_desc_lock() local
543 if (desc) { in __irq_get_desc_lock()
546 !irq_settings_is_per_cpu_devid(desc)) in __irq_get_desc_lock()
550 irq_settings_is_per_cpu_devid(desc)) in __irq_get_desc_lock()
555 chip_bus_lock(desc); in __irq_get_desc_lock()
556 raw_spin_lock_irqsave(&desc->lock, *flags); in __irq_get_desc_lock()
558 return desc; in __irq_get_desc_lock()
561 void __irq_put_desc_unlock(struct irq_desc *desc, unsigned long flags, bool bus) in __irq_put_desc_unlock() argument
563 raw_spin_unlock_irqrestore(&desc->lock, flags); in __irq_put_desc_unlock()
565 chip_bus_sync_unlock(desc); in __irq_put_desc_unlock()
570 struct irq_desc *desc = irq_to_desc(irq); in irq_set_percpu_devid() local
572 if (!desc) in irq_set_percpu_devid()
575 if (desc->percpu_enabled) in irq_set_percpu_devid()
578 desc->percpu_enabled = kzalloc(sizeof(*desc->percpu_enabled), GFP_KERNEL); in irq_set_percpu_devid()
580 if (!desc->percpu_enabled) in irq_set_percpu_devid()
603 struct irq_desc *desc = irq_to_desc(irq); in kstat_irqs_cpu() local
605 return desc && desc->kstat_irqs ? in kstat_irqs_cpu()
606 *per_cpu_ptr(desc->kstat_irqs, cpu) : 0; in kstat_irqs_cpu()
619 struct irq_desc *desc = irq_to_desc(irq); in kstat_irqs() local
623 if (!desc || !desc->kstat_irqs) in kstat_irqs()
626 sum += *per_cpu_ptr(desc->kstat_irqs, cpu); in kstat_irqs()