Disable SW irqbalance/irqaffinity for E7520/E7320/E7525
PATCH 2/2 Disable SW irqbalance/irqaffinity for E7520/E7320/E7525
Add pci quirks to disable irq_balance/affinity for E7520/E7320/E7525 with revision ID 0x09 and below.
Signed-off-by Suresh Siddha <[email protected]>
arch/i386/kernel/io_apic.c +5 -1
@@ -570,6 +570,8 @@ }for ( ; ; ) { +if (irqbalance_disabled) +return 0 ;set_current_state (TASK_INTERRUPTIBLE ); time_remaining =schedule_timeout (time_remaining); if (time_after(jiffies,
@@ -636,7 +638,7 @@return 0 ; } -static int __init irqbalance_disable (char *str) +int __init irqbalance_disable (char *str) { irqbalance_disabled =1 ;return 0 ;
@@ -646,6 +648,8 @@static inline void move_irq (int irq) { +if (irqbalance_disabled) +return ;/* note - we hold the desc->lock */ if (unlikely (!cpus_empty (pending_irq_balance_cpumask[irq]))) {set_ioapic_affinity_irq (irq, pending_irq_balance_cpumask[irq]);
arch/i386/kernel/irq.c +4 -2
@@ -272,7 +272,7 @@static int noirqdebug; -static int __init noirqdebug_setup (char *str) +int __init noirqdebug_setup (char *str) { noirqdebug =1 ;printk ("IRQ lockup detection disabled\n" );
@@ -997,13 +997,15 @@return len; } +int no_irq_affinity; +static int irq_affinity_write_proc (struct file *file,const char __user *buffer,unsigned long count,void *data) {int irq = (long )data, full_count = count, err;cpumask_t new_value, tmp; -if (!irq_desc[irq].handler->set_affinity) +if (!irq_desc[irq].handler->set_affinity || no_irq_affinity)return -EIO ; err =cpumask_parse (buffer, count, new_value);
arch/x86_64/kernel/irq.c +3 -1
@@ -835,6 +835,8 @@return len; } +int no_irq_affinity; +static int irq_affinity_write_proc (struct file *file,const char __user *buffer,unsigned long count,void *data)
@@ -842,7 +844,7 @@int irq = (long ) data, full_count = count, err;cpumask_t tmp, new_value; -if (!irq_desc[irq].handler->set_affinity) +if (!irq_desc[irq].handler->set_affinity || no_irq_affinity)return -EIO ; err =cpumask_parse (buffer, count, new_value);
drivers/pci/quirks.c +50 -0
56 lines not on this page · raw message
include/linux/pci_ids.h +2 -0
@@ -2204,6 +2204,8 @@#define PCI_DEVICE_ID_INTEL_82855GM_HB 0x3580#define PCI_DEVICE_ID_INTEL_82855GM_IG 0x3582#define PCI_DEVICE_ID_INTEL_SMCH 0x3590 +#define PCI_DEVICE_ID_INTEL_E7320_MCH 0x3592 +#define PCI_DEVICE_ID_INTEL_E7525_MCH 0x359e#define PCI_DEVICE_ID_INTEL_80310 0x530d#define PCI_DEVICE_ID_INTEL_82371SB_0 0x7000#define PCI_DEVICE_ID_INTEL_82371SB_1 0x7010