Magellan Linux

Contents of /trunk/kernel26-magellan-server/patches-2.6.27-r2/0109-2.6.27.10-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 728 - (show annotations) (download)
Tue Dec 23 09:41:15 2008 UTC (15 years, 4 months ago) by niro
File size: 42680 byte(s)
-ver bump to 2.6.27-r2:
- updated to linux-2.6.27.10
- using tuxonice current-20081025
- adjusted kernel-configs to use tuxonice and enabled ufs filesystem support

1 diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
2 index 1150444..792be86 100644
3 --- a/Documentation/kernel-parameters.txt
4 +++ b/Documentation/kernel-parameters.txt
5 @@ -283,7 +283,7 @@ and is between 256 and 4096 characters. It is defined in the file
6 Possible values are:
7 isolate - enable device isolation (each device, as far
8 as possible, will get its own protection
9 - domain)
10 + domain) [default]
11 amd_iommu_size= [HW,X86-64]
12 Define the size of the aperture for the AMD IOMMU
13 driver. Possible values are:
14 diff --git a/arch/x86/kernel/amd_iommu_init.c b/arch/x86/kernel/amd_iommu_init.c
15 index bccd0ef..a1378c4 100644
16 --- a/arch/x86/kernel/amd_iommu_init.c
17 +++ b/arch/x86/kernel/amd_iommu_init.c
18 @@ -120,7 +120,7 @@ u16 amd_iommu_last_bdf; /* largest PCI device id we have
19 LIST_HEAD(amd_iommu_unity_map); /* a list of required unity mappings
20 we find in ACPI */
21 unsigned amd_iommu_aperture_order = 26; /* size of aperture in power of 2 */
22 -int amd_iommu_isolate; /* if 1, device isolation is enabled */
23 +int amd_iommu_isolate = 1; /* if 1, device isolation is enabled */
24
25 LIST_HEAD(amd_iommu_list); /* list of all AMD IOMMUs in the
26 system */
27 diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
28 index 7667443..6d5a3c4 100644
29 --- a/arch/x86/kernel/setup.c
30 +++ b/arch/x86/kernel/setup.c
31 @@ -634,6 +634,9 @@ void __init setup_arch(char **cmdline_p)
32 printk(KERN_INFO "Command line: %s\n", boot_command_line);
33 #endif
34
35 + /* VMI may relocate the fixmap; do this before touching ioremap area */
36 + vmi_init();
37 +
38 early_cpu_init();
39 early_ioremap_init();
40
41 @@ -707,13 +710,8 @@ void __init setup_arch(char **cmdline_p)
42 check_efer();
43 #endif
44
45 -#if defined(CONFIG_VMI) && defined(CONFIG_X86_32)
46 - /*
47 - * Must be before kernel pagetables are setup
48 - * or fixmap area is touched.
49 - */
50 - vmi_init();
51 -#endif
52 + /* Must be before kernel pagetables are setup */
53 + vmi_activate();
54
55 /* after early param, so could get panic from serial */
56 reserve_early_setup_data();
57 diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
58 index 7985c5b..259569f 100644
59 --- a/arch/x86/kernel/smpboot.c
60 +++ b/arch/x86/kernel/smpboot.c
61 @@ -289,9 +289,7 @@ static void __cpuinit start_secondary(void *unused)
62 * fragile that we want to limit the things done here to the
63 * most necessary things.
64 */
65 -#ifdef CONFIG_VMI
66 vmi_bringup();
67 -#endif
68 cpu_init();
69 preempt_disable();
70 smp_callin();
71 diff --git a/arch/x86/kernel/vmi_32.c b/arch/x86/kernel/vmi_32.c
72 index edfb09f..f370d38 100644
73 --- a/arch/x86/kernel/vmi_32.c
74 +++ b/arch/x86/kernel/vmi_32.c
75 @@ -960,8 +960,6 @@ static inline int __init activate_vmi(void)
76
77 void __init vmi_init(void)
78 {
79 - unsigned long flags;
80 -
81 if (!vmi_rom)
82 probe_vmi_rom();
83 else
84 @@ -973,13 +971,21 @@ void __init vmi_init(void)
85
86 reserve_top_address(-vmi_rom->virtual_top);
87
88 - local_irq_save(flags);
89 - activate_vmi();
90 -
91 #ifdef CONFIG_X86_IO_APIC
92 /* This is virtual hardware; timer routing is wired correctly */
93 no_timer_check = 1;
94 #endif
95 +}
96 +
97 +void vmi_activate(void)
98 +{
99 + unsigned long flags;
100 +
101 + if (!vmi_rom)
102 + return;
103 +
104 + local_irq_save(flags);
105 + activate_vmi();
106 local_irq_restore(flags & X86_EFLAGS_IF);
107 }
108
109 diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
110 index b551cda..f38e2af 100644
111 --- a/drivers/ata/libata-core.c
112 +++ b/drivers/ata/libata-core.c
113 @@ -3979,17 +3979,70 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
114 { "ST3160023AS", "3.42", ATA_HORKAGE_NONCQ },
115
116 /* Seagate NCQ + FLUSH CACHE firmware bug */
117 - { "ST31500341AS", "9JU138", ATA_HORKAGE_NONCQ |
118 + { "ST31500341AS", "SD15", ATA_HORKAGE_NONCQ |
119 ATA_HORKAGE_FIRMWARE_WARN },
120 - { "ST31000333AS", "9FZ136", ATA_HORKAGE_NONCQ |
121 + { "ST31500341AS", "SD16", ATA_HORKAGE_NONCQ |
122 ATA_HORKAGE_FIRMWARE_WARN },
123 - { "ST3640623AS", "9FZ164", ATA_HORKAGE_NONCQ |
124 + { "ST31500341AS", "SD17", ATA_HORKAGE_NONCQ |
125 ATA_HORKAGE_FIRMWARE_WARN },
126 - { "ST3640323AS", "9FZ134", ATA_HORKAGE_NONCQ |
127 + { "ST31500341AS", "SD18", ATA_HORKAGE_NONCQ |
128 ATA_HORKAGE_FIRMWARE_WARN },
129 - { "ST3320813AS", "9FZ182", ATA_HORKAGE_NONCQ |
130 + { "ST31500341AS", "SD19", ATA_HORKAGE_NONCQ |
131 ATA_HORKAGE_FIRMWARE_WARN },
132 - { "ST3320613AS", "9FZ162", ATA_HORKAGE_NONCQ |
133 +
134 + { "ST31000333AS", "SD15", ATA_HORKAGE_NONCQ |
135 + ATA_HORKAGE_FIRMWARE_WARN },
136 + { "ST31000333AS", "SD16", ATA_HORKAGE_NONCQ |
137 + ATA_HORKAGE_FIRMWARE_WARN },
138 + { "ST31000333AS", "SD17", ATA_HORKAGE_NONCQ |
139 + ATA_HORKAGE_FIRMWARE_WARN },
140 + { "ST31000333AS", "SD18", ATA_HORKAGE_NONCQ |
141 + ATA_HORKAGE_FIRMWARE_WARN },
142 + { "ST31000333AS", "SD19", ATA_HORKAGE_NONCQ |
143 + ATA_HORKAGE_FIRMWARE_WARN },
144 +
145 + { "ST3640623AS", "SD15", ATA_HORKAGE_NONCQ |
146 + ATA_HORKAGE_FIRMWARE_WARN },
147 + { "ST3640623AS", "SD16", ATA_HORKAGE_NONCQ |
148 + ATA_HORKAGE_FIRMWARE_WARN },
149 + { "ST3640623AS", "SD17", ATA_HORKAGE_NONCQ |
150 + ATA_HORKAGE_FIRMWARE_WARN },
151 + { "ST3640623AS", "SD18", ATA_HORKAGE_NONCQ |
152 + ATA_HORKAGE_FIRMWARE_WARN },
153 + { "ST3640623AS", "SD19", ATA_HORKAGE_NONCQ |
154 + ATA_HORKAGE_FIRMWARE_WARN },
155 +
156 + { "ST3640323AS", "SD15", ATA_HORKAGE_NONCQ |
157 + ATA_HORKAGE_FIRMWARE_WARN },
158 + { "ST3640323AS", "SD16", ATA_HORKAGE_NONCQ |
159 + ATA_HORKAGE_FIRMWARE_WARN },
160 + { "ST3640323AS", "SD17", ATA_HORKAGE_NONCQ |
161 + ATA_HORKAGE_FIRMWARE_WARN },
162 + { "ST3640323AS", "SD18", ATA_HORKAGE_NONCQ |
163 + ATA_HORKAGE_FIRMWARE_WARN },
164 + { "ST3640323AS", "SD19", ATA_HORKAGE_NONCQ |
165 + ATA_HORKAGE_FIRMWARE_WARN },
166 +
167 + { "ST3320813AS", "SD15", ATA_HORKAGE_NONCQ |
168 + ATA_HORKAGE_FIRMWARE_WARN },
169 + { "ST3320813AS", "SD16", ATA_HORKAGE_NONCQ |
170 + ATA_HORKAGE_FIRMWARE_WARN },
171 + { "ST3320813AS", "SD17", ATA_HORKAGE_NONCQ |
172 + ATA_HORKAGE_FIRMWARE_WARN },
173 + { "ST3320813AS", "SD18", ATA_HORKAGE_NONCQ |
174 + ATA_HORKAGE_FIRMWARE_WARN },
175 + { "ST3320813AS", "SD19", ATA_HORKAGE_NONCQ |
176 + ATA_HORKAGE_FIRMWARE_WARN },
177 +
178 + { "ST3320613AS", "SD15", ATA_HORKAGE_NONCQ |
179 + ATA_HORKAGE_FIRMWARE_WARN },
180 + { "ST3320613AS", "SD16", ATA_HORKAGE_NONCQ |
181 + ATA_HORKAGE_FIRMWARE_WARN },
182 + { "ST3320613AS", "SD17", ATA_HORKAGE_NONCQ |
183 + ATA_HORKAGE_FIRMWARE_WARN },
184 + { "ST3320613AS", "SD18", ATA_HORKAGE_NONCQ |
185 + ATA_HORKAGE_FIRMWARE_WARN },
186 + { "ST3320613AS", "SD19", ATA_HORKAGE_NONCQ |
187 ATA_HORKAGE_FIRMWARE_WARN },
188
189 /* Blacklist entries taken from Silicon Image 3124/3132
190 diff --git a/drivers/char/cp437.uni b/drivers/char/cp437.uni
191 index 1f06889..bc61634 100644
192 --- a/drivers/char/cp437.uni
193 +++ b/drivers/char/cp437.uni
194 @@ -27,7 +27,7 @@
195 0x0c U+2640
196 0x0d U+266a
197 0x0e U+266b
198 -0x0f U+263c
199 +0x0f U+263c U+00a4
200 0x10 U+25b6 U+25ba
201 0x11 U+25c0 U+25c4
202 0x12 U+2195
203 @@ -55,7 +55,7 @@
204 0x24 U+0024
205 0x25 U+0025
206 0x26 U+0026
207 -0x27 U+0027
208 +0x27 U+0027 U+00b4
209 0x28 U+0028
210 0x29 U+0029
211 0x2a U+002a
212 @@ -84,7 +84,7 @@
213 0x41 U+0041 U+00c0 U+00c1 U+00c2 U+00c3
214 0x42 U+0042
215 0x43 U+0043 U+00a9
216 -0x44 U+0044
217 +0x44 U+0044 U+00d0
218 0x45 U+0045 U+00c8 U+00ca U+00cb
219 0x46 U+0046
220 0x47 U+0047
221 @@ -140,7 +140,7 @@
222 0x79 U+0079 U+00fd
223 0x7a U+007a
224 0x7b U+007b
225 -0x7c U+007c U+00a5
226 +0x7c U+007c U+00a6
227 0x7d U+007d
228 0x7e U+007e
229 #
230 @@ -263,10 +263,10 @@
231 0xe8 U+03a6 U+00d8
232 0xe9 U+0398
233 0xea U+03a9 U+2126
234 -0xeb U+03b4
235 +0xeb U+03b4 U+00f0
236 0xec U+221e
237 0xed U+03c6 U+00f8
238 -0xee U+03b5
239 +0xee U+03b5 U+2208
240 0xef U+2229
241 0xf0 U+2261
242 0xf1 U+00b1
243 diff --git a/drivers/char/vt.c b/drivers/char/vt.c
244 index 60359c3..d429499 100644
245 --- a/drivers/char/vt.c
246 +++ b/drivers/char/vt.c
247 @@ -2287,7 +2287,7 @@ rescan_last_byte:
248 continue; /* nothing to display */
249 }
250 /* Glyph not found */
251 - if ((!(vc->vc_utf && !vc->vc_disp_ctrl) || c < 128) && !(c & ~charmask)) {
252 + if ((!(vc->vc_utf && !vc->vc_disp_ctrl) && c < 128) && !(c & ~charmask)) {
253 /* In legacy mode use the glyph we get by a 1:1 mapping.
254 This would make absolutely no sense with Unicode in mind,
255 but do this for ASCII characters since a font may lack
256 diff --git a/drivers/char/xilinx_hwicap/buffer_icap.c b/drivers/char/xilinx_hwicap/buffer_icap.c
257 index aa7f796..05d8977 100644
258 --- a/drivers/char/xilinx_hwicap/buffer_icap.c
259 +++ b/drivers/char/xilinx_hwicap/buffer_icap.c
260 @@ -21,9 +21,6 @@
261 * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
262 * FOR A PARTICULAR PURPOSE.
263 *
264 - * Xilinx products are not intended for use in life support appliances,
265 - * devices, or systems. Use in such applications is expressly prohibited.
266 - *
267 * (c) Copyright 2003-2008 Xilinx Inc.
268 * All rights reserved.
269 *
270 diff --git a/drivers/char/xilinx_hwicap/buffer_icap.h b/drivers/char/xilinx_hwicap/buffer_icap.h
271 index 8b0252b..d4f419e 100644
272 --- a/drivers/char/xilinx_hwicap/buffer_icap.h
273 +++ b/drivers/char/xilinx_hwicap/buffer_icap.h
274 @@ -21,9 +21,6 @@
275 * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
276 * FOR A PARTICULAR PURPOSE.
277 *
278 - * Xilinx products are not intended for use in life support appliances,
279 - * devices, or systems. Use in such applications is expressly prohibited.
280 - *
281 * (c) Copyright 2003-2008 Xilinx Inc.
282 * All rights reserved.
283 *
284 diff --git a/drivers/char/xilinx_hwicap/fifo_icap.c b/drivers/char/xilinx_hwicap/fifo_icap.c
285 index 776b505..02225eb 100644
286 --- a/drivers/char/xilinx_hwicap/fifo_icap.c
287 +++ b/drivers/char/xilinx_hwicap/fifo_icap.c
288 @@ -21,9 +21,6 @@
289 * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
290 * FOR A PARTICULAR PURPOSE.
291 *
292 - * Xilinx products are not intended for use in life support appliances,
293 - * devices, or systems. Use in such applications is expressly prohibited.
294 - *
295 * (c) Copyright 2007-2008 Xilinx Inc.
296 * All rights reserved.
297 *
298 diff --git a/drivers/char/xilinx_hwicap/fifo_icap.h b/drivers/char/xilinx_hwicap/fifo_icap.h
299 index 62bda45..4c9dd9a 100644
300 --- a/drivers/char/xilinx_hwicap/fifo_icap.h
301 +++ b/drivers/char/xilinx_hwicap/fifo_icap.h
302 @@ -21,9 +21,6 @@
303 * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
304 * FOR A PARTICULAR PURPOSE.
305 *
306 - * Xilinx products are not intended for use in life support appliances,
307 - * devices, or systems. Use in such applications is expressly prohibited.
308 - *
309 * (c) Copyright 2007-2008 Xilinx Inc.
310 * All rights reserved.
311 *
312 diff --git a/drivers/char/xilinx_hwicap/xilinx_hwicap.c b/drivers/char/xilinx_hwicap/xilinx_hwicap.c
313 index 278c985..15ead99 100644
314 --- a/drivers/char/xilinx_hwicap/xilinx_hwicap.c
315 +++ b/drivers/char/xilinx_hwicap/xilinx_hwicap.c
316 @@ -21,9 +21,6 @@
317 * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
318 * FOR A PARTICULAR PURPOSE.
319 *
320 - * Xilinx products are not intended for use in life support appliances,
321 - * devices, or systems. Use in such applications is expressly prohibited.
322 - *
323 * (c) Copyright 2002 Xilinx Inc., Systems Engineering Group
324 * (c) Copyright 2004 Xilinx Inc., Systems Engineering Group
325 * (c) Copyright 2007-2008 Xilinx Inc.
326 diff --git a/drivers/char/xilinx_hwicap/xilinx_hwicap.h b/drivers/char/xilinx_hwicap/xilinx_hwicap.h
327 index 24d0d9b..8cca119 100644
328 --- a/drivers/char/xilinx_hwicap/xilinx_hwicap.h
329 +++ b/drivers/char/xilinx_hwicap/xilinx_hwicap.h
330 @@ -21,9 +21,6 @@
331 * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
332 * FOR A PARTICULAR PURPOSE.
333 *
334 - * Xilinx products are not intended for use in life support appliances,
335 - * devices, or systems. Use in such applications is expressly prohibited.
336 - *
337 * (c) Copyright 2003-2007 Xilinx Inc.
338 * All rights reserved.
339 *
340 diff --git a/drivers/firewire/fw-ohci.c b/drivers/firewire/fw-ohci.c
341 index 251416f..595759c 100644
342 --- a/drivers/firewire/fw-ohci.c
343 +++ b/drivers/firewire/fw-ohci.c
344 @@ -958,6 +958,7 @@ at_context_queue_packet(struct context *ctx, struct fw_packet *packet)
345 packet->ack = RCODE_SEND_ERROR;
346 return -1;
347 }
348 + packet->payload_bus = payload_bus;
349
350 d[2].req_count = cpu_to_le16(packet->payload_length);
351 d[2].data_address = cpu_to_le32(payload_bus);
352 @@ -1009,7 +1010,6 @@ static int handle_at_packet(struct context *context,
353 struct driver_data *driver_data;
354 struct fw_packet *packet;
355 struct fw_ohci *ohci = context->ohci;
356 - dma_addr_t payload_bus;
357 int evt;
358
359 if (last->transfer_status == 0)
360 @@ -1022,9 +1022,8 @@ static int handle_at_packet(struct context *context,
361 /* This packet was cancelled, just continue. */
362 return 1;
363
364 - payload_bus = le32_to_cpu(last->data_address);
365 - if (payload_bus != 0)
366 - dma_unmap_single(ohci->card.device, payload_bus,
367 + if (packet->payload_bus)
368 + dma_unmap_single(ohci->card.device, packet->payload_bus,
369 packet->payload_length, DMA_TO_DEVICE);
370
371 evt = le16_to_cpu(last->transfer_status) & 0x1f;
372 @@ -1681,6 +1680,10 @@ static int ohci_cancel_packet(struct fw_card *card, struct fw_packet *packet)
373 if (packet->ack != 0)
374 goto out;
375
376 + if (packet->payload_bus)
377 + dma_unmap_single(ohci->card.device, packet->payload_bus,
378 + packet->payload_length, DMA_TO_DEVICE);
379 +
380 log_ar_at_event('T', packet->speed, packet->header, 0x20);
381 driver_data->packet = NULL;
382 packet->ack = RCODE_CANCELLED;
383 diff --git a/drivers/firewire/fw-transaction.c b/drivers/firewire/fw-transaction.c
384 index e5d1a0b..27f7c7e 100644
385 --- a/drivers/firewire/fw-transaction.c
386 +++ b/drivers/firewire/fw-transaction.c
387 @@ -207,6 +207,7 @@ fw_fill_request(struct fw_packet *packet, int tcode, int tlabel,
388 packet->speed = speed;
389 packet->generation = generation;
390 packet->ack = 0;
391 + packet->payload_bus = 0;
392 }
393
394 /**
395 @@ -541,6 +542,8 @@ fw_fill_response(struct fw_packet *response, u32 *request_header,
396 BUG();
397 return;
398 }
399 +
400 + response->payload_bus = 0;
401 }
402 EXPORT_SYMBOL(fw_fill_response);
403
404 diff --git a/drivers/firewire/fw-transaction.h b/drivers/firewire/fw-transaction.h
405 index 81b15ba..04cc9b0 100644
406 --- a/drivers/firewire/fw-transaction.h
407 +++ b/drivers/firewire/fw-transaction.h
408 @@ -27,6 +27,7 @@
409 #include <linux/list.h>
410 #include <linux/spinlock_types.h>
411 #include <linux/timer.h>
412 +#include <linux/types.h>
413 #include <linux/workqueue.h>
414
415 #define TCODE_IS_READ_REQUEST(tcode) (((tcode) & ~1) == 4)
416 @@ -153,6 +154,7 @@ struct fw_packet {
417 size_t header_length;
418 void *payload;
419 size_t payload_length;
420 + dma_addr_t payload_bus;
421 u32 timestamp;
422
423 /*
424 diff --git a/drivers/ieee1394/nodemgr.c b/drivers/ieee1394/nodemgr.c
425 index 16240a7..3d3c3bc 100644
426 --- a/drivers/ieee1394/nodemgr.c
427 +++ b/drivers/ieee1394/nodemgr.c
428 @@ -115,8 +115,14 @@ static int nodemgr_bus_read(struct csr1212_csr *csr, u64 addr, u16 length,
429 return error;
430 }
431
432 +#define OUI_FREECOM_TECHNOLOGIES_GMBH 0x0001db
433 +
434 static int nodemgr_get_max_rom(quadlet_t *bus_info_data, void *__ci)
435 {
436 + /* Freecom FireWire Hard Drive firmware bug */
437 + if (be32_to_cpu(bus_info_data[3]) >> 8 == OUI_FREECOM_TECHNOLOGIES_GMBH)
438 + return 0;
439 +
440 return (be32_to_cpu(bus_info_data[2]) >> 8) & 0x3;
441 }
442
443 diff --git a/drivers/isdn/hardware/avm/b1isa.c b/drivers/isdn/hardware/avm/b1isa.c
444 index 1e288ee..6461a32 100644
445 --- a/drivers/isdn/hardware/avm/b1isa.c
446 +++ b/drivers/isdn/hardware/avm/b1isa.c
447 @@ -233,10 +233,8 @@ static void __exit b1isa_exit(void)
448 int i;
449
450 for (i = 0; i < MAX_CARDS; i++) {
451 - if (!io[i])
452 - break;
453 -
454 - b1isa_remove(&isa_dev[i]);
455 + if (isa_dev[i].resource[0].start)
456 + b1isa_remove(&isa_dev[i]);
457 }
458 unregister_capi_driver(&capi_driver_b1isa);
459 }
460 diff --git a/drivers/media/video/tvaudio.c b/drivers/media/video/tvaudio.c
461 index d74df58..bec489e 100644
462 --- a/drivers/media/video/tvaudio.c
463 +++ b/drivers/media/video/tvaudio.c
464 @@ -152,7 +152,7 @@ static int chip_write(struct CHIPSTATE *chip, int subaddr, int val)
465 {
466 unsigned char buffer[2];
467
468 - if (-1 == subaddr) {
469 + if (subaddr < 0) {
470 v4l_dbg(1, debug, chip->c, "%s: chip_write: 0x%x\n",
471 chip->c->name, val);
472 chip->shadow.bytes[1] = val;
473 @@ -163,6 +163,13 @@ static int chip_write(struct CHIPSTATE *chip, int subaddr, int val)
474 return -1;
475 }
476 } else {
477 + if (subaddr + 1 >= ARRAY_SIZE(chip->shadow.bytes)) {
478 + v4l_info(chip->c,
479 + "Tried to access a non-existent register: %d\n",
480 + subaddr);
481 + return -EINVAL;
482 + }
483 +
484 v4l_dbg(1, debug, chip->c, "%s: chip_write: reg%d=0x%x\n",
485 chip->c->name, subaddr, val);
486 chip->shadow.bytes[subaddr+1] = val;
487 @@ -177,12 +184,20 @@ static int chip_write(struct CHIPSTATE *chip, int subaddr, int val)
488 return 0;
489 }
490
491 -static int chip_write_masked(struct CHIPSTATE *chip, int subaddr, int val, int mask)
492 +static int chip_write_masked(struct CHIPSTATE *chip,
493 + int subaddr, int val, int mask)
494 {
495 if (mask != 0) {
496 - if (-1 == subaddr) {
497 + if (subaddr < 0) {
498 val = (chip->shadow.bytes[1] & ~mask) | (val & mask);
499 } else {
500 + if (subaddr + 1 >= ARRAY_SIZE(chip->shadow.bytes)) {
501 + v4l_info(chip->c,
502 + "Tried to access a non-existent register: %d\n",
503 + subaddr);
504 + return -EINVAL;
505 + }
506 +
507 val = (chip->shadow.bytes[subaddr+1] & ~mask) | (val & mask);
508 }
509 }
510 @@ -228,6 +243,15 @@ static int chip_cmd(struct CHIPSTATE *chip, char *name, audiocmd *cmd)
511 if (0 == cmd->count)
512 return 0;
513
514 + if (cmd->count + cmd->bytes[0] - 1 >= ARRAY_SIZE(chip->shadow.bytes)) {
515 + v4l_info(chip->c,
516 + "Tried to access a non-existent register range: %d to %d\n",
517 + cmd->bytes[0] + 1, cmd->bytes[0] + cmd->count - 1);
518 + return -EINVAL;
519 + }
520 +
521 + /* FIXME: it seems that the shadow bytes are wrong bellow !*/
522 +
523 /* update our shadow register set; print bytes if (debug > 0) */
524 v4l_dbg(1, debug, chip->c, "%s: chip_cmd(%s): reg=%d, data:",
525 chip->c->name, name,cmd->bytes[0]);
526 diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
527 index c792138..1b9c4dc 100644
528 --- a/drivers/net/bonding/bond_main.c
529 +++ b/drivers/net/bonding/bond_main.c
530 @@ -2370,6 +2370,9 @@ static void bond_miimon_commit(struct bonding *bond)
531 continue;
532
533 case BOND_LINK_DOWN:
534 + if (slave->link_failure_count < UINT_MAX)
535 + slave->link_failure_count++;
536 +
537 slave->link = BOND_LINK_DOWN;
538
539 if (bond->params.mode == BOND_MODE_ACTIVEBACKUP ||
540 diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/e1000e/ich8lan.c
541 index bcd2bc4..79be768 100644
542 --- a/drivers/net/e1000e/ich8lan.c
543 +++ b/drivers/net/e1000e/ich8lan.c
544 @@ -1791,12 +1791,17 @@ static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw)
545 ctrl |= E1000_CTRL_PHY_RST;
546 }
547 ret_val = e1000_acquire_swflag_ich8lan(hw);
548 + /* Whether or not the swflag was acquired, we need to reset the part */
549 hw_dbg(hw, "Issuing a global reset to ich8lan");
550 ew32(CTRL, (ctrl | E1000_CTRL_RST));
551 msleep(20);
552
553 - /* release the swflag because it is not reset by hardware reset */
554 - e1000_release_swflag_ich8lan(hw);
555 + if (!ret_val) {
556 + /* release the swflag because it is not reset by
557 + * hardware reset
558 + */
559 + e1000_release_swflag_ich8lan(hw);
560 + }
561
562 ret_val = e1000e_get_auto_rd_done(hw);
563 if (ret_val) {
564 diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
565 index cf7056e..79b7ae3 100644
566 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c
567 +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
568 @@ -1384,7 +1384,7 @@ void iwl_rx_handle(struct iwl_priv *priv)
569
570 rxq->queue[i] = NULL;
571
572 - pci_dma_sync_single_for_cpu(priv->pci_dev, rxb->dma_addr,
573 + pci_dma_sync_single_for_cpu(priv->pci_dev, rxb->aligned_dma_addr,
574 priv->hw_params.rx_buf_size,
575 PCI_DMA_FROMDEVICE);
576 pkt = (struct iwl_rx_packet *)rxb->skb->data;
577 @@ -1436,8 +1436,8 @@ void iwl_rx_handle(struct iwl_priv *priv)
578 rxb->skb = NULL;
579 }
580
581 - pci_unmap_single(priv->pci_dev, rxb->dma_addr,
582 - priv->hw_params.rx_buf_size,
583 + pci_unmap_single(priv->pci_dev, rxb->real_dma_addr,
584 + priv->hw_params.rx_buf_size + 256,
585 PCI_DMA_FROMDEVICE);
586 spin_lock_irqsave(&rxq->lock, flags);
587 list_add_tail(&rxb->list, &priv->rxq.rx_used);
588 diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
589 index 1383fd1..b346268 100644
590 --- a/drivers/net/wireless/iwlwifi/iwl-core.c
591 +++ b/drivers/net/wireless/iwlwifi/iwl-core.c
592 @@ -290,6 +290,9 @@ void iwl_clear_stations_table(struct iwl_priv *priv)
593 priv->num_stations = 0;
594 memset(priv->stations, 0, sizeof(priv->stations));
595
596 + /* clean ucode key table bit map */
597 + priv->ucode_key_table = 0;
598 +
599 spin_unlock_irqrestore(&priv->sta_lock, flags);
600 }
601 EXPORT_SYMBOL(iwl_clear_stations_table);
602 diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
603 index 09bdf8e..cf7757f 100644
604 --- a/drivers/net/wireless/iwlwifi/iwl-dev.h
605 +++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
606 @@ -89,7 +89,8 @@ extern struct iwl_cfg iwl5100_abg_cfg;
607 #define DEFAULT_LONG_RETRY_LIMIT 4U
608
609 struct iwl_rx_mem_buffer {
610 - dma_addr_t dma_addr;
611 + dma_addr_t real_dma_addr;
612 + dma_addr_t aligned_dma_addr;
613 struct sk_buff *skb;
614 struct list_head list;
615 };
616 diff --git a/drivers/net/wireless/iwlwifi/iwl-rx.c b/drivers/net/wireless/iwlwifi/iwl-rx.c
617 index e81bfc4..ce25379 100644
618 --- a/drivers/net/wireless/iwlwifi/iwl-rx.c
619 +++ b/drivers/net/wireless/iwlwifi/iwl-rx.c
620 @@ -204,7 +204,7 @@ int iwl_rx_queue_restock(struct iwl_priv *priv)
621 list_del(element);
622
623 /* Point to Rx buffer via next RBD in circular buffer */
624 - rxq->bd[rxq->write] = iwl_dma_addr2rbd_ptr(priv, rxb->dma_addr);
625 + rxq->bd[rxq->write] = iwl_dma_addr2rbd_ptr(priv, rxb->aligned_dma_addr);
626 rxq->queue[rxq->write] = rxb;
627 rxq->write = (rxq->write + 1) & RX_QUEUE_MASK;
628 rxq->free_count--;
629 @@ -251,7 +251,7 @@ void iwl_rx_allocate(struct iwl_priv *priv)
630 rxb = list_entry(element, struct iwl_rx_mem_buffer, list);
631
632 /* Alloc a new receive buffer */
633 - rxb->skb = alloc_skb(priv->hw_params.rx_buf_size,
634 + rxb->skb = alloc_skb(priv->hw_params.rx_buf_size + 256,
635 __GFP_NOWARN | GFP_ATOMIC);
636 if (!rxb->skb) {
637 if (net_ratelimit())
638 @@ -266,9 +266,17 @@ void iwl_rx_allocate(struct iwl_priv *priv)
639 list_del(element);
640
641 /* Get physical address of RB/SKB */
642 - rxb->dma_addr =
643 - pci_map_single(priv->pci_dev, rxb->skb->data,
644 - priv->hw_params.rx_buf_size, PCI_DMA_FROMDEVICE);
645 + rxb->real_dma_addr = pci_map_single(
646 + priv->pci_dev,
647 + rxb->skb->data,
648 + priv->hw_params.rx_buf_size + 256,
649 + PCI_DMA_FROMDEVICE);
650 + /* dma address must be no more than 36 bits */
651 + BUG_ON(rxb->real_dma_addr & ~DMA_BIT_MASK(36));
652 + /* and also 256 byte aligned! */
653 + rxb->aligned_dma_addr = ALIGN(rxb->real_dma_addr, 256);
654 + skb_reserve(rxb->skb, rxb->aligned_dma_addr - rxb->real_dma_addr);
655 +
656 list_add_tail(&rxb->list, &rxq->rx_free);
657 rxq->free_count++;
658 }
659 @@ -300,8 +308,8 @@ void iwl_rx_queue_free(struct iwl_priv *priv, struct iwl_rx_queue *rxq)
660 for (i = 0; i < RX_QUEUE_SIZE + RX_FREE_BUFFERS; i++) {
661 if (rxq->pool[i].skb != NULL) {
662 pci_unmap_single(priv->pci_dev,
663 - rxq->pool[i].dma_addr,
664 - priv->hw_params.rx_buf_size,
665 + rxq->pool[i].real_dma_addr,
666 + priv->hw_params.rx_buf_size + 256,
667 PCI_DMA_FROMDEVICE);
668 dev_kfree_skb(rxq->pool[i].skb);
669 }
670 @@ -354,8 +362,8 @@ void iwl_rx_queue_reset(struct iwl_priv *priv, struct iwl_rx_queue *rxq)
671 * to an SKB, so we need to unmap and free potential storage */
672 if (rxq->pool[i].skb != NULL) {
673 pci_unmap_single(priv->pci_dev,
674 - rxq->pool[i].dma_addr,
675 - priv->hw_params.rx_buf_size,
676 + rxq->pool[i].real_dma_addr,
677 + priv->hw_params.rx_buf_size + 256,
678 PCI_DMA_FROMDEVICE);
679 priv->alloc_rxb_skb--;
680 dev_kfree_skb(rxq->pool[i].skb);
681 diff --git a/drivers/net/wireless/iwlwifi/iwl-sta.c b/drivers/net/wireless/iwlwifi/iwl-sta.c
682 index 6283a3a..f2d473c 100644
683 --- a/drivers/net/wireless/iwlwifi/iwl-sta.c
684 +++ b/drivers/net/wireless/iwlwifi/iwl-sta.c
685 @@ -475,7 +475,7 @@ static int iwl_get_free_ucode_key_index(struct iwl_priv *priv)
686 if (!test_and_set_bit(i, &priv->ucode_key_table))
687 return i;
688
689 - return -1;
690 + return WEP_INVALID_OFFSET;
691 }
692
693 int iwl_send_static_wepkey_cmd(struct iwl_priv *priv, u8 send_if_empty)
694 @@ -620,6 +620,9 @@ static int iwl_set_wep_dynamic_key_info(struct iwl_priv *priv,
695 /* else, we are overriding an existing key => no need to allocated room
696 * in uCode. */
697
698 + WARN(priv->stations[sta_id].sta.key.key_offset == WEP_INVALID_OFFSET,
699 + "no space for new kew");
700 +
701 priv->stations[sta_id].sta.key.key_flags = key_flags;
702 priv->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK;
703 priv->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK;
704 @@ -637,6 +640,7 @@ static int iwl_set_ccmp_dynamic_key_info(struct iwl_priv *priv,
705 {
706 unsigned long flags;
707 __le16 key_flags = 0;
708 + int ret;
709
710 key_flags |= (STA_KEY_FLG_CCMP | STA_KEY_FLG_MAP_KEY_MSK);
711 key_flags |= cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS);
712 @@ -664,14 +668,18 @@ static int iwl_set_ccmp_dynamic_key_info(struct iwl_priv *priv,
713 /* else, we are overriding an existing key => no need to allocated room
714 * in uCode. */
715
716 + WARN(priv->stations[sta_id].sta.key.key_offset == WEP_INVALID_OFFSET,
717 + "no space for new kew");
718 +
719 priv->stations[sta_id].sta.key.key_flags = key_flags;
720 priv->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK;
721 priv->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK;
722
723 + ret = iwl_send_add_sta(priv, &priv->stations[sta_id].sta, CMD_ASYNC);
724 +
725 spin_unlock_irqrestore(&priv->sta_lock, flags);
726
727 - IWL_DEBUG_INFO("hwcrypto: modify ucode station key info\n");
728 - return iwl_send_add_sta(priv, &priv->stations[sta_id].sta, CMD_ASYNC);
729 + return ret;
730 }
731
732 static int iwl_set_tkip_dynamic_key_info(struct iwl_priv *priv,
733 @@ -696,6 +704,9 @@ static int iwl_set_tkip_dynamic_key_info(struct iwl_priv *priv,
734 /* else, we are overriding an existing key => no need to allocated room
735 * in uCode. */
736
737 + WARN(priv->stations[sta_id].sta.key.key_offset == WEP_INVALID_OFFSET,
738 + "no space for new kew");
739 +
740 /* This copy is acutally not needed: we get the key with each TX */
741 memcpy(priv->stations[sta_id].keyinfo.key, keyconf->key, 16);
742
743 @@ -734,6 +745,13 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv,
744 return 0;
745 }
746
747 + if (priv->stations[sta_id].sta.key.key_offset == WEP_INVALID_OFFSET) {
748 + IWL_WARNING("Removing wrong key %d 0x%x\n",
749 + keyconf->keyidx, key_flags);
750 + spin_unlock_irqrestore(&priv->sta_lock, flags);
751 + return 0;
752 + }
753 +
754 if (!test_and_clear_bit(priv->stations[sta_id].sta.key.key_offset,
755 &priv->ucode_key_table))
756 IWL_ERROR("index %d not used in uCode key table.\n",
757 diff --git a/drivers/video/macfb.c b/drivers/video/macfb.c
758 index b790ddf..ee380d5 100644
759 --- a/drivers/video/macfb.c
760 +++ b/drivers/video/macfb.c
761 @@ -164,7 +164,6 @@ static struct fb_var_screeninfo macfb_defined = {
762 };
763
764 static struct fb_fix_screeninfo macfb_fix = {
765 - .id = "Macintosh ",
766 .type = FB_TYPE_PACKED_PIXELS,
767 .accel = FB_ACCEL_NONE,
768 };
769 @@ -760,22 +759,22 @@ static int __init macfb_init(void)
770
771 switch(ndev->dr_hw) {
772 case NUBUS_DRHW_APPLE_MDC:
773 - strcat( macfb_fix.id, "Display Card" );
774 + strcpy(macfb_fix.id, "Mac Disp. Card");
775 macfb_setpalette = mdc_setpalette;
776 macfb_defined.activate = FB_ACTIVATE_NOW;
777 break;
778 case NUBUS_DRHW_APPLE_TFB:
779 - strcat( macfb_fix.id, "Toby" );
780 + strcpy(macfb_fix.id, "Toby");
781 macfb_setpalette = toby_setpalette;
782 macfb_defined.activate = FB_ACTIVATE_NOW;
783 break;
784 case NUBUS_DRHW_APPLE_JET:
785 - strcat( macfb_fix.id, "Jet");
786 + strcpy(macfb_fix.id, "Jet");
787 macfb_setpalette = jet_setpalette;
788 macfb_defined.activate = FB_ACTIVATE_NOW;
789 break;
790 default:
791 - strcat( macfb_fix.id, "Generic NuBus" );
792 + strcpy(macfb_fix.id, "Generic NuBus");
793 break;
794 }
795 }
796 @@ -786,21 +785,11 @@ static int __init macfb_init(void)
797 if (!video_is_nubus)
798 switch( mac_bi_data.id )
799 {
800 - /* These don't have onboard video. Eventually, we may
801 - be able to write separate framebuffer drivers for
802 - them (tobyfb.c, hiresfb.c, etc, etc) */
803 - case MAC_MODEL_II:
804 - case MAC_MODEL_IIX:
805 - case MAC_MODEL_IICX:
806 - case MAC_MODEL_IIFX:
807 - strcat( macfb_fix.id, "Generic NuBus" );
808 - break;
809 -
810 /* Valkyrie Quadras */
811 case MAC_MODEL_Q630:
812 /* I'm not sure about this one */
813 case MAC_MODEL_P588:
814 - strcat( macfb_fix.id, "Valkyrie built-in" );
815 + strcpy(macfb_fix.id, "Valkyrie");
816 macfb_setpalette = valkyrie_setpalette;
817 macfb_defined.activate = FB_ACTIVATE_NOW;
818 valkyrie_cmap_regs = ioremap(DAC_BASE, 0x1000);
819 @@ -823,7 +812,7 @@ static int __init macfb_init(void)
820 case MAC_MODEL_Q700:
821 case MAC_MODEL_Q900:
822 case MAC_MODEL_Q950:
823 - strcat( macfb_fix.id, "DAFB built-in" );
824 + strcpy(macfb_fix.id, "DAFB");
825 macfb_setpalette = dafb_setpalette;
826 macfb_defined.activate = FB_ACTIVATE_NOW;
827 dafb_cmap_regs = ioremap(DAFB_BASE, 0x1000);
828 @@ -831,7 +820,7 @@ static int __init macfb_init(void)
829
830 /* LC II uses the V8 framebuffer */
831 case MAC_MODEL_LCII:
832 - strcat( macfb_fix.id, "V8 built-in" );
833 + strcpy(macfb_fix.id, "V8");
834 macfb_setpalette = v8_brazil_setpalette;
835 macfb_defined.activate = FB_ACTIVATE_NOW;
836 v8_brazil_cmap_regs = ioremap(DAC_BASE, 0x1000);
837 @@ -843,7 +832,7 @@ static int __init macfb_init(void)
838 case MAC_MODEL_IIVI:
839 case MAC_MODEL_IIVX:
840 case MAC_MODEL_P600:
841 - strcat( macfb_fix.id, "Brazil built-in" );
842 + strcpy(macfb_fix.id, "Brazil");
843 macfb_setpalette = v8_brazil_setpalette;
844 macfb_defined.activate = FB_ACTIVATE_NOW;
845 v8_brazil_cmap_regs = ioremap(DAC_BASE, 0x1000);
846 @@ -860,7 +849,7 @@ static int __init macfb_init(void)
847 case MAC_MODEL_P460:
848 macfb_setpalette = v8_brazil_setpalette;
849 macfb_defined.activate = FB_ACTIVATE_NOW;
850 - strcat( macfb_fix.id, "Sonora built-in" );
851 + strcpy(macfb_fix.id, "Sonora");
852 v8_brazil_cmap_regs = ioremap(DAC_BASE, 0x1000);
853 break;
854
855 @@ -871,7 +860,7 @@ static int __init macfb_init(void)
856 case MAC_MODEL_IISI:
857 macfb_setpalette = rbv_setpalette;
858 macfb_defined.activate = FB_ACTIVATE_NOW;
859 - strcat( macfb_fix.id, "RBV built-in" );
860 + strcpy(macfb_fix.id, "RBV");
861 rbv_cmap_regs = ioremap(DAC_BASE, 0x1000);
862 break;
863
864 @@ -880,7 +869,7 @@ static int __init macfb_init(void)
865 case MAC_MODEL_C660:
866 macfb_setpalette = civic_setpalette;
867 macfb_defined.activate = FB_ACTIVATE_NOW;
868 - strcat( macfb_fix.id, "Civic built-in" );
869 + strcpy(macfb_fix.id, "Civic");
870 civic_cmap_regs = ioremap(CIVIC_BASE, 0x1000);
871 break;
872
873 @@ -901,7 +890,7 @@ static int __init macfb_init(void)
874 v8_brazil_cmap_regs =
875 ioremap(DAC_BASE, 0x1000);
876 }
877 - strcat( macfb_fix.id, "LC built-in" );
878 + strcpy(macfb_fix.id, "LC");
879 break;
880 /* We think this may be like the LC II */
881 case MAC_MODEL_CCL:
882 @@ -911,18 +900,18 @@ static int __init macfb_init(void)
883 v8_brazil_cmap_regs =
884 ioremap(DAC_BASE, 0x1000);
885 }
886 - strcat( macfb_fix.id, "Color Classic built-in" );
887 + strcpy(macfb_fix.id, "Color Classic");
888 break;
889
890 /* And we *do* mean "weirdos" */
891 case MAC_MODEL_TV:
892 - strcat( macfb_fix.id, "Mac TV built-in" );
893 + strcpy(macfb_fix.id, "Mac TV");
894 break;
895
896 /* These don't have colour, so no need to worry */
897 case MAC_MODEL_SE30:
898 case MAC_MODEL_CLII:
899 - strcat( macfb_fix.id, "Monochrome built-in" );
900 + strcpy(macfb_fix.id, "Monochrome");
901 break;
902
903 /* Powerbooks are particularly difficult. Many of
904 @@ -935,7 +924,7 @@ static int __init macfb_init(void)
905 case MAC_MODEL_PB140:
906 case MAC_MODEL_PB145:
907 case MAC_MODEL_PB170:
908 - strcat( macfb_fix.id, "DDC built-in" );
909 + strcpy(macfb_fix.id, "DDC");
910 break;
911
912 /* Internal is GSC, External (if present) is ViSC */
913 @@ -945,13 +934,13 @@ static int __init macfb_init(void)
914 case MAC_MODEL_PB180:
915 case MAC_MODEL_PB210:
916 case MAC_MODEL_PB230:
917 - strcat( macfb_fix.id, "GSC built-in" );
918 + strcpy(macfb_fix.id, "GSC");
919 break;
920
921 /* Internal is TIM, External is ViSC */
922 case MAC_MODEL_PB165C:
923 case MAC_MODEL_PB180C:
924 - strcat( macfb_fix.id, "TIM built-in" );
925 + strcpy(macfb_fix.id, "TIM");
926 break;
927
928 /* Internal is CSC, External is Keystone+Ariel. */
929 @@ -963,12 +952,12 @@ static int __init macfb_init(void)
930 case MAC_MODEL_PB280C:
931 macfb_setpalette = csc_setpalette;
932 macfb_defined.activate = FB_ACTIVATE_NOW;
933 - strcat( macfb_fix.id, "CSC built-in" );
934 + strcpy(macfb_fix.id, "CSC");
935 csc_cmap_regs = ioremap(CSC_BASE, 0x1000);
936 break;
937
938 default:
939 - strcat( macfb_fix.id, "Unknown/Unsupported built-in" );
940 + strcpy(macfb_fix.id, "Unknown");
941 break;
942 }
943
944 @@ -978,16 +967,23 @@ static int __init macfb_init(void)
945 fb_info.pseudo_palette = pseudo_palette;
946 fb_info.flags = FBINFO_DEFAULT;
947
948 - fb_alloc_cmap(&fb_info.cmap, video_cmap_len, 0);
949 + err = fb_alloc_cmap(&fb_info.cmap, video_cmap_len, 0);
950 + if (err)
951 + goto fail_unmap;
952
953 err = register_framebuffer(&fb_info);
954 - if (!err)
955 - printk("fb%d: %s frame buffer device\n",
956 - fb_info.node, fb_info.fix.id);
957 - else {
958 - iounmap(fb_info.screen_base);
959 - iounmap_macfb();
960 - }
961 + if (err)
962 + goto fail_dealloc;
963 +
964 + printk("fb%d: %s frame buffer device\n",
965 + fb_info.node, fb_info.fix.id);
966 + return 0;
967 +
968 +fail_dealloc:
969 + fb_dealloc_cmap(&fb_info.cmap);
970 +fail_unmap:
971 + iounmap(fb_info.screen_base);
972 + iounmap_macfb();
973 return err;
974 }
975
976 diff --git a/include/asm-x86/vmi.h b/include/asm-x86/vmi.h
977 index b7c0dea..61e08c0 100644
978 --- a/include/asm-x86/vmi.h
979 +++ b/include/asm-x86/vmi.h
980 @@ -223,9 +223,15 @@ struct pci_header {
981 } __attribute__((packed));
982
983 /* Function prototypes for bootstrapping */
984 +#ifdef CONFIG_VMI
985 extern void vmi_init(void);
986 +extern void vmi_activate(void);
987 extern void vmi_bringup(void);
988 -extern void vmi_apply_boot_page_allocations(void);
989 +#else
990 +static inline void vmi_init(void) {}
991 +static inline void vmi_activate(void) {}
992 +static inline void vmi_bringup(void) {}
993 +#endif
994
995 /* State needed to start an application processor in an SMP system. */
996 struct vmi_ap_state {
997 diff --git a/include/linux/can/core.h b/include/linux/can/core.h
998 index e9ca210..f50785a 100644
999 --- a/include/linux/can/core.h
1000 +++ b/include/linux/can/core.h
1001 @@ -19,7 +19,7 @@
1002 #include <linux/skbuff.h>
1003 #include <linux/netdevice.h>
1004
1005 -#define CAN_VERSION "20071116"
1006 +#define CAN_VERSION "20081130"
1007
1008 /* increment this number each time you change some user-space interface */
1009 #define CAN_ABI_VERSION "8"
1010 diff --git a/kernel/sched_clock.c b/kernel/sched_clock.c
1011 index 8178724..e8ab096 100644
1012 --- a/kernel/sched_clock.c
1013 +++ b/kernel/sched_clock.c
1014 @@ -118,13 +118,13 @@ static u64 __update_sched_clock(struct sched_clock_data *scd, u64 now)
1015
1016 /*
1017 * scd->clock = clamp(scd->tick_gtod + delta,
1018 - * max(scd->tick_gtod, scd->clock),
1019 - * max(scd->clock, scd->tick_gtod + TICK_NSEC));
1020 + * max(scd->tick_gtod, scd->clock),
1021 + * scd->tick_gtod + TICK_NSEC);
1022 */
1023
1024 clock = scd->tick_gtod + delta;
1025 min_clock = wrap_max(scd->tick_gtod, scd->clock);
1026 - max_clock = wrap_max(scd->clock, scd->tick_gtod + TICK_NSEC);
1027 + max_clock = scd->tick_gtod + TICK_NSEC;
1028
1029 clock = wrap_max(clock, min_clock);
1030 clock = wrap_min(clock, max_clock);
1031 diff --git a/lib/idr.c b/lib/idr.c
1032 index 7a785a0..1c4f928 100644
1033 --- a/lib/idr.c
1034 +++ b/lib/idr.c
1035 @@ -220,8 +220,14 @@ build_up:
1036 */
1037 while ((layers < (MAX_LEVEL - 1)) && (id >= (1 << (layers*IDR_BITS)))) {
1038 layers++;
1039 - if (!p->count)
1040 + if (!p->count) {
1041 + /* special case: if the tree is currently empty,
1042 + * then we grow the tree by moving the top node
1043 + * upwards.
1044 + */
1045 + p->layer++;
1046 continue;
1047 + }
1048 if (!(new = get_from_free_list(idp))) {
1049 /*
1050 * The allocation failed. If we built part of
1051 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
1052 index ed5cdae..51daae5 100644
1053 --- a/mm/page_alloc.c
1054 +++ b/mm/page_alloc.c
1055 @@ -4224,7 +4224,7 @@ void setup_per_zone_pages_min(void)
1056 for_each_zone(zone) {
1057 u64 tmp;
1058
1059 - spin_lock_irqsave(&zone->lru_lock, flags);
1060 + spin_lock_irqsave(&zone->lock, flags);
1061 tmp = (u64)pages_min * zone->present_pages;
1062 do_div(tmp, lowmem_pages);
1063 if (is_highmem(zone)) {
1064 @@ -4256,7 +4256,7 @@ void setup_per_zone_pages_min(void)
1065 zone->pages_low = zone->pages_min + (tmp >> 2);
1066 zone->pages_high = zone->pages_min + (tmp >> 1);
1067 setup_zone_migrate_reserve(zone);
1068 - spin_unlock_irqrestore(&zone->lru_lock, flags);
1069 + spin_unlock_irqrestore(&zone->lock, flags);
1070 }
1071
1072 /* update totalreserve_pages */
1073 diff --git a/net/can/af_can.c b/net/can/af_can.c
1074 index 8035fbf..150f0b2 100644
1075 --- a/net/can/af_can.c
1076 +++ b/net/can/af_can.c
1077 @@ -319,23 +319,52 @@ static struct dev_rcv_lists *find_dev_rcv_lists(struct net_device *dev)
1078 return n ? d : NULL;
1079 }
1080
1081 +/**
1082 + * find_rcv_list - determine optimal filterlist inside device filter struct
1083 + * @can_id: pointer to CAN identifier of a given can_filter
1084 + * @mask: pointer to CAN mask of a given can_filter
1085 + * @d: pointer to the device filter struct
1086 + *
1087 + * Description:
1088 + * Returns the optimal filterlist to reduce the filter handling in the
1089 + * receive path. This function is called by service functions that need
1090 + * to register or unregister a can_filter in the filter lists.
1091 + *
1092 + * A filter matches in general, when
1093 + *
1094 + * <received_can_id> & mask == can_id & mask
1095 + *
1096 + * so every bit set in the mask (even CAN_EFF_FLAG, CAN_RTR_FLAG) describe
1097 + * relevant bits for the filter.
1098 + *
1099 + * The filter can be inverted (CAN_INV_FILTER bit set in can_id) or it can
1100 + * filter for error frames (CAN_ERR_FLAG bit set in mask). For error frames
1101 + * there is a special filterlist and a special rx path filter handling.
1102 + *
1103 + * Return:
1104 + * Pointer to optimal filterlist for the given can_id/mask pair.
1105 + * Constistency checked mask.
1106 + * Reduced can_id to have a preprocessed filter compare value.
1107 + */
1108 static struct hlist_head *find_rcv_list(canid_t *can_id, canid_t *mask,
1109 struct dev_rcv_lists *d)
1110 {
1111 canid_t inv = *can_id & CAN_INV_FILTER; /* save flag before masking */
1112
1113 - /* filter error frames */
1114 + /* filter for error frames in extra filterlist */
1115 if (*mask & CAN_ERR_FLAG) {
1116 - /* clear CAN_ERR_FLAG in list entry */
1117 + /* clear CAN_ERR_FLAG in filter entry */
1118 *mask &= CAN_ERR_MASK;
1119 return &d->rx[RX_ERR];
1120 }
1121
1122 - /* ensure valid values in can_mask */
1123 - if (*mask & CAN_EFF_FLAG)
1124 - *mask &= (CAN_EFF_MASK | CAN_EFF_FLAG | CAN_RTR_FLAG);
1125 - else
1126 - *mask &= (CAN_SFF_MASK | CAN_RTR_FLAG);
1127 + /* with cleared CAN_ERR_FLAG we have a simple mask/value filterpair */
1128 +
1129 +#define CAN_EFF_RTR_FLAGS (CAN_EFF_FLAG | CAN_RTR_FLAG)
1130 +
1131 + /* ensure valid values in can_mask for 'SFF only' frame filtering */
1132 + if ((*mask & CAN_EFF_FLAG) && !(*can_id & CAN_EFF_FLAG))
1133 + *mask &= (CAN_SFF_MASK | CAN_EFF_RTR_FLAGS);
1134
1135 /* reduce condition testing at receive time */
1136 *can_id &= *mask;
1137 @@ -348,15 +377,19 @@ static struct hlist_head *find_rcv_list(canid_t *can_id, canid_t *mask,
1138 if (!(*mask))
1139 return &d->rx[RX_ALL];
1140
1141 - /* use extra filterset for the subscription of exactly *ONE* can_id */
1142 - if (*can_id & CAN_EFF_FLAG) {
1143 - if (*mask == (CAN_EFF_MASK | CAN_EFF_FLAG)) {
1144 - /* RFC: a use-case for hash-tables in the future? */
1145 - return &d->rx[RX_EFF];
1146 + /* extra filterlists for the subscription of a single non-RTR can_id */
1147 + if (((*mask & CAN_EFF_RTR_FLAGS) == CAN_EFF_RTR_FLAGS)
1148 + && !(*can_id & CAN_RTR_FLAG)) {
1149 +
1150 + if (*can_id & CAN_EFF_FLAG) {
1151 + if (*mask == (CAN_EFF_MASK | CAN_EFF_RTR_FLAGS)) {
1152 + /* RFC: a future use-case for hash-tables? */
1153 + return &d->rx[RX_EFF];
1154 + }
1155 + } else {
1156 + if (*mask == (CAN_SFF_MASK | CAN_EFF_RTR_FLAGS))
1157 + return &d->rx_sff[*can_id];
1158 }
1159 - } else {
1160 - if (*mask == CAN_SFF_MASK)
1161 - return &d->rx_sff[*can_id];
1162 }
1163
1164 /* default: filter via can_id/can_mask */
1165 @@ -589,7 +622,10 @@ static int can_rcv_filter(struct dev_rcv_lists *d, struct sk_buff *skb)
1166 }
1167 }
1168
1169 - /* check CAN_ID specific entries */
1170 + /* check filterlists for single non-RTR can_ids */
1171 + if (can_id & CAN_RTR_FLAG)
1172 + return matches;
1173 +
1174 if (can_id & CAN_EFF_FLAG) {
1175 hlist_for_each_entry_rcu(r, n, &d->rx[RX_EFF], list) {
1176 if (r->can_id == can_id) {
1177 diff --git a/net/can/bcm.c b/net/can/bcm.c
1178 index d0dd382..da0d426 100644
1179 --- a/net/can/bcm.c
1180 +++ b/net/can/bcm.c
1181 @@ -64,10 +64,11 @@
1182 #define BCM_CAN_DLC_MASK 0x0F /* clean private flags in can_dlc by masking */
1183
1184 /* get best masking value for can_rx_register() for a given single can_id */
1185 -#define REGMASK(id) ((id & CAN_RTR_FLAG) | ((id & CAN_EFF_FLAG) ? \
1186 - (CAN_EFF_MASK | CAN_EFF_FLAG) : CAN_SFF_MASK))
1187 +#define REGMASK(id) ((id & CAN_EFF_FLAG) ? \
1188 + (CAN_EFF_MASK | CAN_EFF_FLAG | CAN_RTR_FLAG) : \
1189 + (CAN_SFF_MASK | CAN_EFF_FLAG | CAN_RTR_FLAG))
1190
1191 -#define CAN_BCM_VERSION "20080415"
1192 +#define CAN_BCM_VERSION CAN_VERSION
1193 static __initdata const char banner[] = KERN_INFO
1194 "can: broadcast manager protocol (rev " CAN_BCM_VERSION ")\n";
1195
1196 diff --git a/net/core/dev.c b/net/core/dev.c
1197 index 0ae08d3..5a25896 100644
1198 --- a/net/core/dev.c
1199 +++ b/net/core/dev.c
1200 @@ -3990,7 +3990,7 @@ int register_netdevice(struct net_device *dev)
1201 dev->features &= ~NETIF_F_TSO;
1202 }
1203 if (dev->features & NETIF_F_UFO) {
1204 - if (!(dev->features & NETIF_F_HW_CSUM)) {
1205 + if (!(dev->features & NETIF_F_GEN_CSUM)) {
1206 printk(KERN_ERR "%s: Dropping NETIF_F_UFO since no "
1207 "NETIF_F_HW_CSUM feature.\n",
1208 dev->name);
1209 diff --git a/net/key/af_key.c b/net/key/af_key.c
1210 index b7f5a1c..ef3b4d5 100644
1211 --- a/net/key/af_key.c
1212 +++ b/net/key/af_key.c
1213 @@ -2051,7 +2051,6 @@ static int pfkey_xfrm_policy2msg(struct sk_buff *skb, struct xfrm_policy *xp, in
1214 req_size += socklen * 2;
1215 } else {
1216 size -= 2*socklen;
1217 - socklen = 0;
1218 }
1219 rq = (void*)skb_put(skb, req_size);
1220 pol->sadb_x_policy_len += req_size/8;
1221 diff --git a/net/sunrpc/auth_generic.c b/net/sunrpc/auth_generic.c
1222 index 744b79f..4028502 100644
1223 --- a/net/sunrpc/auth_generic.c
1224 +++ b/net/sunrpc/auth_generic.c
1225 @@ -133,13 +133,29 @@ static int
1226 generic_match(struct auth_cred *acred, struct rpc_cred *cred, int flags)
1227 {
1228 struct generic_cred *gcred = container_of(cred, struct generic_cred, gc_base);
1229 + int i;
1230
1231 if (gcred->acred.uid != acred->uid ||
1232 gcred->acred.gid != acred->gid ||
1233 - gcred->acred.group_info != acred->group_info ||
1234 gcred->acred.machine_cred != acred->machine_cred)
1235 - return 0;
1236 + goto out_nomatch;
1237 +
1238 + /* Optimisation in the case where pointers are identical... */
1239 + if (gcred->acred.group_info == acred->group_info)
1240 + goto out_match;
1241 +
1242 + /* Slow path... */
1243 + if (gcred->acred.group_info->ngroups != acred->group_info->ngroups)
1244 + goto out_nomatch;
1245 + for (i = 0; i < gcred->acred.group_info->ngroups; i++) {
1246 + if (GROUP_AT(gcred->acred.group_info, i) !=
1247 + GROUP_AT(acred->group_info, i))
1248 + goto out_nomatch;
1249 + }
1250 +out_match:
1251 return 1;
1252 +out_nomatch:
1253 + return 0;
1254 }
1255
1256 void __init rpc_init_generic_auth(void)