# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID ca90d2903b7b31506430cfb10653cad1c374bd74
# Parent 57dfd651cca4506860ece03f858860b80d1fe9b3
Auto-disable IRQ balancing/affinity on buggy chipsets.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
diff -r 57dfd651cca4 -r ca90d2903b7b
linux-2.6-xen-sparse/arch/xen/i386/kernel/Makefile
--- a/linux-2.6-xen-sparse/arch/xen/i386/kernel/Makefile Thu Jul 14
10:37:49 2005
+++ b/linux-2.6-xen-sparse/arch/xen/i386/kernel/Makefile Thu Jul 14
11:09:21 2005
@@ -10,12 +10,12 @@
obj-y := process.o signal.o entry.o traps.o \
time.o ioport.o ldt.o setup.o \
- pci-dma.o i386_ksyms.o irq.o
+ pci-dma.o i386_ksyms.o irq.o quirks.o
c-obj-y := semaphore.o vm86.o \
ptrace.o sys_i386.o \
i387.o dmi_scan.o bootflag.o \
- doublefault.o quirks.o
+ doublefault.o
s-obj-y :=
obj-y += cpu/
diff -r 57dfd651cca4 -r ca90d2903b7b xen/arch/x86/irq.c
--- a/xen/arch/x86/irq.c Thu Jul 14 10:37:49 2005
+++ b/xen/arch/x86/irq.c Thu Jul 14 11:09:21 2005
@@ -16,7 +16,7 @@
#include <asm/smpboot.h>
/* opt_noirqbalance: If true, software IRQ balancing/affinity is disabled. */
-static int opt_noirqbalance = 0;
+int opt_noirqbalance = 0;
boolean_param("noirqbalance", opt_noirqbalance);
irq_desc_t irq_desc[NR_IRQS];
diff -r 57dfd651cca4 -r ca90d2903b7b xen/arch/x86/dom0_ops.c
--- a/xen/arch/x86/dom0_ops.c Thu Jul 14 10:37:49 2005
+++ b/xen/arch/x86/dom0_ops.c Thu Jul 14 11:09:21 2005
@@ -18,6 +18,7 @@
#include <xen/trace.h>
#include <xen/console.h>
#include <asm/shadow.h>
+#include <asm/irq.h>
#include <public/sched_ctl.h>
#include <asm/mtrr.h>
@@ -371,6 +372,23 @@
}
break;
+ case DOM0_PLATFORM_QUIRK:
+ {
+ extern int opt_noirqbalance;
+ switch ( op->u.platform_quirk.quirk_id )
+ {
+ case QUIRK_NOIRQBALANCING:
+ printk("Platform quirk -- Disabling IRQ balancing/affinity.\n");
+ opt_noirqbalance = 1;
+ setup_ioapic_dest();
+ break;
+ default:
+ ret = -EINVAL;
+ break;
+ }
+ }
+ break;
+
default:
ret = -ENOSYS;
diff -r 57dfd651cca4 -r ca90d2903b7b xen/include/public/dom0_ops.h
--- a/xen/include/public/dom0_ops.h Thu Jul 14 10:37:49 2005
+++ b/xen/include/public/dom0_ops.h Thu Jul 14 11:09:21 2005
@@ -357,7 +357,7 @@
u64 cpu_time;
} dom0_getvcpucontext_t;
-#define DOM0_GETDOMAININFOLIST 38
+#define DOM0_GETDOMAININFOLIST 38
typedef struct {
/* IN variables. */
domid_t first_domain;
@@ -366,6 +366,13 @@
/* OUT variables. */
memory_t num_domains;
} dom0_getdomaininfolist_t;
+
+#define DOM0_PLATFORM_QUIRK 39
+#define QUIRK_NOIRQBALANCING 1
+typedef struct {
+ /* IN variables. */
+ int quirk_id;
+} dom0_platform_quirk_t;
typedef struct {
u32 cmd;
@@ -400,6 +407,7 @@
dom0_ioport_permission_t ioport_permission;
dom0_getvcpucontext_t getvcpucontext;
dom0_getdomaininfolist_t getdomaininfolist;
+ dom0_platform_quirk_t platform_quirk;
} u;
} dom0_op_t;
diff -r 57dfd651cca4 -r ca90d2903b7b
linux-2.6-xen-sparse/arch/xen/x86_64/kernel/Makefile
--- a/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/Makefile Thu Jul 14
10:37:49 2005
+++ b/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/Makefile Thu Jul 14
11:09:21 2005
@@ -51,7 +51,7 @@
swiotlb-$(CONFIG_SWIOTLB) += ../../../ia64/lib/swiotlb.o
microcode-$(subst m,y,$(CONFIG_MICROCODE)) += ../../../i386/kernel/microcode.o
intel_cacheinfo-y += ../../../i386/kernel/cpu/intel_cacheinfo.o
-quirks-y += ../../../i386/kernel/quirks.o
+quirks-y += ../../i386/kernel/quirks.o
c-link := init_task.o
s-link := vsyscall.o
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|