]> git.pld-linux.org Git - packages/kernel.git/blame - linux-2.4.18-dmi-hall-of-shame.patch
- obsolete
[packages/kernel.git] / linux-2.4.18-dmi-hall-of-shame.patch
CommitLineData
399d59c9
JR
1diff -urNp linux-760/arch/i386/kernel/apm.c linux-850/arch/i386/kernel/apm.c
2--- linux-760/arch/i386/kernel/apm.c
3+++ linux-850/arch/i386/kernel/apm.c
4@@ -868,6 +868,8 @@ recalc:
5 idle_percentage *= 100;
6 idle_percentage /= jiffies_since_last_check;
7 use_apm_idle = (idle_percentage > idle_threshold);
8+ if (apm_info.forbid_idle)
9+ use_apm_idle = 0;
10 last_jiffies = jiffies;
11 last_stime = current->times.tms_stime;
12 }
13diff -urNp linux-760/arch/i386/kernel/dmi_scan.c linux-850/arch/i386/kernel/dmi_scan.c
14--- linux-760/arch/i386/kernel/dmi_scan.c
15+++ linux-850/arch/i386/kernel/dmi_scan.c
16@@ -303,6 +303,32 @@ static __init int apm_is_horked(struct d
17 return 0;
18 }
19
20+static __init int apm_is_horked_d850md(struct dmi_blacklist *d)
21+{
22+ if (apm_info.disabled == 0)
23+ {
24+ apm_info.disabled = 1;
25+ printk(KERN_ERR "%s machine detected. Disabling APM.\n", d->ident);
26+ printk(KERN_ERR "This bug is fixed in bios P15 which is available for \n");
27+ printk(KERN_ERR "download from support.intel.com \n");
28+ }
29+ return 0;
30+}
31+
32+/*
33+ * Some APM bioses hang on APM idle calls
34+ */
35+
36+static __init int apm_likes_to_melt(struct dmi_blacklist *d)
37+{
38+ if (apm_info.forbid_idle == 0)
39+ {
40+ apm_info.forbid_idle = 1;
41+ printk(KERN_INFO "%s machine detected. Disabling APM idle calls.\n", d->ident);
42+ }
43+ return 0;
44+}
45+
46 /*
47 * Some machines, usually laptops, can't handle an enabled local APIC.
48 * The symptoms include hangs or reboots when suspending or resuming,
49@@ -423,10 +449,10 @@ static __init int swab_apm_power_in_minu
50 extern int skip_ioapic_setup;
51 static __init int broken_pirq(struct dmi_blacklist *d)
52 {
53- printk(KERN_INFO " *** Possibly defective BIOS detected (irqtable)\n");
54- printk(KERN_INFO " *** Many BIOSes matching this signature have incorrect IRQ routing tables.\n");
55- printk(KERN_INFO " *** If you see IRQ problems, in paticular SCSI resets and hangs at boot\n");
56- printk(KERN_INFO " *** contact your hardware vendor and ask about updates.\n");
57+ printk(KERN_ERR " *** Possibly defective BIOS detected (irqtable)\n");
58+ printk(KERN_ERR " *** Many BIOSes matching this signature have incorrect IRQ routing tables.\n");
59+ printk(KERN_ERR " *** If you see IRQ problems, in particular SCSI resets and hangs at boot\n");
60+ printk(KERN_ERR " *** contact your hardware vendor and ask about updates.\n");
61 printk(KERN_INFO " *** Building an SMP kernel may evade the bug some of the time.\n");
62 #ifdef CONFIG_X86_IO_APIC
63 skip_ioapic_setup = 0;
64@@ -528,17 +554,47 @@ static __initdata struct dmi_blacklist d
65 MATCH(DMI_PRODUCT_NAME, "KT7-RAID"),
66 NO_MATCH, NO_MATCH, NO_MATCH
67 } },
68+ { disable_ide_dma, "Dell Inspiron 8100", { /* Kill DMA on Dell Inspiron 8100 laptops */
69+ MATCH(DMI_PRODUCT_NAME, "Inspiron 8100"),
70+ MATCH(DMI_SYS_VENDOR,"Dell Computer Corporation"), NO_MATCH, NO_MATCH
71+ } },
72+
73 #endif
74+ /* Dell Laptop hall of shame */
75 { broken_ps2_resume, "Dell Latitude C600", { /* Handle problems with APM on the C600 */
76 MATCH(DMI_SYS_VENDOR, "Dell"),
77 MATCH(DMI_PRODUCT_NAME, "Latitude C600"),
78 NO_MATCH, NO_MATCH
79 } },
80+ { apm_is_horked, "Dell Inspiron 2500", { /* APM crashes */
81+ MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
82+ MATCH(DMI_PRODUCT_NAME, "Inspiron 2500"),
83+ MATCH(DMI_BIOS_VENDOR,"Phoenix Technologies LTD"),
84+ MATCH(DMI_BIOS_VERSION,"A11")
85+ } },
86+ { apm_is_horked, "Dell Dimension 4100", { /* APM crashes */
87+ MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
88+ MATCH(DMI_PRODUCT_NAME, "XPS-Z"),
89+ MATCH(DMI_BIOS_VENDOR,"Intel Corp."),
90+ MATCH(DMI_BIOS_VERSION,"A11")
91+ } },
92+ { set_apm_ints, "Dell Inspiron", { /* Allow interrupts during suspend on Dell Inspiron laptops*/
93+ MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
94+ MATCH(DMI_PRODUCT_NAME, "Inspiron 4000"),
95+ NO_MATCH, NO_MATCH
96+ } },
97+ { set_apm_ints, "Dell Latitude", { /* Allow interrupts during suspend on Dell Latitude laptops*/
98+ MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
99+ MATCH(DMI_PRODUCT_NAME, "Latitude C510"),
100+ NO_MATCH, NO_MATCH
101+ } },
102 { broken_apm_power, "Dell Inspiron 5000e", { /* Handle problems with APM on Inspiron 5000e */
103 MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"),
104 MATCH(DMI_BIOS_VERSION, "A04"),
105 MATCH(DMI_BIOS_DATE, "08/24/2000"), NO_MATCH
106 } },
107+
108+ /* other items */
109 { broken_apm_power, "Dell Inspiron 2500", { /* Handle problems with APM on Inspiron 2500 */
110 MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"),
111 MATCH(DMI_BIOS_VERSION, "A12"),
112@@ -559,16 +615,11 @@ static __initdata struct dmi_blacklist d
113 MATCH(DMI_PRODUCT_NAME, "PowerEdge 300/"),
114 NO_MATCH, NO_MATCH
115 } },
116- { set_bios_reboot, "Dell PowerEdge 2400", { /* Handle problems with rebooting on Dell 300/800's */
117+ { set_bios_reboot, "Dell PowerEdge 2400", { /* Handle problems with rebooting on Dell 2400's */
118 MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
119 MATCH(DMI_PRODUCT_NAME, "PowerEdge 2400"),
120 NO_MATCH, NO_MATCH
121 } },
122- { set_apm_ints, "Dell Inspiron", { /* Allow interrupts during suspend on Dell Inspiron laptops*/
123- MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
124- MATCH(DMI_PRODUCT_NAME, "Inspiron 4000"),
125- NO_MATCH, NO_MATCH
126- } },
127 { set_apm_ints, "Compaq 12XL125", { /* Allow interrupts during suspend on Compaq Laptops*/
128 MATCH(DMI_SYS_VENDOR, "Compaq"),
129 MATCH(DMI_PRODUCT_NAME, "Compaq PC"),
130@@ -590,7 +641,7 @@ static __initdata struct dmi_blacklist d
131 MATCH(DMI_BIOS_VERSION, "Version1.01"),
132 NO_MATCH, NO_MATCH,
133 } },
134- { apm_is_horked, "Intel D850MD", { /* APM crashes */
135+ { apm_is_horked_d850md, "Intel D850MD", { /* APM crashes */
136 MATCH(DMI_BIOS_VENDOR, "Intel Corp."),
137 MATCH(DMI_BIOS_VERSION, "MV85010A.86A.0016.P07.0201251536"),
138 NO_MATCH, NO_MATCH,
139@@ -613,6 +664,12 @@ static __initdata struct dmi_blacklist d
140 MATCH(DMI_BIOS_VENDOR,"Phoenix Technologies LTD"),
141 MATCH(DMI_BIOS_VERSION,"A11")
142 } },
143+ { apm_likes_to_melt, "Jabil AMD", { /* APM idle hangs */
144+ MATCH(DMI_BIOS_VENDOR, "American Megatrends Inc."),
145+ MATCH(DMI_BIOS_VERSION, "0AASNP06"),
146+ NO_MATCH, NO_MATCH,
147+ } },
148+
149 { sony_vaio_laptop, "Sony Vaio", { /* This is a Sony Vaio laptop */
150 MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
151 MATCH(DMI_PRODUCT_NAME, "PCG-"),
152@@ -734,22 +791,32 @@ static __initdata struct dmi_blacklist d
153 } },
154 { broken_pirq, "l44GX Bios", { /* Bad $PIR */
155 MATCH(DMI_BIOS_VENDOR, "Intel Corporation"),
156+ MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0066.P07"),
157+ NO_MATCH, NO_MATCH
158+ } },
159+ { broken_pirq, "IBM xseries 370", { /* Bad $PIR */
160+ MATCH(DMI_BIOS_VENDOR, "IBM"),
161+ MATCH(DMI_BIOS_VERSION,"MMKT33AUS"),
162+ NO_MATCH, NO_MATCH
163+ } },
164+ { broken_pirq, "l44GX Bios", { /* Bad $PIR */
165+ MATCH(DMI_BIOS_VENDOR, "Intel Corporation"),
166 MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0094.P10"),
167 NO_MATCH, NO_MATCH
168 } },
169 { broken_pirq, "l44GX Bios", { /* Bad $PIR */
170 MATCH(DMI_BIOS_VENDOR, "Intel Corporation"),
171- MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0120.P12"),
172+ MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0115.P12"),
173 NO_MATCH, NO_MATCH
174 } },
175- { broken_pirq, "l44GX Bios", { /* Bad $PIR */
176+ { broken_pirq, "l44GX Bios", { /* Bad $PIR */
177 MATCH(DMI_BIOS_VENDOR, "Intel Corporation"),
178- MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0125.P13"),
179+ MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0120.P12"),
180 NO_MATCH, NO_MATCH
181- } },
182+ } },
183 { broken_pirq, "l44GX Bios", { /* Bad $PIR */
184 MATCH(DMI_BIOS_VENDOR, "Intel Corporation"),
185- MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0066.P07.9906041405"),
186+ MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0125.P13"),
187 NO_MATCH, NO_MATCH
188 } },
189
190diff -urNp linux-760/include/linux/apm_bios.h linux-850/include/linux/apm_bios.h
191--- linux-760/include/linux/apm_bios.h 2001-08-14 01:39:28.000000000 +0200
192+++ linux-850/include/linux/apm_bios.h
193@@ -54,6 +54,7 @@ struct apm_info {
194 int get_power_status_broken;
195 int get_power_status_swabinminutes;
196 int allow_ints;
197+ int forbid_idle;
198 int realmode_power_off;
199 int disabled;
200 };
201--- linux-2.4.20/arch/i386/kernel/dmi_scan.c~ 2003-02-06 14:34:13.000000000 +0100
202+++ linux-2.4.20/arch/i386/kernel/dmi_scan.c 2003-02-06 14:34:13.000000000 +0100
203@@ -692,6 +692,11 @@
204 MATCH(DMI_BIOS_VERSION, "0AASNP06"),
205 NO_MATCH, NO_MATCH,
206 } },
207+ { apm_likes_to_melt, "AMI Bios", { /* APM idle hangs */
208+ MATCH(DMI_BIOS_VENDOR, "American Megatrends Inc."),
209+ MATCH(DMI_BIOS_VERSION, "0AASNP05"),
210+ NO_MATCH, NO_MATCH,
211+ } },
212
213 { sony_vaio_laptop, "Sony Vaio", { /* This is a Sony Vaio laptop */
214 MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
This page took 0.265019 seconds and 4 git commands to generate.