Magellan Linux

Annotation of /trunk/kernel26-alx/patches-2.6.27-r3/0109-2.6.27.10-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1176 - (hide annotations) (download)
Thu Oct 14 15:11:06 2010 UTC (13 years, 7 months ago) by niro
File size: 42680 byte(s)
-2.6.27-alx-r3: new magellan 0.5.2 kernel
1 niro 1176 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)