Magellan Linux

Annotation of /trunk/kernel26-alx/patches-2.6.27-r3/0115-2.6.27.16-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: 80124 byte(s)
-2.6.27-alx-r3: new magellan 0.5.2 kernel
1 niro 1176 diff --git a/Documentation/filesystems/sysfs-pci.txt b/Documentation/filesystems/sysfs-pci.txt
2     index 68ef488..de99749 100644
3     --- a/Documentation/filesystems/sysfs-pci.txt
4     +++ b/Documentation/filesystems/sysfs-pci.txt
5     @@ -9,6 +9,7 @@ that support it. For example, a given bus might look like this:
6     | |-- class
7     | |-- config
8     | |-- device
9     + | |-- enable
10     | |-- irq
11     | |-- local_cpus
12     | |-- resource
13     @@ -32,6 +33,7 @@ files, each with their own function.
14     class PCI class (ascii, ro)
15     config PCI config space (binary, rw)
16     device PCI device (ascii, ro)
17     + enable Whether the device is enabled (ascii, rw)
18     irq IRQ number (ascii, ro)
19     local_cpus nearby CPU mask (cpumask, ro)
20     resource PCI resource host addresses (ascii, ro)
21     @@ -57,10 +59,19 @@ used to do actual device programming from userspace. Note that some platforms
22     don't support mmapping of certain resources, so be sure to check the return
23     value from any attempted mmap.
24    
25     +The 'enable' file provides a counter that indicates how many times the device
26     +has been enabled. If the 'enable' file currently returns '4', and a '1' is
27     +echoed into it, it will then return '5'. Echoing a '0' into it will decrease
28     +the count. Even when it returns to 0, though, some of the initialisation
29     +may not be reversed.
30     +
31     The 'rom' file is special in that it provides read-only access to the device's
32     ROM file, if available. It's disabled by default, however, so applications
33     should write the string "1" to the file to enable it before attempting a read
34     -call, and disable it following the access by writing "0" to the file.
35     +call, and disable it following the access by writing "0" to the file. Note
36     +that the device must be enabled for a rom read to return data succesfully.
37     +In the event a driver is not bound to the device, it can be enabled using the
38     +'enable' file, documented above.
39    
40     Accessing legacy resources through sysfs
41     ----------------------------------------
42     diff --git a/arch/ia64/sn/kernel/io_acpi_init.c b/arch/ia64/sn/kernel/io_acpi_init.c
43     index a15baac..0c3f2a0 100644
44     --- a/arch/ia64/sn/kernel/io_acpi_init.c
45     +++ b/arch/ia64/sn/kernel/io_acpi_init.c
46     @@ -434,7 +434,7 @@ sn_acpi_slot_fixup(struct pci_dev *dev)
47     size = pci_resource_len(dev, PCI_ROM_RESOURCE);
48     addr = ioremap(pcidev_info->pdi_pio_mapped_addr[PCI_ROM_RESOURCE],
49     size);
50     - image_size = pci_get_rom_size(addr, size);
51     + image_size = pci_get_rom_size(dev, addr, size);
52     dev->resource[PCI_ROM_RESOURCE].start = (unsigned long) addr;
53     dev->resource[PCI_ROM_RESOURCE].end =
54     (unsigned long) addr + image_size - 1;
55     diff --git a/arch/ia64/sn/kernel/io_init.c b/arch/ia64/sn/kernel/io_init.c
56     index c3aa851..1a3ed90 100644
57     --- a/arch/ia64/sn/kernel/io_init.c
58     +++ b/arch/ia64/sn/kernel/io_init.c
59     @@ -269,7 +269,7 @@ sn_io_slot_fixup(struct pci_dev *dev)
60    
61     rom = ioremap(pci_resource_start(dev, PCI_ROM_RESOURCE),
62     size + 1);
63     - image_size = pci_get_rom_size(rom, size + 1);
64     + image_size = pci_get_rom_size(dev, rom, size + 1);
65     dev->resource[PCI_ROM_RESOURCE].end =
66     dev->resource[PCI_ROM_RESOURCE].start +
67     image_size - 1;
68     diff --git a/arch/x86/kernel/apic_32.c b/arch/x86/kernel/apic_32.c
69     index f88bd0d..ffc633c 100644
70     --- a/arch/x86/kernel/apic_32.c
71     +++ b/arch/x86/kernel/apic_32.c
72     @@ -1115,7 +1115,7 @@ static int __init detect_init_APIC(void)
73     switch (boot_cpu_data.x86_vendor) {
74     case X86_VENDOR_AMD:
75     if ((boot_cpu_data.x86 == 6 && boot_cpu_data.x86_model > 1) ||
76     - (boot_cpu_data.x86 == 15))
77     + (boot_cpu_data.x86 >= 15))
78     break;
79     goto no_apic;
80     case X86_VENDOR_INTEL:
81     diff --git a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
82     index dd097b8..9943b4c 100644
83     --- a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
84     +++ b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
85     @@ -779,6 +779,9 @@ static int __init acpi_cpufreq_init(void)
86     {
87     int ret;
88    
89     + if (acpi_disabled)
90     + return 0;
91     +
92     dprintk("acpi_cpufreq_init\n");
93    
94     ret = acpi_cpufreq_early_init();
95     diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
96     index da1973b..3384255 100644
97     --- a/arch/x86/mm/fault.c
98     +++ b/arch/x86/mm/fault.c
99     @@ -607,8 +607,6 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)
100    
101     si_code = SEGV_MAPERR;
102    
103     - if (notify_page_fault(regs))
104     - return;
105     if (unlikely(kmmio_fault(regs, address)))
106     return;
107    
108     @@ -638,6 +636,9 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)
109     if (spurious_fault(address, error_code))
110     return;
111    
112     + /* kprobes don't want to hook the spurious faults. */
113     + if (notify_page_fault(regs))
114     + return;
115     /*
116     * Don't take the mm semaphore here. If we fixup a prefetch
117     * fault we could otherwise deadlock.
118     @@ -645,6 +646,9 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)
119     goto bad_area_nosemaphore;
120     }
121    
122     + /* kprobes don't want to hook the spurious faults. */
123     + if (notify_page_fault(regs))
124     + return;
125    
126     #ifdef CONFIG_X86_32
127     /* It's safe to allow irq's after cr2 has been saved and the vmalloc
128     diff --git a/drivers/acpi/dock.c b/drivers/acpi/dock.c
129     index e28469e..eab790f 100644
130     --- a/drivers/acpi/dock.c
131     +++ b/drivers/acpi/dock.c
132     @@ -691,8 +691,14 @@ fdd_out:
133     static ssize_t show_docked(struct device *dev,
134     struct device_attribute *attr, char *buf)
135     {
136     - return snprintf(buf, PAGE_SIZE, "%d\n", dock_present(dock_station));
137     + struct acpi_device *tmp;
138     +
139     + struct dock_station *dock_station = *((struct dock_station **)
140     + dev->platform_data);
141    
142     + if (ACPI_SUCCESS(acpi_bus_get_device(dock_station->handle, &tmp)))
143     + return snprintf(buf, PAGE_SIZE, "1\n");
144     + return snprintf(buf, PAGE_SIZE, "0\n");
145     }
146     static DEVICE_ATTR(docked, S_IRUGO, show_docked, NULL);
147    
148     diff --git a/drivers/acpi/executer/exconfig.c b/drivers/acpi/executer/exconfig.c
149     index 8892b98..331a114 100644
150     --- a/drivers/acpi/executer/exconfig.c
151     +++ b/drivers/acpi/executer/exconfig.c
152     @@ -280,6 +280,7 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
153     struct acpi_walk_state *walk_state)
154     {
155     union acpi_operand_object *ddb_handle;
156     + struct acpi_table_header *table;
157     struct acpi_table_desc table_desc;
158     u32 table_index;
159     acpi_status status;
160     @@ -294,9 +295,8 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
161     switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
162     case ACPI_TYPE_REGION:
163    
164     - ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Load from Region %p %s\n",
165     - obj_desc,
166     - acpi_ut_get_object_type_name(obj_desc)));
167     + ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
168     + "Load table from Region %p\n", obj_desc));
169    
170     /* Region must be system_memory (from ACPI spec) */
171    
172     @@ -316,61 +316,112 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
173     }
174    
175     /*
176     - * We will simply map the memory region for the table. However, the
177     - * memory region is technically not guaranteed to remain stable and
178     - * we may eventually have to copy the table to a local buffer.
179     + * Map the table header and get the actual table length. The region
180     + * length is not guaranteed to be the same as the table length.
181     + */
182     + table = acpi_os_map_memory(obj_desc->region.address,
183     + sizeof(struct acpi_table_header));
184     + if (!table) {
185     + return_ACPI_STATUS(AE_NO_MEMORY);
186     + }
187     +
188     + length = table->length;
189     + acpi_os_unmap_memory(table, sizeof(struct acpi_table_header));
190     +
191     + /* Must have at least an ACPI table header */
192     +
193     + if (length < sizeof(struct acpi_table_header)) {
194     + return_ACPI_STATUS(AE_INVALID_TABLE_LENGTH);
195     + }
196     +
197     + /*
198     + * The memory region is not guaranteed to remain stable and we must
199     + * copy the table to a local buffer. For example, the memory region
200     + * is corrupted after suspend on some machines. Dynamically loaded
201     + * tables are usually small, so this overhead is minimal.
202     */
203     +
204     + /* Allocate a buffer for the table */
205     +
206     + table_desc.pointer = ACPI_ALLOCATE(length);
207     + if (!table_desc.pointer) {
208     + return_ACPI_STATUS(AE_NO_MEMORY);
209     + }
210     +
211     + /* Map the entire table and copy it */
212     +
213     + table = acpi_os_map_memory(obj_desc->region.address, length);
214     + if (!table) {
215     + ACPI_FREE(table_desc.pointer);
216     + return_ACPI_STATUS(AE_NO_MEMORY);
217     + }
218     +
219     + ACPI_MEMCPY(table_desc.pointer, table, length);
220     + acpi_os_unmap_memory(table, length);
221     +
222     table_desc.address = obj_desc->region.address;
223     - table_desc.length = obj_desc->region.length;
224     - table_desc.flags = ACPI_TABLE_ORIGIN_MAPPED;
225     break;
226    
227     case ACPI_TYPE_BUFFER: /* Buffer or resolved region_field */
228    
229     ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
230     - "Load from Buffer or Field %p %s\n", obj_desc,
231     - acpi_ut_get_object_type_name(obj_desc)));
232     -
233     - length = obj_desc->buffer.length;
234     + "Load table from Buffer or Field %p\n",
235     + obj_desc));
236    
237     /* Must have at least an ACPI table header */
238    
239     - if (length < sizeof(struct acpi_table_header)) {
240     + if (obj_desc->buffer.length < sizeof(struct acpi_table_header)) {
241     return_ACPI_STATUS(AE_INVALID_TABLE_LENGTH);
242     }
243    
244     - /* Validate checksum here. It won't get validated in tb_add_table */
245     + /* Get the actual table length from the table header */
246    
247     - status =
248     - acpi_tb_verify_checksum(ACPI_CAST_PTR
249     - (struct acpi_table_header,
250     - obj_desc->buffer.pointer), length);
251     - if (ACPI_FAILURE(status)) {
252     - return_ACPI_STATUS(status);
253     + table =
254     + ACPI_CAST_PTR(struct acpi_table_header,
255     + obj_desc->buffer.pointer);
256     + length = table->length;
257     +
258     + /* Table cannot extend beyond the buffer */
259     +
260     + if (length > obj_desc->buffer.length) {
261     + return_ACPI_STATUS(AE_AML_BUFFER_LIMIT);
262     + }
263     + if (length < sizeof(struct acpi_table_header)) {
264     + return_ACPI_STATUS(AE_INVALID_TABLE_LENGTH);
265     }
266    
267     /*
268     - * We need to copy the buffer since the original buffer could be
269     - * changed or deleted in the future
270     + * Copy the table from the buffer because the buffer could be modified
271     + * or even deleted in the future
272     */
273     table_desc.pointer = ACPI_ALLOCATE(length);
274     if (!table_desc.pointer) {
275     return_ACPI_STATUS(AE_NO_MEMORY);
276     }
277    
278     - ACPI_MEMCPY(table_desc.pointer, obj_desc->buffer.pointer,
279     - length);
280     - table_desc.length = length;
281     - table_desc.flags = ACPI_TABLE_ORIGIN_ALLOCATED;
282     + ACPI_MEMCPY(table_desc.pointer, table, length);
283     + table_desc.address = ACPI_TO_INTEGER(table_desc.pointer);
284     break;
285    
286     default:
287     return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
288     }
289    
290     - /*
291     - * Install the new table into the local data structures
292     - */
293     + /* Validate table checksum (will not get validated in tb_add_table) */
294     +
295     + status = acpi_tb_verify_checksum(table_desc.pointer, length);
296     + if (ACPI_FAILURE(status)) {
297     + ACPI_FREE(table_desc.pointer);
298     + return_ACPI_STATUS(status);
299     + }
300     +
301     + /* Complete the table descriptor */
302     +
303     + table_desc.length = length;
304     + table_desc.flags = ACPI_TABLE_ORIGIN_ALLOCATED;
305     +
306     + /* Install the new table into the local data structures */
307     +
308     status = acpi_tb_add_table(&table_desc, &table_index);
309     if (ACPI_FAILURE(status)) {
310     goto cleanup;
311     @@ -379,7 +430,7 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
312     /*
313     * Add the table to the namespace.
314     *
315     - * Note: We load the table objects relative to the root of the namespace.
316     + * Note: Load the table objects relative to the root of the namespace.
317     * This appears to go against the ACPI specification, but we do it for
318     * compatibility with other ACPI implementations.
319     */
320     @@ -415,7 +466,7 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
321     cleanup:
322     if (ACPI_FAILURE(status)) {
323    
324     - /* Delete allocated buffer or mapping */
325     + /* Delete allocated table buffer */
326    
327     acpi_tb_delete_table(&table_desc);
328     }
329     diff --git a/drivers/acpi/namespace/nsxfeval.c b/drivers/acpi/namespace/nsxfeval.c
330     index 38be586..f3cc376 100644
331     --- a/drivers/acpi/namespace/nsxfeval.c
332     +++ b/drivers/acpi/namespace/nsxfeval.c
333     @@ -45,9 +45,14 @@
334     #include <acpi/acpi.h>
335     #include <acpi/acnamesp.h>
336     #include <acpi/acinterp.h>
337     +#include <acpi/amlcode.h>
338    
339     #define _COMPONENT ACPI_NAMESPACE
340     ACPI_MODULE_NAME("nsxfeval")
341     +
342     +/* Local prototypes */
343     +static void acpi_ns_resolve_references(struct acpi_evaluate_info *info);
344     +
345     #ifdef ACPI_FUTURE_USAGE
346     /*******************************************************************************
347     *
348     @@ -69,6 +74,7 @@ ACPI_MODULE_NAME("nsxfeval")
349     * be valid (non-null)
350     *
351     ******************************************************************************/
352     +
353     acpi_status
354     acpi_evaluate_object_typed(acpi_handle handle,
355     acpi_string pathname,
356     @@ -283,6 +289,10 @@ acpi_evaluate_object(acpi_handle handle,
357    
358     if (ACPI_SUCCESS(status)) {
359    
360     + /* Dereference Index and ref_of references */
361     +
362     + acpi_ns_resolve_references(info);
363     +
364     /* Get the size of the returned object */
365    
366     status =
367     @@ -352,6 +362,74 @@ ACPI_EXPORT_SYMBOL(acpi_evaluate_object)
368    
369     /*******************************************************************************
370     *
371     + * FUNCTION: acpi_ns_resolve_references
372     + *
373     + * PARAMETERS: Info - Evaluation info block
374     + *
375     + * RETURN: Info->return_object is replaced with the dereferenced object
376     + *
377     + * DESCRIPTION: Dereference certain reference objects. Called before an
378     + * internal return object is converted to an external union acpi_object.
379     + *
380     + * Performs an automatic dereference of Index and ref_of reference objects.
381     + * These reference objects are not supported by the union acpi_object, so this is a
382     + * last resort effort to return something useful. Also, provides compatibility
383     + * with other ACPI implementations.
384     + *
385     + * NOTE: does not handle references within returned package objects or nested
386     + * references, but this support could be added later if found to be necessary.
387     + *
388     + ******************************************************************************/
389     +static void acpi_ns_resolve_references(struct acpi_evaluate_info *info)
390     +{
391     + union acpi_operand_object *obj_desc = NULL;
392     + struct acpi_namespace_node *node;
393     +
394     + /* We are interested in reference objects only */
395     +
396     + if (ACPI_GET_OBJECT_TYPE(info->return_object) !=
397     + ACPI_TYPE_LOCAL_REFERENCE) {
398     + return;
399     + }
400     +
401     + /*
402     + * Two types of references are supported - those created by Index and
403     + * ref_of operators. A name reference (AML_NAMEPATH_OP) can be converted
404     + * to an union acpi_object, so it is not dereferenced here. A ddb_handle
405     + * (AML_LOAD_OP) cannot be dereferenced, nor can it be converted to
406     + * an union acpi_object.
407     + */
408     + switch (info->return_object->reference.opcode) {
409     + case AML_INDEX_OP:
410     +
411     + obj_desc = *(info->return_object->reference.where);
412     + break;
413     +
414     + case AML_REF_OF_OP:
415     +
416     + node = info->return_object->reference.object;
417     + if (node) {
418     + obj_desc = node->object;
419     + }
420     + break;
421     +
422     + default:
423     + return;
424     + }
425     +
426     + /* Replace the existing reference object */
427     +
428     + if (obj_desc) {
429     + acpi_ut_add_reference(obj_desc);
430     + acpi_ut_remove_reference(info->return_object);
431     + info->return_object = obj_desc;
432     + }
433     +
434     + return;
435     +}
436     +
437     +/*******************************************************************************
438     + *
439     * FUNCTION: acpi_walk_namespace
440     *
441     * PARAMETERS: Type - acpi_object_type to search for
442     @@ -379,6 +457,7 @@ ACPI_EXPORT_SYMBOL(acpi_evaluate_object)
443     * function, etc.
444     *
445     ******************************************************************************/
446     +
447     acpi_status
448     acpi_walk_namespace(acpi_object_type type,
449     acpi_handle start_object,
450     diff --git a/drivers/acpi/tables.c b/drivers/acpi/tables.c
451     index 775c97a..a885295 100644
452     --- a/drivers/acpi/tables.c
453     +++ b/drivers/acpi/tables.c
454     @@ -293,7 +293,12 @@ static void __init check_multiple_madt(void)
455    
456     int __init acpi_table_init(void)
457     {
458     - acpi_initialize_tables(initial_tables, ACPI_MAX_TABLES, 0);
459     + acpi_status status;
460     +
461     + status = acpi_initialize_tables(initial_tables, ACPI_MAX_TABLES, 0);
462     + if (ACPI_FAILURE(status))
463     + return 1;
464     +
465     check_multiple_madt();
466     return 0;
467     }
468     diff --git a/drivers/acpi/tables/tbutils.c b/drivers/acpi/tables/tbutils.c
469     index 0cc92ef..f5d7aec 100644
470     --- a/drivers/acpi/tables/tbutils.c
471     +++ b/drivers/acpi/tables/tbutils.c
472     @@ -512,10 +512,9 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags)
473     if (ACPI_FAILURE(status)) {
474     ACPI_WARNING((AE_INFO,
475     "Truncating %u table entries!",
476     - (unsigned)
477     - (acpi_gbl_root_table_list.size -
478     - acpi_gbl_root_table_list.
479     - count)));
480     + (unsigned) (table_count -
481     + (acpi_gbl_root_table_list.
482     + count - 2))));
483     break;
484     }
485     }
486     diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
487     index 42e1e84..a953b5d 100644
488     --- a/drivers/acpi/video.c
489     +++ b/drivers/acpi/video.c
490     @@ -36,6 +36,7 @@
491     #include <linux/backlight.h>
492     #include <linux/thermal.h>
493     #include <linux/video_output.h>
494     +#include <linux/sort.h>
495     #include <asm/uaccess.h>
496    
497     #include <acpi/acpi_bus.h>
498     @@ -632,6 +633,16 @@ acpi_video_bus_DOS(struct acpi_video_bus *video, int bios_flag, int lcd_flag)
499     }
500    
501     /*
502     + * Simple comparison function used to sort backlight levels.
503     + */
504     +
505     +static int
506     +acpi_video_cmp_level(const void *a, const void *b)
507     +{
508     + return *(int *)a - *(int *)b;
509     +}
510     +
511     +/*
512     * Arg:
513     * device : video output device (LCD, CRT, ..)
514     *
515     @@ -682,6 +693,10 @@ acpi_video_init_brightness(struct acpi_video_device *device)
516     count++;
517     }
518    
519     + /* don't sort the first two brightness levels */
520     + sort(&br->levels[2], count - 2, sizeof(br->levels[2]),
521     + acpi_video_cmp_level, NULL);
522     +
523     if (count < 2)
524     goto out_free_levels;
525    
526     @@ -997,7 +1012,7 @@ acpi_video_device_brightness_seq_show(struct seq_file *seq, void *offset)
527     }
528    
529     seq_printf(seq, "levels: ");
530     - for (i = 0; i < dev->brightness->count; i++)
531     + for (i = 2; i < dev->brightness->count; i++)
532     seq_printf(seq, " %d", dev->brightness->levels[i]);
533     seq_printf(seq, "\ncurrent: %d\n", dev->brightness->curr);
534    
535     @@ -1036,7 +1051,7 @@ acpi_video_device_write_brightness(struct file *file,
536     return -EFAULT;
537    
538     /* validate through the list of available levels */
539     - for (i = 0; i < dev->brightness->count; i++)
540     + for (i = 2; i < dev->brightness->count; i++)
541     if (level == dev->brightness->levels[i]) {
542     if (ACPI_SUCCESS
543     (acpi_video_device_lcd_set_level(dev, level)))
544     @@ -1689,7 +1704,7 @@ acpi_video_get_next_level(struct acpi_video_device *device,
545     max = max_below = 0;
546     min = min_above = 255;
547     /* Find closest level to level_current */
548     - for (i = 0; i < device->brightness->count; i++) {
549     + for (i = 2; i < device->brightness->count; i++) {
550     l = device->brightness->levels[i];
551     if (abs(l - level_current) < abs(delta)) {
552     delta = l - level_current;
553     @@ -1699,7 +1714,7 @@ acpi_video_get_next_level(struct acpi_video_device *device,
554     }
555     /* Ajust level_current to closest available level */
556     level_current += delta;
557     - for (i = 0; i < device->brightness->count; i++) {
558     + for (i = 2; i < device->brightness->count; i++) {
559     l = device->brightness->levels[i];
560     if (l < min)
561     min = l;
562     @@ -1983,6 +1998,12 @@ static int acpi_video_bus_add(struct acpi_device *device)
563     device->pnp.bus_id[3] = '0' + instance;
564     instance ++;
565     }
566     + /* a hack to fix the duplicate name "VGA" problem on Pa 3553 */
567     + if (!strcmp(device->pnp.bus_id, "VGA")) {
568     + if (instance)
569     + device->pnp.bus_id[3] = '0' + instance;
570     + instance++;
571     + }
572    
573     video->device = device;
574     strcpy(acpi_device_name(device), ACPI_VIDEO_BUS_NAME);
575     diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
576     index f1fe749..5eb23fa 100644
577     --- a/drivers/char/agp/intel-agp.c
578     +++ b/drivers/char/agp/intel-agp.c
579     @@ -40,6 +40,8 @@
580     #define PCI_DEVICE_ID_INTEL_Q45_IG 0x2E12
581     #define PCI_DEVICE_ID_INTEL_G45_HB 0x2E20
582     #define PCI_DEVICE_ID_INTEL_G45_IG 0x2E22
583     +#define PCI_DEVICE_ID_INTEL_G41_HB 0x2E30
584     +#define PCI_DEVICE_ID_INTEL_G41_IG 0x2E32
585    
586     /* cover 915 and 945 variants */
587     #define IS_I915 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_E7221_HB || \
588     @@ -63,7 +65,8 @@
589     #define IS_G4X (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGD_E_HB || \
590     agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_Q45_HB || \
591     agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_G45_HB || \
592     - agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_GM45_HB)
593     + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_GM45_HB || \
594     + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_G41_HB)
595    
596     extern int agp_memory_reserved;
597    
598     @@ -214,8 +217,8 @@ static int intel_i810_configure(void)
599     if (agp_bridge->driver->needs_scratch_page) {
600     for (i = 0; i < current_size->num_entries; i++) {
601     writel(agp_bridge->scratch_page, intel_private.registers+I810_PTE_BASE+(i*4));
602     - readl(intel_private.registers+I810_PTE_BASE+(i*4)); /* PCI posting. */
603     }
604     + readl(intel_private.registers+I810_PTE_BASE+((i-1)*4)); /* PCI posting. */
605     }
606     global_cache_flush();
607     return 0;
608     @@ -775,8 +778,8 @@ static int intel_i830_configure(void)
609     if (agp_bridge->driver->needs_scratch_page) {
610     for (i = intel_private.gtt_entries; i < current_size->num_entries; i++) {
611     writel(agp_bridge->scratch_page, intel_private.registers+I810_PTE_BASE+(i*4));
612     - readl(intel_private.registers+I810_PTE_BASE+(i*4)); /* PCI Posting. */
613     }
614     + readl(intel_private.registers+I810_PTE_BASE+((i-1)*4)); /* PCI Posting. */
615     }
616    
617     global_cache_flush();
618     @@ -991,8 +994,8 @@ static int intel_i915_configure(void)
619     if (agp_bridge->driver->needs_scratch_page) {
620     for (i = intel_private.gtt_entries; i < current_size->num_entries; i++) {
621     writel(agp_bridge->scratch_page, intel_private.gtt+i);
622     - readl(intel_private.gtt+i); /* PCI Posting. */
623     }
624     + readl(intel_private.gtt+i-1); /* PCI Posting. */
625     }
626    
627     global_cache_flush();
628     @@ -1196,6 +1199,7 @@ static void intel_i965_get_gtt_range(int *gtt_offset, int *gtt_size)
629     case PCI_DEVICE_ID_INTEL_IGD_E_HB:
630     case PCI_DEVICE_ID_INTEL_Q45_HB:
631     case PCI_DEVICE_ID_INTEL_G45_HB:
632     + case PCI_DEVICE_ID_INTEL_G41_HB:
633     *gtt_offset = *gtt_size = MB(2);
634     break;
635     default:
636     @@ -2128,13 +2132,15 @@ static const struct intel_driver_description {
637     { PCI_DEVICE_ID_INTEL_Q33_HB, PCI_DEVICE_ID_INTEL_Q33_IG, 0, "Q33",
638     NULL, &intel_g33_driver },
639     { PCI_DEVICE_ID_INTEL_GM45_HB, PCI_DEVICE_ID_INTEL_GM45_IG, 0,
640     - "Mobile Intel? GM45 Express", NULL, &intel_i965_driver },
641     + "Mobile Intel® GM45 Express", NULL, &intel_i965_driver },
642     { PCI_DEVICE_ID_INTEL_IGD_E_HB, PCI_DEVICE_ID_INTEL_IGD_E_IG, 0,
643     "Intel Integrated Graphics Device", NULL, &intel_i965_driver },
644     { PCI_DEVICE_ID_INTEL_Q45_HB, PCI_DEVICE_ID_INTEL_Q45_IG, 0,
645     "Q45/Q43", NULL, &intel_i965_driver },
646     { PCI_DEVICE_ID_INTEL_G45_HB, PCI_DEVICE_ID_INTEL_G45_IG, 0,
647     "G45/G43", NULL, &intel_i965_driver },
648     + { PCI_DEVICE_ID_INTEL_G41_HB, PCI_DEVICE_ID_INTEL_G41_IG, 0,
649     + "G41", NULL, &intel_i965_driver },
650     { 0, 0, 0, NULL, NULL, NULL }
651     };
652    
653     @@ -2332,6 +2338,7 @@ static struct pci_device_id agp_intel_pci_table[] = {
654     ID(PCI_DEVICE_ID_INTEL_IGD_E_HB),
655     ID(PCI_DEVICE_ID_INTEL_Q45_HB),
656     ID(PCI_DEVICE_ID_INTEL_G45_HB),
657     + ID(PCI_DEVICE_ID_INTEL_G41_HB),
658     { }
659     };
660    
661     diff --git a/drivers/char/vt.c b/drivers/char/vt.c
662     index d429499..372267d 100644
663     --- a/drivers/char/vt.c
664     +++ b/drivers/char/vt.c
665     @@ -301,7 +301,7 @@ static void scrup(struct vc_data *vc, unsigned int t, unsigned int b, int nr)
666     d = (unsigned short *)(vc->vc_origin + vc->vc_size_row * t);
667     s = (unsigned short *)(vc->vc_origin + vc->vc_size_row * (t + nr));
668     scr_memmovew(d, s, (b - t - nr) * vc->vc_size_row);
669     - scr_memsetw(d + (b - t - nr) * vc->vc_cols, vc->vc_scrl_erase_char,
670     + scr_memsetw(d + (b - t - nr) * vc->vc_cols, vc->vc_video_erase_char,
671     vc->vc_size_row * nr);
672     }
673    
674     @@ -319,7 +319,7 @@ static void scrdown(struct vc_data *vc, unsigned int t, unsigned int b, int nr)
675     s = (unsigned short *)(vc->vc_origin + vc->vc_size_row * t);
676     step = vc->vc_cols * nr;
677     scr_memmovew(s + step, s, (b - t - nr) * vc->vc_size_row);
678     - scr_memsetw(s, vc->vc_scrl_erase_char, 2 * step);
679     + scr_memsetw(s, vc->vc_video_erase_char, 2 * step);
680     }
681    
682     static void do_update_region(struct vc_data *vc, unsigned long start, int count)
683     @@ -434,7 +434,6 @@ static void update_attr(struct vc_data *vc)
684     vc->vc_blink, vc->vc_underline,
685     vc->vc_reverse ^ vc->vc_decscnm, vc->vc_italic);
686     vc->vc_video_erase_char = (build_attr(vc, vc->vc_color, 1, vc->vc_blink, 0, vc->vc_decscnm, 0) << 8) | ' ';
687     - vc->vc_scrl_erase_char = (build_attr(vc, vc->vc_def_color, 1, false, false, vc->vc_decscnm, false) << 8) | ' ';
688     }
689    
690     /* Note: inverting the screen twice should revert to the original state */
691     diff --git a/drivers/firewire/fw-ohci.c b/drivers/firewire/fw-ohci.c
692     index 595759c..cd589ca 100644
693     --- a/drivers/firewire/fw-ohci.c
694     +++ b/drivers/firewire/fw-ohci.c
695     @@ -226,7 +226,7 @@ static inline struct fw_ohci *fw_ohci(struct fw_card *card)
696     #define CONTEXT_DEAD 0x0800
697     #define CONTEXT_ACTIVE 0x0400
698    
699     -#define OHCI1394_MAX_AT_REQ_RETRIES 0x2
700     +#define OHCI1394_MAX_AT_REQ_RETRIES 0xf
701     #define OHCI1394_MAX_AT_RESP_RETRIES 0x2
702     #define OHCI1394_MAX_PHYS_RESP_RETRIES 0x8
703    
704     diff --git a/drivers/firewire/fw-sbp2.c b/drivers/firewire/fw-sbp2.c
705     index 64142c1..716370c 100644
706     --- a/drivers/firewire/fw-sbp2.c
707     +++ b/drivers/firewire/fw-sbp2.c
708     @@ -350,15 +350,17 @@ static const struct {
709     .model = ~0,
710     .workarounds = SBP2_WORKAROUND_128K_MAX_TRANS,
711     },
712     -
713     /*
714     - * There are iPods (2nd gen, 3rd gen) with model_id == 0, but
715     - * these iPods do not feature the read_capacity bug according
716     - * to one report. Read_capacity behaviour as well as model_id
717     - * could change due to Apple-supplied firmware updates though.
718     + * iPod 2nd generation: needs 128k max transfer size workaround
719     + * iPod 3rd generation: needs fix capacity workaround
720     */
721     -
722     - /* iPod 4th generation. */ {
723     + {
724     + .firmware_revision = 0x0a2700,
725     + .model = 0x000000,
726     + .workarounds = SBP2_WORKAROUND_128K_MAX_TRANS |
727     + SBP2_WORKAROUND_FIX_CAPACITY,
728     + },
729     + /* iPod 4th generation */ {
730     .firmware_revision = 0x0a2700,
731     .model = 0x000021,
732     .workarounds = SBP2_WORKAROUND_FIX_CAPACITY,
733     @@ -1293,6 +1295,19 @@ static struct fw_driver sbp2_driver = {
734     .id_table = sbp2_id_table,
735     };
736    
737     +static void sbp2_unmap_scatterlist(struct device *card_device,
738     + struct sbp2_command_orb *orb)
739     +{
740     + if (scsi_sg_count(orb->cmd))
741     + dma_unmap_sg(card_device, scsi_sglist(orb->cmd),
742     + scsi_sg_count(orb->cmd),
743     + orb->cmd->sc_data_direction);
744     +
745     + if (orb->request.misc & cpu_to_be32(COMMAND_ORB_PAGE_TABLE_PRESENT))
746     + dma_unmap_single(card_device, orb->page_table_bus,
747     + sizeof(orb->page_table), DMA_TO_DEVICE);
748     +}
749     +
750     static unsigned int
751     sbp2_status_to_sense_data(u8 *sbp2_status, u8 *sense_data)
752     {
753     @@ -1372,15 +1387,7 @@ complete_command_orb(struct sbp2_orb *base_orb, struct sbp2_status *status)
754    
755     dma_unmap_single(device->card->device, orb->base.request_bus,
756     sizeof(orb->request), DMA_TO_DEVICE);
757     -
758     - if (scsi_sg_count(orb->cmd) > 0)
759     - dma_unmap_sg(device->card->device, scsi_sglist(orb->cmd),
760     - scsi_sg_count(orb->cmd),
761     - orb->cmd->sc_data_direction);
762     -
763     - if (orb->page_table_bus != 0)
764     - dma_unmap_single(device->card->device, orb->page_table_bus,
765     - sizeof(orb->page_table), DMA_TO_DEVICE);
766     + sbp2_unmap_scatterlist(device->card->device, orb);
767    
768     orb->cmd->result = result;
769     orb->done(orb->cmd);
770     @@ -1530,8 +1537,10 @@ static int sbp2_scsi_queuecommand(struct scsi_cmnd *cmd, scsi_done_fn_t done)
771     orb->base.request_bus =
772     dma_map_single(device->card->device, &orb->request,
773     sizeof(orb->request), DMA_TO_DEVICE);
774     - if (dma_mapping_error(device->card->device, orb->base.request_bus))
775     + if (dma_mapping_error(device->card->device, orb->base.request_bus)) {
776     + sbp2_unmap_scatterlist(device->card->device, orb);
777     goto out;
778     + }
779    
780     sbp2_send_orb(&orb->base, lu, lu->tgt->node_id, lu->generation,
781     lu->command_block_agent_address + SBP2_ORB_POINTER);
782     diff --git a/drivers/ieee1394/ohci1394.h b/drivers/ieee1394/ohci1394.h
783     index 4320bf0..7fb8ab9 100644
784     --- a/drivers/ieee1394/ohci1394.h
785     +++ b/drivers/ieee1394/ohci1394.h
786     @@ -26,7 +26,7 @@
787    
788     #define OHCI1394_DRIVER_NAME "ohci1394"
789    
790     -#define OHCI1394_MAX_AT_REQ_RETRIES 0x2
791     +#define OHCI1394_MAX_AT_REQ_RETRIES 0xf
792     #define OHCI1394_MAX_AT_RESP_RETRIES 0x2
793     #define OHCI1394_MAX_PHYS_RESP_RETRIES 0x8
794     #define OHCI1394_MAX_SELF_ID_ERRORS 16
795     diff --git a/drivers/ieee1394/sbp2.c b/drivers/ieee1394/sbp2.c
796     index bad46ea..0c0fdbb 100644
797     --- a/drivers/ieee1394/sbp2.c
798     +++ b/drivers/ieee1394/sbp2.c
799     @@ -395,6 +395,16 @@ static const struct {
800     .model_id = SBP2_ROM_VALUE_WILDCARD,
801     .workarounds = SBP2_WORKAROUND_128K_MAX_TRANS,
802     },
803     + /*
804     + * iPod 2nd generation: needs 128k max transfer size workaround
805     + * iPod 3rd generation: needs fix capacity workaround
806     + */
807     + {
808     + .firmware_revision = 0x0a2700,
809     + .model_id = 0x000000,
810     + .workarounds = SBP2_WORKAROUND_128K_MAX_TRANS |
811     + SBP2_WORKAROUND_FIX_CAPACITY,
812     + },
813     /* iPod 4th generation */ {
814     .firmware_revision = 0x0a2700,
815     .model_id = 0x000021,
816     diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
817     index c2fcf28..61f5753 100644
818     --- a/drivers/md/dm-mpath.c
819     +++ b/drivers/md/dm-mpath.c
820     @@ -427,13 +427,13 @@ static void process_queued_ios(struct work_struct *work)
821     __choose_pgpath(m);
822    
823     pgpath = m->current_pgpath;
824     - m->pgpath_to_activate = m->current_pgpath;
825    
826     if ((pgpath && !m->queue_io) ||
827     (!pgpath && !m->queue_if_no_path))
828     must_queue = 0;
829    
830     - if (m->pg_init_required && !m->pg_init_in_progress) {
831     + if (m->pg_init_required && !m->pg_init_in_progress && pgpath) {
832     + m->pgpath_to_activate = pgpath;
833     m->pg_init_count++;
834     m->pg_init_required = 0;
835     m->pg_init_in_progress = 1;
836     diff --git a/drivers/md/md.c b/drivers/md/md.c
837     index fe6eccd..60f3e59 100644
838     --- a/drivers/md/md.c
839     +++ b/drivers/md/md.c
840     @@ -1454,6 +1454,11 @@ static int bind_rdev_to_array(mdk_rdev_t * rdev, mddev_t * mddev)
841     if (find_rdev_nr(mddev, rdev->desc_nr))
842     return -EBUSY;
843     }
844     + if (mddev->max_disks && rdev->desc_nr >= mddev->max_disks) {
845     + printk(KERN_WARNING "md: %s: array is limited to %d devices\n",
846     + mdname(mddev), mddev->max_disks);
847     + return -EBUSY;
848     + }
849     bdevname(rdev->bdev,b);
850     while ( (s=strchr(b, '/')) != NULL)
851     *s = '!';
852     @@ -2362,6 +2367,15 @@ static void analyze_sbs(mddev_t * mddev)
853    
854     i = 0;
855     rdev_for_each(rdev, tmp, mddev) {
856     + if (rdev->desc_nr >= mddev->max_disks ||
857     + i > mddev->max_disks) {
858     + printk(KERN_WARNING
859     + "md: %s: %s: only %d devices permitted\n",
860     + mdname(mddev), bdevname(rdev->bdev, b),
861     + mddev->max_disks);
862     + kick_rdev_from_array(rdev);
863     + continue;
864     + }
865     if (rdev != freshest)
866     if (super_types[mddev->major_version].
867     validate_super(mddev, rdev)) {
868     @@ -2728,9 +2742,9 @@ array_state_store(mddev_t *mddev, const char *buf, size_t len)
869     break;
870     case read_auto:
871     if (mddev->pers) {
872     - if (mddev->ro != 1)
873     + if (mddev->ro == 0)
874     err = do_md_stop(mddev, 1, 0);
875     - else
876     + else if (mddev->ro == 1)
877     err = restart_array(mddev);
878     if (err == 0) {
879     mddev->ro = 2;
880     @@ -2946,7 +2960,13 @@ metadata_store(mddev_t *mddev, const char *buf, size_t len)
881     {
882     int major, minor;
883     char *e;
884     - if (!list_empty(&mddev->disks))
885     + /* Changing the details of 'external' metadata is
886     + * always permitted. Otherwise there must be
887     + * no devices attached to the array.
888     + */
889     + if (mddev->external && strncmp(buf, "external:", 9) == 0)
890     + ;
891     + else if (!list_empty(&mddev->disks))
892     return -EBUSY;
893    
894     if (cmd_match(buf, "none")) {
895     @@ -4450,13 +4470,6 @@ static int hot_add_disk(mddev_t * mddev, dev_t dev)
896     * noticed in interrupt contexts ...
897     */
898    
899     - if (rdev->desc_nr == mddev->max_disks) {
900     - printk(KERN_WARNING "%s: can not hot-add to full array!\n",
901     - mdname(mddev));
902     - err = -EBUSY;
903     - goto abort_unbind_export;
904     - }
905     -
906     rdev->raid_disk = -1;
907    
908     md_update_sb(mddev, 1);
909     @@ -4470,9 +4483,6 @@ static int hot_add_disk(mddev_t * mddev, dev_t dev)
910     md_new_event(mddev);
911     return 0;
912    
913     -abort_unbind_export:
914     - unbind_rdev_from_array(rdev);
915     -
916     abort_export:
917     export_rdev(rdev);
918     return err;
919     diff --git a/drivers/misc/eeepc-laptop.c b/drivers/misc/eeepc-laptop.c
920     index 616bcbd..13a8996 100644
921     --- a/drivers/misc/eeepc-laptop.c
922     +++ b/drivers/misc/eeepc-laptop.c
923     @@ -381,7 +381,8 @@ static void notify_wlan(u32 *event)
924     static void notify_brn(void)
925     {
926     struct backlight_device *bd = eeepc_backlight_device;
927     - bd->props.brightness = read_brightness(bd);
928     + if (bd)
929     + bd->props.brightness = read_brightness(bd);
930     }
931    
932     static void eeepc_hotk_notify(acpi_handle handle, u32 event, void *data)
933     diff --git a/drivers/misc/sgi-xp/xpc.h b/drivers/misc/sgi-xp/xpc.h
934     index 619208d..bcf3782 100644
935     --- a/drivers/misc/sgi-xp/xpc.h
936     +++ b/drivers/misc/sgi-xp/xpc.h
937     @@ -3,7 +3,7 @@
938     * License. See the file "COPYING" in the main directory of this archive
939     * for more details.
940     *
941     - * Copyright (c) 2004-2008 Silicon Graphics, Inc. All Rights Reserved.
942     + * Copyright (c) 2004-2009 Silicon Graphics, Inc. All Rights Reserved.
943     */
944    
945     /*
946     @@ -502,7 +502,8 @@ struct xpc_channel_uv {
947     /* partition's notify mq */
948    
949     struct xpc_send_msg_slot_uv *send_msg_slots;
950     - struct xpc_notify_mq_msg_uv *recv_msg_slots;
951     + void *recv_msg_slots; /* each slot will hold a xpc_notify_mq_msg_uv */
952     + /* structure plus the user's payload */
953    
954     struct xpc_fifo_head_uv msg_slot_free_list;
955     struct xpc_fifo_head_uv recv_msg_list; /* deliverable payloads */
956     diff --git a/drivers/misc/sgi-xp/xpc_uv.c b/drivers/misc/sgi-xp/xpc_uv.c
957     index b8f8d50..1bb8bc5 100644
958     --- a/drivers/misc/sgi-xp/xpc_uv.c
959     +++ b/drivers/misc/sgi-xp/xpc_uv.c
960     @@ -3,7 +3,7 @@
961     * License. See the file "COPYING" in the main directory of this archive
962     * for more details.
963     *
964     - * Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved.
965     + * Copyright (c) 2008-2009 Silicon Graphics, Inc. All Rights Reserved.
966     */
967    
968     /*
969     @@ -825,8 +825,8 @@ xpc_allocate_recv_msg_slot_uv(struct xpc_channel *ch)
970     continue;
971    
972     for (entry = 0; entry < nentries; entry++) {
973     - msg_slot = ch_uv->recv_msg_slots + entry *
974     - ch->entry_size;
975     + msg_slot = ch_uv->recv_msg_slots +
976     + entry * ch->entry_size;
977    
978     msg_slot->hdr.msg_slot_number = entry;
979     }
980     @@ -1123,9 +1123,8 @@ xpc_handle_notify_mq_msg_uv(struct xpc_partition *part,
981     /* we're dealing with a normal message sent via the notify_mq */
982     ch_uv = &ch->sn.uv;
983    
984     - msg_slot = (struct xpc_notify_mq_msg_uv *)((u64)ch_uv->recv_msg_slots +
985     - (msg->hdr.msg_slot_number % ch->remote_nentries) *
986     - ch->entry_size);
987     + msg_slot = ch_uv->recv_msg_slots +
988     + (msg->hdr.msg_slot_number % ch->remote_nentries) * ch->entry_size;
989    
990     BUG_ON(msg->hdr.msg_slot_number != msg_slot->hdr.msg_slot_number);
991     BUG_ON(msg_slot->hdr.size != 0);
992     diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
993     index 872ea58..6b96357 100644
994     --- a/drivers/net/e1000/e1000_main.c
995     +++ b/drivers/net/e1000/e1000_main.c
996     @@ -31,7 +31,7 @@
997    
998     char e1000_driver_name[] = "e1000";
999     static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
1000     -#define DRV_VERSION "7.3.20-k3-NAPI"
1001     +#define DRV_VERSION "7.3.21-k3-NAPI"
1002     const char e1000_driver_version[] = DRV_VERSION;
1003     static const char e1000_copyright[] = "Copyright (c) 1999-2006 Intel Corporation.";
1004    
1005     @@ -927,7 +927,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
1006     err = pci_enable_device(pdev);
1007     } else {
1008     bars = pci_select_bars(pdev, IORESOURCE_MEM);
1009     - err = pci_enable_device(pdev);
1010     + err = pci_enable_device_mem(pdev);
1011     }
1012     if (err)
1013     return err;
1014     @@ -3835,7 +3835,7 @@ static irqreturn_t e1000_intr(int irq, void *data)
1015     struct e1000_hw *hw = &adapter->hw;
1016     u32 rctl, icr = er32(ICR);
1017    
1018     - if (unlikely(!icr))
1019     + if (unlikely((!icr) || test_bit(__E1000_RESETTING, &adapter->flags)))
1020     return IRQ_NONE; /* Not our interrupt */
1021    
1022     /* IMS will not auto-mask if INT_ASSERTED is not set, and if it is
1023     diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
1024     index 6e42b5a..5790194 100644
1025     --- a/drivers/net/usb/hso.c
1026     +++ b/drivers/net/usb/hso.c
1027     @@ -2047,7 +2047,7 @@ static void hso_create_rfkill(struct hso_device *hso_dev,
1028     char *rfkn;
1029    
1030     hso_net->rfkill = rfkill_allocate(&interface_to_usbdev(interface)->dev,
1031     - RFKILL_TYPE_WLAN);
1032     + RFKILL_TYPE_WWAN);
1033     if (!hso_net->rfkill) {
1034     dev_err(dev, "%s - Out of memory", __func__);
1035     return;
1036     diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c
1037     index dcce354..966c86c 100644
1038     --- a/drivers/net/wireless/ipw2200.c
1039     +++ b/drivers/net/wireless/ipw2200.c
1040     @@ -4346,7 +4346,8 @@ static void ipw_handle_missed_beacon(struct ipw_priv *priv,
1041     return;
1042     }
1043    
1044     - if (priv->status & STATUS_SCANNING) {
1045     + if (priv->status & STATUS_SCANNING &&
1046     + missed_count > IPW_MB_SCAN_CANCEL_THRESHOLD) {
1047     /* Stop scan to keep fw from getting
1048     * stuck (only if we aren't roaming --
1049     * otherwise we'll never scan more than 2 or 3
1050     @@ -6276,6 +6277,20 @@ static void ipw_add_scan_channels(struct ipw_priv *priv,
1051     }
1052     }
1053    
1054     +static int ipw_passive_dwell_time(struct ipw_priv *priv)
1055     +{
1056     + /* staying on passive channels longer than the DTIM interval during a
1057     + * scan, while associated, causes the firmware to cancel the scan
1058     + * without notification. Hence, don't stay on passive channels longer
1059     + * than the beacon interval.
1060     + */
1061     + if (priv->status & STATUS_ASSOCIATED
1062     + && priv->assoc_network->beacon_interval > 10)
1063     + return priv->assoc_network->beacon_interval - 10;
1064     + else
1065     + return 120;
1066     +}
1067     +
1068     static int ipw_request_scan_helper(struct ipw_priv *priv, int type, int direct)
1069     {
1070     struct ipw_scan_request_ext scan;
1071     @@ -6319,16 +6334,16 @@ static int ipw_request_scan_helper(struct ipw_priv *priv, int type, int direct)
1072     scan.full_scan_index = cpu_to_le32(ieee80211_get_scans(priv->ieee));
1073    
1074     if (type == IW_SCAN_TYPE_PASSIVE) {
1075     - IPW_DEBUG_WX("use passive scanning\n");
1076     - scan_type = IPW_SCAN_PASSIVE_FULL_DWELL_SCAN;
1077     + IPW_DEBUG_WX("use passive scanning\n");
1078     + scan_type = IPW_SCAN_PASSIVE_FULL_DWELL_SCAN;
1079     scan.dwell_time[IPW_SCAN_PASSIVE_FULL_DWELL_SCAN] =
1080     - cpu_to_le16(120);
1081     + cpu_to_le16(ipw_passive_dwell_time(priv));
1082     ipw_add_scan_channels(priv, &scan, scan_type);
1083     goto send_request;
1084     }
1085    
1086     /* Use active scan by default. */
1087     - if (priv->config & CFG_SPEED_SCAN)
1088     + if (priv->config & CFG_SPEED_SCAN)
1089     scan.dwell_time[IPW_SCAN_ACTIVE_BROADCAST_SCAN] =
1090     cpu_to_le16(30);
1091     else
1092     @@ -6338,7 +6353,8 @@ static int ipw_request_scan_helper(struct ipw_priv *priv, int type, int direct)
1093     scan.dwell_time[IPW_SCAN_ACTIVE_BROADCAST_AND_DIRECT_SCAN] =
1094     cpu_to_le16(20);
1095    
1096     - scan.dwell_time[IPW_SCAN_PASSIVE_FULL_DWELL_SCAN] = cpu_to_le16(120);
1097     + scan.dwell_time[IPW_SCAN_PASSIVE_FULL_DWELL_SCAN] =
1098     + cpu_to_le16(ipw_passive_dwell_time(priv));
1099     scan.dwell_time[IPW_SCAN_ACTIVE_DIRECT_SCAN] = cpu_to_le16(20);
1100    
1101     #ifdef CONFIG_IPW2200_MONITOR
1102     diff --git a/drivers/net/wireless/ipw2200.h b/drivers/net/wireless/ipw2200.h
1103     index d4ab28b..60b4e71 100644
1104     --- a/drivers/net/wireless/ipw2200.h
1105     +++ b/drivers/net/wireless/ipw2200.h
1106     @@ -244,6 +244,7 @@ enum connection_manager_assoc_states {
1107     #define HOST_NOTIFICATION_S36_MEASUREMENT_REFUSED 31
1108    
1109     #define HOST_NOTIFICATION_STATUS_BEACON_MISSING 1
1110     +#define IPW_MB_SCAN_CANCEL_THRESHOLD 3
1111     #define IPW_MB_ROAMING_THRESHOLD_MIN 1
1112     #define IPW_MB_ROAMING_THRESHOLD_DEFAULT 8
1113     #define IPW_MB_ROAMING_THRESHOLD_MAX 30
1114     diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
1115     index 77baff0..3f2309f 100644
1116     --- a/drivers/pci/pci-sysfs.c
1117     +++ b/drivers/pci/pci-sysfs.c
1118     @@ -694,8 +694,8 @@ pci_read_rom(struct kobject *kobj, struct bin_attribute *bin_attr,
1119     return -EINVAL;
1120    
1121     rom = pci_map_rom(pdev, &size); /* size starts out as PCI window size */
1122     - if (!rom)
1123     - return 0;
1124     + if (!rom || !size)
1125     + return -EIO;
1126    
1127     if (off >= size)
1128     count = 0;
1129     diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
1130     index 8a82a62..e4df84b 100644
1131     --- a/drivers/pci/pcie/aspm.c
1132     +++ b/drivers/pci/pcie/aspm.c
1133     @@ -713,9 +713,9 @@ void pcie_aspm_exit_link_state(struct pci_dev *pdev)
1134    
1135     /*
1136     * All PCIe functions are in one slot, remove one function will remove
1137     - * the the whole slot, so just wait
1138     + * the whole slot, so just wait until we are the last function left.
1139     */
1140     - if (!list_empty(&parent->subordinate->devices))
1141     + if (!list_is_last(&pdev->bus_list, &parent->subordinate->devices))
1142     goto out;
1143    
1144     /* All functions are removed, so just disable ASPM for the link */
1145     diff --git a/drivers/pci/rom.c b/drivers/pci/rom.c
1146     index bd5c0e0..b2bac71 100644
1147     --- a/drivers/pci/rom.c
1148     +++ b/drivers/pci/rom.c
1149     @@ -63,7 +63,7 @@ static void pci_disable_rom(struct pci_dev *pdev)
1150     * The PCI window size could be much larger than the
1151     * actual image size.
1152     */
1153     -size_t pci_get_rom_size(void __iomem *rom, size_t size)
1154     +size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size)
1155     {
1156     void __iomem *image;
1157     int last_image;
1158     @@ -72,8 +72,10 @@ size_t pci_get_rom_size(void __iomem *rom, size_t size)
1159     do {
1160     void __iomem *pds;
1161     /* Standard PCI ROMs start out with these bytes 55 AA */
1162     - if (readb(image) != 0x55)
1163     + if (readb(image) != 0x55) {
1164     + dev_err(&pdev->dev, "Invalid ROM contents\n");
1165     break;
1166     + }
1167     if (readb(image + 1) != 0xAA)
1168     break;
1169     /* get the PCI data structure and check its signature */
1170     @@ -158,7 +160,7 @@ void __iomem *pci_map_rom(struct pci_dev *pdev, size_t *size)
1171     * size is much larger than the actual size of the ROM.
1172     * True size is important if the ROM is going to be copied.
1173     */
1174     - *size = pci_get_rom_size(rom, *size);
1175     + *size = pci_get_rom_size(pdev, rom, *size);
1176     return rom;
1177     }
1178    
1179     diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c
1180     index fd0695b..056071d 100644
1181     --- a/drivers/serial/8250_pci.c
1182     +++ b/drivers/serial/8250_pci.c
1183     @@ -599,6 +599,10 @@ static int pci_netmos_init(struct pci_dev *dev)
1184     /* subdevice 0x00PS means <P> parallel, <S> serial */
1185     unsigned int num_serial = dev->subsystem_device & 0xf;
1186    
1187     + if (dev->subsystem_vendor == PCI_VENDOR_ID_IBM &&
1188     + dev->subsystem_device == 0x0299)
1189     + return 0;
1190     +
1191     if (num_serial == 0)
1192     return -ENODEV;
1193     return num_serial;
1194     @@ -766,6 +770,8 @@ pci_default_setup(struct serial_private *priv, struct pciserial_board *board,
1195     #define PCI_SUBDEVICE_ID_OCTPRO422 0x0208
1196     #define PCI_SUBDEVICE_ID_POCTAL232 0x0308
1197     #define PCI_SUBDEVICE_ID_POCTAL422 0x0408
1198     +#define PCI_VENDOR_ID_ADVANTECH 0x13fe
1199     +#define PCI_DEVICE_ID_ADVANTECH_PCI3620 0x3620
1200    
1201     /* Unknown vendors/cards - this should not be in linux/pci_ids.h */
1202     #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584
1203     @@ -2051,6 +2057,10 @@ static int pciserial_resume_one(struct pci_dev *dev)
1204     #endif
1205    
1206     static struct pci_device_id serial_pci_tbl[] = {
1207     + /* Advantech use PCI_DEVICE_ID_ADVANTECH_PCI3620 (0x3620) as 'PCI_SUBVENDOR_ID' */
1208     + { PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI3620,
1209     + PCI_DEVICE_ID_ADVANTECH_PCI3620, 0x0001, 0, 0,
1210     + pbn_b2_8_921600 },
1211     { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
1212     PCI_SUBVENDOR_ID_CONNECT_TECH,
1213     PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232, 0, 0,
1214     @@ -2294,6 +2304,9 @@ static struct pci_device_id serial_pci_tbl[] = {
1215     * For now just used the hex ID 0x950a.
1216     */
1217     { PCI_VENDOR_ID_OXSEMI, 0x950a,
1218     + PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_DUAL_SERIAL, 0, 0,
1219     + pbn_b0_2_115200 },
1220     + { PCI_VENDOR_ID_OXSEMI, 0x950a,
1221     PCI_ANY_ID, PCI_ANY_ID, 0, 0,
1222     pbn_b0_2_1130000 },
1223     { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
1224     @@ -2846,6 +2859,10 @@ static struct pci_device_id serial_pci_tbl[] = {
1225     0,
1226     pbn_b0_8_115200 },
1227    
1228     + { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9835,
1229     + PCI_VENDOR_ID_IBM, 0x0299,
1230     + 0, 0, pbn_b0_bt_2_115200 },
1231     +
1232     /*
1233     * These entries match devices with class COMMUNICATION_SERIAL,
1234     * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL
1235     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
1236     index b205311..876bf36 100644
1237     --- a/drivers/usb/serial/option.c
1238     +++ b/drivers/usb/serial/option.c
1239     @@ -192,14 +192,15 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po
1240     #define NOVATELWIRELESS_PRODUCT_MC950D 0x4400
1241    
1242     /* FUTURE NOVATEL PRODUCTS */
1243     -#define NOVATELWIRELESS_PRODUCT_EVDO_1 0x6000
1244     -#define NOVATELWIRELESS_PRODUCT_HSPA_1 0x7000
1245     -#define NOVATELWIRELESS_PRODUCT_EMBEDDED_1 0x8000
1246     -#define NOVATELWIRELESS_PRODUCT_GLOBAL_1 0x9000
1247     -#define NOVATELWIRELESS_PRODUCT_EVDO_2 0x6001
1248     -#define NOVATELWIRELESS_PRODUCT_HSPA_2 0x7001
1249     -#define NOVATELWIRELESS_PRODUCT_EMBEDDED_2 0x8001
1250     -#define NOVATELWIRELESS_PRODUCT_GLOBAL_2 0x9001
1251     +#define NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED 0X6000
1252     +#define NOVATELWIRELESS_PRODUCT_EVDO_HIGHSPEED 0X6001
1253     +#define NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED 0X7000
1254     +#define NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED 0X7001
1255     +#define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED 0X8000
1256     +#define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED 0X8001
1257     +#define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED 0X9000
1258     +#define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED 0X9001
1259     +#define NOVATELWIRELESS_PRODUCT_GLOBAL 0XA001
1260    
1261     /* AMOI PRODUCTS */
1262     #define AMOI_VENDOR_ID 0x1614
1263     @@ -209,6 +210,27 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po
1264    
1265     #define DELL_VENDOR_ID 0x413C
1266    
1267     +/* Dell modems */
1268     +#define DELL_PRODUCT_5700_MINICARD 0x8114
1269     +#define DELL_PRODUCT_5500_MINICARD 0x8115
1270     +#define DELL_PRODUCT_5505_MINICARD 0x8116
1271     +#define DELL_PRODUCT_5700_EXPRESSCARD 0x8117
1272     +#define DELL_PRODUCT_5510_EXPRESSCARD 0x8118
1273     +
1274     +#define DELL_PRODUCT_5700_MINICARD_SPRINT 0x8128
1275     +#define DELL_PRODUCT_5700_MINICARD_TELUS 0x8129
1276     +
1277     +#define DELL_PRODUCT_5720_MINICARD_VZW 0x8133
1278     +#define DELL_PRODUCT_5720_MINICARD_SPRINT 0x8134
1279     +#define DELL_PRODUCT_5720_MINICARD_TELUS 0x8135
1280     +#define DELL_PRODUCT_5520_MINICARD_CINGULAR 0x8136
1281     +#define DELL_PRODUCT_5520_MINICARD_GENERIC_L 0x8137
1282     +#define DELL_PRODUCT_5520_MINICARD_GENERIC_I 0x8138
1283     +
1284     +#define DELL_PRODUCT_5730_MINICARD_SPRINT 0x8180
1285     +#define DELL_PRODUCT_5730_MINICARD_TELUS 0x8181
1286     +#define DELL_PRODUCT_5730_MINICARD_VZW 0x8182
1287     +
1288     #define KYOCERA_VENDOR_ID 0x0c88
1289     #define KYOCERA_PRODUCT_KPC650 0x17da
1290     #define KYOCERA_PRODUCT_KPC680 0x180a
1291     @@ -267,12 +289,6 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po
1292     #define ERICSSON_VENDOR_ID 0x0bdb
1293     #define ERICSSON_PRODUCT_F3507G 0x1900
1294    
1295     -/* Pantech products */
1296     -#define PANTECH_VENDOR_ID 0x106c
1297     -#define PANTECH_PRODUCT_PC5740 0x3701
1298     -#define PANTECH_PRODUCT_PC5750 0x3702 /* PX-500 */
1299     -#define PANTECH_PRODUCT_UM150 0x3711
1300     -
1301     static struct usb_device_id option_ids[] = {
1302     { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
1303     { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
1304     @@ -383,31 +399,37 @@ static struct usb_device_id option_ids[] = {
1305     { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */
1306     { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */
1307     { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */
1308     - { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_1) }, /* Novatel EVDO product */
1309     - { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_1) }, /* Novatel HSPA product */
1310     - { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EMBEDDED_1) }, /* Novatel Embedded product */
1311     - { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_GLOBAL_1) }, /* Novatel Global product */
1312     - { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_2) }, /* Novatel EVDO product */
1313     - { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_2) }, /* Novatel HSPA product */
1314     - { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EMBEDDED_2) }, /* Novatel Embedded product */
1315     - { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_GLOBAL_2) }, /* Novatel Global product */
1316     + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED) }, /* Novatel EVDO product */
1317     + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED) }, /* Novatel HSPA product */
1318     + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED) }, /* Novatel EVDO Embedded product */
1319     + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED) }, /* Novatel HSPA Embedded product */
1320     + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_HIGHSPEED) }, /* Novatel EVDO product */
1321     + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED) }, /* Novatel HSPA product */
1322     + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED) }, /* Novatel EVDO Embedded product */
1323     + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED) }, /* Novatel HSPA Embedded product */
1324     + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_GLOBAL) }, /* Novatel Global product */
1325    
1326     { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) },
1327     { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) },
1328     { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H02) },
1329    
1330     - { USB_DEVICE(DELL_VENDOR_ID, 0x8114) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite EV620 CDMA/EV-DO */
1331     - { USB_DEVICE(DELL_VENDOR_ID, 0x8115) }, /* Dell Wireless 5500 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
1332     - { USB_DEVICE(DELL_VENDOR_ID, 0x8116) }, /* Dell Wireless 5505 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
1333     - { USB_DEVICE(DELL_VENDOR_ID, 0x8117) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO ExpressCard == Novatel Merlin XV620 CDMA/EV-DO */
1334     - { USB_DEVICE(DELL_VENDOR_ID, 0x8118) }, /* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard == Novatel Merlin XU870 HSDPA/3G */
1335     - { USB_DEVICE(DELL_VENDOR_ID, 0x8128) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite E720 CDMA/EV-DO */
1336     - { USB_DEVICE(DELL_VENDOR_ID, 0x8129) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite ET620 CDMA/EV-DO */
1337     - { USB_DEVICE(DELL_VENDOR_ID, 0x8133) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */
1338     - { USB_DEVICE(DELL_VENDOR_ID, 0x8136) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */
1339     - { USB_DEVICE(DELL_VENDOR_ID, 0x8137) }, /* Dell Wireless HSDPA 5520 */
1340     - { USB_DEVICE(DELL_VENDOR_ID, 0x8138) }, /* Dell Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard */
1341     - { USB_DEVICE(DELL_VENDOR_ID, 0x8147) }, /* Dell Wireless 5530 Mobile Broadband (3G HSPA) Mini-Card */
1342     + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_MINICARD) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite EV620 CDMA/EV-DO */
1343     + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5500_MINICARD) }, /* Dell Wireless 5500 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
1344     + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5505_MINICARD) }, /* Dell Wireless 5505 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
1345     + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_EXPRESSCARD) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO ExpressCard == Novatel Merlin XV620 CDMA/EV-DO */
1346     + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5510_EXPRESSCARD) }, /* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard == Novatel Merlin XU870 HSDPA/3G */
1347     + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_MINICARD_SPRINT) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite E720 CDMA/EV-DO */
1348     + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_MINICARD_TELUS) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite ET620 CDMA/EV-DO */
1349     + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5720_MINICARD_VZW) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */
1350     + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5720_MINICARD_SPRINT) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */
1351     + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5720_MINICARD_TELUS) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */
1352     + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_CINGULAR) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */
1353     + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_L) }, /* Dell Wireless HSDPA 5520 */
1354     + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_I) }, /* Dell Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard */
1355     + { USB_DEVICE(DELL_VENDOR_ID, 0x8147) }, /* Dell Wireless 5530 Mobile Broadband (3G HSPA) Mini-Card */
1356     + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_SPRINT) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
1357     + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_TELUS) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
1358     + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_VZW) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
1359     { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, /* ADU-E100, ADU-310 */
1360     { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) },
1361     { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_620UW) },
1362     @@ -476,9 +498,6 @@ static struct usb_device_id option_ids[] = {
1363     { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) },
1364     { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) },
1365     { USB_DEVICE(ERICSSON_VENDOR_ID, ERICSSON_PRODUCT_F3507G) },
1366     - { USB_DEVICE(PANTECH_VENDOR_ID, PANTECH_PRODUCT_PC5740) },
1367     - { USB_DEVICE(PANTECH_VENDOR_ID, PANTECH_PRODUCT_PC5750) },
1368     - { USB_DEVICE(PANTECH_VENDOR_ID, PANTECH_PRODUCT_UM150) },
1369     { } /* Terminating entry */
1370     };
1371     MODULE_DEVICE_TABLE(usb, option_ids);
1372     diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
1373     index 9a3e495..d8c41ae 100644
1374     --- a/drivers/usb/serial/ti_usb_3410_5052.c
1375     +++ b/drivers/usb/serial/ti_usb_3410_5052.c
1376     @@ -227,25 +227,32 @@ static unsigned int product_5052_count;
1377     /* the array dimension is the number of default entries plus */
1378     /* TI_EXTRA_VID_PID_COUNT user defined entries plus 1 terminating */
1379     /* null entry */
1380     -static struct usb_device_id ti_id_table_3410[1+TI_EXTRA_VID_PID_COUNT+1] = {
1381     +static struct usb_device_id ti_id_table_3410[10+TI_EXTRA_VID_PID_COUNT+1] = {
1382     { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
1383     { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
1384     + { USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) },
1385     + { USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) },
1386     + { USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) },
1387     };
1388    
1389     -static struct usb_device_id ti_id_table_5052[4+TI_EXTRA_VID_PID_COUNT+1] = {
1390     +static struct usb_device_id ti_id_table_5052[5+TI_EXTRA_VID_PID_COUNT+1] = {
1391     { USB_DEVICE(TI_VENDOR_ID, TI_5052_BOOT_PRODUCT_ID) },
1392     { USB_DEVICE(TI_VENDOR_ID, TI_5152_BOOT_PRODUCT_ID) },
1393     { USB_DEVICE(TI_VENDOR_ID, TI_5052_EEPROM_PRODUCT_ID) },
1394     { USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) },
1395     + { USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) },
1396     };
1397    
1398     -static struct usb_device_id ti_id_table_combined[] = {
1399     +static struct usb_device_id ti_id_table_combined[14+2*TI_EXTRA_VID_PID_COUNT+1] = {
1400     { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
1401     { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
1402     { USB_DEVICE(TI_VENDOR_ID, TI_5052_BOOT_PRODUCT_ID) },
1403     { USB_DEVICE(TI_VENDOR_ID, TI_5152_BOOT_PRODUCT_ID) },
1404     { USB_DEVICE(TI_VENDOR_ID, TI_5052_EEPROM_PRODUCT_ID) },
1405     { USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) },
1406     + { USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) },
1407     + { USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) },
1408     + { USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) },
1409     { }
1410     };
1411    
1412     diff --git a/drivers/usb/serial/ti_usb_3410_5052.h b/drivers/usb/serial/ti_usb_3410_5052.h
1413     index b5541bf..d4e4d7e 100644
1414     --- a/drivers/usb/serial/ti_usb_3410_5052.h
1415     +++ b/drivers/usb/serial/ti_usb_3410_5052.h
1416     @@ -27,7 +27,11 @@
1417    
1418     /* Vendor and product ids */
1419     #define TI_VENDOR_ID 0x0451
1420     +#define IBM_VENDOR_ID 0x04b3
1421     #define TI_3410_PRODUCT_ID 0x3410
1422     +#define IBM_4543_PRODUCT_ID 0x4543
1423     +#define IBM_454B_PRODUCT_ID 0x454b
1424     +#define IBM_454C_PRODUCT_ID 0x454c
1425     #define TI_3410_EZ430_ID 0xF430 /* TI ez430 development tool */
1426     #define TI_5052_BOOT_PRODUCT_ID 0x5052 /* no EEPROM, no firmware */
1427     #define TI_5152_BOOT_PRODUCT_ID 0x5152 /* no EEPROM, no firmware */
1428     diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
1429     index 620c2b5..8daaace 100644
1430     --- a/drivers/usb/storage/scsiglue.c
1431     +++ b/drivers/usb/storage/scsiglue.c
1432     @@ -64,6 +64,7 @@
1433     */
1434     #define VENDOR_ID_NOKIA 0x0421
1435     #define VENDOR_ID_NIKON 0x04b0
1436     +#define VENDOR_ID_PENTAX 0x0a17
1437     #define VENDOR_ID_MOTOROLA 0x22b8
1438    
1439     /***********************************************************************
1440     @@ -150,6 +151,7 @@ static int slave_configure(struct scsi_device *sdev)
1441     switch (le16_to_cpu(us->pusb_dev->descriptor.idVendor)) {
1442     case VENDOR_ID_NOKIA:
1443     case VENDOR_ID_NIKON:
1444     + case VENDOR_ID_PENTAX:
1445     case VENDOR_ID_MOTOROLA:
1446     if (!(us->fflags & (US_FL_FIX_CAPACITY |
1447     US_FL_CAPACITY_OK)))
1448     diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
1449     index aae786c..d775cfe 100644
1450     --- a/drivers/usb/storage/unusual_devs.h
1451     +++ b/drivers/usb/storage/unusual_devs.h
1452     @@ -1381,21 +1381,6 @@ UNUSUAL_DEV( 0x0a17, 0x0004, 0x1000, 0x1000,
1453     US_SC_DEVICE, US_PR_DEVICE, NULL,
1454     US_FL_FIX_INQUIRY ),
1455    
1456     -
1457     -/* Submitted by Per Winkvist <per.winkvist@uk.com> */
1458     -UNUSUAL_DEV( 0x0a17, 0x006, 0x0000, 0xffff,
1459     - "Pentax",
1460     - "Optio S/S4",
1461     - US_SC_DEVICE, US_PR_DEVICE, NULL,
1462     - US_FL_FIX_INQUIRY ),
1463     -
1464     -/* Reported by Jaak Ristioja <Ristioja@gmail.com> */
1465     -UNUSUAL_DEV( 0x0a17, 0x006e, 0x0100, 0x0100,
1466     - "Pentax",
1467     - "K10D",
1468     - US_SC_DEVICE, US_PR_DEVICE, NULL,
1469     - US_FL_FIX_CAPACITY ),
1470     -
1471     /* These are virtual windows driver CDs, which the zd1211rw driver
1472     * automatically converts into WLAN devices. */
1473     UNUSUAL_DEV( 0x0ace, 0x2011, 0x0101, 0x0101,
1474     diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
1475     index 038ea62..93a080e 100644
1476     --- a/drivers/video/console/fbcon.c
1477     +++ b/drivers/video/console/fbcon.c
1478     @@ -1855,8 +1855,6 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
1479     struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
1480     struct display *p = &fb_display[vc->vc_num];
1481     int scroll_partial = info->flags & FBINFO_PARTIAL_PAN_OK;
1482     - unsigned short saved_ec;
1483     - int ret;
1484    
1485     if (fbcon_is_inactive(vc, info))
1486     return -EINVAL;
1487     @@ -1869,11 +1867,6 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
1488     * whole screen (prevents flicker).
1489     */
1490    
1491     - saved_ec = vc->vc_video_erase_char;
1492     - vc->vc_video_erase_char = vc->vc_scrl_erase_char;
1493     -
1494     - ret = 0;
1495     -
1496     switch (dir) {
1497     case SM_UP:
1498     if (count > vc->vc_rows) /* Maximum realistic size */
1499     @@ -1890,9 +1883,9 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
1500     scr_memsetw((unsigned short *) (vc->vc_origin +
1501     vc->vc_size_row *
1502     (b - count)),
1503     - vc->vc_scrl_erase_char,
1504     + vc->vc_video_erase_char,
1505     vc->vc_size_row * count);
1506     - ret = 1;
1507     + return 1;
1508     break;
1509    
1510     case SCROLL_WRAP_MOVE:
1511     @@ -1962,10 +1955,9 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
1512     scr_memsetw((unsigned short *) (vc->vc_origin +
1513     vc->vc_size_row *
1514     (b - count)),
1515     - vc->vc_scrl_erase_char,
1516     + vc->vc_video_erase_char,
1517     vc->vc_size_row * count);
1518     - ret = 1;
1519     - break;
1520     + return 1;
1521     }
1522     break;
1523    
1524     @@ -1982,9 +1974,9 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
1525     scr_memsetw((unsigned short *) (vc->vc_origin +
1526     vc->vc_size_row *
1527     t),
1528     - vc->vc_scrl_erase_char,
1529     + vc->vc_video_erase_char,
1530     vc->vc_size_row * count);
1531     - ret = 1;
1532     + return 1;
1533     break;
1534    
1535     case SCROLL_WRAP_MOVE:
1536     @@ -2052,15 +2044,12 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
1537     scr_memsetw((unsigned short *) (vc->vc_origin +
1538     vc->vc_size_row *
1539     t),
1540     - vc->vc_scrl_erase_char,
1541     + vc->vc_video_erase_char,
1542     vc->vc_size_row * count);
1543     - ret = 1;
1544     - break;
1545     + return 1;
1546     }
1547     - break;
1548     }
1549     - vc->vc_video_erase_char = saved_ec;
1550     - return ret;
1551     + return 0;
1552     }
1553    
1554    
1555     @@ -2522,9 +2511,6 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h,
1556     c = vc->vc_video_erase_char;
1557     vc->vc_video_erase_char =
1558     ((c & 0xfe00) >> 1) | (c & 0xff);
1559     - c = vc->vc_scrl_erase_char;
1560     - vc->vc_scrl_erase_char =
1561     - ((c & 0xFE00) >> 1) | (c & 0xFF);
1562     vc->vc_attr >>= 1;
1563     }
1564     } else if (!vc->vc_hi_font_mask && cnt == 512) {
1565     @@ -2555,14 +2541,9 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h,
1566     if (vc->vc_can_do_color) {
1567     vc->vc_video_erase_char =
1568     ((c & 0xff00) << 1) | (c & 0xff);
1569     - c = vc->vc_scrl_erase_char;
1570     - vc->vc_scrl_erase_char =
1571     - ((c & 0xFF00) << 1) | (c & 0xFF);
1572     vc->vc_attr <<= 1;
1573     - } else {
1574     + } else
1575     vc->vc_video_erase_char = c & ~0x100;
1576     - vc->vc_scrl_erase_char = c & ~0x100;
1577     - }
1578     }
1579    
1580     }
1581     diff --git a/drivers/video/console/mdacon.c b/drivers/video/console/mdacon.c
1582     index 9901064..dd3eaaa 100644
1583     --- a/drivers/video/console/mdacon.c
1584     +++ b/drivers/video/console/mdacon.c
1585     @@ -533,7 +533,7 @@ static void mdacon_cursor(struct vc_data *c, int mode)
1586    
1587     static int mdacon_scroll(struct vc_data *c, int t, int b, int dir, int lines)
1588     {
1589     - u16 eattr = mda_convert_attr(c->vc_scrl_erase_char);
1590     + u16 eattr = mda_convert_attr(c->vc_video_erase_char);
1591    
1592     if (!lines)
1593     return 0;
1594     diff --git a/drivers/video/console/sticon.c b/drivers/video/console/sticon.c
1595     index 4055dbd..491c1c1 100644
1596     --- a/drivers/video/console/sticon.c
1597     +++ b/drivers/video/console/sticon.c
1598     @@ -170,12 +170,12 @@ static int sticon_scroll(struct vc_data *conp, int t, int b, int dir, int count)
1599     switch (dir) {
1600     case SM_UP:
1601     sti_bmove(sti, t + count, 0, t, 0, b - t - count, conp->vc_cols);
1602     - sti_clear(sti, b - count, 0, count, conp->vc_cols, conp->vc_scrl_erase_char);
1603     + sti_clear(sti, b - count, 0, count, conp->vc_cols, conp->vc_video_erase_char);
1604     break;
1605    
1606     case SM_DOWN:
1607     sti_bmove(sti, t, 0, t + count, 0, b - t - count, conp->vc_cols);
1608     - sti_clear(sti, t, 0, count, conp->vc_cols, conp->vc_scrl_erase_char);
1609     + sti_clear(sti, t, 0, count, conp->vc_cols, conp->vc_video_erase_char);
1610     break;
1611     }
1612    
1613     diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c
1614     index bd1f57b..6df29a6 100644
1615     --- a/drivers/video/console/vgacon.c
1616     +++ b/drivers/video/console/vgacon.c
1617     @@ -1350,7 +1350,7 @@ static int vgacon_scroll(struct vc_data *c, int t, int b, int dir,
1618     } else
1619     c->vc_origin += delta;
1620     scr_memsetw((u16 *) (c->vc_origin + c->vc_screenbuf_size -
1621     - delta), c->vc_scrl_erase_char,
1622     + delta), c->vc_video_erase_char,
1623     delta);
1624     } else {
1625     if (oldo - delta < vga_vram_base) {
1626     @@ -1363,7 +1363,7 @@ static int vgacon_scroll(struct vc_data *c, int t, int b, int dir,
1627     } else
1628     c->vc_origin -= delta;
1629     c->vc_scr_end = c->vc_origin + c->vc_screenbuf_size;
1630     - scr_memsetw((u16 *) (c->vc_origin), c->vc_scrl_erase_char,
1631     + scr_memsetw((u16 *) (c->vc_origin), c->vc_video_erase_char,
1632     delta);
1633     }
1634     c->vc_scr_end = c->vc_origin + c->vc_screenbuf_size;
1635     diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
1636     index 655ed8d..e57df48 100644
1637     --- a/fs/binfmt_elf.c
1638     +++ b/fs/binfmt_elf.c
1639     @@ -1188,9 +1188,11 @@ static unsigned long vma_dump_size(struct vm_area_struct *vma,
1640     * check for an ELF header. If we find one, dump the first page to
1641     * aid in determining what was mapped here.
1642     */
1643     - if (FILTER(ELF_HEADERS) && vma->vm_file != NULL && vma->vm_pgoff == 0) {
1644     + if (FILTER(ELF_HEADERS) &&
1645     + vma->vm_pgoff == 0 && (vma->vm_flags & VM_READ)) {
1646     u32 __user *header = (u32 __user *) vma->vm_start;
1647     u32 word;
1648     + mm_segment_t fs = get_fs();
1649     /*
1650     * Doing it this way gets the constant folded by GCC.
1651     */
1652     @@ -1203,7 +1205,15 @@ static unsigned long vma_dump_size(struct vm_area_struct *vma,
1653     magic.elfmag[EI_MAG1] = ELFMAG1;
1654     magic.elfmag[EI_MAG2] = ELFMAG2;
1655     magic.elfmag[EI_MAG3] = ELFMAG3;
1656     - if (get_user(word, header) == 0 && word == magic.cmp)
1657     + /*
1658     + * Switch to the user "segment" for get_user(),
1659     + * then put back what elf_core_dump() had in place.
1660     + */
1661     + set_fs(USER_DS);
1662     + if (unlikely(get_user(word, header)))
1663     + word = 0;
1664     + set_fs(fs);
1665     + if (word == magic.cmp)
1666     return PAGE_SIZE;
1667     }
1668    
1669     diff --git a/fs/seq_file.c b/fs/seq_file.c
1670     index bd20f7f..ef4d497 100644
1671     --- a/fs/seq_file.c
1672     +++ b/fs/seq_file.c
1673     @@ -54,6 +54,64 @@ int seq_open(struct file *file, const struct seq_operations *op)
1674     }
1675     EXPORT_SYMBOL(seq_open);
1676    
1677     +static int traverse(struct seq_file *m, loff_t offset)
1678     +{
1679     + loff_t pos = 0, index;
1680     + int error = 0;
1681     + void *p;
1682     +
1683     + m->version = 0;
1684     + index = 0;
1685     + m->count = m->from = 0;
1686     + if (!offset) {
1687     + m->index = index;
1688     + return 0;
1689     + }
1690     + if (!m->buf) {
1691     + m->buf = kmalloc(m->size = PAGE_SIZE, GFP_KERNEL);
1692     + if (!m->buf)
1693     + return -ENOMEM;
1694     + }
1695     + p = m->op->start(m, &index);
1696     + while (p) {
1697     + error = PTR_ERR(p);
1698     + if (IS_ERR(p))
1699     + break;
1700     + error = m->op->show(m, p);
1701     + if (error < 0)
1702     + break;
1703     + if (unlikely(error)) {
1704     + error = 0;
1705     + m->count = 0;
1706     + }
1707     + if (m->count == m->size)
1708     + goto Eoverflow;
1709     + if (pos + m->count > offset) {
1710     + m->from = offset - pos;
1711     + m->count -= m->from;
1712     + m->index = index;
1713     + break;
1714     + }
1715     + pos += m->count;
1716     + m->count = 0;
1717     + if (pos == offset) {
1718     + index++;
1719     + m->index = index;
1720     + break;
1721     + }
1722     + p = m->op->next(m, p, &index);
1723     + }
1724     + m->op->stop(m, p);
1725     + m->index = index;
1726     + return error;
1727     +
1728     +Eoverflow:
1729     + m->op->stop(m, p);
1730     + kfree(m->buf);
1731     + m->buf = kmalloc(m->size <<= 1, GFP_KERNEL);
1732     + return !m->buf ? -ENOMEM : -EAGAIN;
1733     +}
1734     +
1735     /**
1736     * seq_read - ->read() method for sequential files.
1737     * @file: the file to read from
1738     @@ -186,63 +244,6 @@ Efault:
1739     }
1740     EXPORT_SYMBOL(seq_read);
1741    
1742     -static int traverse(struct seq_file *m, loff_t offset)
1743     -{
1744     - loff_t pos = 0, index;
1745     - int error = 0;
1746     - void *p;
1747     -
1748     - m->version = 0;
1749     - index = 0;
1750     - m->count = m->from = 0;
1751     - if (!offset) {
1752     - m->index = index;
1753     - return 0;
1754     - }
1755     - if (!m->buf) {
1756     - m->buf = kmalloc(m->size = PAGE_SIZE, GFP_KERNEL);
1757     - if (!m->buf)
1758     - return -ENOMEM;
1759     - }
1760     - p = m->op->start(m, &index);
1761     - while (p) {
1762     - error = PTR_ERR(p);
1763     - if (IS_ERR(p))
1764     - break;
1765     - error = m->op->show(m, p);
1766     - if (error < 0)
1767     - break;
1768     - if (unlikely(error)) {
1769     - error = 0;
1770     - m->count = 0;
1771     - }
1772     - if (m->count == m->size)
1773     - goto Eoverflow;
1774     - if (pos + m->count > offset) {
1775     - m->from = offset - pos;
1776     - m->count -= m->from;
1777     - m->index = index;
1778     - break;
1779     - }
1780     - pos += m->count;
1781     - m->count = 0;
1782     - if (pos == offset) {
1783     - index++;
1784     - m->index = index;
1785     - break;
1786     - }
1787     - p = m->op->next(m, p, &index);
1788     - }
1789     - m->op->stop(m, p);
1790     - return error;
1791     -
1792     -Eoverflow:
1793     - m->op->stop(m, p);
1794     - kfree(m->buf);
1795     - m->buf = kmalloc(m->size <<= 1, GFP_KERNEL);
1796     - return !m->buf ? -ENOMEM : -EAGAIN;
1797     -}
1798     -
1799     /**
1800     * seq_lseek - ->llseek() method for sequential files.
1801     * @file: the file in question
1802     diff --git a/fs/xfs/linux-2.6/xfs_buf.c b/fs/xfs/linux-2.6/xfs_buf.c
1803     index 36d5fcd..8454dee 100644
1804     --- a/fs/xfs/linux-2.6/xfs_buf.c
1805     +++ b/fs/xfs/linux-2.6/xfs_buf.c
1806     @@ -1114,8 +1114,7 @@ xfs_buf_bio_end_io(
1807     unsigned int blocksize = bp->b_target->bt_bsize;
1808     struct bio_vec *bvec = bio->bi_io_vec + bio->bi_vcnt - 1;
1809    
1810     - if (!test_bit(BIO_UPTODATE, &bio->bi_flags))
1811     - bp->b_error = EIO;
1812     + xfs_buf_ioerror(bp, -error);
1813    
1814     do {
1815     struct page *page = bvec->bv_page;
1816     diff --git a/include/acpi/pdc_intel.h b/include/acpi/pdc_intel.h
1817     index e72bfdd..552637b 100644
1818     --- a/include/acpi/pdc_intel.h
1819     +++ b/include/acpi/pdc_intel.h
1820     @@ -14,6 +14,7 @@
1821     #define ACPI_PDC_SMP_T_SWCOORD (0x0080)
1822     #define ACPI_PDC_C_C1_FFH (0x0100)
1823     #define ACPI_PDC_C_C2C3_FFH (0x0200)
1824     +#define ACPI_PDC_SMP_P_HWCOORD (0x0800)
1825    
1826     #define ACPI_PDC_EST_CAPABILITY_SMP (ACPI_PDC_SMP_C1PT | \
1827     ACPI_PDC_C_C1_HALT | \
1828     @@ -22,6 +23,7 @@
1829     #define ACPI_PDC_EST_CAPABILITY_SWSMP (ACPI_PDC_SMP_C1PT | \
1830     ACPI_PDC_C_C1_HALT | \
1831     ACPI_PDC_SMP_P_SWCOORD | \
1832     + ACPI_PDC_SMP_P_HWCOORD | \
1833     ACPI_PDC_P_FFH)
1834    
1835     #define ACPI_PDC_C_CAPABILITY_SMP (ACPI_PDC_SMP_C2C3 | \
1836     diff --git a/include/linux/console_struct.h b/include/linux/console_struct.h
1837     index b03f80a..d71f7c0 100644
1838     --- a/include/linux/console_struct.h
1839     +++ b/include/linux/console_struct.h
1840     @@ -53,7 +53,6 @@ struct vc_data {
1841     unsigned short vc_hi_font_mask; /* [#] Attribute set for upper 256 chars of font or 0 if not supported */
1842     struct console_font vc_font; /* Current VC font set */
1843     unsigned short vc_video_erase_char; /* Background erase character */
1844     - unsigned short vc_scrl_erase_char; /* Erase character for scroll */
1845     /* VT terminal data */
1846     unsigned int vc_state; /* Escape sequence parser state */
1847     unsigned int vc_npar,vc_par[NPAR]; /* Parameters of current escape sequence */
1848     diff --git a/include/linux/module.h b/include/linux/module.h
1849     index 68e0955..760a41b 100644
1850     --- a/include/linux/module.h
1851     +++ b/include/linux/module.h
1852     @@ -387,7 +387,6 @@ void symbol_put_addr(void *addr);
1853     static inline void __module_get(struct module *module)
1854     {
1855     if (module) {
1856     - BUG_ON(module_refcount(module) == 0);
1857     local_inc(&module->ref[get_cpu()].count);
1858     put_cpu();
1859     }
1860     diff --git a/include/linux/pci.h b/include/linux/pci.h
1861     index 426e029..911b99d 100644
1862     --- a/include/linux/pci.h
1863     +++ b/include/linux/pci.h
1864     @@ -639,7 +639,7 @@ int pci_select_bars(struct pci_dev *dev, unsigned long flags);
1865     /* ROM control related routines */
1866     void __iomem __must_check *pci_map_rom(struct pci_dev *pdev, size_t *size);
1867     void pci_unmap_rom(struct pci_dev *pdev, void __iomem *rom);
1868     -size_t pci_get_rom_size(void __iomem *rom, size_t size);
1869     +size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size);
1870    
1871     /* Power management related routines */
1872     int pci_save_state(struct pci_dev *dev);
1873     diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
1874     index 26b59cb..794e546 100644
1875     --- a/include/linux/pci_ids.h
1876     +++ b/include/linux/pci_ids.h
1877     @@ -1755,6 +1755,7 @@
1878     #define PCI_DEVICE_ID_SIIG_8S_20x_650 0x2081
1879     #define PCI_DEVICE_ID_SIIG_8S_20x_850 0x2082
1880     #define PCI_SUBDEVICE_ID_SIIG_QUARTET_SERIAL 0x2050
1881     +#define PCI_SUBDEVICE_ID_SIIG_DUAL_SERIAL 0x2530
1882    
1883     #define PCI_VENDOR_ID_RADISYS 0x1331
1884    
1885     diff --git a/include/linux/wait.h b/include/linux/wait.h
1886     index 0081147..3c2f411 100644
1887     --- a/include/linux/wait.h
1888     +++ b/include/linux/wait.h
1889     @@ -141,6 +141,8 @@ static inline void __remove_wait_queue(wait_queue_head_t *head,
1890     list_del(&old->task_list);
1891     }
1892    
1893     +void __wake_up_common(wait_queue_head_t *q, unsigned int mode,
1894     + int nr_exclusive, int sync, void *key);
1895     void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key);
1896     extern void __wake_up_locked(wait_queue_head_t *q, unsigned int mode);
1897     extern void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr);
1898     @@ -342,16 +344,19 @@ do { \
1899     for (;;) { \
1900     prepare_to_wait_exclusive(&wq, &__wait, \
1901     TASK_INTERRUPTIBLE); \
1902     - if (condition) \
1903     + if (condition) { \
1904     + finish_wait(&wq, &__wait); \
1905     break; \
1906     + } \
1907     if (!signal_pending(current)) { \
1908     schedule(); \
1909     continue; \
1910     } \
1911     ret = -ERESTARTSYS; \
1912     + abort_exclusive_wait(&wq, &__wait, \
1913     + TASK_INTERRUPTIBLE, NULL); \
1914     break; \
1915     } \
1916     - finish_wait(&wq, &__wait); \
1917     } while (0)
1918    
1919     #define wait_event_interruptible_exclusive(wq, condition) \
1920     @@ -440,6 +445,8 @@ extern long interruptible_sleep_on_timeout(wait_queue_head_t *q,
1921     void prepare_to_wait(wait_queue_head_t *q, wait_queue_t *wait, int state);
1922     void prepare_to_wait_exclusive(wait_queue_head_t *q, wait_queue_t *wait, int state);
1923     void finish_wait(wait_queue_head_t *q, wait_queue_t *wait);
1924     +void abort_exclusive_wait(wait_queue_head_t *q, wait_queue_t *wait,
1925     + unsigned int mode, void *key);
1926     int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
1927     int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
1928    
1929     diff --git a/ipc/shm.c b/ipc/shm.c
1930     index f00c897..35a65be 100644
1931     --- a/ipc/shm.c
1932     +++ b/ipc/shm.c
1933     @@ -565,11 +565,15 @@ static void shm_get_stat(struct ipc_namespace *ns, unsigned long *rss,
1934     struct hstate *h = hstate_file(shp->shm_file);
1935     *rss += pages_per_huge_page(h) * mapping->nrpages;
1936     } else {
1937     +#ifdef CONFIG_SHMEM
1938     struct shmem_inode_info *info = SHMEM_I(inode);
1939     spin_lock(&info->lock);
1940     *rss += inode->i_mapping->nrpages;
1941     *swp += info->swapped;
1942     spin_unlock(&info->lock);
1943     +#else
1944     + *rss += inode->i_mapping->nrpages;
1945     +#endif
1946     }
1947    
1948     total++;
1949     diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
1950     index 3cd441e..48c58fe 100644
1951     --- a/kernel/irq/chip.c
1952     +++ b/kernel/irq/chip.c
1953     @@ -78,6 +78,7 @@ void dynamic_irq_cleanup(unsigned int irq)
1954     desc->chip_data = NULL;
1955     desc->handle_irq = handle_bad_irq;
1956     desc->chip = &no_irq_chip;
1957     + desc->name = NULL;
1958     spin_unlock_irqrestore(&desc->lock, flags);
1959     }
1960    
1961     diff --git a/kernel/sched.c b/kernel/sched.c
1962     index 2a09e44..98c0cdc 100644
1963     --- a/kernel/sched.c
1964     +++ b/kernel/sched.c
1965     @@ -4556,8 +4556,8 @@ EXPORT_SYMBOL(default_wake_function);
1966     * started to run but is not in state TASK_RUNNING. try_to_wake_up() returns
1967     * zero in this (rare) case, and we handle it by continuing to scan the queue.
1968     */
1969     -static void __wake_up_common(wait_queue_head_t *q, unsigned int mode,
1970     - int nr_exclusive, int sync, void *key)
1971     +void __wake_up_common(wait_queue_head_t *q, unsigned int mode,
1972     + int nr_exclusive, int sync, void *key)
1973     {
1974     wait_queue_t *curr, *next;
1975    
1976     diff --git a/kernel/wait.c b/kernel/wait.c
1977     index c275c56..24688c7 100644
1978     --- a/kernel/wait.c
1979     +++ b/kernel/wait.c
1980     @@ -101,6 +101,15 @@ prepare_to_wait_exclusive(wait_queue_head_t *q, wait_queue_t *wait, int state)
1981     }
1982     EXPORT_SYMBOL(prepare_to_wait_exclusive);
1983    
1984     +/*
1985     + * finish_wait - clean up after waiting in a queue
1986     + * @q: waitqueue waited on
1987     + * @wait: wait descriptor
1988     + *
1989     + * Sets current thread back to running state and removes
1990     + * the wait descriptor from the given waitqueue if still
1991     + * queued.
1992     + */
1993     void finish_wait(wait_queue_head_t *q, wait_queue_t *wait)
1994     {
1995     unsigned long flags;
1996     @@ -127,6 +136,39 @@ void finish_wait(wait_queue_head_t *q, wait_queue_t *wait)
1997     }
1998     EXPORT_SYMBOL(finish_wait);
1999    
2000     +/*
2001     + * abort_exclusive_wait - abort exclusive waiting in a queue
2002     + * @q: waitqueue waited on
2003     + * @wait: wait descriptor
2004     + * @state: runstate of the waiter to be woken
2005     + * @key: key to identify a wait bit queue or %NULL
2006     + *
2007     + * Sets current thread back to running state and removes
2008     + * the wait descriptor from the given waitqueue if still
2009     + * queued.
2010     + *
2011     + * Wakes up the next waiter if the caller is concurrently
2012     + * woken up through the queue.
2013     + *
2014     + * This prevents waiter starvation where an exclusive waiter
2015     + * aborts and is woken up concurrently and noone wakes up
2016     + * the next waiter.
2017     + */
2018     +void abort_exclusive_wait(wait_queue_head_t *q, wait_queue_t *wait,
2019     + unsigned int mode, void *key)
2020     +{
2021     + unsigned long flags;
2022     +
2023     + __set_current_state(TASK_RUNNING);
2024     + spin_lock_irqsave(&q->lock, flags);
2025     + if (!list_empty(&wait->task_list))
2026     + list_del_init(&wait->task_list);
2027     + else if (waitqueue_active(q))
2028     + __wake_up_common(q, mode, 1, 0, key);
2029     + spin_unlock_irqrestore(&q->lock, flags);
2030     +}
2031     +EXPORT_SYMBOL(abort_exclusive_wait);
2032     +
2033     int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key)
2034     {
2035     int ret = default_wake_function(wait, mode, sync, key);
2036     @@ -187,17 +229,20 @@ int __sched
2037     __wait_on_bit_lock(wait_queue_head_t *wq, struct wait_bit_queue *q,
2038     int (*action)(void *), unsigned mode)
2039     {
2040     - int ret = 0;
2041     -
2042     do {
2043     + int ret;
2044     +
2045     prepare_to_wait_exclusive(wq, &q->wait, mode);
2046     - if (test_bit(q->key.bit_nr, q->key.flags)) {
2047     - if ((ret = (*action)(q->key.flags)))
2048     - break;
2049     - }
2050     + if (!test_bit(q->key.bit_nr, q->key.flags))
2051     + continue;
2052     + ret = action(q->key.flags);
2053     + if (!ret)
2054     + continue;
2055     + abort_exclusive_wait(wq, &q->wait, mode, &q->key);
2056     + return ret;
2057     } while (test_and_set_bit(q->key.bit_nr, q->key.flags));
2058     finish_wait(wq, &q->wait);
2059     - return ret;
2060     + return 0;
2061     }
2062     EXPORT_SYMBOL(__wait_on_bit_lock);
2063    
2064     diff --git a/mm/swap.c b/mm/swap.c
2065     index 9e0cb31..65e6825 100644
2066     --- a/mm/swap.c
2067     +++ b/mm/swap.c
2068     @@ -244,7 +244,6 @@ void lru_add_drain(void)
2069     put_cpu();
2070     }
2071    
2072     -#ifdef CONFIG_NUMA
2073     static void lru_add_drain_per_cpu(struct work_struct *dummy)
2074     {
2075     lru_add_drain();
2076     @@ -258,18 +257,6 @@ int lru_add_drain_all(void)
2077     return schedule_on_each_cpu(lru_add_drain_per_cpu);
2078     }
2079    
2080     -#else
2081     -
2082     -/*
2083     - * Returns 0 for success
2084     - */
2085     -int lru_add_drain_all(void)
2086     -{
2087     - lru_add_drain();
2088     - return 0;
2089     -}
2090     -#endif
2091     -
2092     /*
2093     * Batched page_cache_release(). Decrement the reference count on all the
2094     * passed pages. If it fell to zero then remove the page from the LRU and
2095     diff --git a/net/sctp/input.c b/net/sctp/input.c
2096     index a49fa80..be736af 100644
2097     --- a/net/sctp/input.c
2098     +++ b/net/sctp/input.c
2099     @@ -249,6 +249,19 @@ int sctp_rcv(struct sk_buff *skb)
2100     */
2101     sctp_bh_lock_sock(sk);
2102    
2103     + if (sk != rcvr->sk) {
2104     + /* Our cached sk is different from the rcvr->sk. This is
2105     + * because migrate()/accept() may have moved the association
2106     + * to a new socket and released all the sockets. So now we
2107     + * are holding a lock on the old socket while the user may
2108     + * be doing something with the new socket. Switch our veiw
2109     + * of the current sk.
2110     + */
2111     + sctp_bh_unlock_sock(sk);
2112     + sk = rcvr->sk;
2113     + sctp_bh_lock_sock(sk);
2114     + }
2115     +
2116     if (sock_owned_by_user(sk)) {
2117     SCTP_INC_STATS_BH(SCTP_MIB_IN_PKT_BACKLOG);
2118     sctp_add_backlog(sk, skb);
2119     diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
2120     index 3e65719..e4c27c1 100644
2121     --- a/net/sunrpc/svcsock.c
2122     +++ b/net/sunrpc/svcsock.c
2123     @@ -1171,7 +1171,11 @@ int svc_addsock(struct svc_serv *serv,
2124     else if (so->state > SS_UNCONNECTED)
2125     err = -EISCONN;
2126     else {
2127     - svsk = svc_setup_socket(serv, so, &err, SVC_SOCK_DEFAULTS);
2128     + if (!try_module_get(THIS_MODULE))
2129     + err = -ENOENT;
2130     + else
2131     + svsk = svc_setup_socket(serv, so, &err,
2132     + SVC_SOCK_DEFAULTS);
2133     if (svsk) {
2134     struct sockaddr_storage addr;
2135     struct sockaddr *sin = (struct sockaddr *)&addr;
2136     @@ -1184,7 +1188,8 @@ int svc_addsock(struct svc_serv *serv,
2137     spin_unlock_bh(&serv->sv_lock);
2138     svc_xprt_received(&svsk->sk_xprt);
2139     err = 0;
2140     - }
2141     + } else
2142     + module_put(THIS_MODULE);
2143     }
2144     if (err) {
2145     sockfd_put(so);
2146     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
2147     index aa7dc03..db9c702 100644
2148     --- a/sound/pci/hda/patch_realtek.c
2149     +++ b/sound/pci/hda/patch_realtek.c
2150     @@ -920,6 +920,7 @@ do_sku:
2151     case 0x10ec0267:
2152     case 0x10ec0268:
2153     case 0x10ec0269:
2154     + case 0x10ec0272:
2155     case 0x10ec0660:
2156     case 0x10ec0662:
2157     case 0x10ec0663:
2158     @@ -948,6 +949,7 @@ do_sku:
2159     case 0x10ec0882:
2160     case 0x10ec0883:
2161     case 0x10ec0885:
2162     + case 0x10ec0887:
2163     case 0x10ec0889:
2164     snd_hda_codec_write(codec, 0x20, 0,
2165     AC_VERB_SET_COEF_INDEX, 7);
2166     @@ -8059,6 +8061,8 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = {
2167     SND_PCI_QUIRK(0x1558, 0, "Clevo laptop", ALC883_LAPTOP_EAPD),
2168     SND_PCI_QUIRK(0x15d9, 0x8780, "Supermicro PDSBA", ALC883_3ST_6ch),
2169     SND_PCI_QUIRK(0x161f, 0x2054, "Medion laptop", ALC883_MEDION),
2170     + SND_PCI_QUIRK(0x1734, 0x1107, "FSC AMILO Xi2550",
2171     + ALC883_FUJITSU_PI2515),
2172     SND_PCI_QUIRK(0x1734, 0x1108, "Fujitsu AMILO Pi2515", ALC883_FUJITSU_PI2515),
2173     SND_PCI_QUIRK(0x17aa, 0x101e, "Lenovo 101e", ALC883_LENOVO_101E_2ch),
2174     SND_PCI_QUIRK(0x17aa, 0x2085, "Lenovo NB0763", ALC883_LENOVO_NB0763),
2175     diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
2176     index b8cfb7c..7a1a8c8 100644
2177     --- a/sound/usb/usbaudio.c
2178     +++ b/sound/usb/usbaudio.c
2179     @@ -2958,6 +2958,7 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip,
2180     return -EINVAL;
2181     }
2182     alts = &iface->altsetting[fp->altset_idx];
2183     + fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
2184     usb_set_interface(chip->dev, fp->iface, 0);
2185     init_usb_pitch(chip->dev, fp->iface, alts, fp);
2186     init_usb_sample_rate(chip->dev, fp->iface, alts, fp, fp->rate_max);