Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2801 - (hide 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 niro 2801 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,