Contents of /trunk/kernel26-magellan-server/patches-2.6.27-r2/0109-2.6.27.10-all-fixes.patch
Parent Directory | Revision Log
Revision 728 -
(show annotations)
(download)
Tue Dec 23 09:41:15 2008 UTC (15 years, 10 months ago) by niro
File size: 42680 byte(s)
Tue Dec 23 09:41:15 2008 UTC (15 years, 10 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) |