예제 #1
0
파일: irqdesc.c 프로젝트: BozkurTR/kernel
// ARM10C 20141122
// irq: 16, flags: &flags, false, check: 0
// ARM10C 20141122
// irq: 16, flags: &flags, true, check: 0
struct irq_desc *
__irq_get_desc_lock(unsigned int irq, unsigned long *flags, bool bus,
		    unsigned int check)
{
	// irq: 16, irq_to_desc(16): kmem_cache#28-oX (irq 16)
	// irq: 16, irq_to_desc(16): kmem_cache#28-oX (irq 16)
	struct irq_desc *desc = irq_to_desc(irq);
	// desc: kmem_cache#28-oX (irq 16)
	// desc: kmem_cache#28-oX (irq 16)

	// desc: kmem_cache#28-oX (irq 16)
	// desc: kmem_cache#28-oX (irq 16)
	if (desc) {
		// check: 0, _IRQ_DESC_CHECK: 1
		// check: 0, _IRQ_DESC_CHECK: 1
		if (check & _IRQ_DESC_CHECK) {
			if ((check & _IRQ_DESC_PERCPU) &&
			    !irq_settings_is_per_cpu_devid(desc))
				return NULL;

			if (!(check & _IRQ_DESC_PERCPU) &&
			    irq_settings_is_per_cpu_devid(desc))
				return NULL;
		}

		// bus: false
		// bus: true
		if (bus)
			// desc: kmem_cache#28-oX (irq 16)
			chip_bus_lock(desc);

		// &desc->lock: &(kmem_cache#28-oX (irq 16))->lock, *flags: flags
		// &desc->lock: &(kmem_cache#28-oX (irq 16))->lock, *flags: flags
		raw_spin_lock_irqsave(&desc->lock, *flags);
		// &(kmem_cache#28-oX (irq 16))->lock을 사용하여 spinlock을 설정하고 cpsr을 flags에 저장
		// &(kmem_cache#28-oX (irq 16))->lock을 사용하여 spinlock을 설정하고 cpsr을 flags에 저장
	}

	// desc: kmem_cache#28-oX (irq 16)
	// desc: kmem_cache#28-oX (irq 16)
	return desc;
	// return kmem_cache#28-oX (irq 16)
	// return kmem_cache#28-oX (irq 16)
}
예제 #2
0
struct irq_desc *
__irq_get_desc_lock(unsigned int irq, unsigned long *flags, bool bus,
		    unsigned int check)
{
	struct irq_desc *desc = irq_to_desc(irq);

	if (desc) {
		if (check & _IRQ_DESC_CHECK) {
			if ((check & _IRQ_DESC_PERCPU) &&
			    !irq_settings_is_per_cpu_devid(desc))
				return NULL;

			if (!(check & _IRQ_DESC_PERCPU) &&
			    irq_settings_is_per_cpu_devid(desc))
				return NULL;
		}

		if (bus)
			chip_bus_lock(desc);
		raw_spin_lock_irqsave(&desc->lock, *flags);
	}
	return desc;
}
예제 #3
0
파일: irqdesc.c 프로젝트: avagin/linux
/**
 * kstat_irqs - Get the statistics for an interrupt
 * @irq:	The interrupt number
 *
 * Returns the sum of interrupt counts on all cpus since boot for
 * @irq. The caller must ensure that the interrupt is not removed
 * concurrently.
 */
unsigned int kstat_irqs(unsigned int irq)
{
	struct irq_desc *desc = irq_to_desc(irq);
	unsigned int sum = 0;
	int cpu;

	if (!desc || !desc->kstat_irqs)
		return 0;
	if (!irq_settings_is_per_cpu_devid(desc) &&
	    !irq_settings_is_per_cpu(desc))
	    return desc->tot_count;

	for_each_possible_cpu(cpu)
		sum += *per_cpu_ptr(desc->kstat_irqs, cpu);
	return sum;
}