Gentoo Archives: gentoo-commits

From: "Mike Pagano (mpagano)" <mpagano@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] linux-patches r1323 - genpatches-2.6/trunk/2.6.25
Date: Mon, 23 Jun 2008 19:48:14
Message-Id: E1KAs1I-0002om-45@stork.gentoo.org
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