Magellan Linux

Annotation of /trunk/kernel-magellan/patches-4.5/0103-4.5.4-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2785 - (hide annotations) (download)
Fri May 13 07:36:36 2016 UTC (8 years ago) by niro
File size: 83599 byte(s)
-linux-4.5.4
1 niro 2785 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 5a389bc68e0e..77e4c10b4c06 100644
18     --- a/MAINTAINERS
19     +++ b/MAINTAINERS
20     @@ -4163,8 +4163,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 9b56a6c5e36f..d64eade37241 100644
33     --- a/Makefile
34     +++ b/Makefile
35     @@ -1,6 +1,6 @@
36     VERSION = 4
37     PATCHLEVEL = 5
38     -SUBLEVEL = 3
39     +SUBLEVEL = 4
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/boot/dts/qcom-apq8064.dtsi b/arch/arm/boot/dts/qcom-apq8064.dtsi
96     index ed521e85e208..e8bc7e8bedd2 100644
97     --- a/arch/arm/boot/dts/qcom-apq8064.dtsi
98     +++ b/arch/arm/boot/dts/qcom-apq8064.dtsi
99     @@ -665,7 +665,7 @@
100     };
101    
102     sata0: sata@29000000 {
103     - compatible = "generic-ahci";
104     + compatible = "qcom,apq8064-ahci", "generic-ahci";
105     status = "disabled";
106     reg = <0x29000000 0x180>;
107     interrupts = <GIC_SPI 209 IRQ_TYPE_NONE>;
108     @@ -687,6 +687,7 @@
109    
110     phys = <&sata_phy0>;
111     phy-names = "sata-phy";
112     + ports-implemented = <0x1>;
113     };
114    
115     /* Temporary fixed regulator */
116     diff --git a/arch/arm/mach-cns3xxx/pcie.c b/arch/arm/mach-cns3xxx/pcie.c
117     index 47905a50e075..318394ed5c7a 100644
118     --- a/arch/arm/mach-cns3xxx/pcie.c
119     +++ b/arch/arm/mach-cns3xxx/pcie.c
120     @@ -220,13 +220,13 @@ static void cns3xxx_write_config(struct cns3xxx_pcie *cnspci,
121     u32 mask = (0x1ull << (size * 8)) - 1;
122     int shift = (where % 4) * 8;
123    
124     - v = readl_relaxed(base + (where & 0xffc));
125     + v = readl_relaxed(base);
126    
127     v &= ~(mask << shift);
128     v |= (val & mask) << shift;
129    
130     - writel_relaxed(v, base + (where & 0xffc));
131     - readl_relaxed(base + (where & 0xffc));
132     + writel_relaxed(v, base);
133     + readl_relaxed(base);
134     }
135    
136     static void __init cns3xxx_pcie_hw_init(struct cns3xxx_pcie *cnspci)
137     diff --git a/arch/arm/mach-exynos/pm_domains.c b/arch/arm/mach-exynos/pm_domains.c
138     index 7c21760f590f..875a2bab64f6 100644
139     --- a/arch/arm/mach-exynos/pm_domains.c
140     +++ b/arch/arm/mach-exynos/pm_domains.c
141     @@ -92,7 +92,7 @@ static int exynos_pd_power(struct generic_pm_domain *domain, bool power_on)
142     if (IS_ERR(pd->clk[i]))
143     break;
144    
145     - if (IS_ERR(pd->clk[i]))
146     + if (IS_ERR(pd->pclk[i]))
147     continue; /* Skip on first power up */
148     if (clk_set_parent(pd->clk[i], pd->pclk[i]))
149     pr_err("%s: error setting parent to clock%d\n",
150     diff --git a/arch/arm/mach-socfpga/headsmp.S b/arch/arm/mach-socfpga/headsmp.S
151     index 5d94b7a2fb10..c160fa3007e9 100644
152     --- a/arch/arm/mach-socfpga/headsmp.S
153     +++ b/arch/arm/mach-socfpga/headsmp.S
154     @@ -13,6 +13,7 @@
155     #include <asm/assembler.h>
156    
157     .arch armv7-a
158     + .arm
159    
160     ENTRY(secondary_trampoline)
161     /* CPU1 will always fetch from 0x0 when it is brought out of reset.
162     diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S
163     index c976ebfe2269..57b4836b7ecd 100644
164     --- a/arch/parisc/kernel/syscall.S
165     +++ b/arch/parisc/kernel/syscall.S
166     @@ -344,7 +344,7 @@ tracesys_next:
167     #endif
168    
169     cmpib,COND(=),n -1,%r20,tracesys_exit /* seccomp may have returned -1 */
170     - comiclr,>>= __NR_Linux_syscalls, %r20, %r0
171     + comiclr,>> __NR_Linux_syscalls, %r20, %r0
172     b,n .Ltracesys_nosys
173    
174     LDREGX %r20(%r19), %r19
175     diff --git a/arch/powerpc/include/asm/word-at-a-time.h b/arch/powerpc/include/asm/word-at-a-time.h
176     index e4396a7d0f7c..4afe66aa1400 100644
177     --- a/arch/powerpc/include/asm/word-at-a-time.h
178     +++ b/arch/powerpc/include/asm/word-at-a-time.h
179     @@ -82,7 +82,7 @@ static inline unsigned long create_zero_mask(unsigned long bits)
180     "andc %1,%1,%2\n\t"
181     "popcntd %0,%1"
182     : "=r" (leading_zero_bits), "=&r" (trailing_zero_bit_mask)
183     - : "r" (bits));
184     + : "b" (bits));
185    
186     return leading_zero_bits;
187     }
188     diff --git a/arch/x86/kernel/cpu/mcheck/therm_throt.c b/arch/x86/kernel/cpu/mcheck/therm_throt.c
189     index 2c5aaf8c2e2f..05538582a809 100644
190     --- a/arch/x86/kernel/cpu/mcheck/therm_throt.c
191     +++ b/arch/x86/kernel/cpu/mcheck/therm_throt.c
192     @@ -385,6 +385,9 @@ static void intel_thermal_interrupt(void)
193     {
194     __u64 msr_val;
195    
196     + if (static_cpu_has(X86_FEATURE_HWP))
197     + wrmsrl_safe(MSR_HWP_STATUS, 0);
198     +
199     rdmsrl(MSR_IA32_THERM_STATUS, msr_val);
200    
201     /* Check for violation of core thermal thresholds*/
202     diff --git a/arch/x86/kernel/sysfb_efi.c b/arch/x86/kernel/sysfb_efi.c
203     index b285d4e8c68e..5da924bbf0a0 100644
204     --- a/arch/x86/kernel/sysfb_efi.c
205     +++ b/arch/x86/kernel/sysfb_efi.c
206     @@ -106,14 +106,24 @@ static int __init efifb_set_system(const struct dmi_system_id *id)
207     continue;
208     for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
209     resource_size_t start, end;
210     + unsigned long flags;
211     +
212     + flags = pci_resource_flags(dev, i);
213     + if (!(flags & IORESOURCE_MEM))
214     + continue;
215     +
216     + if (flags & IORESOURCE_UNSET)
217     + continue;
218     +
219     + if (pci_resource_len(dev, i) == 0)
220     + continue;
221    
222     start = pci_resource_start(dev, i);
223     - if (start == 0)
224     - break;
225     end = pci_resource_end(dev, i);
226     if (screen_info.lfb_base >= start &&
227     screen_info.lfb_base < end) {
228     found_bar = 1;
229     + break;
230     }
231     }
232     }
233     diff --git a/arch/x86/kernel/tsc_msr.c b/arch/x86/kernel/tsc_msr.c
234     index 92ae6acac8a7..6aa0f4d9eea6 100644
235     --- a/arch/x86/kernel/tsc_msr.c
236     +++ b/arch/x86/kernel/tsc_msr.c
237     @@ -92,7 +92,7 @@ unsigned long try_msr_calibrate_tsc(void)
238    
239     if (freq_desc_tables[cpu_index].msr_plat) {
240     rdmsr(MSR_PLATFORM_INFO, lo, hi);
241     - ratio = (lo >> 8) & 0x1f;
242     + ratio = (lo >> 8) & 0xff;
243     } else {
244     rdmsr(MSR_IA32_PERF_STATUS, lo, hi);
245     ratio = (hi >> 8) & 0x1f;
246     diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c
247     index 6979186dbd4b..9f77943653fb 100644
248     --- a/drivers/acpi/acpi_processor.c
249     +++ b/drivers/acpi/acpi_processor.c
250     @@ -491,6 +491,58 @@ static void acpi_processor_remove(struct acpi_device *device)
251     }
252     #endif /* CONFIG_ACPI_HOTPLUG_CPU */
253    
254     +#ifdef CONFIG_X86
255     +static bool acpi_hwp_native_thermal_lvt_set;
256     +static acpi_status __init acpi_hwp_native_thermal_lvt_osc(acpi_handle handle,
257     + u32 lvl,
258     + void *context,
259     + void **rv)
260     +{
261     + u8 sb_uuid_str[] = "4077A616-290C-47BE-9EBD-D87058713953";
262     + u32 capbuf[2];
263     + struct acpi_osc_context osc_context = {
264     + .uuid_str = sb_uuid_str,
265     + .rev = 1,
266     + .cap.length = 8,
267     + .cap.pointer = capbuf,
268     + };
269     +
270     + if (acpi_hwp_native_thermal_lvt_set)
271     + return AE_CTRL_TERMINATE;
272     +
273     + capbuf[0] = 0x0000;
274     + capbuf[1] = 0x1000; /* set bit 12 */
275     +
276     + if (ACPI_SUCCESS(acpi_run_osc(handle, &osc_context))) {
277     + if (osc_context.ret.pointer && osc_context.ret.length > 1) {
278     + u32 *capbuf_ret = osc_context.ret.pointer;
279     +
280     + if (capbuf_ret[1] & 0x1000) {
281     + acpi_handle_info(handle,
282     + "_OSC native thermal LVT Acked\n");
283     + acpi_hwp_native_thermal_lvt_set = true;
284     + }
285     + }
286     + kfree(osc_context.ret.pointer);
287     + }
288     +
289     + return AE_OK;
290     +}
291     +
292     +void __init acpi_early_processor_osc(void)
293     +{
294     + if (boot_cpu_has(X86_FEATURE_HWP)) {
295     + acpi_walk_namespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT,
296     + ACPI_UINT32_MAX,
297     + acpi_hwp_native_thermal_lvt_osc,
298     + NULL, NULL, NULL);
299     + acpi_get_devices(ACPI_PROCESSOR_DEVICE_HID,
300     + acpi_hwp_native_thermal_lvt_osc,
301     + NULL, NULL);
302     + }
303     +}
304     +#endif
305     +
306     /*
307     * The following ACPI IDs are known to be suitable for representing as
308     * processor devices.
309     diff --git a/drivers/acpi/acpica/dsmethod.c b/drivers/acpi/acpica/dsmethod.c
310     index 6a72047aae1c..c3a052d43317 100644
311     --- a/drivers/acpi/acpica/dsmethod.c
312     +++ b/drivers/acpi/acpica/dsmethod.c
313     @@ -428,6 +428,9 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
314     obj_desc->method.mutex->mutex.
315     original_sync_level =
316     obj_desc->method.mutex->mutex.sync_level;
317     +
318     + obj_desc->method.mutex->mutex.thread_id =
319     + acpi_os_get_thread_id();
320     }
321     }
322    
323     diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
324     index 891c42d1cd65..f9081b791b81 100644
325     --- a/drivers/acpi/bus.c
326     +++ b/drivers/acpi/bus.c
327     @@ -1005,6 +1005,9 @@ static int __init acpi_bus_init(void)
328     goto error1;
329     }
330    
331     + /* Set capability bits for _OSC under processor scope */
332     + acpi_early_processor_osc();
333     +
334     /*
335     * _OSC method may exist in module level code,
336     * so it must be run after ACPI_FULL_INITIALIZATION
337     diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h
338     index 1e6833a5cd44..6f41c73f82bb 100644
339     --- a/drivers/acpi/internal.h
340     +++ b/drivers/acpi/internal.h
341     @@ -138,6 +138,12 @@ void acpi_early_processor_set_pdc(void);
342     static inline void acpi_early_processor_set_pdc(void) {}
343     #endif
344    
345     +#ifdef CONFIG_X86
346     +void acpi_early_processor_osc(void);
347     +#else
348     +static inline void acpi_early_processor_osc(void) {}
349     +#endif
350     +
351     /* --------------------------------------------------------------------------
352     Embedded Controller
353     -------------------------------------------------------------------------- */
354     diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c
355     index 04975b851c23..639adb1f8abd 100644
356     --- a/drivers/ata/ahci_platform.c
357     +++ b/drivers/ata/ahci_platform.c
358     @@ -51,6 +51,9 @@ static int ahci_probe(struct platform_device *pdev)
359     if (rc)
360     return rc;
361    
362     + of_property_read_u32(dev->of_node,
363     + "ports-implemented", &hpriv->force_port_map);
364     +
365     if (of_device_is_compatible(dev->of_node, "hisilicon,hisi-ahci"))
366     hpriv->flags |= AHCI_HFLAG_NO_FBS | AHCI_HFLAG_NO_NCQ;
367    
368     diff --git a/drivers/ata/ahci_xgene.c b/drivers/ata/ahci_xgene.c
369     index 8e3f7faf00d3..73b19b277138 100644
370     --- a/drivers/ata/ahci_xgene.c
371     +++ b/drivers/ata/ahci_xgene.c
372     @@ -821,9 +821,9 @@ static int xgene_ahci_probe(struct platform_device *pdev)
373     dev_warn(&pdev->dev, "%s: Error reading device info. Assume version1\n",
374     __func__);
375     version = XGENE_AHCI_V1;
376     - }
377     - if (info->valid & ACPI_VALID_CID)
378     + } else if (info->valid & ACPI_VALID_CID) {
379     version = XGENE_AHCI_V2;
380     + }
381     }
382     }
383     #endif
384     diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
385     index 85ea5142a095..bb050ea26101 100644
386     --- a/drivers/ata/libahci.c
387     +++ b/drivers/ata/libahci.c
388     @@ -469,6 +469,7 @@ void ahci_save_initial_config(struct device *dev, struct ahci_host_priv *hpriv)
389     dev_info(dev, "forcing port_map 0x%x -> 0x%x\n",
390     port_map, hpriv->force_port_map);
391     port_map = hpriv->force_port_map;
392     + hpriv->saved_port_map = port_map;
393     }
394    
395     if (hpriv->mask_port_map) {
396     diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
397     index e4c5cc107934..c65d41f4007a 100644
398     --- a/drivers/block/nbd.c
399     +++ b/drivers/block/nbd.c
400     @@ -618,8 +618,8 @@ static void nbd_request_handler(struct request_queue *q)
401     req, req->cmd_type);
402    
403     if (unlikely(!nbd->sock)) {
404     - dev_err(disk_to_dev(nbd->disk),
405     - "Attempted send on closed socket\n");
406     + dev_err_ratelimited(disk_to_dev(nbd->disk),
407     + "Attempted send on closed socket\n");
408     req->errors++;
409     nbd_end_request(nbd, req);
410     spin_lock_irq(q->queue_lock);
411     diff --git a/drivers/block/null_blk.c b/drivers/block/null_blk.c
412     index 64a7b5971b57..cab97593ba54 100644
413     --- a/drivers/block/null_blk.c
414     +++ b/drivers/block/null_blk.c
415     @@ -742,10 +742,11 @@ static int null_add_dev(void)
416    
417     add_disk(disk);
418    
419     +done:
420     mutex_lock(&lock);
421     list_add_tail(&nullb->list, &nullb_list);
422     mutex_unlock(&lock);
423     -done:
424     +
425     return 0;
426    
427     out_cleanup_lightnvm:
428     diff --git a/drivers/clk/bcm/clk-bcm2835-aux.c b/drivers/clk/bcm/clk-bcm2835-aux.c
429     index e4f89e28b5ec..3a177ade6e6c 100644
430     --- a/drivers/clk/bcm/clk-bcm2835-aux.c
431     +++ b/drivers/clk/bcm/clk-bcm2835-aux.c
432     @@ -38,8 +38,8 @@ static int bcm2835_aux_clk_probe(struct platform_device *pdev)
433    
434     res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
435     reg = devm_ioremap_resource(dev, res);
436     - if (!reg)
437     - return -ENODEV;
438     + if (IS_ERR(reg))
439     + return PTR_ERR(reg);
440    
441     onecell = devm_kmalloc(dev, sizeof(*onecell), GFP_KERNEL);
442     if (!onecell)
443     diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c
444     index ded3ff4b91b9..aa1dacdaa39d 100644
445     --- a/drivers/clk/clk-divider.c
446     +++ b/drivers/clk/clk-divider.c
447     @@ -423,6 +423,12 @@ const struct clk_ops clk_divider_ops = {
448     };
449     EXPORT_SYMBOL_GPL(clk_divider_ops);
450    
451     +const struct clk_ops clk_divider_ro_ops = {
452     + .recalc_rate = clk_divider_recalc_rate,
453     + .round_rate = clk_divider_round_rate,
454     +};
455     +EXPORT_SYMBOL_GPL(clk_divider_ro_ops);
456     +
457     static struct clk *_register_divider(struct device *dev, const char *name,
458     const char *parent_name, unsigned long flags,
459     void __iomem *reg, u8 shift, u8 width,
460     @@ -446,7 +452,10 @@ static struct clk *_register_divider(struct device *dev, const char *name,
461     return ERR_PTR(-ENOMEM);
462    
463     init.name = name;
464     - init.ops = &clk_divider_ops;
465     + if (clk_divider_flags & CLK_DIVIDER_READ_ONLY)
466     + init.ops = &clk_divider_ro_ops;
467     + else
468     + init.ops = &clk_divider_ops;
469     init.flags = flags | CLK_IS_BASIC;
470     init.parent_names = (parent_name ? &parent_name: NULL);
471     init.num_parents = (parent_name ? 1 : 0);
472     diff --git a/drivers/clk/clk-xgene.c b/drivers/clk/clk-xgene.c
473     index 10224b01b97c..b134a8b15e2c 100644
474     --- a/drivers/clk/clk-xgene.c
475     +++ b/drivers/clk/clk-xgene.c
476     @@ -351,8 +351,8 @@ static int xgene_clk_set_rate(struct clk_hw *hw, unsigned long rate,
477     /* Set new divider */
478     data = xgene_clk_read(pclk->param.divider_reg +
479     pclk->param.reg_divider_offset);
480     - data &= ~((1 << pclk->param.reg_divider_width) - 1)
481     - << pclk->param.reg_divider_shift;
482     + data &= ~(((1 << pclk->param.reg_divider_width) - 1)
483     + << pclk->param.reg_divider_shift);
484     data |= divider;
485     xgene_clk_write(data, pclk->param.divider_reg +
486     pclk->param.reg_divider_offset);
487     diff --git a/drivers/clk/meson/clkc.c b/drivers/clk/meson/clkc.c
488     index c83ae1367abc..d920d410b51d 100644
489     --- a/drivers/clk/meson/clkc.c
490     +++ b/drivers/clk/meson/clkc.c
491     @@ -198,7 +198,7 @@ meson_clk_register_fixed_rate(const struct clk_conf *clk_conf,
492     }
493    
494     void __init meson_clk_register_clks(const struct clk_conf *clk_confs,
495     - size_t nr_confs,
496     + unsigned int nr_confs,
497     void __iomem *clk_base)
498     {
499     unsigned int i;
500     diff --git a/drivers/clk/nxp/clk-lpc18xx-ccu.c b/drivers/clk/nxp/clk-lpc18xx-ccu.c
501     index 13aabbb3acbe..558da89555af 100644
502     --- a/drivers/clk/nxp/clk-lpc18xx-ccu.c
503     +++ b/drivers/clk/nxp/clk-lpc18xx-ccu.c
504     @@ -222,7 +222,7 @@ static void lpc18xx_ccu_register_branch_gate_div(struct lpc18xx_clk_branch *bran
505     div->width = 1;
506    
507     div_hw = &div->hw;
508     - div_ops = &clk_divider_ops;
509     + div_ops = &clk_divider_ro_ops;
510     }
511    
512     branch->gate.reg = branch->offset + reg_base;
513     diff --git a/drivers/clk/qcom/gcc-msm8960.c b/drivers/clk/qcom/gcc-msm8960.c
514     index 983dd7dc89a7..0a0c1f533249 100644
515     --- a/drivers/clk/qcom/gcc-msm8960.c
516     +++ b/drivers/clk/qcom/gcc-msm8960.c
517     @@ -2753,7 +2753,7 @@ static struct clk_rcg ce3_src = {
518     },
519     .freq_tbl = clk_tbl_ce3,
520     .clkr = {
521     - .enable_reg = 0x2c08,
522     + .enable_reg = 0x36c0,
523     .enable_mask = BIT(7),
524     .hw.init = &(struct clk_init_data){
525     .name = "ce3_src",
526     @@ -2769,7 +2769,7 @@ static struct clk_branch ce3_core_clk = {
527     .halt_reg = 0x2fdc,
528     .halt_bit = 5,
529     .clkr = {
530     - .enable_reg = 0x36c4,
531     + .enable_reg = 0x36cc,
532     .enable_mask = BIT(4),
533     .hw.init = &(struct clk_init_data){
534     .name = "ce3_core_clk",
535     diff --git a/drivers/clk/rockchip/clk-rk3228.c b/drivers/clk/rockchip/clk-rk3228.c
536     index 981a50205339..97f49aab8d42 100644
537     --- a/drivers/clk/rockchip/clk-rk3228.c
538     +++ b/drivers/clk/rockchip/clk-rk3228.c
539     @@ -605,13 +605,13 @@ static struct rockchip_clk_branch rk3228_clk_branches[] __initdata = {
540    
541     /* PD_MMC */
542     MMC(SCLK_SDMMC_DRV, "sdmmc_drv", "sclk_sdmmc", RK3228_SDMMC_CON0, 1),
543     - MMC(SCLK_SDMMC_SAMPLE, "sdmmc_sample", "sclk_sdmmc", RK3228_SDMMC_CON1, 1),
544     + MMC(SCLK_SDMMC_SAMPLE, "sdmmc_sample", "sclk_sdmmc", RK3228_SDMMC_CON1, 0),
545    
546     MMC(SCLK_SDIO_DRV, "sdio_drv", "sclk_sdio", RK3228_SDIO_CON0, 1),
547     - MMC(SCLK_SDIO_SAMPLE, "sdio_sample", "sclk_sdio", RK3228_SDIO_CON1, 1),
548     + MMC(SCLK_SDIO_SAMPLE, "sdio_sample", "sclk_sdio", RK3228_SDIO_CON1, 0),
549    
550     MMC(SCLK_EMMC_DRV, "emmc_drv", "sclk_emmc", RK3228_EMMC_CON0, 1),
551     - MMC(SCLK_EMMC_SAMPLE, "emmc_sample", "sclk_emmc", RK3228_EMMC_CON1, 1),
552     + MMC(SCLK_EMMC_SAMPLE, "emmc_sample", "sclk_emmc", RK3228_EMMC_CON1, 0),
553     };
554    
555     static const char *const rk3228_critical_clocks[] __initconst = {
556     diff --git a/drivers/clk/rockchip/clk.c b/drivers/clk/rockchip/clk.c
557     index d9a0b5d4d47f..226af5720c9e 100644
558     --- a/drivers/clk/rockchip/clk.c
559     +++ b/drivers/clk/rockchip/clk.c
560     @@ -70,7 +70,7 @@ static struct clk *rockchip_clk_register_branch(const char *name,
561     if (gate_offset >= 0) {
562     gate = kzalloc(sizeof(*gate), GFP_KERNEL);
563     if (!gate)
564     - return ERR_PTR(-ENOMEM);
565     + goto err_gate;
566    
567     gate->flags = gate_flags;
568     gate->reg = base + gate_offset;
569     @@ -82,7 +82,7 @@ static struct clk *rockchip_clk_register_branch(const char *name,
570     if (div_width > 0) {
571     div = kzalloc(sizeof(*div), GFP_KERNEL);
572     if (!div)
573     - return ERR_PTR(-ENOMEM);
574     + goto err_div;
575    
576     div->flags = div_flags;
577     div->reg = base + muxdiv_offset;
578     @@ -90,7 +90,9 @@ static struct clk *rockchip_clk_register_branch(const char *name,
579     div->width = div_width;
580     div->lock = lock;
581     div->table = div_table;
582     - div_ops = &clk_divider_ops;
583     + div_ops = (div_flags & CLK_DIVIDER_READ_ONLY)
584     + ? &clk_divider_ro_ops
585     + : &clk_divider_ops;
586     }
587    
588     clk = clk_register_composite(NULL, name, parent_names, num_parents,
589     @@ -100,6 +102,11 @@ static struct clk *rockchip_clk_register_branch(const char *name,
590     flags);
591    
592     return clk;
593     +err_div:
594     + kfree(gate);
595     +err_gate:
596     + kfree(mux);
597     + return ERR_PTR(-ENOMEM);
598     }
599    
600     struct rockchip_clk_frac {
601     diff --git a/drivers/clk/sunxi/clk-sun8i-apb0.c b/drivers/clk/sunxi/clk-sun8i-apb0.c
602     index 7ba61103a6f5..2ea61debffc1 100644
603     --- a/drivers/clk/sunxi/clk-sun8i-apb0.c
604     +++ b/drivers/clk/sunxi/clk-sun8i-apb0.c
605     @@ -36,7 +36,7 @@ static struct clk *sun8i_a23_apb0_register(struct device_node *node,
606    
607     /* The A23 APB0 clock is a standard 2 bit wide divider clock */
608     clk = clk_register_divider(NULL, clk_name, clk_parent, 0, reg,
609     - 0, 2, CLK_DIVIDER_POWER_OF_TWO, NULL);
610     + 0, 2, 0, NULL);
611     if (IS_ERR(clk))
612     return clk;
613    
614     diff --git a/drivers/clk/versatile/clk-sp810.c b/drivers/clk/versatile/clk-sp810.c
615     index e78755e0ef78..1fe1e8d970cf 100644
616     --- a/drivers/clk/versatile/clk-sp810.c
617     +++ b/drivers/clk/versatile/clk-sp810.c
618     @@ -92,6 +92,7 @@ static void __init clk_sp810_of_setup(struct device_node *node)
619     int num = ARRAY_SIZE(parent_names);
620     char name[12];
621     struct clk_init_data init;
622     + static int instance;
623     int i;
624     bool deprecated;
625    
626     @@ -117,7 +118,7 @@ static void __init clk_sp810_of_setup(struct device_node *node)
627     deprecated = !of_find_property(node, "assigned-clock-parents", NULL);
628    
629     for (i = 0; i < ARRAY_SIZE(sp810->timerclken); i++) {
630     - snprintf(name, ARRAY_SIZE(name), "timerclken%d", i);
631     + snprintf(name, sizeof(name), "sp810_%d_%d", instance, i);
632    
633     sp810->timerclken[i].sp810 = sp810;
634     sp810->timerclken[i].channel = i;
635     @@ -138,5 +139,6 @@ static void __init clk_sp810_of_setup(struct device_node *node)
636     }
637    
638     of_clk_add_provider(node, clk_sp810_timerclken_of_get, sp810);
639     + instance++;
640     }
641     CLK_OF_DECLARE(sp810, "arm,sp810", clk_sp810_of_setup);
642     diff --git a/drivers/clocksource/tango_xtal.c b/drivers/clocksource/tango_xtal.c
643     index 2bcecafdeaea..c407c47a3232 100644
644     --- a/drivers/clocksource/tango_xtal.c
645     +++ b/drivers/clocksource/tango_xtal.c
646     @@ -42,7 +42,7 @@ static void __init tango_clocksource_init(struct device_node *np)
647    
648     ret = clocksource_mmio_init(xtal_in_cnt, "tango-xtal", xtal_freq, 350,
649     32, clocksource_mmio_readl_up);
650     - if (!ret) {
651     + if (ret) {
652     pr_err("%s: registration failed\n", np->full_name);
653     return;
654     }
655     diff --git a/drivers/cpufreq/sti-cpufreq.c b/drivers/cpufreq/sti-cpufreq.c
656     index a9c659f58974..04042038ec4b 100644
657     --- a/drivers/cpufreq/sti-cpufreq.c
658     +++ b/drivers/cpufreq/sti-cpufreq.c
659     @@ -259,6 +259,10 @@ static int sti_cpufreq_init(void)
660     {
661     int ret;
662    
663     + if ((!of_machine_is_compatible("st,stih407")) &&
664     + (!of_machine_is_compatible("st,stih410")))
665     + return -ENODEV;
666     +
667     ddata.cpu = get_cpu_device(0);
668     if (!ddata.cpu) {
669     dev_err(ddata.cpu, "Failed to get device for CPU0\n");
670     diff --git a/drivers/cpuidle/cpuidle-arm.c b/drivers/cpuidle/cpuidle-arm.c
671     index 545069d5fdfb..e342565e8715 100644
672     --- a/drivers/cpuidle/cpuidle-arm.c
673     +++ b/drivers/cpuidle/cpuidle-arm.c
674     @@ -50,7 +50,7 @@ static int arm_enter_idle_state(struct cpuidle_device *dev,
675     * call the CPU ops suspend protocol with idle index as a
676     * parameter.
677     */
678     - arm_cpuidle_suspend(idx);
679     + ret = arm_cpuidle_suspend(idx);
680    
681     cpu_pm_exit();
682     }
683     diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c
684     index 540cbc88c7a2..cc4d9bd0839e 100644
685     --- a/drivers/gpio/gpiolib-acpi.c
686     +++ b/drivers/gpio/gpiolib-acpi.c
687     @@ -977,7 +977,7 @@ bool acpi_can_fallback_to_crs(struct acpi_device *adev, const char *con_id)
688     lookup = kmalloc(sizeof(*lookup), GFP_KERNEL);
689     if (lookup) {
690     lookup->adev = adev;
691     - lookup->con_id = con_id;
692     + lookup->con_id = kstrdup(con_id, GFP_KERNEL);
693     list_add_tail(&lookup->node, &acpi_crs_lookup_list);
694     }
695     }
696     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
697     index b8fbbd7699e4..73628c7599e7 100644
698     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
699     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
700     @@ -540,6 +540,7 @@ int amdgpu_bo_set_metadata (struct amdgpu_bo *bo, void *metadata,
701     if (!metadata_size) {
702     if (bo->metadata_size) {
703     kfree(bo->metadata);
704     + bo->metadata = NULL;
705     bo->metadata_size = 0;
706     }
707     return 0;
708     diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c
709     index 1e0bba29e167..1cd6de575305 100644
710     --- a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c
711     +++ b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c
712     @@ -298,6 +298,10 @@ bool amdgpu_atombios_encoder_mode_fixup(struct drm_encoder *encoder,
713     && (mode->crtc_vsync_start < (mode->crtc_vdisplay + 2)))
714     adjusted_mode->crtc_vsync_start = adjusted_mode->crtc_vdisplay + 2;
715    
716     + /* vertical FP must be at least 1 */
717     + if (mode->crtc_vsync_start == mode->crtc_vdisplay)
718     + adjusted_mode->crtc_vsync_start++;
719     +
720     /* get the native mode for scaling */
721     if (amdgpu_encoder->active_device & (ATOM_DEVICE_LCD_SUPPORT))
722     amdgpu_panel_mode_fixup(encoder, adjusted_mode);
723     diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
724     index f357058c74d9..2e832fa07e09 100644
725     --- a/drivers/gpu/drm/i915/i915_drv.c
726     +++ b/drivers/gpu/drm/i915/i915_drv.c
727     @@ -797,7 +797,7 @@ static int i915_drm_resume(struct drm_device *dev)
728     static int i915_drm_resume_early(struct drm_device *dev)
729     {
730     struct drm_i915_private *dev_priv = dev->dev_private;
731     - int ret = 0;
732     + int ret;
733    
734     /*
735     * We have a resume ordering issue with the snd-hda driver also
736     @@ -808,6 +808,36 @@ static int i915_drm_resume_early(struct drm_device *dev)
737     * FIXME: This should be solved with a special hdmi sink device or
738     * similar so that power domains can be employed.
739     */
740     +
741     + /*
742     + * Note that we need to set the power state explicitly, since we
743     + * powered off the device during freeze and the PCI core won't power
744     + * it back up for us during thaw. Powering off the device during
745     + * freeze is not a hard requirement though, and during the
746     + * suspend/resume phases the PCI core makes sure we get here with the
747     + * device powered on. So in case we change our freeze logic and keep
748     + * the device powered we can also remove the following set power state
749     + * call.
750     + */
751     + ret = pci_set_power_state(dev->pdev, PCI_D0);
752     + if (ret) {
753     + DRM_ERROR("failed to set PCI D0 power state (%d)\n", ret);
754     + goto out;
755     + }
756     +
757     + /*
758     + * Note that pci_enable_device() first enables any parent bridge
759     + * device and only then sets the power state for this device. The
760     + * bridge enabling is a nop though, since bridge devices are resumed
761     + * first. The order of enabling power and enabling the device is
762     + * imposed by the PCI core as described above, so here we preserve the
763     + * same order for the freeze/thaw phases.
764     + *
765     + * TODO: eventually we should remove pci_disable_device() /
766     + * pci_enable_enable_device() from suspend/resume. Due to how they
767     + * depend on the device enable refcount we can't anyway depend on them
768     + * disabling/enabling the device.
769     + */
770     if (pci_enable_device(dev->pdev)) {
771     ret = -EIO;
772     goto out;
773     diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
774     index 4897728713f6..9b6737c85acb 100644
775     --- a/drivers/gpu/drm/i915/i915_reg.h
776     +++ b/drivers/gpu/drm/i915/i915_reg.h
777     @@ -2898,7 +2898,14 @@ enum skl_disp_power_wells {
778     #define GEN6_RP_STATE_CAP _MMIO(MCHBAR_MIRROR_BASE_SNB + 0x5998)
779     #define BXT_RP_STATE_CAP _MMIO(0x138170)
780    
781     -#define INTERVAL_1_28_US(us) (((us) * 100) >> 7)
782     +/*
783     + * Make these a multiple of magic 25 to avoid SNB (eg. Dell XPS
784     + * 8300) freezing up around GPU hangs. Looks as if even
785     + * scheduling/timer interrupts start misbehaving if the RPS
786     + * EI/thresholds are "bad", leading to a very sluggish or even
787     + * frozen machine.
788     + */
789     +#define INTERVAL_1_28_US(us) roundup(((us) * 100) >> 7, 25)
790     #define INTERVAL_1_33_US(us) (((us) * 3) >> 2)
791     #define INTERVAL_0_833_US(us) (((us) * 6) / 5)
792     #define GT_INTERVAL_FROM_US(dev_priv, us) (IS_GEN9(dev_priv) ? \
793     diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
794     index 084d5586585d..33b8e0a2b3fd 100644
795     --- a/drivers/gpu/drm/i915/intel_ddi.c
796     +++ b/drivers/gpu/drm/i915/intel_ddi.c
797     @@ -464,9 +464,17 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port,
798     } else if (IS_BROADWELL(dev)) {
799     ddi_translations_fdi = bdw_ddi_translations_fdi;
800     ddi_translations_dp = bdw_ddi_translations_dp;
801     - ddi_translations_edp = bdw_ddi_translations_edp;
802     +
803     + if (dev_priv->edp_low_vswing) {
804     + ddi_translations_edp = bdw_ddi_translations_edp;
805     + n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp);
806     + } else {
807     + ddi_translations_edp = bdw_ddi_translations_dp;
808     + n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
809     + }
810     +
811     ddi_translations_hdmi = bdw_ddi_translations_hdmi;
812     - n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp);
813     +
814     n_dp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
815     n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi);
816     hdmi_default_entry = 7;
817     @@ -3260,12 +3268,6 @@ void intel_ddi_get_config(struct intel_encoder *encoder,
818     intel_ddi_clock_get(encoder, pipe_config);
819     }
820    
821     -static void intel_ddi_destroy(struct drm_encoder *encoder)
822     -{
823     - /* HDMI has nothing special to destroy, so we can go with this. */
824     - intel_dp_encoder_destroy(encoder);
825     -}
826     -
827     static bool intel_ddi_compute_config(struct intel_encoder *encoder,
828     struct intel_crtc_state *pipe_config)
829     {
830     @@ -3284,7 +3286,8 @@ static bool intel_ddi_compute_config(struct intel_encoder *encoder,
831     }
832    
833     static const struct drm_encoder_funcs intel_ddi_funcs = {
834     - .destroy = intel_ddi_destroy,
835     + .reset = intel_dp_encoder_reset,
836     + .destroy = intel_dp_encoder_destroy,
837     };
838    
839     static struct intel_connector *
840     @@ -3356,6 +3359,7 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
841     intel_encoder->post_disable = intel_ddi_post_disable;
842     intel_encoder->get_hw_state = intel_ddi_get_hw_state;
843     intel_encoder->get_config = intel_ddi_get_config;
844     + intel_encoder->suspend = intel_dp_encoder_suspend;
845    
846     intel_dig_port->port = port;
847     intel_dig_port->saved_port_bits = I915_READ(DDI_BUF_CTL(port)) &
848     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
849     index a9c35134f2e2..c023a04c44d0 100644
850     --- a/drivers/gpu/drm/i915/intel_display.c
851     +++ b/drivers/gpu/drm/i915/intel_display.c
852     @@ -13429,6 +13429,9 @@ static int intel_atomic_prepare_commit(struct drm_device *dev,
853     }
854    
855     for_each_crtc_in_state(state, crtc, crtc_state, i) {
856     + if (state->legacy_cursor_update)
857     + continue;
858     +
859     ret = intel_crtc_wait_for_pending_flips(crtc);
860     if (ret)
861     return ret;
862     diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
863     index cdc2c15873dc..3cd4996c791c 100644
864     --- a/drivers/gpu/drm/i915/intel_dp.c
865     +++ b/drivers/gpu/drm/i915/intel_dp.c
866     @@ -4905,7 +4905,7 @@ void intel_dp_encoder_destroy(struct drm_encoder *encoder)
867     kfree(intel_dig_port);
868     }
869    
870     -static void intel_dp_encoder_suspend(struct intel_encoder *intel_encoder)
871     +void intel_dp_encoder_suspend(struct intel_encoder *intel_encoder)
872     {
873     struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base);
874    
875     @@ -4947,7 +4947,7 @@ static void intel_edp_panel_vdd_sanitize(struct intel_dp *intel_dp)
876     edp_panel_vdd_schedule_off(intel_dp);
877     }
878    
879     -static void intel_dp_encoder_reset(struct drm_encoder *encoder)
880     +void intel_dp_encoder_reset(struct drm_encoder *encoder)
881     {
882     struct intel_dp *intel_dp;
883    
884     diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
885     index df7f3cb66056..3ce3bee368fe 100644
886     --- a/drivers/gpu/drm/i915/intel_drv.h
887     +++ b/drivers/gpu/drm/i915/intel_drv.h
888     @@ -1234,6 +1234,8 @@ void intel_dp_set_link_params(struct intel_dp *intel_dp,
889     void intel_dp_start_link_train(struct intel_dp *intel_dp);
890     void intel_dp_stop_link_train(struct intel_dp *intel_dp);
891     void intel_dp_sink_dpms(struct intel_dp *intel_dp, int mode);
892     +void intel_dp_encoder_reset(struct drm_encoder *encoder);
893     +void intel_dp_encoder_suspend(struct intel_encoder *intel_encoder);
894     void intel_dp_encoder_destroy(struct drm_encoder *encoder);
895     int intel_dp_sink_crc(struct intel_dp *intel_dp, u8 *crc);
896     bool intel_dp_compute_config(struct intel_encoder *encoder,
897     diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
898     index 616108c4bc3e..43fdae8ff3c3 100644
899     --- a/drivers/gpu/drm/i915/intel_hdmi.c
900     +++ b/drivers/gpu/drm/i915/intel_hdmi.c
901     @@ -1407,8 +1407,16 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)
902     hdmi_to_dig_port(intel_hdmi));
903     }
904    
905     - if (!live_status)
906     - DRM_DEBUG_KMS("Live status not up!");
907     + if (!live_status) {
908     + DRM_DEBUG_KMS("HDMI live status down\n");
909     + /*
910     + * Live status register is not reliable on all intel platforms.
911     + * So consider live_status only for certain platforms, for
912     + * others, read EDID to determine presence of sink.
913     + */
914     + if (INTEL_INFO(dev_priv)->gen < 7 || IS_IVYBRIDGE(dev_priv))
915     + live_status = true;
916     + }
917    
918     intel_hdmi_unset_edid(connector);
919    
920     diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
921     index 6104d7d7449e..9de6503b10d8 100644
922     --- a/drivers/gpu/drm/radeon/atombios_encoders.c
923     +++ b/drivers/gpu/drm/radeon/atombios_encoders.c
924     @@ -310,6 +310,10 @@ static bool radeon_atom_mode_fixup(struct drm_encoder *encoder,
925     && (mode->crtc_vsync_start < (mode->crtc_vdisplay + 2)))
926     adjusted_mode->crtc_vsync_start = adjusted_mode->crtc_vdisplay + 2;
927    
928     + /* vertical FP must be at least 1 */
929     + if (mode->crtc_vsync_start == mode->crtc_vdisplay)
930     + adjusted_mode->crtc_vsync_start++;
931     +
932     /* get the native mode for scaling */
933     if (radeon_encoder->active_device & (ATOM_DEVICE_LCD_SUPPORT)) {
934     radeon_panel_mode_fixup(encoder, adjusted_mode);
935     diff --git a/drivers/gpu/ipu-v3/ipu-common.c b/drivers/gpu/ipu-v3/ipu-common.c
936     index e00db3f510dd..abb98c77bad2 100644
937     --- a/drivers/gpu/ipu-v3/ipu-common.c
938     +++ b/drivers/gpu/ipu-v3/ipu-common.c
939     @@ -1068,7 +1068,6 @@ static int ipu_add_client_devices(struct ipu_soc *ipu, unsigned long ipu_base)
940     goto err_register;
941     }
942    
943     - pdev->dev.of_node = of_node;
944     pdev->dev.parent = dev;
945    
946     ret = platform_device_add_data(pdev, &reg->pdata,
947     @@ -1079,6 +1078,12 @@ static int ipu_add_client_devices(struct ipu_soc *ipu, unsigned long ipu_base)
948     platform_device_put(pdev);
949     goto err_register;
950     }
951     +
952     + /*
953     + * Set of_node only after calling platform_device_add. Otherwise
954     + * the platform:imx-ipuv3-crtc modalias won't be used.
955     + */
956     + pdev->dev.of_node = of_node;
957     }
958    
959     return 0;
960     diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
961     index b6ff6e78ac54..14c14c82795c 100644
962     --- a/drivers/hid/hid-ids.h
963     +++ b/drivers/hid/hid-ids.h
964     @@ -255,6 +255,7 @@
965     #define USB_DEVICE_ID_CORSAIR_K90 0x1b02
966    
967     #define USB_VENDOR_ID_CREATIVELABS 0x041e
968     +#define USB_DEVICE_ID_CREATIVE_SB_OMNI_SURROUND_51 0x322c
969     #define USB_DEVICE_ID_PRODIKEYS_PCMIDI 0x2801
970    
971     #define USB_VENDOR_ID_CVTOUCH 0x1ff7
972     diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
973     index 7dd0953cd70f..dc8e6adf95a4 100644
974     --- a/drivers/hid/usbhid/hid-quirks.c
975     +++ b/drivers/hid/usbhid/hid-quirks.c
976     @@ -70,6 +70,7 @@ static const struct hid_blacklist {
977     { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK, HID_QUIRK_NOGET },
978     { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_AXIS_295, HID_QUIRK_NOGET },
979     { USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
980     + { USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_CREATIVE_SB_OMNI_SURROUND_51, HID_QUIRK_NOGET },
981     { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
982     { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU, HID_QUIRK_MULTI_INPUT },
983     { USB_VENDOR_ID_ELAN, HID_ANY_ID, HID_QUIRK_ALWAYS_POLL },
984     diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
985     index 94a8875b38fb..f71187aad0d0 100644
986     --- a/drivers/hid/wacom_wac.c
987     +++ b/drivers/hid/wacom_wac.c
988     @@ -3378,6 +3378,10 @@ static const struct wacom_features wacom_features_0x33E =
989     { "Wacom Intuos PT M 2", 21600, 13500, 2047, 63,
990     INTUOSHT2, WACOM_INTUOS_RES, WACOM_INTUOS_RES, .touch_max = 16,
991     .check_for_hid_type = true, .hid_type = HID_TYPE_USBNONE };
992     +static const struct wacom_features wacom_features_0x343 =
993     + { "Wacom DTK1651", 34616, 19559, 1023, 0,
994     + DTUS, WACOM_INTUOS_RES, WACOM_INTUOS_RES, 4,
995     + WACOM_DTU_OFFSET, WACOM_DTU_OFFSET };
996    
997     static const struct wacom_features wacom_features_HID_ANY_ID =
998     { "Wacom HID", .type = HID_GENERIC };
999     @@ -3543,6 +3547,7 @@ const struct hid_device_id wacom_ids[] = {
1000     { USB_DEVICE_WACOM(0x33C) },
1001     { USB_DEVICE_WACOM(0x33D) },
1002     { USB_DEVICE_WACOM(0x33E) },
1003     + { USB_DEVICE_WACOM(0x343) },
1004     { USB_DEVICE_WACOM(0x4001) },
1005     { USB_DEVICE_WACOM(0x4004) },
1006     { USB_DEVICE_WACOM(0x5000) },
1007     diff --git a/drivers/hv/ring_buffer.c b/drivers/hv/ring_buffer.c
1008     index b53702ce692f..e35560b955b1 100644
1009     --- a/drivers/hv/ring_buffer.c
1010     +++ b/drivers/hv/ring_buffer.c
1011     @@ -103,15 +103,29 @@ static bool hv_need_to_signal(u32 old_write, struct hv_ring_buffer_info *rbi)
1012     * there is room for the producer to send the pending packet.
1013     */
1014    
1015     -static bool hv_need_to_signal_on_read(u32 prev_write_sz,
1016     - struct hv_ring_buffer_info *rbi)
1017     +static bool hv_need_to_signal_on_read(struct hv_ring_buffer_info *rbi)
1018     {
1019     u32 cur_write_sz;
1020     u32 r_size;
1021     - u32 write_loc = rbi->ring_buffer->write_index;
1022     + u32 write_loc;
1023     u32 read_loc = rbi->ring_buffer->read_index;
1024     - u32 pending_sz = rbi->ring_buffer->pending_send_sz;
1025     + u32 pending_sz;
1026    
1027     + /*
1028     + * Issue a full memory barrier before making the signaling decision.
1029     + * Here is the reason for having this barrier:
1030     + * If the reading of the pend_sz (in this function)
1031     + * were to be reordered and read before we commit the new read
1032     + * index (in the calling function) we could
1033     + * have a problem. If the host were to set the pending_sz after we
1034     + * have sampled pending_sz and go to sleep before we commit the
1035     + * read index, we could miss sending the interrupt. Issue a full
1036     + * memory barrier to address this.
1037     + */
1038     + mb();
1039     +
1040     + pending_sz = rbi->ring_buffer->pending_send_sz;
1041     + write_loc = rbi->ring_buffer->write_index;
1042     /* If the other end is not blocked on write don't bother. */
1043     if (pending_sz == 0)
1044     return false;
1045     @@ -120,7 +134,7 @@ static bool hv_need_to_signal_on_read(u32 prev_write_sz,
1046     cur_write_sz = write_loc >= read_loc ? r_size - (write_loc - read_loc) :
1047     read_loc - write_loc;
1048    
1049     - if ((prev_write_sz < pending_sz) && (cur_write_sz >= pending_sz))
1050     + if (cur_write_sz >= pending_sz)
1051     return true;
1052    
1053     return false;
1054     @@ -458,7 +472,7 @@ int hv_ringbuffer_read(struct hv_ring_buffer_info *inring_info,
1055     /* Update the read index */
1056     hv_set_next_read_location(inring_info, next_read_location);
1057    
1058     - *signal = hv_need_to_signal_on_read(bytes_avail_towrite, inring_info);
1059     + *signal = hv_need_to_signal_on_read(inring_info);
1060    
1061     out_unlock:
1062     spin_unlock_irqrestore(&inring_info->ring_lock, flags);
1063     diff --git a/drivers/iio/magnetometer/ak8975.c b/drivers/iio/magnetometer/ak8975.c
1064     index b13936dacc78..f2a7f72f7aa6 100644
1065     --- a/drivers/iio/magnetometer/ak8975.c
1066     +++ b/drivers/iio/magnetometer/ak8975.c
1067     @@ -462,6 +462,8 @@ static int ak8975_setup_irq(struct ak8975_data *data)
1068     int rc;
1069     int irq;
1070    
1071     + init_waitqueue_head(&data->data_ready_queue);
1072     + clear_bit(0, &data->flags);
1073     if (client->irq)
1074     irq = client->irq;
1075     else
1076     @@ -477,8 +479,6 @@ static int ak8975_setup_irq(struct ak8975_data *data)
1077     return rc;
1078     }
1079    
1080     - init_waitqueue_head(&data->data_ready_queue);
1081     - clear_bit(0, &data->flags);
1082     data->eoc_irq = irq;
1083    
1084     return rc;
1085     @@ -732,7 +732,7 @@ static int ak8975_probe(struct i2c_client *client,
1086     int eoc_gpio;
1087     int err;
1088     const char *name = NULL;
1089     - enum asahi_compass_chipset chipset;
1090     + enum asahi_compass_chipset chipset = AK_MAX_TYPE;
1091    
1092     /* Grab and set up the supplied GPIO. */
1093     if (client->dev.platform_data)
1094     diff --git a/drivers/infiniband/hw/cxgb4/cq.c b/drivers/infiniband/hw/cxgb4/cq.c
1095     index cf21df4a8bf5..4e94cff5ba71 100644
1096     --- a/drivers/infiniband/hw/cxgb4/cq.c
1097     +++ b/drivers/infiniband/hw/cxgb4/cq.c
1098     @@ -162,7 +162,7 @@ static int create_cq(struct c4iw_rdev *rdev, struct t4_cq *cq,
1099     cq->bar2_va = c4iw_bar2_addrs(rdev, cq->cqid, T4_BAR2_QTYPE_INGRESS,
1100     &cq->bar2_qid,
1101     user ? &cq->bar2_pa : NULL);
1102     - if (user && !cq->bar2_va) {
1103     + if (user && !cq->bar2_pa) {
1104     pr_warn(MOD "%s: cqid %u not in BAR2 range.\n",
1105     pci_name(rdev->lldi.pdev), cq->cqid);
1106     ret = -EINVAL;
1107     diff --git a/drivers/infiniband/hw/cxgb4/qp.c b/drivers/infiniband/hw/cxgb4/qp.c
1108     index e99345eb875a..8ff690bf09d9 100644
1109     --- a/drivers/infiniband/hw/cxgb4/qp.c
1110     +++ b/drivers/infiniband/hw/cxgb4/qp.c
1111     @@ -185,6 +185,10 @@ void __iomem *c4iw_bar2_addrs(struct c4iw_rdev *rdev, unsigned int qid,
1112    
1113     if (pbar2_pa)
1114     *pbar2_pa = (rdev->bar2_pa + bar2_qoffset) & PAGE_MASK;
1115     +
1116     + if (is_t4(rdev->lldi.adapter_type))
1117     + return NULL;
1118     +
1119     return rdev->bar2_kva + bar2_qoffset;
1120     }
1121    
1122     @@ -270,7 +274,7 @@ static int create_qp(struct c4iw_rdev *rdev, struct t4_wq *wq,
1123     /*
1124     * User mode must have bar2 access.
1125     */
1126     - if (user && (!wq->sq.bar2_va || !wq->rq.bar2_va)) {
1127     + if (user && (!wq->sq.bar2_pa || !wq->rq.bar2_pa)) {
1128     pr_warn(MOD "%s: sqid %u or rqid %u not in BAR2 range.\n",
1129     pci_name(rdev->lldi.pdev), wq->sq.qid, wq->rq.qid);
1130     goto free_dma;
1131     diff --git a/drivers/input/touchscreen/zforce_ts.c b/drivers/input/touchscreen/zforce_ts.c
1132     index 9bbadaaf6bc3..7b3845aa5983 100644
1133     --- a/drivers/input/touchscreen/zforce_ts.c
1134     +++ b/drivers/input/touchscreen/zforce_ts.c
1135     @@ -370,8 +370,8 @@ static int zforce_touch_event(struct zforce_ts *ts, u8 *payload)
1136     point.coord_x = point.coord_y = 0;
1137     }
1138    
1139     - point.state = payload[9 * i + 5] & 0x03;
1140     - point.id = (payload[9 * i + 5] & 0xfc) >> 2;
1141     + point.state = payload[9 * i + 5] & 0x0f;
1142     + point.id = (payload[9 * i + 5] & 0xf0) >> 4;
1143    
1144     /* determine touch major, minor and orientation */
1145     point.area_major = max(payload[9 * i + 6],
1146     diff --git a/drivers/lightnvm/rrpc.c b/drivers/lightnvm/rrpc.c
1147     index 307db1ea22de..b7ddfb352792 100644
1148     --- a/drivers/lightnvm/rrpc.c
1149     +++ b/drivers/lightnvm/rrpc.c
1150     @@ -499,12 +499,21 @@ static void rrpc_gc_queue(struct work_struct *work)
1151     struct rrpc *rrpc = gcb->rrpc;
1152     struct rrpc_block *rblk = gcb->rblk;
1153     struct nvm_lun *lun = rblk->parent->lun;
1154     + struct nvm_block *blk = rblk->parent;
1155     struct rrpc_lun *rlun = &rrpc->luns[lun->id - rrpc->lun_offset];
1156    
1157     spin_lock(&rlun->lock);
1158     list_add_tail(&rblk->prio, &rlun->prio_list);
1159     spin_unlock(&rlun->lock);
1160    
1161     + spin_lock(&lun->lock);
1162     + lun->nr_open_blocks--;
1163     + lun->nr_closed_blocks++;
1164     + blk->state &= ~NVM_BLK_ST_OPEN;
1165     + blk->state |= NVM_BLK_ST_CLOSED;
1166     + list_move_tail(&rblk->list, &rlun->closed_list);
1167     + spin_unlock(&lun->lock);
1168     +
1169     mempool_free(gcb, rrpc->gcb_pool);
1170     pr_debug("nvm: block '%lu' is full, allow GC (sched)\n",
1171     rblk->parent->id);
1172     @@ -668,20 +677,8 @@ static void rrpc_end_io_write(struct rrpc *rrpc, struct rrpc_rq *rrqd,
1173     lun = rblk->parent->lun;
1174    
1175     cmnt_size = atomic_inc_return(&rblk->data_cmnt_size);
1176     - if (unlikely(cmnt_size == rrpc->dev->pgs_per_blk)) {
1177     - struct nvm_block *blk = rblk->parent;
1178     - struct rrpc_lun *rlun = rblk->rlun;
1179     -
1180     - spin_lock(&lun->lock);
1181     - lun->nr_open_blocks--;
1182     - lun->nr_closed_blocks++;
1183     - blk->state &= ~NVM_BLK_ST_OPEN;
1184     - blk->state |= NVM_BLK_ST_CLOSED;
1185     - list_move_tail(&rblk->list, &rlun->closed_list);
1186     - spin_unlock(&lun->lock);
1187     -
1188     + if (unlikely(cmnt_size == rrpc->dev->pgs_per_blk))
1189     rrpc_run_gc(rrpc, rblk);
1190     - }
1191     }
1192     }
1193    
1194     diff --git a/drivers/md/md.c b/drivers/md/md.c
1195     index e55e6cf9ec17..7551278030d8 100644
1196     --- a/drivers/md/md.c
1197     +++ b/drivers/md/md.c
1198     @@ -284,6 +284,8 @@ static blk_qc_t md_make_request(struct request_queue *q, struct bio *bio)
1199     * go away inside make_request
1200     */
1201     sectors = bio_sectors(bio);
1202     + /* bio could be mergeable after passing to underlayer */
1203     + bio->bi_rw &= ~REQ_NOMERGE;
1204     mddev->pers->make_request(mddev, bio);
1205    
1206     cpu = part_stat_lock();
1207     diff --git a/drivers/mfd/intel-lpss.c b/drivers/mfd/intel-lpss.c
1208     index 1743788f1595..1bbbe877ba7e 100644
1209     --- a/drivers/mfd/intel-lpss.c
1210     +++ b/drivers/mfd/intel-lpss.c
1211     @@ -453,6 +453,7 @@ int intel_lpss_probe(struct device *dev,
1212     err_remove_ltr:
1213     intel_lpss_debugfs_remove(lpss);
1214     intel_lpss_ltr_hide(lpss);
1215     + intel_lpss_unregister_clock(lpss);
1216    
1217     err_clk_register:
1218     ida_simple_remove(&intel_lpss_devid_ida, lpss->devid);
1219     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
1220     index 1545a944c309..b86fe50d5d93 100644
1221     --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
1222     +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
1223     @@ -423,6 +423,10 @@ static int handle_hca_cap_atomic(struct mlx5_core_dev *dev)
1224     HCA_CAP_OPMOD_GET_CUR);
1225     if (err)
1226     return err;
1227     + err = mlx5_core_get_caps(dev, MLX5_CAP_ATOMIC,
1228     + HCA_CAP_OPMOD_GET_MAX);
1229     + if (err)
1230     + return err;
1231     } else {
1232     return 0;
1233     }
1234     diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c
1235     index 91afa3ae414c..a192d451dab2 100644
1236     --- a/drivers/net/wireless/ath/ath10k/htt_rx.c
1237     +++ b/drivers/net/wireless/ath/ath10k/htt_rx.c
1238     @@ -2143,11 +2143,7 @@ EXPORT_SYMBOL(ath10k_htt_t2h_msg_handler);
1239     void ath10k_htt_rx_pktlog_completion_handler(struct ath10k *ar,
1240     struct sk_buff *skb)
1241     {
1242     - struct ath10k_pktlog_10_4_hdr *hdr =
1243     - (struct ath10k_pktlog_10_4_hdr *)skb->data;
1244     -
1245     - trace_ath10k_htt_pktlog(ar, hdr->payload,
1246     - sizeof(*hdr) + __le16_to_cpu(hdr->size));
1247     + trace_ath10k_htt_pktlog(ar, skb->data, skb->len);
1248     dev_kfree_skb_any(skb);
1249     }
1250     EXPORT_SYMBOL(ath10k_htt_rx_pktlog_completion_handler);
1251     diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
1252     index 8f8793004b9f..1b271b99c49e 100644
1253     --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
1254     +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
1255     @@ -274,6 +274,9 @@ void ar5008_hw_cmn_spur_mitigate(struct ath_hw *ah,
1256     };
1257     static const int inc[4] = { 0, 100, 0, 0 };
1258    
1259     + memset(&mask_m, 0, sizeof(int8_t) * 123);
1260     + memset(&mask_p, 0, sizeof(int8_t) * 123);
1261     +
1262     cur_bin = -6000;
1263     upper = bin + 100;
1264     lower = bin - 100;
1265     @@ -424,14 +427,9 @@ static void ar5008_hw_spur_mitigate(struct ath_hw *ah,
1266     int tmp, new;
1267     int i;
1268    
1269     - int8_t mask_m[123];
1270     - int8_t mask_p[123];
1271     int cur_bb_spur;
1272     bool is2GHz = IS_CHAN_2GHZ(chan);
1273    
1274     - memset(&mask_m, 0, sizeof(int8_t) * 123);
1275     - memset(&mask_p, 0, sizeof(int8_t) * 123);
1276     -
1277     for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
1278     cur_bb_spur = ah->eep_ops->get_spur_channel(ah, i, is2GHz);
1279     if (AR_NO_SPUR == cur_bb_spur)
1280     diff --git a/drivers/net/wireless/ath/ath9k/ar9002_phy.c b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
1281     index db6624527d99..53d7445a5d12 100644
1282     --- a/drivers/net/wireless/ath/ath9k/ar9002_phy.c
1283     +++ b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
1284     @@ -178,14 +178,9 @@ static void ar9002_hw_spur_mitigate(struct ath_hw *ah,
1285     int i;
1286     struct chan_centers centers;
1287    
1288     - int8_t mask_m[123];
1289     - int8_t mask_p[123];
1290     int cur_bb_spur;
1291     bool is2GHz = IS_CHAN_2GHZ(chan);
1292    
1293     - memset(&mask_m, 0, sizeof(int8_t) * 123);
1294     - memset(&mask_p, 0, sizeof(int8_t) * 123);
1295     -
1296     ath9k_hw_get_channel_centers(ah, chan, &centers);
1297     freq = centers.synth_center;
1298    
1299     diff --git a/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c b/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c
1300     index 6a4fc5d183cf..d7db6f23e728 100644
1301     --- a/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c
1302     +++ b/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c
1303     @@ -314,6 +314,7 @@ int mwifiex_bss_start(struct mwifiex_private *priv, struct cfg80211_bss *bss,
1304     mwifiex_dbg(adapter, ERROR,
1305     "Attempt to reconnect on csa closed chan(%d)\n",
1306     bss_desc->channel);
1307     + ret = -1;
1308     goto done;
1309     }
1310    
1311     diff --git a/drivers/net/wireless/realtek/rtlwifi/rc.c b/drivers/net/wireless/realtek/rtlwifi/rc.c
1312     index 28f7010e7108..1aca77719521 100644
1313     --- a/drivers/net/wireless/realtek/rtlwifi/rc.c
1314     +++ b/drivers/net/wireless/realtek/rtlwifi/rc.c
1315     @@ -41,7 +41,7 @@ static u8 _rtl_rc_get_highest_rix(struct rtl_priv *rtlpriv,
1316     struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
1317     struct rtl_phy *rtlphy = &(rtlpriv->phy);
1318     struct rtl_sta_info *sta_entry = NULL;
1319     - u8 wireless_mode = 0;
1320     + u16 wireless_mode = 0;
1321    
1322     /*
1323     *this rate is no use for true rate, firmware
1324     @@ -99,7 +99,7 @@ static void _rtl_rc_rate_set_series(struct rtl_priv *rtlpriv,
1325     {
1326     struct rtl_mac *mac = rtl_mac(rtlpriv);
1327     struct rtl_sta_info *sta_entry = NULL;
1328     - u8 wireless_mode = 0;
1329     + u16 wireless_mode = 0;
1330     u8 sgi_20 = 0, sgi_40 = 0, sgi_80 = 0;
1331    
1332     if (sta) {
1333     diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c
1334     index bbb789f8990b..5e5719b26774 100644
1335     --- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c
1336     +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c
1337     @@ -3855,7 +3855,7 @@ void rtl8821ae_update_channel_access_setting(struct ieee80211_hw *hw)
1338     {
1339     struct rtl_priv *rtlpriv = rtl_priv(hw);
1340     struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
1341     - u8 wireless_mode = mac->mode;
1342     + u16 wireless_mode = mac->mode;
1343     u8 sifs_timer, r2t_sifs;
1344    
1345     rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_SLOT_TIME,
1346     diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h
1347     index 4544752a2ba8..84397b190cc0 100644
1348     --- a/drivers/net/wireless/realtek/rtlwifi/wifi.h
1349     +++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h
1350     @@ -1323,14 +1323,13 @@ struct rtl_tid_data {
1351    
1352     struct rtl_sta_info {
1353     struct list_head list;
1354     - u8 ratr_index;
1355     - u8 wireless_mode;
1356     - u8 mimo_ps;
1357     - u8 mac_addr[ETH_ALEN];
1358     struct rtl_tid_data tids[MAX_TID_COUNT];
1359     -
1360     /* just used for ap adhoc or mesh*/
1361     struct rssi_sta rssi_stat;
1362     + u16 wireless_mode;
1363     + u8 ratr_index;
1364     + u8 mimo_ps;
1365     + u8 mac_addr[ETH_ALEN];
1366     } __packed;
1367    
1368     struct rtl_priv;
1369     diff --git a/drivers/net/wireless/ti/wlcore/event.c b/drivers/net/wireless/ti/wlcore/event.c
1370     index c96405498bf4..4b59f67724de 100644
1371     --- a/drivers/net/wireless/ti/wlcore/event.c
1372     +++ b/drivers/net/wireless/ti/wlcore/event.c
1373     @@ -38,7 +38,7 @@
1374    
1375     int wlcore_event_fw_logger(struct wl1271 *wl)
1376     {
1377     - u32 ret;
1378     + int ret;
1379     struct fw_logger_information fw_log;
1380     u8 *buffer;
1381     u32 internal_fw_addrbase = WL18XX_DATA_RAM_BASE_ADDRESS;
1382     diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c
1383     index 544b802a594c..02c574f8ccb3 100644
1384     --- a/drivers/nvdimm/pmem.c
1385     +++ b/drivers/nvdimm/pmem.c
1386     @@ -314,9 +314,16 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn)
1387     * implementation will limit the pfns advertised through
1388     * ->direct_access() to those that are included in the memmap.
1389     */
1390     - if (nd_pfn->mode == PFN_MODE_PMEM)
1391     - offset = ALIGN(SZ_8K + 64 * npfns, nd_pfn->align);
1392     - else if (nd_pfn->mode == PFN_MODE_RAM)
1393     + if (nd_pfn->mode == PFN_MODE_PMEM) {
1394     + unsigned long memmap_size;
1395     +
1396     + /*
1397     + * vmemmap_populate_hugepages() allocates the memmap array in
1398     + * HPAGE_SIZE chunks.
1399     + */
1400     + memmap_size = ALIGN(64 * npfns, PMD_SIZE);
1401     + offset = ALIGN(SZ_8K + memmap_size, nd_pfn->align);
1402     + } else if (nd_pfn->mode == PFN_MODE_RAM)
1403     offset = ALIGN(SZ_8K, nd_pfn->align);
1404     else
1405     goto err;
1406     diff --git a/drivers/nvmem/mxs-ocotp.c b/drivers/nvmem/mxs-ocotp.c
1407     index 8ba19bba3156..2bb3c5799ac4 100644
1408     --- a/drivers/nvmem/mxs-ocotp.c
1409     +++ b/drivers/nvmem/mxs-ocotp.c
1410     @@ -94,7 +94,7 @@ static int mxs_ocotp_read(void *context, const void *reg, size_t reg_size,
1411     if (ret)
1412     goto close_banks;
1413    
1414     - while (val_size) {
1415     + while (val_size >= reg_size) {
1416     if ((offset < OCOTP_DATA_OFFSET) || (offset % 16)) {
1417     /* fill up non-data register */
1418     *buf = 0;
1419     @@ -103,7 +103,7 @@ static int mxs_ocotp_read(void *context, const void *reg, size_t reg_size,
1420     }
1421    
1422     buf++;
1423     - val_size--;
1424     + val_size -= reg_size;
1425     offset += reg_size;
1426     }
1427    
1428     diff --git a/drivers/pwm/pwm-omap-dmtimer.c b/drivers/pwm/pwm-omap-dmtimer.c
1429     index 826634ec0d5c..e0679eb399f6 100644
1430     --- a/drivers/pwm/pwm-omap-dmtimer.c
1431     +++ b/drivers/pwm/pwm-omap-dmtimer.c
1432     @@ -31,6 +31,7 @@
1433     #include <linux/time.h>
1434    
1435     #define DM_TIMER_LOAD_MIN 0xfffffffe
1436     +#define DM_TIMER_MAX 0xffffffff
1437    
1438     struct pwm_omap_dmtimer_chip {
1439     struct pwm_chip chip;
1440     @@ -46,13 +47,9 @@ to_pwm_omap_dmtimer_chip(struct pwm_chip *chip)
1441     return container_of(chip, struct pwm_omap_dmtimer_chip, chip);
1442     }
1443    
1444     -static int pwm_omap_dmtimer_calc_value(unsigned long clk_rate, int ns)
1445     +static u32 pwm_omap_dmtimer_get_clock_cycles(unsigned long clk_rate, int ns)
1446     {
1447     - u64 c = (u64)clk_rate * ns;
1448     -
1449     - do_div(c, NSEC_PER_SEC);
1450     -
1451     - return DM_TIMER_LOAD_MIN - c;
1452     + return DIV_ROUND_CLOSEST_ULL((u64)clk_rate * ns, NSEC_PER_SEC);
1453     }
1454    
1455     static void pwm_omap_dmtimer_start(struct pwm_omap_dmtimer_chip *omap)
1456     @@ -99,7 +96,8 @@ static int pwm_omap_dmtimer_config(struct pwm_chip *chip,
1457     int duty_ns, int period_ns)
1458     {
1459     struct pwm_omap_dmtimer_chip *omap = to_pwm_omap_dmtimer_chip(chip);
1460     - int load_value, match_value;
1461     + u32 period_cycles, duty_cycles;
1462     + u32 load_value, match_value;
1463     struct clk *fclk;
1464     unsigned long clk_rate;
1465     bool timer_active;
1466     @@ -117,15 +115,13 @@ static int pwm_omap_dmtimer_config(struct pwm_chip *chip,
1467     fclk = omap->pdata->get_fclk(omap->dm_timer);
1468     if (!fclk) {
1469     dev_err(chip->dev, "invalid pmtimer fclk\n");
1470     - mutex_unlock(&omap->mutex);
1471     - return -EINVAL;
1472     + goto err_einval;
1473     }
1474    
1475     clk_rate = clk_get_rate(fclk);
1476     if (!clk_rate) {
1477     dev_err(chip->dev, "invalid pmtimer fclk rate\n");
1478     - mutex_unlock(&omap->mutex);
1479     - return -EINVAL;
1480     + goto err_einval;
1481     }
1482    
1483     dev_dbg(chip->dev, "clk rate: %luHz\n", clk_rate);
1484     @@ -133,11 +129,45 @@ static int pwm_omap_dmtimer_config(struct pwm_chip *chip,
1485     /*
1486     * Calculate the appropriate load and match values based on the
1487     * specified period and duty cycle. The load value determines the
1488     - * cycle time and the match value determines the duty cycle.
1489     + * period time and the match value determines the duty time.
1490     + *
1491     + * The period lasts for (DM_TIMER_MAX-load_value+1) clock cycles.
1492     + * Similarly, the active time lasts (match_value-load_value+1) cycles.
1493     + * The non-active time is the remainder: (DM_TIMER_MAX-match_value)
1494     + * clock cycles.
1495     + *
1496     + * NOTE: It is required that: load_value <= match_value < DM_TIMER_MAX
1497     + *
1498     + * References:
1499     + * OMAP4430/60/70 TRM sections 22.2.4.10 and 22.2.4.11
1500     + * AM335x Sitara TRM sections 20.1.3.5 and 20.1.3.6
1501     */
1502     - load_value = pwm_omap_dmtimer_calc_value(clk_rate, period_ns);
1503     - match_value = pwm_omap_dmtimer_calc_value(clk_rate,
1504     - period_ns - duty_ns);
1505     + period_cycles = pwm_omap_dmtimer_get_clock_cycles(clk_rate, period_ns);
1506     + duty_cycles = pwm_omap_dmtimer_get_clock_cycles(clk_rate, duty_ns);
1507     +
1508     + if (period_cycles < 2) {
1509     + dev_info(chip->dev,
1510     + "period %d ns too short for clock rate %lu Hz\n",
1511     + period_ns, clk_rate);
1512     + goto err_einval;
1513     + }
1514     +
1515     + if (duty_cycles < 1) {
1516     + dev_dbg(chip->dev,
1517     + "duty cycle %d ns is too short for clock rate %lu Hz\n",
1518     + duty_ns, clk_rate);
1519     + dev_dbg(chip->dev, "using minimum of 1 clock cycle\n");
1520     + duty_cycles = 1;
1521     + } else if (duty_cycles >= period_cycles) {
1522     + dev_dbg(chip->dev,
1523     + "duty cycle %d ns is too long for period %d ns at clock rate %lu Hz\n",
1524     + duty_ns, period_ns, clk_rate);
1525     + dev_dbg(chip->dev, "using maximum of 1 clock cycle less than period\n");
1526     + duty_cycles = period_cycles - 1;
1527     + }
1528     +
1529     + load_value = (DM_TIMER_MAX - period_cycles) + 1;
1530     + match_value = load_value + duty_cycles - 1;
1531    
1532     /*
1533     * We MUST stop the associated dual-mode timer before attempting to
1534     @@ -166,6 +196,11 @@ static int pwm_omap_dmtimer_config(struct pwm_chip *chip,
1535     mutex_unlock(&omap->mutex);
1536    
1537     return 0;
1538     +
1539     +err_einval:
1540     + mutex_unlock(&omap->mutex);
1541     +
1542     + return -EINVAL;
1543     }
1544    
1545     static int pwm_omap_dmtimer_set_polarity(struct pwm_chip *chip,
1546     diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
1547     index a544366a367e..f57d02c3b6cf 100644
1548     --- a/drivers/scsi/lpfc/lpfc_init.c
1549     +++ b/drivers/scsi/lpfc/lpfc_init.c
1550     @@ -2860,7 +2860,7 @@ lpfc_online(struct lpfc_hba *phba)
1551     }
1552    
1553     vports = lpfc_create_vport_work_array(phba);
1554     - if (vports != NULL)
1555     + if (vports != NULL) {
1556     for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) {
1557     struct Scsi_Host *shost;
1558     shost = lpfc_shost_from_vport(vports[i]);
1559     @@ -2877,7 +2877,8 @@ lpfc_online(struct lpfc_hba *phba)
1560     }
1561     spin_unlock_irq(shost->host_lock);
1562     }
1563     - lpfc_destroy_vport_work_array(phba, vports);
1564     + }
1565     + lpfc_destroy_vport_work_array(phba, vports);
1566    
1567     lpfc_unblock_mgmt_io(phba);
1568     return 0;
1569     diff --git a/drivers/soc/rockchip/pm_domains.c b/drivers/soc/rockchip/pm_domains.c
1570     index 534c58937a56..4a65c5bda146 100644
1571     --- a/drivers/soc/rockchip/pm_domains.c
1572     +++ b/drivers/soc/rockchip/pm_domains.c
1573     @@ -419,6 +419,7 @@ static int rockchip_pm_domain_probe(struct platform_device *pdev)
1574     if (error) {
1575     dev_err(dev, "failed to handle node %s: %d\n",
1576     node->name, error);
1577     + of_node_put(node);
1578     goto err_out;
1579     }
1580     }
1581     diff --git a/drivers/usb/core/port.c b/drivers/usb/core/port.c
1582     index 14718a9ffcfb..460c855be0d0 100644
1583     --- a/drivers/usb/core/port.c
1584     +++ b/drivers/usb/core/port.c
1585     @@ -249,18 +249,12 @@ static int usb_port_runtime_suspend(struct device *dev)
1586    
1587     return retval;
1588     }
1589     -
1590     -static int usb_port_prepare(struct device *dev)
1591     -{
1592     - return 1;
1593     -}
1594     #endif
1595    
1596     static const struct dev_pm_ops usb_port_pm_ops = {
1597     #ifdef CONFIG_PM
1598     .runtime_suspend = usb_port_runtime_suspend,
1599     .runtime_resume = usb_port_runtime_resume,
1600     - .prepare = usb_port_prepare,
1601     #endif
1602     };
1603    
1604     diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
1605     index ebb29caa3fe4..77e4c9bc0ab1 100644
1606     --- a/drivers/usb/core/usb.c
1607     +++ b/drivers/usb/core/usb.c
1608     @@ -311,13 +311,7 @@ static int usb_dev_uevent(struct device *dev, struct kobj_uevent_env *env)
1609    
1610     static int usb_dev_prepare(struct device *dev)
1611     {
1612     - struct usb_device *udev = to_usb_device(dev);
1613     -
1614     - /* Return 0 if the current wakeup setting is wrong, otherwise 1 */
1615     - if (udev->do_remote_wakeup != device_may_wakeup(dev))
1616     - return 0;
1617     -
1618     - return 1;
1619     + return 0; /* Implement eventually? */
1620     }
1621    
1622     static void usb_dev_complete(struct device *dev)
1623     diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
1624     index 9bc0e090b881..a543cdc0f88f 100644
1625     --- a/drivers/usb/serial/cp210x.c
1626     +++ b/drivers/usb/serial/cp210x.c
1627     @@ -109,6 +109,7 @@ static const struct usb_device_id id_table[] = {
1628     { USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demonstration module */
1629     { USB_DEVICE(0x10C4, 0x8281) }, /* Nanotec Plug & Drive */
1630     { USB_DEVICE(0x10C4, 0x8293) }, /* Telegesis ETRX2USB */
1631     + { USB_DEVICE(0x10C4, 0x82F4) }, /* Starizona MicroTouch */
1632     { USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */
1633     { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */
1634     { USB_DEVICE(0x10C4, 0x8382) }, /* Cygnal Integrated Products, Inc. */
1635     @@ -118,6 +119,7 @@ static const struct usb_device_id id_table[] = {
1636     { USB_DEVICE(0x10C4, 0x8418) }, /* IRZ Automation Teleport SG-10 GSM/GPRS Modem */
1637     { USB_DEVICE(0x10C4, 0x846E) }, /* BEI USB Sensor Interface (VCP) */
1638     { USB_DEVICE(0x10C4, 0x8477) }, /* Balluff RFID */
1639     + { USB_DEVICE(0x10C4, 0x84B6) }, /* Starizona Hyperion */
1640     { USB_DEVICE(0x10C4, 0x85EA) }, /* AC-Services IBUS-IF */
1641     { USB_DEVICE(0x10C4, 0x85EB) }, /* AC-Services CIS-IBUS */
1642     { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */
1643     @@ -141,6 +143,8 @@ static const struct usb_device_id id_table[] = {
1644     { USB_DEVICE(0x10C4, 0xF004) }, /* Elan Digital Systems USBcount50 */
1645     { USB_DEVICE(0x10C5, 0xEA61) }, /* Silicon Labs MobiData GPRS USB Modem */
1646     { USB_DEVICE(0x10CE, 0xEA6A) }, /* Silicon Labs MobiData GPRS USB Modem 100EU */
1647     + { USB_DEVICE(0x12B8, 0xEC60) }, /* Link G4 ECU */
1648     + { USB_DEVICE(0x12B8, 0xEC62) }, /* Link G4+ ECU */
1649     { USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */
1650     { USB_DEVICE(0x1555, 0x0004) }, /* Owen AC4 USB-RS485 Converter */
1651     { USB_DEVICE(0x166A, 0x0201) }, /* Clipsal 5500PACA C-Bus Pascal Automation Controller */
1652     diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
1653     index 12eab503efd1..364bc44610c1 100644
1654     --- a/drivers/xen/balloon.c
1655     +++ b/drivers/xen/balloon.c
1656     @@ -152,6 +152,8 @@ static DECLARE_WAIT_QUEUE_HEAD(balloon_wq);
1657     static void balloon_process(struct work_struct *work);
1658     static DECLARE_DELAYED_WORK(balloon_worker, balloon_process);
1659    
1660     +static void release_memory_resource(struct resource *resource);
1661     +
1662     /* When ballooning out (allocating memory to return to Xen) we don't really
1663     want the kernel to try too hard since that can trigger the oom killer. */
1664     #define GFP_BALLOON \
1665     @@ -268,6 +270,20 @@ static struct resource *additional_memory_resource(phys_addr_t size)
1666     return NULL;
1667     }
1668    
1669     +#ifdef CONFIG_SPARSEMEM
1670     + {
1671     + unsigned long limit = 1UL << (MAX_PHYSMEM_BITS - PAGE_SHIFT);
1672     + unsigned long pfn = res->start >> PAGE_SHIFT;
1673     +
1674     + if (pfn > limit) {
1675     + pr_err("New System RAM resource outside addressable RAM (%lu > %lu)\n",
1676     + pfn, limit);
1677     + release_memory_resource(res);
1678     + return NULL;
1679     + }
1680     + }
1681     +#endif
1682     +
1683     return res;
1684     }
1685    
1686     diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c
1687     index 38272ad24551..f4edd6df3df2 100644
1688     --- a/drivers/xen/evtchn.c
1689     +++ b/drivers/xen/evtchn.c
1690     @@ -316,7 +316,6 @@ static int evtchn_resize_ring(struct per_user_data *u)
1691     {
1692     unsigned int new_size;
1693     evtchn_port_t *new_ring, *old_ring;
1694     - unsigned int p, c;
1695    
1696     /*
1697     * Ensure the ring is large enough to capture all possible
1698     @@ -346,20 +345,17 @@ static int evtchn_resize_ring(struct per_user_data *u)
1699     /*
1700     * Copy the old ring contents to the new ring.
1701     *
1702     - * If the ring contents crosses the end of the current ring,
1703     - * it needs to be copied in two chunks.
1704     + * To take care of wrapping, a full ring, and the new index
1705     + * pointing into the second half, simply copy the old contents
1706     + * twice.
1707     *
1708     * +---------+ +------------------+
1709     - * |34567 12| -> | 1234567 |
1710     - * +-----p-c-+ +------------------+
1711     + * |34567 12| -> |34567 1234567 12|
1712     + * +-----p-c-+ +-------c------p---+
1713     */
1714     - p = evtchn_ring_offset(u, u->ring_prod);
1715     - c = evtchn_ring_offset(u, u->ring_cons);
1716     - if (p < c) {
1717     - memcpy(new_ring + c, u->ring + c, (u->ring_size - c) * sizeof(*u->ring));
1718     - memcpy(new_ring + u->ring_size, u->ring, p * sizeof(*u->ring));
1719     - } else
1720     - memcpy(new_ring + c, u->ring + c, (p - c) * sizeof(*u->ring));
1721     + memcpy(new_ring, old_ring, u->ring_size * sizeof(*u->ring));
1722     + memcpy(new_ring + u->ring_size, old_ring,
1723     + u->ring_size * sizeof(*u->ring));
1724    
1725     u->ring = new_ring;
1726     u->ring_size = new_size;
1727     diff --git a/fs/pnode.c b/fs/pnode.c
1728     index c524fdddc7fb..99899705b105 100644
1729     --- a/fs/pnode.c
1730     +++ b/fs/pnode.c
1731     @@ -198,7 +198,7 @@ static struct mount *next_group(struct mount *m, struct mount *origin)
1732    
1733     /* all accesses are serialized by namespace_sem */
1734     static struct user_namespace *user_ns;
1735     -static struct mount *last_dest, *last_source, *dest_master;
1736     +static struct mount *last_dest, *first_source, *last_source, *dest_master;
1737     static struct mountpoint *mp;
1738     static struct hlist_head *list;
1739    
1740     @@ -221,20 +221,22 @@ static int propagate_one(struct mount *m)
1741     type = CL_MAKE_SHARED;
1742     } else {
1743     struct mount *n, *p;
1744     + bool done;
1745     for (n = m; ; n = p) {
1746     p = n->mnt_master;
1747     - if (p == dest_master || IS_MNT_MARKED(p)) {
1748     - while (last_dest->mnt_master != p) {
1749     - last_source = last_source->mnt_master;
1750     - last_dest = last_source->mnt_parent;
1751     - }
1752     - if (!peers(n, last_dest)) {
1753     - last_source = last_source->mnt_master;
1754     - last_dest = last_source->mnt_parent;
1755     - }
1756     + if (p == dest_master || IS_MNT_MARKED(p))
1757     break;
1758     - }
1759     }
1760     + do {
1761     + struct mount *parent = last_source->mnt_parent;
1762     + if (last_source == first_source)
1763     + break;
1764     + done = parent->mnt_master == p;
1765     + if (done && peers(n, parent))
1766     + break;
1767     + last_source = last_source->mnt_master;
1768     + } while (!done);
1769     +
1770     type = CL_SLAVE;
1771     /* beginning of peer group among the slaves? */
1772     if (IS_MNT_SHARED(m))
1773     @@ -286,6 +288,7 @@ int propagate_mnt(struct mount *dest_mnt, struct mountpoint *dest_mp,
1774     */
1775     user_ns = current->nsproxy->mnt_ns->user_ns;
1776     last_dest = dest_mnt;
1777     + first_source = source_mnt;
1778     last_source = source_mnt;
1779     mp = dest_mp;
1780     list = tree_list;
1781     diff --git a/fs/proc/base.c b/fs/proc/base.c
1782     index 4f764c2ac1a5..45f2162e55b2 100644
1783     --- a/fs/proc/base.c
1784     +++ b/fs/proc/base.c
1785     @@ -955,7 +955,8 @@ static ssize_t environ_read(struct file *file, char __user *buf,
1786     struct mm_struct *mm = file->private_data;
1787     unsigned long env_start, env_end;
1788    
1789     - if (!mm)
1790     + /* Ensure the process spawned far enough to have an environment. */
1791     + if (!mm || !mm->env_end)
1792     return 0;
1793    
1794     page = (char *)__get_free_page(GFP_TEMPORARY);
1795     diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
1796     index 1143e38555a4..408a60dca353 100644
1797     --- a/include/linux/clk-provider.h
1798     +++ b/include/linux/clk-provider.h
1799     @@ -385,6 +385,7 @@ struct clk_divider {
1800     #define CLK_DIVIDER_MAX_AT_ZERO BIT(6)
1801    
1802     extern const struct clk_ops clk_divider_ops;
1803     +extern const struct clk_ops clk_divider_ro_ops;
1804    
1805     unsigned long divider_recalc_rate(struct clk_hw *hw, unsigned long parent_rate,
1806     unsigned int val, const struct clk_div_table *table,
1807     diff --git a/include/linux/hash.h b/include/linux/hash.h
1808     index 1afde47e1528..79c52fa81cac 100644
1809     --- a/include/linux/hash.h
1810     +++ b/include/linux/hash.h
1811     @@ -32,12 +32,28 @@
1812     #error Wordsize not 32 or 64
1813     #endif
1814    
1815     +/*
1816     + * The above primes are actively bad for hashing, since they are
1817     + * too sparse. The 32-bit one is mostly ok, the 64-bit one causes
1818     + * real problems. Besides, the "prime" part is pointless for the
1819     + * multiplicative hash.
1820     + *
1821     + * Although a random odd number will do, it turns out that the golden
1822     + * ratio phi = (sqrt(5)-1)/2, or its negative, has particularly nice
1823     + * properties.
1824     + *
1825     + * These are the negative, (1 - phi) = (phi^2) = (3 - sqrt(5))/2.
1826     + * (See Knuth vol 3, section 6.4, exercise 9.)
1827     + */
1828     +#define GOLDEN_RATIO_32 0x61C88647
1829     +#define GOLDEN_RATIO_64 0x61C8864680B583EBull
1830     +
1831     static __always_inline u64 hash_64(u64 val, unsigned int bits)
1832     {
1833     u64 hash = val;
1834    
1835     -#if defined(CONFIG_ARCH_HAS_FAST_MULTIPLIER) && BITS_PER_LONG == 64
1836     - hash = hash * GOLDEN_RATIO_PRIME_64;
1837     +#if BITS_PER_LONG == 64
1838     + hash = hash * GOLDEN_RATIO_64;
1839     #else
1840     /* Sigh, gcc can't optimise this alone like it does for 32 bits. */
1841     u64 n = hash;
1842     diff --git a/include/linux/swap.h b/include/linux/swap.h
1843     index d18b65c53dbb..5fa4aa4ddd05 100644
1844     --- a/include/linux/swap.h
1845     +++ b/include/linux/swap.h
1846     @@ -533,6 +533,10 @@ static inline swp_entry_t get_swap_page(void)
1847     #ifdef CONFIG_MEMCG
1848     static inline int mem_cgroup_swappiness(struct mem_cgroup *memcg)
1849     {
1850     + /* Cgroup2 doesn't have per-cgroup swappiness */
1851     + if (cgroup_subsys_on_dfl(memory_cgrp_subsys))
1852     + return vm_swappiness;
1853     +
1854     /* root ? */
1855     if (mem_cgroup_disabled() || !memcg->css.parent)
1856     return vm_swappiness;
1857     diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
1858     index 0816c872b689..a6cc576fd467 100644
1859     --- a/include/net/ip_vs.h
1860     +++ b/include/net/ip_vs.h
1861     @@ -1588,6 +1588,23 @@ static inline void ip_vs_conn_drop_conntrack(struct ip_vs_conn *cp)
1862     }
1863     #endif /* CONFIG_IP_VS_NFCT */
1864    
1865     +/* Really using conntrack? */
1866     +static inline bool ip_vs_conn_uses_conntrack(struct ip_vs_conn *cp,
1867     + struct sk_buff *skb)
1868     +{
1869     +#ifdef CONFIG_IP_VS_NFCT
1870     + enum ip_conntrack_info ctinfo;
1871     + struct nf_conn *ct;
1872     +
1873     + if (!(cp->flags & IP_VS_CONN_F_NFCT))
1874     + return false;
1875     + ct = nf_ct_get(skb, &ctinfo);
1876     + if (ct && !nf_ct_is_untracked(ct))
1877     + return true;
1878     +#endif
1879     + return false;
1880     +}
1881     +
1882     static inline int
1883     ip_vs_dest_conn_overhead(struct ip_vs_dest *dest)
1884     {
1885     diff --git a/include/xen/page.h b/include/xen/page.h
1886     index 96294ac93755..9dc46cb8a0fd 100644
1887     --- a/include/xen/page.h
1888     +++ b/include/xen/page.h
1889     @@ -15,9 +15,9 @@
1890     */
1891    
1892     #define xen_pfn_to_page(xen_pfn) \
1893     - ((pfn_to_page(((unsigned long)(xen_pfn) << XEN_PAGE_SHIFT) >> PAGE_SHIFT)))
1894     + (pfn_to_page((unsigned long)(xen_pfn) >> (PAGE_SHIFT - XEN_PAGE_SHIFT)))
1895     #define page_to_xen_pfn(page) \
1896     - (((page_to_pfn(page)) << PAGE_SHIFT) >> XEN_PAGE_SHIFT)
1897     + ((page_to_pfn(page)) << (PAGE_SHIFT - XEN_PAGE_SHIFT))
1898    
1899     #define XEN_PFN_PER_PAGE (PAGE_SIZE / XEN_PAGE_SIZE)
1900    
1901     diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
1902     index 05ddc0820771..6f965864cc02 100644
1903     --- a/kernel/trace/trace_events.c
1904     +++ b/kernel/trace/trace_events.c
1905     @@ -2095,8 +2095,13 @@ event_create_dir(struct dentry *parent, struct trace_event_file *file)
1906     trace_create_file("filter", 0644, file->dir, file,
1907     &ftrace_event_filter_fops);
1908    
1909     - trace_create_file("trigger", 0644, file->dir, file,
1910     - &event_trigger_fops);
1911     + /*
1912     + * Only event directories that can be enabled should have
1913     + * triggers.
1914     + */
1915     + if (!(call->flags & TRACE_EVENT_FL_IGNORE_ENABLE))
1916     + trace_create_file("trigger", 0644, file->dir, file,
1917     + &event_trigger_fops);
1918    
1919     trace_create_file("format", 0444, file->dir, call,
1920     &ftrace_event_format_fops);
1921     diff --git a/mm/compaction.c b/mm/compaction.c
1922     index 585de54dbe8c..29fb26970fba 100644
1923     --- a/mm/compaction.c
1924     +++ b/mm/compaction.c
1925     @@ -880,16 +880,8 @@ isolate_migratepages_range(struct compact_control *cc, unsigned long start_pfn,
1926     pfn = isolate_migratepages_block(cc, pfn, block_end_pfn,
1927     ISOLATE_UNEVICTABLE);
1928    
1929     - /*
1930     - * In case of fatal failure, release everything that might
1931     - * have been isolated in the previous iteration, and signal
1932     - * the failure back to caller.
1933     - */
1934     - if (!pfn) {
1935     - putback_movable_pages(&cc->migratepages);
1936     - cc->nr_migratepages = 0;
1937     + if (!pfn)
1938     break;
1939     - }
1940    
1941     if (cc->nr_migratepages == COMPACT_CLUSTER_MAX)
1942     break;
1943     diff --git a/mm/page-writeback.c b/mm/page-writeback.c
1944     index 6fe7d15bd1f7..62bbf350ddf7 100644
1945     --- a/mm/page-writeback.c
1946     +++ b/mm/page-writeback.c
1947     @@ -1909,7 +1909,8 @@ bool wb_over_bg_thresh(struct bdi_writeback *wb)
1948     if (gdtc->dirty > gdtc->bg_thresh)
1949     return true;
1950    
1951     - if (wb_stat(wb, WB_RECLAIMABLE) > __wb_calc_thresh(gdtc))
1952     + if (wb_stat(wb, WB_RECLAIMABLE) >
1953     + wb_calc_thresh(gdtc->wb, gdtc->bg_thresh))
1954     return true;
1955    
1956     if (mdtc) {
1957     @@ -1923,7 +1924,8 @@ bool wb_over_bg_thresh(struct bdi_writeback *wb)
1958     if (mdtc->dirty > mdtc->bg_thresh)
1959     return true;
1960    
1961     - if (wb_stat(wb, WB_RECLAIMABLE) > __wb_calc_thresh(mdtc))
1962     + if (wb_stat(wb, WB_RECLAIMABLE) >
1963     + wb_calc_thresh(mdtc->wb, mdtc->bg_thresh))
1964     return true;
1965     }
1966    
1967     diff --git a/mm/page_alloc.c b/mm/page_alloc.c
1968     index 9d9044e91ac5..629ce645cffd 100644
1969     --- a/mm/page_alloc.c
1970     +++ b/mm/page_alloc.c
1971     @@ -6214,7 +6214,7 @@ int __meminit init_per_zone_wmark_min(void)
1972     setup_per_zone_inactive_ratio();
1973     return 0;
1974     }
1975     -module_init(init_per_zone_wmark_min)
1976     +core_initcall(init_per_zone_wmark_min)
1977    
1978     /*
1979     * min_free_kbytes_sysctl_handler - just a wrapper around proc_dointvec() so
1980     diff --git a/mm/zswap.c b/mm/zswap.c
1981     index bf14508afd64..340261946fda 100644
1982     --- a/mm/zswap.c
1983     +++ b/mm/zswap.c
1984     @@ -170,6 +170,8 @@ static struct zswap_tree *zswap_trees[MAX_SWAPFILES];
1985     static LIST_HEAD(zswap_pools);
1986     /* protects zswap_pools list modification */
1987     static DEFINE_SPINLOCK(zswap_pools_lock);
1988     +/* pool counter to provide unique names to zpool */
1989     +static atomic_t zswap_pools_count = ATOMIC_INIT(0);
1990    
1991     /* used by param callback function */
1992     static bool zswap_init_started;
1993     @@ -565,6 +567,7 @@ static struct zswap_pool *zswap_pool_find_get(char *type, char *compressor)
1994     static struct zswap_pool *zswap_pool_create(char *type, char *compressor)
1995     {
1996     struct zswap_pool *pool;
1997     + char name[38]; /* 'zswap' + 32 char (max) num + \0 */
1998     gfp_t gfp = __GFP_NORETRY | __GFP_NOWARN | __GFP_KSWAPD_RECLAIM;
1999    
2000     pool = kzalloc(sizeof(*pool), GFP_KERNEL);
2001     @@ -573,7 +576,10 @@ static struct zswap_pool *zswap_pool_create(char *type, char *compressor)
2002     return NULL;
2003     }
2004    
2005     - pool->zpool = zpool_create_pool(type, "zswap", gfp, &zswap_zpool_ops);
2006     + /* unique name for each pool specifically required by zsmalloc */
2007     + snprintf(name, 38, "zswap%x", atomic_inc_return(&zswap_pools_count));
2008     +
2009     + pool->zpool = zpool_create_pool(type, name, gfp, &zswap_zpool_ops);
2010     if (!pool->zpool) {
2011     pr_err("%s zpool not available\n", type);
2012     goto error;
2013     diff --git a/net/batman-adv/distributed-arp-table.c b/net/batman-adv/distributed-arp-table.c
2014     index a49c705fb86b..5f19133c5530 100644
2015     --- a/net/batman-adv/distributed-arp-table.c
2016     +++ b/net/batman-adv/distributed-arp-table.c
2017     @@ -553,6 +553,7 @@ static void batadv_choose_next_candidate(struct batadv_priv *bat_priv,
2018     * be sent to
2019     * @bat_priv: the bat priv with all the soft interface information
2020     * @ip_dst: ipv4 to look up in the DHT
2021     + * @vid: VLAN identifier
2022     *
2023     * An originator O is selected if and only if its DHT_ID value is one of three
2024     * closest values (from the LEFT, with wrap around if needed) then the hash
2025     @@ -561,7 +562,8 @@ static void batadv_choose_next_candidate(struct batadv_priv *bat_priv,
2026     * Returns the candidate array of size BATADV_DAT_CANDIDATE_NUM.
2027     */
2028     static struct batadv_dat_candidate *
2029     -batadv_dat_select_candidates(struct batadv_priv *bat_priv, __be32 ip_dst)
2030     +batadv_dat_select_candidates(struct batadv_priv *bat_priv, __be32 ip_dst,
2031     + unsigned short vid)
2032     {
2033     int select;
2034     batadv_dat_addr_t last_max = BATADV_DAT_ADDR_MAX, ip_key;
2035     @@ -577,7 +579,7 @@ batadv_dat_select_candidates(struct batadv_priv *bat_priv, __be32 ip_dst)
2036     return NULL;
2037    
2038     dat.ip = ip_dst;
2039     - dat.vid = 0;
2040     + dat.vid = vid;
2041     ip_key = (batadv_dat_addr_t)batadv_hash_dat(&dat,
2042     BATADV_DAT_ADDR_MAX);
2043    
2044     @@ -597,6 +599,7 @@ batadv_dat_select_candidates(struct batadv_priv *bat_priv, __be32 ip_dst)
2045     * @bat_priv: the bat priv with all the soft interface information
2046     * @skb: payload to send
2047     * @ip: the DHT key
2048     + * @vid: VLAN identifier
2049     * @packet_subtype: unicast4addr packet subtype to use
2050     *
2051     * This function copies the skb with pskb_copy() and is sent as unicast packet
2052     @@ -607,7 +610,7 @@ batadv_dat_select_candidates(struct batadv_priv *bat_priv, __be32 ip_dst)
2053     */
2054     static bool batadv_dat_send_data(struct batadv_priv *bat_priv,
2055     struct sk_buff *skb, __be32 ip,
2056     - int packet_subtype)
2057     + unsigned short vid, int packet_subtype)
2058     {
2059     int i;
2060     bool ret = false;
2061     @@ -616,7 +619,7 @@ static bool batadv_dat_send_data(struct batadv_priv *bat_priv,
2062     struct sk_buff *tmp_skb;
2063     struct batadv_dat_candidate *cand;
2064    
2065     - cand = batadv_dat_select_candidates(bat_priv, ip);
2066     + cand = batadv_dat_select_candidates(bat_priv, ip, vid);
2067     if (!cand)
2068     goto out;
2069    
2070     @@ -1004,7 +1007,7 @@ bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv,
2071     ret = true;
2072     } else {
2073     /* Send the request to the DHT */
2074     - ret = batadv_dat_send_data(bat_priv, skb, ip_dst,
2075     + ret = batadv_dat_send_data(bat_priv, skb, ip_dst, vid,
2076     BATADV_P_DAT_DHT_GET);
2077     }
2078     out:
2079     @@ -1132,8 +1135,8 @@ void batadv_dat_snoop_outgoing_arp_reply(struct batadv_priv *bat_priv,
2080     /* Send the ARP reply to the candidates for both the IP addresses that
2081     * the node obtained from the ARP reply
2082     */
2083     - batadv_dat_send_data(bat_priv, skb, ip_src, BATADV_P_DAT_DHT_PUT);
2084     - batadv_dat_send_data(bat_priv, skb, ip_dst, BATADV_P_DAT_DHT_PUT);
2085     + batadv_dat_send_data(bat_priv, skb, ip_src, vid, BATADV_P_DAT_DHT_PUT);
2086     + batadv_dat_send_data(bat_priv, skb, ip_dst, vid, BATADV_P_DAT_DHT_PUT);
2087     }
2088    
2089     /**
2090     diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
2091     index e4f2646d9246..43d15d6c4b6a 100644
2092     --- a/net/batman-adv/routing.c
2093     +++ b/net/batman-adv/routing.c
2094     @@ -104,6 +104,15 @@ static void _batadv_update_route(struct batadv_priv *bat_priv,
2095     neigh_node = NULL;
2096    
2097     spin_lock_bh(&orig_node->neigh_list_lock);
2098     + /* curr_router used earlier may not be the current orig_ifinfo->router
2099     + * anymore because it was dereferenced outside of the neigh_list_lock
2100     + * protected region. After the new best neighbor has replace the current
2101     + * best neighbor the reference counter needs to decrease. Consequently,
2102     + * the code needs to ensure the curr_router variable contains a pointer
2103     + * to the replaced best neighbor.
2104     + */
2105     + curr_router = rcu_dereference_protected(orig_ifinfo->router, true);
2106     +
2107     rcu_assign_pointer(orig_ifinfo->router, neigh_node);
2108     spin_unlock_bh(&orig_node->neigh_list_lock);
2109     batadv_orig_ifinfo_free_ref(orig_ifinfo);
2110     diff --git a/net/batman-adv/send.c b/net/batman-adv/send.c
2111     index 782fa33ec296..45bfdefa15a5 100644
2112     --- a/net/batman-adv/send.c
2113     +++ b/net/batman-adv/send.c
2114     @@ -629,6 +629,9 @@ batadv_purge_outstanding_packets(struct batadv_priv *bat_priv,
2115    
2116     if (pending) {
2117     hlist_del(&forw_packet->list);
2118     + if (!forw_packet->own)
2119     + atomic_inc(&bat_priv->bcast_queue_left);
2120     +
2121     batadv_forw_packet_free(forw_packet);
2122     }
2123     }
2124     @@ -656,6 +659,9 @@ batadv_purge_outstanding_packets(struct batadv_priv *bat_priv,
2125    
2126     if (pending) {
2127     hlist_del(&forw_packet->list);
2128     + if (!forw_packet->own)
2129     + atomic_inc(&bat_priv->batman_queue_left);
2130     +
2131     batadv_forw_packet_free(forw_packet);
2132     }
2133     }
2134     diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
2135     index ac4d08de5df4..720f1a5b81ac 100644
2136     --- a/net/batman-adv/soft-interface.c
2137     +++ b/net/batman-adv/soft-interface.c
2138     @@ -407,11 +407,17 @@ void batadv_interface_rx(struct net_device *soft_iface,
2139     */
2140     nf_reset(skb);
2141    
2142     + if (unlikely(!pskb_may_pull(skb, ETH_HLEN)))
2143     + goto dropped;
2144     +
2145     vid = batadv_get_vid(skb, 0);
2146     ethhdr = eth_hdr(skb);
2147    
2148     switch (ntohs(ethhdr->h_proto)) {
2149     case ETH_P_8021Q:
2150     + if (!pskb_may_pull(skb, VLAN_ETH_HLEN))
2151     + goto dropped;
2152     +
2153     vhdr = (struct vlan_ethhdr *)skb->data;
2154    
2155     if (vhdr->h_vlan_encapsulated_proto != ethertype)
2156     @@ -423,8 +429,6 @@ void batadv_interface_rx(struct net_device *soft_iface,
2157     }
2158    
2159     /* skb->dev & skb->pkt_type are set here */
2160     - if (unlikely(!pskb_may_pull(skb, ETH_HLEN)))
2161     - goto dropped;
2162     skb->protocol = eth_type_trans(skb, soft_iface);
2163    
2164     /* should not be necessary anymore as we use skb_pull_rcsum()
2165     diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
2166     index 7a2b7915093b..bcb0a1b64556 100644
2167     --- a/net/mac80211/iface.c
2168     +++ b/net/mac80211/iface.c
2169     @@ -1750,7 +1750,7 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name,
2170    
2171     ret = dev_alloc_name(ndev, ndev->name);
2172     if (ret < 0) {
2173     - free_netdev(ndev);
2174     + ieee80211_if_free(ndev);
2175     return ret;
2176     }
2177    
2178     @@ -1836,7 +1836,7 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name,
2179    
2180     ret = register_netdevice(ndev);
2181     if (ret) {
2182     - free_netdev(ndev);
2183     + ieee80211_if_free(ndev);
2184     return ret;
2185     }
2186     }
2187     diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c
2188     index f57b4dcdb233..4da560005b0e 100644
2189     --- a/net/netfilter/ipvs/ip_vs_core.c
2190     +++ b/net/netfilter/ipvs/ip_vs_core.c
2191     @@ -1757,15 +1757,34 @@ ip_vs_in(struct netns_ipvs *ipvs, unsigned int hooknum, struct sk_buff *skb, int
2192     cp = pp->conn_in_get(ipvs, af, skb, &iph);
2193    
2194     conn_reuse_mode = sysctl_conn_reuse_mode(ipvs);
2195     - if (conn_reuse_mode && !iph.fragoffs &&
2196     - is_new_conn(skb, &iph) && cp &&
2197     - ((unlikely(sysctl_expire_nodest_conn(ipvs)) && cp->dest &&
2198     - unlikely(!atomic_read(&cp->dest->weight))) ||
2199     - unlikely(is_new_conn_expected(cp, conn_reuse_mode)))) {
2200     - if (!atomic_read(&cp->n_control))
2201     - ip_vs_conn_expire_now(cp);
2202     - __ip_vs_conn_put(cp);
2203     - cp = NULL;
2204     + if (conn_reuse_mode && !iph.fragoffs && is_new_conn(skb, &iph) && cp) {
2205     + bool uses_ct = false, resched = false;
2206     +
2207     + if (unlikely(sysctl_expire_nodest_conn(ipvs)) && cp->dest &&
2208     + unlikely(!atomic_read(&cp->dest->weight))) {
2209     + resched = true;
2210     + uses_ct = ip_vs_conn_uses_conntrack(cp, skb);
2211     + } else if (is_new_conn_expected(cp, conn_reuse_mode)) {
2212     + uses_ct = ip_vs_conn_uses_conntrack(cp, skb);
2213     + if (!atomic_read(&cp->n_control)) {
2214     + resched = true;
2215     + } else {
2216     + /* Do not reschedule controlling connection
2217     + * that uses conntrack while it is still
2218     + * referenced by controlled connection(s).
2219     + */
2220     + resched = !uses_ct;
2221     + }
2222     + }
2223     +
2224     + if (resched) {
2225     + if (!atomic_read(&cp->n_control))
2226     + ip_vs_conn_expire_now(cp);
2227     + __ip_vs_conn_put(cp);
2228     + if (uses_ct)
2229     + return NF_DROP;
2230     + cp = NULL;
2231     + }
2232     }
2233    
2234     if (unlikely(!cp)) {
2235     diff --git a/net/netfilter/ipvs/ip_vs_pe_sip.c b/net/netfilter/ipvs/ip_vs_pe_sip.c
2236     index 1b8d594e493a..0a6eb5c0d9e9 100644
2237     --- a/net/netfilter/ipvs/ip_vs_pe_sip.c
2238     +++ b/net/netfilter/ipvs/ip_vs_pe_sip.c
2239     @@ -70,10 +70,10 @@ ip_vs_sip_fill_param(struct ip_vs_conn_param *p, struct sk_buff *skb)
2240     const char *dptr;
2241     int retc;
2242    
2243     - ip_vs_fill_iph_skb(p->af, skb, false, &iph);
2244     + retc = ip_vs_fill_iph_skb(p->af, skb, false, &iph);
2245    
2246     /* Only useful with UDP */
2247     - if (iph.protocol != IPPROTO_UDP)
2248     + if (!retc || iph.protocol != IPPROTO_UDP)
2249     return -EINVAL;
2250     /* todo: IPv6 fragments:
2251     * I think this only should be done for the first fragment. /HS
2252     @@ -88,7 +88,7 @@ ip_vs_sip_fill_param(struct ip_vs_conn_param *p, struct sk_buff *skb)
2253     dptr = skb->data + dataoff;
2254     datalen = skb->len - dataoff;
2255    
2256     - if (get_callid(dptr, dataoff, datalen, &matchoff, &matchlen))
2257     + if (get_callid(dptr, 0, datalen, &matchoff, &matchlen))
2258     return -EINVAL;
2259    
2260     /* N.B: pe_data is only set on success,
2261     diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
2262     index 161dd0d67da8..a9155077feef 100644
2263     --- a/scripts/mod/file2alias.c
2264     +++ b/scripts/mod/file2alias.c
2265     @@ -371,6 +371,49 @@ static void do_usb_table(void *symval, unsigned long size,
2266     do_usb_entry_multi(symval + i, mod);
2267     }
2268    
2269     +static void do_of_entry_multi(void *symval, struct module *mod)
2270     +{
2271     + char alias[500];
2272     + int len;
2273     + char *tmp;
2274     +
2275     + DEF_FIELD_ADDR(symval, of_device_id, name);
2276     + DEF_FIELD_ADDR(symval, of_device_id, type);
2277     + DEF_FIELD_ADDR(symval, of_device_id, compatible);
2278     +
2279     + len = sprintf(alias, "of:N%sT%s", (*name)[0] ? *name : "*",
2280     + (*type)[0] ? *type : "*");
2281     +
2282     + if (compatible[0])
2283     + sprintf(&alias[len], "%sC%s", (*type)[0] ? "*" : "",
2284     + *compatible);
2285     +
2286     + /* Replace all whitespace with underscores */
2287     + for (tmp = alias; tmp && *tmp; tmp++)
2288     + if (isspace(*tmp))
2289     + *tmp = '_';
2290     +
2291     + buf_printf(&mod->dev_table_buf, "MODULE_ALIAS(\"%s\");\n", alias);
2292     + strcat(alias, "C");
2293     + add_wildcard(alias);
2294     + buf_printf(&mod->dev_table_buf, "MODULE_ALIAS(\"%s\");\n", alias);
2295     +}
2296     +
2297     +static void do_of_table(void *symval, unsigned long size,
2298     + struct module *mod)
2299     +{
2300     + unsigned int i;
2301     + const unsigned long id_size = SIZE_of_device_id;
2302     +
2303     + device_id_check(mod->name, "of", size, id_size, symval);
2304     +
2305     + /* Leave last one: it's the terminator. */
2306     + size -= id_size;
2307     +
2308     + for (i = 0; i < size; i += id_size)
2309     + do_of_entry_multi(symval + i, mod);
2310     +}
2311     +
2312     /* Looks like: hid:bNvNpN */
2313     static int do_hid_entry(const char *filename,
2314     void *symval, char *alias)
2315     @@ -684,30 +727,6 @@ static int do_pcmcia_entry(const char *filename,
2316     }
2317     ADD_TO_DEVTABLE("pcmcia", pcmcia_device_id, do_pcmcia_entry);
2318    
2319     -static int do_of_entry (const char *filename, void *symval, char *alias)
2320     -{
2321     - int len;
2322     - char *tmp;
2323     - DEF_FIELD_ADDR(symval, of_device_id, name);
2324     - DEF_FIELD_ADDR(symval, of_device_id, type);
2325     - DEF_FIELD_ADDR(symval, of_device_id, compatible);
2326     -
2327     - len = sprintf(alias, "of:N%sT%s", (*name)[0] ? *name : "*",
2328     - (*type)[0] ? *type : "*");
2329     -
2330     - if (compatible[0])
2331     - sprintf(&alias[len], "%sC%s", (*type)[0] ? "*" : "",
2332     - *compatible);
2333     -
2334     - /* Replace all whitespace with underscores */
2335     - for (tmp = alias; tmp && *tmp; tmp++)
2336     - if (isspace (*tmp))
2337     - *tmp = '_';
2338     -
2339     - return 1;
2340     -}
2341     -ADD_TO_DEVTABLE("of", of_device_id, do_of_entry);
2342     -
2343     static int do_vio_entry(const char *filename, void *symval,
2344     char *alias)
2345     {
2346     @@ -1348,6 +1367,8 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
2347     /* First handle the "special" cases */
2348     if (sym_is(name, namelen, "usb"))
2349     do_usb_table(symval, sym->st_size, mod);
2350     + if (sym_is(name, namelen, "of"))
2351     + do_of_table(symval, sym->st_size, mod);
2352     else if (sym_is(name, namelen, "pnp"))
2353     do_pnp_device_entry(symval, sym->st_size, mod);
2354     else if (sym_is(name, namelen, "pnp_card"))