1 diff -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)
10 last_jiffies = jiffies;
11 last_stime = current->times.tms_stime;
13 diff -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
20 +static __init int apm_is_horked_d850md(struct dmi_blacklist *d)
22 + if (apm_info.disabled == 0)
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");
33 + * Some APM bioses hang on APM idle calls
36 +static __init int apm_likes_to_melt(struct dmi_blacklist *d)
38 + if (apm_info.forbid_idle == 0)
40 + apm_info.forbid_idle = 1;
41 + printk(KERN_INFO "%s machine detected. Disabling APM idle calls.\n", d->ident);
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)
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
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
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"),
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")
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")
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"),
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"),
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
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/"),
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"),
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"),
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"),
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"),
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")
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,
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
154 { broken_pirq, "l44GX Bios", { /* Bad $PIR */
155 MATCH(DMI_BIOS_VENDOR, "Intel Corporation"),
156 + MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0066.P07"),
159 + { broken_pirq, "IBM xseries 370", { /* Bad $PIR */
160 + MATCH(DMI_BIOS_VENDOR, "IBM"),
161 + MATCH(DMI_BIOS_VERSION,"MMKT33AUS"),
164 + { broken_pirq, "l44GX Bios", { /* Bad $PIR */
165 + MATCH(DMI_BIOS_VENDOR, "Intel Corporation"),
166 MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0094.P10"),
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"),
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"),
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"),
190 diff -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;
198 int realmode_power_off;
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
204 MATCH(DMI_BIOS_VERSION, "0AASNP06"),
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,
213 { sony_vaio_laptop, "Sony Vaio", { /* This is a Sony Vaio laptop */
214 MATCH(DMI_SYS_VENDOR, "Sony Corporation"),