Magellan Linux

Annotation of /trunk/kernel-alx/patches-3.10/0118-3.10.19-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2346 - (hide annotations) (download)
Mon Dec 16 10:04:53 2013 UTC (10 years, 4 months ago) by niro
File size: 85994 byte(s)
-linux-3.10.19
1 niro 2346 diff --git a/Makefile b/Makefile
2     index 5fb14e503fe3..83a02f5b2c00 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 3
7     PATCHLEVEL = 10
8     -SUBLEVEL = 18
9     +SUBLEVEL = 19
10     EXTRAVERSION =
11     NAME = TOSSUG Baby Fish
12    
13     diff --git a/arch/arc/mm/fault.c b/arch/arc/mm/fault.c
14     index 689ffd86d5e9..331a0846628e 100644
15     --- a/arch/arc/mm/fault.c
16     +++ b/arch/arc/mm/fault.c
17     @@ -16,7 +16,7 @@
18     #include <linux/kdebug.h>
19     #include <asm/pgalloc.h>
20    
21     -static int handle_vmalloc_fault(struct mm_struct *mm, unsigned long address)
22     +static int handle_vmalloc_fault(unsigned long address)
23     {
24     /*
25     * Synchronize this task's top level page-table
26     @@ -26,7 +26,7 @@ static int handle_vmalloc_fault(struct mm_struct *mm, unsigned long address)
27     pud_t *pud, *pud_k;
28     pmd_t *pmd, *pmd_k;
29    
30     - pgd = pgd_offset_fast(mm, address);
31     + pgd = pgd_offset_fast(current->active_mm, address);
32     pgd_k = pgd_offset_k(address);
33    
34     if (!pgd_present(*pgd_k))
35     @@ -72,7 +72,7 @@ void do_page_fault(struct pt_regs *regs, int write, unsigned long address,
36     * nothing more.
37     */
38     if (address >= VMALLOC_START && address <= VMALLOC_END) {
39     - ret = handle_vmalloc_fault(mm, address);
40     + ret = handle_vmalloc_fault(address);
41     if (unlikely(ret))
42     goto bad_area_nosemaphore;
43     else
44     diff --git a/arch/parisc/kernel/head.S b/arch/parisc/kernel/head.S
45     index 37aabd772fbb..d2d58258aea6 100644
46     --- a/arch/parisc/kernel/head.S
47     +++ b/arch/parisc/kernel/head.S
48     @@ -195,6 +195,8 @@ common_stext:
49     ldw MEM_PDC_HI(%r0),%r6
50     depd %r6, 31, 32, %r3 /* move to upper word */
51    
52     + mfctl %cr30,%r6 /* PCX-W2 firmware bug */
53     +
54     ldo PDC_PSW(%r0),%arg0 /* 21 */
55     ldo PDC_PSW_SET_DEFAULTS(%r0),%arg1 /* 2 */
56     ldo PDC_PSW_WIDE_BIT(%r0),%arg2 /* 2 */
57     @@ -203,6 +205,8 @@ common_stext:
58     copy %r0,%arg3
59    
60     stext_pdc_ret:
61     + mtctl %r6,%cr30 /* restore task thread info */
62     +
63     /* restore rfi target address*/
64     ldd TI_TASK-THREAD_SZ_ALGN(%sp), %r10
65     tophys_r1 %r10
66     diff --git a/arch/um/kernel/exitcode.c b/arch/um/kernel/exitcode.c
67     index 829df49dee99..41ebbfebb333 100644
68     --- a/arch/um/kernel/exitcode.c
69     +++ b/arch/um/kernel/exitcode.c
70     @@ -40,9 +40,11 @@ static ssize_t exitcode_proc_write(struct file *file,
71     const char __user *buffer, size_t count, loff_t *pos)
72     {
73     char *end, buf[sizeof("nnnnn\0")];
74     + size_t size;
75     int tmp;
76    
77     - if (copy_from_user(buf, buffer, count))
78     + size = min(count, sizeof(buf));
79     + if (copy_from_user(buf, buffer, size))
80     return -EFAULT;
81    
82     tmp = simple_strtol(buf, &end, 0);
83     diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c
84     index 794f6eb54cd3..b32dbb411a9a 100644
85     --- a/arch/x86/kernel/apic/x2apic_uv_x.c
86     +++ b/arch/x86/kernel/apic/x2apic_uv_x.c
87     @@ -98,7 +98,7 @@ static int __init early_get_pnodeid(void)
88     break;
89     case UV3_HUB_PART_NUMBER:
90     case UV3_HUB_PART_NUMBER_X:
91     - uv_min_hub_revision_id += UV3_HUB_REVISION_BASE - 1;
92     + uv_min_hub_revision_id += UV3_HUB_REVISION_BASE;
93     break;
94     }
95    
96     diff --git a/arch/xtensa/kernel/signal.c b/arch/xtensa/kernel/signal.c
97     index 718eca1850bd..98b67d5f1514 100644
98     --- a/arch/xtensa/kernel/signal.c
99     +++ b/arch/xtensa/kernel/signal.c
100     @@ -341,7 +341,7 @@ static int setup_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
101    
102     sp = regs->areg[1];
103    
104     - if ((ka->sa.sa_flags & SA_ONSTACK) != 0 && ! on_sig_stack(sp)) {
105     + if ((ka->sa.sa_flags & SA_ONSTACK) != 0 && sas_ss_flags(sp) == 0) {
106     sp = current->sas_ss_sp + current->sas_ss_size;
107     }
108    
109     diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
110     index c69fcce505c0..370462fa8e01 100644
111     --- a/drivers/ata/libata-eh.c
112     +++ b/drivers/ata/libata-eh.c
113     @@ -1322,14 +1322,14 @@ void ata_eh_qc_complete(struct ata_queued_cmd *qc)
114     * should be retried. To be used from EH.
115     *
116     * SCSI midlayer limits the number of retries to scmd->allowed.
117     - * scmd->retries is decremented for commands which get retried
118     + * scmd->allowed is incremented for commands which get retried
119     * due to unrelated failures (qc->err_mask is zero).
120     */
121     void ata_eh_qc_retry(struct ata_queued_cmd *qc)
122     {
123     struct scsi_cmnd *scmd = qc->scsicmd;
124     - if (!qc->err_mask && scmd->retries)
125     - scmd->retries--;
126     + if (!qc->err_mask)
127     + scmd->allowed++;
128     __ata_eh_qc_complete(qc);
129     }
130    
131     diff --git a/drivers/clk/versatile/clk-icst.c b/drivers/clk/versatile/clk-icst.c
132     index 67ccf4aa7277..f5e4c21b301f 100644
133     --- a/drivers/clk/versatile/clk-icst.c
134     +++ b/drivers/clk/versatile/clk-icst.c
135     @@ -107,7 +107,7 @@ static int icst_set_rate(struct clk_hw *hw, unsigned long rate,
136    
137     vco = icst_hz_to_vco(icst->params, rate);
138     icst->rate = icst_hz(icst->params, vco);
139     - vco_set(icst->vcoreg, icst->lockreg, vco);
140     + vco_set(icst->lockreg, icst->vcoreg, vco);
141     return 0;
142     }
143    
144     diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
145     index 6d6a0b48eb75..9520e3b90bde 100644
146     --- a/drivers/cpufreq/intel_pstate.c
147     +++ b/drivers/cpufreq/intel_pstate.c
148     @@ -629,8 +629,8 @@ static int __cpuinit intel_pstate_cpu_exit(struct cpufreq_policy *policy)
149    
150     static int __cpuinit intel_pstate_cpu_init(struct cpufreq_policy *policy)
151     {
152     - int rc, min_pstate, max_pstate;
153     struct cpudata *cpu;
154     + int rc;
155    
156     rc = intel_pstate_init_cpu(policy->cpu);
157     if (rc)
158     @@ -644,9 +644,8 @@ static int __cpuinit intel_pstate_cpu_init(struct cpufreq_policy *policy)
159     else
160     policy->policy = CPUFREQ_POLICY_POWERSAVE;
161    
162     - intel_pstate_get_min_max(cpu, &min_pstate, &max_pstate);
163     - policy->min = min_pstate * 100000;
164     - policy->max = max_pstate * 100000;
165     + policy->min = cpu->pstate.min_pstate * 100000;
166     + policy->max = cpu->pstate.turbo_pstate * 100000;
167    
168     /* cpuinfo and default policy values */
169     policy->cpuinfo.min_freq = cpu->pstate.min_pstate * 100000;
170     diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
171     index 9cc247f55502..2ab782cb38a2 100644
172     --- a/drivers/gpu/drm/drm_drv.c
173     +++ b/drivers/gpu/drm/drm_drv.c
174     @@ -406,9 +406,16 @@ long drm_ioctl(struct file *filp,
175     cmd = ioctl->cmd_drv;
176     }
177     else if ((nr >= DRM_COMMAND_END) || (nr < DRM_COMMAND_BASE)) {
178     + u32 drv_size;
179     +
180     ioctl = &drm_ioctls[nr];
181     - cmd = ioctl->cmd;
182     +
183     + drv_size = _IOC_SIZE(ioctl->cmd);
184     usize = asize = _IOC_SIZE(cmd);
185     + if (drv_size > asize)
186     + asize = drv_size;
187     +
188     + cmd = ioctl->cmd;
189     } else
190     goto err_i1;
191    
192     diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
193     index c272d8832605..4c81e9faa635 100644
194     --- a/drivers/gpu/drm/radeon/atombios_encoders.c
195     +++ b/drivers/gpu/drm/radeon/atombios_encoders.c
196     @@ -1641,7 +1641,7 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode)
197     * does the same thing and more.
198     */
199     if ((rdev->family != CHIP_RV710) && (rdev->family != CHIP_RV730) &&
200     - (rdev->family != CHIP_RS880))
201     + (rdev->family != CHIP_RS780) && (rdev->family != CHIP_RS880))
202     atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
203     }
204     if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) {
205     diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
206     index 07dfd823cc30..6c44c69a5ba4 100644
207     --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
208     +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
209     @@ -740,9 +740,17 @@ static void vmw_postclose(struct drm_device *dev,
210     struct vmw_fpriv *vmw_fp;
211    
212     vmw_fp = vmw_fpriv(file_priv);
213     - ttm_object_file_release(&vmw_fp->tfile);
214     - if (vmw_fp->locked_master)
215     +
216     + if (vmw_fp->locked_master) {
217     + struct vmw_master *vmaster =
218     + vmw_master(vmw_fp->locked_master);
219     +
220     + ttm_lock_set_kill(&vmaster->lock, true, SIGTERM);
221     + ttm_vt_unlock(&vmaster->lock);
222     drm_master_put(&vmw_fp->locked_master);
223     + }
224     +
225     + ttm_object_file_release(&vmw_fp->tfile);
226     kfree(vmw_fp);
227     }
228    
229     @@ -942,14 +950,13 @@ static void vmw_master_drop(struct drm_device *dev,
230    
231     vmw_fp->locked_master = drm_master_get(file_priv->master);
232     ret = ttm_vt_lock(&vmaster->lock, false, vmw_fp->tfile);
233     - vmw_execbuf_release_pinned_bo(dev_priv);
234     -
235     if (unlikely((ret != 0))) {
236     DRM_ERROR("Unable to lock TTM at VT switch.\n");
237     drm_master_put(&vmw_fp->locked_master);
238     }
239    
240     - ttm_lock_set_kill(&vmaster->lock, true, SIGTERM);
241     + ttm_lock_set_kill(&vmaster->lock, false, SIGTERM);
242     + vmw_execbuf_release_pinned_bo(dev_priv);
243    
244     if (!dev_priv->enable_fb) {
245     ret = ttm_bo_evict_mm(&dev_priv->bdev, TTM_PL_VRAM);
246     diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c
247     index bc784254e78e..407d7f9fe8a8 100644
248     --- a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c
249     +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c
250     @@ -970,7 +970,7 @@ void vmw_resource_unreserve(struct vmw_resource *res,
251     if (new_backup)
252     res->backup_offset = new_backup_offset;
253    
254     - if (!res->func->may_evict)
255     + if (!res->func->may_evict || res->id == -1)
256     return;
257    
258     write_lock(&dev_priv->resource_lock);
259     diff --git a/drivers/md/bcache/request.c b/drivers/md/bcache/request.c
260     index cbcf8b301edc..a30a0f8a41c0 100644
261     --- a/drivers/md/bcache/request.c
262     +++ b/drivers/md/bcache/request.c
263     @@ -1059,7 +1059,7 @@ static void request_write(struct cached_dev *dc, struct search *s)
264    
265     if (bio->bi_rw & REQ_FLUSH) {
266     /* Also need to send a flush to the backing device */
267     - struct bio *flush = bio_alloc_bioset(0, GFP_NOIO,
268     + struct bio *flush = bio_alloc_bioset(GFP_NOIO, 0,
269     dc->disk.bio_split);
270    
271     flush->bi_rw = WRITE_FLUSH;
272     diff --git a/drivers/md/md.c b/drivers/md/md.c
273     index 51f0345a4ba4..d78f1fffab01 100644
274     --- a/drivers/md/md.c
275     +++ b/drivers/md/md.c
276     @@ -8072,6 +8072,7 @@ static int md_set_badblocks(struct badblocks *bb, sector_t s, int sectors,
277     u64 *p;
278     int lo, hi;
279     int rv = 1;
280     + unsigned long flags;
281    
282     if (bb->shift < 0)
283     /* badblocks are disabled */
284     @@ -8086,7 +8087,7 @@ static int md_set_badblocks(struct badblocks *bb, sector_t s, int sectors,
285     sectors = next - s;
286     }
287    
288     - write_seqlock_irq(&bb->lock);
289     + write_seqlock_irqsave(&bb->lock, flags);
290    
291     p = bb->page;
292     lo = 0;
293     @@ -8202,7 +8203,7 @@ static int md_set_badblocks(struct badblocks *bb, sector_t s, int sectors,
294     bb->changed = 1;
295     if (!acknowledged)
296     bb->unacked_exist = 1;
297     - write_sequnlock_irq(&bb->lock);
298     + write_sequnlock_irqrestore(&bb->lock, flags);
299    
300     return rv;
301     }
302     diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
303     index 6f4824426e86..afaa5d425e9a 100644
304     --- a/drivers/md/raid1.c
305     +++ b/drivers/md/raid1.c
306     @@ -1479,6 +1479,7 @@ static int raid1_spare_active(struct mddev *mddev)
307     }
308     }
309     if (rdev
310     + && rdev->recovery_offset == MaxSector
311     && !test_bit(Faulty, &rdev->flags)
312     && !test_and_set_bit(In_sync, &rdev->flags)) {
313     count++;
314     diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
315     index 081bb3345353..0add86821755 100644
316     --- a/drivers/md/raid10.c
317     +++ b/drivers/md/raid10.c
318     @@ -1762,6 +1762,7 @@ static int raid10_spare_active(struct mddev *mddev)
319     }
320     sysfs_notify_dirent_safe(tmp->replacement->sysfs_state);
321     } else if (tmp->rdev
322     + && tmp->rdev->recovery_offset == MaxSector
323     && !test_bit(Faulty, &tmp->rdev->flags)
324     && !test_and_set_bit(In_sync, &tmp->rdev->flags)) {
325     count++;
326     diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
327     index a35b846af4f8..4bed5454b8dc 100644
328     --- a/drivers/md/raid5.c
329     +++ b/drivers/md/raid5.c
330     @@ -668,6 +668,12 @@ static void ops_run_io(struct stripe_head *sh, struct stripe_head_state *s)
331     bi->bi_io_vec[0].bv_len = STRIPE_SIZE;
332     bi->bi_io_vec[0].bv_offset = 0;
333     bi->bi_size = STRIPE_SIZE;
334     + /*
335     + * If this is discard request, set bi_vcnt 0. We don't
336     + * want to confuse SCSI because SCSI will replace payload
337     + */
338     + if (rw & REQ_DISCARD)
339     + bi->bi_vcnt = 0;
340     if (rrdev)
341     set_bit(R5_DOUBLE_LOCKED, &sh->dev[i].flags);
342    
343     @@ -706,6 +712,12 @@ static void ops_run_io(struct stripe_head *sh, struct stripe_head_state *s)
344     rbi->bi_io_vec[0].bv_len = STRIPE_SIZE;
345     rbi->bi_io_vec[0].bv_offset = 0;
346     rbi->bi_size = STRIPE_SIZE;
347     + /*
348     + * If this is discard request, set bi_vcnt 0. We don't
349     + * want to confuse SCSI because SCSI will replace payload
350     + */
351     + if (rw & REQ_DISCARD)
352     + rbi->bi_vcnt = 0;
353     if (conf->mddev->gendisk)
354     trace_block_bio_remap(bdev_get_queue(rbi->bi_bdev),
355     rbi, disk_devt(conf->mddev->gendisk),
356     @@ -2800,6 +2812,14 @@ static void handle_stripe_clean_event(struct r5conf *conf,
357     }
358     /* now that discard is done we can proceed with any sync */
359     clear_bit(STRIPE_DISCARD, &sh->state);
360     + /*
361     + * SCSI discard will change some bio fields and the stripe has
362     + * no updated data, so remove it from hash list and the stripe
363     + * will be reinitialized
364     + */
365     + spin_lock_irq(&conf->device_lock);
366     + remove_hash(sh);
367     + spin_unlock_irq(&conf->device_lock);
368     if (test_bit(STRIPE_SYNC_REQUESTED, &sh->state))
369     set_bit(STRIPE_HANDLE, &sh->state);
370    
371     diff --git a/drivers/net/can/at91_can.c b/drivers/net/can/at91_can.c
372     index db52f4414def..535d5dd8d816 100644
373     --- a/drivers/net/can/at91_can.c
374     +++ b/drivers/net/can/at91_can.c
375     @@ -1409,10 +1409,10 @@ static int at91_can_remove(struct platform_device *pdev)
376    
377     static const struct platform_device_id at91_can_id_table[] = {
378     {
379     - .name = "at91_can",
380     + .name = "at91sam9x5_can",
381     .driver_data = (kernel_ulong_t)&at91_at91sam9x5_data,
382     }, {
383     - .name = "at91sam9x5_can",
384     + .name = "at91_can",
385     .driver_data = (kernel_ulong_t)&at91_at91sam9263_data,
386     }, {
387     /* sentinel */
388     diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
389     index 769d29ed106d..a8f33a525dd6 100644
390     --- a/drivers/net/can/flexcan.c
391     +++ b/drivers/net/can/flexcan.c
392     @@ -63,7 +63,7 @@
393     #define FLEXCAN_MCR_BCC BIT(16)
394     #define FLEXCAN_MCR_LPRIO_EN BIT(13)
395     #define FLEXCAN_MCR_AEN BIT(12)
396     -#define FLEXCAN_MCR_MAXMB(x) ((x) & 0xf)
397     +#define FLEXCAN_MCR_MAXMB(x) ((x) & 0x1f)
398     #define FLEXCAN_MCR_IDAM_A (0 << 8)
399     #define FLEXCAN_MCR_IDAM_B (1 << 8)
400     #define FLEXCAN_MCR_IDAM_C (2 << 8)
401     @@ -745,9 +745,11 @@ static int flexcan_chip_start(struct net_device *dev)
402     *
403     */
404     reg_mcr = flexcan_read(&regs->mcr);
405     + reg_mcr &= ~FLEXCAN_MCR_MAXMB(0xff);
406     reg_mcr |= FLEXCAN_MCR_FRZ | FLEXCAN_MCR_FEN | FLEXCAN_MCR_HALT |
407     FLEXCAN_MCR_SUPV | FLEXCAN_MCR_WRN_EN |
408     - FLEXCAN_MCR_IDAM_C | FLEXCAN_MCR_SRX_DIS;
409     + FLEXCAN_MCR_IDAM_C | FLEXCAN_MCR_SRX_DIS |
410     + FLEXCAN_MCR_MAXMB(FLEXCAN_TX_BUF_ID);
411     netdev_dbg(dev, "%s: writing mcr=0x%08x", __func__, reg_mcr);
412     flexcan_write(reg_mcr, &regs->mcr);
413    
414     @@ -792,6 +794,10 @@ static int flexcan_chip_start(struct net_device *dev)
415     &regs->cantxfg[i].can_ctrl);
416     }
417    
418     + /* Abort any pending TX, mark Mailbox as INACTIVE */
419     + flexcan_write(FLEXCAN_MB_CNT_CODE(0x4),
420     + &regs->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl);
421     +
422     /* acceptance mask/acceptance code (accept everything) */
423     flexcan_write(0x0, &regs->rxgmask);
424     flexcan_write(0x0, &regs->rx14mask);
425     @@ -983,9 +989,9 @@ static void unregister_flexcandev(struct net_device *dev)
426     }
427    
428     static const struct of_device_id flexcan_of_match[] = {
429     - { .compatible = "fsl,p1010-flexcan", .data = &fsl_p1010_devtype_data, },
430     - { .compatible = "fsl,imx28-flexcan", .data = &fsl_imx28_devtype_data, },
431     { .compatible = "fsl,imx6q-flexcan", .data = &fsl_imx6q_devtype_data, },
432     + { .compatible = "fsl,imx28-flexcan", .data = &fsl_imx28_devtype_data, },
433     + { .compatible = "fsl,p1010-flexcan", .data = &fsl_p1010_devtype_data, },
434     { /* sentinel */ },
435     };
436     MODULE_DEVICE_TABLE(of, flexcan_of_match);
437     diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
438     index e33a659e224b..a8fee08479ef 100644
439     --- a/drivers/net/wireless/ath/ath9k/main.c
440     +++ b/drivers/net/wireless/ath/ath9k/main.c
441     @@ -209,6 +209,7 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start)
442     struct ath_hw *ah = sc->sc_ah;
443     struct ath_common *common = ath9k_hw_common(ah);
444     unsigned long flags;
445     + int i;
446    
447     if (ath_startrecv(sc) != 0) {
448     ath_err(common, "Unable to restart recv logic\n");
449     @@ -236,6 +237,15 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start)
450     }
451     work:
452     ath_restart_work(sc);
453     +
454     + for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
455     + if (!ATH_TXQ_SETUP(sc, i))
456     + continue;
457     +
458     + spin_lock_bh(&sc->tx.txq[i].axq_lock);
459     + ath_txq_schedule(sc, &sc->tx.txq[i]);
460     + spin_unlock_bh(&sc->tx.txq[i].axq_lock);
461     + }
462     }
463    
464     if ((ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB) && sc->ant_rx != 3)
465     @@ -543,21 +553,10 @@ chip_reset:
466    
467     static int ath_reset(struct ath_softc *sc)
468     {
469     - int i, r;
470     + int r;
471    
472     ath9k_ps_wakeup(sc);
473     -
474     r = ath_reset_internal(sc, NULL);
475     -
476     - for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
477     - if (!ATH_TXQ_SETUP(sc, i))
478     - continue;
479     -
480     - spin_lock_bh(&sc->tx.txq[i].axq_lock);
481     - ath_txq_schedule(sc, &sc->tx.txq[i]);
482     - spin_unlock_bh(&sc->tx.txq[i].axq_lock);
483     - }
484     -
485     ath9k_ps_restore(sc);
486    
487     return r;
488     diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c
489     index b5ab8d1bcac0..5282088d6c14 100644
490     --- a/drivers/net/wireless/iwlwifi/iwl-6000.c
491     +++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
492     @@ -268,6 +268,12 @@ const struct iwl_cfg iwl6035_2agn_cfg = {
493     .ht_params = &iwl6000_ht_params,
494     };
495    
496     +const struct iwl_cfg iwl6035_2agn_sff_cfg = {
497     + .name = "Intel(R) Centrino(R) Ultimate-N 6235 AGN",
498     + IWL_DEVICE_6035,
499     + .ht_params = &iwl6000_ht_params,
500     +};
501     +
502     const struct iwl_cfg iwl1030_bgn_cfg = {
503     .name = "Intel(R) Centrino(R) Wireless-N 1030 BGN",
504     IWL_DEVICE_6030,
505     diff --git a/drivers/net/wireless/iwlwifi/iwl-config.h b/drivers/net/wireless/iwlwifi/iwl-config.h
506     index c38aa8f77554..c67e29655b2d 100644
507     --- a/drivers/net/wireless/iwlwifi/iwl-config.h
508     +++ b/drivers/net/wireless/iwlwifi/iwl-config.h
509     @@ -316,6 +316,7 @@ extern const struct iwl_cfg iwl2000_2bgn_cfg;
510     extern const struct iwl_cfg iwl2000_2bgn_d_cfg;
511     extern const struct iwl_cfg iwl2030_2bgn_cfg;
512     extern const struct iwl_cfg iwl6035_2agn_cfg;
513     +extern const struct iwl_cfg iwl6035_2agn_sff_cfg;
514     extern const struct iwl_cfg iwl105_bgn_cfg;
515     extern const struct iwl_cfg iwl105_bgn_d_cfg;
516     extern const struct iwl_cfg iwl135_bgn_cfg;
517     diff --git a/drivers/net/wireless/iwlwifi/pcie/drv.c b/drivers/net/wireless/iwlwifi/pcie/drv.c
518     index 5283b5552e6f..b7858a595973 100644
519     --- a/drivers/net/wireless/iwlwifi/pcie/drv.c
520     +++ b/drivers/net/wireless/iwlwifi/pcie/drv.c
521     @@ -138,13 +138,16 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = {
522    
523     /* 6x00 Series */
524     {IWL_PCI_DEVICE(0x422B, 0x1101, iwl6000_3agn_cfg)},
525     + {IWL_PCI_DEVICE(0x422B, 0x1108, iwl6000_3agn_cfg)},
526     {IWL_PCI_DEVICE(0x422B, 0x1121, iwl6000_3agn_cfg)},
527     + {IWL_PCI_DEVICE(0x422B, 0x1128, iwl6000_3agn_cfg)},
528     {IWL_PCI_DEVICE(0x422C, 0x1301, iwl6000i_2agn_cfg)},
529     {IWL_PCI_DEVICE(0x422C, 0x1306, iwl6000i_2abg_cfg)},
530     {IWL_PCI_DEVICE(0x422C, 0x1307, iwl6000i_2bg_cfg)},
531     {IWL_PCI_DEVICE(0x422C, 0x1321, iwl6000i_2agn_cfg)},
532     {IWL_PCI_DEVICE(0x422C, 0x1326, iwl6000i_2abg_cfg)},
533     {IWL_PCI_DEVICE(0x4238, 0x1111, iwl6000_3agn_cfg)},
534     + {IWL_PCI_DEVICE(0x4238, 0x1118, iwl6000_3agn_cfg)},
535     {IWL_PCI_DEVICE(0x4239, 0x1311, iwl6000i_2agn_cfg)},
536     {IWL_PCI_DEVICE(0x4239, 0x1316, iwl6000i_2abg_cfg)},
537    
538     @@ -152,12 +155,16 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = {
539     {IWL_PCI_DEVICE(0x0082, 0x1301, iwl6005_2agn_cfg)},
540     {IWL_PCI_DEVICE(0x0082, 0x1306, iwl6005_2abg_cfg)},
541     {IWL_PCI_DEVICE(0x0082, 0x1307, iwl6005_2bg_cfg)},
542     + {IWL_PCI_DEVICE(0x0082, 0x1308, iwl6005_2agn_cfg)},
543     {IWL_PCI_DEVICE(0x0082, 0x1321, iwl6005_2agn_cfg)},
544     {IWL_PCI_DEVICE(0x0082, 0x1326, iwl6005_2abg_cfg)},
545     + {IWL_PCI_DEVICE(0x0082, 0x1328, iwl6005_2agn_cfg)},
546     {IWL_PCI_DEVICE(0x0085, 0x1311, iwl6005_2agn_cfg)},
547     + {IWL_PCI_DEVICE(0x0085, 0x1318, iwl6005_2agn_cfg)},
548     {IWL_PCI_DEVICE(0x0085, 0x1316, iwl6005_2abg_cfg)},
549     {IWL_PCI_DEVICE(0x0082, 0xC020, iwl6005_2agn_sff_cfg)},
550     {IWL_PCI_DEVICE(0x0085, 0xC220, iwl6005_2agn_sff_cfg)},
551     + {IWL_PCI_DEVICE(0x0085, 0xC228, iwl6005_2agn_sff_cfg)},
552     {IWL_PCI_DEVICE(0x0082, 0x4820, iwl6005_2agn_d_cfg)},
553     {IWL_PCI_DEVICE(0x0082, 0x1304, iwl6005_2agn_mow1_cfg)},/* low 5GHz active */
554     {IWL_PCI_DEVICE(0x0082, 0x1305, iwl6005_2agn_mow2_cfg)},/* high 5GHz active */
555     @@ -239,8 +246,11 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = {
556    
557     /* 6x35 Series */
558     {IWL_PCI_DEVICE(0x088E, 0x4060, iwl6035_2agn_cfg)},
559     + {IWL_PCI_DEVICE(0x088E, 0x406A, iwl6035_2agn_sff_cfg)},
560     {IWL_PCI_DEVICE(0x088F, 0x4260, iwl6035_2agn_cfg)},
561     + {IWL_PCI_DEVICE(0x088F, 0x426A, iwl6035_2agn_sff_cfg)},
562     {IWL_PCI_DEVICE(0x088E, 0x4460, iwl6035_2agn_cfg)},
563     + {IWL_PCI_DEVICE(0x088E, 0x446A, iwl6035_2agn_sff_cfg)},
564     {IWL_PCI_DEVICE(0x088E, 0x4860, iwl6035_2agn_cfg)},
565     {IWL_PCI_DEVICE(0x088F, 0x5260, iwl6035_2agn_cfg)},
566    
567     diff --git a/drivers/net/wireless/mwifiex/main.c b/drivers/net/wireless/mwifiex/main.c
568     index 8fc44992b5c3..fc3fe8ddcf62 100644
569     --- a/drivers/net/wireless/mwifiex/main.c
570     +++ b/drivers/net/wireless/mwifiex/main.c
571     @@ -270,10 +270,12 @@ process_start:
572     }
573     } while (true);
574    
575     - if ((adapter->int_status) || IS_CARD_RX_RCVD(adapter))
576     + spin_lock_irqsave(&adapter->main_proc_lock, flags);
577     + if ((adapter->int_status) || IS_CARD_RX_RCVD(adapter)) {
578     + spin_unlock_irqrestore(&adapter->main_proc_lock, flags);
579     goto process_start;
580     + }
581    
582     - spin_lock_irqsave(&adapter->main_proc_lock, flags);
583     adapter->mwifiex_processing = false;
584     spin_unlock_irqrestore(&adapter->main_proc_lock, flags);
585    
586     diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c b/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c
587     index 763cf1defab5..5a060e537fbe 100644
588     --- a/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c
589     +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c
590     @@ -343,7 +343,8 @@ bool rtl92cu_rx_query_desc(struct ieee80211_hw *hw,
591     (bool)GET_RX_DESC_PAGGR(pdesc));
592     rx_status->mactime = GET_RX_DESC_TSFL(pdesc);
593     if (phystatus) {
594     - p_drvinfo = (struct rx_fwinfo_92c *)(pdesc + RTL_RX_DESC_SIZE);
595     + p_drvinfo = (struct rx_fwinfo_92c *)(skb->data +
596     + stats->rx_bufshift);
597     rtl92c_translate_rx_signal_stuff(hw, skb, stats, pdesc,
598     p_drvinfo);
599     }
600     diff --git a/drivers/ntb/ntb_hw.c b/drivers/ntb/ntb_hw.c
601     index 2dacd19e1b8a..b9bf8b551e3c 100644
602     --- a/drivers/ntb/ntb_hw.c
603     +++ b/drivers/ntb/ntb_hw.c
604     @@ -78,6 +78,8 @@ enum {
605     BWD_HW,
606     };
607    
608     +static struct dentry *debugfs_dir;
609     +
610     /* Translate memory window 0,1 to BAR 2,4 */
611     #define MW_TO_BAR(mw) (mw * 2 + 2)
612    
613     @@ -531,9 +533,9 @@ static int ntb_xeon_setup(struct ntb_device *ndev)
614     }
615    
616     if (val & SNB_PPD_DEV_TYPE)
617     - ndev->dev_type = NTB_DEV_DSD;
618     - else
619     ndev->dev_type = NTB_DEV_USD;
620     + else
621     + ndev->dev_type = NTB_DEV_DSD;
622    
623     ndev->reg_ofs.pdb = ndev->reg_base + SNB_PDOORBELL_OFFSET;
624     ndev->reg_ofs.pdb_mask = ndev->reg_base + SNB_PDBMSK_OFFSET;
625     @@ -547,7 +549,7 @@ static int ntb_xeon_setup(struct ntb_device *ndev)
626     if (ndev->conn_type == NTB_CONN_B2B) {
627     ndev->reg_ofs.sdb = ndev->reg_base + SNB_B2B_DOORBELL_OFFSET;
628     ndev->reg_ofs.spad_write = ndev->reg_base + SNB_B2B_SPAD_OFFSET;
629     - ndev->limits.max_spads = SNB_MAX_SPADS;
630     + ndev->limits.max_spads = SNB_MAX_B2B_SPADS;
631     } else {
632     ndev->reg_ofs.sdb = ndev->reg_base + SNB_SDOORBELL_OFFSET;
633     ndev->reg_ofs.spad_write = ndev->reg_base + SNB_SPAD_OFFSET;
634     @@ -644,10 +646,16 @@ static int ntb_device_setup(struct ntb_device *ndev)
635     rc = -ENODEV;
636     }
637    
638     + if (rc)
639     + return rc;
640     +
641     + dev_info(&ndev->pdev->dev, "Device Type = %s\n",
642     + ndev->dev_type == NTB_DEV_USD ? "USD/DSP" : "DSD/USP");
643     +
644     /* Enable Bus Master and Memory Space on the secondary side */
645     writew(PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER, ndev->reg_ofs.spci_cmd);
646    
647     - return rc;
648     + return 0;
649     }
650    
651     static void ntb_device_free(struct ntb_device *ndev)
652     @@ -992,6 +1000,28 @@ static void ntb_free_callbacks(struct ntb_device *ndev)
653     kfree(ndev->db_cb);
654     }
655    
656     +static void ntb_setup_debugfs(struct ntb_device *ndev)
657     +{
658     + if (!debugfs_initialized())
659     + return;
660     +
661     + if (!debugfs_dir)
662     + debugfs_dir = debugfs_create_dir(KBUILD_MODNAME, NULL);
663     +
664     + ndev->debugfs_dir = debugfs_create_dir(pci_name(ndev->pdev),
665     + debugfs_dir);
666     +}
667     +
668     +static void ntb_free_debugfs(struct ntb_device *ndev)
669     +{
670     + debugfs_remove_recursive(ndev->debugfs_dir);
671     +
672     + if (debugfs_dir && simple_empty(debugfs_dir)) {
673     + debugfs_remove_recursive(debugfs_dir);
674     + debugfs_dir = NULL;
675     + }
676     +}
677     +
678     static int ntb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
679     {
680     struct ntb_device *ndev;
681     @@ -1004,6 +1034,7 @@ static int ntb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
682     ndev->pdev = pdev;
683     ndev->link_status = NTB_LINK_DOWN;
684     pci_set_drvdata(pdev, ndev);
685     + ntb_setup_debugfs(ndev);
686    
687     rc = pci_enable_device(pdev);
688     if (rc)
689     @@ -1100,6 +1131,7 @@ err2:
690     err1:
691     pci_disable_device(pdev);
692     err:
693     + ntb_free_debugfs(ndev);
694     kfree(ndev);
695    
696     dev_err(&pdev->dev, "Error loading %s module\n", KBUILD_MODNAME);
697     @@ -1129,6 +1161,7 @@ static void ntb_pci_remove(struct pci_dev *pdev)
698     iounmap(ndev->reg_base);
699     pci_release_selected_regions(pdev, NTB_BAR_MASK);
700     pci_disable_device(pdev);
701     + ntb_free_debugfs(ndev);
702     kfree(ndev);
703     }
704    
705     diff --git a/drivers/ntb/ntb_hw.h b/drivers/ntb/ntb_hw.h
706     index 3a3038ca83e6..6a4f56f564ee 100644
707     --- a/drivers/ntb/ntb_hw.h
708     +++ b/drivers/ntb/ntb_hw.h
709     @@ -127,6 +127,8 @@ struct ntb_device {
710     unsigned char link_status;
711     struct delayed_work hb_timer;
712     unsigned long last_ts;
713     +
714     + struct dentry *debugfs_dir;
715     };
716    
717     /**
718     @@ -155,6 +157,20 @@ static inline struct pci_dev *ntb_query_pdev(struct ntb_device *ndev)
719     return ndev->pdev;
720     }
721    
722     +/**
723     + * ntb_query_debugfs() - return the debugfs pointer
724     + * @ndev: pointer to ntb_device instance
725     + *
726     + * Given the ntb pointer, return the debugfs directory pointer for the NTB
727     + * hardware device
728     + *
729     + * RETURNS: a pointer to the debugfs directory
730     + */
731     +static inline struct dentry *ntb_query_debugfs(struct ntb_device *ndev)
732     +{
733     + return ndev->debugfs_dir;
734     +}
735     +
736     struct ntb_device *ntb_register_transport(struct pci_dev *pdev,
737     void *transport);
738     void ntb_unregister_transport(struct ntb_device *ndev);
739     diff --git a/drivers/ntb/ntb_regs.h b/drivers/ntb/ntb_regs.h
740     index 5bfa8c06c059..96209b4abc22 100644
741     --- a/drivers/ntb/ntb_regs.h
742     +++ b/drivers/ntb/ntb_regs.h
743     @@ -53,8 +53,8 @@
744     #define NTB_LINK_WIDTH_MASK 0x03f0
745    
746     #define SNB_MSIX_CNT 4
747     -#define SNB_MAX_SPADS 16
748     -#define SNB_MAX_COMPAT_SPADS 8
749     +#define SNB_MAX_B2B_SPADS 16
750     +#define SNB_MAX_COMPAT_SPADS 16
751     /* Reserve the uppermost bit for link interrupt */
752     #define SNB_MAX_DB_BITS 15
753     #define SNB_DB_BITS_PER_VEC 5
754     diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c
755     index f8d7081ee301..c3089151aa49 100644
756     --- a/drivers/ntb/ntb_transport.c
757     +++ b/drivers/ntb/ntb_transport.c
758     @@ -157,7 +157,6 @@ struct ntb_transport {
759     bool transport_link;
760     struct delayed_work link_work;
761     struct work_struct link_cleanup;
762     - struct dentry *debugfs_dir;
763     };
764    
765     enum {
766     @@ -824,12 +823,12 @@ static void ntb_transport_init_queue(struct ntb_transport *nt,
767     qp->tx_max_frame = min(transport_mtu, tx_size / 2);
768     qp->tx_max_entry = tx_size / qp->tx_max_frame;
769    
770     - if (nt->debugfs_dir) {
771     + if (ntb_query_debugfs(nt->ndev)) {
772     char debugfs_name[4];
773    
774     snprintf(debugfs_name, 4, "qp%d", qp_num);
775     qp->debugfs_dir = debugfs_create_dir(debugfs_name,
776     - nt->debugfs_dir);
777     + ntb_query_debugfs(nt->ndev));
778    
779     qp->debugfs_stats = debugfs_create_file("stats", S_IRUSR,
780     qp->debugfs_dir, qp,
781     @@ -857,11 +856,6 @@ int ntb_transport_init(struct pci_dev *pdev)
782     if (!nt)
783     return -ENOMEM;
784    
785     - if (debugfs_initialized())
786     - nt->debugfs_dir = debugfs_create_dir(KBUILD_MODNAME, NULL);
787     - else
788     - nt->debugfs_dir = NULL;
789     -
790     nt->ndev = ntb_register_transport(pdev, nt);
791     if (!nt->ndev) {
792     rc = -EIO;
793     @@ -907,7 +901,6 @@ err2:
794     err1:
795     ntb_unregister_transport(nt->ndev);
796     err:
797     - debugfs_remove_recursive(nt->debugfs_dir);
798     kfree(nt);
799     return rc;
800     }
801     @@ -921,16 +914,16 @@ void ntb_transport_free(void *transport)
802     nt->transport_link = NTB_LINK_DOWN;
803    
804     /* verify that all the qp's are freed */
805     - for (i = 0; i < nt->max_qps; i++)
806     + for (i = 0; i < nt->max_qps; i++) {
807     if (!test_bit(i, &nt->qp_bitmap))
808     ntb_transport_free_queue(&nt->qps[i]);
809     + debugfs_remove_recursive(nt->qps[i].debugfs_dir);
810     + }
811    
812     ntb_bus_remove(nt);
813    
814     cancel_delayed_work_sync(&nt->link_work);
815    
816     - debugfs_remove_recursive(nt->debugfs_dir);
817     -
818     ntb_unregister_event_callback(nt->ndev);
819    
820     pdev = ntb_query_pdev(nt->ndev);
821     diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
822     index 408a42ef787a..f0d432c139d0 100644
823     --- a/drivers/scsi/aacraid/linit.c
824     +++ b/drivers/scsi/aacraid/linit.c
825     @@ -771,6 +771,8 @@ static long aac_compat_do_ioctl(struct aac_dev *dev, unsigned cmd, unsigned long
826     static int aac_compat_ioctl(struct scsi_device *sdev, int cmd, void __user *arg)
827     {
828     struct aac_dev *dev = (struct aac_dev *)sdev->host->hostdata;
829     + if (!capable(CAP_SYS_RAWIO))
830     + return -EPERM;
831     return aac_compat_do_ioctl(dev, cmd, (unsigned long)arg);
832     }
833    
834     diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
835     index c39863441337..734a29a70f63 100644
836     --- a/drivers/scsi/sd.c
837     +++ b/drivers/scsi/sd.c
838     @@ -2843,6 +2843,7 @@ static void sd_probe_async(void *data, async_cookie_t cookie)
839     gd->events |= DISK_EVENT_MEDIA_CHANGE;
840     }
841    
842     + blk_pm_runtime_init(sdp->request_queue, dev);
843     add_disk(gd);
844     if (sdkp->capacity)
845     sd_dif_config_host(sdkp);
846     @@ -2851,7 +2852,6 @@ static void sd_probe_async(void *data, async_cookie_t cookie)
847    
848     sd_printk(KERN_NOTICE, sdkp, "Attached SCSI %sdisk\n",
849     sdp->removable ? "removable " : "");
850     - blk_pm_runtime_init(sdp->request_queue, dev);
851     scsi_autopm_put_device(sdp);
852     put_device(&sdkp->dev);
853     }
854     diff --git a/drivers/staging/bcm/Bcmchar.c b/drivers/staging/bcm/Bcmchar.c
855     index 35641e529396..8fa64d964b16 100644
856     --- a/drivers/staging/bcm/Bcmchar.c
857     +++ b/drivers/staging/bcm/Bcmchar.c
858     @@ -1960,6 +1960,7 @@ cntrlEnd:
859    
860     BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, OSAL_DBG, DBG_LVL_ALL, "Called IOCTL_BCM_GET_DEVICE_DRIVER_INFO\n");
861    
862     + memset(&DevInfo, 0, sizeof(DevInfo));
863     DevInfo.MaxRDMBufferSize = BUFFER_4K;
864     DevInfo.u32DSDStartOffset = EEPROM_CALPARAM_START;
865     DevInfo.u32RxAlignmentCorrection = 0;
866     diff --git a/drivers/staging/ozwpan/ozcdev.c b/drivers/staging/ozwpan/ozcdev.c
867     index 27d06666c81a..224ccff75d4f 100644
868     --- a/drivers/staging/ozwpan/ozcdev.c
869     +++ b/drivers/staging/ozwpan/ozcdev.c
870     @@ -153,6 +153,9 @@ static ssize_t oz_cdev_write(struct file *filp, const char __user *buf,
871     struct oz_app_hdr *app_hdr;
872     struct oz_serial_ctx *ctx;
873    
874     + if (count > sizeof(ei->data) - sizeof(*elt) - sizeof(*app_hdr))
875     + return -EINVAL;
876     +
877     spin_lock_bh(&g_cdev.lock);
878     pd = g_cdev.active_pd;
879     if (pd)
880     diff --git a/drivers/staging/sb105x/sb_pci_mp.c b/drivers/staging/sb105x/sb_pci_mp.c
881     index cd94f6c27723..b90e96b7ca01 100644
882     --- a/drivers/staging/sb105x/sb_pci_mp.c
883     +++ b/drivers/staging/sb105x/sb_pci_mp.c
884     @@ -1063,7 +1063,7 @@ static int mp_wait_modem_status(struct sb_uart_state *state, unsigned long arg)
885    
886     static int mp_get_count(struct sb_uart_state *state, struct serial_icounter_struct *icnt)
887     {
888     - struct serial_icounter_struct icount;
889     + struct serial_icounter_struct icount = {};
890     struct sb_uart_icount cnow;
891     struct sb_uart_port *port = state->port;
892    
893     diff --git a/drivers/staging/wlags49_h2/wl_priv.c b/drivers/staging/wlags49_h2/wl_priv.c
894     index c97e0e154d28..7e10dcdc3090 100644
895     --- a/drivers/staging/wlags49_h2/wl_priv.c
896     +++ b/drivers/staging/wlags49_h2/wl_priv.c
897     @@ -570,6 +570,7 @@ int wvlan_uil_put_info(struct uilreq *urq, struct wl_private *lp)
898     ltv_t *pLtv;
899     bool_t ltvAllocated = FALSE;
900     ENCSTRCT sEncryption;
901     + size_t len;
902    
903     #ifdef USE_WDS
904     hcf_16 hcfPort = HCF_PORT_0;
905     @@ -686,7 +687,8 @@ int wvlan_uil_put_info(struct uilreq *urq, struct wl_private *lp)
906     break;
907     case CFG_CNF_OWN_NAME:
908     memset(lp->StationName, 0, sizeof(lp->StationName));
909     - memcpy((void *)lp->StationName, (void *)&pLtv->u.u8[2], (size_t)pLtv->u.u16[0]);
910     + len = min_t(size_t, pLtv->u.u16[0], sizeof(lp->StationName));
911     + strlcpy(lp->StationName, &pLtv->u.u8[2], len);
912     pLtv->u.u16[0] = CNV_INT_TO_LITTLE(pLtv->u.u16[0]);
913     break;
914     case CFG_CNF_LOAD_BALANCING:
915     @@ -1783,6 +1785,7 @@ int wvlan_set_station_nickname(struct net_device *dev,
916     {
917     struct wl_private *lp = wl_priv(dev);
918     unsigned long flags;
919     + size_t len;
920     int ret = 0;
921     /*------------------------------------------------------------------------*/
922    
923     @@ -1793,8 +1796,8 @@ int wvlan_set_station_nickname(struct net_device *dev,
924     wl_lock(lp, &flags);
925    
926     memset(lp->StationName, 0, sizeof(lp->StationName));
927     -
928     - memcpy(lp->StationName, extra, wrqu->data.length);
929     + len = min_t(size_t, wrqu->data.length, sizeof(lp->StationName));
930     + strlcpy(lp->StationName, extra, len);
931    
932     /* Commit the adapter parameters */
933     wl_apply(lp);
934     diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c
935     index e992b27aa090..3250ba2594e0 100644
936     --- a/drivers/target/target_core_pscsi.c
937     +++ b/drivers/target/target_core_pscsi.c
938     @@ -134,10 +134,10 @@ static int pscsi_pmode_enable_hba(struct se_hba *hba, unsigned long mode_flag)
939     * pSCSI Host ID and enable for phba mode
940     */
941     sh = scsi_host_lookup(phv->phv_host_id);
942     - if (IS_ERR(sh)) {
943     + if (!sh) {
944     pr_err("pSCSI: Unable to locate SCSI Host for"
945     " phv_host_id: %d\n", phv->phv_host_id);
946     - return PTR_ERR(sh);
947     + return -EINVAL;
948     }
949    
950     phv->phv_lld_host = sh;
951     @@ -515,10 +515,10 @@ static int pscsi_configure_device(struct se_device *dev)
952     sh = phv->phv_lld_host;
953     } else {
954     sh = scsi_host_lookup(pdv->pdv_host_id);
955     - if (IS_ERR(sh)) {
956     + if (!sh) {
957     pr_err("pSCSI: Unable to locate"
958     " pdv_host_id: %d\n", pdv->pdv_host_id);
959     - return PTR_ERR(sh);
960     + return -EINVAL;
961     }
962     }
963     } else {
964     diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c
965     index b645c47501b4..2d57a00dc173 100644
966     --- a/drivers/uio/uio.c
967     +++ b/drivers/uio/uio.c
968     @@ -630,36 +630,57 @@ static int uio_vma_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
969     return 0;
970     }
971    
972     -static const struct vm_operations_struct uio_vm_ops = {
973     +static const struct vm_operations_struct uio_logical_vm_ops = {
974     .open = uio_vma_open,
975     .close = uio_vma_close,
976     .fault = uio_vma_fault,
977     };
978    
979     +static int uio_mmap_logical(struct vm_area_struct *vma)
980     +{
981     + vma->vm_flags |= VM_DONTEXPAND | VM_DONTDUMP;
982     + vma->vm_ops = &uio_logical_vm_ops;
983     + uio_vma_open(vma);
984     + return 0;
985     +}
986     +
987     +static const struct vm_operations_struct uio_physical_vm_ops = {
988     +#ifdef CONFIG_HAVE_IOREMAP_PROT
989     + .access = generic_access_phys,
990     +#endif
991     +};
992     +
993     static int uio_mmap_physical(struct vm_area_struct *vma)
994     {
995     struct uio_device *idev = vma->vm_private_data;
996     int mi = uio_find_mem_index(vma);
997     + struct uio_mem *mem;
998     if (mi < 0)
999     return -EINVAL;
1000     + mem = idev->info->mem + mi;
1001    
1002     + if (vma->vm_end - vma->vm_start > mem->size)
1003     + return -EINVAL;
1004     +
1005     + vma->vm_ops = &uio_physical_vm_ops;
1006     vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
1007    
1008     + /*
1009     + * We cannot use the vm_iomap_memory() helper here,
1010     + * because vma->vm_pgoff is the map index we looked
1011     + * up above in uio_find_mem_index(), rather than an
1012     + * actual page offset into the mmap.
1013     + *
1014     + * So we just do the physical mmap without a page
1015     + * offset.
1016     + */
1017     return remap_pfn_range(vma,
1018     vma->vm_start,
1019     - idev->info->mem[mi].addr >> PAGE_SHIFT,
1020     + mem->addr >> PAGE_SHIFT,
1021     vma->vm_end - vma->vm_start,
1022     vma->vm_page_prot);
1023     }
1024    
1025     -static int uio_mmap_logical(struct vm_area_struct *vma)
1026     -{
1027     - vma->vm_flags |= VM_DONTEXPAND | VM_DONTDUMP;
1028     - vma->vm_ops = &uio_vm_ops;
1029     - uio_vma_open(vma);
1030     - return 0;
1031     -}
1032     -
1033     static int uio_mmap(struct file *filep, struct vm_area_struct *vma)
1034     {
1035     struct uio_listener *listener = filep->private_data;
1036     diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
1037     index 5b44cd47da5b..01fe36273f3b 100644
1038     --- a/drivers/usb/core/quirks.c
1039     +++ b/drivers/usb/core/quirks.c
1040     @@ -97,6 +97,9 @@ static const struct usb_device_id usb_quirk_list[] = {
1041     /* Alcor Micro Corp. Hub */
1042     { USB_DEVICE(0x058f, 0x9254), .driver_info = USB_QUIRK_RESET_RESUME },
1043    
1044     + /* MicroTouch Systems touchscreen */
1045     + { USB_DEVICE(0x0596, 0x051e), .driver_info = USB_QUIRK_RESET_RESUME },
1046     +
1047     /* appletouch */
1048     { USB_DEVICE(0x05ac, 0x021a), .driver_info = USB_QUIRK_RESET_RESUME },
1049    
1050     @@ -130,6 +133,9 @@ static const struct usb_device_id usb_quirk_list[] = {
1051     /* Broadcom BCM92035DGROM BT dongle */
1052     { USB_DEVICE(0x0a5c, 0x2021), .driver_info = USB_QUIRK_RESET_RESUME },
1053    
1054     + /* MAYA44USB sound device */
1055     + { USB_DEVICE(0x0a92, 0x0091), .driver_info = USB_QUIRK_RESET_RESUME },
1056     +
1057     /* Action Semiconductor flash disk */
1058     { USB_DEVICE(0x10d6, 0x2200), .driver_info =
1059     USB_QUIRK_STRING_FETCH_255 },
1060     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
1061     index b65e657c641d..aa3aed5458a6 100644
1062     --- a/drivers/usb/serial/ftdi_sio.c
1063     +++ b/drivers/usb/serial/ftdi_sio.c
1064     @@ -906,6 +906,7 @@ static struct usb_device_id id_table_combined [] = {
1065     { USB_DEVICE(FTDI_VID, FTDI_LUMEL_PD12_PID) },
1066     /* Crucible Devices */
1067     { USB_DEVICE(FTDI_VID, FTDI_CT_COMET_PID) },
1068     + { USB_DEVICE(FTDI_VID, FTDI_Z3X_PID) },
1069     { }, /* Optional parameter entry */
1070     { } /* Terminating entry */
1071     };
1072     diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
1073     index 1b8af461b522..a7019d1e3058 100644
1074     --- a/drivers/usb/serial/ftdi_sio_ids.h
1075     +++ b/drivers/usb/serial/ftdi_sio_ids.h
1076     @@ -1307,3 +1307,9 @@
1077     * Manufacturer: Crucible Technologies
1078     */
1079     #define FTDI_CT_COMET_PID 0x8e08
1080     +
1081     +/*
1082     + * Product: Z3X Box
1083     + * Manufacturer: Smart GSM Team
1084     + */
1085     +#define FTDI_Z3X_PID 0x0011
1086     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
1087     index f1507c052a2e..acaee066b99a 100644
1088     --- a/drivers/usb/serial/option.c
1089     +++ b/drivers/usb/serial/option.c
1090     @@ -693,6 +693,222 @@ static const struct usb_device_id option_ids[] = {
1091     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7A) },
1092     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7B) },
1093     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7C) },
1094     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x01) },
1095     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x02) },
1096     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x03) },
1097     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x04) },
1098     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x05) },
1099     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x06) },
1100     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0A) },
1101     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0B) },
1102     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0D) },
1103     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0E) },
1104     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0F) },
1105     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x10) },
1106     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x12) },
1107     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x13) },
1108     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x14) },
1109     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x15) },
1110     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x17) },
1111     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x18) },
1112     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x19) },
1113     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x1A) },
1114     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x1B) },
1115     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x1C) },
1116     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x31) },
1117     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x32) },
1118     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x33) },
1119     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x34) },
1120     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x35) },
1121     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x36) },
1122     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3A) },
1123     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3B) },
1124     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3D) },
1125     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3E) },
1126     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3F) },
1127     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x48) },
1128     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x49) },
1129     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x4A) },
1130     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x4B) },
1131     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x4C) },
1132     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x61) },
1133     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x62) },
1134     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x63) },
1135     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x64) },
1136     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x65) },
1137     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x66) },
1138     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6A) },
1139     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6B) },
1140     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6D) },
1141     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6E) },
1142     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6F) },
1143     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x78) },
1144     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x79) },
1145     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x7A) },
1146     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x7B) },
1147     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x7C) },
1148     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x01) },
1149     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x02) },
1150     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x03) },
1151     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x04) },
1152     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x05) },
1153     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x06) },
1154     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0A) },
1155     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0B) },
1156     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0D) },
1157     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0E) },
1158     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0F) },
1159     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x10) },
1160     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x12) },
1161     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x13) },
1162     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x14) },
1163     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x15) },
1164     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x17) },
1165     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x18) },
1166     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x19) },
1167     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x1A) },
1168     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x1B) },
1169     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x1C) },
1170     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x31) },
1171     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x32) },
1172     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x33) },
1173     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x34) },
1174     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x35) },
1175     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x36) },
1176     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3A) },
1177     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3B) },
1178     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3D) },
1179     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3E) },
1180     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3F) },
1181     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x48) },
1182     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x49) },
1183     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x4A) },
1184     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x4B) },
1185     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x4C) },
1186     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x61) },
1187     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x62) },
1188     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x63) },
1189     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x64) },
1190     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x65) },
1191     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x66) },
1192     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6A) },
1193     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6B) },
1194     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6D) },
1195     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6E) },
1196     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6F) },
1197     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x78) },
1198     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x79) },
1199     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x7A) },
1200     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x7B) },
1201     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x7C) },
1202     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x01) },
1203     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x02) },
1204     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x03) },
1205     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x04) },
1206     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x05) },
1207     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x06) },
1208     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0A) },
1209     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0B) },
1210     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0D) },
1211     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0E) },
1212     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0F) },
1213     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x10) },
1214     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x12) },
1215     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x13) },
1216     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x14) },
1217     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x15) },
1218     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x17) },
1219     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x18) },
1220     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x19) },
1221     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x1A) },
1222     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x1B) },
1223     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x1C) },
1224     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x31) },
1225     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x32) },
1226     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x33) },
1227     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x34) },
1228     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x35) },
1229     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x36) },
1230     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3A) },
1231     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3B) },
1232     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3D) },
1233     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3E) },
1234     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3F) },
1235     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x48) },
1236     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x49) },
1237     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x4A) },
1238     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x4B) },
1239     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x4C) },
1240     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x61) },
1241     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x62) },
1242     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x63) },
1243     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x64) },
1244     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x65) },
1245     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x66) },
1246     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6A) },
1247     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6B) },
1248     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6D) },
1249     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6E) },
1250     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6F) },
1251     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x78) },
1252     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x79) },
1253     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x7A) },
1254     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x7B) },
1255     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x7C) },
1256     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x01) },
1257     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x02) },
1258     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x03) },
1259     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x04) },
1260     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x05) },
1261     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x06) },
1262     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0A) },
1263     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0B) },
1264     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0D) },
1265     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0E) },
1266     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0F) },
1267     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x10) },
1268     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x12) },
1269     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x13) },
1270     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x14) },
1271     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x15) },
1272     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x17) },
1273     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x18) },
1274     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x19) },
1275     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x1A) },
1276     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x1B) },
1277     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x1C) },
1278     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x31) },
1279     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x32) },
1280     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x33) },
1281     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x34) },
1282     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x35) },
1283     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x36) },
1284     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3A) },
1285     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3B) },
1286     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3D) },
1287     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3E) },
1288     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3F) },
1289     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x48) },
1290     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x49) },
1291     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x4A) },
1292     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x4B) },
1293     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x4C) },
1294     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x61) },
1295     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x62) },
1296     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x63) },
1297     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x64) },
1298     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x65) },
1299     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x66) },
1300     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6A) },
1301     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6B) },
1302     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6D) },
1303     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6E) },
1304     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6F) },
1305     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x78) },
1306     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x79) },
1307     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7A) },
1308     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7B) },
1309     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7C) },
1310    
1311    
1312     { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) },
1313     diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
1314     index 92b05d95ec5e..5db153260827 100644
1315     --- a/drivers/usb/storage/scsiglue.c
1316     +++ b/drivers/usb/storage/scsiglue.c
1317     @@ -211,8 +211,11 @@ static int slave_configure(struct scsi_device *sdev)
1318     /*
1319     * Many devices do not respond properly to READ_CAPACITY_16.
1320     * Tell the SCSI layer to try READ_CAPACITY_10 first.
1321     + * However some USB 3.0 drive enclosures return capacity
1322     + * modulo 2TB. Those must use READ_CAPACITY_16
1323     */
1324     - sdev->try_rc_10_first = 1;
1325     + if (!(us->fflags & US_FL_NEEDS_CAP16))
1326     + sdev->try_rc_10_first = 1;
1327    
1328     /* assume SPC3 or latter devices support sense size > 18 */
1329     if (sdev->scsi_level > SCSI_SPC_2)
1330     diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
1331     index c015f2c16729..de32cfa5bfa6 100644
1332     --- a/drivers/usb/storage/unusual_devs.h
1333     +++ b/drivers/usb/storage/unusual_devs.h
1334     @@ -1925,6 +1925,13 @@ UNUSUAL_DEV( 0x1652, 0x6600, 0x0201, 0x0201,
1335     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1336     US_FL_IGNORE_RESIDUE ),
1337    
1338     +/* Reported by Oliver Neukum <oneukum@suse.com> */
1339     +UNUSUAL_DEV( 0x174c, 0x55aa, 0x0100, 0x0100,
1340     + "ASMedia",
1341     + "AS2105",
1342     + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1343     + US_FL_NEEDS_CAP16),
1344     +
1345     /* Reported by Jesse Feddema <jdfeddema@gmail.com> */
1346     UNUSUAL_DEV( 0x177f, 0x0400, 0x0000, 0x0000,
1347     "Yarvik",
1348     diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c
1349     index 701420297225..962c7e3c3baa 100644
1350     --- a/drivers/vhost/scsi.c
1351     +++ b/drivers/vhost/scsi.c
1352     @@ -1017,7 +1017,7 @@ static void vhost_scsi_handle_vq(struct vhost_scsi *vs,
1353     if (data_direction != DMA_NONE) {
1354     ret = vhost_scsi_map_iov_to_sgl(tv_cmd,
1355     &vq->iov[data_first], data_num,
1356     - data_direction == DMA_TO_DEVICE);
1357     + data_direction == DMA_FROM_DEVICE);
1358     if (unlikely(ret)) {
1359     vq_err(vq, "Failed to map iov to sgl\n");
1360     goto err_free;
1361     diff --git a/drivers/video/au1100fb.c b/drivers/video/au1100fb.c
1362     index 700cac067b46..bdc515f5e979 100644
1363     --- a/drivers/video/au1100fb.c
1364     +++ b/drivers/video/au1100fb.c
1365     @@ -361,39 +361,13 @@ void au1100fb_fb_rotate(struct fb_info *fbi, int angle)
1366     int au1100fb_fb_mmap(struct fb_info *fbi, struct vm_area_struct *vma)
1367     {
1368     struct au1100fb_device *fbdev;
1369     - unsigned int len;
1370     - unsigned long start=0, off;
1371    
1372     fbdev = to_au1100fb_device(fbi);
1373    
1374     - if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT)) {
1375     - return -EINVAL;
1376     - }
1377     -
1378     - start = fbdev->fb_phys & PAGE_MASK;
1379     - len = PAGE_ALIGN((start & ~PAGE_MASK) + fbdev->fb_len);
1380     -
1381     - off = vma->vm_pgoff << PAGE_SHIFT;
1382     -
1383     - if ((vma->vm_end - vma->vm_start + off) > len) {
1384     - return -EINVAL;
1385     - }
1386     -
1387     - off += start;
1388     - vma->vm_pgoff = off >> PAGE_SHIFT;
1389     -
1390     vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
1391     pgprot_val(vma->vm_page_prot) |= (6 << 9); //CCA=6
1392    
1393     - vma->vm_flags |= VM_IO;
1394     -
1395     - if (io_remap_pfn_range(vma, vma->vm_start, off >> PAGE_SHIFT,
1396     - vma->vm_end - vma->vm_start,
1397     - vma->vm_page_prot)) {
1398     - return -EAGAIN;
1399     - }
1400     -
1401     - return 0;
1402     + return vm_iomap_memory(vma, fbdev->fb_phys, fbdev->fb_len);
1403     }
1404    
1405     static struct fb_ops au1100fb_ops =
1406     diff --git a/drivers/video/au1200fb.c b/drivers/video/au1200fb.c
1407     index 1b59054fc6a4..1d02897d17f2 100644
1408     --- a/drivers/video/au1200fb.c
1409     +++ b/drivers/video/au1200fb.c
1410     @@ -1233,38 +1233,13 @@ static int au1200fb_fb_blank(int blank_mode, struct fb_info *fbi)
1411     * method mainly to allow the use of the TLB streaming flag (CCA=6)
1412     */
1413     static int au1200fb_fb_mmap(struct fb_info *info, struct vm_area_struct *vma)
1414     -
1415     {
1416     - unsigned int len;
1417     - unsigned long start=0, off;
1418     struct au1200fb_device *fbdev = info->par;
1419    
1420     - if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT)) {
1421     - return -EINVAL;
1422     - }
1423     -
1424     - start = fbdev->fb_phys & PAGE_MASK;
1425     - len = PAGE_ALIGN((start & ~PAGE_MASK) + fbdev->fb_len);
1426     -
1427     - off = vma->vm_pgoff << PAGE_SHIFT;
1428     -
1429     - if ((vma->vm_end - vma->vm_start + off) > len) {
1430     - return -EINVAL;
1431     - }
1432     -
1433     - off += start;
1434     - vma->vm_pgoff = off >> PAGE_SHIFT;
1435     -
1436     vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
1437     pgprot_val(vma->vm_page_prot) |= _CACHE_MASK; /* CCA=7 */
1438    
1439     - vma->vm_flags |= VM_IO;
1440     -
1441     - return io_remap_pfn_range(vma, vma->vm_start, off >> PAGE_SHIFT,
1442     - vma->vm_end - vma->vm_start,
1443     - vma->vm_page_prot);
1444     -
1445     - return 0;
1446     + return vm_iomap_memory(vma, fbdev->fb_phys, fbdev->fb_len);
1447     }
1448    
1449     static void set_global(u_int cmd, struct au1200_lcd_global_regs_t *pdata)
1450     diff --git a/fs/ecryptfs/keystore.c b/fs/ecryptfs/keystore.c
1451     index 7d52806c2119..4725a07f003c 100644
1452     --- a/fs/ecryptfs/keystore.c
1453     +++ b/fs/ecryptfs/keystore.c
1454     @@ -1149,7 +1149,7 @@ decrypt_pki_encrypted_session_key(struct ecryptfs_auth_tok *auth_tok,
1455     struct ecryptfs_msg_ctx *msg_ctx;
1456     struct ecryptfs_message *msg = NULL;
1457     char *auth_tok_sig;
1458     - char *payload;
1459     + char *payload = NULL;
1460     size_t payload_len = 0;
1461     int rc;
1462    
1463     @@ -1203,6 +1203,7 @@ decrypt_pki_encrypted_session_key(struct ecryptfs_auth_tok *auth_tok,
1464     }
1465     out:
1466     kfree(msg);
1467     + kfree(payload);
1468     return rc;
1469     }
1470    
1471     diff --git a/fs/jfs/jfs_inode.c b/fs/jfs/jfs_inode.c
1472     index c1a3e603279c..7f464c513ba0 100644
1473     --- a/fs/jfs/jfs_inode.c
1474     +++ b/fs/jfs/jfs_inode.c
1475     @@ -95,7 +95,7 @@ struct inode *ialloc(struct inode *parent, umode_t mode)
1476    
1477     if (insert_inode_locked(inode) < 0) {
1478     rc = -EINVAL;
1479     - goto fail_unlock;
1480     + goto fail_put;
1481     }
1482    
1483     inode_init_owner(inode, parent, mode);
1484     @@ -156,7 +156,6 @@ struct inode *ialloc(struct inode *parent, umode_t mode)
1485     fail_drop:
1486     dquot_drop(inode);
1487     inode->i_flags |= S_NOQUOTA;
1488     -fail_unlock:
1489     clear_nlink(inode);
1490     unlock_new_inode(inode);
1491     fail_put:
1492     diff --git a/fs/seq_file.c b/fs/seq_file.c
1493     index 774c1eb7f1c9..3dd44db1465e 100644
1494     --- a/fs/seq_file.c
1495     +++ b/fs/seq_file.c
1496     @@ -328,6 +328,8 @@ loff_t seq_lseek(struct file *file, loff_t offset, int whence)
1497     m->read_pos = offset;
1498     retval = file->f_pos = offset;
1499     }
1500     + } else {
1501     + file->f_pos = offset;
1502     }
1503     }
1504     file->f_version = m->version;
1505     diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h
1506     index bf99cd01be20..630356866030 100644
1507     --- a/include/linux/usb_usual.h
1508     +++ b/include/linux/usb_usual.h
1509     @@ -66,7 +66,9 @@
1510     US_FLAG(INITIAL_READ10, 0x00100000) \
1511     /* Initial READ(10) (and others) must be retried */ \
1512     US_FLAG(WRITE_CACHE, 0x00200000) \
1513     - /* Write Cache status is not available */
1514     + /* Write Cache status is not available */ \
1515     + US_FLAG(NEEDS_CAP16, 0x00400000)
1516     + /* cannot handle READ_CAPACITY_10 */
1517    
1518     #define US_FLAG(name, value) US_FL_##name = value ,
1519     enum { US_DO_ALL_FLAGS };
1520     diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
1521     index 090e5331ab7e..cc2e00eac2f1 100644
1522     --- a/include/uapi/drm/drm_mode.h
1523     +++ b/include/uapi/drm/drm_mode.h
1524     @@ -223,6 +223,8 @@ struct drm_mode_get_connector {
1525     __u32 connection;
1526     __u32 mm_width, mm_height; /**< HxW in millimeters */
1527     __u32 subpixel;
1528     +
1529     + __u32 pad;
1530     };
1531    
1532     #define DRM_MODE_PROP_PENDING (1<<0)
1533     diff --git a/kernel/cgroup.c b/kernel/cgroup.c
1534     index 2e9b387971d1..b6b26faf1740 100644
1535     --- a/kernel/cgroup.c
1536     +++ b/kernel/cgroup.c
1537     @@ -1995,7 +1995,7 @@ static int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk,
1538    
1539     /* @tsk either already exited or can't exit until the end */
1540     if (tsk->flags & PF_EXITING)
1541     - continue;
1542     + goto next;
1543    
1544     /* as per above, nr_threads may decrease, but not increase. */
1545     BUG_ON(i >= group_size);
1546     @@ -2003,7 +2003,7 @@ static int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk,
1547     ent.cgrp = task_cgroup_from_root(tsk, root);
1548     /* nothing to do if this task is already in the cgroup */
1549     if (ent.cgrp == cgrp)
1550     - continue;
1551     + goto next;
1552     /*
1553     * saying GFP_ATOMIC has no effect here because we did prealloc
1554     * earlier, but it's good form to communicate our expectations.
1555     @@ -2011,7 +2011,7 @@ static int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk,
1556     retval = flex_array_put(group, i, &ent, GFP_ATOMIC);
1557     BUG_ON(retval != 0);
1558     i++;
1559     -
1560     + next:
1561     if (!threadgroup)
1562     break;
1563     } while_each_thread(leader, tsk);
1564     diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c
1565     index c6d6400ee137..6a23c6c556c3 100644
1566     --- a/kernel/time/clockevents.c
1567     +++ b/kernel/time/clockevents.c
1568     @@ -30,29 +30,64 @@ static RAW_NOTIFIER_HEAD(clockevents_chain);
1569     /* Protection for the above */
1570     static DEFINE_RAW_SPINLOCK(clockevents_lock);
1571    
1572     -/**
1573     - * clockevents_delta2ns - Convert a latch value (device ticks) to nanoseconds
1574     - * @latch: value to convert
1575     - * @evt: pointer to clock event device descriptor
1576     - *
1577     - * Math helper, returns latch value converted to nanoseconds (bound checked)
1578     - */
1579     -u64 clockevent_delta2ns(unsigned long latch, struct clock_event_device *evt)
1580     +static u64 cev_delta2ns(unsigned long latch, struct clock_event_device *evt,
1581     + bool ismax)
1582     {
1583     u64 clc = (u64) latch << evt->shift;
1584     + u64 rnd;
1585    
1586     if (unlikely(!evt->mult)) {
1587     evt->mult = 1;
1588     WARN_ON(1);
1589     }
1590     + rnd = (u64) evt->mult - 1;
1591     +
1592     + /*
1593     + * Upper bound sanity check. If the backwards conversion is
1594     + * not equal latch, we know that the above shift overflowed.
1595     + */
1596     + if ((clc >> evt->shift) != (u64)latch)
1597     + clc = ~0ULL;
1598     +
1599     + /*
1600     + * Scaled math oddities:
1601     + *
1602     + * For mult <= (1 << shift) we can safely add mult - 1 to
1603     + * prevent integer rounding loss. So the backwards conversion
1604     + * from nsec to device ticks will be correct.
1605     + *
1606     + * For mult > (1 << shift), i.e. device frequency is > 1GHz we
1607     + * need to be careful. Adding mult - 1 will result in a value
1608     + * which when converted back to device ticks can be larger
1609     + * than latch by up to (mult - 1) >> shift. For the min_delta
1610     + * calculation we still want to apply this in order to stay
1611     + * above the minimum device ticks limit. For the upper limit
1612     + * we would end up with a latch value larger than the upper
1613     + * limit of the device, so we omit the add to stay below the
1614     + * device upper boundary.
1615     + *
1616     + * Also omit the add if it would overflow the u64 boundary.
1617     + */
1618     + if ((~0ULL - clc > rnd) &&
1619     + (!ismax || evt->mult <= (1U << evt->shift)))
1620     + clc += rnd;
1621    
1622     do_div(clc, evt->mult);
1623     - if (clc < 1000)
1624     - clc = 1000;
1625     - if (clc > KTIME_MAX)
1626     - clc = KTIME_MAX;
1627    
1628     - return clc;
1629     + /* Deltas less than 1usec are pointless noise */
1630     + return clc > 1000 ? clc : 1000;
1631     +}
1632     +
1633     +/**
1634     + * clockevents_delta2ns - Convert a latch value (device ticks) to nanoseconds
1635     + * @latch: value to convert
1636     + * @evt: pointer to clock event device descriptor
1637     + *
1638     + * Math helper, returns latch value converted to nanoseconds (bound checked)
1639     + */
1640     +u64 clockevent_delta2ns(unsigned long latch, struct clock_event_device *evt)
1641     +{
1642     + return cev_delta2ns(latch, evt, false);
1643     }
1644     EXPORT_SYMBOL_GPL(clockevent_delta2ns);
1645    
1646     @@ -317,8 +352,8 @@ void clockevents_config(struct clock_event_device *dev, u32 freq)
1647     sec = 600;
1648    
1649     clockevents_calc_mult_shift(dev, freq, sec);
1650     - dev->min_delta_ns = clockevent_delta2ns(dev->min_delta_ticks, dev);
1651     - dev->max_delta_ns = clockevent_delta2ns(dev->max_delta_ticks, dev);
1652     + dev->min_delta_ns = cev_delta2ns(dev->min_delta_ticks, dev, false);
1653     + dev->max_delta_ns = cev_delta2ns(dev->max_delta_ticks, dev, true);
1654     }
1655    
1656     /**
1657     diff --git a/lib/scatterlist.c b/lib/scatterlist.c
1658     index a1cf8cae60e7..3e7df38067ae 100644
1659     --- a/lib/scatterlist.c
1660     +++ b/lib/scatterlist.c
1661     @@ -529,7 +529,8 @@ void sg_miter_stop(struct sg_mapping_iter *miter)
1662     miter->__offset += miter->consumed;
1663     miter->__remaining -= miter->consumed;
1664    
1665     - if (miter->__flags & SG_MITER_TO_SG)
1666     + if ((miter->__flags & SG_MITER_TO_SG) &&
1667     + !PageSlab(miter->page))
1668     flush_kernel_dcache_page(miter->page);
1669    
1670     if (miter->__flags & SG_MITER_ATOMIC) {
1671     diff --git a/mm/huge_memory.c b/mm/huge_memory.c
1672     index 0164b09c1e99..c403a74e4bee 100644
1673     --- a/mm/huge_memory.c
1674     +++ b/mm/huge_memory.c
1675     @@ -1288,64 +1288,90 @@ out:
1676     int do_huge_pmd_numa_page(struct mm_struct *mm, struct vm_area_struct *vma,
1677     unsigned long addr, pmd_t pmd, pmd_t *pmdp)
1678     {
1679     + struct anon_vma *anon_vma = NULL;
1680     struct page *page;
1681     unsigned long haddr = addr & HPAGE_PMD_MASK;
1682     + int page_nid = -1, this_nid = numa_node_id();
1683     int target_nid;
1684     - int current_nid = -1;
1685     - bool migrated;
1686     + bool page_locked;
1687     + bool migrated = false;
1688    
1689     spin_lock(&mm->page_table_lock);
1690     if (unlikely(!pmd_same(pmd, *pmdp)))
1691     goto out_unlock;
1692    
1693     page = pmd_page(pmd);
1694     - get_page(page);
1695     - current_nid = page_to_nid(page);
1696     + page_nid = page_to_nid(page);
1697     count_vm_numa_event(NUMA_HINT_FAULTS);
1698     - if (current_nid == numa_node_id())
1699     + if (page_nid == this_nid)
1700     count_vm_numa_event(NUMA_HINT_FAULTS_LOCAL);
1701    
1702     + /*
1703     + * Acquire the page lock to serialise THP migrations but avoid dropping
1704     + * page_table_lock if at all possible
1705     + */
1706     + page_locked = trylock_page(page);
1707     target_nid = mpol_misplaced(page, vma, haddr);
1708     if (target_nid == -1) {
1709     - put_page(page);
1710     - goto clear_pmdnuma;
1711     + /* If the page was locked, there are no parallel migrations */
1712     + if (page_locked)
1713     + goto clear_pmdnuma;
1714     +
1715     + /*
1716     + * Otherwise wait for potential migrations and retry. We do
1717     + * relock and check_same as the page may no longer be mapped.
1718     + * As the fault is being retried, do not account for it.
1719     + */
1720     + spin_unlock(&mm->page_table_lock);
1721     + wait_on_page_locked(page);
1722     + page_nid = -1;
1723     + goto out;
1724     }
1725    
1726     - /* Acquire the page lock to serialise THP migrations */
1727     + /* Page is misplaced, serialise migrations and parallel THP splits */
1728     + get_page(page);
1729     spin_unlock(&mm->page_table_lock);
1730     - lock_page(page);
1731     + if (!page_locked)
1732     + lock_page(page);
1733     + anon_vma = page_lock_anon_vma_read(page);
1734    
1735     /* Confirm the PTE did not while locked */
1736     spin_lock(&mm->page_table_lock);
1737     if (unlikely(!pmd_same(pmd, *pmdp))) {
1738     unlock_page(page);
1739     put_page(page);
1740     + page_nid = -1;
1741     goto out_unlock;
1742     }
1743     - spin_unlock(&mm->page_table_lock);
1744    
1745     - /* Migrate the THP to the requested node */
1746     + /*
1747     + * Migrate the THP to the requested node, returns with page unlocked
1748     + * and pmd_numa cleared.
1749     + */
1750     + spin_unlock(&mm->page_table_lock);
1751     migrated = migrate_misplaced_transhuge_page(mm, vma,
1752     pmdp, pmd, addr, page, target_nid);
1753     - if (!migrated)
1754     - goto check_same;
1755     -
1756     - task_numa_fault(target_nid, HPAGE_PMD_NR, true);
1757     - return 0;
1758     + if (migrated)
1759     + page_nid = target_nid;
1760    
1761     -check_same:
1762     - spin_lock(&mm->page_table_lock);
1763     - if (unlikely(!pmd_same(pmd, *pmdp)))
1764     - goto out_unlock;
1765     + goto out;
1766     clear_pmdnuma:
1767     + BUG_ON(!PageLocked(page));
1768     pmd = pmd_mknonnuma(pmd);
1769     set_pmd_at(mm, haddr, pmdp, pmd);
1770     VM_BUG_ON(pmd_numa(*pmdp));
1771     update_mmu_cache_pmd(vma, addr, pmdp);
1772     + unlock_page(page);
1773     out_unlock:
1774     spin_unlock(&mm->page_table_lock);
1775     - if (current_nid != -1)
1776     - task_numa_fault(current_nid, HPAGE_PMD_NR, false);
1777     +
1778     +out:
1779     + if (anon_vma)
1780     + page_unlock_anon_vma_read(anon_vma);
1781     +
1782     + if (page_nid != -1)
1783     + task_numa_fault(page_nid, HPAGE_PMD_NR, migrated);
1784     +
1785     return 0;
1786     }
1787    
1788     diff --git a/mm/memory.c b/mm/memory.c
1789     index 5a35443c01ad..4b60011907d7 100644
1790     --- a/mm/memory.c
1791     +++ b/mm/memory.c
1792     @@ -3525,12 +3525,12 @@ static int do_nonlinear_fault(struct mm_struct *mm, struct vm_area_struct *vma,
1793     }
1794    
1795     int numa_migrate_prep(struct page *page, struct vm_area_struct *vma,
1796     - unsigned long addr, int current_nid)
1797     + unsigned long addr, int page_nid)
1798     {
1799     get_page(page);
1800    
1801     count_vm_numa_event(NUMA_HINT_FAULTS);
1802     - if (current_nid == numa_node_id())
1803     + if (page_nid == numa_node_id())
1804     count_vm_numa_event(NUMA_HINT_FAULTS_LOCAL);
1805    
1806     return mpol_misplaced(page, vma, addr);
1807     @@ -3541,7 +3541,7 @@ int do_numa_page(struct mm_struct *mm, struct vm_area_struct *vma,
1808     {
1809     struct page *page = NULL;
1810     spinlock_t *ptl;
1811     - int current_nid = -1;
1812     + int page_nid = -1;
1813     int target_nid;
1814     bool migrated = false;
1815    
1816     @@ -3571,15 +3571,10 @@ int do_numa_page(struct mm_struct *mm, struct vm_area_struct *vma,
1817     return 0;
1818     }
1819    
1820     - current_nid = page_to_nid(page);
1821     - target_nid = numa_migrate_prep(page, vma, addr, current_nid);
1822     + page_nid = page_to_nid(page);
1823     + target_nid = numa_migrate_prep(page, vma, addr, page_nid);
1824     pte_unmap_unlock(ptep, ptl);
1825     if (target_nid == -1) {
1826     - /*
1827     - * Account for the fault against the current node if it not
1828     - * being replaced regardless of where the page is located.
1829     - */
1830     - current_nid = numa_node_id();
1831     put_page(page);
1832     goto out;
1833     }
1834     @@ -3587,11 +3582,11 @@ int do_numa_page(struct mm_struct *mm, struct vm_area_struct *vma,
1835     /* Migrate to the requested node */
1836     migrated = migrate_misplaced_page(page, target_nid);
1837     if (migrated)
1838     - current_nid = target_nid;
1839     + page_nid = target_nid;
1840    
1841     out:
1842     - if (current_nid != -1)
1843     - task_numa_fault(current_nid, 1, migrated);
1844     + if (page_nid != -1)
1845     + task_numa_fault(page_nid, 1, migrated);
1846     return 0;
1847     }
1848    
1849     @@ -3606,7 +3601,6 @@ static int do_pmd_numa_page(struct mm_struct *mm, struct vm_area_struct *vma,
1850     unsigned long offset;
1851     spinlock_t *ptl;
1852     bool numa = false;
1853     - int local_nid = numa_node_id();
1854    
1855     spin_lock(&mm->page_table_lock);
1856     pmd = *pmdp;
1857     @@ -3629,9 +3623,10 @@ static int do_pmd_numa_page(struct mm_struct *mm, struct vm_area_struct *vma,
1858     for (addr = _addr + offset; addr < _addr + PMD_SIZE; pte++, addr += PAGE_SIZE) {
1859     pte_t pteval = *pte;
1860     struct page *page;
1861     - int curr_nid = local_nid;
1862     + int page_nid = -1;
1863     int target_nid;
1864     - bool migrated;
1865     + bool migrated = false;
1866     +
1867     if (!pte_present(pteval))
1868     continue;
1869     if (!pte_numa(pteval))
1870     @@ -3653,25 +3648,19 @@ static int do_pmd_numa_page(struct mm_struct *mm, struct vm_area_struct *vma,
1871     if (unlikely(page_mapcount(page) != 1))
1872     continue;
1873    
1874     - /*
1875     - * Note that the NUMA fault is later accounted to either
1876     - * the node that is currently running or where the page is
1877     - * migrated to.
1878     - */
1879     - curr_nid = local_nid;
1880     - target_nid = numa_migrate_prep(page, vma, addr,
1881     - page_to_nid(page));
1882     - if (target_nid == -1) {
1883     + page_nid = page_to_nid(page);
1884     + target_nid = numa_migrate_prep(page, vma, addr, page_nid);
1885     + pte_unmap_unlock(pte, ptl);
1886     + if (target_nid != -1) {
1887     + migrated = migrate_misplaced_page(page, target_nid);
1888     + if (migrated)
1889     + page_nid = target_nid;
1890     + } else {
1891     put_page(page);
1892     - continue;
1893     }
1894    
1895     - /* Migrate to the requested node */
1896     - pte_unmap_unlock(pte, ptl);
1897     - migrated = migrate_misplaced_page(page, target_nid);
1898     - if (migrated)
1899     - curr_nid = target_nid;
1900     - task_numa_fault(curr_nid, 1, migrated);
1901     + if (page_nid != -1)
1902     + task_numa_fault(page_nid, 1, migrated);
1903    
1904     pte = pte_offset_map_lock(mm, pmdp, addr, &ptl);
1905     }
1906     @@ -4074,6 +4063,7 @@ int generic_access_phys(struct vm_area_struct *vma, unsigned long addr,
1907    
1908     return len;
1909     }
1910     +EXPORT_SYMBOL_GPL(generic_access_phys);
1911     #endif
1912    
1913     /*
1914     diff --git a/mm/migrate.c b/mm/migrate.c
1915     index 25ca7caf9092..bf436c15f055 100644
1916     --- a/mm/migrate.c
1917     +++ b/mm/migrate.c
1918     @@ -1710,12 +1710,12 @@ int migrate_misplaced_transhuge_page(struct mm_struct *mm,
1919     unlock_page(new_page);
1920     put_page(new_page); /* Free it */
1921    
1922     - unlock_page(page);
1923     + /* Retake the callers reference and putback on LRU */
1924     + get_page(page);
1925     putback_lru_page(page);
1926     -
1927     - count_vm_events(PGMIGRATE_FAIL, HPAGE_PMD_NR);
1928     - isolated = 0;
1929     - goto out;
1930     + mod_zone_page_state(page_zone(page),
1931     + NR_ISOLATED_ANON + page_lru, -HPAGE_PMD_NR);
1932     + goto out_fail;
1933     }
1934    
1935     /*
1936     @@ -1732,9 +1732,9 @@ int migrate_misplaced_transhuge_page(struct mm_struct *mm,
1937     entry = maybe_pmd_mkwrite(pmd_mkdirty(entry), vma);
1938     entry = pmd_mkhuge(entry);
1939    
1940     - page_add_new_anon_rmap(new_page, vma, haddr);
1941     -
1942     + pmdp_clear_flush(vma, haddr, pmd);
1943     set_pmd_at(mm, haddr, pmd, entry);
1944     + page_add_new_anon_rmap(new_page, vma, haddr);
1945     update_mmu_cache_pmd(vma, address, &entry);
1946     page_remove_rmap(page);
1947     /*
1948     @@ -1753,7 +1753,6 @@ int migrate_misplaced_transhuge_page(struct mm_struct *mm,
1949     count_vm_events(PGMIGRATE_SUCCESS, HPAGE_PMD_NR);
1950     count_vm_numa_events(NUMA_PAGE_MIGRATE, HPAGE_PMD_NR);
1951    
1952     -out:
1953     mod_zone_page_state(page_zone(page),
1954     NR_ISOLATED_ANON + page_lru,
1955     -HPAGE_PMD_NR);
1956     @@ -1762,6 +1761,10 @@ out:
1957     out_fail:
1958     count_vm_events(PGMIGRATE_FAIL, HPAGE_PMD_NR);
1959     out_dropref:
1960     + entry = pmd_mknonnuma(entry);
1961     + set_pmd_at(mm, haddr, pmd, entry);
1962     + update_mmu_cache_pmd(vma, address, &entry);
1963     +
1964     unlock_page(page);
1965     put_page(page);
1966     return 0;
1967     diff --git a/mm/mprotect.c b/mm/mprotect.c
1968     index 94722a4d6b43..2bbb648ea73f 100644
1969     --- a/mm/mprotect.c
1970     +++ b/mm/mprotect.c
1971     @@ -145,7 +145,7 @@ static inline unsigned long change_pmd_range(struct vm_area_struct *vma,
1972     split_huge_page_pmd(vma, addr, pmd);
1973     else if (change_huge_pmd(vma, pmd, addr, newprot,
1974     prot_numa)) {
1975     - pages += HPAGE_PMD_NR;
1976     + pages++;
1977     continue;
1978     }
1979     /* fall through */
1980     diff --git a/mm/pagewalk.c b/mm/pagewalk.c
1981     index 5da2cbcfdbb5..2beeabf502c5 100644
1982     --- a/mm/pagewalk.c
1983     +++ b/mm/pagewalk.c
1984     @@ -242,7 +242,7 @@ int walk_page_range(unsigned long addr, unsigned long end,
1985     if (err)
1986     break;
1987     pgd++;
1988     - } while (addr = next, addr != end);
1989     + } while (addr = next, addr < end);
1990    
1991     return err;
1992     }
1993     diff --git a/mm/vmalloc.c b/mm/vmalloc.c
1994     index d365724feb05..d4565606cc96 100644
1995     --- a/mm/vmalloc.c
1996     +++ b/mm/vmalloc.c
1997     @@ -388,12 +388,12 @@ nocache:
1998     addr = ALIGN(first->va_end, align);
1999     if (addr < vstart)
2000     goto nocache;
2001     - if (addr + size - 1 < addr)
2002     + if (addr + size < addr)
2003     goto overflow;
2004    
2005     } else {
2006     addr = ALIGN(vstart, align);
2007     - if (addr + size - 1 < addr)
2008     + if (addr + size < addr)
2009     goto overflow;
2010    
2011     n = vmap_area_root.rb_node;
2012     @@ -420,7 +420,7 @@ nocache:
2013     if (addr + cached_hole_size < first->va_start)
2014     cached_hole_size = first->va_start - addr;
2015     addr = ALIGN(first->va_end, align);
2016     - if (addr + size - 1 < addr)
2017     + if (addr + size < addr)
2018     goto overflow;
2019    
2020     if (list_is_last(&first->list, &vmap_area_list))
2021     diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
2022     index ae36f8e11ae4..5ab17b82605d 100644
2023     --- a/net/mac80211/cfg.c
2024     +++ b/net/mac80211/cfg.c
2025     @@ -3315,7 +3315,7 @@ static int ieee80211_probe_client(struct wiphy *wiphy, struct net_device *dev,
2026     return -EINVAL;
2027     }
2028     band = chanctx_conf->def.chan->band;
2029     - sta = sta_info_get(sdata, peer);
2030     + sta = sta_info_get_bss(sdata, peer);
2031     if (sta) {
2032     qos = test_sta_flag(sta, WLAN_STA_WME);
2033     } else {
2034     diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
2035     index 9ca8e3278cc0..92ef04c72c51 100644
2036     --- a/net/mac80211/ieee80211_i.h
2037     +++ b/net/mac80211/ieee80211_i.h
2038     @@ -842,6 +842,8 @@ struct tpt_led_trigger {
2039     * that the scan completed.
2040     * @SCAN_ABORTED: Set for our scan work function when the driver reported
2041     * a scan complete for an aborted scan.
2042     + * @SCAN_HW_CANCELLED: Set for our scan work function when the scan is being
2043     + * cancelled.
2044     */
2045     enum {
2046     SCAN_SW_SCANNING,
2047     @@ -849,6 +851,7 @@ enum {
2048     SCAN_ONCHANNEL_SCANNING,
2049     SCAN_COMPLETED,
2050     SCAN_ABORTED,
2051     + SCAN_HW_CANCELLED,
2052     };
2053    
2054     /**
2055     diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
2056     index 83f6d29202aa..ec09bcba9bae 100644
2057     --- a/net/mac80211/rx.c
2058     +++ b/net/mac80211/rx.c
2059     @@ -3002,6 +3002,9 @@ static int prepare_for_handlers(struct ieee80211_rx_data *rx,
2060     case NL80211_IFTYPE_ADHOC:
2061     if (!bssid)
2062     return 0;
2063     + if (ether_addr_equal(sdata->vif.addr, hdr->addr2) ||
2064     + ether_addr_equal(sdata->u.ibss.bssid, hdr->addr2))
2065     + return 0;
2066     if (ieee80211_is_beacon(hdr->frame_control)) {
2067     return 1;
2068     } else if (!ieee80211_bssid_match(bssid, sdata->u.ibss.bssid)) {
2069     diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
2070     index 99b103921a4b..eb03337b6545 100644
2071     --- a/net/mac80211/scan.c
2072     +++ b/net/mac80211/scan.c
2073     @@ -202,6 +202,9 @@ static bool ieee80211_prep_hw_scan(struct ieee80211_local *local)
2074     enum ieee80211_band band;
2075     int i, ielen, n_chans;
2076    
2077     + if (test_bit(SCAN_HW_CANCELLED, &local->scanning))
2078     + return false;
2079     +
2080     do {
2081     if (local->hw_scan_band == IEEE80211_NUM_BANDS)
2082     return false;
2083     @@ -878,7 +881,23 @@ void ieee80211_scan_cancel(struct ieee80211_local *local)
2084     if (!local->scan_req)
2085     goto out;
2086    
2087     + /*
2088     + * We have a scan running and the driver already reported completion,
2089     + * but the worker hasn't run yet or is stuck on the mutex - mark it as
2090     + * cancelled.
2091     + */
2092     + if (test_bit(SCAN_HW_SCANNING, &local->scanning) &&
2093     + test_bit(SCAN_COMPLETED, &local->scanning)) {
2094     + set_bit(SCAN_HW_CANCELLED, &local->scanning);
2095     + goto out;
2096     + }
2097     +
2098     if (test_bit(SCAN_HW_SCANNING, &local->scanning)) {
2099     + /*
2100     + * Make sure that __ieee80211_scan_completed doesn't trigger a
2101     + * scan on another band.
2102     + */
2103     + set_bit(SCAN_HW_CANCELLED, &local->scanning);
2104     if (local->ops->cancel_hw_scan)
2105     drv_cancel_hw_scan(local,
2106     rcu_dereference_protected(local->scan_sdata,
2107     diff --git a/net/mac80211/status.c b/net/mac80211/status.c
2108     index 43439203f4e4..9e78206bd9bb 100644
2109     --- a/net/mac80211/status.c
2110     +++ b/net/mac80211/status.c
2111     @@ -180,6 +180,9 @@ static void ieee80211_frame_acked(struct sta_info *sta, struct sk_buff *skb)
2112     struct ieee80211_local *local = sta->local;
2113     struct ieee80211_sub_if_data *sdata = sta->sdata;
2114    
2115     + if (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS)
2116     + sta->last_rx = jiffies;
2117     +
2118     if (ieee80211_is_data_qos(mgmt->frame_control)) {
2119     struct ieee80211_hdr *hdr = (void *) skb->data;
2120     u8 *qc = ieee80211_get_qos_ctl(hdr);
2121     diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
2122     index 9972e07a2f96..e9d18c30071f 100644
2123     --- a/net/mac80211/tx.c
2124     +++ b/net/mac80211/tx.c
2125     @@ -1100,7 +1100,8 @@ ieee80211_tx_prepare(struct ieee80211_sub_if_data *sdata,
2126     tx->sta = rcu_dereference(sdata->u.vlan.sta);
2127     if (!tx->sta && sdata->dev->ieee80211_ptr->use_4addr)
2128     return TX_DROP;
2129     - } else if (info->flags & IEEE80211_TX_CTL_INJECTED ||
2130     + } else if (info->flags & (IEEE80211_TX_CTL_INJECTED |
2131     + IEEE80211_TX_INTFL_NL80211_FRAME_TX) ||
2132     tx->sdata->control_port_protocol == tx->skb->protocol) {
2133     tx->sta = sta_info_get_bss(sdata, hdr->addr1);
2134     }
2135     diff --git a/net/mac80211/util.c b/net/mac80211/util.c
2136     index 72e6292955bb..5db8eb5d56cf 100644
2137     --- a/net/mac80211/util.c
2138     +++ b/net/mac80211/util.c
2139     @@ -2174,6 +2174,10 @@ u64 ieee80211_calculate_rx_timestamp(struct ieee80211_local *local,
2140     }
2141    
2142     rate = cfg80211_calculate_bitrate(&ri);
2143     + if (WARN_ONCE(!rate,
2144     + "Invalid bitrate: flags=0x%x, idx=%d, vht_nss=%d\n",
2145     + status->flag, status->rate_idx, status->vht_nss))
2146     + return 0;
2147    
2148     /* rewind from end of MPDU */
2149     if (status->flag & RX_FLAG_MACTIME_END)
2150     diff --git a/net/wireless/ibss.c b/net/wireless/ibss.c
2151     index d80e47194d49..e62c1ad4e4c9 100644
2152     --- a/net/wireless/ibss.c
2153     +++ b/net/wireless/ibss.c
2154     @@ -269,6 +269,8 @@ int cfg80211_ibss_wext_join(struct cfg80211_registered_device *rdev,
2155     if (chan->flags & IEEE80211_CHAN_DISABLED)
2156     continue;
2157     wdev->wext.ibss.chandef.chan = chan;
2158     + wdev->wext.ibss.chandef.center_freq1 =
2159     + chan->center_freq;
2160     break;
2161     }
2162    
2163     @@ -353,6 +355,7 @@ int cfg80211_ibss_wext_siwfreq(struct net_device *dev,
2164     if (chan) {
2165     wdev->wext.ibss.chandef.chan = chan;
2166     wdev->wext.ibss.chandef.width = NL80211_CHAN_WIDTH_20_NOHT;
2167     + wdev->wext.ibss.chandef.center_freq1 = freq;
2168     wdev->wext.ibss.channel_fixed = true;
2169     } else {
2170     /* cfg80211_ibss_wext_join will pick one if needed */
2171     diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
2172     index 487ac6f37ca2..9a11f9f799f4 100644
2173     --- a/scripts/kallsyms.c
2174     +++ b/scripts/kallsyms.c
2175     @@ -55,6 +55,7 @@ static struct sym_entry *table;
2176     static unsigned int table_size, table_cnt;
2177     static int all_symbols = 0;
2178     static char symbol_prefix_char = '\0';
2179     +static unsigned long long kernel_start_addr = 0;
2180    
2181     int token_profit[0x10000];
2182    
2183     @@ -65,7 +66,10 @@ unsigned char best_table_len[256];
2184    
2185     static void usage(void)
2186     {
2187     - fprintf(stderr, "Usage: kallsyms [--all-symbols] [--symbol-prefix=<prefix char>] < in.map > out.S\n");
2188     + fprintf(stderr, "Usage: kallsyms [--all-symbols] "
2189     + "[--symbol-prefix=<prefix char>] "
2190     + "[--page-offset=<CONFIG_PAGE_OFFSET>] "
2191     + "< in.map > out.S\n");
2192     exit(1);
2193     }
2194    
2195     @@ -194,6 +198,9 @@ static int symbol_valid(struct sym_entry *s)
2196     int i;
2197     int offset = 1;
2198    
2199     + if (s->addr < kernel_start_addr)
2200     + return 0;
2201     +
2202     /* skip prefix char */
2203     if (symbol_prefix_char && *(s->sym + 1) == symbol_prefix_char)
2204     offset++;
2205     @@ -646,6 +653,9 @@ int main(int argc, char **argv)
2206     if ((*p == '"' && *(p+2) == '"') || (*p == '\'' && *(p+2) == '\''))
2207     p++;
2208     symbol_prefix_char = *p;
2209     + } else if (strncmp(argv[i], "--page-offset=", 14) == 0) {
2210     + const char *p = &argv[i][14];
2211     + kernel_start_addr = strtoull(p, NULL, 16);
2212     } else
2213     usage();
2214     }
2215     diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
2216     index 014994936b1c..32b10f53d0b4 100644
2217     --- a/scripts/link-vmlinux.sh
2218     +++ b/scripts/link-vmlinux.sh
2219     @@ -82,6 +82,8 @@ kallsyms()
2220     kallsymopt="${kallsymopt} --all-symbols"
2221     fi
2222    
2223     + kallsymopt="${kallsymopt} --page-offset=$CONFIG_PAGE_OFFSET"
2224     +
2225     local aflags="${KBUILD_AFLAGS} ${KBUILD_AFLAGS_KERNEL} \
2226     ${NOSTDINC_FLAGS} ${LINUXINCLUDE} ${KBUILD_CPPFLAGS}"
2227    
2228     diff --git a/sound/core/pcm.c b/sound/core/pcm.c
2229     index 17f45e8aa89c..e1e9e0c999fe 100644
2230     --- a/sound/core/pcm.c
2231     +++ b/sound/core/pcm.c
2232     @@ -49,6 +49,8 @@ static struct snd_pcm *snd_pcm_get(struct snd_card *card, int device)
2233     struct snd_pcm *pcm;
2234    
2235     list_for_each_entry(pcm, &snd_pcm_devices, list) {
2236     + if (pcm->internal)
2237     + continue;
2238     if (pcm->card == card && pcm->device == device)
2239     return pcm;
2240     }
2241     @@ -60,6 +62,8 @@ static int snd_pcm_next(struct snd_card *card, int device)
2242     struct snd_pcm *pcm;
2243    
2244     list_for_each_entry(pcm, &snd_pcm_devices, list) {
2245     + if (pcm->internal)
2246     + continue;
2247     if (pcm->card == card && pcm->device > device)
2248     return pcm->device;
2249     else if (pcm->card->number > card->number)
2250     diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
2251     index 55108b5fb291..31461ba32d3c 100644
2252     --- a/sound/pci/hda/hda_codec.c
2253     +++ b/sound/pci/hda/hda_codec.c
2254     @@ -4789,8 +4789,8 @@ static void hda_power_work(struct work_struct *work)
2255     spin_unlock(&codec->power_lock);
2256    
2257     state = hda_call_codec_suspend(codec, true);
2258     - codec->pm_down_notified = 0;
2259     - if (!bus->power_keep_link_on && (state & AC_PWRST_CLK_STOP_OK)) {
2260     + if (!codec->pm_down_notified &&
2261     + !bus->power_keep_link_on && (state & AC_PWRST_CLK_STOP_OK)) {
2262     codec->pm_down_notified = 1;
2263     hda_call_pm_notify(bus, false);
2264     }
2265     diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
2266     index 2519f9d03c0f..d0cc796f778a 100644
2267     --- a/sound/pci/hda/hda_generic.c
2268     +++ b/sound/pci/hda/hda_generic.c
2269     @@ -4383,9 +4383,11 @@ int snd_hda_gen_build_controls(struct hda_codec *codec)
2270     true, &spec->vmaster_mute.sw_kctl);
2271     if (err < 0)
2272     return err;
2273     - if (spec->vmaster_mute.hook)
2274     + if (spec->vmaster_mute.hook) {
2275     snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute,
2276     spec->vmaster_mute_enum);
2277     + snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
2278     + }
2279     }
2280    
2281     free_kctls(spec); /* no longer needed */
2282     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
2283     index 21b6649c128e..4496e0ab693d 100644
2284     --- a/sound/pci/hda/patch_realtek.c
2285     +++ b/sound/pci/hda/patch_realtek.c
2286     @@ -4253,6 +4253,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
2287     SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
2288     SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
2289     SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_ASUS_MODE4),
2290     + SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_ASUS_MODE4),
2291     SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT),
2292     SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_FIXUP_ASUS_MODE2),
2293     SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
2294     diff --git a/sound/soc/codecs/wm_hubs.c b/sound/soc/codecs/wm_hubs.c
2295     index f5d81b948759..7a0466eb7ede 100644
2296     --- a/sound/soc/codecs/wm_hubs.c
2297     +++ b/sound/soc/codecs/wm_hubs.c
2298     @@ -530,6 +530,7 @@ static int hp_supply_event(struct snd_soc_dapm_widget *w,
2299     hubs->hp_startup_mode);
2300     break;
2301     }
2302     + break;
2303    
2304     case SND_SOC_DAPM_PRE_PMD:
2305     snd_soc_update_bits(codec, WM8993_CHARGE_PUMP_1,
2306     diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
2307     index 360638362e98..c2ecb4e01597 100644
2308     --- a/sound/soc/soc-dapm.c
2309     +++ b/sound/soc/soc-dapm.c
2310     @@ -1797,7 +1797,7 @@ static ssize_t dapm_widget_power_read_file(struct file *file,
2311     w->active ? "active" : "inactive");
2312    
2313     list_for_each_entry(p, &w->sources, list_sink) {
2314     - if (p->connected && !p->connected(w, p->sink))
2315     + if (p->connected && !p->connected(w, p->source))
2316     continue;
2317    
2318     if (p->connect)