Magellan Linux

Annotation of /trunk/kernel26-magellan-server/patches-2.6.27-r2/0106-2.6.27.7-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


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

1 niro 728 diff --git a/arch/arm/mm/cache-feroceon-l2.c b/arch/arm/mm/cache-feroceon-l2.c
2     index 7b5a25d..4f6cf46 100644
3     --- a/arch/arm/mm/cache-feroceon-l2.c
4     +++ b/arch/arm/mm/cache-feroceon-l2.c
5     @@ -148,7 +148,7 @@ static void feroceon_l2_inv_range(unsigned long start, unsigned long end)
6     /*
7     * Clean and invalidate partial last cache line.
8     */
9     - if (end & (CACHE_LINE_SIZE - 1)) {
10     + if (start < end && end & (CACHE_LINE_SIZE - 1)) {
11     l2_clean_inv_pa(end & ~(CACHE_LINE_SIZE - 1));
12     end &= ~(CACHE_LINE_SIZE - 1);
13     }
14     @@ -156,7 +156,7 @@ static void feroceon_l2_inv_range(unsigned long start, unsigned long end)
15     /*
16     * Invalidate all full cache lines between 'start' and 'end'.
17     */
18     - while (start != end) {
19     + while (start < end) {
20     unsigned long range_end = calc_range_end(start, end);
21     l2_inv_pa_range(start, range_end - CACHE_LINE_SIZE);
22     start = range_end;
23     diff --git a/arch/m68k/kernel/ints.c b/arch/m68k/kernel/ints.c
24     index ded7dd2..c4460bf 100644
25     --- a/arch/m68k/kernel/ints.c
26     +++ b/arch/m68k/kernel/ints.c
27     @@ -133,7 +133,7 @@ void __init m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt,
28     {
29     int i;
30    
31     - BUG_ON(IRQ_USER + cnt >= NR_IRQS);
32     + BUG_ON(IRQ_USER + cnt > NR_IRQS);
33     m68k_first_user_vec = vec;
34     for (i = 0; i < cnt; i++)
35     irq_controller[IRQ_USER + i] = &user_irq_controller;
36     diff --git a/arch/powerpc/include/asm/mpic.h b/arch/powerpc/include/asm/mpic.h
37     index fe566a3..eb685ed 100644
38     --- a/arch/powerpc/include/asm/mpic.h
39     +++ b/arch/powerpc/include/asm/mpic.h
40     @@ -355,6 +355,8 @@ struct mpic
41     #define MPIC_NO_BIAS 0x00000400
42     /* Ignore NIRQS as reported by FRR */
43     #define MPIC_BROKEN_FRR_NIRQS 0x00000800
44     +/* Destination only supports a single CPU at a time */
45     +#define MPIC_SINGLE_DEST_CPU 0x00001000
46    
47     /* MPIC HW modification ID */
48     #define MPIC_REGSET_MASK 0xf0000000
49     diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ds.c b/arch/powerpc/platforms/85xx/mpc85xx_ds.c
50     index 483b65c..613bf8c 100644
51     --- a/arch/powerpc/platforms/85xx/mpc85xx_ds.c
52     +++ b/arch/powerpc/platforms/85xx/mpc85xx_ds.c
53     @@ -78,7 +78,8 @@ void __init mpc85xx_ds_pic_init(void)
54    
55     mpic = mpic_alloc(np, r.start,
56     MPIC_PRIMARY | MPIC_WANTS_RESET |
57     - MPIC_BIG_ENDIAN | MPIC_BROKEN_FRR_NIRQS,
58     + MPIC_BIG_ENDIAN | MPIC_BROKEN_FRR_NIRQS |
59     + MPIC_SINGLE_DEST_CPU,
60     0, 256, " OpenPIC ");
61     BUG_ON(mpic == NULL);
62     of_node_put(np);
63     diff --git a/arch/powerpc/platforms/86xx/pic.c b/arch/powerpc/platforms/86xx/pic.c
64     index 8881c5d..668275d 100644
65     --- a/arch/powerpc/platforms/86xx/pic.c
66     +++ b/arch/powerpc/platforms/86xx/pic.c
67     @@ -44,7 +44,8 @@ void __init mpc86xx_init_irq(void)
68    
69     mpic = mpic_alloc(np, res.start,
70     MPIC_PRIMARY | MPIC_WANTS_RESET |
71     - MPIC_BIG_ENDIAN | MPIC_BROKEN_FRR_NIRQS,
72     + MPIC_BIG_ENDIAN | MPIC_BROKEN_FRR_NIRQS |
73     + MPIC_SINGLE_DEST_CPU,
74     0, 256, " MPIC ");
75     of_node_put(np);
76     BUG_ON(mpic == NULL);
77     diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
78     index 8e3478c..f6299cc 100644
79     --- a/arch/powerpc/sysdev/mpic.c
80     +++ b/arch/powerpc/sysdev/mpic.c
81     @@ -563,6 +563,51 @@ static void __init mpic_scan_ht_pics(struct mpic *mpic)
82    
83     #endif /* CONFIG_MPIC_U3_HT_IRQS */
84    
85     +#ifdef CONFIG_SMP
86     +static int irq_choose_cpu(unsigned int virt_irq)
87     +{
88     + cpumask_t mask = irq_desc[virt_irq].affinity;
89     + int cpuid;
90     +
91     + if (cpus_equal(mask, CPU_MASK_ALL)) {
92     + static int irq_rover;
93     + static DEFINE_SPINLOCK(irq_rover_lock);
94     + unsigned long flags;
95     +
96     + /* Round-robin distribution... */
97     + do_round_robin:
98     + spin_lock_irqsave(&irq_rover_lock, flags);
99     +
100     + while (!cpu_online(irq_rover)) {
101     + if (++irq_rover >= NR_CPUS)
102     + irq_rover = 0;
103     + }
104     + cpuid = irq_rover;
105     + do {
106     + if (++irq_rover >= NR_CPUS)
107     + irq_rover = 0;
108     + } while (!cpu_online(irq_rover));
109     +
110     + spin_unlock_irqrestore(&irq_rover_lock, flags);
111     + } else {
112     + cpumask_t tmp;
113     +
114     + cpus_and(tmp, cpu_online_map, mask);
115     +
116     + if (cpus_empty(tmp))
117     + goto do_round_robin;
118     +
119     + cpuid = first_cpu(tmp);
120     + }
121     +
122     + return cpuid;
123     +}
124     +#else
125     +static int irq_choose_cpu(unsigned int virt_irq)
126     +{
127     + return hard_smp_processor_id();
128     +}
129     +#endif
130    
131     #define mpic_irq_to_hw(virq) ((unsigned int)irq_map[virq].hwirq)
132    
133     @@ -777,12 +822,18 @@ void mpic_set_affinity(unsigned int irq, cpumask_t cpumask)
134     struct mpic *mpic = mpic_from_irq(irq);
135     unsigned int src = mpic_irq_to_hw(irq);
136    
137     - cpumask_t tmp;
138     + if (mpic->flags & MPIC_SINGLE_DEST_CPU) {
139     + int cpuid = irq_choose_cpu(irq);
140    
141     - cpus_and(tmp, cpumask, cpu_online_map);
142     + mpic_irq_write(src, MPIC_INFO(IRQ_DESTINATION), 1 << cpuid);
143     + } else {
144     + cpumask_t tmp;
145    
146     - mpic_irq_write(src, MPIC_INFO(IRQ_DESTINATION),
147     - mpic_physmask(cpus_addr(tmp)[0]));
148     + cpus_and(tmp, cpumask, cpu_online_map);
149     +
150     + mpic_irq_write(src, MPIC_INFO(IRQ_DESTINATION),
151     + mpic_physmask(cpus_addr(tmp)[0]));
152     + }
153     }
154    
155     static unsigned int mpic_type_to_vecpri(struct mpic *mpic, unsigned int type)
156     diff --git a/arch/s390/kernel/topology.c b/arch/s390/kernel/topology.c
157     index 632b13e..a947899 100644
158     --- a/arch/s390/kernel/topology.c
159     +++ b/arch/s390/kernel/topology.c
160     @@ -65,18 +65,21 @@ static int machine_has_topology_irq;
161     static struct timer_list topology_timer;
162     static void set_topology_timer(void);
163     static DECLARE_WORK(topology_work, topology_work_fn);
164     +/* topology_lock protects the core linked list */
165     +static DEFINE_SPINLOCK(topology_lock);
166    
167     cpumask_t cpu_core_map[NR_CPUS];
168    
169     cpumask_t cpu_coregroup_map(unsigned int cpu)
170     {
171     struct core_info *core = &core_info;
172     + unsigned long flags;
173     cpumask_t mask;
174    
175     cpus_clear(mask);
176     if (!machine_has_topology)
177     return cpu_present_map;
178     - mutex_lock(&smp_cpu_state_mutex);
179     + spin_lock_irqsave(&topology_lock, flags);
180     while (core) {
181     if (cpu_isset(cpu, core->mask)) {
182     mask = core->mask;
183     @@ -84,7 +87,7 @@ cpumask_t cpu_coregroup_map(unsigned int cpu)
184     }
185     core = core->next;
186     }
187     - mutex_unlock(&smp_cpu_state_mutex);
188     + spin_unlock_irqrestore(&topology_lock, flags);
189     if (cpus_empty(mask))
190     mask = cpumask_of_cpu(cpu);
191     return mask;
192     @@ -133,7 +136,7 @@ static void tl_to_cores(struct tl_info *info)
193     union tl_entry *tle, *end;
194     struct core_info *core = &core_info;
195    
196     - mutex_lock(&smp_cpu_state_mutex);
197     + spin_lock_irq(&topology_lock);
198     clear_cores();
199     tle = info->tle;
200     end = (union tl_entry *)((unsigned long)info + info->length);
201     @@ -157,7 +160,7 @@ static void tl_to_cores(struct tl_info *info)
202     }
203     tle = next_tle(tle);
204     }
205     - mutex_unlock(&smp_cpu_state_mutex);
206     + spin_unlock_irq(&topology_lock);
207     }
208    
209     static void topology_update_polarization_simple(void)
210     diff --git a/block/blk-merge.c b/block/blk-merge.c
211     index 5efc9e7..857dce7 100644
212     --- a/block/blk-merge.c
213     +++ b/block/blk-merge.c
214     @@ -95,6 +95,9 @@ new_hw_segment:
215     nr_hw_segs++;
216     }
217    
218     + if (nr_phys_segs == 1 && seg_size > rq->bio->bi_seg_front_size)
219     + rq->bio->bi_seg_front_size = seg_size;
220     +
221     nr_phys_segs++;
222     bvprv = bv;
223     seg_size = bv->bv_len;
224     @@ -106,6 +109,10 @@ new_hw_segment:
225     rq->bio->bi_hw_front_size = hw_seg_size;
226     if (hw_seg_size > rq->biotail->bi_hw_back_size)
227     rq->biotail->bi_hw_back_size = hw_seg_size;
228     + if (nr_phys_segs == 1 && seg_size > rq->bio->bi_seg_front_size)
229     + rq->bio->bi_seg_front_size = seg_size;
230     + if (seg_size > rq->biotail->bi_seg_back_size)
231     + rq->biotail->bi_seg_back_size = seg_size;
232     rq->nr_phys_segments = nr_phys_segs;
233     rq->nr_hw_segments = nr_hw_segs;
234     }
235     @@ -133,7 +140,8 @@ static int blk_phys_contig_segment(struct request_queue *q, struct bio *bio,
236    
237     if (!BIOVEC_PHYS_MERGEABLE(__BVEC_END(bio), __BVEC_START(nxt)))
238     return 0;
239     - if (bio->bi_size + nxt->bi_size > q->max_segment_size)
240     + if (bio->bi_seg_back_size + nxt->bi_seg_front_size >
241     + q->max_segment_size)
242     return 0;
243    
244     /*
245     @@ -377,6 +385,8 @@ static int ll_merge_requests_fn(struct request_queue *q, struct request *req,
246     {
247     int total_phys_segments;
248     int total_hw_segments;
249     + unsigned int seg_size =
250     + req->biotail->bi_seg_back_size + next->bio->bi_seg_front_size;
251    
252     /*
253     * First check if the either of the requests are re-queued
254     @@ -392,8 +402,13 @@ static int ll_merge_requests_fn(struct request_queue *q, struct request *req,
255     return 0;
256    
257     total_phys_segments = req->nr_phys_segments + next->nr_phys_segments;
258     - if (blk_phys_contig_segment(q, req->biotail, next->bio))
259     + if (blk_phys_contig_segment(q, req->biotail, next->bio)) {
260     + if (req->nr_phys_segments == 1)
261     + req->bio->bi_seg_front_size = seg_size;
262     + if (next->nr_phys_segments == 1)
263     + next->biotail->bi_seg_back_size = seg_size;
264     total_phys_segments--;
265     + }
266    
267     if (total_phys_segments > q->max_phys_segments)
268     return 0;
269     diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
270     index ccae305..c54f38e 100644
271     --- a/drivers/acpi/bus.c
272     +++ b/drivers/acpi/bus.c
273     @@ -95,21 +95,21 @@ int acpi_bus_get_status(struct acpi_device *device)
274     }
275    
276     /*
277     - * Otherwise we assume the status of our parent (unless we don't
278     - * have one, in which case status is implied).
279     + * According to ACPI spec some device can be present and functional
280     + * even if the parent is not present but functional.
281     + * In such conditions the child device should not inherit the status
282     + * from the parent.
283     */
284     - else if (device->parent)
285     - device->status = device->parent->status;
286     else
287     STRUCT_TO_INT(device->status) =
288     ACPI_STA_DEVICE_PRESENT | ACPI_STA_DEVICE_ENABLED |
289     ACPI_STA_DEVICE_UI | ACPI_STA_DEVICE_FUNCTIONING;
290    
291     if (device->status.functional && !device->status.present) {
292     - printk(KERN_WARNING PREFIX "Device [%s] status [%08x]: "
293     - "functional but not present; setting present\n",
294     - device->pnp.bus_id, (u32) STRUCT_TO_INT(device->status));
295     - device->status.present = 1;
296     + ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] status [%08x]: "
297     + "functional but not present;\n",
298     + device->pnp.bus_id,
299     + (u32) STRUCT_TO_INT(device->status)));
300     }
301    
302     ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] status [%08x]\n",
303     diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
304     index 444cd9e..41b8e7c 100644
305     --- a/drivers/acpi/ec.c
306     +++ b/drivers/acpi/ec.c
307     @@ -70,7 +70,7 @@ enum ec_command {
308     #define ACPI_EC_UDELAY_GLK 1000 /* Wait 1ms max. to get global lock */
309     #define ACPI_EC_UDELAY 100 /* Wait 100us before polling EC again */
310    
311     -#define ACPI_EC_STORM_THRESHOLD 20 /* number of false interrupts
312     +#define ACPI_EC_STORM_THRESHOLD 8 /* number of false interrupts
313     per one transaction */
314    
315     enum {
316     @@ -100,8 +100,11 @@ struct transaction {
317     u8 *rdata;
318     unsigned short irq_count;
319     u8 command;
320     + u8 wi;
321     + u8 ri;
322     u8 wlen;
323     u8 rlen;
324     + bool done;
325     };
326    
327     static struct acpi_ec {
328     @@ -178,34 +181,45 @@ static int ec_transaction_done(struct acpi_ec *ec)
329     unsigned long flags;
330     int ret = 0;
331     spin_lock_irqsave(&ec->curr_lock, flags);
332     - if (!ec->curr || (!ec->curr->wlen && !ec->curr->rlen))
333     + if (!ec->curr || ec->curr->done)
334     ret = 1;
335     spin_unlock_irqrestore(&ec->curr_lock, flags);
336     return ret;
337     }
338    
339     +static void start_transaction(struct acpi_ec *ec)
340     +{
341     + ec->curr->irq_count = ec->curr->wi = ec->curr->ri = 0;
342     + ec->curr->done = false;
343     + acpi_ec_write_cmd(ec, ec->curr->command);
344     +}
345     +
346     static void gpe_transaction(struct acpi_ec *ec, u8 status)
347     {
348     unsigned long flags;
349     spin_lock_irqsave(&ec->curr_lock, flags);
350     if (!ec->curr)
351     goto unlock;
352     - if (ec->curr->wlen > 0) {
353     - if ((status & ACPI_EC_FLAG_IBF) == 0) {
354     - acpi_ec_write_data(ec, *(ec->curr->wdata++));
355     - --ec->curr->wlen;
356     - } else
357     - /* false interrupt, state didn't change */
358     - ++ec->curr->irq_count;
359     -
360     - } else if (ec->curr->rlen > 0) {
361     + if (ec->curr->wlen > ec->curr->wi) {
362     + if ((status & ACPI_EC_FLAG_IBF) == 0)
363     + acpi_ec_write_data(ec,
364     + ec->curr->wdata[ec->curr->wi++]);
365     + else
366     + goto err;
367     + } else if (ec->curr->rlen > ec->curr->ri) {
368     if ((status & ACPI_EC_FLAG_OBF) == 1) {
369     - *(ec->curr->rdata++) = acpi_ec_read_data(ec);
370     - --ec->curr->rlen;
371     + ec->curr->rdata[ec->curr->ri++] = acpi_ec_read_data(ec);
372     + if (ec->curr->rlen == ec->curr->ri)
373     + ec->curr->done = true;
374     } else
375     - /* false interrupt, state didn't change */
376     - ++ec->curr->irq_count;
377     - }
378     + goto err;
379     + } else if (ec->curr->wlen == ec->curr->wi &&
380     + (status & ACPI_EC_FLAG_IBF) == 0)
381     + ec->curr->done = true;
382     + goto unlock;
383     +err:
384     + /* false interrupt, state didn't change */
385     + ++ec->curr->irq_count;
386     unlock:
387     spin_unlock_irqrestore(&ec->curr_lock, flags);
388     }
389     @@ -215,6 +229,15 @@ static int acpi_ec_wait(struct acpi_ec *ec)
390     if (wait_event_timeout(ec->wait, ec_transaction_done(ec),
391     msecs_to_jiffies(ACPI_EC_DELAY)))
392     return 0;
393     + /* try restart command if we get any false interrupts */
394     + if (ec->curr->irq_count &&
395     + (acpi_ec_read_status(ec) & ACPI_EC_FLAG_IBF) == 0) {
396     + pr_debug(PREFIX "controller reset, restart transaction\n");
397     + start_transaction(ec);
398     + if (wait_event_timeout(ec->wait, ec_transaction_done(ec),
399     + msecs_to_jiffies(ACPI_EC_DELAY)))
400     + return 0;
401     + }
402     /* missing GPEs, switch back to poll mode */
403     if (printk_ratelimit())
404     pr_info(PREFIX "missing confirmations, "
405     @@ -239,10 +262,10 @@ static int ec_check_sci(struct acpi_ec *ec, u8 state)
406     static int ec_poll(struct acpi_ec *ec)
407     {
408     unsigned long delay = jiffies + msecs_to_jiffies(ACPI_EC_DELAY);
409     - msleep(1);
410     + udelay(ACPI_EC_UDELAY);
411     while (time_before(jiffies, delay)) {
412     gpe_transaction(ec, acpi_ec_read_status(ec));
413     - msleep(1);
414     + udelay(ACPI_EC_UDELAY);
415     if (ec_transaction_done(ec))
416     return 0;
417     }
418     @@ -264,9 +287,8 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec,
419     /* start transaction */
420     spin_lock_irqsave(&ec->curr_lock, tmp);
421     /* following two actions should be kept atomic */
422     - t->irq_count = 0;
423     ec->curr = t;
424     - acpi_ec_write_cmd(ec, ec->curr->command);
425     + start_transaction(ec);
426     if (ec->curr->command == ACPI_EC_COMMAND_QUERY)
427     clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
428     spin_unlock_irqrestore(&ec->curr_lock, tmp);
429     @@ -286,7 +308,8 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec,
430     acpi_enable_gpe(NULL, ec->gpe, ACPI_NOT_ISR);
431     } else if (test_bit(EC_FLAGS_GPE_MODE, &ec->flags) &&
432     t->irq_count > ACPI_EC_STORM_THRESHOLD) {
433     - pr_debug(PREFIX "GPE storm detected\n");
434     + pr_info(PREFIX "GPE storm detected, "
435     + "transactions will use polling mode\n");
436     set_bit(EC_FLAGS_GPE_STORM, &ec->flags);
437     }
438     return ret;
439     @@ -558,17 +581,26 @@ static u32 acpi_ec_gpe_handler(void *data)
440     pr_debug(PREFIX "~~~> interrupt\n");
441     status = acpi_ec_read_status(ec);
442    
443     - gpe_transaction(ec, status);
444     - if (ec_transaction_done(ec) && (status & ACPI_EC_FLAG_IBF) == 0)
445     - wake_up(&ec->wait);
446     + if (test_bit(EC_FLAGS_GPE_MODE, &ec->flags)) {
447     + gpe_transaction(ec, status);
448     + if (ec_transaction_done(ec) &&
449     + (status & ACPI_EC_FLAG_IBF) == 0)
450     + wake_up(&ec->wait);
451     + }
452    
453     ec_check_sci(ec, status);
454     if (!test_bit(EC_FLAGS_GPE_MODE, &ec->flags) &&
455     !test_bit(EC_FLAGS_NO_GPE, &ec->flags)) {
456     /* this is non-query, must be confirmation */
457     - if (printk_ratelimit())
458     - pr_info(PREFIX "non-query interrupt received,"
459     + if (!test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) {
460     + if (printk_ratelimit())
461     + pr_info(PREFIX "non-query interrupt received,"
462     + " switching to interrupt mode\n");
463     + } else {
464     + /* hush, STORM switches the mode every transaction */
465     + pr_debug(PREFIX "non-query interrupt received,"
466     " switching to interrupt mode\n");
467     + }
468     set_bit(EC_FLAGS_GPE_MODE, &ec->flags);
469     }
470     return ACPI_INTERRUPT_HANDLED;
471     diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
472     index f6f52c1..0450761 100644
473     --- a/drivers/acpi/scan.c
474     +++ b/drivers/acpi/scan.c
475     @@ -276,6 +276,13 @@ int acpi_match_device_ids(struct acpi_device *device,
476     {
477     const struct acpi_device_id *id;
478    
479     + /*
480     + * If the device is not present, it is unnecessary to load device
481     + * driver for it.
482     + */
483     + if (!device->status.present)
484     + return -ENODEV;
485     +
486     if (device->flags.hardware_id) {
487     for (id = ids; id->id[0]; id++) {
488     if (!strcmp((char*)id->id, device->pnp.hardware_id))
489     @@ -1221,15 +1228,18 @@ acpi_add_single_object(struct acpi_device **child,
490     result = -ENODEV;
491     goto end;
492     }
493     - if (!device->status.present) {
494     - /* Bay and dock should be handled even if absent */
495     - if (!ACPI_SUCCESS(
496     - acpi_is_child_device(device, acpi_bay_match)) &&
497     - !ACPI_SUCCESS(
498     - acpi_is_child_device(device, acpi_dock_match))) {
499     - result = -ENODEV;
500     - goto end;
501     - }
502     + /*
503     + * When the device is neither present nor functional, the
504     + * device should not be added to Linux ACPI device tree.
505     + * When the status of the device is not present but functinal,
506     + * it should be added to Linux ACPI tree. For example : bay
507     + * device , dock device.
508     + * In such conditions it is unncessary to check whether it is
509     + * bay device or dock device.
510     + */
511     + if (!device->status.present && !device->status.functional) {
512     + result = -ENODEV;
513     + goto end;
514     }
515     break;
516     default:
517     @@ -1402,7 +1412,12 @@ static int acpi_bus_scan(struct acpi_device *start, struct acpi_bus_ops *ops)
518     * TBD: Need notifications and other detection mechanisms
519     * in place before we can fully implement this.
520     */
521     - if (child->status.present) {
522     + /*
523     + * When the device is not present but functional, it is also
524     + * necessary to scan the children of this device.
525     + */
526     + if (child->status.present || (!child->status.present &&
527     + child->status.functional)) {
528     status = acpi_get_next_object(ACPI_TYPE_ANY, chandle,
529     NULL, NULL);
530     if (ACPI_SUCCESS(status)) {
531     diff --git a/drivers/acpi/system.c b/drivers/acpi/system.c
532     index 91dec44..4745792 100644
533     --- a/drivers/acpi/system.c
534     +++ b/drivers/acpi/system.c
535     @@ -78,9 +78,15 @@ static ssize_t acpi_table_show(struct kobject *kobj,
536     container_of(bin_attr, struct acpi_table_attr, attr);
537     struct acpi_table_header *table_header = NULL;
538     acpi_status status;
539     + char name[ACPI_NAME_SIZE];
540     +
541     + if (strncmp(table_attr->name, "NULL", 4))
542     + memcpy(name, table_attr->name, ACPI_NAME_SIZE);
543     + else
544     + memcpy(name, "\0\0\0\0", 4);
545    
546     status =
547     - acpi_get_table(table_attr->name, table_attr->instance,
548     + acpi_get_table(name, table_attr->instance,
549     &table_header);
550     if (ACPI_FAILURE(status))
551     return -ENODEV;
552     @@ -95,21 +101,24 @@ static void acpi_table_attr_init(struct acpi_table_attr *table_attr,
553     struct acpi_table_header *header = NULL;
554     struct acpi_table_attr *attr = NULL;
555    
556     - memcpy(table_attr->name, table_header->signature, ACPI_NAME_SIZE);
557     + if (table_header->signature[0] != '\0')
558     + memcpy(table_attr->name, table_header->signature,
559     + ACPI_NAME_SIZE);
560     + else
561     + memcpy(table_attr->name, "NULL", 4);
562    
563     list_for_each_entry(attr, &acpi_table_attr_list, node) {
564     - if (!memcmp(table_header->signature, attr->name,
565     - ACPI_NAME_SIZE))
566     + if (!memcmp(table_attr->name, attr->name, ACPI_NAME_SIZE))
567     if (table_attr->instance < attr->instance)
568     table_attr->instance = attr->instance;
569     }
570     table_attr->instance++;
571    
572     if (table_attr->instance > 1 || (table_attr->instance == 1 &&
573     - !acpi_get_table(table_header->
574     - signature, 2,
575     - &header)))
576     - sprintf(table_attr->name + 4, "%d", table_attr->instance);
577     + !acpi_get_table
578     + (table_header->signature, 2, &header)))
579     + sprintf(table_attr->name + ACPI_NAME_SIZE, "%d",
580     + table_attr->instance);
581    
582     table_attr->attr.size = 0;
583     table_attr->attr.read = acpi_table_show;
584     diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
585     index 8a59aaa..7a88dfd 100644
586     --- a/drivers/char/ipmi/ipmi_msghandler.c
587     +++ b/drivers/char/ipmi/ipmi_msghandler.c
588     @@ -422,9 +422,11 @@ struct ipmi_smi {
589     /**
590     * The driver model view of the IPMI messaging driver.
591     */
592     -static struct device_driver ipmidriver = {
593     - .name = "ipmi",
594     - .bus = &platform_bus_type
595     +static struct platform_driver ipmidriver = {
596     + .driver = {
597     + .name = "ipmi",
598     + .bus = &platform_bus_type
599     + }
600     };
601     static DEFINE_MUTEX(ipmidriver_mutex);
602    
603     @@ -2384,9 +2386,9 @@ static int ipmi_bmc_register(ipmi_smi_t intf, int ifnum,
604     * representing the interfaced BMC already
605     */
606     if (bmc->guid_set)
607     - old_bmc = ipmi_find_bmc_guid(&ipmidriver, bmc->guid);
608     + old_bmc = ipmi_find_bmc_guid(&ipmidriver.driver, bmc->guid);
609     else
610     - old_bmc = ipmi_find_bmc_prod_dev_id(&ipmidriver,
611     + old_bmc = ipmi_find_bmc_prod_dev_id(&ipmidriver.driver,
612     bmc->id.product_id,
613     bmc->id.device_id);
614    
615     @@ -2416,7 +2418,7 @@ static int ipmi_bmc_register(ipmi_smi_t intf, int ifnum,
616     snprintf(name, sizeof(name),
617     "ipmi_bmc.%4.4x", bmc->id.product_id);
618    
619     - while (ipmi_find_bmc_prod_dev_id(&ipmidriver,
620     + while (ipmi_find_bmc_prod_dev_id(&ipmidriver.driver,
621     bmc->id.product_id,
622     bmc->id.device_id)) {
623     if (!warn_printed) {
624     @@ -2446,7 +2448,7 @@ static int ipmi_bmc_register(ipmi_smi_t intf, int ifnum,
625     " Unable to allocate platform device\n");
626     return -ENOMEM;
627     }
628     - bmc->dev->dev.driver = &ipmidriver;
629     + bmc->dev->dev.driver = &ipmidriver.driver;
630     dev_set_drvdata(&bmc->dev->dev, bmc);
631     kref_init(&bmc->refcount);
632    
633     @@ -4247,7 +4249,7 @@ static int ipmi_init_msghandler(void)
634     if (initialized)
635     return 0;
636    
637     - rv = driver_register(&ipmidriver);
638     + rv = driver_register(&ipmidriver.driver);
639     if (rv) {
640     printk(KERN_ERR PFX "Could not register IPMI driver\n");
641     return rv;
642     @@ -4308,7 +4310,7 @@ static __exit void cleanup_ipmi(void)
643     remove_proc_entry(proc_ipmi_root->name, NULL);
644     #endif /* CONFIG_PROC_FS */
645    
646     - driver_unregister(&ipmidriver);
647     + driver_unregister(&ipmidriver.driver);
648    
649     initialized = 0;
650    
651     diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
652     index 8e8afb6..7e860da 100644
653     --- a/drivers/char/ipmi/ipmi_si_intf.c
654     +++ b/drivers/char/ipmi/ipmi_si_intf.c
655     @@ -114,9 +114,11 @@ static char *si_to_str[] = { "kcs", "smic", "bt" };
656    
657     #define DEVICE_NAME "ipmi_si"
658    
659     -static struct device_driver ipmi_driver = {
660     - .name = DEVICE_NAME,
661     - .bus = &platform_bus_type
662     +static struct platform_driver ipmi_driver = {
663     + .driver = {
664     + .name = DEVICE_NAME,
665     + .bus = &platform_bus_type
666     + }
667     };
668    
669    
670     @@ -2868,7 +2870,7 @@ static int try_smi_init(struct smi_info *new_smi)
671     goto out_err;
672     }
673     new_smi->dev = &new_smi->pdev->dev;
674     - new_smi->dev->driver = &ipmi_driver;
675     + new_smi->dev->driver = &ipmi_driver.driver;
676    
677     rv = platform_device_add(new_smi->pdev);
678     if (rv) {
679     @@ -2983,7 +2985,7 @@ static __devinit int init_ipmi_si(void)
680     initialized = 1;
681    
682     /* Register the device drivers. */
683     - rv = driver_register(&ipmi_driver);
684     + rv = driver_register(&ipmi_driver.driver);
685     if (rv) {
686     printk(KERN_ERR
687     "init_ipmi_si: Unable to register driver: %d\n",
688     @@ -3052,7 +3054,7 @@ static __devinit int init_ipmi_si(void)
689     #ifdef CONFIG_PPC_OF
690     of_unregister_platform_driver(&ipmi_of_platform_driver);
691     #endif
692     - driver_unregister(&ipmi_driver);
693     + driver_unregister(&ipmi_driver.driver);
694     printk(KERN_WARNING
695     "ipmi_si: Unable to find any System Interface(s)\n");
696     return -ENODEV;
697     @@ -3151,7 +3153,7 @@ static __exit void cleanup_ipmi_si(void)
698     cleanup_one_si(e);
699     mutex_unlock(&smi_infos_lock);
700    
701     - driver_unregister(&ipmi_driver);
702     + driver_unregister(&ipmi_driver.driver);
703     }
704     module_exit(cleanup_ipmi_si);
705    
706     diff --git a/drivers/hwmon/ibmaem.c b/drivers/hwmon/ibmaem.c
707     index 0f70dc2..7e909e8 100644
708     --- a/drivers/hwmon/ibmaem.c
709     +++ b/drivers/hwmon/ibmaem.c
710     @@ -88,9 +88,11 @@
711     static DEFINE_IDR(aem_idr);
712     static DEFINE_SPINLOCK(aem_idr_lock);
713    
714     -static struct device_driver aem_driver = {
715     - .name = DRVNAME,
716     - .bus = &platform_bus_type,
717     +static struct platform_driver aem_driver = {
718     + .driver = {
719     + .name = DRVNAME,
720     + .bus = &platform_bus_type,
721     + }
722     };
723    
724     struct aem_ipmi_data {
725     @@ -583,7 +585,7 @@ static int aem_init_aem1_inst(struct aem_ipmi_data *probe, u8 module_handle)
726     data->pdev = platform_device_alloc(DRVNAME, data->id);
727     if (!data->pdev)
728     goto dev_err;
729     - data->pdev->dev.driver = &aem_driver;
730     + data->pdev->dev.driver = &aem_driver.driver;
731    
732     res = platform_device_add(data->pdev);
733     if (res)
734     @@ -716,7 +718,7 @@ static int aem_init_aem2_inst(struct aem_ipmi_data *probe,
735     data->pdev = platform_device_alloc(DRVNAME, data->id);
736     if (!data->pdev)
737     goto dev_err;
738     - data->pdev->dev.driver = &aem_driver;
739     + data->pdev->dev.driver = &aem_driver.driver;
740    
741     res = platform_device_add(data->pdev);
742     if (res)
743     @@ -1085,7 +1087,7 @@ static int __init aem_init(void)
744     {
745     int res;
746    
747     - res = driver_register(&aem_driver);
748     + res = driver_register(&aem_driver.driver);
749     if (res) {
750     printk(KERN_ERR "Can't register aem driver\n");
751     return res;
752     @@ -1097,7 +1099,7 @@ static int __init aem_init(void)
753     return 0;
754    
755     ipmi_reg_err:
756     - driver_unregister(&aem_driver);
757     + driver_unregister(&aem_driver.driver);
758     return res;
759    
760     }
761     @@ -1107,7 +1109,7 @@ static void __exit aem_exit(void)
762     struct aem_data *p1, *next1;
763    
764     ipmi_smi_watcher_unregister(&driver_data.bmc_events);
765     - driver_unregister(&aem_driver);
766     + driver_unregister(&aem_driver.driver);
767     list_for_each_entry_safe(p1, next1, &driver_data.aem_devices, list)
768     aem_delete(p1);
769     }
770     diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
771     index 385e32b..cbedf95 100644
772     --- a/drivers/input/mouse/alps.c
773     +++ b/drivers/input/mouse/alps.c
774     @@ -54,6 +54,7 @@ static const struct alps_model_info alps_model_data[] = {
775     { { 0x20, 0x02, 0x0e }, 0xf8, 0xf8, ALPS_PASS | ALPS_DUALPOINT }, /* XXX */
776     { { 0x22, 0x02, 0x0a }, 0xf8, 0xf8, ALPS_PASS | ALPS_DUALPOINT },
777     { { 0x22, 0x02, 0x14 }, 0xff, 0xff, ALPS_PASS | ALPS_DUALPOINT }, /* Dell Latitude D600 */
778     + { { 0x62, 0x02, 0x14 }, 0xcf, 0xcf, ALPS_PASS | ALPS_DUALPOINT }, /* Dell Latitude E6500 */
779     { { 0x73, 0x02, 0x50 }, 0xcf, 0xcf, ALPS_FW_BK_1 } /* Dell Vostro 1400 */
780     };
781    
782     diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c
783     index ff05fe8..97ef945 100644
784     --- a/drivers/md/dm-raid1.c
785     +++ b/drivers/md/dm-raid1.c
786     @@ -1598,6 +1598,7 @@ static void mirror_dtr(struct dm_target *ti)
787    
788     del_timer_sync(&ms->timer);
789     flush_workqueue(ms->kmirrord_wq);
790     + flush_scheduled_work();
791     dm_kcopyd_client_destroy(ms->kcopyd_client);
792     destroy_workqueue(ms->kmirrord_wq);
793     free_context(ms, ti, ms->nr_mirrors);
794     diff --git a/drivers/media/video/tvaudio.c b/drivers/media/video/tvaudio.c
795     index b59e472..d74df58 100644
796     --- a/drivers/media/video/tvaudio.c
797     +++ b/drivers/media/video/tvaudio.c
798     @@ -1576,13 +1576,13 @@ static int tvaudio_get_ctrl(struct CHIPSTATE *chip,
799     return 0;
800     }
801     case V4L2_CID_AUDIO_BASS:
802     - if (desc->flags & CHIP_HAS_BASSTREBLE)
803     + if (!(desc->flags & CHIP_HAS_BASSTREBLE))
804     break;
805     ctrl->value = chip->bass;
806     return 0;
807     case V4L2_CID_AUDIO_TREBLE:
808     - if (desc->flags & CHIP_HAS_BASSTREBLE)
809     - return -EINVAL;
810     + if (!(desc->flags & CHIP_HAS_BASSTREBLE))
811     + break;
812     ctrl->value = chip->treble;
813     return 0;
814     }
815     @@ -1642,16 +1642,15 @@ static int tvaudio_set_ctrl(struct CHIPSTATE *chip,
816     return 0;
817     }
818     case V4L2_CID_AUDIO_BASS:
819     - if (desc->flags & CHIP_HAS_BASSTREBLE)
820     + if (!(desc->flags & CHIP_HAS_BASSTREBLE))
821     break;
822     chip->bass = ctrl->value;
823     chip_write(chip,desc->bassreg,desc->bassfunc(chip->bass));
824    
825     return 0;
826     case V4L2_CID_AUDIO_TREBLE:
827     - if (desc->flags & CHIP_HAS_BASSTREBLE)
828     - return -EINVAL;
829     -
830     + if (!(desc->flags & CHIP_HAS_BASSTREBLE))
831     + break;
832     chip->treble = ctrl->value;
833     chip_write(chip,desc->treblereg,desc->treblefunc(chip->treble));
834    
835     @@ -1695,7 +1694,7 @@ static int chip_command(struct i2c_client *client,
836     break;
837     case V4L2_CID_AUDIO_BASS:
838     case V4L2_CID_AUDIO_TREBLE:
839     - if (desc->flags & CHIP_HAS_BASSTREBLE)
840     + if (!(desc->flags & CHIP_HAS_BASSTREBLE))
841     return -EINVAL;
842     break;
843     default:
844     diff --git a/drivers/misc/sony-laptop.c b/drivers/misc/sony-laptop.c
845     index 60775be..b35eb92 100644
846     --- a/drivers/misc/sony-laptop.c
847     +++ b/drivers/misc/sony-laptop.c
848     @@ -2315,8 +2315,10 @@ end:
849     */
850     static int sony_pic_disable(struct acpi_device *device)
851     {
852     - if (ACPI_FAILURE(acpi_evaluate_object(device->handle,
853     - "_DIS", NULL, NULL)))
854     + acpi_status ret = acpi_evaluate_object(device->handle, "_DIS", NULL,
855     + NULL);
856     +
857     + if (ACPI_FAILURE(ret) && ret != AE_NOT_FOUND)
858     return -ENXIO;
859    
860     dprintk("Device disabled\n");
861     diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
862     index 4a11296..60a0453 100644
863     --- a/drivers/net/Kconfig
864     +++ b/drivers/net/Kconfig
865     @@ -2046,6 +2046,7 @@ config R8169
866     tristate "Realtek 8169 gigabit ethernet support"
867     depends on PCI
868     select CRC32
869     + select MII
870     ---help---
871     Say Y here if you have a Realtek 8169 PCI Gigabit Ethernet adapter.
872    
873     diff --git a/drivers/net/bnx2x_init.h b/drivers/net/bnx2x_init.h
874     index 130927c..a6c0b3a 100644
875     --- a/drivers/net/bnx2x_init.h
876     +++ b/drivers/net/bnx2x_init.h
877     @@ -564,14 +564,15 @@ static const struct arb_line write_arb_addr[NUM_WR_Q-1] = {
878    
879     static void bnx2x_init_pxp(struct bnx2x *bp)
880     {
881     + u16 devctl;
882     int r_order, w_order;
883     u32 val, i;
884    
885     pci_read_config_word(bp->pdev,
886     - bp->pcie_cap + PCI_EXP_DEVCTL, (u16 *)&val);
887     - DP(NETIF_MSG_HW, "read 0x%x from devctl\n", (u16)val);
888     - w_order = ((val & PCI_EXP_DEVCTL_PAYLOAD) >> 5);
889     - r_order = ((val & PCI_EXP_DEVCTL_READRQ) >> 12);
890     + bp->pcie_cap + PCI_EXP_DEVCTL, &devctl);
891     + DP(NETIF_MSG_HW, "read 0x%x from devctl\n", devctl);
892     + w_order = ((devctl & PCI_EXP_DEVCTL_PAYLOAD) >> 5);
893     + r_order = ((devctl & PCI_EXP_DEVCTL_READRQ) >> 12);
894    
895     if (r_order > MAX_RD_ORD) {
896     DP(NETIF_MSG_HW, "read order of %d order adjusted to %d\n",
897     diff --git a/drivers/net/bnx2x_main.c b/drivers/net/bnx2x_main.c
898     index a8eb3c4..53459db 100644
899     --- a/drivers/net/bnx2x_main.c
900     +++ b/drivers/net/bnx2x_main.c
901     @@ -6480,6 +6480,7 @@ load_int_disable:
902     bnx2x_free_irq(bp);
903     load_error:
904     bnx2x_free_mem(bp);
905     + bp->port.pmf = 0;
906    
907     /* TBD we really need to reset the chip
908     if we want to recover from this */
909     @@ -6790,6 +6791,7 @@ unload_error:
910     /* Report UNLOAD_DONE to MCP */
911     if (!BP_NOMCP(bp))
912     bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_DONE);
913     + bp->port.pmf = 0;
914    
915     /* Free SKBs, SGEs, TPA pool and driver internals */
916     bnx2x_free_skbs(bp);
917     @@ -10203,8 +10205,6 @@ static int __devinit bnx2x_init_one(struct pci_dev *pdev,
918     return -ENOMEM;
919     }
920    
921     - netif_carrier_off(dev);
922     -
923     bp = netdev_priv(dev);
924     bp->msglevel = debug;
925    
926     @@ -10228,6 +10228,8 @@ static int __devinit bnx2x_init_one(struct pci_dev *pdev,
927     goto init_one_exit;
928     }
929    
930     + netif_carrier_off(dev);
931     +
932     bp->common.name = board_info[ent->driver_data].name;
933     printk(KERN_INFO "%s: %s (%c%d) PCI-E x%d %s found at mem %lx,"
934     " IRQ %d, ", dev->name, bp->common.name,
935     diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c
936     index 0676c6d..a225827 100644
937     --- a/drivers/net/wireless/ath5k/base.c
938     +++ b/drivers/net/wireless/ath5k/base.c
939     @@ -294,9 +294,9 @@ static inline u64 ath5k_extend_tsf(struct ath5k_hw *ah, u32 rstamp)
940     }
941    
942     /* Interrupt handling */
943     -static int ath5k_init(struct ath5k_softc *sc);
944     +static int ath5k_init(struct ath5k_softc *sc, bool is_resume);
945     static int ath5k_stop_locked(struct ath5k_softc *sc);
946     -static int ath5k_stop_hw(struct ath5k_softc *sc);
947     +static int ath5k_stop_hw(struct ath5k_softc *sc, bool is_suspend);
948     static irqreturn_t ath5k_intr(int irq, void *dev_id);
949     static void ath5k_tasklet_reset(unsigned long data);
950    
951     @@ -584,7 +584,7 @@ ath5k_pci_suspend(struct pci_dev *pdev, pm_message_t state)
952    
953     ath5k_led_off(sc);
954    
955     - ath5k_stop_hw(sc);
956     + ath5k_stop_hw(sc, true);
957    
958     free_irq(pdev->irq, sc);
959     pci_save_state(pdev);
960     @@ -599,8 +599,7 @@ ath5k_pci_resume(struct pci_dev *pdev)
961     {
962     struct ieee80211_hw *hw = pci_get_drvdata(pdev);
963     struct ath5k_softc *sc = hw->priv;
964     - struct ath5k_hw *ah = sc->ah;
965     - int i, err;
966     + int err;
967    
968     pci_restore_state(pdev);
969    
970     @@ -621,21 +620,11 @@ ath5k_pci_resume(struct pci_dev *pdev)
971     goto err_no_irq;
972     }
973    
974     - err = ath5k_init(sc);
975     + err = ath5k_init(sc, true);
976     if (err)
977     goto err_irq;
978     ath5k_led_enable(sc);
979    
980     - /*
981     - * Reset the key cache since some parts do not
982     - * reset the contents on initial power up or resume.
983     - *
984     - * FIXME: This may need to be revisited when mac80211 becomes
985     - * aware of suspend/resume.
986     - */
987     - for (i = 0; i < AR5K_KEYTABLE_SIZE; i++)
988     - ath5k_hw_reset_key(ah, i);
989     -
990     return 0;
991     err_irq:
992     free_irq(pdev->irq, sc);
993     @@ -657,7 +646,6 @@ ath5k_attach(struct pci_dev *pdev, struct ieee80211_hw *hw)
994     struct ath5k_softc *sc = hw->priv;
995     struct ath5k_hw *ah = sc->ah;
996     u8 mac[ETH_ALEN];
997     - unsigned int i;
998     int ret;
999    
1000     ATH5K_DBG(sc, ATH5K_DEBUG_ANY, "devid 0x%x\n", pdev->device);
1001     @@ -676,13 +664,6 @@ ath5k_attach(struct pci_dev *pdev, struct ieee80211_hw *hw)
1002     __set_bit(ATH_STAT_MRRETRY, sc->status);
1003    
1004     /*
1005     - * Reset the key cache since some parts do not
1006     - * reset the contents on initial power up.
1007     - */
1008     - for (i = 0; i < AR5K_KEYTABLE_SIZE; i++)
1009     - ath5k_hw_reset_key(ah, i);
1010     -
1011     - /*
1012     * Collect the channel list. The 802.11 layer
1013     * is resposible for filtering this list based
1014     * on settings like the phy mode and regulatory
1015     @@ -2197,12 +2178,18 @@ ath5k_beacon_config(struct ath5k_softc *sc)
1016     \********************/
1017    
1018     static int
1019     -ath5k_init(struct ath5k_softc *sc)
1020     +ath5k_init(struct ath5k_softc *sc, bool is_resume)
1021     {
1022     - int ret;
1023     + struct ath5k_hw *ah = sc->ah;
1024     + int ret, i;
1025    
1026     mutex_lock(&sc->lock);
1027    
1028     + if (is_resume && !test_bit(ATH_STAT_STARTED, sc->status))
1029     + goto out_ok;
1030     +
1031     + __clear_bit(ATH_STAT_STARTED, sc->status);
1032     +
1033     ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "mode %d\n", sc->opmode);
1034    
1035     /*
1036     @@ -2220,7 +2207,7 @@ ath5k_init(struct ath5k_softc *sc)
1037     */
1038     sc->curchan = sc->hw->conf.channel;
1039     sc->curband = &sc->sbands[sc->curchan->band];
1040     - ret = ath5k_hw_reset(sc->ah, sc->opmode, sc->curchan, false);
1041     + ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, false);
1042     if (ret) {
1043     ATH5K_ERR(sc, "unable to reset hardware: %d\n", ret);
1044     goto done;
1045     @@ -2229,7 +2216,14 @@ ath5k_init(struct ath5k_softc *sc)
1046     * This is needed only to setup initial state
1047     * but it's best done after a reset.
1048     */
1049     - ath5k_hw_set_txpower_limit(sc->ah, 0);
1050     + ath5k_hw_set_txpower_limit(ah, 0);
1051     +
1052     + /*
1053     + * Reset the key cache since some parts do not reset the
1054     + * contents on initial power up or resume from suspend.
1055     + */
1056     + for (i = 0; i < AR5K_KEYTABLE_SIZE; i++)
1057     + ath5k_hw_reset_key(ah, i);
1058    
1059     /*
1060     * Setup the hardware after reset: the key cache
1061     @@ -2249,13 +2243,17 @@ ath5k_init(struct ath5k_softc *sc)
1062     AR5K_INT_RXORN | AR5K_INT_FATAL | AR5K_INT_GLOBAL |
1063     AR5K_INT_MIB;
1064    
1065     - ath5k_hw_set_intr(sc->ah, sc->imask);
1066     + ath5k_hw_set_intr(ah, sc->imask);
1067     +
1068     + __set_bit(ATH_STAT_STARTED, sc->status);
1069     +
1070     /* Set ack to be sent at low bit-rates */
1071     - ath5k_hw_set_ack_bitrate_high(sc->ah, false);
1072     + ath5k_hw_set_ack_bitrate_high(ah, false);
1073    
1074     mod_timer(&sc->calib_tim, round_jiffies(jiffies +
1075     msecs_to_jiffies(ath5k_calinterval * 1000)));
1076    
1077     +out_ok:
1078     ret = 0;
1079     done:
1080     mmiowb();
1081     @@ -2310,7 +2308,7 @@ ath5k_stop_locked(struct ath5k_softc *sc)
1082     * stop is preempted).
1083     */
1084     static int
1085     -ath5k_stop_hw(struct ath5k_softc *sc)
1086     +ath5k_stop_hw(struct ath5k_softc *sc, bool is_suspend)
1087     {
1088     int ret;
1089    
1090     @@ -2341,6 +2339,9 @@ ath5k_stop_hw(struct ath5k_softc *sc)
1091     }
1092     }
1093     ath5k_txbuf_free(sc, sc->bbuf);
1094     + if (!is_suspend)
1095     + __clear_bit(ATH_STAT_STARTED, sc->status);
1096     +
1097     mmiowb();
1098     mutex_unlock(&sc->lock);
1099    
1100     @@ -2719,12 +2720,12 @@ err:
1101    
1102     static int ath5k_start(struct ieee80211_hw *hw)
1103     {
1104     - return ath5k_init(hw->priv);
1105     + return ath5k_init(hw->priv, false);
1106     }
1107    
1108     static void ath5k_stop(struct ieee80211_hw *hw)
1109     {
1110     - ath5k_stop_hw(hw->priv);
1111     + ath5k_stop_hw(hw->priv, false);
1112     }
1113    
1114     static int ath5k_add_interface(struct ieee80211_hw *hw,
1115     diff --git a/drivers/net/wireless/ath5k/base.h b/drivers/net/wireless/ath5k/base.h
1116     index 7ec2f37..214a565 100644
1117     --- a/drivers/net/wireless/ath5k/base.h
1118     +++ b/drivers/net/wireless/ath5k/base.h
1119     @@ -132,11 +132,12 @@ struct ath5k_softc {
1120     size_t desc_len; /* size of TX/RX descriptors */
1121     u16 cachelsz; /* cache line size */
1122    
1123     - DECLARE_BITMAP(status, 4);
1124     + DECLARE_BITMAP(status, 5);
1125     #define ATH_STAT_INVALID 0 /* disable hardware accesses */
1126     #define ATH_STAT_MRRETRY 1 /* multi-rate retry support */
1127     #define ATH_STAT_PROMISC 2
1128     #define ATH_STAT_LEDSOFT 3 /* enable LED gpio status */
1129     +#define ATH_STAT_STARTED 4 /* opened & irqs enabled */
1130    
1131     unsigned int filter_flags; /* HW flags, AR5K_RX_FILTER_* */
1132     unsigned int curmode; /* current phy mode */
1133     diff --git a/drivers/net/wireless/ath5k/hw.c b/drivers/net/wireless/ath5k/hw.c
1134     index ad1a5b4..9b40cbe 100644
1135     --- a/drivers/net/wireless/ath5k/hw.c
1136     +++ b/drivers/net/wireless/ath5k/hw.c
1137     @@ -826,9 +826,10 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode,
1138     mdelay(1);
1139    
1140     /*
1141     - * Write some more initial register settings
1142     + * Write some more initial register settings for revised chips
1143     */
1144     - if (ah->ah_version == AR5K_AR5212) {
1145     + if (ah->ah_version == AR5K_AR5212 &&
1146     + ah->ah_phy_revision > 0x41) {
1147     ath5k_hw_reg_write(ah, 0x0002a002, 0x982c);
1148    
1149     if (channel->hw_value == CHANNEL_G)
1150     @@ -847,19 +848,10 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode,
1151     else
1152     ath5k_hw_reg_write(ah, 0x00000000, 0x994c);
1153    
1154     - /* Some bits are disabled here, we know nothing about
1155     - * register 0xa228 yet, most of the times this ends up
1156     - * with a value 0x9b5 -haven't seen any dump with
1157     - * a different value- */
1158     - /* Got this from decompiling binary HAL */
1159     - data = ath5k_hw_reg_read(ah, 0xa228);
1160     - data &= 0xfffffdff;
1161     - ath5k_hw_reg_write(ah, data, 0xa228);
1162     -
1163     - data = ath5k_hw_reg_read(ah, 0xa228);
1164     - data &= 0xfffe03ff;
1165     - ath5k_hw_reg_write(ah, data, 0xa228);
1166     - data = 0;
1167     + /* Got this from legacy-hal */
1168     + AR5K_REG_DISABLE_BITS(ah, 0xa228, 0x200);
1169     +
1170     + AR5K_REG_MASKED_BITS(ah, 0xa228, 2 << 10, ~0x1fc00);
1171    
1172     /* Just write 0x9b5 ? */
1173     /* ath5k_hw_reg_write(ah, 0x000009b5, 0xa228); */
1174     diff --git a/drivers/net/wireless/ath5k/initvals.c b/drivers/net/wireless/ath5k/initvals.c
1175     index 2806b21..cf7ebd1 100644
1176     --- a/drivers/net/wireless/ath5k/initvals.c
1177     +++ b/drivers/net/wireless/ath5k/initvals.c
1178     @@ -810,6 +810,8 @@ static const struct ath5k_ini_mode ar5212_rf5111_ini_mode_end[] = {
1179     { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },
1180     { AR5K_PHY(642),
1181     { 0xd03e6788, 0xd03e6788, 0xd03e6788, 0xd03e6788, 0xd03e6788 } },
1182     + { 0xa228,
1183     + { 0x000001b5, 0x000001b5, 0x000001b5, 0x000001b5, 0x000001b5 } },
1184     { 0xa23c,
1185     { 0x13c889af, 0x13c889af, 0x13c889af, 0x13c889af, 0x13c889af } },
1186     };
1187     diff --git a/drivers/net/wireless/hostap/hostap_wlan.h b/drivers/net/wireless/hostap/hostap_wlan.h
1188     index ffdf487..a68f97c 100644
1189     --- a/drivers/net/wireless/hostap/hostap_wlan.h
1190     +++ b/drivers/net/wireless/hostap/hostap_wlan.h
1191     @@ -918,9 +918,12 @@ struct hostap_interface {
1192    
1193     /*
1194     * TX meta data - stored in skb->cb buffer, so this must not be increased over
1195     - * the 40-byte limit
1196     + * the 48-byte limit.
1197     + * THE PADDING THIS STARTS WITH IS A HORRIBLE HACK THAT SHOULD NOT LIVE
1198     + * TO SEE THE DAY.
1199     */
1200     struct hostap_skb_tx_data {
1201     + unsigned int __padding_for_default_qdiscs;
1202     u32 magic; /* HOSTAP_SKB_TX_DATA_MAGIC */
1203     u8 rate; /* transmit rate */
1204     #define HOSTAP_TX_FLAGS_WDS BIT(0)
1205     diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
1206     index 72a6743..cf7056e 100644
1207     --- a/drivers/net/wireless/iwlwifi/iwl-agn.c
1208     +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
1209     @@ -3275,7 +3275,11 @@ static void iwl4965_mac_update_tkip_key(struct ieee80211_hw *hw,
1210     return;
1211     }
1212    
1213     - iwl_scan_cancel_timeout(priv, 100);
1214     + if (iwl_scan_cancel(priv)) {
1215     + /* cancel scan failed, just live w/ bad key and rely
1216     + briefly on SW decryption */
1217     + return;
1218     + }
1219    
1220     key_flags |= (STA_KEY_FLG_TKIP | STA_KEY_FLG_MAP_KEY_MSK);
1221     key_flags |= cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS);
1222     diff --git a/drivers/net/wireless/rtl8187_dev.c b/drivers/net/wireless/rtl8187_dev.c
1223     index ca5deb6..0cebbc4 100644
1224     --- a/drivers/net/wireless/rtl8187_dev.c
1225     +++ b/drivers/net/wireless/rtl8187_dev.c
1226     @@ -45,6 +45,9 @@ static struct usb_device_id rtl8187_table[] __devinitdata = {
1227     {USB_DEVICE(0x03f0, 0xca02), .driver_info = DEVICE_RTL8187},
1228     /* Sitecom */
1229     {USB_DEVICE(0x0df6, 0x000d), .driver_info = DEVICE_RTL8187},
1230     + {USB_DEVICE(0x0df6, 0x0028), .driver_info = DEVICE_RTL8187B},
1231     + /* Abocom */
1232     + {USB_DEVICE(0x13d1, 0xabe6), .driver_info = DEVICE_RTL8187},
1233     {}
1234     };
1235    
1236     diff --git a/drivers/pnp/pnpacpi/core.c b/drivers/pnp/pnpacpi/core.c
1237     index c1b9ea3..98b9df7 100644
1238     --- a/drivers/pnp/pnpacpi/core.c
1239     +++ b/drivers/pnp/pnpacpi/core.c
1240     @@ -148,9 +148,13 @@ static int __init pnpacpi_add_device(struct acpi_device *device)
1241     acpi_status status;
1242     struct pnp_dev *dev;
1243    
1244     + /*
1245     + * If a PnPacpi device is not present , the device
1246     + * driver should not be loaded.
1247     + */
1248     status = acpi_get_handle(device->handle, "_CRS", &temp);
1249     if (ACPI_FAILURE(status) || !ispnpidacpi(acpi_device_hid(device)) ||
1250     - is_exclusive_device(device))
1251     + is_exclusive_device(device) || (!device->status.present))
1252     return 0;
1253    
1254     dev = pnp_alloc_dev(&pnpacpi_protocol, num, acpi_device_hid(device));
1255     diff --git a/drivers/scsi/dpt_i2o.c b/drivers/scsi/dpt_i2o.c
1256     index 1fe0901..7716145 100644
1257     --- a/drivers/scsi/dpt_i2o.c
1258     +++ b/drivers/scsi/dpt_i2o.c
1259     @@ -2445,7 +2445,7 @@ static s32 adpt_i2o_to_scsi(void __iomem *reply, struct scsi_cmnd* cmd)
1260     hba_status = detailed_status >> 8;
1261    
1262     // calculate resid for sg
1263     - scsi_set_resid(cmd, scsi_bufflen(cmd) - readl(reply+5));
1264     + scsi_set_resid(cmd, scsi_bufflen(cmd) - readl(reply+20));
1265    
1266     pHba = (adpt_hba*) cmd->device->host->hostdata[0];
1267    
1268     @@ -2456,7 +2456,7 @@ static s32 adpt_i2o_to_scsi(void __iomem *reply, struct scsi_cmnd* cmd)
1269     case I2O_SCSI_DSC_SUCCESS:
1270     cmd->result = (DID_OK << 16);
1271     // handle underflow
1272     - if(readl(reply+5) < cmd->underflow ) {
1273     + if (readl(reply+20) < cmd->underflow) {
1274     cmd->result = (DID_ERROR <<16);
1275     printk(KERN_WARNING"%s: SCSI CMD underflow\n",pHba->name);
1276     }
1277     diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
1278     index 94a720e..00f6780 100644
1279     --- a/drivers/scsi/qla2xxx/qla_def.h
1280     +++ b/drivers/scsi/qla2xxx/qla_def.h
1281     @@ -2546,7 +2546,6 @@ typedef struct scsi_qla_host {
1282     uint8_t fcode_revision[16];
1283     uint32_t fw_revision[4];
1284    
1285     - uint16_t fdt_odd_index;
1286     uint32_t fdt_wrt_disable;
1287     uint32_t fdt_erase_cmd;
1288     uint32_t fdt_block_size;
1289     diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
1290     index ee89ddd..3a0a178 100644
1291     --- a/drivers/scsi/qla2xxx/qla_init.c
1292     +++ b/drivers/scsi/qla2xxx/qla_init.c
1293     @@ -974,7 +974,6 @@ qla2x00_setup_chip(scsi_qla_host_t *ha)
1294     &ha->fw_minor_version,
1295     &ha->fw_subminor_version,
1296     &ha->fw_attributes, &ha->fw_memory_size);
1297     - qla2x00_resize_request_q(ha);
1298     ha->flags.npiv_supported = 0;
1299     if ((IS_QLA24XX(ha) || IS_QLA25XX(ha) ||
1300     IS_QLA84XX(ha)) &&
1301     @@ -986,6 +985,7 @@ qla2x00_setup_chip(scsi_qla_host_t *ha)
1302     ha->max_npiv_vports =
1303     MIN_MULTI_ID_FABRIC - 1;
1304     }
1305     + qla2x00_resize_request_q(ha);
1306    
1307     if (ql2xallocfwdump)
1308     qla2x00_alloc_fw_dump(ha);
1309     diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
1310     index 813bc77..c07e879 100644
1311     --- a/drivers/scsi/qla2xxx/qla_mbx.c
1312     +++ b/drivers/scsi/qla2xxx/qla_mbx.c
1313     @@ -1964,7 +1964,7 @@ qla2x00_get_resource_cnts(scsi_qla_host_t *ha, uint16_t *cur_xchg_cnt,
1314     *cur_iocb_cnt = mcp->mb[7];
1315     if (orig_iocb_cnt)
1316     *orig_iocb_cnt = mcp->mb[10];
1317     - if (max_npiv_vports)
1318     + if (ha->flags.npiv_supported && max_npiv_vports)
1319     *max_npiv_vports = mcp->mb[11];
1320     }
1321    
1322     diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
1323     index 6d0f0e5..86e143c 100644
1324     --- a/drivers/scsi/qla2xxx/qla_os.c
1325     +++ b/drivers/scsi/qla2xxx/qla_os.c
1326     @@ -730,6 +730,7 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd)
1327     if (ha->isp_ops->abort_command(ha, sp)) {
1328     DEBUG2(printk("%s(%ld): abort_command "
1329     "mbx failed.\n", __func__, ha->host_no));
1330     + ret = FAILED;
1331     } else {
1332     DEBUG3(printk("%s(%ld): abort_command "
1333     "mbx success.\n", __func__, ha->host_no));
1334     diff --git a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c
1335     index 1bca744..910c3b3 100644
1336     --- a/drivers/scsi/qla2xxx/qla_sup.c
1337     +++ b/drivers/scsi/qla2xxx/qla_sup.c
1338     @@ -546,6 +546,7 @@ qla24xx_get_flash_manufacturer(scsi_qla_host_t *ha, uint8_t *man_id,
1339     void
1340     qla2xxx_get_flash_info(scsi_qla_host_t *ha)
1341     {
1342     +#define FLASH_BLK_SIZE_4K 0x1000
1343     #define FLASH_BLK_SIZE_32K 0x8000
1344     #define FLASH_BLK_SIZE_64K 0x10000
1345     uint16_t cnt, chksum;
1346     @@ -577,7 +578,6 @@ qla2xxx_get_flash_info(scsi_qla_host_t *ha)
1347     goto no_flash_data;
1348     }
1349    
1350     - ha->fdt_odd_index = le16_to_cpu(fdt->man_id) == 0x1f;
1351     ha->fdt_wrt_disable = fdt->wrt_disable_bits;
1352     ha->fdt_erase_cmd = flash_conf_to_access_addr(0x0300 | fdt->erase_cmd);
1353     ha->fdt_block_size = le32_to_cpu(fdt->block_size);
1354     @@ -590,10 +590,10 @@ qla2xxx_get_flash_info(scsi_qla_host_t *ha)
1355     }
1356    
1357     DEBUG2(qla_printk(KERN_DEBUG, ha, "Flash[FDT]: (0x%x/0x%x) erase=0x%x "
1358     - "pro=%x upro=%x idx=%d wrtd=0x%x blk=0x%x.\n",
1359     + "pro=%x upro=%x wrtd=0x%x blk=0x%x.\n",
1360     le16_to_cpu(fdt->man_id), le16_to_cpu(fdt->id), ha->fdt_erase_cmd,
1361     ha->fdt_protect_sec_cmd, ha->fdt_unprotect_sec_cmd,
1362     - ha->fdt_odd_index, ha->fdt_wrt_disable, ha->fdt_block_size));
1363     + ha->fdt_wrt_disable, ha->fdt_block_size));
1364     return;
1365    
1366     no_flash_data:
1367     @@ -614,8 +614,7 @@ no_flash_data:
1368     ha->fdt_block_size = FLASH_BLK_SIZE_64K;
1369     break;
1370     case 0x1f: /* Atmel 26DF081A. */
1371     - ha->fdt_odd_index = 1;
1372     - ha->fdt_block_size = FLASH_BLK_SIZE_64K;
1373     + ha->fdt_block_size = FLASH_BLK_SIZE_4K;
1374     ha->fdt_erase_cmd = flash_conf_to_access_addr(0x0320);
1375     ha->fdt_unprotect_sec_cmd = flash_conf_to_access_addr(0x0339);
1376     ha->fdt_protect_sec_cmd = flash_conf_to_access_addr(0x0336);
1377     @@ -627,9 +626,9 @@ no_flash_data:
1378     }
1379    
1380     DEBUG2(qla_printk(KERN_DEBUG, ha, "Flash[MID]: (0x%x/0x%x) erase=0x%x "
1381     - "pro=%x upro=%x idx=%d wrtd=0x%x blk=0x%x.\n", man_id, flash_id,
1382     + "pro=%x upro=%x wrtd=0x%x blk=0x%x.\n", man_id, flash_id,
1383     ha->fdt_erase_cmd, ha->fdt_protect_sec_cmd,
1384     - ha->fdt_unprotect_sec_cmd, ha->fdt_odd_index, ha->fdt_wrt_disable,
1385     + ha->fdt_unprotect_sec_cmd, ha->fdt_wrt_disable,
1386     ha->fdt_block_size));
1387     }
1388    
1389     @@ -710,13 +709,9 @@ qla24xx_write_flash_data(scsi_qla_host_t *ha, uint32_t *dwptr, uint32_t faddr,
1390     qla24xx_unprotect_flash(ha);
1391    
1392     for (liter = 0; liter < dwords; liter++, faddr++, dwptr++) {
1393     - if (ha->fdt_odd_index) {
1394     - findex = faddr << 2;
1395     - fdata = findex & sec_mask;
1396     - } else {
1397     - findex = faddr;
1398     - fdata = (findex & sec_mask) << 2;
1399     - }
1400     +
1401     + findex = faddr;
1402     + fdata = (findex & sec_mask) << 2;
1403    
1404     /* Are we at the beginning of a sector? */
1405     if ((findex & rest_addr) == 0) {
1406     diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
1407     index d996a61..61524fc 100644
1408     --- a/drivers/usb/class/cdc-acm.c
1409     +++ b/drivers/usb/class/cdc-acm.c
1410     @@ -158,16 +158,12 @@ static int acm_wb_is_avail(struct acm *acm)
1411     }
1412    
1413     /*
1414     - * Finish write.
1415     + * Finish write. Caller must hold acm->write_lock
1416     */
1417     static void acm_write_done(struct acm *acm, struct acm_wb *wb)
1418     {
1419     - unsigned long flags;
1420     -
1421     - spin_lock_irqsave(&acm->write_lock, flags);
1422     wb->use = 0;
1423     acm->transmitting--;
1424     - spin_unlock_irqrestore(&acm->write_lock, flags);
1425     }
1426    
1427     /*
1428     @@ -482,6 +478,7 @@ static void acm_write_bulk(struct urb *urb)
1429     {
1430     struct acm_wb *wb = urb->context;
1431     struct acm *acm = wb->instance;
1432     + unsigned long flags;
1433    
1434     if (verbose || urb->status
1435     || (urb->actual_length != urb->transfer_buffer_length))
1436     @@ -490,7 +487,9 @@ static void acm_write_bulk(struct urb *urb)
1437     urb->transfer_buffer_length,
1438     urb->status);
1439    
1440     + spin_lock_irqsave(&acm->write_lock, flags);
1441     acm_write_done(acm, wb);
1442     + spin_unlock_irqrestore(&acm->write_lock, flags);
1443     if (ACM_READY(acm))
1444     schedule_work(&acm->work);
1445     else
1446     diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
1447     index 286b443..9cfa366 100644
1448     --- a/drivers/usb/core/message.c
1449     +++ b/drivers/usb/core/message.c
1450     @@ -1091,6 +1091,7 @@ void usb_disable_device(struct usb_device *dev, int skip_ep0)
1451     continue;
1452     dev_dbg(&dev->dev, "unregistering interface %s\n",
1453     dev_name(&interface->dev));
1454     + interface->unregistering = 1;
1455     usb_remove_sysfs_intf_files(interface);
1456     device_del(&interface->dev);
1457     }
1458     diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c
1459     index 5e1f5d5..668a6d6 100644
1460     --- a/drivers/usb/core/sysfs.c
1461     +++ b/drivers/usb/core/sysfs.c
1462     @@ -816,7 +816,7 @@ int usb_create_sysfs_intf_files(struct usb_interface *intf)
1463     struct usb_host_interface *alt = intf->cur_altsetting;
1464     int retval;
1465    
1466     - if (intf->sysfs_files_created)
1467     + if (intf->sysfs_files_created || intf->unregistering)
1468     return 0;
1469    
1470     /* The interface string may be present in some altsettings
1471     diff --git a/drivers/usb/gadget/f_acm.c b/drivers/usb/gadget/f_acm.c
1472     index 5ee1590..c1d34df 100644
1473     --- a/drivers/usb/gadget/f_acm.c
1474     +++ b/drivers/usb/gadget/f_acm.c
1475     @@ -463,7 +463,11 @@ static int acm_cdc_notify(struct f_acm *acm, u8 type, u16 value,
1476     notify->wLength = cpu_to_le16(length);
1477     memcpy(buf, data, length);
1478    
1479     + /* ep_queue() can complete immediately if it fills the fifo... */
1480     + spin_unlock(&acm->lock);
1481     status = usb_ep_queue(ep, req, GFP_ATOMIC);
1482     + spin_lock(&acm->lock);
1483     +
1484     if (status < 0) {
1485     ERROR(acm->port.func.config->cdev,
1486     "acm ttyGS%d can't notify serial state, %d\n",
1487     diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
1488     index 228797e..a657c94 100644
1489     --- a/drivers/usb/host/Kconfig
1490     +++ b/drivers/usb/host/Kconfig
1491     @@ -110,29 +110,18 @@ config USB_ISP116X_HCD
1492    
1493     config USB_ISP1760_HCD
1494     tristate "ISP 1760 HCD support"
1495     - depends on USB && EXPERIMENTAL
1496     + depends on USB && EXPERIMENTAL && (PCI || PPC_OF)
1497     ---help---
1498     The ISP1760 chip is a USB 2.0 host controller.
1499    
1500     This driver does not support isochronous transfers or OTG.
1501     + This USB controller is usually attached to a non-DMA-Master
1502     + capable bus. NXP's eval kit brings this chip on PCI card
1503     + where the chip itself is behind a PLB to simulate such
1504     + a bus.
1505    
1506     To compile this driver as a module, choose M here: the
1507     - module will be called isp1760-hcd.
1508     -
1509     -config USB_ISP1760_PCI
1510     - bool "Support for the PCI bus"
1511     - depends on USB_ISP1760_HCD && PCI
1512     - ---help---
1513     - Enables support for the device present on the PCI bus.
1514     - This should only be required if you happen to have the eval kit from
1515     - NXP and you are going to test it.
1516     -
1517     -config USB_ISP1760_OF
1518     - bool "Support for the OF platform bus"
1519     - depends on USB_ISP1760_HCD && PPC_OF
1520     - ---help---
1521     - Enables support for the device present on the PowerPC
1522     - OpenFirmware platform bus.
1523     + module will be called isp1760.
1524    
1525     config USB_OHCI_HCD
1526     tristate "OHCI HCD support"
1527     diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
1528     index 86e38b0..dc21ade 100644
1529     --- a/drivers/usb/host/ehci-hcd.c
1530     +++ b/drivers/usb/host/ehci-hcd.c
1531     @@ -643,7 +643,7 @@ static int ehci_run (struct usb_hcd *hcd)
1532     static irqreturn_t ehci_irq (struct usb_hcd *hcd)
1533     {
1534     struct ehci_hcd *ehci = hcd_to_ehci (hcd);
1535     - u32 status, pcd_status = 0, cmd;
1536     + u32 status, masked_status, pcd_status = 0, cmd;
1537     int bh;
1538    
1539     spin_lock (&ehci->lock);
1540     @@ -656,14 +656,14 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd)
1541     goto dead;
1542     }
1543    
1544     - status &= INTR_MASK;
1545     - if (!status) { /* irq sharing? */
1546     + masked_status = status & INTR_MASK;
1547     + if (!masked_status) { /* irq sharing? */
1548     spin_unlock(&ehci->lock);
1549     return IRQ_NONE;
1550     }
1551    
1552     /* clear (just) interrupts */
1553     - ehci_writel(ehci, status, &ehci->regs->status);
1554     + ehci_writel(ehci, masked_status, &ehci->regs->status);
1555     cmd = ehci_readl(ehci, &ehci->regs->command);
1556     bh = 0;
1557    
1558     @@ -731,19 +731,18 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd)
1559    
1560     /* PCI errors [4.15.2.4] */
1561     if (unlikely ((status & STS_FATAL) != 0)) {
1562     + ehci_err(ehci, "fatal error\n");
1563     dbg_cmd (ehci, "fatal", ehci_readl(ehci,
1564     &ehci->regs->command));
1565     dbg_status (ehci, "fatal", status);
1566     - if (status & STS_HALT) {
1567     - ehci_err (ehci, "fatal error\n");
1568     + ehci_halt(ehci);
1569     dead:
1570     - ehci_reset (ehci);
1571     - ehci_writel(ehci, 0, &ehci->regs->configured_flag);
1572     - /* generic layer kills/unlinks all urbs, then
1573     - * uses ehci_stop to clean up the rest
1574     - */
1575     - bh = 1;
1576     - }
1577     + ehci_reset(ehci);
1578     + ehci_writel(ehci, 0, &ehci->regs->configured_flag);
1579     + /* generic layer kills/unlinks all urbs, then
1580     + * uses ehci_stop to clean up the rest
1581     + */
1582     + bh = 1;
1583     }
1584    
1585     if (bh)
1586     diff --git a/drivers/usb/host/ehci-ps3.c b/drivers/usb/host/ehci-ps3.c
1587     index 0eba894..9c9da35 100644
1588     --- a/drivers/usb/host/ehci-ps3.c
1589     +++ b/drivers/usb/host/ehci-ps3.c
1590     @@ -205,6 +205,7 @@ static int ps3_ehci_remove(struct ps3_system_bus_device *dev)
1591    
1592     tmp = hcd->irq;
1593    
1594     + ehci_shutdown(hcd);
1595     usb_remove_hcd(hcd);
1596    
1597     ps3_system_bus_set_driver_data(dev, NULL);
1598     diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c
1599     index 4a0c5a7..a081ee6 100644
1600     --- a/drivers/usb/host/ehci-sched.c
1601     +++ b/drivers/usb/host/ehci-sched.c
1602     @@ -918,7 +918,7 @@ iso_stream_init (
1603     */
1604     stream->usecs = HS_USECS_ISO (maxp);
1605     bandwidth = stream->usecs * 8;
1606     - bandwidth /= 1 << (interval - 1);
1607     + bandwidth /= interval;
1608    
1609     } else {
1610     u32 addr;
1611     @@ -951,7 +951,7 @@ iso_stream_init (
1612     } else
1613     stream->raw_mask = smask_out [hs_transfers - 1];
1614     bandwidth = stream->usecs + stream->c_usecs;
1615     - bandwidth /= 1 << (interval + 2);
1616     + bandwidth /= interval << 3;
1617    
1618     /* stream->splits gets created from raw_mask later */
1619     stream->address = cpu_to_hc32(ehci, addr);
1620     diff --git a/drivers/usb/host/isp1760-if.c b/drivers/usb/host/isp1760-if.c
1621     index 051ef7b..78b8aaa 100644
1622     --- a/drivers/usb/host/isp1760-if.c
1623     +++ b/drivers/usb/host/isp1760-if.c
1624     @@ -14,16 +14,16 @@
1625     #include "../core/hcd.h"
1626     #include "isp1760-hcd.h"
1627    
1628     -#ifdef CONFIG_USB_ISP1760_OF
1629     +#ifdef CONFIG_PPC_OF
1630     #include <linux/of.h>
1631     #include <linux/of_platform.h>
1632     #endif
1633    
1634     -#ifdef CONFIG_USB_ISP1760_PCI
1635     +#ifdef CONFIG_PCI
1636     #include <linux/pci.h>
1637     #endif
1638    
1639     -#ifdef CONFIG_USB_ISP1760_OF
1640     +#ifdef CONFIG_PPC_OF
1641     static int of_isp1760_probe(struct of_device *dev,
1642     const struct of_device_id *match)
1643     {
1644     @@ -128,7 +128,7 @@ static struct of_platform_driver isp1760_of_driver = {
1645     };
1646     #endif
1647    
1648     -#ifdef CONFIG_USB_ISP1760_PCI
1649     +#ifdef CONFIG_PCI
1650     static u32 nxp_pci_io_base;
1651     static u32 iolength;
1652     static u32 pci_mem_phy0;
1653     @@ -287,28 +287,28 @@ static struct pci_driver isp1761_pci_driver = {
1654    
1655     static int __init isp1760_init(void)
1656     {
1657     - int ret = -ENODEV;
1658     + int ret;
1659    
1660     init_kmem_once();
1661    
1662     -#ifdef CONFIG_USB_ISP1760_OF
1663     +#ifdef CONFIG_PPC_OF
1664     ret = of_register_platform_driver(&isp1760_of_driver);
1665     if (ret) {
1666     deinit_kmem_cache();
1667     return ret;
1668     }
1669     #endif
1670     -#ifdef CONFIG_USB_ISP1760_PCI
1671     +#ifdef CONFIG_PCI
1672     ret = pci_register_driver(&isp1761_pci_driver);
1673     if (ret)
1674     goto unreg_of;
1675     #endif
1676     return ret;
1677    
1678     -#ifdef CONFIG_USB_ISP1760_PCI
1679     +#ifdef CONFIG_PCI
1680     unreg_of:
1681     #endif
1682     -#ifdef CONFIG_USB_ISP1760_OF
1683     +#ifdef CONFIG_PPC_OF
1684     of_unregister_platform_driver(&isp1760_of_driver);
1685     #endif
1686     deinit_kmem_cache();
1687     @@ -318,10 +318,10 @@ module_init(isp1760_init);
1688    
1689     static void __exit isp1760_exit(void)
1690     {
1691     -#ifdef CONFIG_USB_ISP1760_OF
1692     +#ifdef CONFIG_PPC_OF
1693     of_unregister_platform_driver(&isp1760_of_driver);
1694     #endif
1695     -#ifdef CONFIG_USB_ISP1760_PCI
1696     +#ifdef CONFIG_PCI
1697     pci_unregister_driver(&isp1761_pci_driver);
1698     #endif
1699     deinit_kmem_cache();
1700     diff --git a/drivers/usb/host/ohci-ps3.c b/drivers/usb/host/ohci-ps3.c
1701     index 2089d8a..3c1a3b5 100644
1702     --- a/drivers/usb/host/ohci-ps3.c
1703     +++ b/drivers/usb/host/ohci-ps3.c
1704     @@ -192,7 +192,7 @@ fail_start:
1705     return result;
1706     }
1707    
1708     -static int ps3_ohci_remove (struct ps3_system_bus_device *dev)
1709     +static int ps3_ohci_remove(struct ps3_system_bus_device *dev)
1710     {
1711     unsigned int tmp;
1712     struct usb_hcd *hcd =
1713     @@ -205,6 +205,7 @@ static int ps3_ohci_remove (struct ps3_system_bus_device *dev)
1714    
1715     tmp = hcd->irq;
1716    
1717     + ohci_shutdown(hcd);
1718     usb_remove_hcd(hcd);
1719    
1720     ps3_system_bus_set_driver_data(dev, NULL);
1721     diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
1722     index 061df9b..ccebf89 100644
1723     --- a/drivers/usb/storage/unusual_devs.h
1724     +++ b/drivers/usb/storage/unusual_devs.h
1725     @@ -1251,6 +1251,13 @@ UNUSUAL_DEV( 0x0839, 0x000a, 0x0001, 0x0001,
1726     US_SC_DEVICE, US_PR_DEVICE, NULL,
1727     US_FL_FIX_INQUIRY),
1728    
1729     +/* Reported by Luciano Rocha <luciano@eurotux.com> */
1730     +UNUSUAL_DEV( 0x0840, 0x0082, 0x0001, 0x0001,
1731     + "Argosy",
1732     + "Storage",
1733     + US_SC_DEVICE, US_PR_DEVICE, NULL,
1734     + US_FL_FIX_CAPACITY),
1735     +
1736     /* Entry and supporting patch by Theodore Kilgore <kilgota@auburn.edu>.
1737     * Flag will support Bulk devices which use a standards-violating 32-byte
1738     * Command Block Wrapper. Here, the "DC2MEGA" cameras (several brands) with
1739     diff --git a/fs/namespace.c b/fs/namespace.c
1740     index 6e283c9..1bd5ba2 100644
1741     --- a/fs/namespace.c
1742     +++ b/fs/namespace.c
1743     @@ -1553,8 +1553,13 @@ static noinline int do_remount(struct nameidata *nd, int flags, int mnt_flags,
1744     if (!err)
1745     nd->path.mnt->mnt_flags = mnt_flags;
1746     up_write(&sb->s_umount);
1747     - if (!err)
1748     + if (!err) {
1749     security_sb_post_remount(nd->path.mnt, flags, data);
1750     +
1751     + spin_lock(&vfsmount_lock);
1752     + touch_mnt_namespace(nd->path.mnt->mnt_ns);
1753     + spin_unlock(&vfsmount_lock);
1754     + }
1755     return err;
1756     }
1757    
1758     diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c
1759     index f9a8b89..7a510a6 100644
1760     --- a/fs/proc/proc_sysctl.c
1761     +++ b/fs/proc/proc_sysctl.c
1762     @@ -31,6 +31,7 @@ static struct inode *proc_sys_make_inode(struct super_block *sb,
1763     inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
1764     inode->i_flags |= S_PRIVATE; /* tell selinux to ignore this inode */
1765     inode->i_mode = table->mode;
1766     + inode->i_uid = inode->i_gid = 0;
1767     if (!table->child) {
1768     inode->i_mode |= S_IFREG;
1769     inode->i_op = &proc_sys_inode_operations;
1770     diff --git a/include/linux/bio.h b/include/linux/bio.h
1771     index 0933a14..3d83947 100644
1772     --- a/include/linux/bio.h
1773     +++ b/include/linux/bio.h
1774     @@ -98,6 +98,13 @@ struct bio {
1775     unsigned int bi_size; /* residual I/O count */
1776    
1777     /*
1778     + * To keep track of the max segment size, we account for the
1779     + * sizes of the first and last mergeable segments in this bio.
1780     + */
1781     + unsigned int bi_seg_front_size;
1782     + unsigned int bi_seg_back_size;
1783     +
1784     + /*
1785     * To keep track of the max hw size, we account for the
1786     * sizes of the first and last virtually mergeable segments
1787     * in this bio
1788     diff --git a/include/linux/usb.h b/include/linux/usb.h
1789     index 94ac74a..2e434dc 100644
1790     --- a/include/linux/usb.h
1791     +++ b/include/linux/usb.h
1792     @@ -108,6 +108,7 @@ enum usb_interface_condition {
1793     * (in probe()), bound to a driver, or unbinding (in disconnect())
1794     * @is_active: flag set when the interface is bound and not suspended.
1795     * @sysfs_files_created: sysfs attributes exist
1796     + * @unregistering: flag set when the interface is being unregistered
1797     * @needs_remote_wakeup: flag set when the driver requires remote-wakeup
1798     * capability during autosuspend.
1799     * @needs_altsetting0: flag set when a set-interface request for altsetting 0
1800     @@ -163,6 +164,7 @@ struct usb_interface {
1801     enum usb_interface_condition condition; /* state of binding */
1802     unsigned is_active:1; /* the interface is not suspended */
1803     unsigned sysfs_files_created:1; /* the sysfs attributes exist */
1804     + unsigned unregistering:1; /* unregistration is in progress */
1805     unsigned needs_remote_wakeup:1; /* driver requires remote wakeup */
1806     unsigned needs_altsetting0:1; /* switch to altsetting 0 is pending */
1807     unsigned needs_binding:1; /* needs delayed unbind/rebind */
1808     diff --git a/mm/hugetlb.c b/mm/hugetlb.c
1809     index 77427c8..81e9a82 100644
1810     --- a/mm/hugetlb.c
1811     +++ b/mm/hugetlb.c
1812     @@ -1797,6 +1797,7 @@ int unmap_ref_private(struct mm_struct *mm,
1813     struct page *page,
1814     unsigned long address)
1815     {
1816     + struct hstate *h = hstate_vma(vma);
1817     struct vm_area_struct *iter_vma;
1818     struct address_space *mapping;
1819     struct prio_tree_iter iter;
1820     @@ -1806,7 +1807,7 @@ int unmap_ref_private(struct mm_struct *mm,
1821     * vm_pgoff is in PAGE_SIZE units, hence the different calculation
1822     * from page cache lookup which is in HPAGE_SIZE units.
1823     */
1824     - address = address & huge_page_mask(hstate_vma(vma));
1825     + address = address & huge_page_mask(h);
1826     pgoff = ((address - vma->vm_start) >> PAGE_SHIFT)
1827     + (vma->vm_pgoff >> PAGE_SHIFT);
1828     mapping = (struct address_space *)page_private(page);
1829     @@ -1825,7 +1826,7 @@ int unmap_ref_private(struct mm_struct *mm,
1830     */
1831     if (!is_vma_resv_set(iter_vma, HPAGE_RESV_OWNER))
1832     unmap_hugepage_range(iter_vma,
1833     - address, address + HPAGE_SIZE,
1834     + address, address + huge_page_size(h),
1835     page);
1836     }
1837    
1838     diff --git a/mm/page_isolation.c b/mm/page_isolation.c
1839     index b70a7fe..5e0ffd9 100644
1840     --- a/mm/page_isolation.c
1841     +++ b/mm/page_isolation.c
1842     @@ -130,10 +130,11 @@ int test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn)
1843     if (page && get_pageblock_migratetype(page) != MIGRATE_ISOLATE)
1844     break;
1845     }
1846     - if (pfn < end_pfn)
1847     + page = __first_valid_page(start_pfn, end_pfn - start_pfn);
1848     + if ((pfn < end_pfn) || !page)
1849     return -EBUSY;
1850     /* Check all pages are free or Marked as ISOLATED */
1851     - zone = page_zone(pfn_to_page(pfn));
1852     + zone = page_zone(page);
1853     spin_lock_irqsave(&zone->lock, flags);
1854     ret = __test_page_isolated_in_pageblock(start_pfn, end_pfn);
1855     spin_unlock_irqrestore(&zone->lock, flags);
1856     diff --git a/net/ipv4/proc.c b/net/ipv4/proc.c
1857     index 8f5a403..a631a1f 100644
1858     --- a/net/ipv4/proc.c
1859     +++ b/net/ipv4/proc.c
1860     @@ -237,43 +237,45 @@ static const struct snmp_mib snmp4_net_list[] = {
1861     SNMP_MIB_SENTINEL
1862     };
1863    
1864     +static void icmpmsg_put_line(struct seq_file *seq, unsigned long *vals,
1865     + unsigned short *type, int count)
1866     +{
1867     + int j;
1868     +
1869     + if (count) {
1870     + seq_printf(seq, "\nIcmpMsg:");
1871     + for (j = 0; j < count; ++j)
1872     + seq_printf(seq, " %sType%u",
1873     + type[j] & 0x100 ? "Out" : "In",
1874     + type[j] & 0xff);
1875     + seq_printf(seq, "\nIcmpMsg:");
1876     + for (j = 0; j < count; ++j)
1877     + seq_printf(seq, " %lu", vals[j]);
1878     + }
1879     +}
1880     +
1881     static void icmpmsg_put(struct seq_file *seq)
1882     {
1883     #define PERLINE 16
1884    
1885     - int j, i, count;
1886     - static int out[PERLINE];
1887     + int i, count;
1888     + unsigned short type[PERLINE];
1889     + unsigned long vals[PERLINE], val;
1890     struct net *net = seq->private;
1891    
1892     count = 0;
1893     for (i = 0; i < ICMPMSG_MIB_MAX; i++) {
1894     -
1895     - if (snmp_fold_field((void **) net->mib.icmpmsg_statistics, i))
1896     - out[count++] = i;
1897     - if (count < PERLINE)
1898     - continue;
1899     -
1900     - seq_printf(seq, "\nIcmpMsg:");
1901     - for (j = 0; j < PERLINE; ++j)
1902     - seq_printf(seq, " %sType%u", i & 0x100 ? "Out" : "In",
1903     - i & 0xff);
1904     - seq_printf(seq, "\nIcmpMsg: ");
1905     - for (j = 0; j < PERLINE; ++j)
1906     - seq_printf(seq, " %lu",
1907     - snmp_fold_field((void **) net->mib.icmpmsg_statistics,
1908     - out[j]));
1909     - seq_putc(seq, '\n');
1910     - }
1911     - if (count) {
1912     - seq_printf(seq, "\nIcmpMsg:");
1913     - for (j = 0; j < count; ++j)
1914     - seq_printf(seq, " %sType%u", out[j] & 0x100 ? "Out" :
1915     - "In", out[j] & 0xff);
1916     - seq_printf(seq, "\nIcmpMsg:");
1917     - for (j = 0; j < count; ++j)
1918     - seq_printf(seq, " %lu", snmp_fold_field((void **)
1919     - net->mib.icmpmsg_statistics, out[j]));
1920     + val = snmp_fold_field((void **) net->mib.icmpmsg_statistics, i);
1921     + if (val) {
1922     + type[count] = i;
1923     + vals[count++] = val;
1924     + }
1925     + if (count == PERLINE) {
1926     + icmpmsg_put_line(seq, vals, type, count);
1927     + count = 0;
1928     + }
1929     }
1930     + icmpmsg_put_line(seq, vals, type, count);
1931    
1932     #undef PERLINE
1933     }
1934     diff --git a/scripts/package/builddeb b/scripts/package/builddeb
1935     index ba6bf5d..1264b8e 100644
1936     --- a/scripts/package/builddeb
1937     +++ b/scripts/package/builddeb
1938     @@ -15,15 +15,18 @@ set -e
1939     version=$KERNELRELEASE
1940     revision=`cat .version`
1941     tmpdir="$objtree/debian/tmp"
1942     +fwdir="$objtree/debian/fwtmp"
1943     packagename=linux-$version
1944     +fwpackagename=linux-firmware-image
1945    
1946     if [ "$ARCH" == "um" ] ; then
1947     packagename=user-mode-linux-$version
1948     fi
1949    
1950     # Setup the directory structure
1951     -rm -rf "$tmpdir"
1952     +rm -rf "$tmpdir" "$fwdir"
1953     mkdir -p "$tmpdir/DEBIAN" "$tmpdir/lib" "$tmpdir/boot"
1954     +mkdir -p "$fwdir/DEBIAN" "$fwdir/lib"
1955     if [ "$ARCH" == "um" ] ; then
1956     mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/share/doc/$packagename" "$tmpdir/usr/bin"
1957     fi
1958     @@ -107,6 +110,7 @@ Standards-Version: 3.6.1
1959    
1960     Package: $packagename
1961     Provides: kernel-image-$version, linux-image-$version
1962     +Suggests: $fwpackagename
1963     Architecture: any
1964     Description: Linux kernel, version $version
1965     This package contains the Linux kernel, modules and corresponding other
1966     @@ -118,8 +122,24 @@ fi
1967     chown -R root:root "$tmpdir"
1968     chmod -R go-w "$tmpdir"
1969    
1970     +# Do we have firmware? Move it out of the way and build it into a package.
1971     +if [ -e "$tmpdir/lib/firmware" ]; then
1972     + mv "$tmpdir/lib/firmware" "$fwdir/lib/"
1973     +
1974     + cat <<EOF >> debian/control
1975     +
1976     +Package: $fwpackagename
1977     +Architecture: all
1978     +Description: Linux kernel firmware, version $version
1979     + This package contains firmware from the Linux kernel, version $version
1980     +EOF
1981     +
1982     + dpkg-gencontrol -isp -p$fwpackagename -P"$fwdir"
1983     + dpkg --build "$fwdir" ..
1984     +fi
1985     +
1986     # Perform the final magic
1987     -dpkg-gencontrol -isp
1988     +dpkg-gencontrol -isp -p$packagename
1989     dpkg --build "$tmpdir" ..
1990    
1991     exit 0