Magellan Linux

Contents of /trunk/kernel-alx/patches-4.4/0109-4.4.10-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2801 - (show annotations) (download)
Mon May 30 12:46:08 2016 UTC (7 years, 11 months ago) by niro
File size: 64135 byte(s)
-linux-4.4.10
1 diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt
2 index c2340eeeb97f..c000832a7fb9 100644
3 --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt
4 +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt
5 @@ -30,6 +30,10 @@ Optional properties:
6 - target-supply : regulator for SATA target power
7 - phys : reference to the SATA PHY node
8 - phy-names : must be "sata-phy"
9 +- ports-implemented : Mask that indicates which ports that the HBA supports
10 + are available for software to use. Useful if PORTS_IMPL
11 + is not programmed by the BIOS, which is true with
12 + some embedded SOC's.
13
14 Required properties when using sub-nodes:
15 - #address-cells : number of cells to encode an address
16 diff --git a/MAINTAINERS b/MAINTAINERS
17 index 4c3e1d2ac31b..ab65bbecb159 100644
18 --- a/MAINTAINERS
19 +++ b/MAINTAINERS
20 @@ -4097,8 +4097,8 @@ F: Documentation/efi-stub.txt
21 F: arch/ia64/kernel/efi.c
22 F: arch/x86/boot/compressed/eboot.[ch]
23 F: arch/x86/include/asm/efi.h
24 -F: arch/x86/platform/efi/*
25 -F: drivers/firmware/efi/*
26 +F: arch/x86/platform/efi/
27 +F: drivers/firmware/efi/
28 F: include/linux/efi*.h
29
30 EFI VARIABLE FILESYSTEM
31 diff --git a/Makefile b/Makefile
32 index 0722cdf52152..5b5f462f834c 100644
33 --- a/Makefile
34 +++ b/Makefile
35 @@ -1,6 +1,6 @@
36 VERSION = 4
37 PATCHLEVEL = 4
38 -SUBLEVEL = 9
39 +SUBLEVEL = 10
40 EXTRAVERSION =
41 NAME = Blurry Fish Butt
42
43 diff --git a/arch/arc/include/asm/io.h b/arch/arc/include/asm/io.h
44 index 27b17adea50d..cb69299a492e 100644
45 --- a/arch/arc/include/asm/io.h
46 +++ b/arch/arc/include/asm/io.h
47 @@ -13,6 +13,15 @@
48 #include <asm/byteorder.h>
49 #include <asm/page.h>
50
51 +#ifdef CONFIG_ISA_ARCV2
52 +#include <asm/barrier.h>
53 +#define __iormb() rmb()
54 +#define __iowmb() wmb()
55 +#else
56 +#define __iormb() do { } while (0)
57 +#define __iowmb() do { } while (0)
58 +#endif
59 +
60 extern void __iomem *ioremap(unsigned long physaddr, unsigned long size);
61 extern void __iomem *ioremap_prot(phys_addr_t offset, unsigned long size,
62 unsigned long flags);
63 @@ -22,6 +31,15 @@ extern void iounmap(const void __iomem *addr);
64 #define ioremap_wc(phy, sz) ioremap(phy, sz)
65 #define ioremap_wt(phy, sz) ioremap(phy, sz)
66
67 +/*
68 + * io{read,write}{16,32}be() macros
69 + */
70 +#define ioread16be(p) ({ u16 __v = be16_to_cpu((__force __be16)__raw_readw(p)); __iormb(); __v; })
71 +#define ioread32be(p) ({ u32 __v = be32_to_cpu((__force __be32)__raw_readl(p)); __iormb(); __v; })
72 +
73 +#define iowrite16be(v,p) ({ __iowmb(); __raw_writew((__force u16)cpu_to_be16(v), p); })
74 +#define iowrite32be(v,p) ({ __iowmb(); __raw_writel((__force u32)cpu_to_be32(v), p); })
75 +
76 /* Change struct page to physical address */
77 #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT)
78
79 @@ -99,15 +117,6 @@ static inline void __raw_writel(u32 w, volatile void __iomem *addr)
80
81 }
82
83 -#ifdef CONFIG_ISA_ARCV2
84 -#include <asm/barrier.h>
85 -#define __iormb() rmb()
86 -#define __iowmb() wmb()
87 -#else
88 -#define __iormb() do { } while (0)
89 -#define __iowmb() do { } while (0)
90 -#endif
91 -
92 /*
93 * MMIO can also get buffered/optimized in micro-arch, so barriers needed
94 * Based on ARM model for the typical use case
95 diff --git a/arch/arm/mach-cns3xxx/pcie.c b/arch/arm/mach-cns3xxx/pcie.c
96 index 47905a50e075..318394ed5c7a 100644
97 --- a/arch/arm/mach-cns3xxx/pcie.c
98 +++ b/arch/arm/mach-cns3xxx/pcie.c
99 @@ -220,13 +220,13 @@ static void cns3xxx_write_config(struct cns3xxx_pcie *cnspci,
100 u32 mask = (0x1ull << (size * 8)) - 1;
101 int shift = (where % 4) * 8;
102
103 - v = readl_relaxed(base + (where & 0xffc));
104 + v = readl_relaxed(base);
105
106 v &= ~(mask << shift);
107 v |= (val & mask) << shift;
108
109 - writel_relaxed(v, base + (where & 0xffc));
110 - readl_relaxed(base + (where & 0xffc));
111 + writel_relaxed(v, base);
112 + readl_relaxed(base);
113 }
114
115 static void __init cns3xxx_pcie_hw_init(struct cns3xxx_pcie *cnspci)
116 diff --git a/arch/arm/mach-exynos/pm_domains.c b/arch/arm/mach-exynos/pm_domains.c
117 index 7c21760f590f..875a2bab64f6 100644
118 --- a/arch/arm/mach-exynos/pm_domains.c
119 +++ b/arch/arm/mach-exynos/pm_domains.c
120 @@ -92,7 +92,7 @@ static int exynos_pd_power(struct generic_pm_domain *domain, bool power_on)
121 if (IS_ERR(pd->clk[i]))
122 break;
123
124 - if (IS_ERR(pd->clk[i]))
125 + if (IS_ERR(pd->pclk[i]))
126 continue; /* Skip on first power up */
127 if (clk_set_parent(pd->clk[i], pd->pclk[i]))
128 pr_err("%s: error setting parent to clock%d\n",
129 diff --git a/arch/arm/mach-socfpga/headsmp.S b/arch/arm/mach-socfpga/headsmp.S
130 index 5d94b7a2fb10..c160fa3007e9 100644
131 --- a/arch/arm/mach-socfpga/headsmp.S
132 +++ b/arch/arm/mach-socfpga/headsmp.S
133 @@ -13,6 +13,7 @@
134 #include <asm/assembler.h>
135
136 .arch armv7-a
137 + .arm
138
139 ENTRY(secondary_trampoline)
140 /* CPU1 will always fetch from 0x0 when it is brought out of reset.
141 diff --git a/arch/powerpc/include/asm/word-at-a-time.h b/arch/powerpc/include/asm/word-at-a-time.h
142 index e4396a7d0f7c..4afe66aa1400 100644
143 --- a/arch/powerpc/include/asm/word-at-a-time.h
144 +++ b/arch/powerpc/include/asm/word-at-a-time.h
145 @@ -82,7 +82,7 @@ static inline unsigned long create_zero_mask(unsigned long bits)
146 "andc %1,%1,%2\n\t"
147 "popcntd %0,%1"
148 : "=r" (leading_zero_bits), "=&r" (trailing_zero_bit_mask)
149 - : "r" (bits));
150 + : "b" (bits));
151
152 return leading_zero_bits;
153 }
154 diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
155 index ef2ad2d682da..646bf4d222c1 100644
156 --- a/arch/powerpc/kernel/process.c
157 +++ b/arch/powerpc/kernel/process.c
158 @@ -569,24 +569,6 @@ static void tm_reclaim_thread(struct thread_struct *thr,
159 if (!MSR_TM_SUSPENDED(mfmsr()))
160 return;
161
162 - /*
163 - * Use the current MSR TM suspended bit to track if we have
164 - * checkpointed state outstanding.
165 - * On signal delivery, we'd normally reclaim the checkpointed
166 - * state to obtain stack pointer (see:get_tm_stackpointer()).
167 - * This will then directly return to userspace without going
168 - * through __switch_to(). However, if the stack frame is bad,
169 - * we need to exit this thread which calls __switch_to() which
170 - * will again attempt to reclaim the already saved tm state.
171 - * Hence we need to check that we've not already reclaimed
172 - * this state.
173 - * We do this using the current MSR, rather tracking it in
174 - * some specific thread_struct bit, as it has the additional
175 - * benifit of checking for a potential TM bad thing exception.
176 - */
177 - if (!MSR_TM_SUSPENDED(mfmsr()))
178 - return;
179 -
180 tm_reclaim(thr, thr->regs->msr, cause);
181
182 /* Having done the reclaim, we now have the checkpointed
183 diff --git a/arch/x86/kernel/cpu/mcheck/therm_throt.c b/arch/x86/kernel/cpu/mcheck/therm_throt.c
184 index 2c5aaf8c2e2f..05538582a809 100644
185 --- a/arch/x86/kernel/cpu/mcheck/therm_throt.c
186 +++ b/arch/x86/kernel/cpu/mcheck/therm_throt.c
187 @@ -385,6 +385,9 @@ static void intel_thermal_interrupt(void)
188 {
189 __u64 msr_val;
190
191 + if (static_cpu_has(X86_FEATURE_HWP))
192 + wrmsrl_safe(MSR_HWP_STATUS, 0);
193 +
194 rdmsrl(MSR_IA32_THERM_STATUS, msr_val);
195
196 /* Check for violation of core thermal thresholds*/
197 diff --git a/arch/x86/kernel/sysfb_efi.c b/arch/x86/kernel/sysfb_efi.c
198 index b285d4e8c68e..5da924bbf0a0 100644
199 --- a/arch/x86/kernel/sysfb_efi.c
200 +++ b/arch/x86/kernel/sysfb_efi.c
201 @@ -106,14 +106,24 @@ static int __init efifb_set_system(const struct dmi_system_id *id)
202 continue;
203 for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
204 resource_size_t start, end;
205 + unsigned long flags;
206 +
207 + flags = pci_resource_flags(dev, i);
208 + if (!(flags & IORESOURCE_MEM))
209 + continue;
210 +
211 + if (flags & IORESOURCE_UNSET)
212 + continue;
213 +
214 + if (pci_resource_len(dev, i) == 0)
215 + continue;
216
217 start = pci_resource_start(dev, i);
218 - if (start == 0)
219 - break;
220 end = pci_resource_end(dev, i);
221 if (screen_info.lfb_base >= start &&
222 screen_info.lfb_base < end) {
223 found_bar = 1;
224 + break;
225 }
226 }
227 }
228 diff --git a/arch/x86/kernel/tsc_msr.c b/arch/x86/kernel/tsc_msr.c
229 index 92ae6acac8a7..6aa0f4d9eea6 100644
230 --- a/arch/x86/kernel/tsc_msr.c
231 +++ b/arch/x86/kernel/tsc_msr.c
232 @@ -92,7 +92,7 @@ unsigned long try_msr_calibrate_tsc(void)
233
234 if (freq_desc_tables[cpu_index].msr_plat) {
235 rdmsr(MSR_PLATFORM_INFO, lo, hi);
236 - ratio = (lo >> 8) & 0x1f;
237 + ratio = (lo >> 8) & 0xff;
238 } else {
239 rdmsr(MSR_IA32_PERF_STATUS, lo, hi);
240 ratio = (hi >> 8) & 0x1f;
241 diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c
242 index 6979186dbd4b..9f77943653fb 100644
243 --- a/drivers/acpi/acpi_processor.c
244 +++ b/drivers/acpi/acpi_processor.c
245 @@ -491,6 +491,58 @@ static void acpi_processor_remove(struct acpi_device *device)
246 }
247 #endif /* CONFIG_ACPI_HOTPLUG_CPU */
248
249 +#ifdef CONFIG_X86
250 +static bool acpi_hwp_native_thermal_lvt_set;
251 +static acpi_status __init acpi_hwp_native_thermal_lvt_osc(acpi_handle handle,
252 + u32 lvl,
253 + void *context,
254 + void **rv)
255 +{
256 + u8 sb_uuid_str[] = "4077A616-290C-47BE-9EBD-D87058713953";
257 + u32 capbuf[2];
258 + struct acpi_osc_context osc_context = {
259 + .uuid_str = sb_uuid_str,
260 + .rev = 1,
261 + .cap.length = 8,
262 + .cap.pointer = capbuf,
263 + };
264 +
265 + if (acpi_hwp_native_thermal_lvt_set)
266 + return AE_CTRL_TERMINATE;
267 +
268 + capbuf[0] = 0x0000;
269 + capbuf[1] = 0x1000; /* set bit 12 */
270 +
271 + if (ACPI_SUCCESS(acpi_run_osc(handle, &osc_context))) {
272 + if (osc_context.ret.pointer && osc_context.ret.length > 1) {
273 + u32 *capbuf_ret = osc_context.ret.pointer;
274 +
275 + if (capbuf_ret[1] & 0x1000) {
276 + acpi_handle_info(handle,
277 + "_OSC native thermal LVT Acked\n");
278 + acpi_hwp_native_thermal_lvt_set = true;
279 + }
280 + }
281 + kfree(osc_context.ret.pointer);
282 + }
283 +
284 + return AE_OK;
285 +}
286 +
287 +void __init acpi_early_processor_osc(void)
288 +{
289 + if (boot_cpu_has(X86_FEATURE_HWP)) {
290 + acpi_walk_namespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT,
291 + ACPI_UINT32_MAX,
292 + acpi_hwp_native_thermal_lvt_osc,
293 + NULL, NULL, NULL);
294 + acpi_get_devices(ACPI_PROCESSOR_DEVICE_HID,
295 + acpi_hwp_native_thermal_lvt_osc,
296 + NULL, NULL);
297 + }
298 +}
299 +#endif
300 +
301 /*
302 * The following ACPI IDs are known to be suitable for representing as
303 * processor devices.
304 diff --git a/drivers/acpi/acpica/dsmethod.c b/drivers/acpi/acpica/dsmethod.c
305 index bc32f3194afe..28c50c6b5f45 100644
306 --- a/drivers/acpi/acpica/dsmethod.c
307 +++ b/drivers/acpi/acpica/dsmethod.c
308 @@ -417,6 +417,9 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
309 obj_desc->method.mutex->mutex.
310 original_sync_level =
311 obj_desc->method.mutex->mutex.sync_level;
312 +
313 + obj_desc->method.mutex->mutex.thread_id =
314 + acpi_os_get_thread_id();
315 }
316 }
317
318 diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
319 index a212cefae524..ca4f28432d87 100644
320 --- a/drivers/acpi/bus.c
321 +++ b/drivers/acpi/bus.c
322 @@ -1004,6 +1004,9 @@ static int __init acpi_bus_init(void)
323 goto error1;
324 }
325
326 + /* Set capability bits for _OSC under processor scope */
327 + acpi_early_processor_osc();
328 +
329 /*
330 * _OSC method may exist in module level code,
331 * so it must be run after ACPI_FULL_INITIALIZATION
332 diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h
333 index 11d87bf67e73..0f3f41c13b38 100644
334 --- a/drivers/acpi/internal.h
335 +++ b/drivers/acpi/internal.h
336 @@ -130,6 +130,12 @@ void acpi_early_processor_set_pdc(void);
337 static inline void acpi_early_processor_set_pdc(void) {}
338 #endif
339
340 +#ifdef CONFIG_X86
341 +void acpi_early_processor_osc(void);
342 +#else
343 +static inline void acpi_early_processor_osc(void) {}
344 +#endif
345 +
346 /* --------------------------------------------------------------------------
347 Embedded Controller
348 -------------------------------------------------------------------------- */
349 diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c
350 index 04975b851c23..639adb1f8abd 100644
351 --- a/drivers/ata/ahci_platform.c
352 +++ b/drivers/ata/ahci_platform.c
353 @@ -51,6 +51,9 @@ static int ahci_probe(struct platform_device *pdev)
354 if (rc)
355 return rc;
356
357 + of_property_read_u32(dev->of_node,
358 + "ports-implemented", &hpriv->force_port_map);
359 +
360 if (of_device_is_compatible(dev->of_node, "hisilicon,hisi-ahci"))
361 hpriv->flags |= AHCI_HFLAG_NO_FBS | AHCI_HFLAG_NO_NCQ;
362
363 diff --git a/drivers/ata/ahci_xgene.c b/drivers/ata/ahci_xgene.c
364 index e2c6d9e0c5ac..e916bff6cee8 100644
365 --- a/drivers/ata/ahci_xgene.c
366 +++ b/drivers/ata/ahci_xgene.c
367 @@ -739,9 +739,9 @@ static int xgene_ahci_probe(struct platform_device *pdev)
368 dev_warn(&pdev->dev, "%s: Error reading device info. Assume version1\n",
369 __func__);
370 version = XGENE_AHCI_V1;
371 - }
372 - if (info->valid & ACPI_VALID_CID)
373 + } else if (info->valid & ACPI_VALID_CID) {
374 version = XGENE_AHCI_V2;
375 + }
376 }
377 }
378 #endif
379 diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
380 index 998c6a85ad89..9628fa131757 100644
381 --- a/drivers/ata/libahci.c
382 +++ b/drivers/ata/libahci.c
383 @@ -467,6 +467,7 @@ void ahci_save_initial_config(struct device *dev, struct ahci_host_priv *hpriv)
384 dev_info(dev, "forcing port_map 0x%x -> 0x%x\n",
385 port_map, hpriv->force_port_map);
386 port_map = hpriv->force_port_map;
387 + hpriv->saved_port_map = port_map;
388 }
389
390 if (hpriv->mask_port_map) {
391 diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
392 index 93b3f99b6865..8f1ce6d57a08 100644
393 --- a/drivers/block/nbd.c
394 +++ b/drivers/block/nbd.c
395 @@ -618,8 +618,8 @@ static void nbd_request_handler(struct request_queue *q)
396 req, req->cmd_type);
397
398 if (unlikely(!nbd->sock)) {
399 - dev_err(disk_to_dev(nbd->disk),
400 - "Attempted send on closed socket\n");
401 + dev_err_ratelimited(disk_to_dev(nbd->disk),
402 + "Attempted send on closed socket\n");
403 req->errors++;
404 nbd_end_request(nbd, req);
405 spin_lock_irq(q->queue_lock);
406 diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c
407 index 3ace102a2a0a..bbf206e3da0d 100644
408 --- a/drivers/clk/clk-divider.c
409 +++ b/drivers/clk/clk-divider.c
410 @@ -422,6 +422,12 @@ const struct clk_ops clk_divider_ops = {
411 };
412 EXPORT_SYMBOL_GPL(clk_divider_ops);
413
414 +const struct clk_ops clk_divider_ro_ops = {
415 + .recalc_rate = clk_divider_recalc_rate,
416 + .round_rate = clk_divider_round_rate,
417 +};
418 +EXPORT_SYMBOL_GPL(clk_divider_ro_ops);
419 +
420 static struct clk *_register_divider(struct device *dev, const char *name,
421 const char *parent_name, unsigned long flags,
422 void __iomem *reg, u8 shift, u8 width,
423 @@ -445,7 +451,10 @@ static struct clk *_register_divider(struct device *dev, const char *name,
424 return ERR_PTR(-ENOMEM);
425
426 init.name = name;
427 - init.ops = &clk_divider_ops;
428 + if (clk_divider_flags & CLK_DIVIDER_READ_ONLY)
429 + init.ops = &clk_divider_ro_ops;
430 + else
431 + init.ops = &clk_divider_ops;
432 init.flags = flags | CLK_IS_BASIC;
433 init.parent_names = (parent_name ? &parent_name: NULL);
434 init.num_parents = (parent_name ? 1 : 0);
435 diff --git a/drivers/clk/meson/clkc.c b/drivers/clk/meson/clkc.c
436 index c83ae1367abc..d920d410b51d 100644
437 --- a/drivers/clk/meson/clkc.c
438 +++ b/drivers/clk/meson/clkc.c
439 @@ -198,7 +198,7 @@ meson_clk_register_fixed_rate(const struct clk_conf *clk_conf,
440 }
441
442 void __init meson_clk_register_clks(const struct clk_conf *clk_confs,
443 - size_t nr_confs,
444 + unsigned int nr_confs,
445 void __iomem *clk_base)
446 {
447 unsigned int i;
448 diff --git a/drivers/clk/nxp/clk-lpc18xx-ccu.c b/drivers/clk/nxp/clk-lpc18xx-ccu.c
449 index 13aabbb3acbe..558da89555af 100644
450 --- a/drivers/clk/nxp/clk-lpc18xx-ccu.c
451 +++ b/drivers/clk/nxp/clk-lpc18xx-ccu.c
452 @@ -222,7 +222,7 @@ static void lpc18xx_ccu_register_branch_gate_div(struct lpc18xx_clk_branch *bran
453 div->width = 1;
454
455 div_hw = &div->hw;
456 - div_ops = &clk_divider_ops;
457 + div_ops = &clk_divider_ro_ops;
458 }
459
460 branch->gate.reg = branch->offset + reg_base;
461 diff --git a/drivers/clk/qcom/gcc-msm8960.c b/drivers/clk/qcom/gcc-msm8960.c
462 index 66c18bc97857..bdc4b2d07a23 100644
463 --- a/drivers/clk/qcom/gcc-msm8960.c
464 +++ b/drivers/clk/qcom/gcc-msm8960.c
465 @@ -2753,7 +2753,7 @@ static struct clk_rcg ce3_src = {
466 },
467 .freq_tbl = clk_tbl_ce3,
468 .clkr = {
469 - .enable_reg = 0x2c08,
470 + .enable_reg = 0x36c0,
471 .enable_mask = BIT(7),
472 .hw.init = &(struct clk_init_data){
473 .name = "ce3_src",
474 @@ -2769,7 +2769,7 @@ static struct clk_branch ce3_core_clk = {
475 .halt_reg = 0x2fdc,
476 .halt_bit = 5,
477 .clkr = {
478 - .enable_reg = 0x36c4,
479 + .enable_reg = 0x36cc,
480 .enable_mask = BIT(4),
481 .hw.init = &(struct clk_init_data){
482 .name = "ce3_core_clk",
483 diff --git a/drivers/clk/rockchip/clk.c b/drivers/clk/rockchip/clk.c
484 index be6c7fd8315d..9b6c8188efac 100644
485 --- a/drivers/clk/rockchip/clk.c
486 +++ b/drivers/clk/rockchip/clk.c
487 @@ -70,7 +70,7 @@ static struct clk *rockchip_clk_register_branch(const char *name,
488 if (gate_offset >= 0) {
489 gate = kzalloc(sizeof(*gate), GFP_KERNEL);
490 if (!gate)
491 - return ERR_PTR(-ENOMEM);
492 + goto err_gate;
493
494 gate->flags = gate_flags;
495 gate->reg = base + gate_offset;
496 @@ -82,7 +82,7 @@ static struct clk *rockchip_clk_register_branch(const char *name,
497 if (div_width > 0) {
498 div = kzalloc(sizeof(*div), GFP_KERNEL);
499 if (!div)
500 - return ERR_PTR(-ENOMEM);
501 + goto err_div;
502
503 div->flags = div_flags;
504 div->reg = base + muxdiv_offset;
505 @@ -90,7 +90,9 @@ static struct clk *rockchip_clk_register_branch(const char *name,
506 div->width = div_width;
507 div->lock = lock;
508 div->table = div_table;
509 - div_ops = &clk_divider_ops;
510 + div_ops = (div_flags & CLK_DIVIDER_READ_ONLY)
511 + ? &clk_divider_ro_ops
512 + : &clk_divider_ops;
513 }
514
515 clk = clk_register_composite(NULL, name, parent_names, num_parents,
516 @@ -100,6 +102,11 @@ static struct clk *rockchip_clk_register_branch(const char *name,
517 flags);
518
519 return clk;
520 +err_div:
521 + kfree(gate);
522 +err_gate:
523 + kfree(mux);
524 + return ERR_PTR(-ENOMEM);
525 }
526
527 static struct clk *rockchip_clk_register_frac_branch(const char *name,
528 diff --git a/drivers/clk/versatile/clk-sp810.c b/drivers/clk/versatile/clk-sp810.c
529 index a1cdef6b0f90..897c36c1754a 100644
530 --- a/drivers/clk/versatile/clk-sp810.c
531 +++ b/drivers/clk/versatile/clk-sp810.c
532 @@ -92,6 +92,7 @@ static void __init clk_sp810_of_setup(struct device_node *node)
533 int num = ARRAY_SIZE(parent_names);
534 char name[12];
535 struct clk_init_data init;
536 + static int instance;
537 int i;
538 bool deprecated;
539
540 @@ -118,7 +119,7 @@ static void __init clk_sp810_of_setup(struct device_node *node)
541 deprecated = !of_find_property(node, "assigned-clock-parents", NULL);
542
543 for (i = 0; i < ARRAY_SIZE(sp810->timerclken); i++) {
544 - snprintf(name, ARRAY_SIZE(name), "timerclken%d", i);
545 + snprintf(name, sizeof(name), "sp810_%d_%d", instance, i);
546
547 sp810->timerclken[i].sp810 = sp810;
548 sp810->timerclken[i].channel = i;
549 @@ -139,5 +140,6 @@ static void __init clk_sp810_of_setup(struct device_node *node)
550 }
551
552 of_clk_add_provider(node, clk_sp810_timerclken_of_get, sp810);
553 + instance++;
554 }
555 CLK_OF_DECLARE(sp810, "arm,sp810", clk_sp810_of_setup);
556 diff --git a/drivers/cpuidle/cpuidle-arm.c b/drivers/cpuidle/cpuidle-arm.c
557 index 545069d5fdfb..e342565e8715 100644
558 --- a/drivers/cpuidle/cpuidle-arm.c
559 +++ b/drivers/cpuidle/cpuidle-arm.c
560 @@ -50,7 +50,7 @@ static int arm_enter_idle_state(struct cpuidle_device *dev,
561 * call the CPU ops suspend protocol with idle index as a
562 * parameter.
563 */
564 - arm_cpuidle_suspend(idx);
565 + ret = arm_cpuidle_suspend(idx);
566
567 cpu_pm_exit();
568 }
569 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
570 index b8fbbd7699e4..73628c7599e7 100644
571 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
572 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
573 @@ -540,6 +540,7 @@ int amdgpu_bo_set_metadata (struct amdgpu_bo *bo, void *metadata,
574 if (!metadata_size) {
575 if (bo->metadata_size) {
576 kfree(bo->metadata);
577 + bo->metadata = NULL;
578 bo->metadata_size = 0;
579 }
580 return 0;
581 diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c
582 index 1e0bba29e167..1cd6de575305 100644
583 --- a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c
584 +++ b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c
585 @@ -298,6 +298,10 @@ bool amdgpu_atombios_encoder_mode_fixup(struct drm_encoder *encoder,
586 && (mode->crtc_vsync_start < (mode->crtc_vdisplay + 2)))
587 adjusted_mode->crtc_vsync_start = adjusted_mode->crtc_vdisplay + 2;
588
589 + /* vertical FP must be at least 1 */
590 + if (mode->crtc_vsync_start == mode->crtc_vdisplay)
591 + adjusted_mode->crtc_vsync_start++;
592 +
593 /* get the native mode for scaling */
594 if (amdgpu_encoder->active_device & (ATOM_DEVICE_LCD_SUPPORT))
595 amdgpu_panel_mode_fixup(encoder, adjusted_mode);
596 diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
597 index bc7b8faba84d..7e461dca564c 100644
598 --- a/drivers/gpu/drm/i915/i915_reg.h
599 +++ b/drivers/gpu/drm/i915/i915_reg.h
600 @@ -2838,7 +2838,14 @@ enum skl_disp_power_wells {
601 #define GEN6_RP_STATE_CAP (MCHBAR_MIRROR_BASE_SNB + 0x5998)
602 #define BXT_RP_STATE_CAP 0x138170
603
604 -#define INTERVAL_1_28_US(us) (((us) * 100) >> 7)
605 +/*
606 + * Make these a multiple of magic 25 to avoid SNB (eg. Dell XPS
607 + * 8300) freezing up around GPU hangs. Looks as if even
608 + * scheduling/timer interrupts start misbehaving if the RPS
609 + * EI/thresholds are "bad", leading to a very sluggish or even
610 + * frozen machine.
611 + */
612 +#define INTERVAL_1_28_US(us) roundup(((us) * 100) >> 7, 25)
613 #define INTERVAL_1_33_US(us) (((us) * 3) >> 2)
614 #define INTERVAL_0_833_US(us) (((us) * 6) / 5)
615 #define GT_INTERVAL_FROM_US(dev_priv, us) (IS_GEN9(dev_priv) ? \
616 diff --git a/drivers/gpu/drm/i915/intel_csr.c b/drivers/gpu/drm/i915/intel_csr.c
617 index 9e530a739354..fc28c512ece3 100644
618 --- a/drivers/gpu/drm/i915/intel_csr.c
619 +++ b/drivers/gpu/drm/i915/intel_csr.c
620 @@ -180,7 +180,8 @@ struct stepping_info {
621 static const struct stepping_info skl_stepping_info[] = {
622 {'A', '0'}, {'B', '0'}, {'C', '0'},
623 {'D', '0'}, {'E', '0'}, {'F', '0'},
624 - {'G', '0'}, {'H', '0'}, {'I', '0'}
625 + {'G', '0'}, {'H', '0'}, {'I', '0'},
626 + {'J', '0'}, {'K', '0'}
627 };
628
629 static struct stepping_info bxt_stepping_info[] = {
630 diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
631 index 7e6158b889da..3c6b07683bd9 100644
632 --- a/drivers/gpu/drm/i915/intel_ddi.c
633 +++ b/drivers/gpu/drm/i915/intel_ddi.c
634 @@ -464,9 +464,17 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port,
635 } else if (IS_BROADWELL(dev)) {
636 ddi_translations_fdi = bdw_ddi_translations_fdi;
637 ddi_translations_dp = bdw_ddi_translations_dp;
638 - ddi_translations_edp = bdw_ddi_translations_edp;
639 +
640 + if (dev_priv->edp_low_vswing) {
641 + ddi_translations_edp = bdw_ddi_translations_edp;
642 + n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp);
643 + } else {
644 + ddi_translations_edp = bdw_ddi_translations_dp;
645 + n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
646 + }
647 +
648 ddi_translations_hdmi = bdw_ddi_translations_hdmi;
649 - n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp);
650 +
651 n_dp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
652 n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi);
653 hdmi_default_entry = 7;
654 @@ -3188,12 +3196,6 @@ void intel_ddi_get_config(struct intel_encoder *encoder,
655 intel_ddi_clock_get(encoder, pipe_config);
656 }
657
658 -static void intel_ddi_destroy(struct drm_encoder *encoder)
659 -{
660 - /* HDMI has nothing special to destroy, so we can go with this. */
661 - intel_dp_encoder_destroy(encoder);
662 -}
663 -
664 static bool intel_ddi_compute_config(struct intel_encoder *encoder,
665 struct intel_crtc_state *pipe_config)
666 {
667 @@ -3212,7 +3214,8 @@ static bool intel_ddi_compute_config(struct intel_encoder *encoder,
668 }
669
670 static const struct drm_encoder_funcs intel_ddi_funcs = {
671 - .destroy = intel_ddi_destroy,
672 + .reset = intel_dp_encoder_reset,
673 + .destroy = intel_dp_encoder_destroy,
674 };
675
676 static struct intel_connector *
677 @@ -3284,6 +3287,7 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
678 intel_encoder->post_disable = intel_ddi_post_disable;
679 intel_encoder->get_hw_state = intel_ddi_get_hw_state;
680 intel_encoder->get_config = intel_ddi_get_config;
681 + intel_encoder->suspend = intel_dp_encoder_suspend;
682
683 intel_dig_port->port = port;
684 intel_dig_port->saved_port_bits = I915_READ(DDI_BUF_CTL(port)) &
685 diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
686 index 78b8ec84d576..e55a82a99e7f 100644
687 --- a/drivers/gpu/drm/i915/intel_dp.c
688 +++ b/drivers/gpu/drm/i915/intel_dp.c
689 @@ -5035,7 +5035,7 @@ void intel_dp_encoder_destroy(struct drm_encoder *encoder)
690 kfree(intel_dig_port);
691 }
692
693 -static void intel_dp_encoder_suspend(struct intel_encoder *intel_encoder)
694 +void intel_dp_encoder_suspend(struct intel_encoder *intel_encoder)
695 {
696 struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base);
697
698 @@ -5077,7 +5077,7 @@ static void intel_edp_panel_vdd_sanitize(struct intel_dp *intel_dp)
699 edp_panel_vdd_schedule_off(intel_dp);
700 }
701
702 -static void intel_dp_encoder_reset(struct drm_encoder *encoder)
703 +void intel_dp_encoder_reset(struct drm_encoder *encoder)
704 {
705 struct intel_dp *intel_dp;
706
707 diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
708 index 0d00f07b7163..f34a219ec5c4 100644
709 --- a/drivers/gpu/drm/i915/intel_drv.h
710 +++ b/drivers/gpu/drm/i915/intel_drv.h
711 @@ -1204,6 +1204,8 @@ void intel_dp_set_link_params(struct intel_dp *intel_dp,
712 void intel_dp_start_link_train(struct intel_dp *intel_dp);
713 void intel_dp_stop_link_train(struct intel_dp *intel_dp);
714 void intel_dp_sink_dpms(struct intel_dp *intel_dp, int mode);
715 +void intel_dp_encoder_reset(struct drm_encoder *encoder);
716 +void intel_dp_encoder_suspend(struct intel_encoder *intel_encoder);
717 void intel_dp_encoder_destroy(struct drm_encoder *encoder);
718 int intel_dp_sink_crc(struct intel_dp *intel_dp, u8 *crc);
719 bool intel_dp_compute_config(struct intel_encoder *encoder,
720 diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
721 index e6c035b0fc1c..4b8ed9f2dabc 100644
722 --- a/drivers/gpu/drm/i915/intel_hdmi.c
723 +++ b/drivers/gpu/drm/i915/intel_hdmi.c
724 @@ -1388,8 +1388,16 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)
725 hdmi_to_dig_port(intel_hdmi));
726 }
727
728 - if (!live_status)
729 - DRM_DEBUG_KMS("Live status not up!");
730 + if (!live_status) {
731 + DRM_DEBUG_KMS("HDMI live status down\n");
732 + /*
733 + * Live status register is not reliable on all intel platforms.
734 + * So consider live_status only for certain platforms, for
735 + * others, read EDID to determine presence of sink.
736 + */
737 + if (INTEL_INFO(dev_priv)->gen < 7 || IS_IVYBRIDGE(dev_priv))
738 + live_status = true;
739 + }
740
741 intel_hdmi_unset_edid(connector);
742
743 diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
744 index adf74f4366bb..0b04b9282f56 100644
745 --- a/drivers/gpu/drm/radeon/atombios_encoders.c
746 +++ b/drivers/gpu/drm/radeon/atombios_encoders.c
747 @@ -310,6 +310,10 @@ static bool radeon_atom_mode_fixup(struct drm_encoder *encoder,
748 && (mode->crtc_vsync_start < (mode->crtc_vdisplay + 2)))
749 adjusted_mode->crtc_vsync_start = adjusted_mode->crtc_vdisplay + 2;
750
751 + /* vertical FP must be at least 1 */
752 + if (mode->crtc_vsync_start == mode->crtc_vdisplay)
753 + adjusted_mode->crtc_vsync_start++;
754 +
755 /* get the native mode for scaling */
756 if (radeon_encoder->active_device & (ATOM_DEVICE_LCD_SUPPORT)) {
757 radeon_panel_mode_fixup(encoder, adjusted_mode);
758 diff --git a/drivers/gpu/ipu-v3/ipu-common.c b/drivers/gpu/ipu-v3/ipu-common.c
759 index a0e28f3a278d..0585fd2031dd 100644
760 --- a/drivers/gpu/ipu-v3/ipu-common.c
761 +++ b/drivers/gpu/ipu-v3/ipu-common.c
762 @@ -1068,7 +1068,6 @@ static int ipu_add_client_devices(struct ipu_soc *ipu, unsigned long ipu_base)
763 goto err_register;
764 }
765
766 - pdev->dev.of_node = of_node;
767 pdev->dev.parent = dev;
768
769 ret = platform_device_add_data(pdev, &reg->pdata,
770 @@ -1079,6 +1078,12 @@ static int ipu_add_client_devices(struct ipu_soc *ipu, unsigned long ipu_base)
771 platform_device_put(pdev);
772 goto err_register;
773 }
774 +
775 + /*
776 + * Set of_node only after calling platform_device_add. Otherwise
777 + * the platform:imx-ipuv3-crtc modalias won't be used.
778 + */
779 + pdev->dev.of_node = of_node;
780 }
781
782 return 0;
783 diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
784 index 8b78a7f1f779..909ab0176ef2 100644
785 --- a/drivers/hid/hid-ids.h
786 +++ b/drivers/hid/hid-ids.h
787 @@ -255,6 +255,7 @@
788 #define USB_DEVICE_ID_CORSAIR_K90 0x1b02
789
790 #define USB_VENDOR_ID_CREATIVELABS 0x041e
791 +#define USB_DEVICE_ID_CREATIVE_SB_OMNI_SURROUND_51 0x322c
792 #define USB_DEVICE_ID_PRODIKEYS_PCMIDI 0x2801
793
794 #define USB_VENDOR_ID_CVTOUCH 0x1ff7
795 diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
796 index 7dd0953cd70f..dc8e6adf95a4 100644
797 --- a/drivers/hid/usbhid/hid-quirks.c
798 +++ b/drivers/hid/usbhid/hid-quirks.c
799 @@ -70,6 +70,7 @@ static const struct hid_blacklist {
800 { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK, HID_QUIRK_NOGET },
801 { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_AXIS_295, HID_QUIRK_NOGET },
802 { USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
803 + { USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_CREATIVE_SB_OMNI_SURROUND_51, HID_QUIRK_NOGET },
804 { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
805 { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU, HID_QUIRK_MULTI_INPUT },
806 { USB_VENDOR_ID_ELAN, HID_ANY_ID, HID_QUIRK_ALWAYS_POLL },
807 diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
808 index 3c0f47ac8e53..5c02d7bbc7f2 100644
809 --- a/drivers/hid/wacom_wac.c
810 +++ b/drivers/hid/wacom_wac.c
811 @@ -3449,6 +3449,10 @@ static const struct wacom_features wacom_features_0x33E =
812 { "Wacom Intuos PT M 2", 21600, 13500, 2047, 63,
813 INTUOSHT2, WACOM_INTUOS_RES, WACOM_INTUOS_RES, .touch_max = 16,
814 .check_for_hid_type = true, .hid_type = HID_TYPE_USBNONE };
815 +static const struct wacom_features wacom_features_0x343 =
816 + { "Wacom DTK1651", 34616, 19559, 1023, 0,
817 + DTUS, WACOM_INTUOS_RES, WACOM_INTUOS_RES, 4,
818 + WACOM_DTU_OFFSET, WACOM_DTU_OFFSET };
819
820 static const struct wacom_features wacom_features_HID_ANY_ID =
821 { "Wacom HID", .type = HID_GENERIC };
822 @@ -3614,6 +3618,7 @@ const struct hid_device_id wacom_ids[] = {
823 { USB_DEVICE_WACOM(0x33C) },
824 { USB_DEVICE_WACOM(0x33D) },
825 { USB_DEVICE_WACOM(0x33E) },
826 + { USB_DEVICE_WACOM(0x343) },
827 { USB_DEVICE_WACOM(0x4001) },
828 { USB_DEVICE_WACOM(0x4004) },
829 { USB_DEVICE_WACOM(0x5000) },
830 diff --git a/drivers/iio/magnetometer/ak8975.c b/drivers/iio/magnetometer/ak8975.c
831 index b13936dacc78..f2a7f72f7aa6 100644
832 --- a/drivers/iio/magnetometer/ak8975.c
833 +++ b/drivers/iio/magnetometer/ak8975.c
834 @@ -462,6 +462,8 @@ static int ak8975_setup_irq(struct ak8975_data *data)
835 int rc;
836 int irq;
837
838 + init_waitqueue_head(&data->data_ready_queue);
839 + clear_bit(0, &data->flags);
840 if (client->irq)
841 irq = client->irq;
842 else
843 @@ -477,8 +479,6 @@ static int ak8975_setup_irq(struct ak8975_data *data)
844 return rc;
845 }
846
847 - init_waitqueue_head(&data->data_ready_queue);
848 - clear_bit(0, &data->flags);
849 data->eoc_irq = irq;
850
851 return rc;
852 @@ -732,7 +732,7 @@ static int ak8975_probe(struct i2c_client *client,
853 int eoc_gpio;
854 int err;
855 const char *name = NULL;
856 - enum asahi_compass_chipset chipset;
857 + enum asahi_compass_chipset chipset = AK_MAX_TYPE;
858
859 /* Grab and set up the supplied GPIO. */
860 if (client->dev.platform_data)
861 diff --git a/drivers/infiniband/hw/cxgb4/cq.c b/drivers/infiniband/hw/cxgb4/cq.c
862 index de9cd6901752..bc147582bed9 100644
863 --- a/drivers/infiniband/hw/cxgb4/cq.c
864 +++ b/drivers/infiniband/hw/cxgb4/cq.c
865 @@ -162,7 +162,7 @@ static int create_cq(struct c4iw_rdev *rdev, struct t4_cq *cq,
866 cq->bar2_va = c4iw_bar2_addrs(rdev, cq->cqid, T4_BAR2_QTYPE_INGRESS,
867 &cq->bar2_qid,
868 user ? &cq->bar2_pa : NULL);
869 - if (user && !cq->bar2_va) {
870 + if (user && !cq->bar2_pa) {
871 pr_warn(MOD "%s: cqid %u not in BAR2 range.\n",
872 pci_name(rdev->lldi.pdev), cq->cqid);
873 ret = -EINVAL;
874 diff --git a/drivers/infiniband/hw/cxgb4/qp.c b/drivers/infiniband/hw/cxgb4/qp.c
875 index aa515afee724..53aa7515f542 100644
876 --- a/drivers/infiniband/hw/cxgb4/qp.c
877 +++ b/drivers/infiniband/hw/cxgb4/qp.c
878 @@ -185,6 +185,10 @@ void __iomem *c4iw_bar2_addrs(struct c4iw_rdev *rdev, unsigned int qid,
879
880 if (pbar2_pa)
881 *pbar2_pa = (rdev->bar2_pa + bar2_qoffset) & PAGE_MASK;
882 +
883 + if (is_t4(rdev->lldi.adapter_type))
884 + return NULL;
885 +
886 return rdev->bar2_kva + bar2_qoffset;
887 }
888
889 @@ -270,7 +274,7 @@ static int create_qp(struct c4iw_rdev *rdev, struct t4_wq *wq,
890 /*
891 * User mode must have bar2 access.
892 */
893 - if (user && (!wq->sq.bar2_va || !wq->rq.bar2_va)) {
894 + if (user && (!wq->sq.bar2_pa || !wq->rq.bar2_pa)) {
895 pr_warn(MOD "%s: sqid %u or rqid %u not in BAR2 range.\n",
896 pci_name(rdev->lldi.pdev), wq->sq.qid, wq->rq.qid);
897 goto free_dma;
898 diff --git a/drivers/input/touchscreen/zforce_ts.c b/drivers/input/touchscreen/zforce_ts.c
899 index 9bbadaaf6bc3..7b3845aa5983 100644
900 --- a/drivers/input/touchscreen/zforce_ts.c
901 +++ b/drivers/input/touchscreen/zforce_ts.c
902 @@ -370,8 +370,8 @@ static int zforce_touch_event(struct zforce_ts *ts, u8 *payload)
903 point.coord_x = point.coord_y = 0;
904 }
905
906 - point.state = payload[9 * i + 5] & 0x03;
907 - point.id = (payload[9 * i + 5] & 0xfc) >> 2;
908 + point.state = payload[9 * i + 5] & 0x0f;
909 + point.id = (payload[9 * i + 5] & 0xf0) >> 4;
910
911 /* determine touch major, minor and orientation */
912 point.area_major = max(payload[9 * i + 6],
913 diff --git a/drivers/md/md.c b/drivers/md/md.c
914 index b1e1f6b95782..c57fdf847b47 100644
915 --- a/drivers/md/md.c
916 +++ b/drivers/md/md.c
917 @@ -293,6 +293,8 @@ static blk_qc_t md_make_request(struct request_queue *q, struct bio *bio)
918 * go away inside make_request
919 */
920 sectors = bio_sectors(bio);
921 + /* bio could be mergeable after passing to underlayer */
922 + bio->bi_rw &= ~REQ_NOMERGE;
923 mddev->pers->make_request(mddev, bio);
924
925 cpu = part_stat_lock();
926 diff --git a/drivers/mfd/intel-lpss.c b/drivers/mfd/intel-lpss.c
927 index 6255513f54c7..68aa31ae553a 100644
928 --- a/drivers/mfd/intel-lpss.c
929 +++ b/drivers/mfd/intel-lpss.c
930 @@ -445,6 +445,7 @@ int intel_lpss_probe(struct device *dev,
931 err_remove_ltr:
932 intel_lpss_debugfs_remove(lpss);
933 intel_lpss_ltr_hide(lpss);
934 + intel_lpss_unregister_clock(lpss);
935
936 err_clk_register:
937 ida_simple_remove(&intel_lpss_devid_ida, lpss->devid);
938 diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
939 index 8f8793004b9f..1b271b99c49e 100644
940 --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
941 +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
942 @@ -274,6 +274,9 @@ void ar5008_hw_cmn_spur_mitigate(struct ath_hw *ah,
943 };
944 static const int inc[4] = { 0, 100, 0, 0 };
945
946 + memset(&mask_m, 0, sizeof(int8_t) * 123);
947 + memset(&mask_p, 0, sizeof(int8_t) * 123);
948 +
949 cur_bin = -6000;
950 upper = bin + 100;
951 lower = bin - 100;
952 @@ -424,14 +427,9 @@ static void ar5008_hw_spur_mitigate(struct ath_hw *ah,
953 int tmp, new;
954 int i;
955
956 - int8_t mask_m[123];
957 - int8_t mask_p[123];
958 int cur_bb_spur;
959 bool is2GHz = IS_CHAN_2GHZ(chan);
960
961 - memset(&mask_m, 0, sizeof(int8_t) * 123);
962 - memset(&mask_p, 0, sizeof(int8_t) * 123);
963 -
964 for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
965 cur_bb_spur = ah->eep_ops->get_spur_channel(ah, i, is2GHz);
966 if (AR_NO_SPUR == cur_bb_spur)
967 diff --git a/drivers/net/wireless/ath/ath9k/ar9002_phy.c b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
968 index db6624527d99..53d7445a5d12 100644
969 --- a/drivers/net/wireless/ath/ath9k/ar9002_phy.c
970 +++ b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
971 @@ -178,14 +178,9 @@ static void ar9002_hw_spur_mitigate(struct ath_hw *ah,
972 int i;
973 struct chan_centers centers;
974
975 - int8_t mask_m[123];
976 - int8_t mask_p[123];
977 int cur_bb_spur;
978 bool is2GHz = IS_CHAN_2GHZ(chan);
979
980 - memset(&mask_m, 0, sizeof(int8_t) * 123);
981 - memset(&mask_p, 0, sizeof(int8_t) * 123);
982 -
983 ath9k_hw_get_channel_centers(ah, chan, &centers);
984 freq = centers.synth_center;
985
986 diff --git a/drivers/net/wireless/mwifiex/sta_ioctl.c b/drivers/net/wireless/mwifiex/sta_ioctl.c
987 index a6c8a4f7bfe9..d6c4f0f60839 100644
988 --- a/drivers/net/wireless/mwifiex/sta_ioctl.c
989 +++ b/drivers/net/wireless/mwifiex/sta_ioctl.c
990 @@ -313,6 +313,7 @@ int mwifiex_bss_start(struct mwifiex_private *priv, struct cfg80211_bss *bss,
991 mwifiex_dbg(adapter, ERROR,
992 "Attempt to reconnect on csa closed chan(%d)\n",
993 bss_desc->channel);
994 + ret = -1;
995 goto done;
996 }
997
998 diff --git a/drivers/nvmem/mxs-ocotp.c b/drivers/nvmem/mxs-ocotp.c
999 index 8ba19bba3156..2bb3c5799ac4 100644
1000 --- a/drivers/nvmem/mxs-ocotp.c
1001 +++ b/drivers/nvmem/mxs-ocotp.c
1002 @@ -94,7 +94,7 @@ static int mxs_ocotp_read(void *context, const void *reg, size_t reg_size,
1003 if (ret)
1004 goto close_banks;
1005
1006 - while (val_size) {
1007 + while (val_size >= reg_size) {
1008 if ((offset < OCOTP_DATA_OFFSET) || (offset % 16)) {
1009 /* fill up non-data register */
1010 *buf = 0;
1011 @@ -103,7 +103,7 @@ static int mxs_ocotp_read(void *context, const void *reg, size_t reg_size,
1012 }
1013
1014 buf++;
1015 - val_size--;
1016 + val_size -= reg_size;
1017 offset += reg_size;
1018 }
1019
1020 diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
1021 index db9446c612da..b0d92b84bcdc 100644
1022 --- a/drivers/scsi/lpfc/lpfc_init.c
1023 +++ b/drivers/scsi/lpfc/lpfc_init.c
1024 @@ -2855,7 +2855,7 @@ lpfc_online(struct lpfc_hba *phba)
1025 }
1026
1027 vports = lpfc_create_vport_work_array(phba);
1028 - if (vports != NULL)
1029 + if (vports != NULL) {
1030 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) {
1031 struct Scsi_Host *shost;
1032 shost = lpfc_shost_from_vport(vports[i]);
1033 @@ -2872,7 +2872,8 @@ lpfc_online(struct lpfc_hba *phba)
1034 }
1035 spin_unlock_irq(shost->host_lock);
1036 }
1037 - lpfc_destroy_vport_work_array(phba, vports);
1038 + }
1039 + lpfc_destroy_vport_work_array(phba, vports);
1040
1041 lpfc_unblock_mgmt_io(phba);
1042 return 0;
1043 diff --git a/drivers/soc/rockchip/pm_domains.c b/drivers/soc/rockchip/pm_domains.c
1044 index 534c58937a56..4a65c5bda146 100644
1045 --- a/drivers/soc/rockchip/pm_domains.c
1046 +++ b/drivers/soc/rockchip/pm_domains.c
1047 @@ -419,6 +419,7 @@ static int rockchip_pm_domain_probe(struct platform_device *pdev)
1048 if (error) {
1049 dev_err(dev, "failed to handle node %s: %d\n",
1050 node->name, error);
1051 + of_node_put(node);
1052 goto err_out;
1053 }
1054 }
1055 diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
1056 index bdc0f2f24f19..a2b43a6e7fa7 100644
1057 --- a/drivers/usb/serial/cp210x.c
1058 +++ b/drivers/usb/serial/cp210x.c
1059 @@ -108,6 +108,7 @@ static const struct usb_device_id id_table[] = {
1060 { USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demonstration module */
1061 { USB_DEVICE(0x10C4, 0x8281) }, /* Nanotec Plug & Drive */
1062 { USB_DEVICE(0x10C4, 0x8293) }, /* Telegesis ETRX2USB */
1063 + { USB_DEVICE(0x10C4, 0x82F4) }, /* Starizona MicroTouch */
1064 { USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */
1065 { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */
1066 { USB_DEVICE(0x10C4, 0x8382) }, /* Cygnal Integrated Products, Inc. */
1067 @@ -117,6 +118,7 @@ static const struct usb_device_id id_table[] = {
1068 { USB_DEVICE(0x10C4, 0x8418) }, /* IRZ Automation Teleport SG-10 GSM/GPRS Modem */
1069 { USB_DEVICE(0x10C4, 0x846E) }, /* BEI USB Sensor Interface (VCP) */
1070 { USB_DEVICE(0x10C4, 0x8477) }, /* Balluff RFID */
1071 + { USB_DEVICE(0x10C4, 0x84B6) }, /* Starizona Hyperion */
1072 { USB_DEVICE(0x10C4, 0x85EA) }, /* AC-Services IBUS-IF */
1073 { USB_DEVICE(0x10C4, 0x85EB) }, /* AC-Services CIS-IBUS */
1074 { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */
1075 @@ -140,6 +142,8 @@ static const struct usb_device_id id_table[] = {
1076 { USB_DEVICE(0x10C4, 0xF004) }, /* Elan Digital Systems USBcount50 */
1077 { USB_DEVICE(0x10C5, 0xEA61) }, /* Silicon Labs MobiData GPRS USB Modem */
1078 { USB_DEVICE(0x10CE, 0xEA6A) }, /* Silicon Labs MobiData GPRS USB Modem 100EU */
1079 + { USB_DEVICE(0x12B8, 0xEC60) }, /* Link G4 ECU */
1080 + { USB_DEVICE(0x12B8, 0xEC62) }, /* Link G4+ ECU */
1081 { USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */
1082 { USB_DEVICE(0x1555, 0x0004) }, /* Owen AC4 USB-RS485 Converter */
1083 { USB_DEVICE(0x166A, 0x0201) }, /* Clipsal 5500PACA C-Bus Pascal Automation Controller */
1084 diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
1085 index 12eab503efd1..364bc44610c1 100644
1086 --- a/drivers/xen/balloon.c
1087 +++ b/drivers/xen/balloon.c
1088 @@ -152,6 +152,8 @@ static DECLARE_WAIT_QUEUE_HEAD(balloon_wq);
1089 static void balloon_process(struct work_struct *work);
1090 static DECLARE_DELAYED_WORK(balloon_worker, balloon_process);
1091
1092 +static void release_memory_resource(struct resource *resource);
1093 +
1094 /* When ballooning out (allocating memory to return to Xen) we don't really
1095 want the kernel to try too hard since that can trigger the oom killer. */
1096 #define GFP_BALLOON \
1097 @@ -268,6 +270,20 @@ static struct resource *additional_memory_resource(phys_addr_t size)
1098 return NULL;
1099 }
1100
1101 +#ifdef CONFIG_SPARSEMEM
1102 + {
1103 + unsigned long limit = 1UL << (MAX_PHYSMEM_BITS - PAGE_SHIFT);
1104 + unsigned long pfn = res->start >> PAGE_SHIFT;
1105 +
1106 + if (pfn > limit) {
1107 + pr_err("New System RAM resource outside addressable RAM (%lu > %lu)\n",
1108 + pfn, limit);
1109 + release_memory_resource(res);
1110 + return NULL;
1111 + }
1112 + }
1113 +#endif
1114 +
1115 return res;
1116 }
1117
1118 diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c
1119 index 38272ad24551..f4edd6df3df2 100644
1120 --- a/drivers/xen/evtchn.c
1121 +++ b/drivers/xen/evtchn.c
1122 @@ -316,7 +316,6 @@ static int evtchn_resize_ring(struct per_user_data *u)
1123 {
1124 unsigned int new_size;
1125 evtchn_port_t *new_ring, *old_ring;
1126 - unsigned int p, c;
1127
1128 /*
1129 * Ensure the ring is large enough to capture all possible
1130 @@ -346,20 +345,17 @@ static int evtchn_resize_ring(struct per_user_data *u)
1131 /*
1132 * Copy the old ring contents to the new ring.
1133 *
1134 - * If the ring contents crosses the end of the current ring,
1135 - * it needs to be copied in two chunks.
1136 + * To take care of wrapping, a full ring, and the new index
1137 + * pointing into the second half, simply copy the old contents
1138 + * twice.
1139 *
1140 * +---------+ +------------------+
1141 - * |34567 12| -> | 1234567 |
1142 - * +-----p-c-+ +------------------+
1143 + * |34567 12| -> |34567 1234567 12|
1144 + * +-----p-c-+ +-------c------p---+
1145 */
1146 - p = evtchn_ring_offset(u, u->ring_prod);
1147 - c = evtchn_ring_offset(u, u->ring_cons);
1148 - if (p < c) {
1149 - memcpy(new_ring + c, u->ring + c, (u->ring_size - c) * sizeof(*u->ring));
1150 - memcpy(new_ring + u->ring_size, u->ring, p * sizeof(*u->ring));
1151 - } else
1152 - memcpy(new_ring + c, u->ring + c, (p - c) * sizeof(*u->ring));
1153 + memcpy(new_ring, old_ring, u->ring_size * sizeof(*u->ring));
1154 + memcpy(new_ring + u->ring_size, old_ring,
1155 + u->ring_size * sizeof(*u->ring));
1156
1157 u->ring = new_ring;
1158 u->ring_size = new_size;
1159 diff --git a/fs/pnode.c b/fs/pnode.c
1160 index 6367e1e435c6..99899705b105 100644
1161 --- a/fs/pnode.c
1162 +++ b/fs/pnode.c
1163 @@ -198,10 +198,15 @@ static struct mount *next_group(struct mount *m, struct mount *origin)
1164
1165 /* all accesses are serialized by namespace_sem */
1166 static struct user_namespace *user_ns;
1167 -static struct mount *last_dest, *last_source, *dest_master;
1168 +static struct mount *last_dest, *first_source, *last_source, *dest_master;
1169 static struct mountpoint *mp;
1170 static struct hlist_head *list;
1171
1172 +static inline bool peers(struct mount *m1, struct mount *m2)
1173 +{
1174 + return m1->mnt_group_id == m2->mnt_group_id && m1->mnt_group_id;
1175 +}
1176 +
1177 static int propagate_one(struct mount *m)
1178 {
1179 struct mount *child;
1180 @@ -212,24 +217,26 @@ static int propagate_one(struct mount *m)
1181 /* skip if mountpoint isn't covered by it */
1182 if (!is_subdir(mp->m_dentry, m->mnt.mnt_root))
1183 return 0;
1184 - if (m->mnt_group_id == last_dest->mnt_group_id) {
1185 + if (peers(m, last_dest)) {
1186 type = CL_MAKE_SHARED;
1187 } else {
1188 struct mount *n, *p;
1189 + bool done;
1190 for (n = m; ; n = p) {
1191 p = n->mnt_master;
1192 - if (p == dest_master || IS_MNT_MARKED(p)) {
1193 - while (last_dest->mnt_master != p) {
1194 - last_source = last_source->mnt_master;
1195 - last_dest = last_source->mnt_parent;
1196 - }
1197 - if (n->mnt_group_id != last_dest->mnt_group_id) {
1198 - last_source = last_source->mnt_master;
1199 - last_dest = last_source->mnt_parent;
1200 - }
1201 + if (p == dest_master || IS_MNT_MARKED(p))
1202 break;
1203 - }
1204 }
1205 + do {
1206 + struct mount *parent = last_source->mnt_parent;
1207 + if (last_source == first_source)
1208 + break;
1209 + done = parent->mnt_master == p;
1210 + if (done && peers(n, parent))
1211 + break;
1212 + last_source = last_source->mnt_master;
1213 + } while (!done);
1214 +
1215 type = CL_SLAVE;
1216 /* beginning of peer group among the slaves? */
1217 if (IS_MNT_SHARED(m))
1218 @@ -281,6 +288,7 @@ int propagate_mnt(struct mount *dest_mnt, struct mountpoint *dest_mp,
1219 */
1220 user_ns = current->nsproxy->mnt_ns->user_ns;
1221 last_dest = dest_mnt;
1222 + first_source = source_mnt;
1223 last_source = source_mnt;
1224 mp = dest_mp;
1225 list = tree_list;
1226 diff --git a/fs/proc/base.c b/fs/proc/base.c
1227 index b7de324bec11..e8bbf6cdb437 100644
1228 --- a/fs/proc/base.c
1229 +++ b/fs/proc/base.c
1230 @@ -954,7 +954,8 @@ static ssize_t environ_read(struct file *file, char __user *buf,
1231 int ret = 0;
1232 struct mm_struct *mm = file->private_data;
1233
1234 - if (!mm)
1235 + /* Ensure the process spawned far enough to have an environment. */
1236 + if (!mm || !mm->env_end)
1237 return 0;
1238
1239 page = (char *)__get_free_page(GFP_TEMPORARY);
1240 diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
1241 index c56988ac63f7..7cd0171963ae 100644
1242 --- a/include/linux/clk-provider.h
1243 +++ b/include/linux/clk-provider.h
1244 @@ -384,6 +384,7 @@ struct clk_divider {
1245 #define CLK_DIVIDER_MAX_AT_ZERO BIT(6)
1246
1247 extern const struct clk_ops clk_divider_ops;
1248 +extern const struct clk_ops clk_divider_ro_ops;
1249
1250 unsigned long divider_recalc_rate(struct clk_hw *hw, unsigned long parent_rate,
1251 unsigned int val, const struct clk_div_table *table,
1252 diff --git a/include/linux/hash.h b/include/linux/hash.h
1253 index 1afde47e1528..79c52fa81cac 100644
1254 --- a/include/linux/hash.h
1255 +++ b/include/linux/hash.h
1256 @@ -32,12 +32,28 @@
1257 #error Wordsize not 32 or 64
1258 #endif
1259
1260 +/*
1261 + * The above primes are actively bad for hashing, since they are
1262 + * too sparse. The 32-bit one is mostly ok, the 64-bit one causes
1263 + * real problems. Besides, the "prime" part is pointless for the
1264 + * multiplicative hash.
1265 + *
1266 + * Although a random odd number will do, it turns out that the golden
1267 + * ratio phi = (sqrt(5)-1)/2, or its negative, has particularly nice
1268 + * properties.
1269 + *
1270 + * These are the negative, (1 - phi) = (phi^2) = (3 - sqrt(5))/2.
1271 + * (See Knuth vol 3, section 6.4, exercise 9.)
1272 + */
1273 +#define GOLDEN_RATIO_32 0x61C88647
1274 +#define GOLDEN_RATIO_64 0x61C8864680B583EBull
1275 +
1276 static __always_inline u64 hash_64(u64 val, unsigned int bits)
1277 {
1278 u64 hash = val;
1279
1280 -#if defined(CONFIG_ARCH_HAS_FAST_MULTIPLIER) && BITS_PER_LONG == 64
1281 - hash = hash * GOLDEN_RATIO_PRIME_64;
1282 +#if BITS_PER_LONG == 64
1283 + hash = hash * GOLDEN_RATIO_64;
1284 #else
1285 /* Sigh, gcc can't optimise this alone like it does for 32 bits. */
1286 u64 n = hash;
1287 diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
1288 index 0816c872b689..a6cc576fd467 100644
1289 --- a/include/net/ip_vs.h
1290 +++ b/include/net/ip_vs.h
1291 @@ -1588,6 +1588,23 @@ static inline void ip_vs_conn_drop_conntrack(struct ip_vs_conn *cp)
1292 }
1293 #endif /* CONFIG_IP_VS_NFCT */
1294
1295 +/* Really using conntrack? */
1296 +static inline bool ip_vs_conn_uses_conntrack(struct ip_vs_conn *cp,
1297 + struct sk_buff *skb)
1298 +{
1299 +#ifdef CONFIG_IP_VS_NFCT
1300 + enum ip_conntrack_info ctinfo;
1301 + struct nf_conn *ct;
1302 +
1303 + if (!(cp->flags & IP_VS_CONN_F_NFCT))
1304 + return false;
1305 + ct = nf_ct_get(skb, &ctinfo);
1306 + if (ct && !nf_ct_is_untracked(ct))
1307 + return true;
1308 +#endif
1309 + return false;
1310 +}
1311 +
1312 static inline int
1313 ip_vs_dest_conn_overhead(struct ip_vs_dest *dest)
1314 {
1315 diff --git a/include/xen/page.h b/include/xen/page.h
1316 index 96294ac93755..9dc46cb8a0fd 100644
1317 --- a/include/xen/page.h
1318 +++ b/include/xen/page.h
1319 @@ -15,9 +15,9 @@
1320 */
1321
1322 #define xen_pfn_to_page(xen_pfn) \
1323 - ((pfn_to_page(((unsigned long)(xen_pfn) << XEN_PAGE_SHIFT) >> PAGE_SHIFT)))
1324 + (pfn_to_page((unsigned long)(xen_pfn) >> (PAGE_SHIFT - XEN_PAGE_SHIFT)))
1325 #define page_to_xen_pfn(page) \
1326 - (((page_to_pfn(page)) << PAGE_SHIFT) >> XEN_PAGE_SHIFT)
1327 + ((page_to_pfn(page)) << (PAGE_SHIFT - XEN_PAGE_SHIFT))
1328
1329 #define XEN_PFN_PER_PAGE (PAGE_SIZE / XEN_PAGE_SIZE)
1330
1331 diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
1332 index d202d991edae..996f0fd34312 100644
1333 --- a/kernel/trace/trace_events.c
1334 +++ b/kernel/trace/trace_events.c
1335 @@ -2107,8 +2107,13 @@ event_create_dir(struct dentry *parent, struct trace_event_file *file)
1336 trace_create_file("filter", 0644, file->dir, file,
1337 &ftrace_event_filter_fops);
1338
1339 - trace_create_file("trigger", 0644, file->dir, file,
1340 - &event_trigger_fops);
1341 + /*
1342 + * Only event directories that can be enabled should have
1343 + * triggers.
1344 + */
1345 + if (!(call->flags & TRACE_EVENT_FL_IGNORE_ENABLE))
1346 + trace_create_file("trigger", 0644, file->dir, file,
1347 + &event_trigger_fops);
1348
1349 trace_create_file("format", 0444, file->dir, call,
1350 &ftrace_event_format_fops);
1351 diff --git a/lib/test-string_helpers.c b/lib/test-string_helpers.c
1352 index 98866a770770..25b5cbfb7615 100644
1353 --- a/lib/test-string_helpers.c
1354 +++ b/lib/test-string_helpers.c
1355 @@ -327,36 +327,67 @@ out:
1356 }
1357
1358 #define string_get_size_maxbuf 16
1359 -#define test_string_get_size_one(size, blk_size, units, exp_result) \
1360 +#define test_string_get_size_one(size, blk_size, exp_result10, exp_result2) \
1361 do { \
1362 - BUILD_BUG_ON(sizeof(exp_result) >= string_get_size_maxbuf); \
1363 - __test_string_get_size((size), (blk_size), (units), \
1364 - (exp_result)); \
1365 + BUILD_BUG_ON(sizeof(exp_result10) >= string_get_size_maxbuf); \
1366 + BUILD_BUG_ON(sizeof(exp_result2) >= string_get_size_maxbuf); \
1367 + __test_string_get_size((size), (blk_size), (exp_result10), \
1368 + (exp_result2)); \
1369 } while (0)
1370
1371
1372 -static __init void __test_string_get_size(const u64 size, const u64 blk_size,
1373 - const enum string_size_units units,
1374 - const char *exp_result)
1375 +static __init void test_string_get_size_check(const char *units,
1376 + const char *exp,
1377 + char *res,
1378 + const u64 size,
1379 + const u64 blk_size)
1380 {
1381 - char buf[string_get_size_maxbuf];
1382 -
1383 - string_get_size(size, blk_size, units, buf, sizeof(buf));
1384 - if (!memcmp(buf, exp_result, strlen(exp_result) + 1))
1385 + if (!memcmp(res, exp, strlen(exp) + 1))
1386 return;
1387
1388 - buf[sizeof(buf) - 1] = '\0';
1389 - pr_warn("Test 'test_string_get_size_one' failed!\n");
1390 - pr_warn("string_get_size(size = %llu, blk_size = %llu, units = %d\n",
1391 + res[string_get_size_maxbuf - 1] = '\0';
1392 +
1393 + pr_warn("Test 'test_string_get_size' failed!\n");
1394 + pr_warn("string_get_size(size = %llu, blk_size = %llu, units = %s)\n",
1395 size, blk_size, units);
1396 - pr_warn("expected: '%s', got '%s'\n", exp_result, buf);
1397 + pr_warn("expected: '%s', got '%s'\n", exp, res);
1398 +}
1399 +
1400 +static __init void __test_string_get_size(const u64 size, const u64 blk_size,
1401 + const char *exp_result10,
1402 + const char *exp_result2)
1403 +{
1404 + char buf10[string_get_size_maxbuf];
1405 + char buf2[string_get_size_maxbuf];
1406 +
1407 + string_get_size(size, blk_size, STRING_UNITS_10, buf10, sizeof(buf10));
1408 + string_get_size(size, blk_size, STRING_UNITS_2, buf2, sizeof(buf2));
1409 +
1410 + test_string_get_size_check("STRING_UNITS_10", exp_result10, buf10,
1411 + size, blk_size);
1412 +
1413 + test_string_get_size_check("STRING_UNITS_2", exp_result2, buf2,
1414 + size, blk_size);
1415 }
1416
1417 static __init void test_string_get_size(void)
1418 {
1419 - test_string_get_size_one(16384, 512, STRING_UNITS_2, "8.00 MiB");
1420 - test_string_get_size_one(8192, 4096, STRING_UNITS_10, "32.7 MB");
1421 - test_string_get_size_one(1, 512, STRING_UNITS_10, "512 B");
1422 + /* small values */
1423 + test_string_get_size_one(0, 512, "0 B", "0 B");
1424 + test_string_get_size_one(1, 512, "512 B", "512 B");
1425 + test_string_get_size_one(1100, 1, "1.10 kB", "1.07 KiB");
1426 +
1427 + /* normal values */
1428 + test_string_get_size_one(16384, 512, "8.39 MB", "8.00 MiB");
1429 + test_string_get_size_one(500118192, 512, "256 GB", "238 GiB");
1430 + test_string_get_size_one(8192, 4096, "33.6 MB", "32.0 MiB");
1431 +
1432 + /* weird block sizes */
1433 + test_string_get_size_one(3000, 1900, "5.70 MB", "5.44 MiB");
1434 +
1435 + /* huge values */
1436 + test_string_get_size_one(U64_MAX, 4096, "75.6 ZB", "64.0 ZiB");
1437 + test_string_get_size_one(4096, U64_MAX, "75.6 ZB", "64.0 ZiB");
1438 }
1439
1440 static int __init test_string_helpers_init(void)
1441 diff --git a/mm/compaction.c b/mm/compaction.c
1442 index de3e1e71cd9f..7881e072dc33 100644
1443 --- a/mm/compaction.c
1444 +++ b/mm/compaction.c
1445 @@ -880,16 +880,8 @@ isolate_migratepages_range(struct compact_control *cc, unsigned long start_pfn,
1446 pfn = isolate_migratepages_block(cc, pfn, block_end_pfn,
1447 ISOLATE_UNEVICTABLE);
1448
1449 - /*
1450 - * In case of fatal failure, release everything that might
1451 - * have been isolated in the previous iteration, and signal
1452 - * the failure back to caller.
1453 - */
1454 - if (!pfn) {
1455 - putback_movable_pages(&cc->migratepages);
1456 - cc->nr_migratepages = 0;
1457 + if (!pfn)
1458 break;
1459 - }
1460
1461 if (cc->nr_migratepages == COMPACT_CLUSTER_MAX)
1462 break;
1463 diff --git a/mm/page-writeback.c b/mm/page-writeback.c
1464 index d15d88c8efa1..e40c9364582d 100644
1465 --- a/mm/page-writeback.c
1466 +++ b/mm/page-writeback.c
1467 @@ -1899,7 +1899,8 @@ bool wb_over_bg_thresh(struct bdi_writeback *wb)
1468 if (gdtc->dirty > gdtc->bg_thresh)
1469 return true;
1470
1471 - if (wb_stat(wb, WB_RECLAIMABLE) > __wb_calc_thresh(gdtc))
1472 + if (wb_stat(wb, WB_RECLAIMABLE) >
1473 + wb_calc_thresh(gdtc->wb, gdtc->bg_thresh))
1474 return true;
1475
1476 if (mdtc) {
1477 @@ -1913,7 +1914,8 @@ bool wb_over_bg_thresh(struct bdi_writeback *wb)
1478 if (mdtc->dirty > mdtc->bg_thresh)
1479 return true;
1480
1481 - if (wb_stat(wb, WB_RECLAIMABLE) > __wb_calc_thresh(mdtc))
1482 + if (wb_stat(wb, WB_RECLAIMABLE) >
1483 + wb_calc_thresh(mdtc->wb, mdtc->bg_thresh))
1484 return true;
1485 }
1486
1487 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
1488 index c69531afbd8f..6cf5cadeaef7 100644
1489 --- a/mm/page_alloc.c
1490 +++ b/mm/page_alloc.c
1491 @@ -6193,7 +6193,7 @@ int __meminit init_per_zone_wmark_min(void)
1492 setup_per_zone_inactive_ratio();
1493 return 0;
1494 }
1495 -module_init(init_per_zone_wmark_min)
1496 +core_initcall(init_per_zone_wmark_min)
1497
1498 /*
1499 * min_free_kbytes_sysctl_handler - just a wrapper around proc_dointvec() so
1500 diff --git a/mm/zswap.c b/mm/zswap.c
1501 index bf14508afd64..340261946fda 100644
1502 --- a/mm/zswap.c
1503 +++ b/mm/zswap.c
1504 @@ -170,6 +170,8 @@ static struct zswap_tree *zswap_trees[MAX_SWAPFILES];
1505 static LIST_HEAD(zswap_pools);
1506 /* protects zswap_pools list modification */
1507 static DEFINE_SPINLOCK(zswap_pools_lock);
1508 +/* pool counter to provide unique names to zpool */
1509 +static atomic_t zswap_pools_count = ATOMIC_INIT(0);
1510
1511 /* used by param callback function */
1512 static bool zswap_init_started;
1513 @@ -565,6 +567,7 @@ static struct zswap_pool *zswap_pool_find_get(char *type, char *compressor)
1514 static struct zswap_pool *zswap_pool_create(char *type, char *compressor)
1515 {
1516 struct zswap_pool *pool;
1517 + char name[38]; /* 'zswap' + 32 char (max) num + \0 */
1518 gfp_t gfp = __GFP_NORETRY | __GFP_NOWARN | __GFP_KSWAPD_RECLAIM;
1519
1520 pool = kzalloc(sizeof(*pool), GFP_KERNEL);
1521 @@ -573,7 +576,10 @@ static struct zswap_pool *zswap_pool_create(char *type, char *compressor)
1522 return NULL;
1523 }
1524
1525 - pool->zpool = zpool_create_pool(type, "zswap", gfp, &zswap_zpool_ops);
1526 + /* unique name for each pool specifically required by zsmalloc */
1527 + snprintf(name, 38, "zswap%x", atomic_inc_return(&zswap_pools_count));
1528 +
1529 + pool->zpool = zpool_create_pool(type, name, gfp, &zswap_zpool_ops);
1530 if (!pool->zpool) {
1531 pr_err("%s zpool not available\n", type);
1532 goto error;
1533 diff --git a/net/batman-adv/distributed-arp-table.c b/net/batman-adv/distributed-arp-table.c
1534 index a49c705fb86b..5f19133c5530 100644
1535 --- a/net/batman-adv/distributed-arp-table.c
1536 +++ b/net/batman-adv/distributed-arp-table.c
1537 @@ -553,6 +553,7 @@ static void batadv_choose_next_candidate(struct batadv_priv *bat_priv,
1538 * be sent to
1539 * @bat_priv: the bat priv with all the soft interface information
1540 * @ip_dst: ipv4 to look up in the DHT
1541 + * @vid: VLAN identifier
1542 *
1543 * An originator O is selected if and only if its DHT_ID value is one of three
1544 * closest values (from the LEFT, with wrap around if needed) then the hash
1545 @@ -561,7 +562,8 @@ static void batadv_choose_next_candidate(struct batadv_priv *bat_priv,
1546 * Returns the candidate array of size BATADV_DAT_CANDIDATE_NUM.
1547 */
1548 static struct batadv_dat_candidate *
1549 -batadv_dat_select_candidates(struct batadv_priv *bat_priv, __be32 ip_dst)
1550 +batadv_dat_select_candidates(struct batadv_priv *bat_priv, __be32 ip_dst,
1551 + unsigned short vid)
1552 {
1553 int select;
1554 batadv_dat_addr_t last_max = BATADV_DAT_ADDR_MAX, ip_key;
1555 @@ -577,7 +579,7 @@ batadv_dat_select_candidates(struct batadv_priv *bat_priv, __be32 ip_dst)
1556 return NULL;
1557
1558 dat.ip = ip_dst;
1559 - dat.vid = 0;
1560 + dat.vid = vid;
1561 ip_key = (batadv_dat_addr_t)batadv_hash_dat(&dat,
1562 BATADV_DAT_ADDR_MAX);
1563
1564 @@ -597,6 +599,7 @@ batadv_dat_select_candidates(struct batadv_priv *bat_priv, __be32 ip_dst)
1565 * @bat_priv: the bat priv with all the soft interface information
1566 * @skb: payload to send
1567 * @ip: the DHT key
1568 + * @vid: VLAN identifier
1569 * @packet_subtype: unicast4addr packet subtype to use
1570 *
1571 * This function copies the skb with pskb_copy() and is sent as unicast packet
1572 @@ -607,7 +610,7 @@ batadv_dat_select_candidates(struct batadv_priv *bat_priv, __be32 ip_dst)
1573 */
1574 static bool batadv_dat_send_data(struct batadv_priv *bat_priv,
1575 struct sk_buff *skb, __be32 ip,
1576 - int packet_subtype)
1577 + unsigned short vid, int packet_subtype)
1578 {
1579 int i;
1580 bool ret = false;
1581 @@ -616,7 +619,7 @@ static bool batadv_dat_send_data(struct batadv_priv *bat_priv,
1582 struct sk_buff *tmp_skb;
1583 struct batadv_dat_candidate *cand;
1584
1585 - cand = batadv_dat_select_candidates(bat_priv, ip);
1586 + cand = batadv_dat_select_candidates(bat_priv, ip, vid);
1587 if (!cand)
1588 goto out;
1589
1590 @@ -1004,7 +1007,7 @@ bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv,
1591 ret = true;
1592 } else {
1593 /* Send the request to the DHT */
1594 - ret = batadv_dat_send_data(bat_priv, skb, ip_dst,
1595 + ret = batadv_dat_send_data(bat_priv, skb, ip_dst, vid,
1596 BATADV_P_DAT_DHT_GET);
1597 }
1598 out:
1599 @@ -1132,8 +1135,8 @@ void batadv_dat_snoop_outgoing_arp_reply(struct batadv_priv *bat_priv,
1600 /* Send the ARP reply to the candidates for both the IP addresses that
1601 * the node obtained from the ARP reply
1602 */
1603 - batadv_dat_send_data(bat_priv, skb, ip_src, BATADV_P_DAT_DHT_PUT);
1604 - batadv_dat_send_data(bat_priv, skb, ip_dst, BATADV_P_DAT_DHT_PUT);
1605 + batadv_dat_send_data(bat_priv, skb, ip_src, vid, BATADV_P_DAT_DHT_PUT);
1606 + batadv_dat_send_data(bat_priv, skb, ip_dst, vid, BATADV_P_DAT_DHT_PUT);
1607 }
1608
1609 /**
1610 diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
1611 index 3207667e69de..d8a2f33e60e5 100644
1612 --- a/net/batman-adv/routing.c
1613 +++ b/net/batman-adv/routing.c
1614 @@ -104,6 +104,15 @@ static void _batadv_update_route(struct batadv_priv *bat_priv,
1615 neigh_node = NULL;
1616
1617 spin_lock_bh(&orig_node->neigh_list_lock);
1618 + /* curr_router used earlier may not be the current orig_ifinfo->router
1619 + * anymore because it was dereferenced outside of the neigh_list_lock
1620 + * protected region. After the new best neighbor has replace the current
1621 + * best neighbor the reference counter needs to decrease. Consequently,
1622 + * the code needs to ensure the curr_router variable contains a pointer
1623 + * to the replaced best neighbor.
1624 + */
1625 + curr_router = rcu_dereference_protected(orig_ifinfo->router, true);
1626 +
1627 rcu_assign_pointer(orig_ifinfo->router, neigh_node);
1628 spin_unlock_bh(&orig_node->neigh_list_lock);
1629 batadv_orig_ifinfo_free_ref(orig_ifinfo);
1630 diff --git a/net/batman-adv/send.c b/net/batman-adv/send.c
1631 index f664324805eb..0e0c3b8ed927 100644
1632 --- a/net/batman-adv/send.c
1633 +++ b/net/batman-adv/send.c
1634 @@ -630,6 +630,9 @@ batadv_purge_outstanding_packets(struct batadv_priv *bat_priv,
1635
1636 if (pending) {
1637 hlist_del(&forw_packet->list);
1638 + if (!forw_packet->own)
1639 + atomic_inc(&bat_priv->bcast_queue_left);
1640 +
1641 batadv_forw_packet_free(forw_packet);
1642 }
1643 }
1644 @@ -657,6 +660,9 @@ batadv_purge_outstanding_packets(struct batadv_priv *bat_priv,
1645
1646 if (pending) {
1647 hlist_del(&forw_packet->list);
1648 + if (!forw_packet->own)
1649 + atomic_inc(&bat_priv->batman_queue_left);
1650 +
1651 batadv_forw_packet_free(forw_packet);
1652 }
1653 }
1654 diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
1655 index ac4d08de5df4..720f1a5b81ac 100644
1656 --- a/net/batman-adv/soft-interface.c
1657 +++ b/net/batman-adv/soft-interface.c
1658 @@ -407,11 +407,17 @@ void batadv_interface_rx(struct net_device *soft_iface,
1659 */
1660 nf_reset(skb);
1661
1662 + if (unlikely(!pskb_may_pull(skb, ETH_HLEN)))
1663 + goto dropped;
1664 +
1665 vid = batadv_get_vid(skb, 0);
1666 ethhdr = eth_hdr(skb);
1667
1668 switch (ntohs(ethhdr->h_proto)) {
1669 case ETH_P_8021Q:
1670 + if (!pskb_may_pull(skb, VLAN_ETH_HLEN))
1671 + goto dropped;
1672 +
1673 vhdr = (struct vlan_ethhdr *)skb->data;
1674
1675 if (vhdr->h_vlan_encapsulated_proto != ethertype)
1676 @@ -423,8 +429,6 @@ void batadv_interface_rx(struct net_device *soft_iface,
1677 }
1678
1679 /* skb->dev & skb->pkt_type are set here */
1680 - if (unlikely(!pskb_may_pull(skb, ETH_HLEN)))
1681 - goto dropped;
1682 skb->protocol = eth_type_trans(skb, soft_iface);
1683
1684 /* should not be necessary anymore as we use skb_pull_rcsum()
1685 diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
1686 index 7a2b7915093b..bcb0a1b64556 100644
1687 --- a/net/mac80211/iface.c
1688 +++ b/net/mac80211/iface.c
1689 @@ -1750,7 +1750,7 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name,
1690
1691 ret = dev_alloc_name(ndev, ndev->name);
1692 if (ret < 0) {
1693 - free_netdev(ndev);
1694 + ieee80211_if_free(ndev);
1695 return ret;
1696 }
1697
1698 @@ -1836,7 +1836,7 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name,
1699
1700 ret = register_netdevice(ndev);
1701 if (ret) {
1702 - free_netdev(ndev);
1703 + ieee80211_if_free(ndev);
1704 return ret;
1705 }
1706 }
1707 diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c
1708 index f57b4dcdb233..4da560005b0e 100644
1709 --- a/net/netfilter/ipvs/ip_vs_core.c
1710 +++ b/net/netfilter/ipvs/ip_vs_core.c
1711 @@ -1757,15 +1757,34 @@ ip_vs_in(struct netns_ipvs *ipvs, unsigned int hooknum, struct sk_buff *skb, int
1712 cp = pp->conn_in_get(ipvs, af, skb, &iph);
1713
1714 conn_reuse_mode = sysctl_conn_reuse_mode(ipvs);
1715 - if (conn_reuse_mode && !iph.fragoffs &&
1716 - is_new_conn(skb, &iph) && cp &&
1717 - ((unlikely(sysctl_expire_nodest_conn(ipvs)) && cp->dest &&
1718 - unlikely(!atomic_read(&cp->dest->weight))) ||
1719 - unlikely(is_new_conn_expected(cp, conn_reuse_mode)))) {
1720 - if (!atomic_read(&cp->n_control))
1721 - ip_vs_conn_expire_now(cp);
1722 - __ip_vs_conn_put(cp);
1723 - cp = NULL;
1724 + if (conn_reuse_mode && !iph.fragoffs && is_new_conn(skb, &iph) && cp) {
1725 + bool uses_ct = false, resched = false;
1726 +
1727 + if (unlikely(sysctl_expire_nodest_conn(ipvs)) && cp->dest &&
1728 + unlikely(!atomic_read(&cp->dest->weight))) {
1729 + resched = true;
1730 + uses_ct = ip_vs_conn_uses_conntrack(cp, skb);
1731 + } else if (is_new_conn_expected(cp, conn_reuse_mode)) {
1732 + uses_ct = ip_vs_conn_uses_conntrack(cp, skb);
1733 + if (!atomic_read(&cp->n_control)) {
1734 + resched = true;
1735 + } else {
1736 + /* Do not reschedule controlling connection
1737 + * that uses conntrack while it is still
1738 + * referenced by controlled connection(s).
1739 + */
1740 + resched = !uses_ct;
1741 + }
1742 + }
1743 +
1744 + if (resched) {
1745 + if (!atomic_read(&cp->n_control))
1746 + ip_vs_conn_expire_now(cp);
1747 + __ip_vs_conn_put(cp);
1748 + if (uses_ct)
1749 + return NF_DROP;
1750 + cp = NULL;
1751 + }
1752 }
1753
1754 if (unlikely(!cp)) {
1755 diff --git a/net/netfilter/ipvs/ip_vs_pe_sip.c b/net/netfilter/ipvs/ip_vs_pe_sip.c
1756 index 1b8d594e493a..0a6eb5c0d9e9 100644
1757 --- a/net/netfilter/ipvs/ip_vs_pe_sip.c
1758 +++ b/net/netfilter/ipvs/ip_vs_pe_sip.c
1759 @@ -70,10 +70,10 @@ ip_vs_sip_fill_param(struct ip_vs_conn_param *p, struct sk_buff *skb)
1760 const char *dptr;
1761 int retc;
1762
1763 - ip_vs_fill_iph_skb(p->af, skb, false, &iph);
1764 + retc = ip_vs_fill_iph_skb(p->af, skb, false, &iph);
1765
1766 /* Only useful with UDP */
1767 - if (iph.protocol != IPPROTO_UDP)
1768 + if (!retc || iph.protocol != IPPROTO_UDP)
1769 return -EINVAL;
1770 /* todo: IPv6 fragments:
1771 * I think this only should be done for the first fragment. /HS
1772 @@ -88,7 +88,7 @@ ip_vs_sip_fill_param(struct ip_vs_conn_param *p, struct sk_buff *skb)
1773 dptr = skb->data + dataoff;
1774 datalen = skb->len - dataoff;
1775
1776 - if (get_callid(dptr, dataoff, datalen, &matchoff, &matchlen))
1777 + if (get_callid(dptr, 0, datalen, &matchoff, &matchlen))
1778 return -EINVAL;
1779
1780 /* N.B: pe_data is only set on success,