Magellan Linux

Contents of /trunk/kernel-alx/patches-4.4/0147-4.4.48-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2883 - (show annotations) (download)
Mon Mar 27 13:49:22 2017 UTC (7 years, 1 month ago) by niro
File size: 34276 byte(s)
linux-4.4.48
1 diff --git a/Makefile b/Makefile
2 index 7b233ac7f86c..0793cd412656 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 4
8 -SUBLEVEL = 47
9 +SUBLEVEL = 48
10 EXTRAVERSION =
11 NAME = Blurry Fish Butt
12
13 diff --git a/arch/arm64/crypto/aes-modes.S b/arch/arm64/crypto/aes-modes.S
14 index c53dbeae79f2..838dad5c209f 100644
15 --- a/arch/arm64/crypto/aes-modes.S
16 +++ b/arch/arm64/crypto/aes-modes.S
17 @@ -193,15 +193,16 @@ AES_ENTRY(aes_cbc_encrypt)
18 cbz w6, .Lcbcencloop
19
20 ld1 {v0.16b}, [x5] /* get iv */
21 - enc_prepare w3, x2, x5
22 + enc_prepare w3, x2, x6
23
24 .Lcbcencloop:
25 ld1 {v1.16b}, [x1], #16 /* get next pt block */
26 eor v0.16b, v0.16b, v1.16b /* ..and xor with iv */
27 - encrypt_block v0, w3, x2, x5, w6
28 + encrypt_block v0, w3, x2, x6, w7
29 st1 {v0.16b}, [x0], #16
30 subs w4, w4, #1
31 bne .Lcbcencloop
32 + st1 {v0.16b}, [x5] /* return iv */
33 ret
34 AES_ENDPROC(aes_cbc_encrypt)
35
36 @@ -211,7 +212,7 @@ AES_ENTRY(aes_cbc_decrypt)
37 cbz w6, .LcbcdecloopNx
38
39 ld1 {v7.16b}, [x5] /* get iv */
40 - dec_prepare w3, x2, x5
41 + dec_prepare w3, x2, x6
42
43 .LcbcdecloopNx:
44 #if INTERLEAVE >= 2
45 @@ -248,7 +249,7 @@ AES_ENTRY(aes_cbc_decrypt)
46 .Lcbcdecloop:
47 ld1 {v1.16b}, [x1], #16 /* get next ct block */
48 mov v0.16b, v1.16b /* ...and copy to v0 */
49 - decrypt_block v0, w3, x2, x5, w6
50 + decrypt_block v0, w3, x2, x6, w7
51 eor v0.16b, v0.16b, v7.16b /* xor with iv => pt */
52 mov v7.16b, v1.16b /* ct is next iv */
53 st1 {v0.16b}, [x0], #16
54 @@ -256,6 +257,7 @@ AES_ENTRY(aes_cbc_decrypt)
55 bne .Lcbcdecloop
56 .Lcbcdecout:
57 FRAME_POP
58 + st1 {v7.16b}, [x5] /* return iv */
59 ret
60 AES_ENDPROC(aes_cbc_decrypt)
61
62 @@ -267,24 +269,15 @@ AES_ENDPROC(aes_cbc_decrypt)
63
64 AES_ENTRY(aes_ctr_encrypt)
65 FRAME_PUSH
66 - cbnz w6, .Lctrfirst /* 1st time around? */
67 - umov x5, v4.d[1] /* keep swabbed ctr in reg */
68 - rev x5, x5
69 -#if INTERLEAVE >= 2
70 - cmn w5, w4 /* 32 bit overflow? */
71 - bcs .Lctrinc
72 - add x5, x5, #1 /* increment BE ctr */
73 - b .LctrincNx
74 -#else
75 - b .Lctrinc
76 -#endif
77 -.Lctrfirst:
78 + cbz w6, .Lctrnotfirst /* 1st time around? */
79 enc_prepare w3, x2, x6
80 ld1 {v4.16b}, [x5]
81 - umov x5, v4.d[1] /* keep swabbed ctr in reg */
82 - rev x5, x5
83 +
84 +.Lctrnotfirst:
85 + umov x8, v4.d[1] /* keep swabbed ctr in reg */
86 + rev x8, x8
87 #if INTERLEAVE >= 2
88 - cmn w5, w4 /* 32 bit overflow? */
89 + cmn w8, w4 /* 32 bit overflow? */
90 bcs .Lctrloop
91 .LctrloopNx:
92 subs w4, w4, #INTERLEAVE
93 @@ -292,11 +285,11 @@ AES_ENTRY(aes_ctr_encrypt)
94 #if INTERLEAVE == 2
95 mov v0.8b, v4.8b
96 mov v1.8b, v4.8b
97 - rev x7, x5
98 - add x5, x5, #1
99 + rev x7, x8
100 + add x8, x8, #1
101 ins v0.d[1], x7
102 - rev x7, x5
103 - add x5, x5, #1
104 + rev x7, x8
105 + add x8, x8, #1
106 ins v1.d[1], x7
107 ld1 {v2.16b-v3.16b}, [x1], #32 /* get 2 input blocks */
108 do_encrypt_block2x
109 @@ -305,7 +298,7 @@ AES_ENTRY(aes_ctr_encrypt)
110 st1 {v0.16b-v1.16b}, [x0], #32
111 #else
112 ldr q8, =0x30000000200000001 /* addends 1,2,3[,0] */
113 - dup v7.4s, w5
114 + dup v7.4s, w8
115 mov v0.16b, v4.16b
116 add v7.4s, v7.4s, v8.4s
117 mov v1.16b, v4.16b
118 @@ -323,18 +316,12 @@ AES_ENTRY(aes_ctr_encrypt)
119 eor v2.16b, v7.16b, v2.16b
120 eor v3.16b, v5.16b, v3.16b
121 st1 {v0.16b-v3.16b}, [x0], #64
122 - add x5, x5, #INTERLEAVE
123 + add x8, x8, #INTERLEAVE
124 #endif
125 - cbz w4, .LctroutNx
126 -.LctrincNx:
127 - rev x7, x5
128 + rev x7, x8
129 ins v4.d[1], x7
130 + cbz w4, .Lctrout
131 b .LctrloopNx
132 -.LctroutNx:
133 - sub x5, x5, #1
134 - rev x7, x5
135 - ins v4.d[1], x7
136 - b .Lctrout
137 .Lctr1x:
138 adds w4, w4, #INTERLEAVE
139 beq .Lctrout
140 @@ -342,30 +329,39 @@ AES_ENTRY(aes_ctr_encrypt)
141 .Lctrloop:
142 mov v0.16b, v4.16b
143 encrypt_block v0, w3, x2, x6, w7
144 +
145 + adds x8, x8, #1 /* increment BE ctr */
146 + rev x7, x8
147 + ins v4.d[1], x7
148 + bcs .Lctrcarry /* overflow? */
149 +
150 +.Lctrcarrydone:
151 subs w4, w4, #1
152 bmi .Lctrhalfblock /* blocks < 0 means 1/2 block */
153 ld1 {v3.16b}, [x1], #16
154 eor v3.16b, v0.16b, v3.16b
155 st1 {v3.16b}, [x0], #16
156 - beq .Lctrout
157 -.Lctrinc:
158 - adds x5, x5, #1 /* increment BE ctr */
159 - rev x7, x5
160 - ins v4.d[1], x7
161 - bcc .Lctrloop /* no overflow? */
162 - umov x7, v4.d[0] /* load upper word of ctr */
163 - rev x7, x7 /* ... to handle the carry */
164 - add x7, x7, #1
165 - rev x7, x7
166 - ins v4.d[0], x7
167 - b .Lctrloop
168 + bne .Lctrloop
169 +
170 +.Lctrout:
171 + st1 {v4.16b}, [x5] /* return next CTR value */
172 + FRAME_POP
173 + ret
174 +
175 .Lctrhalfblock:
176 ld1 {v3.8b}, [x1]
177 eor v3.8b, v0.8b, v3.8b
178 st1 {v3.8b}, [x0]
179 -.Lctrout:
180 FRAME_POP
181 ret
182 +
183 +.Lctrcarry:
184 + umov x7, v4.d[0] /* load upper word of ctr */
185 + rev x7, x7 /* ... to handle the carry */
186 + add x7, x7, #1
187 + rev x7, x7
188 + ins v4.d[0], x7
189 + b .Lctrcarrydone
190 AES_ENDPROC(aes_ctr_encrypt)
191 .ltorg
192
193 diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c
194 index 300382e5a2cc..c314db8b798c 100644
195 --- a/arch/powerpc/kernel/eeh_driver.c
196 +++ b/arch/powerpc/kernel/eeh_driver.c
197 @@ -485,7 +485,7 @@ static void *eeh_pe_detach_dev(void *data, void *userdata)
198 static void *__eeh_clear_pe_frozen_state(void *data, void *flag)
199 {
200 struct eeh_pe *pe = (struct eeh_pe *)data;
201 - bool *clear_sw_state = flag;
202 + bool clear_sw_state = *(bool *)flag;
203 int i, rc = 1;
204
205 for (i = 0; rc && i < 3; i++)
206 diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
207 index 7b89e7b305e6..3139533640fc 100644
208 --- a/arch/powerpc/kernel/prom_init.c
209 +++ b/arch/powerpc/kernel/prom_init.c
210 @@ -2664,6 +2664,9 @@ static void __init prom_find_boot_cpu(void)
211
212 cpu_pkg = call_prom("instance-to-package", 1, 1, prom_cpu);
213
214 + if (!PHANDLE_VALID(cpu_pkg))
215 + return;
216 +
217 prom_getprop(cpu_pkg, "reg", &rval, sizeof(rval));
218 prom.cpu = be32_to_cpu(rval);
219
220 diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
221 index aaacbd667212..1e5d2f07416b 100644
222 --- a/arch/x86/kernel/apic/io_apic.c
223 +++ b/arch/x86/kernel/apic/io_apic.c
224 @@ -2117,6 +2117,7 @@ static inline void __init check_timer(void)
225 if (idx != -1 && irq_trigger(idx))
226 unmask_ioapic_irq(irq_get_chip_data(0));
227 }
228 + irq_domain_deactivate_irq(irq_data);
229 irq_domain_activate_irq(irq_data);
230 if (timer_irq_works()) {
231 if (disable_timer_pin_1 > 0)
232 @@ -2138,6 +2139,7 @@ static inline void __init check_timer(void)
233 * legacy devices should be connected to IO APIC #0
234 */
235 replace_pin_at_irq_node(data, node, apic1, pin1, apic2, pin2);
236 + irq_domain_deactivate_irq(irq_data);
237 irq_domain_activate_irq(irq_data);
238 legacy_pic->unmask(0);
239 if (timer_irq_works()) {
240 diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c
241 index b8e6ff5cd5d0..acc9b8f19ca8 100644
242 --- a/arch/x86/kernel/hpet.c
243 +++ b/arch/x86/kernel/hpet.c
244 @@ -351,6 +351,7 @@ static int hpet_resume(struct clock_event_device *evt, int timer)
245 } else {
246 struct hpet_dev *hdev = EVT_TO_HPET_DEV(evt);
247
248 + irq_domain_deactivate_irq(irq_get_irq_data(hdev->irq));
249 irq_domain_activate_irq(irq_get_irq_data(hdev->irq));
250 disable_irq(hdev->irq);
251 irq_set_affinity(hdev->irq, cpumask_of(hdev->cpu));
252 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
253 index 25a6efcfdf7f..e75095fa414e 100644
254 --- a/arch/x86/kvm/x86.c
255 +++ b/arch/x86/kvm/x86.c
256 @@ -3057,6 +3057,7 @@ static void fill_xsave(u8 *dest, struct kvm_vcpu *vcpu)
257 memcpy(dest, xsave, XSAVE_HDR_OFFSET);
258
259 /* Set XSTATE_BV */
260 + xstate_bv &= vcpu->arch.guest_supported_xcr0 | XFEATURE_MASK_FPSSE;
261 *(u64 *)(dest + XSAVE_HDR_OFFSET) = xstate_bv;
262
263 /*
264 diff --git a/crypto/algapi.c b/crypto/algapi.c
265 index 59bf491fe3d8..43f5bdb6b570 100644
266 --- a/crypto/algapi.c
267 +++ b/crypto/algapi.c
268 @@ -357,6 +357,7 @@ int crypto_register_alg(struct crypto_alg *alg)
269 struct crypto_larval *larval;
270 int err;
271
272 + alg->cra_flags &= ~CRYPTO_ALG_DEAD;
273 err = crypto_check_alg(alg);
274 if (err)
275 return err;
276 diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
277 index bd370c98f77d..b0b77b61c40c 100644
278 --- a/drivers/ata/libata-core.c
279 +++ b/drivers/ata/libata-core.c
280 @@ -4139,10 +4139,10 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
281 { "ST380013AS", "3.20", ATA_HORKAGE_MAX_SEC_1024 },
282
283 /*
284 - * Device times out with higher max sects.
285 + * These devices time out with higher max sects.
286 * https://bugzilla.kernel.org/show_bug.cgi?id=121671
287 */
288 - { "LITEON CX1-JB256-HP", NULL, ATA_HORKAGE_MAX_SEC_1024 },
289 + { "LITEON CX1-JB*-HP", NULL, ATA_HORKAGE_MAX_SEC_1024 },
290
291 /* Devices we expect to fail diagnostics */
292
293 diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
294 index bd74ee555278..729f26322095 100644
295 --- a/drivers/ata/sata_mv.c
296 +++ b/drivers/ata/sata_mv.c
297 @@ -4121,6 +4121,9 @@ static int mv_platform_probe(struct platform_device *pdev)
298 host->iomap = NULL;
299 hpriv->base = devm_ioremap(&pdev->dev, res->start,
300 resource_size(res));
301 + if (!hpriv->base)
302 + return -ENOMEM;
303 +
304 hpriv->base -= SATAHC0_REG_BASE;
305
306 hpriv->clk = clk_get(&pdev->dev, NULL);
307 diff --git a/drivers/base/memory.c b/drivers/base/memory.c
308 index 25425d3f2575..48c0a1d0dd3a 100644
309 --- a/drivers/base/memory.c
310 +++ b/drivers/base/memory.c
311 @@ -388,30 +388,29 @@ static ssize_t show_valid_zones(struct device *dev,
312 {
313 struct memory_block *mem = to_memory_block(dev);
314 unsigned long start_pfn, end_pfn;
315 + unsigned long valid_start, valid_end;
316 unsigned long nr_pages = PAGES_PER_SECTION * sections_per_block;
317 - struct page *first_page;
318 struct zone *zone;
319
320 start_pfn = section_nr_to_pfn(mem->start_section_nr);
321 end_pfn = start_pfn + nr_pages;
322 - first_page = pfn_to_page(start_pfn);
323
324 /* The block contains more than one zone can not be offlined. */
325 - if (!test_pages_in_a_zone(start_pfn, end_pfn))
326 + if (!test_pages_in_a_zone(start_pfn, end_pfn, &valid_start, &valid_end))
327 return sprintf(buf, "none\n");
328
329 - zone = page_zone(first_page);
330 + zone = page_zone(pfn_to_page(valid_start));
331
332 if (zone_idx(zone) == ZONE_MOVABLE - 1) {
333 /*The mem block is the last memoryblock of this zone.*/
334 - if (end_pfn == zone_end_pfn(zone))
335 + if (valid_end == zone_end_pfn(zone))
336 return sprintf(buf, "%s %s\n",
337 zone->name, (zone + 1)->name);
338 }
339
340 if (zone_idx(zone) == ZONE_MOVABLE) {
341 /*The mem block is the first memoryblock of ZONE_MOVABLE.*/
342 - if (start_pfn == zone->zone_start_pfn)
343 + if (valid_start == zone->zone_start_pfn)
344 return sprintf(buf, "%s %s\n",
345 zone->name, (zone - 1)->name);
346 }
347 diff --git a/drivers/gpu/drm/nouveau/dispnv04/hw.c b/drivers/gpu/drm/nouveau/dispnv04/hw.c
348 index 956a833b8200..57c7389feee4 100644
349 --- a/drivers/gpu/drm/nouveau/dispnv04/hw.c
350 +++ b/drivers/gpu/drm/nouveau/dispnv04/hw.c
351 @@ -222,6 +222,7 @@ nouveau_hw_get_clock(struct drm_device *dev, enum nvbios_pll_type plltype)
352 uint32_t mpllP;
353
354 pci_read_config_dword(pci_get_bus_and_slot(0, 3), 0x6c, &mpllP);
355 + mpllP = (mpllP >> 8) & 0xf;
356 if (!mpllP)
357 mpllP = 4;
358
359 @@ -232,7 +233,7 @@ nouveau_hw_get_clock(struct drm_device *dev, enum nvbios_pll_type plltype)
360 uint32_t clock;
361
362 pci_read_config_dword(pci_get_bus_and_slot(0, 5), 0x4c, &clock);
363 - return clock;
364 + return clock / 1000;
365 }
366
367 ret = nouveau_hw_get_pllvals(dev, plltype, &pllvals);
368 diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c
369 index c1590b746f13..eb58cd7bfbc9 100644
370 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c
371 +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c
372 @@ -59,7 +59,7 @@ gt215_hda_eld(NV50_DISP_MTHD_V1)
373 );
374 }
375 for (i = 0; i < size; i++)
376 - nvkm_wr32(device, 0x61c440 + soff, (i << 8) | args->v0.data[0]);
377 + nvkm_wr32(device, 0x61c440 + soff, (i << 8) | args->v0.data[i]);
378 for (; i < 0x60; i++)
379 nvkm_wr32(device, 0x61c440 + soff, (i << 8));
380 nvkm_mask(device, 0x61c448 + soff, 0x80000003, 0x80000003);
381 diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
382 index 5c02d7bbc7f2..35e3fd9fadf6 100644
383 --- a/drivers/hid/wacom_wac.c
384 +++ b/drivers/hid/wacom_wac.c
385 @@ -148,19 +148,21 @@ static int wacom_pl_irq(struct wacom_wac *wacom)
386 wacom->id[0] = STYLUS_DEVICE_ID;
387 }
388
389 - pressure = (signed char)((data[7] << 1) | ((data[4] >> 2) & 1));
390 - if (features->pressure_max > 255)
391 - pressure = (pressure << 1) | ((data[4] >> 6) & 1);
392 - pressure += (features->pressure_max + 1) / 2;
393 -
394 - input_report_abs(input, ABS_X, data[3] | (data[2] << 7) | ((data[1] & 0x03) << 14));
395 - input_report_abs(input, ABS_Y, data[6] | (data[5] << 7) | ((data[4] & 0x03) << 14));
396 - input_report_abs(input, ABS_PRESSURE, pressure);
397 -
398 - input_report_key(input, BTN_TOUCH, data[4] & 0x08);
399 - input_report_key(input, BTN_STYLUS, data[4] & 0x10);
400 - /* Only allow the stylus2 button to be reported for the pen tool. */
401 - input_report_key(input, BTN_STYLUS2, (wacom->tool[0] == BTN_TOOL_PEN) && (data[4] & 0x20));
402 + if (prox) {
403 + pressure = (signed char)((data[7] << 1) | ((data[4] >> 2) & 1));
404 + if (features->pressure_max > 255)
405 + pressure = (pressure << 1) | ((data[4] >> 6) & 1);
406 + pressure += (features->pressure_max + 1) / 2;
407 +
408 + input_report_abs(input, ABS_X, data[3] | (data[2] << 7) | ((data[1] & 0x03) << 14));
409 + input_report_abs(input, ABS_Y, data[6] | (data[5] << 7) | ((data[4] & 0x03) << 14));
410 + input_report_abs(input, ABS_PRESSURE, pressure);
411 +
412 + input_report_key(input, BTN_TOUCH, data[4] & 0x08);
413 + input_report_key(input, BTN_STYLUS, data[4] & 0x10);
414 + /* Only allow the stylus2 button to be reported for the pen tool. */
415 + input_report_key(input, BTN_STYLUS2, (wacom->tool[0] == BTN_TOOL_PEN) && (data[4] & 0x20));
416 + }
417
418 if (!prox)
419 wacom->id[0] = 0;
420 diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
421 index 7277dfd7338f..bda164089904 100644
422 --- a/drivers/mmc/host/sdhci.c
423 +++ b/drivers/mmc/host/sdhci.c
424 @@ -2629,7 +2629,8 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id)
425 pr_err("%s: Card is consuming too much power!\n",
426 mmc_hostname(host->mmc));
427
428 - if (intmask & SDHCI_INT_CARD_INT) {
429 + if ((intmask & SDHCI_INT_CARD_INT) &&
430 + (host->ier & SDHCI_INT_CARD_INT)) {
431 sdhci_enable_sdio_irq_nolock(host, false);
432 host->thread_isr |= SDHCI_INT_CARD_INT;
433 result = IRQ_WAKE_THREAD;
434 diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
435 index 317e3558a35e..c6a012b5ba39 100644
436 --- a/drivers/pci/pcie/aspm.c
437 +++ b/drivers/pci/pcie/aspm.c
438 @@ -518,25 +518,32 @@ static struct pcie_link_state *alloc_pcie_link_state(struct pci_dev *pdev)
439 link = kzalloc(sizeof(*link), GFP_KERNEL);
440 if (!link)
441 return NULL;
442 +
443 INIT_LIST_HEAD(&link->sibling);
444 INIT_LIST_HEAD(&link->children);
445 INIT_LIST_HEAD(&link->link);
446 link->pdev = pdev;
447 - if (pci_pcie_type(pdev) != PCI_EXP_TYPE_ROOT_PORT) {
448 +
449 + /*
450 + * Root Ports and PCI/PCI-X to PCIe Bridges are roots of PCIe
451 + * hierarchies.
452 + */
453 + if (pci_pcie_type(pdev) == PCI_EXP_TYPE_ROOT_PORT ||
454 + pci_pcie_type(pdev) == PCI_EXP_TYPE_PCIE_BRIDGE) {
455 + link->root = link;
456 + } else {
457 struct pcie_link_state *parent;
458 +
459 parent = pdev->bus->parent->self->link_state;
460 if (!parent) {
461 kfree(link);
462 return NULL;
463 }
464 +
465 link->parent = parent;
466 + link->root = link->parent->root;
467 list_add(&link->link, &parent->children);
468 }
469 - /* Setup a pointer to the root port link */
470 - if (!link->parent)
471 - link->root = link;
472 - else
473 - link->root = link->parent->root;
474
475 list_add(&link->sibling, &link_list);
476 pdev->link_state = link;
477 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
478 index d2e50a27140c..24f9f98968a5 100644
479 --- a/drivers/usb/core/quirks.c
480 +++ b/drivers/usb/core/quirks.c
481 @@ -37,6 +37,10 @@ static const struct usb_device_id usb_quirk_list[] = {
482 /* CBM - Flash disk */
483 { USB_DEVICE(0x0204, 0x6025), .driver_info = USB_QUIRK_RESET_RESUME },
484
485 + /* WORLDE easy key (easykey.25) MIDI controller */
486 + { USB_DEVICE(0x0218, 0x0401), .driver_info =
487 + USB_QUIRK_CONFIG_INTF_STRINGS },
488 +
489 /* HP 5300/5370C scanner */
490 { USB_DEVICE(0x03f0, 0x0701), .driver_info =
491 USB_QUIRK_STRING_FETCH_255 },
492 diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
493 index 803c503a2e3d..cfda1a1c0ab6 100644
494 --- a/drivers/usb/gadget/function/f_fs.c
495 +++ b/drivers/usb/gadget/function/f_fs.c
496 @@ -2079,6 +2079,8 @@ static int __ffs_data_do_os_desc(enum ffs_os_desc_type type,
497 if (len < sizeof(*d) || h->interface >= ffs->interfaces_count)
498 return -EINVAL;
499 length = le32_to_cpu(d->dwSize);
500 + if (len < length)
501 + return -EINVAL;
502 type = le32_to_cpu(d->dwPropertyDataType);
503 if (type < USB_EXT_PROP_UNICODE ||
504 type > USB_EXT_PROP_UNICODE_MULTI) {
505 @@ -2087,6 +2089,11 @@ static int __ffs_data_do_os_desc(enum ffs_os_desc_type type,
506 return -EINVAL;
507 }
508 pnl = le16_to_cpu(d->wPropertyNameLength);
509 + if (length < 14 + pnl) {
510 + pr_vdebug("invalid os descriptor length: %d pnl:%d (descriptor %d)\n",
511 + length, pnl, type);
512 + return -EINVAL;
513 + }
514 pdl = le32_to_cpu(*(u32 *)((u8 *)data + 10 + pnl));
515 if (length != 14 + pnl + pdl) {
516 pr_vdebug("invalid os descriptor length: %d pnl:%d pdl:%d (descriptor %d)\n",
517 @@ -2171,6 +2178,9 @@ static int __ffs_data_got_descs(struct ffs_data *ffs,
518 }
519 }
520 if (flags & (1 << i)) {
521 + if (len < 4) {
522 + goto error;
523 + }
524 os_descs_count = get_unaligned_le32(data);
525 data += 4;
526 len -= 4;
527 @@ -2243,7 +2253,8 @@ static int __ffs_data_got_strings(struct ffs_data *ffs,
528
529 ENTER();
530
531 - if (unlikely(get_unaligned_le32(data) != FUNCTIONFS_STRINGS_MAGIC ||
532 + if (unlikely(len < 16 ||
533 + get_unaligned_le32(data) != FUNCTIONFS_STRINGS_MAGIC ||
534 get_unaligned_le32(data + 4) != len))
535 goto error;
536 str_count = get_unaligned_le32(data + 8);
537 diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
538 index 7ce31a4c7e7f..42cc72e54c05 100644
539 --- a/drivers/usb/serial/option.c
540 +++ b/drivers/usb/serial/option.c
541 @@ -2007,6 +2007,7 @@ static const struct usb_device_id option_ids[] = {
542 { USB_DEVICE_AND_INTERFACE_INFO(WETELECOM_VENDOR_ID, WETELECOM_PRODUCT_WMD200, 0xff, 0xff, 0xff) },
543 { USB_DEVICE_AND_INTERFACE_INFO(WETELECOM_VENDOR_ID, WETELECOM_PRODUCT_6802, 0xff, 0xff, 0xff) },
544 { USB_DEVICE_AND_INTERFACE_INFO(WETELECOM_VENDOR_ID, WETELECOM_PRODUCT_WMD300, 0xff, 0xff, 0xff) },
545 + { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0x421d, 0xff, 0xff, 0xff) }, /* HP lt2523 (Novatel E371) */
546 { } /* Terminating entry */
547 };
548 MODULE_DEVICE_TABLE(usb, option_ids);
549 diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
550 index 46fca6b75846..1db4b61bdf7b 100644
551 --- a/drivers/usb/serial/pl2303.c
552 +++ b/drivers/usb/serial/pl2303.c
553 @@ -49,6 +49,7 @@ static const struct usb_device_id id_table[] = {
554 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
555 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },
556 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) },
557 + { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID2) },
558 { USB_DEVICE(ATEN_VENDOR_ID2, ATEN_PRODUCT_ID) },
559 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) },
560 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID_UCSGT) },
561 diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h
562 index e3b7af8adfb7..09d9be88209e 100644
563 --- a/drivers/usb/serial/pl2303.h
564 +++ b/drivers/usb/serial/pl2303.h
565 @@ -27,6 +27,7 @@
566 #define ATEN_VENDOR_ID 0x0557
567 #define ATEN_VENDOR_ID2 0x0547
568 #define ATEN_PRODUCT_ID 0x2008
569 +#define ATEN_PRODUCT_ID2 0x2118
570
571 #define IODATA_VENDOR_ID 0x04bb
572 #define IODATA_PRODUCT_ID 0x0a03
573 diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
574 index 1bc6089b9008..696458db7e3c 100644
575 --- a/drivers/usb/serial/qcserial.c
576 +++ b/drivers/usb/serial/qcserial.c
577 @@ -124,6 +124,7 @@ static const struct usb_device_id id_table[] = {
578 {USB_DEVICE(0x1410, 0xa021)}, /* Novatel Gobi 3000 Composite */
579 {USB_DEVICE(0x413c, 0x8193)}, /* Dell Gobi 3000 QDL */
580 {USB_DEVICE(0x413c, 0x8194)}, /* Dell Gobi 3000 Composite */
581 + {USB_DEVICE(0x413c, 0x81a6)}, /* Dell DW5570 QDL (MC8805) */
582 {USB_DEVICE(0x1199, 0x68a4)}, /* Sierra Wireless QDL */
583 {USB_DEVICE(0x1199, 0x68a5)}, /* Sierra Wireless Modem */
584 {USB_DEVICE(0x1199, 0x68a8)}, /* Sierra Wireless QDL */
585 diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
586 index 833e5844a2db..97d1a15873c5 100644
587 --- a/fs/cifs/readdir.c
588 +++ b/fs/cifs/readdir.c
589 @@ -282,6 +282,7 @@ initiate_cifs_search(const unsigned int xid, struct file *file)
590 rc = -ENOMEM;
591 goto error_exit;
592 }
593 + spin_lock_init(&cifsFile->file_info_lock);
594 file->private_data = cifsFile;
595 cifsFile->tlink = cifs_get_tlink(tlink);
596 tcon = tlink_tcon(tlink);
597 diff --git a/fs/ext4/super.c b/fs/ext4/super.c
598 index 68640e6f95c5..b405a7b74ce0 100644
599 --- a/fs/ext4/super.c
600 +++ b/fs/ext4/super.c
601 @@ -3663,6 +3663,15 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
602 (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb)));
603 db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) /
604 EXT4_DESC_PER_BLOCK(sb);
605 + if (ext4_has_feature_meta_bg(sb)) {
606 + if (le32_to_cpu(es->s_first_meta_bg) >= db_count) {
607 + ext4_msg(sb, KERN_WARNING,
608 + "first meta block group too large: %u "
609 + "(group descriptor block count %u)",
610 + le32_to_cpu(es->s_first_meta_bg), db_count);
611 + goto failed_mount;
612 + }
613 + }
614 sbi->s_group_desc = ext4_kvmalloc(db_count *
615 sizeof(struct buffer_head *),
616 GFP_KERNEL);
617 diff --git a/fs/nfsd/nfs4layouts.c b/fs/nfsd/nfs4layouts.c
618 index c9d6c715c0fb..9eed219f57a5 100644
619 --- a/fs/nfsd/nfs4layouts.c
620 +++ b/fs/nfsd/nfs4layouts.c
621 @@ -189,10 +189,11 @@ nfsd4_alloc_layout_stateid(struct nfsd4_compound_state *cstate,
622 struct nfs4_layout_stateid *ls;
623 struct nfs4_stid *stp;
624
625 - stp = nfs4_alloc_stid(cstate->clp, nfs4_layout_stateid_cache);
626 + stp = nfs4_alloc_stid(cstate->clp, nfs4_layout_stateid_cache,
627 + nfsd4_free_layout_stateid);
628 if (!stp)
629 return NULL;
630 - stp->sc_free = nfsd4_free_layout_stateid;
631 +
632 get_nfs4_file(fp);
633 stp->sc_file = fp;
634
635 diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
636 index 55638110cb06..c7f1ce41442a 100644
637 --- a/fs/nfsd/nfs4state.c
638 +++ b/fs/nfsd/nfs4state.c
639 @@ -553,8 +553,8 @@ out:
640 return co;
641 }
642
643 -struct nfs4_stid *nfs4_alloc_stid(struct nfs4_client *cl,
644 - struct kmem_cache *slab)
645 +struct nfs4_stid *nfs4_alloc_stid(struct nfs4_client *cl, struct kmem_cache *slab,
646 + void (*sc_free)(struct nfs4_stid *))
647 {
648 struct nfs4_stid *stid;
649 int new_id;
650 @@ -570,6 +570,8 @@ struct nfs4_stid *nfs4_alloc_stid(struct nfs4_client *cl,
651 idr_preload_end();
652 if (new_id < 0)
653 goto out_free;
654 +
655 + stid->sc_free = sc_free;
656 stid->sc_client = cl;
657 stid->sc_stateid.si_opaque.so_id = new_id;
658 stid->sc_stateid.si_opaque.so_clid = cl->cl_clientid;
659 @@ -595,15 +597,12 @@ out_free:
660 static struct nfs4_ol_stateid * nfs4_alloc_open_stateid(struct nfs4_client *clp)
661 {
662 struct nfs4_stid *stid;
663 - struct nfs4_ol_stateid *stp;
664
665 - stid = nfs4_alloc_stid(clp, stateid_slab);
666 + stid = nfs4_alloc_stid(clp, stateid_slab, nfs4_free_ol_stateid);
667 if (!stid)
668 return NULL;
669
670 - stp = openlockstateid(stid);
671 - stp->st_stid.sc_free = nfs4_free_ol_stateid;
672 - return stp;
673 + return openlockstateid(stid);
674 }
675
676 static void nfs4_free_deleg(struct nfs4_stid *stid)
677 @@ -701,11 +700,10 @@ alloc_init_deleg(struct nfs4_client *clp, struct svc_fh *current_fh,
678 goto out_dec;
679 if (delegation_blocked(&current_fh->fh_handle))
680 goto out_dec;
681 - dp = delegstateid(nfs4_alloc_stid(clp, deleg_slab));
682 + dp = delegstateid(nfs4_alloc_stid(clp, deleg_slab, nfs4_free_deleg));
683 if (dp == NULL)
684 goto out_dec;
685
686 - dp->dl_stid.sc_free = nfs4_free_deleg;
687 /*
688 * delegation seqid's are never incremented. The 4.1 special
689 * meaning of seqid 0 isn't meaningful, really, but let's avoid
690 @@ -5396,7 +5394,6 @@ init_lock_stateid(struct nfs4_ol_stateid *stp, struct nfs4_lockowner *lo,
691 stp->st_stateowner = nfs4_get_stateowner(&lo->lo_owner);
692 get_nfs4_file(fp);
693 stp->st_stid.sc_file = fp;
694 - stp->st_stid.sc_free = nfs4_free_lock_stateid;
695 stp->st_access_bmap = 0;
696 stp->st_deny_bmap = open_stp->st_deny_bmap;
697 stp->st_openstp = open_stp;
698 @@ -5439,7 +5436,7 @@ find_or_create_lock_stateid(struct nfs4_lockowner *lo, struct nfs4_file *fi,
699 lst = find_lock_stateid(lo, fi);
700 if (lst == NULL) {
701 spin_unlock(&clp->cl_lock);
702 - ns = nfs4_alloc_stid(clp, stateid_slab);
703 + ns = nfs4_alloc_stid(clp, stateid_slab, nfs4_free_lock_stateid);
704 if (ns == NULL)
705 return NULL;
706
707 diff --git a/fs/nfsd/state.h b/fs/nfsd/state.h
708 index 77860b75da9d..5134eedcb16c 100644
709 --- a/fs/nfsd/state.h
710 +++ b/fs/nfsd/state.h
711 @@ -583,8 +583,8 @@ extern __be32 nfs4_preprocess_stateid_op(struct svc_rqst *rqstp,
712 __be32 nfsd4_lookup_stateid(struct nfsd4_compound_state *cstate,
713 stateid_t *stateid, unsigned char typemask,
714 struct nfs4_stid **s, struct nfsd_net *nn);
715 -struct nfs4_stid *nfs4_alloc_stid(struct nfs4_client *cl,
716 - struct kmem_cache *slab);
717 +struct nfs4_stid *nfs4_alloc_stid(struct nfs4_client *cl, struct kmem_cache *slab,
718 + void (*sc_free)(struct nfs4_stid *));
719 void nfs4_unhash_stid(struct nfs4_stid *s);
720 void nfs4_put_stid(struct nfs4_stid *s);
721 void nfs4_inc_and_copy_stateid(stateid_t *dst, struct nfs4_stid *stid);
722 diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h
723 index 2ea574ff9714..538488bd1d3d 100644
724 --- a/include/linux/memory_hotplug.h
725 +++ b/include/linux/memory_hotplug.h
726 @@ -85,7 +85,8 @@ extern int zone_grow_waitqueues(struct zone *zone, unsigned long nr_pages);
727 extern int add_one_highpage(struct page *page, int pfn, int bad_ppro);
728 /* VM interface that may be used by firmware interface */
729 extern int online_pages(unsigned long, unsigned long, int);
730 -extern int test_pages_in_a_zone(unsigned long, unsigned long);
731 +extern int test_pages_in_a_zone(unsigned long start_pfn, unsigned long end_pfn,
732 + unsigned long *valid_start, unsigned long *valid_end);
733 extern void __offline_isolated_pages(unsigned long, unsigned long);
734
735 typedef void (*online_page_callback_t)(struct page *page);
736 diff --git a/include/linux/percpu-refcount.h b/include/linux/percpu-refcount.h
737 index 12c9b485beb7..abd7c01c84db 100644
738 --- a/include/linux/percpu-refcount.h
739 +++ b/include/linux/percpu-refcount.h
740 @@ -206,7 +206,7 @@ static inline void percpu_ref_get(struct percpu_ref *ref)
741 static inline bool percpu_ref_tryget(struct percpu_ref *ref)
742 {
743 unsigned long __percpu *percpu_count;
744 - int ret;
745 + bool ret;
746
747 rcu_read_lock_sched();
748
749 @@ -240,7 +240,7 @@ static inline bool percpu_ref_tryget(struct percpu_ref *ref)
750 static inline bool percpu_ref_tryget_live(struct percpu_ref *ref)
751 {
752 unsigned long __percpu *percpu_count;
753 - int ret = false;
754 + bool ret = false;
755
756 rcu_read_lock_sched();
757
758 diff --git a/kernel/events/core.c b/kernel/events/core.c
759 index bc6371b0e4fb..9bbe9ac23cf2 100644
760 --- a/kernel/events/core.c
761 +++ b/kernel/events/core.c
762 @@ -6039,6 +6039,27 @@ static void perf_event_mmap_event(struct perf_mmap_event *mmap_event)
763 char *buf = NULL;
764 char *name;
765
766 + if (vma->vm_flags & VM_READ)
767 + prot |= PROT_READ;
768 + if (vma->vm_flags & VM_WRITE)
769 + prot |= PROT_WRITE;
770 + if (vma->vm_flags & VM_EXEC)
771 + prot |= PROT_EXEC;
772 +
773 + if (vma->vm_flags & VM_MAYSHARE)
774 + flags = MAP_SHARED;
775 + else
776 + flags = MAP_PRIVATE;
777 +
778 + if (vma->vm_flags & VM_DENYWRITE)
779 + flags |= MAP_DENYWRITE;
780 + if (vma->vm_flags & VM_MAYEXEC)
781 + flags |= MAP_EXECUTABLE;
782 + if (vma->vm_flags & VM_LOCKED)
783 + flags |= MAP_LOCKED;
784 + if (vma->vm_flags & VM_HUGETLB)
785 + flags |= MAP_HUGETLB;
786 +
787 if (file) {
788 struct inode *inode;
789 dev_t dev;
790 @@ -6065,27 +6086,6 @@ static void perf_event_mmap_event(struct perf_mmap_event *mmap_event)
791 maj = MAJOR(dev);
792 min = MINOR(dev);
793
794 - if (vma->vm_flags & VM_READ)
795 - prot |= PROT_READ;
796 - if (vma->vm_flags & VM_WRITE)
797 - prot |= PROT_WRITE;
798 - if (vma->vm_flags & VM_EXEC)
799 - prot |= PROT_EXEC;
800 -
801 - if (vma->vm_flags & VM_MAYSHARE)
802 - flags = MAP_SHARED;
803 - else
804 - flags = MAP_PRIVATE;
805 -
806 - if (vma->vm_flags & VM_DENYWRITE)
807 - flags |= MAP_DENYWRITE;
808 - if (vma->vm_flags & VM_MAYEXEC)
809 - flags |= MAP_EXECUTABLE;
810 - if (vma->vm_flags & VM_LOCKED)
811 - flags |= MAP_LOCKED;
812 - if (vma->vm_flags & VM_HUGETLB)
813 - flags |= MAP_HUGETLB;
814 -
815 goto got_name;
816 } else {
817 if (vma->vm_ops && vma->vm_ops->name) {
818 diff --git a/mm/filemap.c b/mm/filemap.c
819 index c588d1222b2a..c33c31d75a2b 100644
820 --- a/mm/filemap.c
821 +++ b/mm/filemap.c
822 @@ -1559,6 +1559,11 @@ static ssize_t do_generic_file_read(struct file *filp, loff_t *ppos,
823
824 cond_resched();
825 find_page:
826 + if (fatal_signal_pending(current)) {
827 + error = -EINTR;
828 + goto out;
829 + }
830 +
831 page = find_get_page(mapping, index);
832 if (!page) {
833 page_cache_sync_readahead(mapping,
834 diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
835 index a042a9d537bb..a18923e4359d 100644
836 --- a/mm/memory_hotplug.c
837 +++ b/mm/memory_hotplug.c
838 @@ -1371,17 +1371,20 @@ int is_mem_section_removable(unsigned long start_pfn, unsigned long nr_pages)
839 }
840
841 /*
842 - * Confirm all pages in a range [start, end) is belongs to the same zone.
843 + * Confirm all pages in a range [start, end) belong to the same zone.
844 + * When true, return its valid [start, end).
845 */
846 -int test_pages_in_a_zone(unsigned long start_pfn, unsigned long end_pfn)
847 +int test_pages_in_a_zone(unsigned long start_pfn, unsigned long end_pfn,
848 + unsigned long *valid_start, unsigned long *valid_end)
849 {
850 unsigned long pfn, sec_end_pfn;
851 + unsigned long start, end;
852 struct zone *zone = NULL;
853 struct page *page;
854 int i;
855 - for (pfn = start_pfn, sec_end_pfn = SECTION_ALIGN_UP(start_pfn);
856 + for (pfn = start_pfn, sec_end_pfn = SECTION_ALIGN_UP(start_pfn + 1);
857 pfn < end_pfn;
858 - pfn = sec_end_pfn + 1, sec_end_pfn += PAGES_PER_SECTION) {
859 + pfn = sec_end_pfn, sec_end_pfn += PAGES_PER_SECTION) {
860 /* Make sure the memory section is present first */
861 if (!present_section_nr(pfn_to_section_nr(pfn)))
862 continue;
863 @@ -1397,10 +1400,20 @@ int test_pages_in_a_zone(unsigned long start_pfn, unsigned long end_pfn)
864 page = pfn_to_page(pfn + i);
865 if (zone && page_zone(page) != zone)
866 return 0;
867 + if (!zone)
868 + start = pfn + i;
869 zone = page_zone(page);
870 + end = pfn + MAX_ORDER_NR_PAGES;
871 }
872 }
873 - return 1;
874 +
875 + if (zone) {
876 + *valid_start = start;
877 + *valid_end = end;
878 + return 1;
879 + } else {
880 + return 0;
881 + }
882 }
883
884 /*
885 @@ -1718,6 +1731,7 @@ static int __ref __offline_pages(unsigned long start_pfn,
886 long offlined_pages;
887 int ret, drain, retry_max, node;
888 unsigned long flags;
889 + unsigned long valid_start, valid_end;
890 struct zone *zone;
891 struct memory_notify arg;
892
893 @@ -1728,10 +1742,10 @@ static int __ref __offline_pages(unsigned long start_pfn,
894 return -EINVAL;
895 /* This makes hotplug much easier...and readable.
896 we assume this for now. .*/
897 - if (!test_pages_in_a_zone(start_pfn, end_pfn))
898 + if (!test_pages_in_a_zone(start_pfn, end_pfn, &valid_start, &valid_end))
899 return -EINVAL;
900
901 - zone = page_zone(pfn_to_page(start_pfn));
902 + zone = page_zone(pfn_to_page(valid_start));
903 node = zone_to_nid(zone);
904 nr_pages = end_pfn - start_pfn;
905
906 diff --git a/mm/zswap.c b/mm/zswap.c
907 index 340261946fda..45476f429789 100644
908 --- a/mm/zswap.c
909 +++ b/mm/zswap.c
910 @@ -78,7 +78,13 @@ static u64 zswap_duplicate_entry;
911
912 /* Enable/disable zswap (disabled by default) */
913 static bool zswap_enabled;
914 -module_param_named(enabled, zswap_enabled, bool, 0644);
915 +static int zswap_enabled_param_set(const char *,
916 + const struct kernel_param *);
917 +static struct kernel_param_ops zswap_enabled_param_ops = {
918 + .set = zswap_enabled_param_set,
919 + .get = param_get_bool,
920 +};
921 +module_param_cb(enabled, &zswap_enabled_param_ops, &zswap_enabled, 0644);
922
923 /* Crypto compressor to use */
924 #define ZSWAP_COMPRESSOR_DEFAULT "lzo"
925 @@ -176,6 +182,9 @@ static atomic_t zswap_pools_count = ATOMIC_INIT(0);
926 /* used by param callback function */
927 static bool zswap_init_started;
928
929 +/* fatal error during init */
930 +static bool zswap_init_failed;
931 +
932 /*********************************
933 * helpers and fwd declarations
934 **********************************/
935 @@ -702,6 +711,11 @@ static int __zswap_param_set(const char *val, const struct kernel_param *kp,
936 char *s = strstrip((char *)val);
937 int ret;
938
939 + if (zswap_init_failed) {
940 + pr_err("can't set param, initialization failed\n");
941 + return -ENODEV;
942 + }
943 +
944 /* no change required */
945 if (!strcmp(s, *(char **)kp->arg))
946 return 0;
947 @@ -781,6 +795,17 @@ static int zswap_zpool_param_set(const char *val,
948 return __zswap_param_set(val, kp, NULL, zswap_compressor);
949 }
950
951 +static int zswap_enabled_param_set(const char *val,
952 + const struct kernel_param *kp)
953 +{
954 + if (zswap_init_failed) {
955 + pr_err("can't enable, initialization failed\n");
956 + return -ENODEV;
957 + }
958 +
959 + return param_set_bool(val, kp);
960 +}
961 +
962 /*********************************
963 * writeback code
964 **********************************/
965 @@ -1267,6 +1292,9 @@ pool_fail:
966 dstmem_fail:
967 zswap_entry_cache_destroy();
968 cache_fail:
969 + /* if built-in, we aren't unloaded on failure; don't allow use */
970 + zswap_init_failed = true;
971 + zswap_enabled = false;
972 return -ENOMEM;
973 }
974 /* must be late so crypto has time to come up */
975 diff --git a/net/can/bcm.c b/net/can/bcm.c
976 index 8ef1afacad82..24d66c1cc0cd 100644
977 --- a/net/can/bcm.c
978 +++ b/net/can/bcm.c
979 @@ -710,14 +710,23 @@ static struct bcm_op *bcm_find_op(struct list_head *ops, canid_t can_id,
980
981 static void bcm_remove_op(struct bcm_op *op)
982 {
983 - hrtimer_cancel(&op->timer);
984 - hrtimer_cancel(&op->thrtimer);
985 -
986 - if (op->tsklet.func)
987 - tasklet_kill(&op->tsklet);
988 + if (op->tsklet.func) {
989 + while (test_bit(TASKLET_STATE_SCHED, &op->tsklet.state) ||
990 + test_bit(TASKLET_STATE_RUN, &op->tsklet.state) ||
991 + hrtimer_active(&op->timer)) {
992 + hrtimer_cancel(&op->timer);
993 + tasklet_kill(&op->tsklet);
994 + }
995 + }
996
997 - if (op->thrtsklet.func)
998 - tasklet_kill(&op->thrtsklet);
999 + if (op->thrtsklet.func) {
1000 + while (test_bit(TASKLET_STATE_SCHED, &op->thrtsklet.state) ||
1001 + test_bit(TASKLET_STATE_RUN, &op->thrtsklet.state) ||
1002 + hrtimer_active(&op->thrtimer)) {
1003 + hrtimer_cancel(&op->thrtimer);
1004 + tasklet_kill(&op->thrtsklet);
1005 + }
1006 + }
1007
1008 if ((op->frames) && (op->frames != &op->sframe))
1009 kfree(op->frames);
1010 diff --git a/net/sunrpc/auth_gss/gss_rpc_xdr.c b/net/sunrpc/auth_gss/gss_rpc_xdr.c
1011 index eeeba5adee6d..2410d557ae39 100644
1012 --- a/net/sunrpc/auth_gss/gss_rpc_xdr.c
1013 +++ b/net/sunrpc/auth_gss/gss_rpc_xdr.c
1014 @@ -260,7 +260,7 @@ static int gssx_dec_option_array(struct xdr_stream *xdr,
1015 if (!oa->data)
1016 return -ENOMEM;
1017
1018 - creds = kmalloc(sizeof(struct svc_cred), GFP_KERNEL);
1019 + creds = kzalloc(sizeof(struct svc_cred), GFP_KERNEL);
1020 if (!creds) {
1021 kfree(oa->data);
1022 return -ENOMEM;