1 |
Author: mpagano |
2 |
Date: 2008-06-23 19:48:07 +0000 (Mon, 23 Jun 2008) |
3 |
New Revision: 1323 |
4 |
|
5 |
Added: |
6 |
genpatches-2.6/trunk/2.6.25/1007_linux-2.6.25.8.patch |
7 |
Modified: |
8 |
genpatches-2.6/trunk/2.6.25/0000_README |
9 |
Log: |
10 |
Linux 2.6.25.8 |
11 |
|
12 |
Modified: genpatches-2.6/trunk/2.6.25/0000_README |
13 |
=================================================================== |
14 |
--- genpatches-2.6/trunk/2.6.25/0000_README 2008-06-17 13:19:43 UTC (rev 1322) |
15 |
+++ genpatches-2.6/trunk/2.6.25/0000_README 2008-06-23 19:48:07 UTC (rev 1323) |
16 |
@@ -67,6 +67,10 @@ |
17 |
From: http://www.kernel.org |
18 |
Desc: Linux 2.6.25.7 |
19 |
|
20 |
+Patch: 1007_linux-2.6.25.8.patch |
21 |
+From: http://www.kernel.org |
22 |
+Desc: Linux 2.6.25.8 |
23 |
+ |
24 |
Patch: 2705_alsa-hda-fujitsu.patch |
25 |
From: Tony Vroon <chainsaw@g.o> |
26 |
Desc: Fix docking station headphone port and PC speaker for Fujitsu ALC262 |
27 |
|
28 |
Added: genpatches-2.6/trunk/2.6.25/1007_linux-2.6.25.8.patch |
29 |
=================================================================== |
30 |
--- genpatches-2.6/trunk/2.6.25/1007_linux-2.6.25.8.patch (rev 0) |
31 |
+++ genpatches-2.6/trunk/2.6.25/1007_linux-2.6.25.8.patch 2008-06-23 19:48:07 UTC (rev 1323) |
32 |
@@ -0,0 +1,495 @@ |
33 |
+diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c |
34 |
+index c8890b8..39b1b7e 100644 |
35 |
+--- a/arch/x86/kernel/process_32.c |
36 |
++++ b/arch/x86/kernel/process_32.c |
37 |
+@@ -259,12 +259,31 @@ static void mwait_idle(void) |
38 |
+ mwait_idle_with_hints(0, 0); |
39 |
+ } |
40 |
+ |
41 |
++/* |
42 |
++ * mwait selection logic: |
43 |
++ * |
44 |
++ * It depends on the CPU. For AMD CPUs that support MWAIT this is |
45 |
++ * wrong. Family 0x10 and 0x11 CPUs will enter C1 on HLT. Powersavings |
46 |
++ * then depend on a clock divisor and current Pstate of the core. If |
47 |
++ * all cores of a processor are in halt state (C1) the processor can |
48 |
++ * enter the C1E (C1 enhanced) state. If mwait is used this will never |
49 |
++ * happen. |
50 |
++ * |
51 |
++ * idle=mwait overrides this decision and forces the usage of mwait. |
52 |
++ */ |
53 |
+ static int __cpuinit mwait_usable(const struct cpuinfo_x86 *c) |
54 |
+ { |
55 |
+ if (force_mwait) |
56 |
+ return 1; |
57 |
+- /* Any C1 states supported? */ |
58 |
+- return c->cpuid_level >= 5 && ((cpuid_edx(5) >> 4) & 0xf) > 0; |
59 |
++ |
60 |
++ if (c->x86_vendor == X86_VENDOR_AMD) { |
61 |
++ switch(c->x86) { |
62 |
++ case 0x10: |
63 |
++ case 0x11: |
64 |
++ return 0; |
65 |
++ } |
66 |
++ } |
67 |
++ return 1; |
68 |
+ } |
69 |
+ |
70 |
+ void __cpuinit select_idle_routine(const struct cpuinfo_x86 *c) |
71 |
+diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c |
72 |
+index 1316f1c..53b9c4c 100644 |
73 |
+--- a/arch/x86/kernel/process_64.c |
74 |
++++ b/arch/x86/kernel/process_64.c |
75 |
+@@ -254,13 +254,31 @@ static void mwait_idle(void) |
76 |
+ } |
77 |
+ } |
78 |
+ |
79 |
+- |
80 |
++/* |
81 |
++ * mwait selection logic: |
82 |
++ * |
83 |
++ * It depends on the CPU. For AMD CPUs that support MWAIT this is |
84 |
++ * wrong. Family 0x10 and 0x11 CPUs will enter C1 on HLT. Powersavings |
85 |
++ * then depend on a clock divisor and current Pstate of the core. If |
86 |
++ * all cores of a processor are in halt state (C1) the processor can |
87 |
++ * enter the C1E (C1 enhanced) state. If mwait is used this will never |
88 |
++ * happen. |
89 |
++ * |
90 |
++ * idle=mwait overrides this decision and forces the usage of mwait. |
91 |
++ */ |
92 |
+ static int __cpuinit mwait_usable(const struct cpuinfo_x86 *c) |
93 |
+ { |
94 |
+ if (force_mwait) |
95 |
+ return 1; |
96 |
+- /* Any C1 states supported? */ |
97 |
+- return c->cpuid_level >= 5 && ((cpuid_edx(5) >> 4) & 0xf) > 0; |
98 |
++ |
99 |
++ if (c->x86_vendor == X86_VENDOR_AMD) { |
100 |
++ switch(c->x86) { |
101 |
++ case 0x10: |
102 |
++ case 0x11: |
103 |
++ return 0; |
104 |
++ } |
105 |
++ } |
106 |
++ return 1; |
107 |
+ } |
108 |
+ |
109 |
+ void __cpuinit select_idle_routine(const struct cpuinfo_x86 *c) |
110 |
+diff --git a/arch/x86/lib/copy_user_64.S b/arch/x86/lib/copy_user_64.S |
111 |
+index 70bebd3..ee1c3f6 100644 |
112 |
+--- a/arch/x86/lib/copy_user_64.S |
113 |
++++ b/arch/x86/lib/copy_user_64.S |
114 |
+@@ -217,19 +217,19 @@ ENTRY(copy_user_generic_unrolled) |
115 |
+ /* table sorted by exception address */ |
116 |
+ .section __ex_table,"a" |
117 |
+ .align 8 |
118 |
+- .quad .Ls1,.Ls1e |
119 |
+- .quad .Ls2,.Ls2e |
120 |
+- .quad .Ls3,.Ls3e |
121 |
+- .quad .Ls4,.Ls4e |
122 |
+- .quad .Ld1,.Ls1e |
123 |
++ .quad .Ls1,.Ls1e /* Ls1-Ls4 have copied zero bytes */ |
124 |
++ .quad .Ls2,.Ls1e |
125 |
++ .quad .Ls3,.Ls1e |
126 |
++ .quad .Ls4,.Ls1e |
127 |
++ .quad .Ld1,.Ls1e /* Ld1-Ld4 have copied 0-24 bytes */ |
128 |
+ .quad .Ld2,.Ls2e |
129 |
+ .quad .Ld3,.Ls3e |
130 |
+ .quad .Ld4,.Ls4e |
131 |
+- .quad .Ls5,.Ls5e |
132 |
+- .quad .Ls6,.Ls6e |
133 |
+- .quad .Ls7,.Ls7e |
134 |
+- .quad .Ls8,.Ls8e |
135 |
+- .quad .Ld5,.Ls5e |
136 |
++ .quad .Ls5,.Ls5e /* Ls5-Ls8 have copied 32 bytes */ |
137 |
++ .quad .Ls6,.Ls5e |
138 |
++ .quad .Ls7,.Ls5e |
139 |
++ .quad .Ls8,.Ls5e |
140 |
++ .quad .Ld5,.Ls5e /* Ld5-Ld8 have copied 32-56 bytes */ |
141 |
+ .quad .Ld6,.Ls6e |
142 |
+ .quad .Ld7,.Ls7e |
143 |
+ .quad .Ld8,.Ls8e |
144 |
+@@ -244,11 +244,8 @@ ENTRY(copy_user_generic_unrolled) |
145 |
+ .quad .Le5,.Le_zero |
146 |
+ .previous |
147 |
+ |
148 |
+- /* compute 64-offset for main loop. 8 bytes accuracy with error on the |
149 |
+- pessimistic side. this is gross. it would be better to fix the |
150 |
+- interface. */ |
151 |
+ /* eax: zero, ebx: 64 */ |
152 |
+-.Ls1e: addl $8,%eax |
153 |
++.Ls1e: addl $8,%eax /* eax is bytes left uncopied within the loop (Ls1e: 64 .. Ls8e: 8) */ |
154 |
+ .Ls2e: addl $8,%eax |
155 |
+ .Ls3e: addl $8,%eax |
156 |
+ .Ls4e: addl $8,%eax |
157 |
+diff --git a/arch/x86/lib/copy_user_nocache_64.S b/arch/x86/lib/copy_user_nocache_64.S |
158 |
+index 5196762..9d3d1ab 100644 |
159 |
+--- a/arch/x86/lib/copy_user_nocache_64.S |
160 |
++++ b/arch/x86/lib/copy_user_nocache_64.S |
161 |
+@@ -145,19 +145,19 @@ ENTRY(__copy_user_nocache) |
162 |
+ /* table sorted by exception address */ |
163 |
+ .section __ex_table,"a" |
164 |
+ .align 8 |
165 |
+- .quad .Ls1,.Ls1e |
166 |
+- .quad .Ls2,.Ls2e |
167 |
+- .quad .Ls3,.Ls3e |
168 |
+- .quad .Ls4,.Ls4e |
169 |
+- .quad .Ld1,.Ls1e |
170 |
++ .quad .Ls1,.Ls1e /* .Ls[1-4] - 0 bytes copied */ |
171 |
++ .quad .Ls2,.Ls1e |
172 |
++ .quad .Ls3,.Ls1e |
173 |
++ .quad .Ls4,.Ls1e |
174 |
++ .quad .Ld1,.Ls1e /* .Ld[1-4] - 0..24 bytes coped */ |
175 |
+ .quad .Ld2,.Ls2e |
176 |
+ .quad .Ld3,.Ls3e |
177 |
+ .quad .Ld4,.Ls4e |
178 |
+- .quad .Ls5,.Ls5e |
179 |
+- .quad .Ls6,.Ls6e |
180 |
+- .quad .Ls7,.Ls7e |
181 |
+- .quad .Ls8,.Ls8e |
182 |
+- .quad .Ld5,.Ls5e |
183 |
++ .quad .Ls5,.Ls5e /* .Ls[5-8] - 32 bytes copied */ |
184 |
++ .quad .Ls6,.Ls5e |
185 |
++ .quad .Ls7,.Ls5e |
186 |
++ .quad .Ls8,.Ls5e |
187 |
++ .quad .Ld5,.Ls5e /* .Ld[5-8] - 32..56 bytes copied */ |
188 |
+ .quad .Ld6,.Ls6e |
189 |
+ .quad .Ld7,.Ls7e |
190 |
+ .quad .Ld8,.Ls8e |
191 |
+@@ -172,11 +172,8 @@ ENTRY(__copy_user_nocache) |
192 |
+ .quad .Le5,.Le_zero |
193 |
+ .previous |
194 |
+ |
195 |
+- /* compute 64-offset for main loop. 8 bytes accuracy with error on the |
196 |
+- pessimistic side. this is gross. it would be better to fix the |
197 |
+- interface. */ |
198 |
+ /* eax: zero, ebx: 64 */ |
199 |
+-.Ls1e: addl $8,%eax |
200 |
++.Ls1e: addl $8,%eax /* eax: bytes left uncopied: Ls1e: 64 .. Ls8e: 8 */ |
201 |
+ .Ls2e: addl $8,%eax |
202 |
+ .Ls3e: addl $8,%eax |
203 |
+ .Ls4e: addl $8,%eax |
204 |
+diff --git a/drivers/acpi/tables/tbinstal.c b/drivers/acpi/tables/tbinstal.c |
205 |
+index 3bc0c67..225e88c 100644 |
206 |
+--- a/drivers/acpi/tables/tbinstal.c |
207 |
++++ b/drivers/acpi/tables/tbinstal.c |
208 |
+@@ -123,17 +123,13 @@ acpi_tb_add_table(struct acpi_table_desc *table_desc, |
209 |
+ } |
210 |
+ } |
211 |
+ |
212 |
+- /* The table must be either an SSDT or a PSDT or an OEMx */ |
213 |
+- |
214 |
+- if ((!ACPI_COMPARE_NAME(table_desc->pointer->signature, ACPI_SIG_PSDT)) |
215 |
+- && |
216 |
+- (!ACPI_COMPARE_NAME(table_desc->pointer->signature, ACPI_SIG_SSDT)) |
217 |
+- && (strncmp(table_desc->pointer->signature, "OEM", 3))) { |
218 |
+- ACPI_ERROR((AE_INFO, |
219 |
+- "Table has invalid signature [%4.4s], must be SSDT, PSDT or OEMx", |
220 |
+- table_desc->pointer->signature)); |
221 |
+- return_ACPI_STATUS(AE_BAD_SIGNATURE); |
222 |
+- } |
223 |
++ /* |
224 |
++ * Originally, we checked the table signature for "SSDT" or "PSDT" here. |
225 |
++ * Next, we added support for OEMx tables, signature "OEM". |
226 |
++ * Valid tables were encountered with a null signature, so we've just |
227 |
++ * given up on validating the signature, since it seems to be a waste |
228 |
++ * of code. The original code was removed (05/2008). |
229 |
++ */ |
230 |
+ |
231 |
+ (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES); |
232 |
+ |
233 |
+diff --git a/drivers/ide/pci/opti621.c b/drivers/ide/pci/opti621.c |
234 |
+index 46e8748..3eecbd4 100644 |
235 |
+--- a/drivers/ide/pci/opti621.c |
236 |
++++ b/drivers/ide/pci/opti621.c |
237 |
+@@ -103,18 +103,6 @@ |
238 |
+ * address: 50 ns, data: 50 ns, recovery: 100 ns. |
239 |
+ */ |
240 |
+ |
241 |
+-/* #define READ_PREFETCH 0 */ |
242 |
+-/* Uncomment for disable read prefetch. |
243 |
+- * There is some readprefetch capatibility in hdparm, |
244 |
+- * but when I type hdparm -P 1 /dev/hda, I got errors |
245 |
+- * and till reset drive is inaccessible. |
246 |
+- * This (hw) read prefetch is safe on my drive. |
247 |
+- */ |
248 |
+- |
249 |
+-#ifndef READ_PREFETCH |
250 |
+-#define READ_PREFETCH 0x40 /* read prefetch is enabled */ |
251 |
+-#endif /* else read prefetch is disabled */ |
252 |
+- |
253 |
+ #define READ_REG 0 /* index of Read cycle timing register */ |
254 |
+ #define WRITE_REG 1 /* index of Write cycle timing register */ |
255 |
+ #define CNTRL_REG 3 /* index of Control register */ |
256 |
+@@ -260,7 +248,8 @@ static void opti621_set_pio_mode(ide_drive_t *drive, const u8 pio) |
257 |
+ |
258 |
+ cycle1 = ((first.data_time-1)<<4) | (first.recovery_time-2); |
259 |
+ cycle2 = ((second.data_time-1)<<4) | (second.recovery_time-2); |
260 |
+- misc = READ_PREFETCH | ((ax-1)<<4) | ((drdy-2)<<1); |
261 |
++ |
262 |
++ misc = ((ax - 1) << 4) | ((drdy - 2) << 1); |
263 |
+ |
264 |
+ #ifdef OPTI621_DEBUG |
265 |
+ printk("%s: master: address: %d, data: %d, " |
266 |
+@@ -335,20 +324,16 @@ static const struct ide_port_info opti621_chipsets[] __devinitdata = { |
267 |
+ .name = "OPTI621", |
268 |
+ .init_hwif = init_hwif_opti621, |
269 |
+ .enablebits = {{0x45,0x80,0x00}, {0x40,0x08,0x00}}, |
270 |
+- .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA | |
271 |
++ .host_flags = IDE_HFLAG_NO_DMA | |
272 |
+ IDE_HFLAG_BOOTABLE, |
273 |
+ .pio_mask = ATA_PIO3, |
274 |
+- .swdma_mask = ATA_SWDMA2, |
275 |
+- .mwdma_mask = ATA_MWDMA2, |
276 |
+ },{ /* 1 */ |
277 |
+ .name = "OPTI621X", |
278 |
+ .init_hwif = init_hwif_opti621, |
279 |
+ .enablebits = {{0x45,0x80,0x00}, {0x40,0x08,0x00}}, |
280 |
+- .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA | |
281 |
++ .host_flags = IDE_HFLAG_NO_DMA | |
282 |
+ IDE_HFLAG_BOOTABLE, |
283 |
+ .pio_mask = ATA_PIO3, |
284 |
+- .swdma_mask = ATA_SWDMA2, |
285 |
+- .mwdma_mask = ATA_MWDMA2, |
286 |
+ } |
287 |
+ }; |
288 |
+ |
289 |
+diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c |
290 |
+index 555b70c..2d31587 100644 |
291 |
+--- a/drivers/net/virtio_net.c |
292 |
++++ b/drivers/net/virtio_net.c |
293 |
+@@ -83,9 +83,7 @@ static void receive_skb(struct net_device *dev, struct sk_buff *skb, |
294 |
+ BUG_ON(len > MAX_PACKET_LEN); |
295 |
+ |
296 |
+ skb_trim(skb, len); |
297 |
+- skb->protocol = eth_type_trans(skb, dev); |
298 |
+- pr_debug("Receiving skb proto 0x%04x len %i type %i\n", |
299 |
+- ntohs(skb->protocol), skb->len, skb->pkt_type); |
300 |
++ |
301 |
+ dev->stats.rx_bytes += skb->len; |
302 |
+ dev->stats.rx_packets++; |
303 |
+ |
304 |
+@@ -95,6 +93,10 @@ static void receive_skb(struct net_device *dev, struct sk_buff *skb, |
305 |
+ goto frame_err; |
306 |
+ } |
307 |
+ |
308 |
++ skb->protocol = eth_type_trans(skb, dev); |
309 |
++ pr_debug("Receiving skb proto 0x%04x len %i type %i\n", |
310 |
++ ntohs(skb->protocol), skb->len, skb->pkt_type); |
311 |
++ |
312 |
+ if (hdr->gso_type != VIRTIO_NET_HDR_GSO_NONE) { |
313 |
+ pr_debug("GSO!\n"); |
314 |
+ switch (hdr->gso_type & ~VIRTIO_NET_HDR_GSO_ECN) { |
315 |
+diff --git a/drivers/net/wireless/b43/b43.h b/drivers/net/wireless/b43/b43.h |
316 |
+index 44ebdea..b14087b 100644 |
317 |
+--- a/drivers/net/wireless/b43/b43.h |
318 |
++++ b/drivers/net/wireless/b43/b43.h |
319 |
+@@ -596,7 +596,6 @@ struct b43_dma { |
320 |
+ |
321 |
+ /* Context information for a noise calculation (Link Quality). */ |
322 |
+ struct b43_noise_calculation { |
323 |
+- u8 channel_at_start; |
324 |
+ bool calculation_running; |
325 |
+ u8 nr_samples; |
326 |
+ s8 samples[8][4]; |
327 |
+diff --git a/drivers/net/wireless/b43/dma.c b/drivers/net/wireless/b43/dma.c |
328 |
+index 4ec1915..f74dba2 100644 |
329 |
+--- a/drivers/net/wireless/b43/dma.c |
330 |
++++ b/drivers/net/wireless/b43/dma.c |
331 |
+@@ -850,6 +850,7 @@ struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev, |
332 |
+ if (!ring) |
333 |
+ goto out; |
334 |
+ ring->type = type; |
335 |
++ ring->dev = dev; |
336 |
+ |
337 |
+ nr_slots = B43_RXRING_SLOTS; |
338 |
+ if (for_tx) |
339 |
+@@ -901,7 +902,6 @@ struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev, |
340 |
+ DMA_TO_DEVICE); |
341 |
+ } |
342 |
+ |
343 |
+- ring->dev = dev; |
344 |
+ ring->nr_slots = nr_slots; |
345 |
+ ring->mmio_base = b43_dmacontroller_base(type, controller_index); |
346 |
+ ring->index = controller_index; |
347 |
+diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c |
348 |
+index 6966eec..b4a2042 100644 |
349 |
+--- a/drivers/net/wireless/b43/main.c |
350 |
++++ b/drivers/net/wireless/b43/main.c |
351 |
+@@ -1027,7 +1027,6 @@ static void b43_generate_noise_sample(struct b43_wldev *dev) |
352 |
+ b43_jssi_write(dev, 0x7F7F7F7F); |
353 |
+ b43_write32(dev, B43_MMIO_MACCMD, |
354 |
+ b43_read32(dev, B43_MMIO_MACCMD) | B43_MACCMD_BGNOISE); |
355 |
+- B43_WARN_ON(dev->noisecalc.channel_at_start != dev->phy.channel); |
356 |
+ } |
357 |
+ |
358 |
+ static void b43_calculate_link_quality(struct b43_wldev *dev) |
359 |
+@@ -1036,7 +1035,6 @@ static void b43_calculate_link_quality(struct b43_wldev *dev) |
360 |
+ |
361 |
+ if (dev->noisecalc.calculation_running) |
362 |
+ return; |
363 |
+- dev->noisecalc.channel_at_start = dev->phy.channel; |
364 |
+ dev->noisecalc.calculation_running = 1; |
365 |
+ dev->noisecalc.nr_samples = 0; |
366 |
+ |
367 |
+@@ -1053,9 +1051,16 @@ static void handle_irq_noise(struct b43_wldev *dev) |
368 |
+ |
369 |
+ /* Bottom half of Link Quality calculation. */ |
370 |
+ |
371 |
++ /* Possible race condition: It might be possible that the user |
372 |
++ * changed to a different channel in the meantime since we |
373 |
++ * started the calculation. We ignore that fact, since it's |
374 |
++ * not really that much of a problem. The background noise is |
375 |
++ * an estimation only anyway. Slightly wrong results will get damped |
376 |
++ * by the averaging of the 8 sample rounds. Additionally the |
377 |
++ * value is shortlived. So it will be replaced by the next noise |
378 |
++ * calculation round soon. */ |
379 |
++ |
380 |
+ B43_WARN_ON(!dev->noisecalc.calculation_running); |
381 |
+- if (dev->noisecalc.channel_at_start != phy->channel) |
382 |
+- goto drop_calculation; |
383 |
+ *((__le32 *)noise) = cpu_to_le32(b43_jssi_read(dev)); |
384 |
+ if (noise[0] == 0x7F || noise[1] == 0x7F || |
385 |
+ noise[2] == 0x7F || noise[3] == 0x7F) |
386 |
+@@ -1096,11 +1101,10 @@ static void handle_irq_noise(struct b43_wldev *dev) |
387 |
+ average -= 48; |
388 |
+ |
389 |
+ dev->stats.link_noise = average; |
390 |
+- drop_calculation: |
391 |
+ dev->noisecalc.calculation_running = 0; |
392 |
+ return; |
393 |
+ } |
394 |
+- generate_new: |
395 |
++generate_new: |
396 |
+ b43_generate_noise_sample(dev); |
397 |
+ } |
398 |
+ |
399 |
+diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c |
400 |
+index ed7e0a1..079c733 100644 |
401 |
+--- a/drivers/scsi/hosts.c |
402 |
++++ b/drivers/scsi/hosts.c |
403 |
+@@ -455,9 +455,10 @@ struct Scsi_Host *scsi_host_lookup(unsigned short hostnum) |
404 |
+ struct Scsi_Host *shost = ERR_PTR(-ENXIO); |
405 |
+ |
406 |
+ cdev = class_find_child(&shost_class, &hostnum, __scsi_host_match); |
407 |
+- if (cdev) |
408 |
++ if (cdev) { |
409 |
+ shost = scsi_host_get(class_to_shost(cdev)); |
410 |
+- |
411 |
++ class_device_put(cdev); |
412 |
++ } |
413 |
+ return shost; |
414 |
+ } |
415 |
+ EXPORT_SYMBOL(scsi_host_lookup); |
416 |
+diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c |
417 |
+index 7ee86d4..c82df8b 100644 |
418 |
+--- a/drivers/scsi/sr.c |
419 |
++++ b/drivers/scsi/sr.c |
420 |
+@@ -178,6 +178,9 @@ int sr_test_unit_ready(struct scsi_device *sdev, struct scsi_sense_hdr *sshdr) |
421 |
+ the_result = scsi_execute_req(sdev, cmd, DMA_NONE, NULL, |
422 |
+ 0, sshdr, SR_TIMEOUT, |
423 |
+ retries--); |
424 |
++ if (scsi_sense_valid(sshdr) && |
425 |
++ sshdr->sense_key == UNIT_ATTENTION) |
426 |
++ sdev->changed = 1; |
427 |
+ |
428 |
+ } while (retries > 0 && |
429 |
+ (!scsi_status_is_good(the_result) || |
430 |
+diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c |
431 |
+index 77f7a7f..d60705e 100644 |
432 |
+--- a/drivers/serial/8250.c |
433 |
++++ b/drivers/serial/8250.c |
434 |
+@@ -2174,7 +2174,9 @@ serial8250_set_termios(struct uart_port *port, struct ktermios *termios, |
435 |
+ } |
436 |
+ serial8250_set_mctrl(&up->port, up->port.mctrl); |
437 |
+ spin_unlock_irqrestore(&up->port.lock, flags); |
438 |
+- tty_termios_encode_baud_rate(termios, baud, baud); |
439 |
++ /* Don't rewrite B0 */ |
440 |
++ if (tty_termios_baud_rate(termios)) |
441 |
++ tty_termios_encode_baud_rate(termios, baud, baud); |
442 |
+ } |
443 |
+ |
444 |
+ static void |
445 |
+diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c |
446 |
+index 4147de6..8785784 100644 |
447 |
+--- a/net/netfilter/nf_conntrack_core.c |
448 |
++++ b/net/netfilter/nf_conntrack_core.c |
449 |
+@@ -199,8 +199,6 @@ destroy_conntrack(struct nf_conntrack *nfct) |
450 |
+ if (l4proto && l4proto->destroy) |
451 |
+ l4proto->destroy(ct); |
452 |
+ |
453 |
+- nf_ct_ext_destroy(ct); |
454 |
+- |
455 |
+ rcu_read_unlock(); |
456 |
+ |
457 |
+ spin_lock_bh(&nf_conntrack_lock); |
458 |
+@@ -523,6 +521,7 @@ static void nf_conntrack_free_rcu(struct rcu_head *head) |
459 |
+ |
460 |
+ void nf_conntrack_free(struct nf_conn *ct) |
461 |
+ { |
462 |
++ nf_ct_ext_destroy(ct); |
463 |
+ call_rcu(&ct->rcu, nf_conntrack_free_rcu); |
464 |
+ } |
465 |
+ EXPORT_SYMBOL_GPL(nf_conntrack_free); |
466 |
+diff --git a/net/netfilter/nf_conntrack_h323_main.c b/net/netfilter/nf_conntrack_h323_main.c |
467 |
+index 898f192..7407dd3 100644 |
468 |
+--- a/net/netfilter/nf_conntrack_h323_main.c |
469 |
++++ b/net/netfilter/nf_conntrack_h323_main.c |
470 |
+@@ -617,6 +617,7 @@ static struct nf_conntrack_helper nf_conntrack_helper_h245 __read_mostly = { |
471 |
+ .me = THIS_MODULE, |
472 |
+ .max_expected = H323_RTP_CHANNEL_MAX * 4 + 2 /* T.120 */, |
473 |
+ .timeout = 240, |
474 |
++ .tuple.src.l3num = AF_UNSPEC, |
475 |
+ .tuple.dst.protonum = IPPROTO_UDP, |
476 |
+ .help = h245_help |
477 |
+ }; |
478 |
+@@ -1758,6 +1759,7 @@ static void __exit nf_conntrack_h323_fini(void) |
479 |
+ nf_conntrack_helper_unregister(&nf_conntrack_helper_ras[0]); |
480 |
+ nf_conntrack_helper_unregister(&nf_conntrack_helper_q931[1]); |
481 |
+ nf_conntrack_helper_unregister(&nf_conntrack_helper_q931[0]); |
482 |
++ nf_conntrack_helper_unregister(&nf_conntrack_helper_h245); |
483 |
+ kfree(h323_buffer); |
484 |
+ pr_debug("nf_ct_h323: fini\n"); |
485 |
+ } |
486 |
+@@ -1770,28 +1772,34 @@ static int __init nf_conntrack_h323_init(void) |
487 |
+ h323_buffer = kmalloc(65536, GFP_KERNEL); |
488 |
+ if (!h323_buffer) |
489 |
+ return -ENOMEM; |
490 |
+- ret = nf_conntrack_helper_register(&nf_conntrack_helper_q931[0]); |
491 |
++ ret = nf_conntrack_helper_register(&nf_conntrack_helper_h245); |
492 |
+ if (ret < 0) |
493 |
+ goto err1; |
494 |
+- ret = nf_conntrack_helper_register(&nf_conntrack_helper_q931[1]); |
495 |
++ ret = nf_conntrack_helper_register(&nf_conntrack_helper_q931[0]); |
496 |
+ if (ret < 0) |
497 |
+ goto err2; |
498 |
+- ret = nf_conntrack_helper_register(&nf_conntrack_helper_ras[0]); |
499 |
++ ret = nf_conntrack_helper_register(&nf_conntrack_helper_q931[1]); |
500 |
+ if (ret < 0) |
501 |
+ goto err3; |
502 |
+- ret = nf_conntrack_helper_register(&nf_conntrack_helper_ras[1]); |
503 |
++ ret = nf_conntrack_helper_register(&nf_conntrack_helper_ras[0]); |
504 |
+ if (ret < 0) |
505 |
+ goto err4; |
506 |
++ ret = nf_conntrack_helper_register(&nf_conntrack_helper_ras[1]); |
507 |
++ if (ret < 0) |
508 |
++ goto err5; |
509 |
+ pr_debug("nf_ct_h323: init success\n"); |
510 |
+ return 0; |
511 |
+ |
512 |
+-err4: |
513 |
++err5: |
514 |
+ nf_conntrack_helper_unregister(&nf_conntrack_helper_ras[0]); |
515 |
+-err3: |
516 |
++err4: |
517 |
+ nf_conntrack_helper_unregister(&nf_conntrack_helper_q931[1]); |
518 |
+-err2: |
519 |
++err3: |
520 |
+ nf_conntrack_helper_unregister(&nf_conntrack_helper_q931[0]); |
521 |
++err2: |
522 |
++ nf_conntrack_helper_unregister(&nf_conntrack_helper_h245); |
523 |
+ err1: |
524 |
++ kfree(h323_buffer); |
525 |
+ return ret; |
526 |
+ } |
527 |
+ |
528 |
|
529 |
-- |
530 |
gentoo-commits@l.g.o mailing list |