Magellan Linux

Contents of /trunk/kernel-magellan/patches-4.14/0100-4.14.1-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3027 - (show annotations) (download)
Tue Nov 28 13:16:13 2017 UTC (6 years, 5 months ago) by niro
File size: 46365 byte(s)
-linux-4.14.1
1 diff --git a/Makefile b/Makefile
2 index ccd981892ef2..01f9df1af256 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,9 +1,9 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 4
8 PATCHLEVEL = 14
9 -SUBLEVEL = 0
10 +SUBLEVEL = 1
11 EXTRAVERSION =
12 -NAME = Fearless Coyote
13 +NAME = Petit Gorille
14
15 # *DOCUMENTATION*
16 # To see a list of typical targets execute "make help"
17 diff --git a/arch/sparc/include/asm/cmpxchg_32.h b/arch/sparc/include/asm/cmpxchg_32.h
18 index 3e3823db303e..c73b5a3ab7b9 100644
19 --- a/arch/sparc/include/asm/cmpxchg_32.h
20 +++ b/arch/sparc/include/asm/cmpxchg_32.h
21 @@ -63,6 +63,9 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new_, int size)
22 (unsigned long)_n_, sizeof(*(ptr))); \
23 })
24
25 +u64 __cmpxchg_u64(u64 *ptr, u64 old, u64 new);
26 +#define cmpxchg64(ptr, old, new) __cmpxchg_u64(ptr, old, new)
27 +
28 #include <asm-generic/cmpxchg-local.h>
29
30 /*
31 diff --git a/arch/sparc/include/asm/mmu_context_64.h b/arch/sparc/include/asm/mmu_context_64.h
32 index e25d25b0a34b..b361702ef52a 100644
33 --- a/arch/sparc/include/asm/mmu_context_64.h
34 +++ b/arch/sparc/include/asm/mmu_context_64.h
35 @@ -8,9 +8,11 @@
36
37 #include <linux/spinlock.h>
38 #include <linux/mm_types.h>
39 +#include <linux/smp.h>
40
41 #include <asm/spitfire.h>
42 #include <asm-generic/mm_hooks.h>
43 +#include <asm/percpu.h>
44
45 static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
46 {
47 diff --git a/arch/sparc/include/asm/tsb.h b/arch/sparc/include/asm/tsb.h
48 index 25b6abdb3908..522a677e050d 100644
49 --- a/arch/sparc/include/asm/tsb.h
50 +++ b/arch/sparc/include/asm/tsb.h
51 @@ -217,7 +217,7 @@ extern struct tsb_phys_patch_entry __tsb_phys_patch, __tsb_phys_patch_end;
52 sllx REG2, 32, REG2; \
53 andcc REG1, REG2, %g0; \
54 be,pt %xcc, 700f; \
55 - sethi %hi(0x1ffc0000), REG2; \
56 + sethi %hi(0xffe00000), REG2; \
57 sllx REG2, 1, REG2; \
58 brgez,pn REG1, FAIL_LABEL; \
59 andn REG1, REG2, REG1; \
60 diff --git a/arch/sparc/lib/atomic32.c b/arch/sparc/lib/atomic32.c
61 index 5010df497387..465a901a0ada 100644
62 --- a/arch/sparc/lib/atomic32.c
63 +++ b/arch/sparc/lib/atomic32.c
64 @@ -173,6 +173,20 @@ unsigned long __cmpxchg_u32(volatile u32 *ptr, u32 old, u32 new)
65 }
66 EXPORT_SYMBOL(__cmpxchg_u32);
67
68 +u64 __cmpxchg_u64(u64 *ptr, u64 old, u64 new)
69 +{
70 + unsigned long flags;
71 + u64 prev;
72 +
73 + spin_lock_irqsave(ATOMIC_HASH(ptr), flags);
74 + if ((prev = *ptr) == old)
75 + *ptr = new;
76 + spin_unlock_irqrestore(ATOMIC_HASH(ptr), flags);
77 +
78 + return prev;
79 +}
80 +EXPORT_SYMBOL(__cmpxchg_u64);
81 +
82 unsigned long __xchg_u32(volatile u32 *ptr, u32 new)
83 {
84 unsigned long flags;
85 diff --git a/arch/x86/kernel/cpu/mcheck/mce-severity.c b/arch/x86/kernel/cpu/mcheck/mce-severity.c
86 index 87cc9ab7a13c..4b8187639c2d 100644
87 --- a/arch/x86/kernel/cpu/mcheck/mce-severity.c
88 +++ b/arch/x86/kernel/cpu/mcheck/mce-severity.c
89 @@ -245,6 +245,9 @@ static int mce_severity_amd(struct mce *m, int tolerant, char **msg, bool is_exc
90
91 if (m->status & MCI_STATUS_UC) {
92
93 + if (ctx == IN_KERNEL)
94 + return MCE_PANIC_SEVERITY;
95 +
96 /*
97 * On older systems where overflow_recov flag is not present, we
98 * should simply panic if an error overflow occurs. If
99 @@ -255,10 +258,6 @@ static int mce_severity_amd(struct mce *m, int tolerant, char **msg, bool is_exc
100 if (mce_flags.smca)
101 return mce_severity_amd_smca(m, ctx);
102
103 - /* software can try to contain */
104 - if (!(m->mcgstatus & MCG_STATUS_RIPV) && (ctx == IN_KERNEL))
105 - return MCE_PANIC_SEVERITY;
106 -
107 /* kill current process */
108 return MCE_AR_SEVERITY;
109 } else {
110 diff --git a/crypto/dh.c b/crypto/dh.c
111 index b1032a5c1bfa..aadaf36fb56f 100644
112 --- a/crypto/dh.c
113 +++ b/crypto/dh.c
114 @@ -21,19 +21,12 @@ struct dh_ctx {
115 MPI xa;
116 };
117
118 -static inline void dh_clear_params(struct dh_ctx *ctx)
119 +static void dh_clear_ctx(struct dh_ctx *ctx)
120 {
121 mpi_free(ctx->p);
122 mpi_free(ctx->g);
123 - ctx->p = NULL;
124 - ctx->g = NULL;
125 -}
126 -
127 -static void dh_free_ctx(struct dh_ctx *ctx)
128 -{
129 - dh_clear_params(ctx);
130 mpi_free(ctx->xa);
131 - ctx->xa = NULL;
132 + memset(ctx, 0, sizeof(*ctx));
133 }
134
135 /*
136 @@ -71,10 +64,8 @@ static int dh_set_params(struct dh_ctx *ctx, struct dh *params)
137 return -EINVAL;
138
139 ctx->g = mpi_read_raw_data(params->g, params->g_size);
140 - if (!ctx->g) {
141 - mpi_free(ctx->p);
142 + if (!ctx->g)
143 return -EINVAL;
144 - }
145
146 return 0;
147 }
148 @@ -86,21 +77,23 @@ static int dh_set_secret(struct crypto_kpp *tfm, const void *buf,
149 struct dh params;
150
151 /* Free the old MPI key if any */
152 - dh_free_ctx(ctx);
153 + dh_clear_ctx(ctx);
154
155 if (crypto_dh_decode_key(buf, len, &params) < 0)
156 - return -EINVAL;
157 + goto err_clear_ctx;
158
159 if (dh_set_params(ctx, &params) < 0)
160 - return -EINVAL;
161 + goto err_clear_ctx;
162
163 ctx->xa = mpi_read_raw_data(params.key, params.key_size);
164 - if (!ctx->xa) {
165 - dh_clear_params(ctx);
166 - return -EINVAL;
167 - }
168 + if (!ctx->xa)
169 + goto err_clear_ctx;
170
171 return 0;
172 +
173 +err_clear_ctx:
174 + dh_clear_ctx(ctx);
175 + return -EINVAL;
176 }
177
178 static int dh_compute_value(struct kpp_request *req)
179 @@ -158,7 +151,7 @@ static void dh_exit_tfm(struct crypto_kpp *tfm)
180 {
181 struct dh_ctx *ctx = dh_get_ctx(tfm);
182
183 - dh_free_ctx(ctx);
184 + dh_clear_ctx(ctx);
185 }
186
187 static struct kpp_alg dh = {
188 diff --git a/crypto/dh_helper.c b/crypto/dh_helper.c
189 index 8ba8a3f82620..7f00c771fe8d 100644
190 --- a/crypto/dh_helper.c
191 +++ b/crypto/dh_helper.c
192 @@ -83,6 +83,14 @@ int crypto_dh_decode_key(const char *buf, unsigned int len, struct dh *params)
193 if (secret.len != crypto_dh_key_len(params))
194 return -EINVAL;
195
196 + /*
197 + * Don't permit the buffer for 'key' or 'g' to be larger than 'p', since
198 + * some drivers assume otherwise.
199 + */
200 + if (params->key_size > params->p_size ||
201 + params->g_size > params->p_size)
202 + return -EINVAL;
203 +
204 /* Don't allocate memory. Set pointers to data within
205 * the given buffer
206 */
207 @@ -90,6 +98,14 @@ int crypto_dh_decode_key(const char *buf, unsigned int len, struct dh *params)
208 params->p = (void *)(ptr + params->key_size);
209 params->g = (void *)(ptr + params->key_size + params->p_size);
210
211 + /*
212 + * Don't permit 'p' to be 0. It's not a prime number, and it's subject
213 + * to corner cases such as 'mod 0' being undefined or
214 + * crypto_kpp_maxsize() returning 0.
215 + */
216 + if (memchr_inv(params->p, 0, params->p_size) == NULL)
217 + return -EINVAL;
218 +
219 return 0;
220 }
221 EXPORT_SYMBOL_GPL(crypto_dh_decode_key);
222 diff --git a/drivers/crypto/bcm/cipher.c b/drivers/crypto/bcm/cipher.c
223 index 8685c7e4debd..ee52c355bee0 100644
224 --- a/drivers/crypto/bcm/cipher.c
225 +++ b/drivers/crypto/bcm/cipher.c
226 @@ -256,6 +256,44 @@ spu_ablkcipher_tx_sg_create(struct brcm_message *mssg,
227 return 0;
228 }
229
230 +static int mailbox_send_message(struct brcm_message *mssg, u32 flags,
231 + u8 chan_idx)
232 +{
233 + int err;
234 + int retry_cnt = 0;
235 + struct device *dev = &(iproc_priv.pdev->dev);
236 +
237 + err = mbox_send_message(iproc_priv.mbox[chan_idx], mssg);
238 + if (flags & CRYPTO_TFM_REQ_MAY_SLEEP) {
239 + while ((err == -ENOBUFS) && (retry_cnt < SPU_MB_RETRY_MAX)) {
240 + /*
241 + * Mailbox queue is full. Since MAY_SLEEP is set, assume
242 + * not in atomic context and we can wait and try again.
243 + */
244 + retry_cnt++;
245 + usleep_range(MBOX_SLEEP_MIN, MBOX_SLEEP_MAX);
246 + err = mbox_send_message(iproc_priv.mbox[chan_idx],
247 + mssg);
248 + atomic_inc(&iproc_priv.mb_no_spc);
249 + }
250 + }
251 + if (err < 0) {
252 + atomic_inc(&iproc_priv.mb_send_fail);
253 + return err;
254 + }
255 +
256 + /* Check error returned by mailbox controller */
257 + err = mssg->error;
258 + if (unlikely(err < 0)) {
259 + dev_err(dev, "message error %d", err);
260 + /* Signal txdone for mailbox channel */
261 + }
262 +
263 + /* Signal txdone for mailbox channel */
264 + mbox_client_txdone(iproc_priv.mbox[chan_idx], err);
265 + return err;
266 +}
267 +
268 /**
269 * handle_ablkcipher_req() - Submit as much of a block cipher request as fits in
270 * a single SPU request message, starting at the current position in the request
271 @@ -293,7 +331,6 @@ static int handle_ablkcipher_req(struct iproc_reqctx_s *rctx)
272 u32 pad_len; /* total length of all padding */
273 bool update_key = false;
274 struct brcm_message *mssg; /* mailbox message */
275 - int retry_cnt = 0;
276
277 /* number of entries in src and dst sg in mailbox message. */
278 u8 rx_frag_num = 2; /* response header and STATUS */
279 @@ -462,24 +499,9 @@ static int handle_ablkcipher_req(struct iproc_reqctx_s *rctx)
280 if (err)
281 return err;
282
283 - err = mbox_send_message(iproc_priv.mbox[rctx->chan_idx], mssg);
284 - if (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) {
285 - while ((err == -ENOBUFS) && (retry_cnt < SPU_MB_RETRY_MAX)) {
286 - /*
287 - * Mailbox queue is full. Since MAY_SLEEP is set, assume
288 - * not in atomic context and we can wait and try again.
289 - */
290 - retry_cnt++;
291 - usleep_range(MBOX_SLEEP_MIN, MBOX_SLEEP_MAX);
292 - err = mbox_send_message(iproc_priv.mbox[rctx->chan_idx],
293 - mssg);
294 - atomic_inc(&iproc_priv.mb_no_spc);
295 - }
296 - }
297 - if (unlikely(err < 0)) {
298 - atomic_inc(&iproc_priv.mb_send_fail);
299 + err = mailbox_send_message(mssg, req->base.flags, rctx->chan_idx);
300 + if (unlikely(err < 0))
301 return err;
302 - }
303
304 return -EINPROGRESS;
305 }
306 @@ -710,7 +732,6 @@ static int handle_ahash_req(struct iproc_reqctx_s *rctx)
307 u32 spu_hdr_len;
308 unsigned int digestsize;
309 u16 rem = 0;
310 - int retry_cnt = 0;
311
312 /*
313 * number of entries in src and dst sg. Always includes SPU msg header.
314 @@ -904,24 +925,10 @@ static int handle_ahash_req(struct iproc_reqctx_s *rctx)
315 if (err)
316 return err;
317
318 - err = mbox_send_message(iproc_priv.mbox[rctx->chan_idx], mssg);
319 - if (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) {
320 - while ((err == -ENOBUFS) && (retry_cnt < SPU_MB_RETRY_MAX)) {
321 - /*
322 - * Mailbox queue is full. Since MAY_SLEEP is set, assume
323 - * not in atomic context and we can wait and try again.
324 - */
325 - retry_cnt++;
326 - usleep_range(MBOX_SLEEP_MIN, MBOX_SLEEP_MAX);
327 - err = mbox_send_message(iproc_priv.mbox[rctx->chan_idx],
328 - mssg);
329 - atomic_inc(&iproc_priv.mb_no_spc);
330 - }
331 - }
332 - if (err < 0) {
333 - atomic_inc(&iproc_priv.mb_send_fail);
334 + err = mailbox_send_message(mssg, req->base.flags, rctx->chan_idx);
335 + if (unlikely(err < 0))
336 return err;
337 - }
338 +
339 return -EINPROGRESS;
340 }
341
342 @@ -1320,7 +1327,6 @@ static int handle_aead_req(struct iproc_reqctx_s *rctx)
343 int assoc_nents = 0;
344 bool incl_icv = false;
345 unsigned int digestsize = ctx->digestsize;
346 - int retry_cnt = 0;
347
348 /* number of entries in src and dst sg. Always includes SPU msg header.
349 */
350 @@ -1558,24 +1564,9 @@ static int handle_aead_req(struct iproc_reqctx_s *rctx)
351 if (err)
352 return err;
353
354 - err = mbox_send_message(iproc_priv.mbox[rctx->chan_idx], mssg);
355 - if (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) {
356 - while ((err == -ENOBUFS) && (retry_cnt < SPU_MB_RETRY_MAX)) {
357 - /*
358 - * Mailbox queue is full. Since MAY_SLEEP is set, assume
359 - * not in atomic context and we can wait and try again.
360 - */
361 - retry_cnt++;
362 - usleep_range(MBOX_SLEEP_MIN, MBOX_SLEEP_MAX);
363 - err = mbox_send_message(iproc_priv.mbox[rctx->chan_idx],
364 - mssg);
365 - atomic_inc(&iproc_priv.mb_no_spc);
366 - }
367 - }
368 - if (err < 0) {
369 - atomic_inc(&iproc_priv.mb_send_fail);
370 + err = mailbox_send_message(mssg, req->base.flags, rctx->chan_idx);
371 + if (unlikely(err < 0))
372 return err;
373 - }
374
375 return -EINPROGRESS;
376 }
377 @@ -4537,7 +4528,7 @@ static int spu_mb_init(struct device *dev)
378 mcl->dev = dev;
379 mcl->tx_block = false;
380 mcl->tx_tout = 0;
381 - mcl->knows_txdone = false;
382 + mcl->knows_txdone = true;
383 mcl->rx_callback = spu_rx_callback;
384 mcl->tx_done = NULL;
385
386 diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c
387 index 34ff53290b03..47edc7fbf91f 100644
388 --- a/drivers/dma/dmatest.c
389 +++ b/drivers/dma/dmatest.c
390 @@ -702,6 +702,7 @@ static int dmatest_func(void *data)
391 * free it this time?" dancing. For now, just
392 * leave it dangling.
393 */
394 + WARN(1, "dmatest: Kernel stack may be corrupted!!\n");
395 dmaengine_unmap_put(um);
396 result("test timed out", total_tests, src_off, dst_off,
397 len, 0);
398 diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c
399 index dc0591654011..6241fa787d66 100644
400 --- a/drivers/edac/sb_edac.c
401 +++ b/drivers/edac/sb_edac.c
402 @@ -462,6 +462,7 @@ static const struct pci_id_table pci_dev_descr_sbridge_table[] = {
403 static const struct pci_id_descr pci_dev_descr_ibridge[] = {
404 /* Processor Home Agent */
405 { PCI_DESCR(PCI_DEVICE_ID_INTEL_IBRIDGE_IMC_HA0, 0, IMC0) },
406 + { PCI_DESCR(PCI_DEVICE_ID_INTEL_IBRIDGE_IMC_HA1, 1, IMC1) },
407
408 /* Memory controller */
409 { PCI_DESCR(PCI_DEVICE_ID_INTEL_IBRIDGE_IMC_HA0_TA, 0, IMC0) },
410 @@ -472,7 +473,6 @@ static const struct pci_id_descr pci_dev_descr_ibridge[] = {
411 { PCI_DESCR(PCI_DEVICE_ID_INTEL_IBRIDGE_IMC_HA0_TAD3, 0, IMC0) },
412
413 /* Optional, mode 2HA */
414 - { PCI_DESCR(PCI_DEVICE_ID_INTEL_IBRIDGE_IMC_HA1, 1, IMC1) },
415 { PCI_DESCR(PCI_DEVICE_ID_INTEL_IBRIDGE_IMC_HA1_TA, 1, IMC1) },
416 { PCI_DESCR(PCI_DEVICE_ID_INTEL_IBRIDGE_IMC_HA1_RAS, 1, IMC1) },
417 { PCI_DESCR(PCI_DEVICE_ID_INTEL_IBRIDGE_IMC_HA1_TAD0, 1, IMC1) },
418 @@ -2291,6 +2291,13 @@ static int sbridge_get_onedevice(struct pci_dev **prev,
419 next_imc:
420 sbridge_dev = get_sbridge_dev(bus, dev_descr->dom, multi_bus, sbridge_dev);
421 if (!sbridge_dev) {
422 + /* If the HA1 wasn't found, don't create EDAC second memory controller */
423 + if (dev_descr->dom == IMC1 && devno != 1) {
424 + edac_dbg(0, "Skip IMC1: %04x:%04x (since HA1 was absent)\n",
425 + PCI_VENDOR_ID_INTEL, dev_descr->dev_id);
426 + pci_dev_put(pdev);
427 + return 0;
428 + }
429
430 if (dev_descr->dom == SOCK)
431 goto out_imc;
432 diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
433 index 374301fcbc86..8c7a0ce147a1 100644
434 --- a/drivers/hid/Kconfig
435 +++ b/drivers/hid/Kconfig
436 @@ -230,7 +230,7 @@ config HID_CMEDIA
437
438 config HID_CP2112
439 tristate "Silicon Labs CP2112 HID USB-to-SMBus Bridge support"
440 - depends on USB_HID && I2C && GPIOLIB
441 + depends on USB_HID && HIDRAW && I2C && GPIOLIB
442 select GPIOLIB_IRQCHIP
443 ---help---
444 Support for Silicon Labs CP2112 HID USB to SMBus Master Bridge.
445 diff --git a/drivers/hid/wacom_wac.h b/drivers/hid/wacom_wac.h
446 index 8a03654048bf..feb62fd4dfc3 100644
447 --- a/drivers/hid/wacom_wac.h
448 +++ b/drivers/hid/wacom_wac.h
449 @@ -166,6 +166,7 @@
450 ((f)->physical == HID_DG_PEN) || \
451 ((f)->application == HID_DG_PEN) || \
452 ((f)->application == HID_DG_DIGITIZER) || \
453 + ((f)->application == WACOM_HID_WD_PEN) || \
454 ((f)->application == WACOM_HID_WD_DIGITIZER) || \
455 ((f)->application == WACOM_HID_G9_PEN) || \
456 ((f)->application == WACOM_HID_G11_PEN))
457 diff --git a/drivers/media/rc/imon.c b/drivers/media/rc/imon.c
458 index 7b3f31cc63d2..0c46155a8e9d 100644
459 --- a/drivers/media/rc/imon.c
460 +++ b/drivers/media/rc/imon.c
461 @@ -2517,6 +2517,11 @@ static int imon_probe(struct usb_interface *interface,
462 mutex_lock(&driver_lock);
463
464 first_if = usb_ifnum_to_if(usbdev, 0);
465 + if (!first_if) {
466 + ret = -ENODEV;
467 + goto fail;
468 + }
469 +
470 first_if_ctx = usb_get_intfdata(first_if);
471
472 if (ifnum == 0) {
473 diff --git a/drivers/media/usb/dvb-usb/dib0700_devices.c b/drivers/media/usb/dvb-usb/dib0700_devices.c
474 index 6020170fe99a..92098c1b78e5 100644
475 --- a/drivers/media/usb/dvb-usb/dib0700_devices.c
476 +++ b/drivers/media/usb/dvb-usb/dib0700_devices.c
477 @@ -291,7 +291,7 @@ static int stk7700P2_frontend_attach(struct dvb_usb_adapter *adap)
478 stk7700d_dib7000p_mt2266_config)
479 != 0) {
480 err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n", __func__);
481 - dvb_detach(&state->dib7000p_ops);
482 + dvb_detach(state->dib7000p_ops.set_wbd_ref);
483 return -ENODEV;
484 }
485 }
486 @@ -325,7 +325,7 @@ static int stk7700d_frontend_attach(struct dvb_usb_adapter *adap)
487 stk7700d_dib7000p_mt2266_config)
488 != 0) {
489 err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n", __func__);
490 - dvb_detach(&state->dib7000p_ops);
491 + dvb_detach(state->dib7000p_ops.set_wbd_ref);
492 return -ENODEV;
493 }
494 }
495 @@ -478,7 +478,7 @@ static int stk7700ph_frontend_attach(struct dvb_usb_adapter *adap)
496 &stk7700ph_dib7700_xc3028_config) != 0) {
497 err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n",
498 __func__);
499 - dvb_detach(&state->dib7000p_ops);
500 + dvb_detach(state->dib7000p_ops.set_wbd_ref);
501 return -ENODEV;
502 }
503
504 @@ -1010,7 +1010,7 @@ static int stk7070p_frontend_attach(struct dvb_usb_adapter *adap)
505 &dib7070p_dib7000p_config) != 0) {
506 err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n",
507 __func__);
508 - dvb_detach(&state->dib7000p_ops);
509 + dvb_detach(state->dib7000p_ops.set_wbd_ref);
510 return -ENODEV;
511 }
512
513 @@ -1068,7 +1068,7 @@ static int stk7770p_frontend_attach(struct dvb_usb_adapter *adap)
514 &dib7770p_dib7000p_config) != 0) {
515 err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n",
516 __func__);
517 - dvb_detach(&state->dib7000p_ops);
518 + dvb_detach(state->dib7000p_ops.set_wbd_ref);
519 return -ENODEV;
520 }
521
522 @@ -3056,7 +3056,7 @@ static int nim7090_frontend_attach(struct dvb_usb_adapter *adap)
523
524 if (state->dib7000p_ops.i2c_enumeration(&adap->dev->i2c_adap, 1, 0x10, &nim7090_dib7000p_config) != 0) {
525 err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n", __func__);
526 - dvb_detach(&state->dib7000p_ops);
527 + dvb_detach(state->dib7000p_ops.set_wbd_ref);
528 return -ENODEV;
529 }
530 adap->fe_adap[0].fe = state->dib7000p_ops.init(&adap->dev->i2c_adap, 0x80, &nim7090_dib7000p_config);
531 @@ -3109,7 +3109,7 @@ static int tfe7090pvr_frontend0_attach(struct dvb_usb_adapter *adap)
532 /* initialize IC 0 */
533 if (state->dib7000p_ops.i2c_enumeration(&adap->dev->i2c_adap, 1, 0x20, &tfe7090pvr_dib7000p_config[0]) != 0) {
534 err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n", __func__);
535 - dvb_detach(&state->dib7000p_ops);
536 + dvb_detach(state->dib7000p_ops.set_wbd_ref);
537 return -ENODEV;
538 }
539
540 @@ -3139,7 +3139,7 @@ static int tfe7090pvr_frontend1_attach(struct dvb_usb_adapter *adap)
541 i2c = state->dib7000p_ops.get_i2c_master(adap->dev->adapter[0].fe_adap[0].fe, DIBX000_I2C_INTERFACE_GPIO_6_7, 1);
542 if (state->dib7000p_ops.i2c_enumeration(i2c, 1, 0x10, &tfe7090pvr_dib7000p_config[1]) != 0) {
543 err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n", __func__);
544 - dvb_detach(&state->dib7000p_ops);
545 + dvb_detach(state->dib7000p_ops.set_wbd_ref);
546 return -ENODEV;
547 }
548
549 @@ -3214,7 +3214,7 @@ static int tfe7790p_frontend_attach(struct dvb_usb_adapter *adap)
550 1, 0x10, &tfe7790p_dib7000p_config) != 0) {
551 err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n",
552 __func__);
553 - dvb_detach(&state->dib7000p_ops);
554 + dvb_detach(state->dib7000p_ops.set_wbd_ref);
555 return -ENODEV;
556 }
557 adap->fe_adap[0].fe = state->dib7000p_ops.init(&adap->dev->i2c_adap,
558 @@ -3309,7 +3309,7 @@ static int stk7070pd_frontend_attach0(struct dvb_usb_adapter *adap)
559 stk7070pd_dib7000p_config) != 0) {
560 err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n",
561 __func__);
562 - dvb_detach(&state->dib7000p_ops);
563 + dvb_detach(state->dib7000p_ops.set_wbd_ref);
564 return -ENODEV;
565 }
566
567 @@ -3384,7 +3384,7 @@ static int novatd_frontend_attach(struct dvb_usb_adapter *adap)
568 stk7070pd_dib7000p_config) != 0) {
569 err("%s: state->dib7000p_ops.i2c_enumeration failed. Cannot continue\n",
570 __func__);
571 - dvb_detach(&state->dib7000p_ops);
572 + dvb_detach(state->dib7000p_ops.set_wbd_ref);
573 return -ENODEV;
574 }
575 }
576 @@ -3620,7 +3620,7 @@ static int pctv340e_frontend_attach(struct dvb_usb_adapter *adap)
577
578 if (state->dib7000p_ops.dib7000pc_detection(&adap->dev->i2c_adap) == 0) {
579 /* Demodulator not found for some reason? */
580 - dvb_detach(&state->dib7000p_ops);
581 + dvb_detach(state->dib7000p_ops.set_wbd_ref);
582 return -ENODEV;
583 }
584
585 diff --git a/drivers/platform/x86/peaq-wmi.c b/drivers/platform/x86/peaq-wmi.c
586 index bc98ef95514a..2da48ecc90c1 100644
587 --- a/drivers/platform/x86/peaq-wmi.c
588 +++ b/drivers/platform/x86/peaq-wmi.c
589 @@ -8,6 +8,7 @@
590 */
591
592 #include <linux/acpi.h>
593 +#include <linux/dmi.h>
594 #include <linux/input-polldev.h>
595 #include <linux/kernel.h>
596 #include <linux/module.h>
597 @@ -64,8 +65,23 @@ static void peaq_wmi_poll(struct input_polled_dev *dev)
598 }
599 }
600
601 +/* Some other devices (Shuttle XS35) use the same WMI GUID for other purposes */
602 +static const struct dmi_system_id peaq_dmi_table[] = {
603 + {
604 + .matches = {
605 + DMI_MATCH(DMI_SYS_VENDOR, "PEAQ"),
606 + DMI_MATCH(DMI_PRODUCT_NAME, "PEAQ PMM C1010 MD99187"),
607 + },
608 + },
609 + {}
610 +};
611 +
612 static int __init peaq_wmi_init(void)
613 {
614 + /* WMI GUID is not unique, also check for a DMI match */
615 + if (!dmi_check_system(peaq_dmi_table))
616 + return -ENODEV;
617 +
618 if (!wmi_has_guid(PEAQ_DOLBY_BUTTON_GUID))
619 return -ENODEV;
620
621 @@ -86,6 +102,9 @@ static int __init peaq_wmi_init(void)
622
623 static void __exit peaq_wmi_exit(void)
624 {
625 + if (!dmi_check_system(peaq_dmi_table))
626 + return;
627 +
628 if (!wmi_has_guid(PEAQ_DOLBY_BUTTON_GUID))
629 return;
630
631 diff --git a/drivers/rpmsg/qcom_glink_native.c b/drivers/rpmsg/qcom_glink_native.c
632 index 5dcc9bf1c5bc..e3242a0925a6 100644
633 --- a/drivers/rpmsg/qcom_glink_native.c
634 +++ b/drivers/rpmsg/qcom_glink_native.c
635 @@ -1616,3 +1616,6 @@ void qcom_glink_native_unregister(struct qcom_glink *glink)
636 device_unregister(glink->dev);
637 }
638 EXPORT_SYMBOL_GPL(qcom_glink_native_unregister);
639 +
640 +MODULE_DESCRIPTION("Qualcomm GLINK driver");
641 +MODULE_LICENSE("GPL v2");
642 diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
643 index e8b5a5e21b2e..3ff0ee88c467 100644
644 --- a/drivers/spi/spi.c
645 +++ b/drivers/spi/spi.c
646 @@ -2245,11 +2245,12 @@ static int __unregister(struct device *dev, void *null)
647 void spi_unregister_controller(struct spi_controller *ctlr)
648 {
649 struct spi_controller *found;
650 + int id = ctlr->bus_num;
651 int dummy;
652
653 /* First make sure that this controller was ever added */
654 mutex_lock(&board_lock);
655 - found = idr_find(&spi_master_idr, ctlr->bus_num);
656 + found = idr_find(&spi_master_idr, id);
657 mutex_unlock(&board_lock);
658 if (found != ctlr) {
659 dev_dbg(&ctlr->dev,
660 @@ -2269,7 +2270,7 @@ void spi_unregister_controller(struct spi_controller *ctlr)
661 device_unregister(&ctlr->dev);
662 /* free bus id */
663 mutex_lock(&board_lock);
664 - idr_remove(&spi_master_idr, ctlr->bus_num);
665 + idr_remove(&spi_master_idr, id);
666 mutex_unlock(&board_lock);
667 }
668 EXPORT_SYMBOL_GPL(spi_unregister_controller);
669 diff --git a/drivers/staging/ccree/cc_lli_defs.h b/drivers/staging/ccree/cc_lli_defs.h
670 index 851d3907167e..a9c417b07b04 100644
671 --- a/drivers/staging/ccree/cc_lli_defs.h
672 +++ b/drivers/staging/ccree/cc_lli_defs.h
673 @@ -59,7 +59,7 @@ static inline void cc_lli_set_addr(u32 *lli_p, dma_addr_t addr)
674 lli_p[LLI_WORD0_OFFSET] = (addr & U32_MAX);
675 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
676 lli_p[LLI_WORD1_OFFSET] &= ~LLI_HADDR_MASK;
677 - lli_p[LLI_WORD1_OFFSET] |= FIELD_PREP(LLI_HADDR_MASK, (addr >> 16));
678 + lli_p[LLI_WORD1_OFFSET] |= FIELD_PREP(LLI_HADDR_MASK, (addr >> 32));
679 #endif /* CONFIG_ARCH_DMA_ADDR_T_64BIT */
680 }
681
682 diff --git a/drivers/staging/greybus/spilib.c b/drivers/staging/greybus/spilib.c
683 index e97b19148497..1e7321a1404c 100644
684 --- a/drivers/staging/greybus/spilib.c
685 +++ b/drivers/staging/greybus/spilib.c
686 @@ -544,11 +544,14 @@ int gb_spilib_master_init(struct gb_connection *connection, struct device *dev,
687
688 return 0;
689
690 -exit_spi_unregister:
691 - spi_unregister_master(master);
692 exit_spi_put:
693 spi_master_put(master);
694
695 + return ret;
696 +
697 +exit_spi_unregister:
698 + spi_unregister_master(master);
699 +
700 return ret;
701 }
702 EXPORT_SYMBOL_GPL(gb_spilib_master_init);
703 @@ -558,7 +561,6 @@ void gb_spilib_master_exit(struct gb_connection *connection)
704 struct spi_master *master = gb_connection_get_data(connection);
705
706 spi_unregister_master(master);
707 - spi_master_put(master);
708 }
709 EXPORT_SYMBOL_GPL(gb_spilib_master_exit);
710
711 diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c b/drivers/staging/rtl8188eu/core/rtw_recv.c
712 index 3fd5f4102b36..afb9dadc1cfe 100644
713 --- a/drivers/staging/rtl8188eu/core/rtw_recv.c
714 +++ b/drivers/staging/rtl8188eu/core/rtw_recv.c
715 @@ -259,10 +259,12 @@ static int recvframe_chkmic(struct adapter *adapter,
716 }
717
718 /* icv_len included the mic code */
719 - datalen = precvframe->pkt->len-prxattrib->hdrlen - 8;
720 + datalen = precvframe->pkt->len-prxattrib->hdrlen -
721 + prxattrib->iv_len-prxattrib->icv_len-8;
722 pframe = precvframe->pkt->data;
723 - payload = pframe+prxattrib->hdrlen;
724 + payload = pframe+prxattrib->hdrlen+prxattrib->iv_len;
725
726 + RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("\n prxattrib->iv_len=%d prxattrib->icv_len=%d\n", prxattrib->iv_len, prxattrib->icv_len));
727 rtw_seccalctkipmic(mickey, pframe, payload, datalen, &miccode[0],
728 (unsigned char)prxattrib->priority); /* care the length of the data */
729
730 @@ -407,15 +409,9 @@ static struct recv_frame *decryptor(struct adapter *padapter,
731 default:
732 break;
733 }
734 - if (res != _FAIL) {
735 - memmove(precv_frame->pkt->data + precv_frame->attrib.iv_len, precv_frame->pkt->data, precv_frame->attrib.hdrlen);
736 - skb_pull(precv_frame->pkt, precv_frame->attrib.iv_len);
737 - skb_trim(precv_frame->pkt, precv_frame->pkt->len - precv_frame->attrib.icv_len);
738 - }
739 } else if (prxattrib->bdecrypted == 1 && prxattrib->encrypt > 0 &&
740 - (psecuritypriv->busetkipkey == 1 || prxattrib->encrypt != _TKIP_)) {
741 - psecuritypriv->hw_decrypted = true;
742 - }
743 + (psecuritypriv->busetkipkey == 1 || prxattrib->encrypt != _TKIP_))
744 + psecuritypriv->hw_decrypted = true;
745
746 if (res == _FAIL) {
747 rtw_free_recvframe(return_packet, &padapter->recvpriv.free_recv_queue);
748 @@ -456,7 +452,7 @@ static struct recv_frame *portctrl(struct adapter *adapter,
749
750 if (auth_alg == 2) {
751 /* get ether_type */
752 - ptr = ptr + pfhdr->attrib.hdrlen + LLC_HEADER_SIZE;
753 + ptr = ptr + pfhdr->attrib.hdrlen + LLC_HEADER_SIZE + pfhdr->attrib.iv_len;
754 memcpy(&be_tmp, ptr, 2);
755 ether_type = ntohs(be_tmp);
756
757 @@ -1138,8 +1134,6 @@ static int validate_recv_data_frame(struct adapter *adapter,
758 }
759
760 if (pattrib->privacy) {
761 - struct sk_buff *skb = precv_frame->pkt;
762 -
763 RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("validate_recv_data_frame:pattrib->privacy=%x\n", pattrib->privacy));
764 RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("\n ^^^^^^^^^^^IS_MCAST(pattrib->ra(0x%02x))=%d^^^^^^^^^^^^^^^6\n", pattrib->ra[0], IS_MCAST(pattrib->ra)));
765
766 @@ -1148,13 +1142,6 @@ static int validate_recv_data_frame(struct adapter *adapter,
767 RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("\n pattrib->encrypt=%d\n", pattrib->encrypt));
768
769 SET_ICE_IV_LEN(pattrib->iv_len, pattrib->icv_len, pattrib->encrypt);
770 -
771 - if (pattrib->bdecrypted == 1 && pattrib->encrypt > 0) {
772 - memmove(skb->data + pattrib->iv_len,
773 - skb->data, pattrib->hdrlen);
774 - skb_pull(skb, pattrib->iv_len);
775 - skb_trim(skb, skb->len - pattrib->icv_len);
776 - }
777 } else {
778 pattrib->encrypt = 0;
779 pattrib->iv_len = 0;
780 @@ -1274,7 +1261,6 @@ static int validate_recv_frame(struct adapter *adapter,
781 * Hence forward the frame to the monitor anyway to preserve the order
782 * in which frames were received.
783 */
784 -
785 rtl88eu_mon_recv_hook(adapter->pmondev, precv_frame);
786
787 exit:
788 @@ -1296,8 +1282,11 @@ static int wlanhdr_to_ethhdr(struct recv_frame *precvframe)
789 u8 *ptr = precvframe->pkt->data;
790 struct rx_pkt_attrib *pattrib = &precvframe->attrib;
791
792 - psnap = (struct ieee80211_snap_hdr *)(ptr+pattrib->hdrlen);
793 - psnap_type = ptr+pattrib->hdrlen + SNAP_SIZE;
794 + if (pattrib->encrypt)
795 + skb_trim(precvframe->pkt, precvframe->pkt->len - pattrib->icv_len);
796 +
797 + psnap = (struct ieee80211_snap_hdr *)(ptr+pattrib->hdrlen + pattrib->iv_len);
798 + psnap_type = ptr+pattrib->hdrlen + pattrib->iv_len+SNAP_SIZE;
799 /* convert hdr + possible LLC headers into Ethernet header */
800 if ((!memcmp(psnap, rtw_rfc1042_header, SNAP_SIZE) &&
801 (!memcmp(psnap_type, SNAP_ETH_TYPE_IPX, 2) == false) &&
802 @@ -1310,9 +1299,12 @@ static int wlanhdr_to_ethhdr(struct recv_frame *precvframe)
803 bsnaphdr = false;
804 }
805
806 - rmv_len = pattrib->hdrlen + (bsnaphdr ? SNAP_SIZE : 0);
807 + rmv_len = pattrib->hdrlen + pattrib->iv_len + (bsnaphdr ? SNAP_SIZE : 0);
808 len = precvframe->pkt->len - rmv_len;
809
810 + RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
811 + ("\n===pattrib->hdrlen: %x, pattrib->iv_len:%x===\n\n", pattrib->hdrlen, pattrib->iv_len));
812 +
813 memcpy(&be_tmp, ptr+rmv_len, 2);
814 eth_type = ntohs(be_tmp); /* pattrib->ether_type */
815 pattrib->eth_type = eth_type;
816 @@ -1337,6 +1329,7 @@ static struct recv_frame *recvframe_defrag(struct adapter *adapter,
817 struct __queue *defrag_q)
818 {
819 struct list_head *plist, *phead;
820 + u8 wlanhdr_offset;
821 u8 curfragnum;
822 struct recv_frame *pfhdr, *pnfhdr;
823 struct recv_frame *prframe, *pnextrframe;
824 @@ -1385,7 +1378,12 @@ static struct recv_frame *recvframe_defrag(struct adapter *adapter,
825 /* copy the 2nd~n fragment frame's payload to the first fragment */
826 /* get the 2nd~last fragment frame's payload */
827
828 - skb_pull(pnextrframe->pkt, pnfhdr->attrib.hdrlen);
829 + wlanhdr_offset = pnfhdr->attrib.hdrlen + pnfhdr->attrib.iv_len;
830 +
831 + skb_pull(pnextrframe->pkt, wlanhdr_offset);
832 +
833 + /* append to first fragment frame's tail (if privacy frame, pull the ICV) */
834 + skb_trim(prframe->pkt, prframe->pkt->len - pfhdr->attrib.icv_len);
835
836 /* memcpy */
837 memcpy(skb_tail_pointer(pfhdr->pkt), pnfhdr->pkt->data,
838 @@ -1393,7 +1391,7 @@ static struct recv_frame *recvframe_defrag(struct adapter *adapter,
839
840 skb_put(prframe->pkt, pnfhdr->pkt->len);
841
842 - pfhdr->attrib.icv_len = 0;
843 + pfhdr->attrib.icv_len = pnfhdr->attrib.icv_len;
844 plist = plist->next;
845 }
846
847 @@ -1519,6 +1517,11 @@ static int amsdu_to_msdu(struct adapter *padapter, struct recv_frame *prframe)
848 nr_subframes = 0;
849 pattrib = &prframe->attrib;
850
851 + skb_pull(prframe->pkt, prframe->attrib.hdrlen);
852 +
853 + if (prframe->attrib.iv_len > 0)
854 + skb_pull(prframe->pkt, prframe->attrib.iv_len);
855 +
856 a_len = prframe->pkt->len;
857
858 pdata = prframe->pkt->data;
859 @@ -1887,6 +1890,24 @@ static int process_recv_indicatepkts(struct adapter *padapter,
860 return retval;
861 }
862
863 +static int recv_func_prehandle(struct adapter *padapter,
864 + struct recv_frame *rframe)
865 +{
866 + int ret = _SUCCESS;
867 + struct __queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
868 +
869 + /* check the frame crtl field and decache */
870 + ret = validate_recv_frame(padapter, rframe);
871 + if (ret != _SUCCESS) {
872 + RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("recv_func: validate_recv_frame fail! drop pkt\n"));
873 + rtw_free_recvframe(rframe, pfree_recv_queue);/* free this recv_frame */
874 + goto exit;
875 + }
876 +
877 +exit:
878 + return ret;
879 +}
880 +
881 static int recv_func_posthandle(struct adapter *padapter,
882 struct recv_frame *prframe)
883 {
884 @@ -1939,7 +1960,6 @@ static int recv_func(struct adapter *padapter, struct recv_frame *rframe)
885 struct rx_pkt_attrib *prxattrib = &rframe->attrib;
886 struct security_priv *psecuritypriv = &padapter->securitypriv;
887 struct mlme_priv *mlmepriv = &padapter->mlmepriv;
888 - struct __queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
889
890 /* check if need to handle uc_swdec_pending_queue*/
891 if (check_fwstate(mlmepriv, WIFI_STATION_STATE) && psecuritypriv->busetkipkey) {
892 @@ -1951,12 +1971,9 @@ static int recv_func(struct adapter *padapter, struct recv_frame *rframe)
893 }
894 }
895
896 - /* check the frame crtl field and decache */
897 - ret = validate_recv_frame(padapter, rframe);
898 - if (ret != _SUCCESS) {
899 - RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("recv_func: validate_recv_frame fail! drop pkt\n"));
900 - rtw_free_recvframe(rframe, pfree_recv_queue);/* free this recv_frame */
901 - } else {
902 + ret = recv_func_prehandle(padapter, rframe);
903 +
904 + if (ret == _SUCCESS) {
905 /* check if need to enqueue into uc_swdec_pending_queue*/
906 if (check_fwstate(mlmepriv, WIFI_STATION_STATE) &&
907 !IS_MCAST(prxattrib->ra) && prxattrib->encrypt > 0 &&
908 diff --git a/drivers/staging/rtl8188eu/os_dep/mon.c b/drivers/staging/rtl8188eu/os_dep/mon.c
909 index 37fd52d7364f..225c23fc69dc 100644
910 --- a/drivers/staging/rtl8188eu/os_dep/mon.c
911 +++ b/drivers/staging/rtl8188eu/os_dep/mon.c
912 @@ -66,34 +66,6 @@ static void mon_recv_decrypted(struct net_device *dev, const u8 *data,
913 netif_rx(skb);
914 }
915
916 -static void mon_recv_decrypted_recv(struct net_device *dev, const u8 *data,
917 - int data_len)
918 -{
919 - struct sk_buff *skb;
920 - struct ieee80211_hdr *hdr;
921 - int hdr_len;
922 -
923 - skb = netdev_alloc_skb(dev, data_len);
924 - if (!skb)
925 - return;
926 - memcpy(skb_put(skb, data_len), data, data_len);
927 -
928 - /*
929 - * Frame data is not encrypted. Strip off protection so
930 - * userspace doesn't think that it is.
931 - */
932 -
933 - hdr = (struct ieee80211_hdr *)skb->data;
934 - hdr_len = ieee80211_hdrlen(hdr->frame_control);
935 -
936 - if (ieee80211_has_protected(hdr->frame_control))
937 - hdr->frame_control &= ~cpu_to_le16(IEEE80211_FCTL_PROTECTED);
938 -
939 - skb->ip_summed = CHECKSUM_UNNECESSARY;
940 - skb->protocol = eth_type_trans(skb, dev);
941 - netif_rx(skb);
942 -}
943 -
944 static void mon_recv_encrypted(struct net_device *dev, const u8 *data,
945 int data_len)
946 {
947 @@ -110,6 +82,7 @@ static void mon_recv_encrypted(struct net_device *dev, const u8 *data,
948 void rtl88eu_mon_recv_hook(struct net_device *dev, struct recv_frame *frame)
949 {
950 struct rx_pkt_attrib *attr;
951 + int iv_len, icv_len;
952 int data_len;
953 u8 *data;
954
955 @@ -122,8 +95,11 @@ void rtl88eu_mon_recv_hook(struct net_device *dev, struct recv_frame *frame)
956 data = frame->pkt->data;
957 data_len = frame->pkt->len;
958
959 + /* Broadcast and multicast frames don't have attr->{iv,icv}_len set */
960 + SET_ICE_IV_LEN(iv_len, icv_len, attr->encrypt);
961 +
962 if (attr->bdecrypted)
963 - mon_recv_decrypted_recv(dev, data, data_len);
964 + mon_recv_decrypted(dev, data, data_len, iv_len, icv_len);
965 else
966 mon_recv_encrypted(dev, data, data_len);
967 }
968 diff --git a/drivers/staging/sm750fb/ddk750_chip.h b/drivers/staging/sm750fb/ddk750_chip.h
969 index 09c223f815de..aee82fcaf669 100644
970 --- a/drivers/staging/sm750fb/ddk750_chip.h
971 +++ b/drivers/staging/sm750fb/ddk750_chip.h
972 @@ -18,7 +18,7 @@ static inline u32 peek32(u32 addr)
973 return readl(addr + mmio750);
974 }
975
976 -static inline void poke32(u32 data, u32 addr)
977 +static inline void poke32(u32 addr, u32 data)
978 {
979 writel(data, addr + mmio750);
980 }
981 diff --git a/drivers/staging/vboxvideo/vbox_drv.h b/drivers/staging/vboxvideo/vbox_drv.h
982 index 4b9302703b36..eeac4f0cb2c6 100644
983 --- a/drivers/staging/vboxvideo/vbox_drv.h
984 +++ b/drivers/staging/vboxvideo/vbox_drv.h
985 @@ -137,8 +137,8 @@ struct vbox_connector {
986 char name[32];
987 struct vbox_crtc *vbox_crtc;
988 struct {
989 - u16 width;
990 - u16 height;
991 + u32 width;
992 + u32 height;
993 bool disconnected;
994 } mode_hint;
995 };
996 @@ -150,8 +150,8 @@ struct vbox_crtc {
997 unsigned int crtc_id;
998 u32 fb_offset;
999 bool cursor_enabled;
1000 - u16 x_hint;
1001 - u16 y_hint;
1002 + u32 x_hint;
1003 + u32 y_hint;
1004 };
1005
1006 struct vbox_encoder {
1007 diff --git a/drivers/staging/vboxvideo/vbox_irq.c b/drivers/staging/vboxvideo/vbox_irq.c
1008 index 3ca8bec62ac4..74abdf02d9fd 100644
1009 --- a/drivers/staging/vboxvideo/vbox_irq.c
1010 +++ b/drivers/staging/vboxvideo/vbox_irq.c
1011 @@ -150,8 +150,8 @@ static void vbox_update_mode_hints(struct vbox_private *vbox)
1012
1013 disconnected = !(hints->enabled);
1014 crtc_id = vbox_conn->vbox_crtc->crtc_id;
1015 - vbox_conn->mode_hint.width = hints->cx & 0x8fff;
1016 - vbox_conn->mode_hint.height = hints->cy & 0x8fff;
1017 + vbox_conn->mode_hint.width = hints->cx;
1018 + vbox_conn->mode_hint.height = hints->cy;
1019 vbox_conn->vbox_crtc->x_hint = hints->dx;
1020 vbox_conn->vbox_crtc->y_hint = hints->dy;
1021 vbox_conn->mode_hint.disconnected = disconnected;
1022 diff --git a/drivers/staging/vboxvideo/vbox_mode.c b/drivers/staging/vboxvideo/vbox_mode.c
1023 index 257a77830410..6f08dc966719 100644
1024 --- a/drivers/staging/vboxvideo/vbox_mode.c
1025 +++ b/drivers/staging/vboxvideo/vbox_mode.c
1026 @@ -553,12 +553,22 @@ static int vbox_get_modes(struct drm_connector *connector)
1027 ++num_modes;
1028 }
1029 vbox_set_edid(connector, preferred_width, preferred_height);
1030 - drm_object_property_set_value(
1031 - &connector->base, vbox->dev->mode_config.suggested_x_property,
1032 - vbox_connector->vbox_crtc->x_hint);
1033 - drm_object_property_set_value(
1034 - &connector->base, vbox->dev->mode_config.suggested_y_property,
1035 - vbox_connector->vbox_crtc->y_hint);
1036 +
1037 + if (vbox_connector->vbox_crtc->x_hint != -1)
1038 + drm_object_property_set_value(&connector->base,
1039 + vbox->dev->mode_config.suggested_x_property,
1040 + vbox_connector->vbox_crtc->x_hint);
1041 + else
1042 + drm_object_property_set_value(&connector->base,
1043 + vbox->dev->mode_config.suggested_x_property, 0);
1044 +
1045 + if (vbox_connector->vbox_crtc->y_hint != -1)
1046 + drm_object_property_set_value(&connector->base,
1047 + vbox->dev->mode_config.suggested_y_property,
1048 + vbox_connector->vbox_crtc->y_hint);
1049 + else
1050 + drm_object_property_set_value(&connector->base,
1051 + vbox->dev->mode_config.suggested_y_property, 0);
1052
1053 return num_modes;
1054 }
1055 @@ -640,9 +650,9 @@ static int vbox_connector_init(struct drm_device *dev,
1056
1057 drm_mode_create_suggested_offset_properties(dev);
1058 drm_object_attach_property(&connector->base,
1059 - dev->mode_config.suggested_x_property, -1);
1060 + dev->mode_config.suggested_x_property, 0);
1061 drm_object_attach_property(&connector->base,
1062 - dev->mode_config.suggested_y_property, -1);
1063 + dev->mode_config.suggested_y_property, 0);
1064 drm_connector_register(connector);
1065
1066 drm_mode_connector_attach_encoder(connector, encoder);
1067 diff --git a/drivers/staging/wilc1000/wilc_wlan.c b/drivers/staging/wilc1000/wilc_wlan.c
1068 index 9addef1f1e12..f49dfa82f1b8 100644
1069 --- a/drivers/staging/wilc1000/wilc_wlan.c
1070 +++ b/drivers/staging/wilc1000/wilc_wlan.c
1071 @@ -714,7 +714,7 @@ int wilc_wlan_handle_txq(struct net_device *dev, u32 *txq_count)
1072 char *bssid = ((struct tx_complete_data *)(tqe->priv))->bssid;
1073
1074 buffer_offset = ETH_ETHERNET_HDR_OFFSET;
1075 - memcpy(&txb[offset + 4], bssid, 6);
1076 + memcpy(&txb[offset + 8], bssid, 6);
1077 } else {
1078 buffer_offset = HOST_HDR_OFFSET;
1079 }
1080 diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
1081 index e9326f31db8d..98c666ef9a57 100644
1082 --- a/drivers/usb/core/devio.c
1083 +++ b/drivers/usb/core/devio.c
1084 @@ -1833,6 +1833,18 @@ static int proc_unlinkurb(struct usb_dev_state *ps, void __user *arg)
1085 return 0;
1086 }
1087
1088 +static void compute_isochronous_actual_length(struct urb *urb)
1089 +{
1090 + unsigned int i;
1091 +
1092 + if (urb->number_of_packets > 0) {
1093 + urb->actual_length = 0;
1094 + for (i = 0; i < urb->number_of_packets; i++)
1095 + urb->actual_length +=
1096 + urb->iso_frame_desc[i].actual_length;
1097 + }
1098 +}
1099 +
1100 static int processcompl(struct async *as, void __user * __user *arg)
1101 {
1102 struct urb *urb = as->urb;
1103 @@ -1840,6 +1852,7 @@ static int processcompl(struct async *as, void __user * __user *arg)
1104 void __user *addr = as->userurb;
1105 unsigned int i;
1106
1107 + compute_isochronous_actual_length(urb);
1108 if (as->userbuffer && urb->actual_length) {
1109 if (copy_urb_data_to_user(as->userbuffer, urb))
1110 goto err_out;
1111 @@ -2008,6 +2021,7 @@ static int processcompl_compat(struct async *as, void __user * __user *arg)
1112 void __user *addr = as->userurb;
1113 unsigned int i;
1114
1115 + compute_isochronous_actual_length(urb);
1116 if (as->userbuffer && urb->actual_length) {
1117 if (copy_urb_data_to_user(as->userbuffer, urb))
1118 return -EFAULT;
1119 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
1120 index a6aaf2f193a4..37c418e581fb 100644
1121 --- a/drivers/usb/core/quirks.c
1122 +++ b/drivers/usb/core/quirks.c
1123 @@ -221,6 +221,9 @@ static const struct usb_device_id usb_quirk_list[] = {
1124 /* Corsair Strafe RGB */
1125 { USB_DEVICE(0x1b1c, 0x1b20), .driver_info = USB_QUIRK_DELAY_INIT },
1126
1127 + /* Corsair K70 LUX */
1128 + { USB_DEVICE(0x1b1c, 0x1b36), .driver_info = USB_QUIRK_DELAY_INIT },
1129 +
1130 /* MIDI keyboard WORLDE MINI */
1131 { USB_DEVICE(0x1c75, 0x0204), .driver_info =
1132 USB_QUIRK_CONFIG_INTF_STRINGS },
1133 diff --git a/drivers/usb/early/xhci-dbc.h b/drivers/usb/early/xhci-dbc.h
1134 index 2df0f6e613fe..a516cab0bf4a 100644
1135 --- a/drivers/usb/early/xhci-dbc.h
1136 +++ b/drivers/usb/early/xhci-dbc.h
1137 @@ -90,8 +90,8 @@ struct xdbc_context {
1138
1139 #define XDBC_INFO_CONTEXT_SIZE 48
1140 #define XDBC_MAX_STRING_LENGTH 64
1141 -#define XDBC_STRING_MANUFACTURER "Linux"
1142 -#define XDBC_STRING_PRODUCT "Remote GDB"
1143 +#define XDBC_STRING_MANUFACTURER "Linux Foundation"
1144 +#define XDBC_STRING_PRODUCT "Linux USB GDB Target"
1145 #define XDBC_STRING_SERIAL "0001"
1146
1147 struct xdbc_strings {
1148 @@ -103,7 +103,7 @@ struct xdbc_strings {
1149
1150 #define XDBC_PROTOCOL 1 /* GNU Remote Debug Command Set */
1151 #define XDBC_VENDOR_ID 0x1d6b /* Linux Foundation 0x1d6b */
1152 -#define XDBC_PRODUCT_ID 0x0004 /* __le16 idProduct; device 0004 */
1153 +#define XDBC_PRODUCT_ID 0x0011 /* __le16 idProduct; device 0011 */
1154 #define XDBC_DEVICE_REV 0x0010 /* 0.10 */
1155
1156 /*
1157 diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
1158 index 8b342587f8ad..ef8f7d63a8f0 100644
1159 --- a/drivers/usb/gadget/function/f_fs.c
1160 +++ b/drivers/usb/gadget/function/f_fs.c
1161 @@ -3677,6 +3677,7 @@ static void ffs_closed(struct ffs_data *ffs)
1162 goto done;
1163
1164 ffs_obj->desc_ready = false;
1165 + ffs_obj->ffs_data = NULL;
1166
1167 if (test_and_clear_bit(FFS_FL_CALL_CLOSED_CALLBACK, &ffs->flags) &&
1168 ffs_obj->ffs_closed_callback)
1169 diff --git a/drivers/usb/serial/garmin_gps.c b/drivers/usb/serial/garmin_gps.c
1170 index b2f2e87aed94..91e7e3a166a5 100644
1171 --- a/drivers/usb/serial/garmin_gps.c
1172 +++ b/drivers/usb/serial/garmin_gps.c
1173 @@ -138,6 +138,7 @@ struct garmin_data {
1174 __u8 privpkt[4*6];
1175 spinlock_t lock;
1176 struct list_head pktlist;
1177 + struct usb_anchor write_urbs;
1178 };
1179
1180
1181 @@ -905,13 +906,19 @@ static int garmin_init_session(struct usb_serial_port *port)
1182 sizeof(GARMIN_START_SESSION_REQ), 0);
1183
1184 if (status < 0)
1185 - break;
1186 + goto err_kill_urbs;
1187 }
1188
1189 if (status > 0)
1190 status = 0;
1191 }
1192
1193 + return status;
1194 +
1195 +err_kill_urbs:
1196 + usb_kill_anchored_urbs(&garmin_data_p->write_urbs);
1197 + usb_kill_urb(port->interrupt_in_urb);
1198 +
1199 return status;
1200 }
1201
1202 @@ -930,7 +937,6 @@ static int garmin_open(struct tty_struct *tty, struct usb_serial_port *port)
1203 spin_unlock_irqrestore(&garmin_data_p->lock, flags);
1204
1205 /* shutdown any bulk reads that might be going on */
1206 - usb_kill_urb(port->write_urb);
1207 usb_kill_urb(port->read_urb);
1208
1209 if (garmin_data_p->state == STATE_RESET)
1210 @@ -953,7 +959,7 @@ static void garmin_close(struct usb_serial_port *port)
1211
1212 /* shutdown our urbs */
1213 usb_kill_urb(port->read_urb);
1214 - usb_kill_urb(port->write_urb);
1215 + usb_kill_anchored_urbs(&garmin_data_p->write_urbs);
1216
1217 /* keep reset state so we know that we must start a new session */
1218 if (garmin_data_p->state != STATE_RESET)
1219 @@ -1037,12 +1043,14 @@ static int garmin_write_bulk(struct usb_serial_port *port,
1220 }
1221
1222 /* send it down the pipe */
1223 + usb_anchor_urb(urb, &garmin_data_p->write_urbs);
1224 status = usb_submit_urb(urb, GFP_ATOMIC);
1225 if (status) {
1226 dev_err(&port->dev,
1227 "%s - usb_submit_urb(write bulk) failed with status = %d\n",
1228 __func__, status);
1229 count = status;
1230 + usb_unanchor_urb(urb);
1231 kfree(buffer);
1232 }
1233
1234 @@ -1401,9 +1409,16 @@ static int garmin_port_probe(struct usb_serial_port *port)
1235 garmin_data_p->state = 0;
1236 garmin_data_p->flags = 0;
1237 garmin_data_p->count = 0;
1238 + init_usb_anchor(&garmin_data_p->write_urbs);
1239 usb_set_serial_port_data(port, garmin_data_p);
1240
1241 status = garmin_init_session(port);
1242 + if (status)
1243 + goto err_free;
1244 +
1245 + return 0;
1246 +err_free:
1247 + kfree(garmin_data_p);
1248
1249 return status;
1250 }
1251 @@ -1413,6 +1428,7 @@ static int garmin_port_remove(struct usb_serial_port *port)
1252 {
1253 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port);
1254
1255 + usb_kill_anchored_urbs(&garmin_data_p->write_urbs);
1256 usb_kill_urb(port->interrupt_in_urb);
1257 del_timer_sync(&garmin_data_p->timer);
1258 kfree(garmin_data_p);
1259 diff --git a/drivers/usb/serial/metro-usb.c b/drivers/usb/serial/metro-usb.c
1260 index 14511d6a7d44..3950d44b80f1 100644
1261 --- a/drivers/usb/serial/metro-usb.c
1262 +++ b/drivers/usb/serial/metro-usb.c
1263 @@ -189,7 +189,7 @@ static int metrousb_open(struct tty_struct *tty, struct usb_serial_port *port)
1264 dev_err(&port->dev,
1265 "%s - failed submitting interrupt in urb, error code=%d\n",
1266 __func__, result);
1267 - goto exit;
1268 + return result;
1269 }
1270
1271 /* Send activate cmd to device */
1272 @@ -198,9 +198,14 @@ static int metrousb_open(struct tty_struct *tty, struct usb_serial_port *port)
1273 dev_err(&port->dev,
1274 "%s - failed to configure device, error code=%d\n",
1275 __func__, result);
1276 - goto exit;
1277 + goto err_kill_urb;
1278 }
1279 -exit:
1280 +
1281 + return 0;
1282 +
1283 +err_kill_urb:
1284 + usb_kill_urb(port->interrupt_in_urb);
1285 +
1286 return result;
1287 }
1288
1289 diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
1290 index eb9928963a53..9f9d3a904464 100644
1291 --- a/drivers/usb/serial/qcserial.c
1292 +++ b/drivers/usb/serial/qcserial.c
1293 @@ -148,6 +148,7 @@ static const struct usb_device_id id_table[] = {
1294 {DEVICE_SWI(0x1199, 0x68a2)}, /* Sierra Wireless MC7710 */
1295 {DEVICE_SWI(0x1199, 0x68c0)}, /* Sierra Wireless MC7304/MC7354 */
1296 {DEVICE_SWI(0x1199, 0x901c)}, /* Sierra Wireless EM7700 */
1297 + {DEVICE_SWI(0x1199, 0x901e)}, /* Sierra Wireless EM7355 QDL */
1298 {DEVICE_SWI(0x1199, 0x901f)}, /* Sierra Wireless EM7355 */
1299 {DEVICE_SWI(0x1199, 0x9040)}, /* Sierra Wireless Modem */
1300 {DEVICE_SWI(0x1199, 0x9041)}, /* Sierra Wireless MC7305/MC7355 */
1301 diff --git a/drivers/usb/serial/usb_debug.c b/drivers/usb/serial/usb_debug.c
1302 index 12f4c5a91e62..48f285a1ad00 100644
1303 --- a/drivers/usb/serial/usb_debug.c
1304 +++ b/drivers/usb/serial/usb_debug.c
1305 @@ -34,13 +34,13 @@ static const struct usb_device_id id_table[] = {
1306 };
1307
1308 static const struct usb_device_id dbc_id_table[] = {
1309 - { USB_DEVICE(0x1d6b, 0x0004) },
1310 + { USB_DEVICE(0x1d6b, 0x0011) },
1311 { },
1312 };
1313
1314 static const struct usb_device_id id_table_combined[] = {
1315 { USB_DEVICE(0x0525, 0x127a) },
1316 - { USB_DEVICE(0x1d6b, 0x0004) },
1317 + { USB_DEVICE(0x1d6b, 0x0011) },
1318 { },
1319 };
1320 MODULE_DEVICE_TABLE(usb, id_table_combined);
1321 diff --git a/tools/testing/selftests/x86/protection_keys.c b/tools/testing/selftests/x86/protection_keys.c
1322 index 555e43ca846b..7a1cc0e56d2d 100644
1323 --- a/tools/testing/selftests/x86/protection_keys.c
1324 +++ b/tools/testing/selftests/x86/protection_keys.c
1325 @@ -189,17 +189,29 @@ void lots_o_noops_around_write(int *write_to_me)
1326 #define u64 uint64_t
1327
1328 #ifdef __i386__
1329 -#define SYS_mprotect_key 380
1330 -#define SYS_pkey_alloc 381
1331 -#define SYS_pkey_free 382
1332 +
1333 +#ifndef SYS_mprotect_key
1334 +# define SYS_mprotect_key 380
1335 +#endif
1336 +#ifndef SYS_pkey_alloc
1337 +# define SYS_pkey_alloc 381
1338 +# define SYS_pkey_free 382
1339 +#endif
1340 #define REG_IP_IDX REG_EIP
1341 #define si_pkey_offset 0x14
1342 +
1343 #else
1344 -#define SYS_mprotect_key 329
1345 -#define SYS_pkey_alloc 330
1346 -#define SYS_pkey_free 331
1347 +
1348 +#ifndef SYS_mprotect_key
1349 +# define SYS_mprotect_key 329
1350 +#endif
1351 +#ifndef SYS_pkey_alloc
1352 +# define SYS_pkey_alloc 330
1353 +# define SYS_pkey_free 331
1354 +#endif
1355 #define REG_IP_IDX REG_RIP
1356 #define si_pkey_offset 0x20
1357 +
1358 #endif
1359
1360 void dump_mem(void *dumpme, int len_bytes)