Annotation of /trunk/kernel-lts/patches-3.10/0118-3.10.19-all-fixes.patch
Parent Directory | Revision Log
Revision 2346 -
(hide annotations)
(download)
Mon Dec 16 10:04:53 2013 UTC (10 years, 9 months ago) by niro
Original Path: trunk/kernel-alx/patches-3.10/0118-3.10.19-all-fixes.patch
File size: 85994 byte(s)
Mon Dec 16 10:04:53 2013 UTC (10 years, 9 months ago) by niro
Original Path: trunk/kernel-alx/patches-3.10/0118-3.10.19-all-fixes.patch
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(®s->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, ®s->mcr); | ||
413 | |||
414 | @@ -792,6 +794,10 @@ static int flexcan_chip_start(struct net_device *dev) | ||
415 | ®s->cantxfg[i].can_ctrl); | ||
416 | } | ||
417 | |||
418 | + /* Abort any pending TX, mark Mailbox as INACTIVE */ | ||
419 | + flexcan_write(FLEXCAN_MB_CNT_CODE(0x4), | ||
420 | + ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl); | ||
421 | + | ||
422 | /* acceptance mask/acceptance code (accept everything) */ | ||
423 | flexcan_write(0x0, ®s->rxgmask); | ||
424 | flexcan_write(0x0, ®s->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) |