]> git.pld-linux.org Git - packages/kernel.git/blob - linux-2.4.18-dmi-hall-of-shame.patch
- updated for 2.4.29
[packages/kernel.git] / linux-2.4.18-dmi-hall-of-shame.patch
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)
9 +                       use_apm_idle = 0;
10                 last_jiffies = jiffies;
11                 last_stime = current->times.tms_stime;
12         }
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
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                          
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;
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.056596 seconds and 3 git commands to generate.