mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: pci/intr_remapping: Allocate irq_iommu on node irq: Add irq_node() primitive irq: Make sure irq_desc for legacy irq get correct node setting genirq: Add prototype for handle_nested_irq() irq: Remove superfluous NULL pointer check in check_irq_resend() irq: Clean up by removing irqfixup MODULE_PARM_DESC() genirq: Fix comment describing suspend_device_irqs() genirq: Remove obsolete defines and typedefs
This commit is contained in:
commit
12a499612e
@ -394,15 +394,6 @@ Who: Thomas Gleixner <tglx@linutronix.de>
|
|||||||
|
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
What: obsolete generic irq defines and typedefs
|
|
||||||
When: 2.6.30
|
|
||||||
Why: The defines and typedefs (hw_interrupt_type, no_irq_type, irq_desc_t)
|
|
||||||
have been kept around for migration reasons. After more than two years
|
|
||||||
it's time to remove them finally
|
|
||||||
Who: Thomas Gleixner <tglx@linutronix.de>
|
|
||||||
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
What: fakephp and associated sysfs files in /sys/bus/pci/slots/
|
What: fakephp and associated sysfs files in /sys/bus/pci/slots/
|
||||||
When: 2011
|
When: 2011
|
||||||
Why: In 2.6.27, the semantics of /sys/bus/pci/slots was redefined to
|
Why: In 2.6.27, the semantics of /sys/bus/pci/slots was redefined to
|
||||||
|
@ -55,15 +55,12 @@ static struct irq_2_iommu *irq_2_iommu(unsigned int irq)
|
|||||||
return desc->irq_2_iommu;
|
return desc->irq_2_iommu;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct irq_2_iommu *irq_2_iommu_alloc_node(unsigned int irq, int node)
|
static struct irq_2_iommu *irq_2_iommu_alloc(unsigned int irq)
|
||||||
{
|
{
|
||||||
struct irq_desc *desc;
|
struct irq_desc *desc;
|
||||||
struct irq_2_iommu *irq_iommu;
|
struct irq_2_iommu *irq_iommu;
|
||||||
|
|
||||||
/*
|
desc = irq_to_desc(irq);
|
||||||
* alloc irq desc if not allocated already.
|
|
||||||
*/
|
|
||||||
desc = irq_to_desc_alloc_node(irq, node);
|
|
||||||
if (!desc) {
|
if (!desc) {
|
||||||
printk(KERN_INFO "can not get irq_desc for %d\n", irq);
|
printk(KERN_INFO "can not get irq_desc for %d\n", irq);
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -72,16 +69,11 @@ static struct irq_2_iommu *irq_2_iommu_alloc_node(unsigned int irq, int node)
|
|||||||
irq_iommu = desc->irq_2_iommu;
|
irq_iommu = desc->irq_2_iommu;
|
||||||
|
|
||||||
if (!irq_iommu)
|
if (!irq_iommu)
|
||||||
desc->irq_2_iommu = get_one_free_irq_2_iommu(node);
|
desc->irq_2_iommu = get_one_free_irq_2_iommu(irq_node(irq));
|
||||||
|
|
||||||
return desc->irq_2_iommu;
|
return desc->irq_2_iommu;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct irq_2_iommu *irq_2_iommu_alloc(unsigned int irq)
|
|
||||||
{
|
|
||||||
return irq_2_iommu_alloc_node(irq, cpu_to_node(boot_cpu_id));
|
|
||||||
}
|
|
||||||
|
|
||||||
#else /* !CONFIG_SPARSE_IRQ */
|
#else /* !CONFIG_SPARSE_IRQ */
|
||||||
|
|
||||||
static struct irq_2_iommu irq_2_iommuX[NR_IRQS];
|
static struct irq_2_iommu irq_2_iommuX[NR_IRQS];
|
||||||
|
@ -219,13 +219,6 @@ static inline struct irq_desc *move_irq_desc(struct irq_desc *desc, int node)
|
|||||||
|
|
||||||
extern struct irq_desc *irq_to_desc_alloc_node(unsigned int irq, int node);
|
extern struct irq_desc *irq_to_desc_alloc_node(unsigned int irq, int node);
|
||||||
|
|
||||||
/*
|
|
||||||
* Migration helpers for obsolete names, they will go away:
|
|
||||||
*/
|
|
||||||
#define hw_interrupt_type irq_chip
|
|
||||||
#define no_irq_type no_irq_chip
|
|
||||||
typedef struct irq_desc irq_desc_t;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Pick up the arch-dependent methods:
|
* Pick up the arch-dependent methods:
|
||||||
*/
|
*/
|
||||||
@ -289,6 +282,7 @@ extern void handle_edge_irq(unsigned int irq, struct irq_desc *desc);
|
|||||||
extern void handle_simple_irq(unsigned int irq, struct irq_desc *desc);
|
extern void handle_simple_irq(unsigned int irq, struct irq_desc *desc);
|
||||||
extern void handle_percpu_irq(unsigned int irq, struct irq_desc *desc);
|
extern void handle_percpu_irq(unsigned int irq, struct irq_desc *desc);
|
||||||
extern void handle_bad_irq(unsigned int irq, struct irq_desc *desc);
|
extern void handle_bad_irq(unsigned int irq, struct irq_desc *desc);
|
||||||
|
extern void handle_nested_irq(unsigned int irq);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Monolithic do_IRQ implementation.
|
* Monolithic do_IRQ implementation.
|
||||||
|
@ -41,6 +41,12 @@ extern struct irq_desc *irq_to_desc(unsigned int irq);
|
|||||||
; \
|
; \
|
||||||
else
|
else
|
||||||
|
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
#define irq_node(irq) (irq_to_desc(irq)->node)
|
||||||
|
#else
|
||||||
|
#define irq_node(irq) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* CONFIG_GENERIC_HARDIRQS */
|
#endif /* CONFIG_GENERIC_HARDIRQS */
|
||||||
|
|
||||||
#define for_each_irq_nr(irq) \
|
#define for_each_irq_nr(irq) \
|
||||||
|
@ -161,7 +161,7 @@ int __init early_irq_init(void)
|
|||||||
|
|
||||||
desc = irq_desc_legacy;
|
desc = irq_desc_legacy;
|
||||||
legacy_count = ARRAY_SIZE(irq_desc_legacy);
|
legacy_count = ARRAY_SIZE(irq_desc_legacy);
|
||||||
node = first_online_node;
|
node = first_online_node;
|
||||||
|
|
||||||
/* allocate irq_desc_ptrs array based on nr_irqs */
|
/* allocate irq_desc_ptrs array based on nr_irqs */
|
||||||
irq_desc_ptrs = kcalloc(nr_irqs, sizeof(void *), GFP_NOWAIT);
|
irq_desc_ptrs = kcalloc(nr_irqs, sizeof(void *), GFP_NOWAIT);
|
||||||
@ -172,6 +172,9 @@ int __init early_irq_init(void)
|
|||||||
|
|
||||||
for (i = 0; i < legacy_count; i++) {
|
for (i = 0; i < legacy_count; i++) {
|
||||||
desc[i].irq = i;
|
desc[i].irq = i;
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
desc[i].node = node;
|
||||||
|
#endif
|
||||||
desc[i].kstat_irqs = kstat_irqs_legacy + i * nr_cpu_ids;
|
desc[i].kstat_irqs = kstat_irqs_legacy + i * nr_cpu_ids;
|
||||||
lockdep_set_class(&desc[i].lock, &irq_desc_lock_class);
|
lockdep_set_class(&desc[i].lock, &irq_desc_lock_class);
|
||||||
alloc_desc_masks(&desc[i], node, true);
|
alloc_desc_masks(&desc[i], node, true);
|
||||||
|
@ -15,10 +15,10 @@
|
|||||||
/**
|
/**
|
||||||
* suspend_device_irqs - disable all currently enabled interrupt lines
|
* suspend_device_irqs - disable all currently enabled interrupt lines
|
||||||
*
|
*
|
||||||
* During system-wide suspend or hibernation device interrupts need to be
|
* During system-wide suspend or hibernation device drivers need to be prevented
|
||||||
* disabled at the chip level and this function is provided for this purpose.
|
* from receiving interrupts and this function is provided for this purpose.
|
||||||
* It disables all interrupt lines that are enabled at the moment and sets the
|
* It marks all interrupt lines in use, except for the timer ones, as disabled
|
||||||
* IRQ_SUSPENDED flag for them.
|
* and sets the IRQ_SUSPENDED flag for each of them.
|
||||||
*/
|
*/
|
||||||
void suspend_device_irqs(void)
|
void suspend_device_irqs(void)
|
||||||
{
|
{
|
||||||
|
@ -70,8 +70,7 @@ void check_irq_resend(struct irq_desc *desc, unsigned int irq)
|
|||||||
if ((status & (IRQ_LEVEL | IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) {
|
if ((status & (IRQ_LEVEL | IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) {
|
||||||
desc->status = (status & ~IRQ_PENDING) | IRQ_REPLAY;
|
desc->status = (status & ~IRQ_PENDING) | IRQ_REPLAY;
|
||||||
|
|
||||||
if (!desc->chip || !desc->chip->retrigger ||
|
if (!desc->chip->retrigger || !desc->chip->retrigger(irq)) {
|
||||||
!desc->chip->retrigger(irq)) {
|
|
||||||
#ifdef CONFIG_HARDIRQS_SW_RESEND
|
#ifdef CONFIG_HARDIRQS_SW_RESEND
|
||||||
/* Set it pending and activate the softirq: */
|
/* Set it pending and activate the softirq: */
|
||||||
set_bit(irq, irqs_resend);
|
set_bit(irq, irqs_resend);
|
||||||
|
@ -297,7 +297,6 @@ static int __init irqfixup_setup(char *str)
|
|||||||
|
|
||||||
__setup("irqfixup", irqfixup_setup);
|
__setup("irqfixup", irqfixup_setup);
|
||||||
module_param(irqfixup, int, 0644);
|
module_param(irqfixup, int, 0644);
|
||||||
MODULE_PARM_DESC("irqfixup", "0: No fixup, 1: irqfixup mode, 2: irqpoll mode");
|
|
||||||
|
|
||||||
static int __init irqpoll_setup(char *str)
|
static int __init irqpoll_setup(char *str)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user