Magellan Linux

Annotation of /trunk/kernel-alx/patches-3.18/0116-3.18.17-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2617 - (hide annotations) (download)
Mon Jul 13 08:29:05 2015 UTC (8 years, 10 months ago) by niro
File size: 238602 byte(s)
-linux-3.18.17
1 niro 2617 diff --git a/Documentation/networking/rds.txt b/Documentation/networking/rds.txt
2     index c67077cbeb80..e1a3d59bbe0f 100644
3     --- a/Documentation/networking/rds.txt
4     +++ b/Documentation/networking/rds.txt
5     @@ -62,11 +62,10 @@ Socket Interface
6     ================
7    
8     AF_RDS, PF_RDS, SOL_RDS
9     - These constants haven't been assigned yet, because RDS isn't in
10     - mainline yet. Currently, the kernel module assigns some constant
11     - and publishes it to user space through two sysctl files
12     - /proc/sys/net/rds/pf_rds
13     - /proc/sys/net/rds/sol_rds
14     + AF_RDS and PF_RDS are the domain type to be used with socket(2)
15     + to create RDS sockets. SOL_RDS is the socket-level to be used
16     + with setsockopt(2) and getsockopt(2) for RDS specific socket
17     + options.
18    
19     fd = socket(PF_RDS, SOCK_SEQPACKET, 0);
20     This creates a new, unbound RDS socket.
21     diff --git a/Documentation/pinctrl.txt b/Documentation/pinctrl.txt
22     index b8f2147b96dd..0df872a41053 100644
23     --- a/Documentation/pinctrl.txt
24     +++ b/Documentation/pinctrl.txt
25     @@ -72,7 +72,6 @@ static struct pinctrl_desc foo_desc = {
26     .name = "foo",
27     .pins = foo_pins,
28     .npins = ARRAY_SIZE(foo_pins),
29     - .maxpin = 63,
30     .owner = THIS_MODULE,
31     };
32    
33     @@ -164,8 +163,8 @@ static const char *foo_get_group_name(struct pinctrl_dev *pctldev,
34     }
35    
36     static int foo_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector,
37     - unsigned ** const pins,
38     - unsigned * const num_pins)
39     + const unsigned **pins,
40     + unsigned *num_pins)
41     {
42     *pins = (unsigned *) foo_groups[selector].pins;
43     *num_pins = foo_groups[selector].num_pins;
44     @@ -570,9 +569,8 @@ is possible to perform the requested mux setting, poke the hardware so that
45     this happens.
46    
47     Pinmux drivers are required to supply a few callback functions, some are
48     -optional. Usually the enable() and disable() functions are implemented,
49     -writing values into some certain registers to activate a certain mux setting
50     -for a certain pin.
51     +optional. Usually the set_mux() function is implemented, writing values into
52     +some certain registers to activate a certain mux setting for a certain pin.
53    
54     A simple driver for the above example will work by setting bits 0, 1, 2, 3 or 4
55     into some register named MUX to select a certain function with a certain
56     @@ -1266,7 +1264,7 @@ The semantics of the pinctrl APIs are:
57    
58     Usually the pin control core handled the get/put pair and call out to the
59     device drivers bookkeeping operations, like checking available functions and
60     -the associated pins, whereas the enable/disable pass on to the pin controller
61     +the associated pins, whereas select_state pass on to the pin controller
62     driver which takes care of activating and/or deactivating the mux setting by
63     quickly poking some registers.
64    
65     @@ -1363,8 +1361,9 @@ function, but with different named in the mapping as described under
66     "Advanced mapping" above. So that for an SPI device, we have two states named
67     "pos-A" and "pos-B".
68    
69     -This snippet first muxes the function in the pins defined by group A, enables
70     -it, disables and releases it, and muxes it in on the pins defined by group B:
71     +This snippet first initializes a state object for both groups (in foo_probe()),
72     +then muxes the function in the pins defined by group A, and finally muxes it in
73     +on the pins defined by group B:
74    
75     #include <linux/pinctrl/consumer.h>
76    
77     diff --git a/Documentation/stable_kernel_rules.txt b/Documentation/stable_kernel_rules.txt
78     index 02f8331edb8b..58d0ac4df946 100644
79     --- a/Documentation/stable_kernel_rules.txt
80     +++ b/Documentation/stable_kernel_rules.txt
81     @@ -81,6 +81,16 @@ format in the sign-off area:
82     git cherry-pick fd21073
83     git cherry-pick <this commit>
84    
85     +Also, some patches may have kernel version prerequisites. This can be
86     +specified in the following format in the sign-off area:
87     +
88     + Cc: <stable@vger.kernel.org> # 3.3.x-
89     +
90     + The tag has the meaning of:
91     + git cherry-pick <this commit>
92     +
93     + For each "-stable" tree starting with the specified version.
94     +
95     Following the submission:
96    
97     - The sender will receive an ACK when the patch has been accepted into the
98     diff --git a/Makefile b/Makefile
99     index d84fdc6d02f4..95ee52f9432e 100644
100     --- a/Makefile
101     +++ b/Makefile
102     @@ -1,6 +1,6 @@
103     VERSION = 3
104     PATCHLEVEL = 18
105     -SUBLEVEL = 16
106     +SUBLEVEL = 17
107     EXTRAVERSION =
108     NAME = Diseased Newt
109    
110     diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi
111     index e06c11fa8698..516d62ac25a9 100644
112     --- a/arch/arm/boot/dts/r8a7791.dtsi
113     +++ b/arch/arm/boot/dts/r8a7791.dtsi
114     @@ -695,19 +695,19 @@
115     };
116    
117     /* Variable factor clocks */
118     - sd1_clk: sd2_clk@e6150078 {
119     + sd2_clk: sd2_clk@e6150078 {
120     compatible = "renesas,r8a7791-div6-clock", "renesas,cpg-div6-clock";
121     reg = <0 0xe6150078 0 4>;
122     clocks = <&pll1_div2_clk>;
123     #clock-cells = <0>;
124     - clock-output-names = "sd1";
125     + clock-output-names = "sd2";
126     };
127     - sd2_clk: sd3_clk@e615026c {
128     + sd3_clk: sd3_clk@e615026c {
129     compatible = "renesas,r8a7791-div6-clock", "renesas,cpg-div6-clock";
130     reg = <0 0xe615026c 0 4>;
131     clocks = <&pll1_div2_clk>;
132     #clock-cells = <0>;
133     - clock-output-names = "sd2";
134     + clock-output-names = "sd3";
135     };
136     mmc0_clk: mmc0_clk@e6150240 {
137     compatible = "renesas,r8a7791-div6-clock", "renesas,cpg-div6-clock";
138     @@ -922,17 +922,20 @@
139     mstp3_clks: mstp3_clks@e615013c {
140     compatible = "renesas,r8a7791-mstp-clocks", "renesas,cpg-mstp-clocks";
141     reg = <0 0xe615013c 0 4>, <0 0xe6150048 0 4>;
142     - clocks = <&cp_clk>, <&sd2_clk>, <&sd1_clk>, <&cpg_clocks R8A7791_CLK_SD0>,
143     - <&mmc0_clk>, <&hp_clk>, <&mp_clk>, <&hp_clk>, <&mp_clk>, <&rclk_clk>;
144     + clocks = <&cp_clk>, <&sd3_clk>, <&sd2_clk>, <&cpg_clocks R8A7791_CLK_SD0>,
145     + <&mmc0_clk>, <&hp_clk>, <&mp_clk>, <&hp_clk>, <&mp_clk>, <&rclk_clk>,
146     + <&hp_clk>, <&hp_clk>;
147     #clock-cells = <1>;
148     renesas,clock-indices = <
149     R8A7791_CLK_TPU0 R8A7791_CLK_SDHI2 R8A7791_CLK_SDHI1 R8A7791_CLK_SDHI0
150     R8A7791_CLK_MMCIF0 R8A7791_CLK_IIC0 R8A7791_CLK_PCIEC R8A7791_CLK_IIC1
151     R8A7791_CLK_SSUSB R8A7791_CLK_CMT1
152     + R8A7791_CLK_USBDMAC0 R8A7791_CLK_USBDMAC1
153     >;
154     clock-output-names =
155     "tpu0", "sdhi2", "sdhi1", "sdhi0",
156     - "mmcif0", "i2c7", "pciec", "i2c8", "ssusb", "cmt1";
157     + "mmcif0", "i2c7", "pciec", "i2c8", "ssusb", "cmt1",
158     + "usbdmac0", "usbdmac1";
159     };
160     mstp5_clks: mstp5_clks@e6150144 {
161     compatible = "renesas,r8a7791-mstp-clocks", "renesas,cpg-mstp-clocks";
162     diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile
163     index 03120e656aea..2ecc7d15bc09 100644
164     --- a/arch/arm/kernel/Makefile
165     +++ b/arch/arm/kernel/Makefile
166     @@ -84,6 +84,7 @@ obj-$(CONFIG_CPU_PJ4B) += pj4-cp0.o
167     obj-$(CONFIG_IWMMXT) += iwmmxt.o
168     obj-$(CONFIG_PERF_EVENTS) += perf_regs.o
169     obj-$(CONFIG_HW_PERF_EVENTS) += perf_event.o perf_event_cpu.o
170     +CFLAGS_pj4-cp0.o := -marm
171     AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt
172     obj-$(CONFIG_ARM_CPU_TOPOLOGY) += topology.o
173    
174     diff --git a/arch/arm/kernel/iwmmxt.S b/arch/arm/kernel/iwmmxt.S
175     index ad58e565fe98..49fadbda8c63 100644
176     --- a/arch/arm/kernel/iwmmxt.S
177     +++ b/arch/arm/kernel/iwmmxt.S
178     @@ -58,6 +58,7 @@
179     #define MMX_SIZE (0x98)
180    
181     .text
182     + .arm
183    
184     /*
185     * Lazy switching of Concan coprocessor context
186     @@ -182,6 +183,8 @@ concan_load:
187     tmcr wCon, r2
188     ret lr
189    
190     +ENDPROC(iwmmxt_task_enable)
191     +
192     /*
193     * Back up Concan regs to save area and disable access to them
194     * (mainly for gdb or sleep mode usage)
195     @@ -232,6 +235,8 @@ ENTRY(iwmmxt_task_disable)
196     1: msr cpsr_c, ip @ restore interrupt mode
197     ldmfd sp!, {r4, pc}
198    
199     +ENDPROC(iwmmxt_task_disable)
200     +
201     /*
202     * Copy Concan state to given memory address
203     *
204     @@ -268,6 +273,8 @@ ENTRY(iwmmxt_task_copy)
205     msr cpsr_c, ip @ restore interrupt mode
206     ret r3
207    
208     +ENDPROC(iwmmxt_task_copy)
209     +
210     /*
211     * Restore Concan state from given memory address
212     *
213     @@ -304,6 +311,8 @@ ENTRY(iwmmxt_task_restore)
214     msr cpsr_c, ip @ restore interrupt mode
215     ret r3
216    
217     +ENDPROC(iwmmxt_task_restore)
218     +
219     /*
220     * Concan handling on task switch
221     *
222     @@ -335,6 +344,8 @@ ENTRY(iwmmxt_task_switch)
223     mrc p15, 0, r1, c2, c0, 0
224     sub pc, lr, r1, lsr #32 @ cpwait and return
225    
226     +ENDPROC(iwmmxt_task_switch)
227     +
228     /*
229     * Remove Concan ownership of given task
230     *
231     @@ -353,6 +364,8 @@ ENTRY(iwmmxt_task_release)
232     msr cpsr_c, r2 @ restore interrupts
233     ret lr
234    
235     +ENDPROC(iwmmxt_task_release)
236     +
237     .data
238     concan_owner:
239     .word 0
240     diff --git a/arch/arm/mach-shmobile/pm-r8a7790.c b/arch/arm/mach-shmobile/pm-r8a7790.c
241     index 80e8d95e54d3..23b61f170c22 100644
242     --- a/arch/arm/mach-shmobile/pm-r8a7790.c
243     +++ b/arch/arm/mach-shmobile/pm-r8a7790.c
244     @@ -38,7 +38,7 @@ static void __init r8a7790_sysc_init(void)
245     void __iomem *base = rcar_sysc_init(0xe6180000);
246    
247     /* enable all interrupt sources, but do not use interrupt handler */
248     - iowrite32(0x0131000e, base + SYSCIER);
249     + iowrite32(0x013111ef, base + SYSCIER);
250     iowrite32(0, base + SYSCIMR);
251     }
252    
253     diff --git a/arch/arm/mach-shmobile/pm-r8a7791.c b/arch/arm/mach-shmobile/pm-r8a7791.c
254     index 25f107bb3657..f7cfb3b72574 100644
255     --- a/arch/arm/mach-shmobile/pm-r8a7791.c
256     +++ b/arch/arm/mach-shmobile/pm-r8a7791.c
257     @@ -33,7 +33,7 @@ static void __init r8a7791_sysc_init(void)
258     void __iomem *base = rcar_sysc_init(0xe6180000);
259    
260     /* enable all interrupt sources, but do not use interrupt handler */
261     - iowrite32(0x0131000e, base + SYSCIER);
262     + iowrite32(0x00111003, base + SYSCIER);
263     iowrite32(0, base + SYSCIMR);
264     }
265    
266     diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
267     index 1acf605a646d..3790a66d6898 100644
268     --- a/arch/x86/boot/compressed/eboot.c
269     +++ b/arch/x86/boot/compressed/eboot.c
270     @@ -1110,6 +1110,8 @@ struct boot_params *make_boot_params(struct efi_config *c)
271     if (!cmdline_ptr)
272     goto fail;
273     hdr->cmd_line_ptr = (unsigned long)cmdline_ptr;
274     + /* Fill in upper bits of command line address, NOP on 32 bit */
275     + boot_params->ext_cmd_line_ptr = (u64)(unsigned long)cmdline_ptr >> 32;
276    
277     hdr->ramdisk_image = 0;
278     hdr->ramdisk_size = 0;
279     diff --git a/arch/x86/include/asm/iommu_table.h b/arch/x86/include/asm/iommu_table.h
280     index f42a04735a0a..e37d6b3ad983 100644
281     --- a/arch/x86/include/asm/iommu_table.h
282     +++ b/arch/x86/include/asm/iommu_table.h
283     @@ -79,11 +79,12 @@ struct iommu_table_entry {
284     * d). Similar to the 'init', except that this gets called from pci_iommu_init
285     * where we do have a memory allocator.
286     *
287     - * The standard vs the _FINISH differs in that the _FINISH variant will
288     - * continue detecting other IOMMUs in the call list after the
289     - * the detection routine returns a positive number. The _FINISH will
290     - * stop the execution chain. Both will still call the 'init' and
291     - * 'late_init' functions if they are set.
292     + * The standard IOMMU_INIT differs from the IOMMU_INIT_FINISH variant
293     + * in that the former will continue detecting other IOMMUs in the call
294     + * list after the detection routine returns a positive number, while the
295     + * latter will stop the execution chain upon first successful detection.
296     + * Both variants will still call the 'init' and 'late_init' functions if
297     + * they are set.
298     */
299     #define IOMMU_INIT_FINISH(_detect, _depend, _init, _late_init) \
300     __IOMMU_INIT(_detect, _depend, _init, _late_init, 1)
301     diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
302     index cd6e1610e29e..a9d76e02301b 100644
303     --- a/arch/x86/include/asm/paravirt.h
304     +++ b/arch/x86/include/asm/paravirt.h
305     @@ -80,16 +80,16 @@ static inline void write_cr3(unsigned long x)
306     PVOP_VCALL1(pv_mmu_ops.write_cr3, x);
307     }
308    
309     -static inline unsigned long read_cr4(void)
310     +static inline unsigned long __read_cr4(void)
311     {
312     return PVOP_CALL0(unsigned long, pv_cpu_ops.read_cr4);
313     }
314     -static inline unsigned long read_cr4_safe(void)
315     +static inline unsigned long __read_cr4_safe(void)
316     {
317     return PVOP_CALL0(unsigned long, pv_cpu_ops.read_cr4_safe);
318     }
319    
320     -static inline void write_cr4(unsigned long x)
321     +static inline void __write_cr4(unsigned long x)
322     {
323     PVOP_VCALL1(pv_cpu_ops.write_cr4, x);
324     }
325     diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
326     index eb71ec794732..ddd8d13a010f 100644
327     --- a/arch/x86/include/asm/processor.h
328     +++ b/arch/x86/include/asm/processor.h
329     @@ -578,39 +578,6 @@ static inline void load_sp0(struct tss_struct *tss,
330     #define set_iopl_mask native_set_iopl_mask
331     #endif /* CONFIG_PARAVIRT */
332    
333     -/*
334     - * Save the cr4 feature set we're using (ie
335     - * Pentium 4MB enable and PPro Global page
336     - * enable), so that any CPU's that boot up
337     - * after us can get the correct flags.
338     - */
339     -extern unsigned long mmu_cr4_features;
340     -extern u32 *trampoline_cr4_features;
341     -
342     -static inline void set_in_cr4(unsigned long mask)
343     -{
344     - unsigned long cr4;
345     -
346     - mmu_cr4_features |= mask;
347     - if (trampoline_cr4_features)
348     - *trampoline_cr4_features = mmu_cr4_features;
349     - cr4 = read_cr4();
350     - cr4 |= mask;
351     - write_cr4(cr4);
352     -}
353     -
354     -static inline void clear_in_cr4(unsigned long mask)
355     -{
356     - unsigned long cr4;
357     -
358     - mmu_cr4_features &= ~mask;
359     - if (trampoline_cr4_features)
360     - *trampoline_cr4_features = mmu_cr4_features;
361     - cr4 = read_cr4();
362     - cr4 &= ~mask;
363     - write_cr4(cr4);
364     -}
365     -
366     typedef struct {
367     unsigned long seg;
368     } mm_segment_t;
369     diff --git a/arch/x86/include/asm/special_insns.h b/arch/x86/include/asm/special_insns.h
370     index e820c080a4e9..6a4b00fafb00 100644
371     --- a/arch/x86/include/asm/special_insns.h
372     +++ b/arch/x86/include/asm/special_insns.h
373     @@ -137,17 +137,17 @@ static inline void write_cr3(unsigned long x)
374     native_write_cr3(x);
375     }
376    
377     -static inline unsigned long read_cr4(void)
378     +static inline unsigned long __read_cr4(void)
379     {
380     return native_read_cr4();
381     }
382    
383     -static inline unsigned long read_cr4_safe(void)
384     +static inline unsigned long __read_cr4_safe(void)
385     {
386     return native_read_cr4_safe();
387     }
388    
389     -static inline void write_cr4(unsigned long x)
390     +static inline void __write_cr4(unsigned long x)
391     {
392     native_write_cr4(x);
393     }
394     diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h
395     index 04905bfc508b..cd791948b286 100644
396     --- a/arch/x86/include/asm/tlbflush.h
397     +++ b/arch/x86/include/asm/tlbflush.h
398     @@ -15,6 +15,75 @@
399     #define __flush_tlb_single(addr) __native_flush_tlb_single(addr)
400     #endif
401    
402     +struct tlb_state {
403     +#ifdef CONFIG_SMP
404     + struct mm_struct *active_mm;
405     + int state;
406     +#endif
407     +
408     + /*
409     + * Access to this CR4 shadow and to H/W CR4 is protected by
410     + * disabling interrupts when modifying either one.
411     + */
412     + unsigned long cr4;
413     +};
414     +DECLARE_PER_CPU_SHARED_ALIGNED(struct tlb_state, cpu_tlbstate);
415     +
416     +/* Initialize cr4 shadow for this CPU. */
417     +static inline void cr4_init_shadow(void)
418     +{
419     + this_cpu_write(cpu_tlbstate.cr4, __read_cr4());
420     +}
421     +
422     +/* Set in this cpu's CR4. */
423     +static inline void cr4_set_bits(unsigned long mask)
424     +{
425     + unsigned long cr4;
426     +
427     + cr4 = this_cpu_read(cpu_tlbstate.cr4);
428     + if ((cr4 | mask) != cr4) {
429     + cr4 |= mask;
430     + this_cpu_write(cpu_tlbstate.cr4, cr4);
431     + __write_cr4(cr4);
432     + }
433     +}
434     +
435     +/* Clear in this cpu's CR4. */
436     +static inline void cr4_clear_bits(unsigned long mask)
437     +{
438     + unsigned long cr4;
439     +
440     + cr4 = this_cpu_read(cpu_tlbstate.cr4);
441     + if ((cr4 & ~mask) != cr4) {
442     + cr4 &= ~mask;
443     + this_cpu_write(cpu_tlbstate.cr4, cr4);
444     + __write_cr4(cr4);
445     + }
446     +}
447     +
448     +/* Read the CR4 shadow. */
449     +static inline unsigned long cr4_read_shadow(void)
450     +{
451     + return this_cpu_read(cpu_tlbstate.cr4);
452     +}
453     +
454     +/*
455     + * Save some of cr4 feature set we're using (e.g. Pentium 4MB
456     + * enable and PPro Global page enable), so that any CPU's that boot
457     + * up after us can get the correct flags. This should only be used
458     + * during boot on the boot cpu.
459     + */
460     +extern unsigned long mmu_cr4_features;
461     +extern u32 *trampoline_cr4_features;
462     +
463     +static inline void cr4_set_bits_and_update_boot(unsigned long mask)
464     +{
465     + mmu_cr4_features |= mask;
466     + if (trampoline_cr4_features)
467     + *trampoline_cr4_features = mmu_cr4_features;
468     + cr4_set_bits(mask);
469     +}
470     +
471     static inline void __native_flush_tlb(void)
472     {
473     native_write_cr3(native_read_cr3());
474     @@ -24,7 +93,7 @@ static inline void __native_flush_tlb_global_irq_disabled(void)
475     {
476     unsigned long cr4;
477    
478     - cr4 = native_read_cr4();
479     + cr4 = this_cpu_read(cpu_tlbstate.cr4);
480     /* clear PGE */
481     native_write_cr4(cr4 & ~X86_CR4_PGE);
482     /* write old PGE again and flush TLBs */
483     @@ -184,12 +253,6 @@ void native_flush_tlb_others(const struct cpumask *cpumask,
484     #define TLBSTATE_OK 1
485     #define TLBSTATE_LAZY 2
486    
487     -struct tlb_state {
488     - struct mm_struct *active_mm;
489     - int state;
490     -};
491     -DECLARE_PER_CPU_SHARED_ALIGNED(struct tlb_state, cpu_tlbstate);
492     -
493     static inline void reset_lazy_tlbstate(void)
494     {
495     this_cpu_write(cpu_tlbstate.state, 0);
496     diff --git a/arch/x86/include/asm/virtext.h b/arch/x86/include/asm/virtext.h
497     index 5da71c27cc59..cce9ee68e335 100644
498     --- a/arch/x86/include/asm/virtext.h
499     +++ b/arch/x86/include/asm/virtext.h
500     @@ -19,6 +19,7 @@
501    
502     #include <asm/vmx.h>
503     #include <asm/svm.h>
504     +#include <asm/tlbflush.h>
505    
506     /*
507     * VMX functions:
508     @@ -40,12 +41,12 @@ static inline int cpu_has_vmx(void)
509     static inline void cpu_vmxoff(void)
510     {
511     asm volatile (ASM_VMX_VMXOFF : : : "cc");
512     - write_cr4(read_cr4() & ~X86_CR4_VMXE);
513     + cr4_clear_bits(X86_CR4_VMXE);
514     }
515    
516     static inline int cpu_vmx_enabled(void)
517     {
518     - return read_cr4() & X86_CR4_VMXE;
519     + return __read_cr4() & X86_CR4_VMXE;
520     }
521    
522     /** Disable VMX if it is enabled on the current CPU
523     diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c
524     index 31368207837c..d1daead5fcdd 100644
525     --- a/arch/x86/kernel/acpi/sleep.c
526     +++ b/arch/x86/kernel/acpi/sleep.c
527     @@ -78,7 +78,7 @@ int x86_acpi_suspend_lowlevel(void)
528    
529     header->pmode_cr0 = read_cr0();
530     if (__this_cpu_read(cpu_info.cpuid_level) >= 0) {
531     - header->pmode_cr4 = read_cr4();
532     + header->pmode_cr4 = __read_cr4();
533     header->pmode_behavior |= (1 << WAKEUP_BEHAVIOR_RESTORE_CR4);
534     }
535     if (!rdmsr_safe(MSR_IA32_MISC_ENABLE,
536     diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
537     index cfa9b5b2c27a..7bc49c3b9684 100644
538     --- a/arch/x86/kernel/cpu/common.c
539     +++ b/arch/x86/kernel/cpu/common.c
540     @@ -19,6 +19,7 @@
541     #include <asm/archrandom.h>
542     #include <asm/hypervisor.h>
543     #include <asm/processor.h>
544     +#include <asm/tlbflush.h>
545     #include <asm/debugreg.h>
546     #include <asm/sections.h>
547     #include <asm/vsyscall.h>
548     @@ -278,7 +279,7 @@ __setup("nosmep", setup_disable_smep);
549     static __always_inline void setup_smep(struct cpuinfo_x86 *c)
550     {
551     if (cpu_has(c, X86_FEATURE_SMEP))
552     - set_in_cr4(X86_CR4_SMEP);
553     + cr4_set_bits(X86_CR4_SMEP);
554     }
555    
556     static __init int setup_disable_smap(char *arg)
557     @@ -298,9 +299,9 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c)
558    
559     if (cpu_has(c, X86_FEATURE_SMAP)) {
560     #ifdef CONFIG_X86_SMAP
561     - set_in_cr4(X86_CR4_SMAP);
562     + cr4_set_bits(X86_CR4_SMAP);
563     #else
564     - clear_in_cr4(X86_CR4_SMAP);
565     + cr4_clear_bits(X86_CR4_SMAP);
566     #endif
567     }
568     }
569     @@ -1304,6 +1305,12 @@ void cpu_init(void)
570     wait_for_master_cpu(cpu);
571    
572     /*
573     + * Initialize the CR4 shadow before doing anything that could
574     + * try to read it.
575     + */
576     + cr4_init_shadow();
577     +
578     + /*
579     * Load microcode on this cpu if a valid microcode is available.
580     * This is early microcode loading procedure.
581     */
582     @@ -1322,7 +1329,7 @@ void cpu_init(void)
583    
584     pr_debug("Initializing CPU#%d\n", cpu);
585    
586     - clear_in_cr4(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE);
587     + cr4_clear_bits(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE);
588    
589     /*
590     * Initialize the per-CPU GDT with the boot GDT,
591     @@ -1403,7 +1410,7 @@ void cpu_init(void)
592     printk(KERN_INFO "Initializing CPU#%d\n", cpu);
593    
594     if (cpu_feature_enabled(X86_FEATURE_VME) || cpu_has_tsc || cpu_has_de)
595     - clear_in_cr4(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE);
596     + cr4_clear_bits(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE);
597    
598     load_current_idt();
599     switch_to_new_gdt(cpu);
600     diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
601     index b5c2276317e2..bf44e45a2a76 100644
602     --- a/arch/x86/kernel/cpu/mcheck/mce.c
603     +++ b/arch/x86/kernel/cpu/mcheck/mce.c
604     @@ -43,6 +43,7 @@
605     #include <linux/export.h>
606    
607     #include <asm/processor.h>
608     +#include <asm/tlbflush.h>
609     #include <asm/mce.h>
610     #include <asm/msr.h>
611    
612     @@ -1460,7 +1461,7 @@ static void __mcheck_cpu_init_generic(void)
613     bitmap_fill(all_banks, MAX_NR_BANKS);
614     machine_check_poll(MCP_UC | m_fl, &all_banks);
615    
616     - set_in_cr4(X86_CR4_MCE);
617     + cr4_set_bits(X86_CR4_MCE);
618    
619     rdmsrl(MSR_IA32_MCG_CAP, cap);
620     if (cap & MCG_CTL_P)
621     diff --git a/arch/x86/kernel/cpu/mcheck/p5.c b/arch/x86/kernel/cpu/mcheck/p5.c
622     index a3042989398c..30692ac88d1e 100644
623     --- a/arch/x86/kernel/cpu/mcheck/p5.c
624     +++ b/arch/x86/kernel/cpu/mcheck/p5.c
625     @@ -8,6 +8,7 @@
626     #include <linux/smp.h>
627    
628     #include <asm/processor.h>
629     +#include <asm/tlbflush.h>
630     #include <asm/mce.h>
631     #include <asm/msr.h>
632    
633     @@ -59,7 +60,7 @@ void intel_p5_mcheck_init(struct cpuinfo_x86 *c)
634     "Intel old style machine check architecture supported.\n");
635    
636     /* Enable MCE: */
637     - set_in_cr4(X86_CR4_MCE);
638     + cr4_set_bits(X86_CR4_MCE);
639     printk(KERN_INFO
640     "Intel old style machine check reporting enabled on CPU#%d.\n",
641     smp_processor_id());
642     diff --git a/arch/x86/kernel/cpu/mcheck/winchip.c b/arch/x86/kernel/cpu/mcheck/winchip.c
643     index 7dc5564d0cdf..590cc753ba8f 100644
644     --- a/arch/x86/kernel/cpu/mcheck/winchip.c
645     +++ b/arch/x86/kernel/cpu/mcheck/winchip.c
646     @@ -7,6 +7,7 @@
647     #include <linux/types.h>
648    
649     #include <asm/processor.h>
650     +#include <asm/tlbflush.h>
651     #include <asm/mce.h>
652     #include <asm/msr.h>
653    
654     @@ -31,7 +32,7 @@ void winchip_mcheck_init(struct cpuinfo_x86 *c)
655     lo &= ~(1<<4); /* Enable MCE */
656     wrmsr(MSR_IDT_FCR1, lo, hi);
657    
658     - set_in_cr4(X86_CR4_MCE);
659     + cr4_set_bits(X86_CR4_MCE);
660    
661     printk(KERN_INFO
662     "Winchip machine check reporting enabled on CPU#0.\n");
663     diff --git a/arch/x86/kernel/cpu/mtrr/cyrix.c b/arch/x86/kernel/cpu/mtrr/cyrix.c
664     index 9e451b0876b5..f8c81ba0b465 100644
665     --- a/arch/x86/kernel/cpu/mtrr/cyrix.c
666     +++ b/arch/x86/kernel/cpu/mtrr/cyrix.c
667     @@ -138,8 +138,8 @@ static void prepare_set(void)
668    
669     /* Save value of CR4 and clear Page Global Enable (bit 7) */
670     if (cpu_has_pge) {
671     - cr4 = read_cr4();
672     - write_cr4(cr4 & ~X86_CR4_PGE);
673     + cr4 = __read_cr4();
674     + __write_cr4(cr4 & ~X86_CR4_PGE);
675     }
676    
677     /*
678     @@ -171,7 +171,7 @@ static void post_set(void)
679    
680     /* Restore value of CR4 */
681     if (cpu_has_pge)
682     - write_cr4(cr4);
683     + __write_cr4(cr4);
684     }
685    
686     static void cyrix_set_arr(unsigned int reg, unsigned long base,
687     diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c
688     index 0e25a1bc5ab5..7d74f7b3c6ba 100644
689     --- a/arch/x86/kernel/cpu/mtrr/generic.c
690     +++ b/arch/x86/kernel/cpu/mtrr/generic.c
691     @@ -678,8 +678,8 @@ static void prepare_set(void) __acquires(set_atomicity_lock)
692    
693     /* Save value of CR4 and clear Page Global Enable (bit 7) */
694     if (cpu_has_pge) {
695     - cr4 = read_cr4();
696     - write_cr4(cr4 & ~X86_CR4_PGE);
697     + cr4 = __read_cr4();
698     + __write_cr4(cr4 & ~X86_CR4_PGE);
699     }
700    
701     /* Flush all TLBs via a mov %cr3, %reg; mov %reg, %cr3 */
702     @@ -708,7 +708,7 @@ static void post_set(void) __releases(set_atomicity_lock)
703    
704     /* Restore value of CR4 */
705     if (cpu_has_pge)
706     - write_cr4(cr4);
707     + __write_cr4(cr4);
708     raw_spin_unlock(&set_atomicity_lock);
709     }
710    
711     diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
712     index 143e5f5dc855..6b5acd5f4a34 100644
713     --- a/arch/x86/kernel/cpu/perf_event.c
714     +++ b/arch/x86/kernel/cpu/perf_event.c
715     @@ -31,6 +31,7 @@
716     #include <asm/nmi.h>
717     #include <asm/smp.h>
718     #include <asm/alternative.h>
719     +#include <asm/tlbflush.h>
720     #include <asm/timer.h>
721     #include <asm/desc.h>
722     #include <asm/ldt.h>
723     @@ -1328,7 +1329,7 @@ x86_pmu_notifier(struct notifier_block *self, unsigned long action, void *hcpu)
724    
725     case CPU_STARTING:
726     if (x86_pmu.attr_rdpmc)
727     - set_in_cr4(X86_CR4_PCE);
728     + cr4_set_bits(X86_CR4_PCE);
729     if (x86_pmu.cpu_starting)
730     x86_pmu.cpu_starting(cpu);
731     break;
732     @@ -1834,9 +1835,9 @@ static void change_rdpmc(void *info)
733     bool enable = !!(unsigned long)info;
734    
735     if (enable)
736     - set_in_cr4(X86_CR4_PCE);
737     + cr4_set_bits(X86_CR4_PCE);
738     else
739     - clear_in_cr4(X86_CR4_PCE);
740     + cr4_clear_bits(X86_CR4_PCE);
741     }
742    
743     static ssize_t set_attr_rdpmc(struct device *cdev,
744     diff --git a/arch/x86/kernel/head32.c b/arch/x86/kernel/head32.c
745     index d6c1b9836995..2911ef3a9f1c 100644
746     --- a/arch/x86/kernel/head32.c
747     +++ b/arch/x86/kernel/head32.c
748     @@ -31,6 +31,7 @@ static void __init i386_default_early_setup(void)
749    
750     asmlinkage __visible void __init i386_start_kernel(void)
751     {
752     + cr4_init_shadow();
753     sanitize_boot_params(&boot_params);
754    
755     /* Call the subarch specific early setup function */
756     diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
757     index eda1a865641e..3b241f0ca005 100644
758     --- a/arch/x86/kernel/head64.c
759     +++ b/arch/x86/kernel/head64.c
760     @@ -155,6 +155,8 @@ asmlinkage __visible void __init x86_64_start_kernel(char * real_mode_data)
761     (__START_KERNEL & PGDIR_MASK)));
762     BUILD_BUG_ON(__fix_to_virt(__end_of_fixed_addresses) <= MODULES_END);
763    
764     + cr4_init_shadow();
765     +
766     /* Kill off the identity-map trampoline */
767     reset_early_page_tables();
768    
769     diff --git a/arch/x86/kernel/i387.c b/arch/x86/kernel/i387.c
770     index ae0fdc86b7b6..8d6e954db2a7 100644
771     --- a/arch/x86/kernel/i387.c
772     +++ b/arch/x86/kernel/i387.c
773     @@ -13,6 +13,7 @@
774     #include <asm/sigcontext.h>
775     #include <asm/processor.h>
776     #include <asm/math_emu.h>
777     +#include <asm/tlbflush.h>
778     #include <asm/uaccess.h>
779     #include <asm/ptrace.h>
780     #include <asm/i387.h>
781     @@ -195,7 +196,7 @@ void fpu_init(void)
782     if (cpu_has_xmm)
783     cr4_mask |= X86_CR4_OSXMMEXCPT;
784     if (cr4_mask)
785     - set_in_cr4(cr4_mask);
786     + cr4_set_bits(cr4_mask);
787    
788     cr0 = read_cr0();
789     cr0 &= ~(X86_CR0_TS|X86_CR0_EM); /* clear TS and EM */
790     diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
791     index 6ad8a6396b75..a388bb883128 100644
792     --- a/arch/x86/kernel/process.c
793     +++ b/arch/x86/kernel/process.c
794     @@ -29,6 +29,7 @@
795     #include <asm/fpu-internal.h>
796     #include <asm/debugreg.h>
797     #include <asm/nmi.h>
798     +#include <asm/tlbflush.h>
799    
800     /*
801     * per-CPU TSS segments. Threads are completely 'soft' on Linux,
802     @@ -142,7 +143,7 @@ void flush_thread(void)
803    
804     static void hard_disable_TSC(void)
805     {
806     - write_cr4(read_cr4() | X86_CR4_TSD);
807     + cr4_set_bits(X86_CR4_TSD);
808     }
809    
810     void disable_TSC(void)
811     @@ -159,7 +160,7 @@ void disable_TSC(void)
812    
813     static void hard_enable_TSC(void)
814     {
815     - write_cr4(read_cr4() & ~X86_CR4_TSD);
816     + cr4_clear_bits(X86_CR4_TSD);
817     }
818    
819     static void enable_TSC(void)
820     diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
821     index 8f3ebfe710d0..603c4f99cb5a 100644
822     --- a/arch/x86/kernel/process_32.c
823     +++ b/arch/x86/kernel/process_32.c
824     @@ -101,7 +101,7 @@ void __show_regs(struct pt_regs *regs, int all)
825     cr0 = read_cr0();
826     cr2 = read_cr2();
827     cr3 = read_cr3();
828     - cr4 = read_cr4_safe();
829     + cr4 = __read_cr4_safe();
830     printk(KERN_DEFAULT "CR0: %08lx CR2: %08lx CR3: %08lx CR4: %08lx\n",
831     cr0, cr2, cr3, cr4);
832    
833     diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
834     index 5a2c02913af3..67fcc43577d2 100644
835     --- a/arch/x86/kernel/process_64.c
836     +++ b/arch/x86/kernel/process_64.c
837     @@ -93,7 +93,7 @@ void __show_regs(struct pt_regs *regs, int all)
838     cr0 = read_cr0();
839     cr2 = read_cr2();
840     cr3 = read_cr3();
841     - cr4 = read_cr4();
842     + cr4 = __read_cr4();
843    
844     printk(KERN_DEFAULT "FS: %016lx(%04x) GS:%016lx(%04x) knlGS:%016lx\n",
845     fs, fsindex, gs, gsindex, shadowgs);
846     diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
847     index ab08aa2276fb..87b6496a32f1 100644
848     --- a/arch/x86/kernel/setup.c
849     +++ b/arch/x86/kernel/setup.c
850     @@ -1176,7 +1176,7 @@ void __init setup_arch(char **cmdline_p)
851    
852     if (boot_cpu_data.cpuid_level >= 0) {
853     /* A CPU has %cr4 if and only if it has CPUID */
854     - mmu_cr4_features = read_cr4();
855     + mmu_cr4_features = __read_cr4();
856     if (trampoline_cr4_features)
857     *trampoline_cr4_features = mmu_cr4_features;
858     }
859     diff --git a/arch/x86/kernel/xsave.c b/arch/x86/kernel/xsave.c
860     index 8be1e1711203..cdc6cf903078 100644
861     --- a/arch/x86/kernel/xsave.c
862     +++ b/arch/x86/kernel/xsave.c
863     @@ -12,6 +12,7 @@
864     #include <asm/i387.h>
865     #include <asm/fpu-internal.h>
866     #include <asm/sigframe.h>
867     +#include <asm/tlbflush.h>
868     #include <asm/xcr.h>
869    
870     /*
871     @@ -454,7 +455,7 @@ static void prepare_fx_sw_frame(void)
872     */
873     static inline void xstate_enable(void)
874     {
875     - set_in_cr4(X86_CR4_OSXSAVE);
876     + cr4_set_bits(X86_CR4_OSXSAVE);
877     xsetbv(XCR_XFEATURE_ENABLED_MASK, pcntxt_mask);
878     }
879    
880     diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
881     index f7eaee1cbc54..170e7d49ba65 100644
882     --- a/arch/x86/kvm/svm.c
883     +++ b/arch/x86/kvm/svm.c
884     @@ -1581,7 +1581,7 @@ static void svm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0)
885    
886     static int svm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)
887     {
888     - unsigned long host_cr4_mce = read_cr4() & X86_CR4_MCE;
889     + unsigned long host_cr4_mce = cr4_read_shadow() & X86_CR4_MCE;
890     unsigned long old_cr4 = to_svm(vcpu)->vmcb->save.cr4;
891    
892     if (cr4 & X86_CR4_VMXE)
893     diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
894     index 54bda28e6a12..0d7f1dcfcdac 100644
895     --- a/arch/x86/kvm/vmx.c
896     +++ b/arch/x86/kvm/vmx.c
897     @@ -2744,7 +2744,7 @@ static int hardware_enable(void)
898     u64 phys_addr = __pa(per_cpu(vmxarea, cpu));
899     u64 old, test_bits;
900    
901     - if (read_cr4() & X86_CR4_VMXE)
902     + if (cr4_read_shadow() & X86_CR4_VMXE)
903     return -EBUSY;
904    
905     INIT_LIST_HEAD(&per_cpu(loaded_vmcss_on_cpu, cpu));
906     @@ -2771,7 +2771,7 @@ static int hardware_enable(void)
907     /* enable and lock */
908     wrmsrl(MSR_IA32_FEATURE_CONTROL, old | test_bits);
909     }
910     - write_cr4(read_cr4() | X86_CR4_VMXE); /* FIXME: not cpu hotplug safe */
911     + cr4_set_bits(X86_CR4_VMXE);
912    
913     if (vmm_exclusive) {
914     kvm_cpu_vmxon(phys_addr);
915     @@ -2808,7 +2808,7 @@ static void hardware_disable(void)
916     vmclear_local_loaded_vmcss();
917     kvm_cpu_vmxoff();
918     }
919     - write_cr4(read_cr4() & ~X86_CR4_VMXE);
920     + cr4_clear_bits(X86_CR4_VMXE);
921     }
922    
923     static __init int adjust_vmx_controls(u32 ctl_min, u32 ctl_opt,
924     @@ -3553,8 +3553,16 @@ static void vmx_set_cr3(struct kvm_vcpu *vcpu, unsigned long cr3)
925    
926     static int vmx_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)
927     {
928     - unsigned long hw_cr4 = cr4 | (to_vmx(vcpu)->rmode.vm86_active ?
929     - KVM_RMODE_VM_CR4_ALWAYS_ON : KVM_PMODE_VM_CR4_ALWAYS_ON);
930     + /*
931     + * Pass through host's Machine Check Enable value to hw_cr4, which
932     + * is in force while we are in guest mode. Do not let guests control
933     + * this bit, even if host CR4.MCE == 0.
934     + */
935     + unsigned long hw_cr4 =
936     + (cr4_read_shadow() & X86_CR4_MCE) |
937     + (cr4 & ~X86_CR4_MCE) |
938     + (to_vmx(vcpu)->rmode.vm86_active ?
939     + KVM_RMODE_VM_CR4_ALWAYS_ON : KVM_PMODE_VM_CR4_ALWAYS_ON);
940    
941     if (cr4 & X86_CR4_VMXE) {
942     /*
943     @@ -4280,7 +4288,7 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
944     vmcs_writel(HOST_CR3, read_cr3()); /* 22.2.3 FIXME: shadow tables */
945    
946     /* Save the most likely value for this task's CR4 in the VMCS. */
947     - cr4 = read_cr4();
948     + cr4 = cr4_read_shadow();
949     vmcs_writel(HOST_CR4, cr4); /* 22.2.3, 22.2.5 */
950     vmx->host_state.vmcs_host_cr4 = cr4;
951    
952     @@ -7563,7 +7571,7 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
953     if (test_bit(VCPU_REGS_RIP, (unsigned long *)&vcpu->arch.regs_dirty))
954     vmcs_writel(GUEST_RIP, vcpu->arch.regs[VCPU_REGS_RIP]);
955    
956     - cr4 = read_cr4();
957     + cr4 = cr4_read_shadow();
958     if (unlikely(cr4 != vmx->host_state.vmcs_host_cr4)) {
959     vmcs_writel(HOST_CR4, cr4);
960     vmx->host_state.vmcs_host_cr4 = cr4;
961     diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
962     index 4d8ee827cb14..6fa245ae52c5 100644
963     --- a/arch/x86/mm/fault.c
964     +++ b/arch/x86/mm/fault.c
965     @@ -600,7 +600,7 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code,
966     printk(nx_warning, from_kuid(&init_user_ns, current_uid()));
967     if (pte && pte_present(*pte) && pte_exec(*pte) &&
968     (pgd_flags(*pgd) & _PAGE_USER) &&
969     - (read_cr4() & X86_CR4_SMEP))
970     + (__read_cr4() & X86_CR4_SMEP))
971     printk(smep_warning, from_kuid(&init_user_ns, current_uid()));
972     }
973    
974     diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
975     index 66dba36f2343..0a59a63bcdad 100644
976     --- a/arch/x86/mm/init.c
977     +++ b/arch/x86/mm/init.c
978     @@ -144,11 +144,11 @@ static void __init probe_page_size_mask(void)
979    
980     /* Enable PSE if available */
981     if (cpu_has_pse)
982     - set_in_cr4(X86_CR4_PSE);
983     + cr4_set_bits_and_update_boot(X86_CR4_PSE);
984    
985     /* Enable PGE if available */
986     if (cpu_has_pge) {
987     - set_in_cr4(X86_CR4_PGE);
988     + cr4_set_bits_and_update_boot(X86_CR4_PGE);
989     __supported_pte_mask |= _PAGE_GLOBAL;
990     }
991     }
992     @@ -687,3 +687,11 @@ void __init zone_sizes_init(void)
993     free_area_init_nodes(max_zone_pfns);
994     }
995    
996     +DEFINE_PER_CPU_SHARED_ALIGNED(struct tlb_state, cpu_tlbstate) = {
997     +#ifdef CONFIG_SMP
998     + .active_mm = &init_mm,
999     + .state = 0,
1000     +#endif
1001     + .cr4 = ~0UL, /* fail hard if we screw up cr4 shadow initialization */
1002     +};
1003     +EXPORT_SYMBOL_GPL(cpu_tlbstate);
1004     diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
1005     index ee61c36d64f8..3250f2371aea 100644
1006     --- a/arch/x86/mm/tlb.c
1007     +++ b/arch/x86/mm/tlb.c
1008     @@ -14,9 +14,6 @@
1009     #include <asm/uv/uv.h>
1010     #include <linux/debugfs.h>
1011    
1012     -DEFINE_PER_CPU_SHARED_ALIGNED(struct tlb_state, cpu_tlbstate)
1013     - = { &init_mm, 0, };
1014     -
1015     /*
1016     * Smarter SMP flushing macros.
1017     * c/o Linus Torvalds.
1018     diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
1019     index 3f627345d51c..82003a36ad96 100644
1020     --- a/arch/x86/net/bpf_jit_comp.c
1021     +++ b/arch/x86/net/bpf_jit_comp.c
1022     @@ -558,6 +558,13 @@ static int do_jit(struct bpf_prog *bpf_prog, int *addrs, u8 *image,
1023     if (is_ereg(dst_reg))
1024     EMIT1(0x41);
1025     EMIT3(0xC1, add_1reg(0xC8, dst_reg), 8);
1026     +
1027     + /* emit 'movzwl eax, ax' */
1028     + if (is_ereg(dst_reg))
1029     + EMIT3(0x45, 0x0F, 0xB7);
1030     + else
1031     + EMIT2(0x0F, 0xB7);
1032     + EMIT1(add_2reg(0xC0, dst_reg, dst_reg));
1033     break;
1034     case 32:
1035     /* emit 'bswap eax' to swap lower 4 bytes */
1036     @@ -576,6 +583,27 @@ static int do_jit(struct bpf_prog *bpf_prog, int *addrs, u8 *image,
1037     break;
1038    
1039     case BPF_ALU | BPF_END | BPF_FROM_LE:
1040     + switch (imm32) {
1041     + case 16:
1042     + /* emit 'movzwl eax, ax' to zero extend 16-bit
1043     + * into 64 bit
1044     + */
1045     + if (is_ereg(dst_reg))
1046     + EMIT3(0x45, 0x0F, 0xB7);
1047     + else
1048     + EMIT2(0x0F, 0xB7);
1049     + EMIT1(add_2reg(0xC0, dst_reg, dst_reg));
1050     + break;
1051     + case 32:
1052     + /* emit 'mov eax, eax' to clear upper 32-bits */
1053     + if (is_ereg(dst_reg))
1054     + EMIT1(0x45);
1055     + EMIT2(0x89, add_2reg(0xC0, dst_reg, dst_reg));
1056     + break;
1057     + case 64:
1058     + /* nop */
1059     + break;
1060     + }
1061     break;
1062    
1063     /* ST: *(u8*)(dst_reg + off) = imm */
1064     @@ -936,7 +964,12 @@ void bpf_int_jit_compile(struct bpf_prog *prog)
1065     }
1066     ctx.cleanup_addr = proglen;
1067    
1068     - for (pass = 0; pass < 10; pass++) {
1069     + /* JITed image shrinks with every pass and the loop iterates
1070     + * until the image stops shrinking. Very large bpf programs
1071     + * may converge on the last pass. In such case do one more
1072     + * pass to emit the final image
1073     + */
1074     + for (pass = 0; pass < 10 || image; pass++) {
1075     proglen = do_jit(prog, addrs, image, oldproglen, &ctx);
1076     if (proglen <= 0) {
1077     image = NULL;
1078     diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c
1079     index 6ec7910f59bf..3e32ed5648a0 100644
1080     --- a/arch/x86/power/cpu.c
1081     +++ b/arch/x86/power/cpu.c
1082     @@ -105,11 +105,8 @@ static void __save_processor_state(struct saved_context *ctxt)
1083     ctxt->cr0 = read_cr0();
1084     ctxt->cr2 = read_cr2();
1085     ctxt->cr3 = read_cr3();
1086     -#ifdef CONFIG_X86_32
1087     - ctxt->cr4 = read_cr4_safe();
1088     -#else
1089     -/* CONFIG_X86_64 */
1090     - ctxt->cr4 = read_cr4();
1091     + ctxt->cr4 = __read_cr4_safe();
1092     +#ifdef CONFIG_X86_64
1093     ctxt->cr8 = read_cr8();
1094     #endif
1095     ctxt->misc_enable_saved = !rdmsrl_safe(MSR_IA32_MISC_ENABLE,
1096     @@ -175,12 +172,12 @@ static void notrace __restore_processor_state(struct saved_context *ctxt)
1097     /* cr4 was introduced in the Pentium CPU */
1098     #ifdef CONFIG_X86_32
1099     if (ctxt->cr4)
1100     - write_cr4(ctxt->cr4);
1101     + __write_cr4(ctxt->cr4);
1102     #else
1103     /* CONFIG X86_64 */
1104     wrmsrl(MSR_EFER, ctxt->efer);
1105     write_cr8(ctxt->cr8);
1106     - write_cr4(ctxt->cr4);
1107     + __write_cr4(ctxt->cr4);
1108     #endif
1109     write_cr3(ctxt->cr3);
1110     write_cr2(ctxt->cr2);
1111     diff --git a/arch/x86/realmode/init.c b/arch/x86/realmode/init.c
1112     index bad628a620c4..0b7a63d98440 100644
1113     --- a/arch/x86/realmode/init.c
1114     +++ b/arch/x86/realmode/init.c
1115     @@ -81,7 +81,7 @@ void __init setup_real_mode(void)
1116    
1117     trampoline_header->start = (u64) secondary_startup_64;
1118     trampoline_cr4_features = &trampoline_header->cr4;
1119     - *trampoline_cr4_features = read_cr4();
1120     + *trampoline_cr4_features = __read_cr4();
1121    
1122     trampoline_pgd = (u64 *) __va(real_mode_header->trampoline_pgd);
1123     trampoline_pgd[0] = init_level4_pgt[pgd_index(__PAGE_OFFSET)].pgd;
1124     diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
1125     index fac5e4f9607c..7d67146c3f87 100644
1126     --- a/arch/x86/xen/enlighten.c
1127     +++ b/arch/x86/xen/enlighten.c
1128     @@ -1483,10 +1483,10 @@ static void xen_pvh_set_cr_flags(int cpu)
1129     * set them here. For all, OSFXSR OSXMMEXCPT are set in fpu_init.
1130     */
1131     if (cpu_has_pse)
1132     - set_in_cr4(X86_CR4_PSE);
1133     + cr4_set_bits_and_update_boot(X86_CR4_PSE);
1134    
1135     if (cpu_has_pge)
1136     - set_in_cr4(X86_CR4_PGE);
1137     + cr4_set_bits_and_update_boot(X86_CR4_PGE);
1138     }
1139    
1140     /*
1141     diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig
1142     index 73d328f480e5..e28ef29b0b16 100644
1143     --- a/arch/xtensa/Kconfig
1144     +++ b/arch/xtensa/Kconfig
1145     @@ -436,6 +436,36 @@ config XTFPGA_LCD_8BIT_ACCESS
1146     only be used with 8-bit interface. Please consult prototyping user
1147     guide for your board for the correct interface width.
1148    
1149     +config XTFPGA_LCD
1150     + bool "Enable XTFPGA LCD driver"
1151     + depends on XTENSA_PLATFORM_XTFPGA
1152     + default n
1153     + help
1154     + There's a 2x16 LCD on most of XTFPGA boards, kernel may output
1155     + progress messages there during bootup/shutdown. It may be useful
1156     + during board bringup.
1157     +
1158     + If unsure, say N.
1159     +
1160     +config XTFPGA_LCD_BASE_ADDR
1161     + hex "XTFPGA LCD base address"
1162     + depends on XTFPGA_LCD
1163     + default "0x0d0c0000"
1164     + help
1165     + Base address of the LCD controller inside KIO region.
1166     + Different boards from XTFPGA family have LCD controller at different
1167     + addresses. Please consult prototyping user guide for your board for
1168     + the correct address. Wrong address here may lead to hardware lockup.
1169     +
1170     +config XTFPGA_LCD_8BIT_ACCESS
1171     + bool "Use 8-bit access to XTFPGA LCD"
1172     + depends on XTFPGA_LCD
1173     + default n
1174     + help
1175     + LCD may be connected with 4- or 8-bit interface, 8-bit access may
1176     + only be used with 8-bit interface. Please consult prototyping user
1177     + guide for your board for the correct interface width.
1178     +
1179     endmenu
1180    
1181     menu "Executable file formats"
1182     diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
1183     index c3b2fcb729f3..6d11522f0e48 100644
1184     --- a/drivers/acpi/Makefile
1185     +++ b/drivers/acpi/Makefile
1186     @@ -47,6 +47,7 @@ acpi-y += int340x_thermal.o
1187     acpi-y += power.o
1188     acpi-y += event.o
1189     acpi-y += sysfs.o
1190     +acpi-y += property.o
1191     acpi-$(CONFIG_X86) += acpi_cmos_rtc.o
1192     acpi-$(CONFIG_DEBUG_FS) += debugfs.o
1193     acpi-$(CONFIG_ACPI_NUMA) += numa.o
1194     diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h
1195     index 447f6d679b29..163e82f536fa 100644
1196     --- a/drivers/acpi/internal.h
1197     +++ b/drivers/acpi/internal.h
1198     @@ -173,4 +173,10 @@ static inline void suspend_nvs_restore(void) {}
1199     bool acpi_osi_is_win8(void);
1200     #endif
1201    
1202     +/*--------------------------------------------------------------------------
1203     + Device properties
1204     + -------------------------------------------------------------------------- */
1205     +void acpi_init_properties(struct acpi_device *adev);
1206     +void acpi_free_properties(struct acpi_device *adev);
1207     +
1208     #endif /* _ACPI_INTERNAL_H_ */
1209     diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
1210     new file mode 100644
1211     index 000000000000..2541b1fd1fa5
1212     --- /dev/null
1213     +++ b/drivers/acpi/property.c
1214     @@ -0,0 +1,542 @@
1215     +/*
1216     + * ACPI device specific properties support.
1217     + *
1218     + * Copyright (C) 2014, Intel Corporation
1219     + * All rights reserved.
1220     + *
1221     + * Authors: Mika Westerberg <mika.westerberg@linux.intel.com>
1222     + * Darren Hart <dvhart@linux.intel.com>
1223     + * Rafael J. Wysocki <rafael.j.wysocki@intel.com>
1224     + *
1225     + * This program is free software; you can redistribute it and/or modify
1226     + * it under the terms of the GNU General Public License version 2 as
1227     + * published by the Free Software Foundation.
1228     + */
1229     +
1230     +#include <linux/acpi.h>
1231     +#include <linux/device.h>
1232     +#include <linux/export.h>
1233     +
1234     +#include "internal.h"
1235     +
1236     +/* ACPI _DSD device properties UUID: daffd814-6eba-4d8c-8a91-bc9bbf4aa301 */
1237     +static const u8 prp_uuid[16] = {
1238     + 0x14, 0xd8, 0xff, 0xda, 0xba, 0x6e, 0x8c, 0x4d,
1239     + 0x8a, 0x91, 0xbc, 0x9b, 0xbf, 0x4a, 0xa3, 0x01
1240     +};
1241     +
1242     +static bool acpi_property_value_ok(const union acpi_object *value)
1243     +{
1244     + int j;
1245     +
1246     + /*
1247     + * The value must be an integer, a string, a reference, or a package
1248     + * whose every element must be an integer, a string, or a reference.
1249     + */
1250     + switch (value->type) {
1251     + case ACPI_TYPE_INTEGER:
1252     + case ACPI_TYPE_STRING:
1253     + case ACPI_TYPE_LOCAL_REFERENCE:
1254     + return true;
1255     +
1256     + case ACPI_TYPE_PACKAGE:
1257     + for (j = 0; j < value->package.count; j++)
1258     + switch (value->package.elements[j].type) {
1259     + case ACPI_TYPE_INTEGER:
1260     + case ACPI_TYPE_STRING:
1261     + case ACPI_TYPE_LOCAL_REFERENCE:
1262     + continue;
1263     +
1264     + default:
1265     + return false;
1266     + }
1267     +
1268     + return true;
1269     + }
1270     + return false;
1271     +}
1272     +
1273     +static bool acpi_properties_format_valid(const union acpi_object *properties)
1274     +{
1275     + int i;
1276     +
1277     + for (i = 0; i < properties->package.count; i++) {
1278     + const union acpi_object *property;
1279     +
1280     + property = &properties->package.elements[i];
1281     + /*
1282     + * Only two elements allowed, the first one must be a string and
1283     + * the second one has to satisfy certain conditions.
1284     + */
1285     + if (property->package.count != 2
1286     + || property->package.elements[0].type != ACPI_TYPE_STRING
1287     + || !acpi_property_value_ok(&property->package.elements[1]))
1288     + return false;
1289     + }
1290     + return true;
1291     +}
1292     +
1293     +void acpi_init_properties(struct acpi_device *adev)
1294     +{
1295     + struct acpi_buffer buf = { ACPI_ALLOCATE_BUFFER };
1296     + const union acpi_object *desc;
1297     + acpi_status status;
1298     + int i;
1299     +
1300     + status = acpi_evaluate_object_typed(adev->handle, "_DSD", NULL, &buf,
1301     + ACPI_TYPE_PACKAGE);
1302     + if (ACPI_FAILURE(status))
1303     + return;
1304     +
1305     + desc = buf.pointer;
1306     + if (desc->package.count % 2)
1307     + goto fail;
1308     +
1309     + /* Look for the device properties UUID. */
1310     + for (i = 0; i < desc->package.count; i += 2) {
1311     + const union acpi_object *uuid, *properties;
1312     +
1313     + uuid = &desc->package.elements[i];
1314     + properties = &desc->package.elements[i + 1];
1315     +
1316     + /*
1317     + * The first element must be a UUID and the second one must be
1318     + * a package.
1319     + */
1320     + if (uuid->type != ACPI_TYPE_BUFFER || uuid->buffer.length != 16
1321     + || properties->type != ACPI_TYPE_PACKAGE)
1322     + break;
1323     +
1324     + if (memcmp(uuid->buffer.pointer, prp_uuid, sizeof(prp_uuid)))
1325     + continue;
1326     +
1327     + /*
1328     + * We found the matching UUID. Now validate the format of the
1329     + * package immediately following it.
1330     + */
1331     + if (!acpi_properties_format_valid(properties))
1332     + break;
1333     +
1334     + adev->data.pointer = buf.pointer;
1335     + adev->data.properties = properties;
1336     + return;
1337     + }
1338     +
1339     + fail:
1340     + dev_warn(&adev->dev, "Returned _DSD data is not valid, skipping\n");
1341     + ACPI_FREE(buf.pointer);
1342     +}
1343     +
1344     +void acpi_free_properties(struct acpi_device *adev)
1345     +{
1346     + ACPI_FREE((void *)adev->data.pointer);
1347     + adev->data.pointer = NULL;
1348     + adev->data.properties = NULL;
1349     +}
1350     +
1351     +/**
1352     + * acpi_dev_get_property - return an ACPI property with given name
1353     + * @adev: ACPI device to get property
1354     + * @name: Name of the property
1355     + * @type: Expected property type
1356     + * @obj: Location to store the property value (if not %NULL)
1357     + *
1358     + * Look up a property with @name and store a pointer to the resulting ACPI
1359     + * object at the location pointed to by @obj if found.
1360     + *
1361     + * Callers must not attempt to free the returned objects. These objects will be
1362     + * freed by the ACPI core automatically during the removal of @adev.
1363     + *
1364     + * Return: %0 if property with @name has been found (success),
1365     + * %-EINVAL if the arguments are invalid,
1366     + * %-ENODATA if the property doesn't exist,
1367     + * %-EPROTO if the property value type doesn't match @type.
1368     + */
1369     +int acpi_dev_get_property(struct acpi_device *adev, const char *name,
1370     + acpi_object_type type, const union acpi_object **obj)
1371     +{
1372     + const union acpi_object *properties;
1373     + int i;
1374     +
1375     + if (!adev || !name)
1376     + return -EINVAL;
1377     +
1378     + if (!adev->data.pointer || !adev->data.properties)
1379     + return -ENODATA;
1380     +
1381     + properties = adev->data.properties;
1382     + for (i = 0; i < properties->package.count; i++) {
1383     + const union acpi_object *propname, *propvalue;
1384     + const union acpi_object *property;
1385     +
1386     + property = &properties->package.elements[i];
1387     +
1388     + propname = &property->package.elements[0];
1389     + propvalue = &property->package.elements[1];
1390     +
1391     + if (!strcmp(name, propname->string.pointer)) {
1392     + if (type != ACPI_TYPE_ANY && propvalue->type != type)
1393     + return -EPROTO;
1394     + else if (obj)
1395     + *obj = propvalue;
1396     +
1397     + return 0;
1398     + }
1399     + }
1400     + return -ENODATA;
1401     +}
1402     +EXPORT_SYMBOL_GPL(acpi_dev_get_property);
1403     +
1404     +/**
1405     + * acpi_dev_get_property_array - return an ACPI array property with given name
1406     + * @adev: ACPI device to get property
1407     + * @name: Name of the property
1408     + * @type: Expected type of array elements
1409     + * @obj: Location to store a pointer to the property value (if not NULL)
1410     + *
1411     + * Look up an array property with @name and store a pointer to the resulting
1412     + * ACPI object at the location pointed to by @obj if found.
1413     + *
1414     + * Callers must not attempt to free the returned objects. Those objects will be
1415     + * freed by the ACPI core automatically during the removal of @adev.
1416     + *
1417     + * Return: %0 if array property (package) with @name has been found (success),
1418     + * %-EINVAL if the arguments are invalid,
1419     + * %-ENODATA if the property doesn't exist,
1420     + * %-EPROTO if the property is not a package or the type of its elements
1421     + * doesn't match @type.
1422     + */
1423     +int acpi_dev_get_property_array(struct acpi_device *adev, const char *name,
1424     + acpi_object_type type,
1425     + const union acpi_object **obj)
1426     +{
1427     + const union acpi_object *prop;
1428     + int ret, i;
1429     +
1430     + ret = acpi_dev_get_property(adev, name, ACPI_TYPE_PACKAGE, &prop);
1431     + if (ret)
1432     + return ret;
1433     +
1434     + if (type != ACPI_TYPE_ANY) {
1435     + /* Check that all elements are of correct type. */
1436     + for (i = 0; i < prop->package.count; i++)
1437     + if (prop->package.elements[i].type != type)
1438     + return -EPROTO;
1439     + }
1440     + if (obj)
1441     + *obj = prop;
1442     +
1443     + return 0;
1444     +}
1445     +EXPORT_SYMBOL_GPL(acpi_dev_get_property_array);
1446     +
1447     +/**
1448     + * acpi_dev_get_property_reference - returns handle to the referenced object
1449     + * @adev: ACPI device to get property
1450     + * @name: Name of the property
1451     + * @size_prop: Name of the "size" property in referenced object
1452     + * @index: Index of the reference to return
1453     + * @args: Location to store the returned reference with optional arguments
1454     + *
1455     + * Find property with @name, verifify that it is a package containing at least
1456     + * one object reference and if so, store the ACPI device object pointer to the
1457     + * target object in @args->adev.
1458     + *
1459     + * If the reference includes arguments (@size_prop is not %NULL) follow the
1460     + * reference and check whether or not there is an integer property @size_prop
1461     + * under the target object and if so, whether or not its value matches the
1462     + * number of arguments that follow the reference. If there's more than one
1463     + * reference in the property value package, @index is used to select the one to
1464     + * return.
1465     + *
1466     + * Return: %0 on success, negative error code on failure.
1467     + */
1468     +int acpi_dev_get_property_reference(struct acpi_device *adev, const char *name,
1469     + const char *size_prop, size_t index,
1470     + struct acpi_reference_args *args)
1471     +{
1472     + const union acpi_object *element, *end;
1473     + const union acpi_object *obj;
1474     + struct acpi_device *device;
1475     + int ret, idx = 0;
1476     +
1477     + ret = acpi_dev_get_property(adev, name, ACPI_TYPE_ANY, &obj);
1478     + if (ret)
1479     + return ret;
1480     +
1481     + /*
1482     + * The simplest case is when the value is a single reference. Just
1483     + * return that reference then.
1484     + */
1485     + if (obj->type == ACPI_TYPE_LOCAL_REFERENCE) {
1486     + if (size_prop || index)
1487     + return -EINVAL;
1488     +
1489     + ret = acpi_bus_get_device(obj->reference.handle, &device);
1490     + if (ret)
1491     + return ret;
1492     +
1493     + args->adev = device;
1494     + args->nargs = 0;
1495     + return 0;
1496     + }
1497     +
1498     + /*
1499     + * If it is not a single reference, then it is a package of
1500     + * references followed by number of ints as follows:
1501     + *
1502     + * Package () { REF, INT, REF, INT, INT }
1503     + *
1504     + * The index argument is then used to determine which reference
1505     + * the caller wants (along with the arguments).
1506     + */
1507     + if (obj->type != ACPI_TYPE_PACKAGE || index >= obj->package.count)
1508     + return -EPROTO;
1509     +
1510     + element = obj->package.elements;
1511     + end = element + obj->package.count;
1512     +
1513     + while (element < end) {
1514     + u32 nargs, i;
1515     +
1516     + if (element->type != ACPI_TYPE_LOCAL_REFERENCE)
1517     + return -EPROTO;
1518     +
1519     + ret = acpi_bus_get_device(element->reference.handle, &device);
1520     + if (ret)
1521     + return -ENODEV;
1522     +
1523     + element++;
1524     + nargs = 0;
1525     +
1526     + if (size_prop) {
1527     + const union acpi_object *prop;
1528     +
1529     + /*
1530     + * Find out how many arguments the refenced object
1531     + * expects by reading its size_prop property.
1532     + */
1533     + ret = acpi_dev_get_property(device, size_prop,
1534     + ACPI_TYPE_INTEGER, &prop);
1535     + if (ret)
1536     + return ret;
1537     +
1538     + nargs = prop->integer.value;
1539     + if (nargs > MAX_ACPI_REFERENCE_ARGS
1540     + || element + nargs > end)
1541     + return -EPROTO;
1542     +
1543     + /*
1544     + * Skip to the start of the arguments and verify
1545     + * that they all are in fact integers.
1546     + */
1547     + for (i = 0; i < nargs; i++)
1548     + if (element[i].type != ACPI_TYPE_INTEGER)
1549     + return -EPROTO;
1550     + } else {
1551     + /* assume following integer elements are all args */
1552     + for (i = 0; element + i < end; i++) {
1553     + int type = element[i].type;
1554     +
1555     + if (type == ACPI_TYPE_INTEGER)
1556     + nargs++;
1557     + else if (type == ACPI_TYPE_LOCAL_REFERENCE)
1558     + break;
1559     + else
1560     + return -EPROTO;
1561     + }
1562     + }
1563     +
1564     + if (idx++ == index) {
1565     + args->adev = device;
1566     + args->nargs = nargs;
1567     + for (i = 0; i < nargs; i++)
1568     + args->args[i] = element[i].integer.value;
1569     +
1570     + return 0;
1571     + }
1572     +
1573     + element += nargs;
1574     + }
1575     +
1576     + return -EPROTO;
1577     +}
1578     +EXPORT_SYMBOL_GPL(acpi_dev_get_property_reference);
1579     +
1580     +int acpi_dev_prop_get(struct acpi_device *adev, const char *propname,
1581     + void **valptr)
1582     +{
1583     + return acpi_dev_get_property(adev, propname, ACPI_TYPE_ANY,
1584     + (const union acpi_object **)valptr);
1585     +}
1586     +
1587     +int acpi_dev_prop_read_single(struct acpi_device *adev, const char *propname,
1588     + enum dev_prop_type proptype, void *val)
1589     +{
1590     + const union acpi_object *obj;
1591     + int ret;
1592     +
1593     + if (!val)
1594     + return -EINVAL;
1595     +
1596     + if (proptype >= DEV_PROP_U8 && proptype <= DEV_PROP_U64) {
1597     + ret = acpi_dev_get_property(adev, propname, ACPI_TYPE_INTEGER, &obj);
1598     + if (ret)
1599     + return ret;
1600     +
1601     + switch (proptype) {
1602     + case DEV_PROP_U8:
1603     + if (obj->integer.value > U8_MAX)
1604     + return -EOVERFLOW;
1605     + *(u8 *)val = obj->integer.value;
1606     + break;
1607     + case DEV_PROP_U16:
1608     + if (obj->integer.value > U16_MAX)
1609     + return -EOVERFLOW;
1610     + *(u16 *)val = obj->integer.value;
1611     + break;
1612     + case DEV_PROP_U32:
1613     + if (obj->integer.value > U32_MAX)
1614     + return -EOVERFLOW;
1615     + *(u32 *)val = obj->integer.value;
1616     + break;
1617     + default:
1618     + *(u64 *)val = obj->integer.value;
1619     + break;
1620     + }
1621     + } else if (proptype == DEV_PROP_STRING) {
1622     + ret = acpi_dev_get_property(adev, propname, ACPI_TYPE_STRING, &obj);
1623     + if (ret)
1624     + return ret;
1625     +
1626     + *(char **)val = obj->string.pointer;
1627     + } else {
1628     + ret = -EINVAL;
1629     + }
1630     + return ret;
1631     +}
1632     +
1633     +static int acpi_copy_property_array_u8(const union acpi_object *items, u8 *val,
1634     + size_t nval)
1635     +{
1636     + int i;
1637     +
1638     + for (i = 0; i < nval; i++) {
1639     + if (items[i].type != ACPI_TYPE_INTEGER)
1640     + return -EPROTO;
1641     + if (items[i].integer.value > U8_MAX)
1642     + return -EOVERFLOW;
1643     +
1644     + val[i] = items[i].integer.value;
1645     + }
1646     + return 0;
1647     +}
1648     +
1649     +static int acpi_copy_property_array_u16(const union acpi_object *items,
1650     + u16 *val, size_t nval)
1651     +{
1652     + int i;
1653     +
1654     + for (i = 0; i < nval; i++) {
1655     + if (items[i].type != ACPI_TYPE_INTEGER)
1656     + return -EPROTO;
1657     + if (items[i].integer.value > U16_MAX)
1658     + return -EOVERFLOW;
1659     +
1660     + val[i] = items[i].integer.value;
1661     + }
1662     + return 0;
1663     +}
1664     +
1665     +static int acpi_copy_property_array_u32(const union acpi_object *items,
1666     + u32 *val, size_t nval)
1667     +{
1668     + int i;
1669     +
1670     + for (i = 0; i < nval; i++) {
1671     + if (items[i].type != ACPI_TYPE_INTEGER)
1672     + return -EPROTO;
1673     + if (items[i].integer.value > U32_MAX)
1674     + return -EOVERFLOW;
1675     +
1676     + val[i] = items[i].integer.value;
1677     + }
1678     + return 0;
1679     +}
1680     +
1681     +static int acpi_copy_property_array_u64(const union acpi_object *items,
1682     + u64 *val, size_t nval)
1683     +{
1684     + int i;
1685     +
1686     + for (i = 0; i < nval; i++) {
1687     + if (items[i].type != ACPI_TYPE_INTEGER)
1688     + return -EPROTO;
1689     +
1690     + val[i] = items[i].integer.value;
1691     + }
1692     + return 0;
1693     +}
1694     +
1695     +static int acpi_copy_property_array_string(const union acpi_object *items,
1696     + char **val, size_t nval)
1697     +{
1698     + int i;
1699     +
1700     + for (i = 0; i < nval; i++) {
1701     + if (items[i].type != ACPI_TYPE_STRING)
1702     + return -EPROTO;
1703     +
1704     + val[i] = items[i].string.pointer;
1705     + }
1706     + return 0;
1707     +}
1708     +
1709     +int acpi_dev_prop_read(struct acpi_device *adev, const char *propname,
1710     + enum dev_prop_type proptype, void *val, size_t nval)
1711     +{
1712     + const union acpi_object *obj;
1713     + const union acpi_object *items;
1714     + int ret;
1715     +
1716     + if (val && nval == 1) {
1717     + ret = acpi_dev_prop_read_single(adev, propname, proptype, val);
1718     + if (!ret)
1719     + return ret;
1720     + }
1721     +
1722     + ret = acpi_dev_get_property_array(adev, propname, ACPI_TYPE_ANY, &obj);
1723     + if (ret)
1724     + return ret;
1725     +
1726     + if (!val)
1727     + return obj->package.count;
1728     + else if (nval <= 0)
1729     + return -EINVAL;
1730     +
1731     + if (nval > obj->package.count)
1732     + return -EOVERFLOW;
1733     +
1734     + items = obj->package.elements;
1735     + switch (proptype) {
1736     + case DEV_PROP_U8:
1737     + ret = acpi_copy_property_array_u8(items, (u8 *)val, nval);
1738     + break;
1739     + case DEV_PROP_U16:
1740     + ret = acpi_copy_property_array_u16(items, (u16 *)val, nval);
1741     + break;
1742     + case DEV_PROP_U32:
1743     + ret = acpi_copy_property_array_u32(items, (u32 *)val, nval);
1744     + break;
1745     + case DEV_PROP_U64:
1746     + ret = acpi_copy_property_array_u64(items, (u64 *)val, nval);
1747     + break;
1748     + case DEV_PROP_STRING:
1749     + ret = acpi_copy_property_array_string(items, (char **)val, nval);
1750     + break;
1751     + default:
1752     + ret = -EINVAL;
1753     + break;
1754     + }
1755     + return ret;
1756     +}
1757     diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
1758     index 0446d0d5efa5..01aa1c7f4e9c 100644
1759     --- a/drivers/acpi/scan.c
1760     +++ b/drivers/acpi/scan.c
1761     @@ -926,6 +926,7 @@ static void acpi_device_release(struct device *dev)
1762     {
1763     struct acpi_device *acpi_dev = to_acpi_device(dev);
1764    
1765     + acpi_free_properties(acpi_dev);
1766     acpi_free_pnp_ids(&acpi_dev->pnp);
1767     acpi_free_power_resources_lists(acpi_dev);
1768     kfree(acpi_dev);
1769     @@ -1928,6 +1929,7 @@ void acpi_init_device_object(struct acpi_device *device, acpi_handle handle,
1770     acpi_set_device_status(device, sta);
1771     acpi_device_get_busid(device);
1772     acpi_set_pnp_ids(handle, &device->pnp, type);
1773     + acpi_init_properties(device);
1774     acpi_bus_get_flags(device);
1775     device->flags.match_driver = false;
1776     device->flags.initialized = true;
1777     diff --git a/drivers/base/Makefile b/drivers/base/Makefile
1778     index 6922cd6850a2..53c3fe1aeb29 100644
1779     --- a/drivers/base/Makefile
1780     +++ b/drivers/base/Makefile
1781     @@ -4,7 +4,7 @@ obj-y := component.o core.o bus.o dd.o syscore.o \
1782     driver.o class.o platform.o \
1783     cpu.o firmware.o init.o map.o devres.o \
1784     attribute_container.o transport_class.o \
1785     - topology.o container.o
1786     + topology.o container.o property.o
1787     obj-$(CONFIG_DEVTMPFS) += devtmpfs.o
1788     obj-$(CONFIG_DMA_CMA) += dma-contiguous.o
1789     obj-y += power/
1790     diff --git a/drivers/base/property.c b/drivers/base/property.c
1791     new file mode 100644
1792     index 000000000000..6a94ef6e83c9
1793     --- /dev/null
1794     +++ b/drivers/base/property.c
1795     @@ -0,0 +1,185 @@
1796     +/*
1797     + * property.c - Unified device property interface.
1798     + *
1799     + * Copyright (C) 2014, Intel Corporation
1800     + * Authors: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
1801     + * Mika Westerberg <mika.westerberg@linux.intel.com>
1802     + *
1803     + * This program is free software; you can redistribute it and/or modify
1804     + * it under the terms of the GNU General Public License version 2 as
1805     + * published by the Free Software Foundation.
1806     + */
1807     +
1808     +#include <linux/property.h>
1809     +#include <linux/export.h>
1810     +#include <linux/acpi.h>
1811     +#include <linux/of.h>
1812     +
1813     +/**
1814     + * device_property_present - check if a property of a device is present
1815     + * @dev: Device whose property is being checked
1816     + * @propname: Name of the property
1817     + *
1818     + * Check if property @propname is present in the device firmware description.
1819     + */
1820     +bool device_property_present(struct device *dev, const char *propname)
1821     +{
1822     + if (IS_ENABLED(CONFIG_OF) && dev->of_node)
1823     + return of_property_read_bool(dev->of_node, propname);
1824     +
1825     + return !acpi_dev_prop_get(ACPI_COMPANION(dev), propname, NULL);
1826     +}
1827     +EXPORT_SYMBOL_GPL(device_property_present);
1828     +
1829     +#define OF_DEV_PROP_READ_ARRAY(node, propname, type, val, nval) \
1830     + (val) ? of_property_read_##type##_array((node), (propname), (val), (nval)) \
1831     + : of_property_count_elems_of_size((node), (propname), sizeof(type))
1832     +
1833     +#define DEV_PROP_READ_ARRAY(_dev_, _propname_, _type_, _proptype_, _val_, _nval_) \
1834     + IS_ENABLED(CONFIG_OF) && _dev_->of_node ? \
1835     + (OF_DEV_PROP_READ_ARRAY(_dev_->of_node, _propname_, _type_, \
1836     + _val_, _nval_)) : \
1837     + acpi_dev_prop_read(ACPI_COMPANION(_dev_), _propname_, \
1838     + _proptype_, _val_, _nval_)
1839     +
1840     +/**
1841     + * device_property_read_u8_array - return a u8 array property of a device
1842     + * @dev: Device to get the property of
1843     + * @propname: Name of the property
1844     + * @val: The values are stored here
1845     + * @nval: Size of the @val array
1846     + *
1847     + * Function reads an array of u8 properties with @propname from the device
1848     + * firmware description and stores them to @val if found.
1849     + *
1850     + * Return: %0 if the property was found (success),
1851     + * %-EINVAL if given arguments are not valid,
1852     + * %-ENODATA if the property does not have a value,
1853     + * %-EPROTO if the property is not an array of numbers,
1854     + * %-EOVERFLOW if the size of the property is not as expected.
1855     + */
1856     +int device_property_read_u8_array(struct device *dev, const char *propname,
1857     + u8 *val, size_t nval)
1858     +{
1859     + return DEV_PROP_READ_ARRAY(dev, propname, u8, DEV_PROP_U8, val, nval);
1860     +}
1861     +EXPORT_SYMBOL_GPL(device_property_read_u8_array);
1862     +
1863     +/**
1864     + * device_property_read_u16_array - return a u16 array property of a device
1865     + * @dev: Device to get the property of
1866     + * @propname: Name of the property
1867     + * @val: The values are stored here
1868     + * @nval: Size of the @val array
1869     + *
1870     + * Function reads an array of u16 properties with @propname from the device
1871     + * firmware description and stores them to @val if found.
1872     + *
1873     + * Return: %0 if the property was found (success),
1874     + * %-EINVAL if given arguments are not valid,
1875     + * %-ENODATA if the property does not have a value,
1876     + * %-EPROTO if the property is not an array of numbers,
1877     + * %-EOVERFLOW if the size of the property is not as expected.
1878     + */
1879     +int device_property_read_u16_array(struct device *dev, const char *propname,
1880     + u16 *val, size_t nval)
1881     +{
1882     + return DEV_PROP_READ_ARRAY(dev, propname, u16, DEV_PROP_U16, val, nval);
1883     +}
1884     +EXPORT_SYMBOL_GPL(device_property_read_u16_array);
1885     +
1886     +/**
1887     + * device_property_read_u32_array - return a u32 array property of a device
1888     + * @dev: Device to get the property of
1889     + * @propname: Name of the property
1890     + * @val: The values are stored here
1891     + * @nval: Size of the @val array
1892     + *
1893     + * Function reads an array of u32 properties with @propname from the device
1894     + * firmware description and stores them to @val if found.
1895     + *
1896     + * Return: %0 if the property was found (success),
1897     + * %-EINVAL if given arguments are not valid,
1898     + * %-ENODATA if the property does not have a value,
1899     + * %-EPROTO if the property is not an array of numbers,
1900     + * %-EOVERFLOW if the size of the property is not as expected.
1901     + */
1902     +int device_property_read_u32_array(struct device *dev, const char *propname,
1903     + u32 *val, size_t nval)
1904     +{
1905     + return DEV_PROP_READ_ARRAY(dev, propname, u32, DEV_PROP_U32, val, nval);
1906     +}
1907     +EXPORT_SYMBOL_GPL(device_property_read_u32_array);
1908     +
1909     +/**
1910     + * device_property_read_u64_array - return a u64 array property of a device
1911     + * @dev: Device to get the property of
1912     + * @propname: Name of the property
1913     + * @val: The values are stored here
1914     + * @nval: Size of the @val array
1915     + *
1916     + * Function reads an array of u64 properties with @propname from the device
1917     + * firmware description and stores them to @val if found.
1918     + *
1919     + * Return: %0 if the property was found (success),
1920     + * %-EINVAL if given arguments are not valid,
1921     + * %-ENODATA if the property does not have a value,
1922     + * %-EPROTO if the property is not an array of numbers,
1923     + * %-EOVERFLOW if the size of the property is not as expected.
1924     + */
1925     +int device_property_read_u64_array(struct device *dev, const char *propname,
1926     + u64 *val, size_t nval)
1927     +{
1928     + return DEV_PROP_READ_ARRAY(dev, propname, u64, DEV_PROP_U64, val, nval);
1929     +}
1930     +EXPORT_SYMBOL_GPL(device_property_read_u64_array);
1931     +
1932     +/**
1933     + * device_property_read_string_array - return a string array property of device
1934     + * @dev: Device to get the property of
1935     + * @propname: Name of the property
1936     + * @val: The values are stored here
1937     + * @nval: Size of the @val array
1938     + *
1939     + * Function reads an array of string properties with @propname from the device
1940     + * firmware description and stores them to @val if found.
1941     + *
1942     + * Return: %0 if the property was found (success),
1943     + * %-EINVAL if given arguments are not valid,
1944     + * %-ENODATA if the property does not have a value,
1945     + * %-EPROTO or %-EILSEQ if the property is not an array of strings,
1946     + * %-EOVERFLOW if the size of the property is not as expected.
1947     + */
1948     +int device_property_read_string_array(struct device *dev, const char *propname,
1949     + const char **val, size_t nval)
1950     +{
1951     + return IS_ENABLED(CONFIG_OF) && dev->of_node ?
1952     + of_property_read_string_array(dev->of_node, propname, val, nval) :
1953     + acpi_dev_prop_read(ACPI_COMPANION(dev), propname,
1954     + DEV_PROP_STRING, val, nval);
1955     +}
1956     +EXPORT_SYMBOL_GPL(device_property_read_string_array);
1957     +
1958     +/**
1959     + * device_property_read_string - return a string property of a device
1960     + * @dev: Device to get the property of
1961     + * @propname: Name of the property
1962     + * @val: The value is stored here
1963     + *
1964     + * Function reads property @propname from the device firmware description and
1965     + * stores the value into @val if found. The value is checked to be a string.
1966     + *
1967     + * Return: %0 if the property was found (success),
1968     + * %-EINVAL if given arguments are not valid,
1969     + * %-ENODATA if the property does not have a value,
1970     + * %-EPROTO or %-EILSEQ if the property type is not a string.
1971     + */
1972     +int device_property_read_string(struct device *dev, const char *propname,
1973     + const char **val)
1974     +{
1975     + return IS_ENABLED(CONFIG_OF) && dev->of_node ?
1976     + of_property_read_string(dev->of_node, propname, val) :
1977     + acpi_dev_prop_read(ACPI_COMPANION(dev), propname,
1978     + DEV_PROP_STRING, val, 1);
1979     +}
1980     +EXPORT_SYMBOL_GPL(device_property_read_string);
1981     diff --git a/drivers/dma/sh/shdmac.c b/drivers/dma/sh/shdmac.c
1982     index 58eb85770eba..8a083aa23748 100644
1983     --- a/drivers/dma/sh/shdmac.c
1984     +++ b/drivers/dma/sh/shdmac.c
1985     @@ -443,7 +443,7 @@ static bool sh_dmae_reset(struct sh_dmae_device *shdev)
1986     return ret;
1987     }
1988    
1989     -#if defined(CONFIG_CPU_SH4) || defined(CONFIG_ARM)
1990     +#if defined(CONFIG_CPU_SH4) || defined(CONFIG_ARCH_SHMOBILE)
1991     static irqreturn_t sh_dmae_err(int irq, void *data)
1992     {
1993     struct sh_dmae_device *shdev = data;
1994     @@ -689,7 +689,7 @@ static int sh_dmae_probe(struct platform_device *pdev)
1995     const struct sh_dmae_pdata *pdata;
1996     unsigned long chan_flag[SH_DMAE_MAX_CHANNELS] = {};
1997     int chan_irq[SH_DMAE_MAX_CHANNELS];
1998     -#if defined(CONFIG_CPU_SH4) || defined(CONFIG_ARM)
1999     +#if defined(CONFIG_CPU_SH4) || defined(CONFIG_ARCH_SHMOBILE)
2000     unsigned long irqflags = 0;
2001     int errirq;
2002     #endif
2003     diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
2004     index f42df4dd58d2..6f299cd54e6d 100644
2005     --- a/drivers/hid/Kconfig
2006     +++ b/drivers/hid/Kconfig
2007     @@ -378,6 +378,17 @@ config HID_LOGITECH_DJ
2008     generic USB_HID driver and all incoming events will be multiplexed
2009     into a single mouse and a single keyboard device.
2010    
2011     +config HID_LOGITECH_HIDPP
2012     + tristate "Logitech HID++ devices support"
2013     + depends on HID_LOGITECH
2014     + ---help---
2015     + Support for Logitech devices relyingon the HID++ Logitech specification
2016     +
2017     + Say Y if you want support for Logitech devices relying on the HID++
2018     + specification. Such devices are the various Logitech Touchpads (T650,
2019     + T651, TK820), some mice (Zone Touch mouse), or even keyboards (Solar
2020     + Keayboard).
2021     +
2022     config LOGITECH_FF
2023     bool "Logitech force feedback support"
2024     depends on HID_LOGITECH
2025     diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
2026     index e2850d8af9ca..b102774b4e16 100644
2027     --- a/drivers/hid/Makefile
2028     +++ b/drivers/hid/Makefile
2029     @@ -63,6 +63,7 @@ obj-$(CONFIG_HID_LCPOWER) += hid-lcpower.o
2030     obj-$(CONFIG_HID_LENOVO) += hid-lenovo.o
2031     obj-$(CONFIG_HID_LOGITECH) += hid-logitech.o
2032     obj-$(CONFIG_HID_LOGITECH_DJ) += hid-logitech-dj.o
2033     +obj-$(CONFIG_HID_LOGITECH_HIDPP) += hid-logitech-hidpp.o
2034     obj-$(CONFIG_HID_MAGICMOUSE) += hid-magicmouse.o
2035     obj-$(CONFIG_HID_MICROSOFT) += hid-microsoft.o
2036     obj-$(CONFIG_HID_MONTEREY) += hid-monterey.o
2037     diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
2038     index dfaccfca0688..77ba023cab95 100644
2039     --- a/drivers/hid/hid-core.c
2040     +++ b/drivers/hid/hid-core.c
2041     @@ -1811,6 +1811,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
2042     { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X) },
2043     { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2) },
2044     { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X) },
2045     + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_PENSKETCH_M912) },
2046     { HID_USB_DEVICE(USB_VENDOR_ID_LABTEC, USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD) },
2047     { HID_USB_DEVICE(USB_VENDOR_ID_LCPOWER, USB_DEVICE_ID_LCPOWER_LC1000 ) },
2048     #if IS_ENABLED(CONFIG_HID_LENOVO)
2049     @@ -1823,6 +1824,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
2050     { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2) },
2051     { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RECEIVER) },
2052     { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3) },
2053     + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_T651) },
2054     { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_DESKTOP) },
2055     { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_EDGE) },
2056     { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_MINI) },
2057     @@ -1858,6 +1860,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
2058     { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) },
2059     { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K) },
2060     { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K_JP) },
2061     + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE7K) },
2062     { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_LK6K) },
2063     { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_USB) },
2064     { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K) },
2065     @@ -1909,6 +1912,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
2066     #endif
2067     #if IS_ENABLED(CONFIG_HID_SAITEK)
2068     { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_PS1000) },
2069     + { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7_OLD) },
2070     { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7) },
2071     { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_MMO7) },
2072     #endif
2073     @@ -1954,6 +1958,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
2074     { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_3_PRO) },
2075     { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_DUAL_BOX_PRO) },
2076     { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_5_PRO) },
2077     + { HID_USB_DEVICE(USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII) },
2078     { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH) },
2079     { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_12_1_INCH) },
2080     { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_Q_PAD) },
2081     diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
2082     index 0e28190480d7..07e19295fad9 100644
2083     --- a/drivers/hid/hid-ids.h
2084     +++ b/drivers/hid/hid-ids.h
2085     @@ -164,6 +164,7 @@
2086     #define USB_DEVICE_ID_ATEN_2PORTKVM 0x2204
2087     #define USB_DEVICE_ID_ATEN_4PORTKVM 0x2205
2088     #define USB_DEVICE_ID_ATEN_4PORTKVMC 0x2208
2089     +#define USB_DEVICE_ID_ATEN_CS682 0x2213
2090    
2091     #define USB_VENDOR_ID_ATMEL 0x03eb
2092     #define USB_DEVICE_ID_ATMEL_MULTITOUCH 0x211c
2093     @@ -454,6 +455,11 @@
2094     #define USB_DEVICE_ID_UGCI_FLYING 0x0020
2095     #define USB_DEVICE_ID_UGCI_FIGHTING 0x0030
2096    
2097     +#define USB_VENDOR_ID_HP 0x03f0
2098     +#define USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0A4A 0x0a4a
2099     +#define USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0B4A 0x0b4a
2100     +#define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE 0x134a
2101     +
2102     #define USB_VENDOR_ID_HUION 0x256c
2103     #define USB_DEVICE_ID_HUION_TABLET 0x006e
2104    
2105     @@ -528,6 +534,7 @@
2106     #define USB_DEVICE_ID_KYE_MOUSEPEN_I608X 0x5011
2107     #define USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2 0x501a
2108     #define USB_DEVICE_ID_KYE_EASYPEN_M610X 0x5013
2109     +#define USB_DEVICE_ID_KYE_PENSKETCH_M912 0x5015
2110    
2111     #define USB_VENDOR_ID_LABTEC 0x1020
2112     #define USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD 0x0006
2113     @@ -580,10 +587,15 @@
2114    
2115     #define USB_VENDOR_ID_LOGITECH 0x046d
2116     #define USB_DEVICE_ID_LOGITECH_AUDIOHUB 0x0a0e
2117     +#define USB_DEVICE_ID_LOGITECH_T651 0xb00c
2118     +#define USB_DEVICE_ID_LOGITECH_C077 0xc007
2119     #define USB_DEVICE_ID_LOGITECH_RECEIVER 0xc101
2120     #define USB_DEVICE_ID_LOGITECH_HARMONY_FIRST 0xc110
2121     #define USB_DEVICE_ID_LOGITECH_HARMONY_LAST 0xc14f
2122     #define USB_DEVICE_ID_LOGITECH_HARMONY_PS3 0x0306
2123     +#define USB_DEVICE_ID_LOGITECH_MOUSE_C01A 0xc01a
2124     +#define USB_DEVICE_ID_LOGITECH_MOUSE_C05A 0xc05a
2125     +#define USB_DEVICE_ID_LOGITECH_MOUSE_C06A 0xc06a
2126     #define USB_DEVICE_ID_LOGITECH_RUMBLEPAD_CORD 0xc20a
2127     #define USB_DEVICE_ID_LOGITECH_RUMBLEPAD 0xc211
2128     #define USB_DEVICE_ID_LOGITECH_EXTREME_3D 0xc215
2129     @@ -646,6 +658,7 @@
2130     #define USB_DEVICE_ID_MS_LK6K 0x00f9
2131     #define USB_DEVICE_ID_MS_PRESENTER_8K_BT 0x0701
2132     #define USB_DEVICE_ID_MS_PRESENTER_8K_USB 0x0713
2133     +#define USB_DEVICE_ID_MS_NE7K 0x071d
2134     #define USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K 0x0730
2135     #define USB_DEVICE_ID_MS_COMFORT_MOUSE_4500 0x076c
2136     #define USB_DEVICE_ID_MS_SURFACE_PRO_2 0x0799
2137     @@ -787,6 +800,7 @@
2138     #define USB_VENDOR_ID_SAITEK 0x06a3
2139     #define USB_DEVICE_ID_SAITEK_RUMBLEPAD 0xff17
2140     #define USB_DEVICE_ID_SAITEK_PS1000 0x0621
2141     +#define USB_DEVICE_ID_SAITEK_RAT7_OLD 0x0ccb
2142     #define USB_DEVICE_ID_SAITEK_RAT7 0x0cd7
2143     #define USB_DEVICE_ID_SAITEK_MMO7 0x0cd0
2144    
2145     @@ -997,10 +1011,18 @@
2146     #define USB_DEVICE_ID_ZYTRONIC_ZXY100 0x0005
2147    
2148     #define USB_VENDOR_ID_PRIMAX 0x0461
2149     +#define USB_DEVICE_ID_PRIMAX_MOUSE_4D22 0x4d22
2150     #define USB_DEVICE_ID_PRIMAX_KEYBOARD 0x4e05
2151    
2152    
2153     #define USB_VENDOR_ID_RISO_KAGAKU 0x1294 /* Riso Kagaku Corp. */
2154     #define USB_DEVICE_ID_RI_KA_WEBMAIL 0x1320 /* Webmail Notifier */
2155    
2156     +#define USB_VENDOR_ID_MULTIPLE_1781 0x1781
2157     +#define USB_DEVICE_ID_RAPHNET_4NES4SNES_OLD 0x0a8d
2158     +
2159     +#define USB_VENDOR_ID_DRACAL_RAPHNET 0x289b
2160     +#define USB_DEVICE_ID_RAPHNET_2NES2SNES 0x0002
2161     +#define USB_DEVICE_ID_RAPHNET_4NES4SNES 0x0003
2162     +
2163     #endif
2164     diff --git a/drivers/hid/hid-kye.c b/drivers/hid/hid-kye.c
2165     index 158fcf577fae..32e6d8d9ded0 100644
2166     --- a/drivers/hid/hid-kye.c
2167     +++ b/drivers/hid/hid-kye.c
2168     @@ -268,6 +268,137 @@ static __u8 easypen_m610x_rdesc_fixed[] = {
2169     0xC0 /* End Collection */
2170     };
2171    
2172     +
2173     +/* Original PenSketch M912 report descriptor size */
2174     +#define PENSKETCH_M912_RDESC_ORIG_SIZE 482
2175     +
2176     +/* Fixed PenSketch M912 report descriptor */
2177     +static __u8 pensketch_m912_rdesc_fixed[] = {
2178     + 0x05, 0x01, /* Usage Page (Desktop), */
2179     + 0x08, /* Usage (00h), */
2180     + 0xA1, 0x01, /* Collection (Application), */
2181     + 0x85, 0x05, /* Report ID (5), */
2182     + 0x06, 0x00, 0xFF, /* Usage Page (FF00h), */
2183     + 0x09, 0x01, /* Usage (01h), */
2184     + 0x15, 0x81, /* Logical Minimum (-127), */
2185     + 0x25, 0x7F, /* Logical Maximum (127), */
2186     + 0x75, 0x08, /* Report Size (8), */
2187     + 0x95, 0x07, /* Report Count (7), */
2188     + 0xB1, 0x02, /* Feature (Variable), */
2189     + 0xC0, /* End Collection, */
2190     + 0x05, 0x0D, /* Usage Page (Digitizer), */
2191     + 0x09, 0x02, /* Usage (Pen), */
2192     + 0xA1, 0x01, /* Collection (Application), */
2193     + 0x85, 0x10, /* Report ID (16), */
2194     + 0x09, 0x20, /* Usage (Stylus), */
2195     + 0xA0, /* Collection (Physical), */
2196     + 0x09, 0x42, /* Usage (Tip Switch), */
2197     + 0x09, 0x44, /* Usage (Barrel Switch), */
2198     + 0x09, 0x46, /* Usage (Tablet Pick), */
2199     + 0x14, /* Logical Minimum (0), */
2200     + 0x25, 0x01, /* Logical Maximum (1), */
2201     + 0x75, 0x01, /* Report Size (1), */
2202     + 0x95, 0x03, /* Report Count (3), */
2203     + 0x81, 0x02, /* Input (Variable), */
2204     + 0x95, 0x04, /* Report Count (4), */
2205     + 0x81, 0x03, /* Input (Constant, Variable), */
2206     + 0x09, 0x32, /* Usage (In Range), */
2207     + 0x95, 0x01, /* Report Count (1), */
2208     + 0x81, 0x02, /* Input (Variable), */
2209     + 0x75, 0x10, /* Report Size (16), */
2210     + 0x95, 0x01, /* Report Count (1), */
2211     + 0xA4, /* Push, */
2212     + 0x05, 0x01, /* Usage Page (Desktop), */
2213     + 0x55, 0xFD, /* Unit Exponent (-3), */
2214     + 0x65, 0x13, /* Unit (Inch), */
2215     + 0x14, /* Logical Minimum (0), */
2216     + 0x34, /* Physical Minimum (0), */
2217     + 0x09, 0x30, /* Usage (X), */
2218     + 0x27, 0x00, 0xF0, 0x00, 0x00, /* Logical Maximum (61440), */
2219     + 0x46, 0xE0, 0x2E, /* Physical Maximum (12000), */
2220     + 0x81, 0x02, /* Input (Variable), */
2221     + 0x09, 0x31, /* Usage (Y), */
2222     + 0x27, 0x00, 0xB4, 0x00, 0x00, /* Logical Maximum (46080), */
2223     + 0x46, 0x28, 0x23, /* Physical Maximum (9000), */
2224     + 0x81, 0x02, /* Input (Variable), */
2225     + 0xB4, /* Pop, */
2226     + 0x09, 0x30, /* Usage (Tip Pressure), */
2227     + 0x14, /* Logical Minimum (0), */
2228     + 0x26, 0xFF, 0x07, /* Logical Maximum (2047), */
2229     + 0x81, 0x02, /* Input (Variable), */
2230     + 0xC0, /* End Collection, */
2231     + 0xC0, /* End Collection, */
2232     + 0x05, 0x0D, /* Usage Page (Digitizer), */
2233     + 0x09, 0x21, /* Usage (Puck), */
2234     + 0xA1, 0x01, /* Collection (Application), */
2235     + 0x85, 0x11, /* Report ID (17), */
2236     + 0x09, 0x21, /* Usage (Puck), */
2237     + 0xA0, /* Collection (Physical), */
2238     + 0x05, 0x09, /* Usage Page (Button), */
2239     + 0x75, 0x01, /* Report Size (1), */
2240     + 0x19, 0x01, /* Usage Minimum (01h), */
2241     + 0x29, 0x03, /* Usage Maximum (03h), */
2242     + 0x14, /* Logical Minimum (0), */
2243     + 0x25, 0x01, /* Logical Maximum (1), */
2244     + 0x95, 0x03, /* Report Count (3), */
2245     + 0x81, 0x02, /* Input (Variable), */
2246     + 0x95, 0x04, /* Report Count (4), */
2247     + 0x81, 0x01, /* Input (Constant), */
2248     + 0x95, 0x01, /* Report Count (1), */
2249     + 0x0B, 0x32, 0x00, 0x0D, 0x00, /* Usage (Digitizer In Range), */
2250     + 0x14, /* Logical Minimum (0), */
2251     + 0x25, 0x01, /* Logical Maximum (1), */
2252     + 0x81, 0x02, /* Input (Variable), */
2253     + 0xA4, /* Push, */
2254     + 0x05, 0x01, /* Usage Page (Desktop), */
2255     + 0x75, 0x10, /* Report Size (16), */
2256     + 0x95, 0x01, /* Report Count (1), */
2257     + 0x55, 0xFD, /* Unit Exponent (-3), */
2258     + 0x65, 0x13, /* Unit (Inch), */
2259     + 0x14, /* Logical Minimum (0), */
2260     + 0x34, /* Physical Minimum (0), */
2261     + 0x09, 0x30, /* Usage (X), */
2262     + 0x27, 0x00, 0xF0, 0x00, 0x00, /* Logical Maximum (61440), */
2263     + 0x46, 0xE0, 0x2E, /* Physical Maximum (12000), */
2264     + 0x81, 0x02, /* Input (Variable), */
2265     + 0x09, 0x31, /* Usage (Y), */
2266     + 0x27, 0x00, 0xB4, 0x00, 0x00, /* Logical Maximum (46080), */
2267     + 0x46, 0x28, 0x23, /* Physical Maximum (9000), */
2268     + 0x81, 0x02, /* Input (Variable), */
2269     + 0x09, 0x38, /* Usage (Wheel), */
2270     + 0x75, 0x08, /* Report Size (8), */
2271     + 0x95, 0x01, /* Report Count (1), */
2272     + 0x15, 0xFF, /* Logical Minimum (-1), */
2273     + 0x25, 0x01, /* Logical Maximum (1), */
2274     + 0x34, /* Physical Minimum (0), */
2275     + 0x44, /* Physical Maximum (0), */
2276     + 0x81, 0x06, /* Input (Variable, Relative), */
2277     + 0xB4, /* Pop, */
2278     + 0xC0, /* End Collection, */
2279     + 0xC0, /* End Collection, */
2280     + 0x05, 0x0C, /* Usage Page (Consumer), */
2281     + 0x09, 0x01, /* Usage (Consumer Control), */
2282     + 0xA1, 0x01, /* Collection (Application), */
2283     + 0x85, 0x12, /* Report ID (18), */
2284     + 0x14, /* Logical Minimum (0), */
2285     + 0x25, 0x01, /* Logical Maximum (1), */
2286     + 0x75, 0x01, /* Report Size (1), */
2287     + 0x95, 0x08, /* Report Count (8), */
2288     + 0x05, 0x0C, /* Usage Page (Consumer), */
2289     + 0x0A, 0x6A, 0x02, /* Usage (AC Delete), */
2290     + 0x0A, 0x1A, 0x02, /* Usage (AC Undo), */
2291     + 0x0A, 0x01, 0x02, /* Usage (AC New), */
2292     + 0x0A, 0x2F, 0x02, /* Usage (AC Zoom), */
2293     + 0x0A, 0x25, 0x02, /* Usage (AC Forward), */
2294     + 0x0A, 0x24, 0x02, /* Usage (AC Back), */
2295     + 0x0A, 0x2D, 0x02, /* Usage (AC Zoom In), */
2296     + 0x0A, 0x2E, 0x02, /* Usage (AC Zoom Out), */
2297     + 0x81, 0x02, /* Input (Variable), */
2298     + 0x95, 0x30, /* Report Count (48), */
2299     + 0x81, 0x03, /* Input (Constant, Variable), */
2300     + 0xC0 /* End Collection */
2301     +};
2302     +
2303     static __u8 *kye_consumer_control_fixup(struct hid_device *hdev, __u8 *rdesc,
2304     unsigned int *rsize, int offset, const char *device_name) {
2305     /*
2306     @@ -335,6 +466,12 @@ static __u8 *kye_report_fixup(struct hid_device *hdev, __u8 *rdesc,
2307     *rsize = sizeof(easypen_m610x_rdesc_fixed);
2308     }
2309     break;
2310     + case USB_DEVICE_ID_KYE_PENSKETCH_M912:
2311     + if (*rsize == PENSKETCH_M912_RDESC_ORIG_SIZE) {
2312     + rdesc = pensketch_m912_rdesc_fixed;
2313     + *rsize = sizeof(pensketch_m912_rdesc_fixed);
2314     + }
2315     + break;
2316     case USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE:
2317     rdesc = kye_consumer_control_fixup(hdev, rdesc, rsize, 104,
2318     "Genius Gila Gaming Mouse");
2319     @@ -418,6 +555,7 @@ static int kye_probe(struct hid_device *hdev, const struct hid_device_id *id)
2320     case USB_DEVICE_ID_KYE_MOUSEPEN_I608X:
2321     case USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2:
2322     case USB_DEVICE_ID_KYE_EASYPEN_M610X:
2323     + case USB_DEVICE_ID_KYE_PENSKETCH_M912:
2324     ret = kye_tablet_enable(hdev);
2325     if (ret) {
2326     hid_err(hdev, "tablet enabling failed\n");
2327     @@ -457,6 +595,8 @@ static const struct hid_device_id kye_devices[] = {
2328     USB_DEVICE_ID_GENIUS_GX_IMPERATOR) },
2329     { HID_USB_DEVICE(USB_VENDOR_ID_KYE,
2330     USB_DEVICE_ID_GENIUS_MANTICORE) },
2331     + { HID_USB_DEVICE(USB_VENDOR_ID_KYE,
2332     + USB_DEVICE_ID_KYE_PENSKETCH_M912) },
2333     { }
2334     };
2335     MODULE_DEVICE_TABLE(hid, kye_devices);
2336     diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c
2337     new file mode 100644
2338     index 000000000000..7dd9163f7e03
2339     --- /dev/null
2340     +++ b/drivers/hid/hid-logitech-hidpp.c
2341     @@ -0,0 +1,842 @@
2342     +/*
2343     + * HIDPP protocol for Logitech Unifying receivers
2344     + *
2345     + * Copyright (c) 2011 Logitech (c)
2346     + * Copyright (c) 2012-2013 Google (c)
2347     + * Copyright (c) 2013-2014 Red Hat Inc.
2348     + */
2349     +
2350     +/*
2351     + * This program is free software; you can redistribute it and/or modify it
2352     + * under the terms of the GNU General Public License as published by the Free
2353     + * Software Foundation; version 2 of the License.
2354     + */
2355     +
2356     +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
2357     +
2358     +#include <linux/device.h>
2359     +#include <linux/hid.h>
2360     +#include <linux/module.h>
2361     +#include <linux/slab.h>
2362     +#include <linux/sched.h>
2363     +#include <linux/kfifo.h>
2364     +#include <linux/input/mt.h>
2365     +#include <asm/unaligned.h>
2366     +#include "hid-ids.h"
2367     +
2368     +MODULE_LICENSE("GPL");
2369     +MODULE_AUTHOR("Benjamin Tissoires <benjamin.tissoires@gmail.com>");
2370     +MODULE_AUTHOR("Nestor Lopez Casado <nlopezcasad@logitech.com>");
2371     +
2372     +#define REPORT_ID_HIDPP_SHORT 0x10
2373     +#define REPORT_ID_HIDPP_LONG 0x11
2374     +
2375     +#define HIDPP_REPORT_SHORT_LENGTH 7
2376     +#define HIDPP_REPORT_LONG_LENGTH 20
2377     +
2378     +#define HIDPP_QUIRK_CLASS_WTP BIT(0)
2379     +
2380     +/*
2381     + * There are two hidpp protocols in use, the first version hidpp10 is known
2382     + * as register access protocol or RAP, the second version hidpp20 is known as
2383     + * feature access protocol or FAP
2384     + *
2385     + * Most older devices (including the Unifying usb receiver) use the RAP protocol
2386     + * where as most newer devices use the FAP protocol. Both protocols are
2387     + * compatible with the underlying transport, which could be usb, Unifiying, or
2388     + * bluetooth. The message lengths are defined by the hid vendor specific report
2389     + * descriptor for the HIDPP_SHORT report type (total message lenth 7 bytes) and
2390     + * the HIDPP_LONG report type (total message length 20 bytes)
2391     + *
2392     + * The RAP protocol uses both report types, whereas the FAP only uses HIDPP_LONG
2393     + * messages. The Unifying receiver itself responds to RAP messages (device index
2394     + * is 0xFF for the receiver), and all messages (short or long) with a device
2395     + * index between 1 and 6 are passed untouched to the corresponding paired
2396     + * Unifying device.
2397     + *
2398     + * The paired device can be RAP or FAP, it will receive the message untouched
2399     + * from the Unifiying receiver.
2400     + */
2401     +
2402     +struct fap {
2403     + u8 feature_index;
2404     + u8 funcindex_clientid;
2405     + u8 params[HIDPP_REPORT_LONG_LENGTH - 4U];
2406     +};
2407     +
2408     +struct rap {
2409     + u8 sub_id;
2410     + u8 reg_address;
2411     + u8 params[HIDPP_REPORT_LONG_LENGTH - 4U];
2412     +};
2413     +
2414     +struct hidpp_report {
2415     + u8 report_id;
2416     + u8 device_index;
2417     + union {
2418     + struct fap fap;
2419     + struct rap rap;
2420     + u8 rawbytes[sizeof(struct fap)];
2421     + };
2422     +} __packed;
2423     +
2424     +struct hidpp_device {
2425     + struct hid_device *hid_dev;
2426     + struct mutex send_mutex;
2427     + void *send_receive_buf;
2428     + wait_queue_head_t wait;
2429     + bool answer_available;
2430     + u8 protocol_major;
2431     + u8 protocol_minor;
2432     +
2433     + void *private_data;
2434     +
2435     + unsigned long quirks;
2436     +};
2437     +
2438     +
2439     +#define HIDPP_ERROR 0x8f
2440     +#define HIDPP_ERROR_SUCCESS 0x00
2441     +#define HIDPP_ERROR_INVALID_SUBID 0x01
2442     +#define HIDPP_ERROR_INVALID_ADRESS 0x02
2443     +#define HIDPP_ERROR_INVALID_VALUE 0x03
2444     +#define HIDPP_ERROR_CONNECT_FAIL 0x04
2445     +#define HIDPP_ERROR_TOO_MANY_DEVICES 0x05
2446     +#define HIDPP_ERROR_ALREADY_EXISTS 0x06
2447     +#define HIDPP_ERROR_BUSY 0x07
2448     +#define HIDPP_ERROR_UNKNOWN_DEVICE 0x08
2449     +#define HIDPP_ERROR_RESOURCE_ERROR 0x09
2450     +#define HIDPP_ERROR_REQUEST_UNAVAILABLE 0x0a
2451     +#define HIDPP_ERROR_INVALID_PARAM_VALUE 0x0b
2452     +#define HIDPP_ERROR_WRONG_PIN_CODE 0x0c
2453     +
2454     +static int __hidpp_send_report(struct hid_device *hdev,
2455     + struct hidpp_report *hidpp_report)
2456     +{
2457     + int fields_count, ret;
2458     +
2459     + switch (hidpp_report->report_id) {
2460     + case REPORT_ID_HIDPP_SHORT:
2461     + fields_count = HIDPP_REPORT_SHORT_LENGTH;
2462     + break;
2463     + case REPORT_ID_HIDPP_LONG:
2464     + fields_count = HIDPP_REPORT_LONG_LENGTH;
2465     + break;
2466     + default:
2467     + return -ENODEV;
2468     + }
2469     +
2470     + /*
2471     + * set the device_index as the receiver, it will be overwritten by
2472     + * hid_hw_request if needed
2473     + */
2474     + hidpp_report->device_index = 0xff;
2475     +
2476     + ret = hid_hw_raw_request(hdev, hidpp_report->report_id,
2477     + (u8 *)hidpp_report, fields_count, HID_OUTPUT_REPORT,
2478     + HID_REQ_SET_REPORT);
2479     +
2480     + return ret == fields_count ? 0 : -1;
2481     +}
2482     +
2483     +static int hidpp_send_message_sync(struct hidpp_device *hidpp,
2484     + struct hidpp_report *message,
2485     + struct hidpp_report *response)
2486     +{
2487     + int ret;
2488     +
2489     + mutex_lock(&hidpp->send_mutex);
2490     +
2491     + hidpp->send_receive_buf = response;
2492     + hidpp->answer_available = false;
2493     +
2494     + /*
2495     + * So that we can later validate the answer when it arrives
2496     + * in hidpp_raw_event
2497     + */
2498     + *response = *message;
2499     +
2500     + ret = __hidpp_send_report(hidpp->hid_dev, message);
2501     +
2502     + if (ret) {
2503     + dbg_hid("__hidpp_send_report returned err: %d\n", ret);
2504     + memset(response, 0, sizeof(struct hidpp_report));
2505     + goto exit;
2506     + }
2507     +
2508     + if (!wait_event_timeout(hidpp->wait, hidpp->answer_available,
2509     + 5*HZ)) {
2510     + dbg_hid("%s:timeout waiting for response\n", __func__);
2511     + memset(response, 0, sizeof(struct hidpp_report));
2512     + ret = -ETIMEDOUT;
2513     + }
2514     +
2515     + if (response->report_id == REPORT_ID_HIDPP_SHORT &&
2516     + response->fap.feature_index == HIDPP_ERROR) {
2517     + ret = response->fap.params[1];
2518     + dbg_hid("__hidpp_send_report got hidpp error %02X\n", ret);
2519     + goto exit;
2520     + }
2521     +
2522     +exit:
2523     + mutex_unlock(&hidpp->send_mutex);
2524     + return ret;
2525     +
2526     +}
2527     +
2528     +static int hidpp_send_fap_command_sync(struct hidpp_device *hidpp,
2529     + u8 feat_index, u8 funcindex_clientid, u8 *params, int param_count,
2530     + struct hidpp_report *response)
2531     +{
2532     + struct hidpp_report *message = kzalloc(sizeof(struct hidpp_report),
2533     + GFP_KERNEL);
2534     + int ret;
2535     +
2536     + if (param_count > sizeof(message->fap.params))
2537     + return -EINVAL;
2538     +
2539     + message->report_id = REPORT_ID_HIDPP_LONG;
2540     + message->fap.feature_index = feat_index;
2541     + message->fap.funcindex_clientid = funcindex_clientid;
2542     + memcpy(&message->fap.params, params, param_count);
2543     +
2544     + ret = hidpp_send_message_sync(hidpp, message, response);
2545     + kfree(message);
2546     + return ret;
2547     +}
2548     +
2549     +static inline bool hidpp_match_answer(struct hidpp_report *question,
2550     + struct hidpp_report *answer)
2551     +{
2552     + return (answer->fap.feature_index == question->fap.feature_index) &&
2553     + (answer->fap.funcindex_clientid == question->fap.funcindex_clientid);
2554     +}
2555     +
2556     +static inline bool hidpp_match_error(struct hidpp_report *question,
2557     + struct hidpp_report *answer)
2558     +{
2559     + return (answer->fap.feature_index == HIDPP_ERROR) &&
2560     + (answer->fap.funcindex_clientid == question->fap.feature_index) &&
2561     + (answer->fap.params[0] == question->fap.funcindex_clientid);
2562     +}
2563     +
2564     +/* -------------------------------------------------------------------------- */
2565     +/* 0x0000: Root */
2566     +/* -------------------------------------------------------------------------- */
2567     +
2568     +#define HIDPP_PAGE_ROOT 0x0000
2569     +#define HIDPP_PAGE_ROOT_IDX 0x00
2570     +
2571     +#define CMD_ROOT_GET_FEATURE 0x01
2572     +#define CMD_ROOT_GET_PROTOCOL_VERSION 0x11
2573     +
2574     +static int hidpp_root_get_feature(struct hidpp_device *hidpp, u16 feature,
2575     + u8 *feature_index, u8 *feature_type)
2576     +{
2577     + struct hidpp_report response;
2578     + int ret;
2579     + u8 params[2] = { feature >> 8, feature & 0x00FF };
2580     +
2581     + ret = hidpp_send_fap_command_sync(hidpp,
2582     + HIDPP_PAGE_ROOT_IDX,
2583     + CMD_ROOT_GET_FEATURE,
2584     + params, 2, &response);
2585     + if (ret)
2586     + return ret;
2587     +
2588     + *feature_index = response.fap.params[0];
2589     + *feature_type = response.fap.params[1];
2590     +
2591     + return ret;
2592     +}
2593     +
2594     +static int hidpp_root_get_protocol_version(struct hidpp_device *hidpp)
2595     +{
2596     + struct hidpp_report response;
2597     + int ret;
2598     +
2599     + ret = hidpp_send_fap_command_sync(hidpp,
2600     + HIDPP_PAGE_ROOT_IDX,
2601     + CMD_ROOT_GET_PROTOCOL_VERSION,
2602     + NULL, 0, &response);
2603     +
2604     + if (ret == 1) {
2605     + hidpp->protocol_major = 1;
2606     + hidpp->protocol_minor = 0;
2607     + return 0;
2608     + }
2609     +
2610     + if (ret)
2611     + return -ret;
2612     +
2613     + hidpp->protocol_major = response.fap.params[0];
2614     + hidpp->protocol_minor = response.fap.params[1];
2615     +
2616     + return ret;
2617     +}
2618     +
2619     +static bool hidpp_is_connected(struct hidpp_device *hidpp)
2620     +{
2621     + int ret;
2622     +
2623     + ret = hidpp_root_get_protocol_version(hidpp);
2624     + if (!ret)
2625     + hid_dbg(hidpp->hid_dev, "HID++ %u.%u device connected.\n",
2626     + hidpp->protocol_major, hidpp->protocol_minor);
2627     + return ret == 0;
2628     +}
2629     +
2630     +/* -------------------------------------------------------------------------- */
2631     +/* 0x0005: GetDeviceNameType */
2632     +/* -------------------------------------------------------------------------- */
2633     +
2634     +#define HIDPP_PAGE_GET_DEVICE_NAME_TYPE 0x0005
2635     +
2636     +#define CMD_GET_DEVICE_NAME_TYPE_GET_COUNT 0x01
2637     +#define CMD_GET_DEVICE_NAME_TYPE_GET_DEVICE_NAME 0x11
2638     +#define CMD_GET_DEVICE_NAME_TYPE_GET_TYPE 0x21
2639     +
2640     +static int hidpp_devicenametype_get_count(struct hidpp_device *hidpp,
2641     + u8 feature_index, u8 *nameLength)
2642     +{
2643     + struct hidpp_report response;
2644     + int ret;
2645     +
2646     + ret = hidpp_send_fap_command_sync(hidpp, feature_index,
2647     + CMD_GET_DEVICE_NAME_TYPE_GET_COUNT, NULL, 0, &response);
2648     +
2649     + if (ret)
2650     + return -ret;
2651     +
2652     + *nameLength = response.fap.params[0];
2653     +
2654     + return ret;
2655     +}
2656     +
2657     +static int hidpp_devicenametype_get_device_name(struct hidpp_device *hidpp,
2658     + u8 feature_index, u8 char_index, char *device_name, int len_buf)
2659     +{
2660     + struct hidpp_report response;
2661     + int ret, i;
2662     + int count;
2663     +
2664     + ret = hidpp_send_fap_command_sync(hidpp, feature_index,
2665     + CMD_GET_DEVICE_NAME_TYPE_GET_DEVICE_NAME, &char_index, 1,
2666     + &response);
2667     +
2668     + if (ret)
2669     + return -ret;
2670     +
2671     + if (response.report_id == REPORT_ID_HIDPP_LONG)
2672     + count = HIDPP_REPORT_LONG_LENGTH - 4;
2673     + else
2674     + count = HIDPP_REPORT_SHORT_LENGTH - 4;
2675     +
2676     + if (len_buf < count)
2677     + count = len_buf;
2678     +
2679     + for (i = 0; i < count; i++)
2680     + device_name[i] = response.fap.params[i];
2681     +
2682     + return count;
2683     +}
2684     +
2685     +static char *hidpp_get_device_name(struct hidpp_device *hidpp, u8 *name_length)
2686     +{
2687     + u8 feature_type;
2688     + u8 feature_index;
2689     + u8 __name_length;
2690     + char *name;
2691     + unsigned index = 0;
2692     + int ret;
2693     +
2694     + ret = hidpp_root_get_feature(hidpp, HIDPP_PAGE_GET_DEVICE_NAME_TYPE,
2695     + &feature_index, &feature_type);
2696     + if (ret)
2697     + goto out_err;
2698     +
2699     + ret = hidpp_devicenametype_get_count(hidpp, feature_index,
2700     + &__name_length);
2701     + if (ret)
2702     + goto out_err;
2703     +
2704     + name = kzalloc(__name_length + 1, GFP_KERNEL);
2705     + if (!name)
2706     + goto out_err;
2707     +
2708     + *name_length = __name_length + 1;
2709     + while (index < __name_length)
2710     + index += hidpp_devicenametype_get_device_name(hidpp,
2711     + feature_index, index, name + index,
2712     + __name_length - index);
2713     +
2714     + return name;
2715     +
2716     +out_err:
2717     + *name_length = 0;
2718     + return NULL;
2719     +}
2720     +
2721     +/* -------------------------------------------------------------------------- */
2722     +/* 0x6100: TouchPadRawXY */
2723     +/* -------------------------------------------------------------------------- */
2724     +
2725     +#define HIDPP_PAGE_TOUCHPAD_RAW_XY 0x6100
2726     +
2727     +#define CMD_TOUCHPAD_GET_RAW_INFO 0x01
2728     +
2729     +#define TOUCHPAD_RAW_XY_ORIGIN_LOWER_LEFT 0x01
2730     +#define TOUCHPAD_RAW_XY_ORIGIN_UPPER_LEFT 0x03
2731     +
2732     +struct hidpp_touchpad_raw_info {
2733     + u16 x_size;
2734     + u16 y_size;
2735     + u8 z_range;
2736     + u8 area_range;
2737     + u8 timestamp_unit;
2738     + u8 maxcontacts;
2739     + u8 origin;
2740     + u16 res;
2741     +};
2742     +
2743     +struct hidpp_touchpad_raw_xy_finger {
2744     + u8 contact_type;
2745     + u8 contact_status;
2746     + u16 x;
2747     + u16 y;
2748     + u8 z;
2749     + u8 area;
2750     + u8 finger_id;
2751     +};
2752     +
2753     +struct hidpp_touchpad_raw_xy {
2754     + u16 timestamp;
2755     + struct hidpp_touchpad_raw_xy_finger fingers[2];
2756     + u8 spurious_flag;
2757     + u8 end_of_frame;
2758     + u8 finger_count;
2759     + u8 button;
2760     +};
2761     +
2762     +static int hidpp_touchpad_get_raw_info(struct hidpp_device *hidpp,
2763     + u8 feature_index, struct hidpp_touchpad_raw_info *raw_info)
2764     +{
2765     + struct hidpp_report response;
2766     + int ret;
2767     + u8 *params = (u8 *)response.fap.params;
2768     +
2769     + ret = hidpp_send_fap_command_sync(hidpp, feature_index,
2770     + CMD_TOUCHPAD_GET_RAW_INFO, NULL, 0, &response);
2771     +
2772     + if (ret)
2773     + return -ret;
2774     +
2775     + raw_info->x_size = get_unaligned_be16(&params[0]);
2776     + raw_info->y_size = get_unaligned_be16(&params[2]);
2777     + raw_info->z_range = params[4];
2778     + raw_info->area_range = params[5];
2779     + raw_info->maxcontacts = params[7];
2780     + raw_info->origin = params[8];
2781     + /* res is given in unit per inch */
2782     + raw_info->res = get_unaligned_be16(&params[13]) * 2 / 51;
2783     +
2784     + return ret;
2785     +}
2786     +
2787     +/* ************************************************************************** */
2788     +/* */
2789     +/* Device Support */
2790     +/* */
2791     +/* ************************************************************************** */
2792     +
2793     +/* -------------------------------------------------------------------------- */
2794     +/* Touchpad HID++ devices */
2795     +/* -------------------------------------------------------------------------- */
2796     +
2797     +struct wtp_data {
2798     + struct input_dev *input;
2799     + u16 x_size, y_size;
2800     + u8 finger_count;
2801     + u8 mt_feature_index;
2802     + u8 button_feature_index;
2803     + u8 maxcontacts;
2804     + bool flip_y;
2805     + unsigned int resolution;
2806     +};
2807     +
2808     +static int wtp_input_mapping(struct hid_device *hdev, struct hid_input *hi,
2809     + struct hid_field *field, struct hid_usage *usage,
2810     + unsigned long **bit, int *max)
2811     +{
2812     + return -1;
2813     +}
2814     +
2815     +static void wtp_input_configured(struct hid_device *hdev,
2816     + struct hid_input *hidinput)
2817     +{
2818     + struct hidpp_device *hidpp = hid_get_drvdata(hdev);
2819     + struct wtp_data *wd = hidpp->private_data;
2820     + struct input_dev *input_dev = hidinput->input;
2821     +
2822     + __set_bit(EV_ABS, input_dev->evbit);
2823     + __set_bit(EV_KEY, input_dev->evbit);
2824     + __clear_bit(EV_REL, input_dev->evbit);
2825     + __clear_bit(EV_LED, input_dev->evbit);
2826     +
2827     + input_set_abs_params(input_dev, ABS_MT_POSITION_X, 0, wd->x_size, 0, 0);
2828     + input_abs_set_res(input_dev, ABS_MT_POSITION_X, wd->resolution);
2829     + input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0, wd->y_size, 0, 0);
2830     + input_abs_set_res(input_dev, ABS_MT_POSITION_Y, wd->resolution);
2831     +
2832     + /* Max pressure is not given by the devices, pick one */
2833     + input_set_abs_params(input_dev, ABS_MT_PRESSURE, 0, 50, 0, 0);
2834     +
2835     + input_set_capability(input_dev, EV_KEY, BTN_LEFT);
2836     +
2837     + __set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
2838     +
2839     + input_mt_init_slots(input_dev, wd->maxcontacts, INPUT_MT_POINTER |
2840     + INPUT_MT_DROP_UNUSED);
2841     +
2842     + wd->input = input_dev;
2843     +}
2844     +
2845     +static void wtp_touch_event(struct wtp_data *wd,
2846     + struct hidpp_touchpad_raw_xy_finger *touch_report)
2847     +{
2848     + int slot;
2849     +
2850     + if (!touch_report->finger_id || touch_report->contact_type)
2851     + /* no actual data */
2852     + return;
2853     +
2854     + slot = input_mt_get_slot_by_key(wd->input, touch_report->finger_id);
2855     +
2856     + input_mt_slot(wd->input, slot);
2857     + input_mt_report_slot_state(wd->input, MT_TOOL_FINGER,
2858     + touch_report->contact_status);
2859     + if (touch_report->contact_status) {
2860     + input_event(wd->input, EV_ABS, ABS_MT_POSITION_X,
2861     + touch_report->x);
2862     + input_event(wd->input, EV_ABS, ABS_MT_POSITION_Y,
2863     + wd->flip_y ? wd->y_size - touch_report->y :
2864     + touch_report->y);
2865     + input_event(wd->input, EV_ABS, ABS_MT_PRESSURE,
2866     + touch_report->area);
2867     + }
2868     +}
2869     +
2870     +static void wtp_send_raw_xy_event(struct hidpp_device *hidpp,
2871     + struct hidpp_touchpad_raw_xy *raw)
2872     +{
2873     + struct wtp_data *wd = hidpp->private_data;
2874     + int i;
2875     +
2876     + for (i = 0; i < 2; i++)
2877     + wtp_touch_event(wd, &(raw->fingers[i]));
2878     +
2879     + if (raw->end_of_frame)
2880     + input_event(wd->input, EV_KEY, BTN_LEFT, raw->button);
2881     +
2882     + if (raw->end_of_frame || raw->finger_count <= 2) {
2883     + input_mt_sync_frame(wd->input);
2884     + input_sync(wd->input);
2885     + }
2886     +}
2887     +
2888     +static int wtp_mouse_raw_xy_event(struct hidpp_device *hidpp, u8 *data)
2889     +{
2890     + struct wtp_data *wd = hidpp->private_data;
2891     + u8 c1_area = ((data[7] & 0xf) * (data[7] & 0xf) +
2892     + (data[7] >> 4) * (data[7] >> 4)) / 2;
2893     + u8 c2_area = ((data[13] & 0xf) * (data[13] & 0xf) +
2894     + (data[13] >> 4) * (data[13] >> 4)) / 2;
2895     + struct hidpp_touchpad_raw_xy raw = {
2896     + .timestamp = data[1],
2897     + .fingers = {
2898     + {
2899     + .contact_type = 0,
2900     + .contact_status = !!data[7],
2901     + .x = get_unaligned_le16(&data[3]),
2902     + .y = get_unaligned_le16(&data[5]),
2903     + .z = c1_area,
2904     + .area = c1_area,
2905     + .finger_id = data[2],
2906     + }, {
2907     + .contact_type = 0,
2908     + .contact_status = !!data[13],
2909     + .x = get_unaligned_le16(&data[9]),
2910     + .y = get_unaligned_le16(&data[11]),
2911     + .z = c2_area,
2912     + .area = c2_area,
2913     + .finger_id = data[8],
2914     + }
2915     + },
2916     + .finger_count = wd->maxcontacts,
2917     + .spurious_flag = 0,
2918     + .end_of_frame = (data[0] >> 7) == 0,
2919     + .button = data[0] & 0x01,
2920     + };
2921     +
2922     + wtp_send_raw_xy_event(hidpp, &raw);
2923     +
2924     + return 1;
2925     +}
2926     +
2927     +static int wtp_raw_event(struct hid_device *hdev, u8 *data, int size)
2928     +{
2929     + struct hidpp_device *hidpp = hid_get_drvdata(hdev);
2930     + struct wtp_data *wd = hidpp->private_data;
2931     +
2932     + if (!wd || !wd->input || (data[0] != 0x02) || size < 21)
2933     + return 1;
2934     +
2935     + return wtp_mouse_raw_xy_event(hidpp, &data[7]);
2936     +}
2937     +
2938     +static int wtp_get_config(struct hidpp_device *hidpp)
2939     +{
2940     + struct wtp_data *wd = hidpp->private_data;
2941     + struct hidpp_touchpad_raw_info raw_info = {0};
2942     + u8 feature_type;
2943     + int ret;
2944     +
2945     + ret = hidpp_root_get_feature(hidpp, HIDPP_PAGE_TOUCHPAD_RAW_XY,
2946     + &wd->mt_feature_index, &feature_type);
2947     + if (ret)
2948     + /* means that the device is not powered up */
2949     + return ret;
2950     +
2951     + ret = hidpp_touchpad_get_raw_info(hidpp, wd->mt_feature_index,
2952     + &raw_info);
2953     + if (ret)
2954     + return ret;
2955     +
2956     + wd->x_size = raw_info.x_size;
2957     + wd->y_size = raw_info.y_size;
2958     + wd->maxcontacts = raw_info.maxcontacts;
2959     + wd->flip_y = raw_info.origin == TOUCHPAD_RAW_XY_ORIGIN_LOWER_LEFT;
2960     + wd->resolution = raw_info.res;
2961     +
2962     + return 0;
2963     +}
2964     +
2965     +static int wtp_allocate(struct hid_device *hdev, const struct hid_device_id *id)
2966     +{
2967     + struct hidpp_device *hidpp = hid_get_drvdata(hdev);
2968     + struct wtp_data *wd;
2969     +
2970     + wd = devm_kzalloc(&hdev->dev, sizeof(struct wtp_data),
2971     + GFP_KERNEL);
2972     + if (!wd)
2973     + return -ENOMEM;
2974     +
2975     + hidpp->private_data = wd;
2976     +
2977     + return 0;
2978     +};
2979     +
2980     +/* -------------------------------------------------------------------------- */
2981     +/* Generic HID++ devices */
2982     +/* -------------------------------------------------------------------------- */
2983     +
2984     +static int hidpp_input_mapping(struct hid_device *hdev, struct hid_input *hi,
2985     + struct hid_field *field, struct hid_usage *usage,
2986     + unsigned long **bit, int *max)
2987     +{
2988     + struct hidpp_device *hidpp = hid_get_drvdata(hdev);
2989     +
2990     + if (hidpp->quirks & HIDPP_QUIRK_CLASS_WTP)
2991     + return wtp_input_mapping(hdev, hi, field, usage, bit, max);
2992     +
2993     + return 0;
2994     +}
2995     +
2996     +static void hidpp_input_configured(struct hid_device *hdev,
2997     + struct hid_input *hidinput)
2998     +{
2999     + struct hidpp_device *hidpp = hid_get_drvdata(hdev);
3000     +
3001     + if (hidpp->quirks & HIDPP_QUIRK_CLASS_WTP)
3002     + wtp_input_configured(hdev, hidinput);
3003     +}
3004     +
3005     +static int hidpp_raw_hidpp_event(struct hidpp_device *hidpp, u8 *data,
3006     + int size)
3007     +{
3008     + struct hidpp_report *question = hidpp->send_receive_buf;
3009     + struct hidpp_report *answer = hidpp->send_receive_buf;
3010     + struct hidpp_report *report = (struct hidpp_report *)data;
3011     +
3012     + /*
3013     + * If the mutex is locked then we have a pending answer from a
3014     + * previoulsly sent command
3015     + */
3016     + if (unlikely(mutex_is_locked(&hidpp->send_mutex))) {
3017     + /*
3018     + * Check for a correct hidpp20 answer or the corresponding
3019     + * error
3020     + */
3021     + if (hidpp_match_answer(question, report) ||
3022     + hidpp_match_error(question, report)) {
3023     + *answer = *report;
3024     + hidpp->answer_available = true;
3025     + wake_up(&hidpp->wait);
3026     + /*
3027     + * This was an answer to a command that this driver sent
3028     + * We return 1 to hid-core to avoid forwarding the
3029     + * command upstream as it has been treated by the driver
3030     + */
3031     +
3032     + return 1;
3033     + }
3034     + }
3035     +
3036     + if (hidpp->quirks & HIDPP_QUIRK_CLASS_WTP)
3037     + return wtp_raw_event(hidpp->hid_dev, data, size);
3038     +
3039     + return 0;
3040     +}
3041     +
3042     +static int hidpp_raw_event(struct hid_device *hdev, struct hid_report *report,
3043     + u8 *data, int size)
3044     +{
3045     + struct hidpp_device *hidpp = hid_get_drvdata(hdev);
3046     +
3047     + switch (data[0]) {
3048     + case REPORT_ID_HIDPP_LONG:
3049     + if (size != HIDPP_REPORT_LONG_LENGTH) {
3050     + hid_err(hdev, "received hid++ report of bad size (%d)",
3051     + size);
3052     + return 1;
3053     + }
3054     + return hidpp_raw_hidpp_event(hidpp, data, size);
3055     + case REPORT_ID_HIDPP_SHORT:
3056     + if (size != HIDPP_REPORT_SHORT_LENGTH) {
3057     + hid_err(hdev, "received hid++ report of bad size (%d)",
3058     + size);
3059     + return 1;
3060     + }
3061     + return hidpp_raw_hidpp_event(hidpp, data, size);
3062     + }
3063     +
3064     + if (hidpp->quirks & HIDPP_QUIRK_CLASS_WTP)
3065     + return wtp_raw_event(hdev, data, size);
3066     +
3067     + return 0;
3068     +}
3069     +
3070     +static void hidpp_overwrite_name(struct hid_device *hdev)
3071     +{
3072     + struct hidpp_device *hidpp = hid_get_drvdata(hdev);
3073     + char *name;
3074     + u8 name_length;
3075     +
3076     + name = hidpp_get_device_name(hidpp, &name_length);
3077     +
3078     + if (!name)
3079     + hid_err(hdev, "unable to retrieve the name of the device");
3080     + else
3081     + snprintf(hdev->name, sizeof(hdev->name), "%s", name);
3082     +
3083     + kfree(name);
3084     +}
3085     +
3086     +static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)
3087     +{
3088     + struct hidpp_device *hidpp;
3089     + int ret;
3090     + bool connected;
3091     +
3092     + hidpp = devm_kzalloc(&hdev->dev, sizeof(struct hidpp_device),
3093     + GFP_KERNEL);
3094     + if (!hidpp)
3095     + return -ENOMEM;
3096     +
3097     + hidpp->hid_dev = hdev;
3098     + hid_set_drvdata(hdev, hidpp);
3099     +
3100     + hidpp->quirks = id->driver_data;
3101     +
3102     + if (hidpp->quirks & HIDPP_QUIRK_CLASS_WTP) {
3103     + ret = wtp_allocate(hdev, id);
3104     + if (ret)
3105     + return ret;
3106     + }
3107     +
3108     + mutex_init(&hidpp->send_mutex);
3109     + init_waitqueue_head(&hidpp->wait);
3110     +
3111     + ret = hid_parse(hdev);
3112     + if (ret) {
3113     + hid_err(hdev, "%s:parse failed\n", __func__);
3114     + goto hid_parse_fail;
3115     + }
3116     +
3117     + /* Allow incoming packets */
3118     + hid_device_io_start(hdev);
3119     +
3120     + connected = hidpp_is_connected(hidpp);
3121     + if (!connected) {
3122     + hid_err(hdev, "Device not connected");
3123     + goto hid_parse_fail;
3124     + }
3125     +
3126     + /* the device is connected, we can ask for its name */
3127     + hid_info(hdev, "HID++ %u.%u device connected.\n",
3128     + hidpp->protocol_major, hidpp->protocol_minor);
3129     + hidpp_overwrite_name(hdev);
3130     +
3131     + if (hidpp->quirks & HIDPP_QUIRK_CLASS_WTP) {
3132     + ret = wtp_get_config(hidpp);
3133     + if (ret)
3134     + goto hid_parse_fail;
3135     + }
3136     +
3137     + /* Block incoming packets */
3138     + hid_device_io_stop(hdev);
3139     +
3140     + ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
3141     + if (ret) {
3142     + hid_err(hdev, "%s:hid_hw_start returned error\n", __func__);
3143     + goto hid_hw_start_fail;
3144     + }
3145     +
3146     + return ret;
3147     +
3148     +hid_hw_start_fail:
3149     +hid_parse_fail:
3150     + mutex_destroy(&hidpp->send_mutex);
3151     + hid_set_drvdata(hdev, NULL);
3152     + return ret;
3153     +}
3154     +
3155     +static void hidpp_remove(struct hid_device *hdev)
3156     +{
3157     + struct hidpp_device *hidpp = hid_get_drvdata(hdev);
3158     +
3159     + mutex_destroy(&hidpp->send_mutex);
3160     + hid_hw_stop(hdev);
3161     +}
3162     +
3163     +static const struct hid_device_id hidpp_devices[] = {
3164     + { /* wireless touchpad T651 */
3165     + HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH,
3166     + USB_DEVICE_ID_LOGITECH_T651),
3167     + .driver_data = HIDPP_QUIRK_CLASS_WTP },
3168     + {}
3169     +};
3170     +
3171     +MODULE_DEVICE_TABLE(hid, hidpp_devices);
3172     +
3173     +static struct hid_driver hidpp_driver = {
3174     + .name = "logitech-hidpp-device",
3175     + .id_table = hidpp_devices,
3176     + .probe = hidpp_probe,
3177     + .remove = hidpp_remove,
3178     + .raw_event = hidpp_raw_event,
3179     + .input_configured = hidpp_input_configured,
3180     + .input_mapping = hidpp_input_mapping,
3181     +};
3182     +
3183     +module_hid_driver(hidpp_driver);
3184     diff --git a/drivers/hid/hid-microsoft.c b/drivers/hid/hid-microsoft.c
3185     index 8ba17a946f2a..0dbc2a0c25c0 100644
3186     --- a/drivers/hid/hid-microsoft.c
3187     +++ b/drivers/hid/hid-microsoft.c
3188     @@ -264,6 +264,8 @@ static const struct hid_device_id ms_devices[] = {
3189     .driver_data = MS_ERGONOMY },
3190     { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K_JP),
3191     .driver_data = MS_ERGONOMY },
3192     + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE7K),
3193     + .driver_data = MS_ERGONOMY },
3194     { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_LK6K),
3195     .driver_data = MS_ERGONOMY | MS_RDESC },
3196     { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_USB),
3197     diff --git a/drivers/hid/hid-saitek.c b/drivers/hid/hid-saitek.c
3198     index 69cca1476a0c..ccd14204861f 100644
3199     --- a/drivers/hid/hid-saitek.c
3200     +++ b/drivers/hid/hid-saitek.c
3201     @@ -177,6 +177,8 @@ static int saitek_event(struct hid_device *hdev, struct hid_field *field,
3202     static const struct hid_device_id saitek_devices[] = {
3203     { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_PS1000),
3204     .driver_data = SAITEK_FIX_PS1000 },
3205     + { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7_OLD),
3206     + .driver_data = SAITEK_RELEASE_MODE_RAT7 },
3207     { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7),
3208     .driver_data = SAITEK_RELEASE_MODE_RAT7 },
3209     { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_MMO7),
3210     diff --git a/drivers/hid/hid-sjoy.c b/drivers/hid/hid-sjoy.c
3211     index 37845eccddb5..36b6470af947 100644
3212     --- a/drivers/hid/hid-sjoy.c
3213     +++ b/drivers/hid/hid-sjoy.c
3214     @@ -166,6 +166,9 @@ static const struct hid_device_id sjoy_devices[] = {
3215     { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_DUAL_USB_JOYPAD),
3216     .driver_data = HID_QUIRK_MULTI_INPUT |
3217     HID_QUIRK_SKIP_OUTPUT_REPORTS },
3218     + { HID_USB_DEVICE(USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII),
3219     + .driver_data = HID_QUIRK_MULTI_INPUT |
3220     + HID_QUIRK_SKIP_OUTPUT_REPORTS },
3221     { }
3222     };
3223     MODULE_DEVICE_TABLE(hid, sjoy_devices);
3224     diff --git a/drivers/hid/hid-uclogic.c b/drivers/hid/hid-uclogic.c
3225     index fb8b516ff0ed..22dccce6a85c 100644
3226     --- a/drivers/hid/hid-uclogic.c
3227     +++ b/drivers/hid/hid-uclogic.c
3228     @@ -626,6 +626,32 @@ static __u8 *uclogic_report_fixup(struct hid_device *hdev, __u8 *rdesc,
3229     return rdesc;
3230     }
3231    
3232     +static int uclogic_probe(struct hid_device *hdev,
3233     + const struct hid_device_id *id)
3234     +{
3235     + int rc;
3236     +
3237     + /*
3238     + * libinput requires the pad interface to be on a different node
3239     + * than the pen, so use QUIRK_MULTI_INPUT for all tablets.
3240     + */
3241     + hdev->quirks |= HID_QUIRK_MULTI_INPUT;
3242     +
3243     + rc = hid_parse(hdev);
3244     + if (rc) {
3245     + hid_err(hdev, "parse failed\n");
3246     + return rc;
3247     + }
3248     +
3249     + rc = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
3250     + if (rc) {
3251     + hid_err(hdev, "hw start failed\n");
3252     + return rc;
3253     + }
3254     +
3255     + return 0;
3256     +}
3257     +
3258     static const struct hid_device_id uclogic_devices[] = {
3259     { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC,
3260     USB_DEVICE_ID_UCLOGIC_TABLET_PF1209) },
3261     @@ -648,6 +674,7 @@ MODULE_DEVICE_TABLE(hid, uclogic_devices);
3262     static struct hid_driver uclogic_driver = {
3263     .name = "uclogic",
3264     .id_table = uclogic_devices,
3265     + .probe = uclogic_probe,
3266     .report_fixup = uclogic_report_fixup,
3267     };
3268     module_hid_driver(uclogic_driver);
3269     diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
3270     index 4477eb7457de..509dee2e9b72 100644
3271     --- a/drivers/hid/usbhid/hid-quirks.c
3272     +++ b/drivers/hid/usbhid/hid-quirks.c
3273     @@ -52,7 +52,6 @@ static const struct hid_blacklist {
3274     { USB_VENDOR_ID_ETURBOTOUCH, USB_DEVICE_ID_ETURBOTOUCH_2968, HID_QUIRK_MULTI_INPUT },
3275     { USB_VENDOR_ID_GREENASIA, USB_DEVICE_ID_GREENASIA_DUAL_USB_JOYPAD, HID_QUIRK_MULTI_INPUT },
3276     { USB_VENDOR_ID_PANTHERLORD, USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK, HID_QUIRK_MULTI_INPUT | HID_QUIRK_SKIP_OUTPUT_REPORTS },
3277     - { USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII, HID_QUIRK_MULTI_INPUT },
3278     { USB_VENDOR_ID_TOUCHPACK, USB_DEVICE_ID_TOUCHPACK_RTS, HID_QUIRK_MULTI_INPUT },
3279    
3280     { USB_VENDOR_ID_AIREN, USB_DEVICE_ID_AIREN_SLIMPLUS, HID_QUIRK_NOGET },
3281     @@ -61,6 +60,7 @@ static const struct hid_blacklist {
3282     { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET },
3283     { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM, HID_QUIRK_NOGET },
3284     { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC, HID_QUIRK_NOGET },
3285     + { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS682, HID_QUIRK_NOGET },
3286     { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FIGHTERSTICK, HID_QUIRK_NOGET },
3287     { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_COMBATSTICK, HID_QUIRK_NOGET },
3288     { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YOKE, HID_QUIRK_NOGET },
3289     @@ -78,6 +78,13 @@ static const struct hid_blacklist {
3290     { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
3291     { USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
3292     { USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
3293     + { USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0A4A, HID_QUIRK_ALWAYS_POLL },
3294     + { USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0B4A, HID_QUIRK_ALWAYS_POLL },
3295     + { USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
3296     + { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C077, HID_QUIRK_ALWAYS_POLL },
3297     + { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C01A, HID_QUIRK_ALWAYS_POLL },
3298     + { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C05A, HID_QUIRK_ALWAYS_POLL },
3299     + { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C06A, HID_QUIRK_ALWAYS_POLL },
3300     { USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS, HID_QUIRK_NOGET },
3301     { USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL, HID_QUIRK_NO_INIT_REPORTS },
3302     { USB_VENDOR_ID_NEXIO, USB_DEVICE_ID_NEXIO_MULTITOUCH_PTI0750, HID_QUIRK_NO_INIT_REPORTS },
3303     @@ -89,6 +96,7 @@ static const struct hid_blacklist {
3304     { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NO_INIT_REPORTS },
3305     { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1, HID_QUIRK_NO_INIT_REPORTS },
3306     { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2, HID_QUIRK_NO_INIT_REPORTS },
3307     + { USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_MOUSE_4D22, HID_QUIRK_ALWAYS_POLL },
3308     { USB_VENDOR_ID_PRODIGE, USB_DEVICE_ID_PRODIGE_CORDLESS, HID_QUIRK_NOGET },
3309     { USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001, HID_QUIRK_NOGET },
3310     { USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008, HID_QUIRK_NOGET },
3311     @@ -104,12 +112,8 @@ static const struct hid_blacklist {
3312     { USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_2, HID_QUIRK_NOGET },
3313     { USB_VENDOR_ID_TPV, USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN, HID_QUIRK_NOGET },
3314     { USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_KEYBOARD, HID_QUIRK_NOGET },
3315     - { USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_PF1209, HID_QUIRK_MULTI_INPUT },
3316     - { USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP4030U, HID_QUIRK_MULTI_INPUT },
3317     { USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_KNA5, HID_QUIRK_MULTI_INPUT },
3318     { USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_TWA60, HID_QUIRK_MULTI_INPUT },
3319     - { USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP5540U, HID_QUIRK_MULTI_INPUT },
3320     - { USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP8060U, HID_QUIRK_MULTI_INPUT },
3321     { USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_10_6_INCH, HID_QUIRK_MULTI_INPUT },
3322     { USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_14_1_INCH, HID_QUIRK_MULTI_INPUT },
3323     { USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTERY_FREE_TABLET, HID_QUIRK_MULTI_INPUT },
3324     @@ -125,6 +129,7 @@ static const struct hid_blacklist {
3325     { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X, HID_QUIRK_MULTI_INPUT },
3326     { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2, HID_QUIRK_MULTI_INPUT },
3327     { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X, HID_QUIRK_MULTI_INPUT },
3328     + { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_PENSKETCH_M912, HID_QUIRK_MULTI_INPUT },
3329     { USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_DUOSENSE, HID_QUIRK_NO_INIT_REPORTS },
3330     { USB_VENDOR_ID_SEMICO, USB_DEVICE_ID_SEMICO_USB_KEYKOARD, HID_QUIRK_NO_INIT_REPORTS },
3331     { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS1, HID_QUIRK_NO_INIT_REPORTS },
3332     @@ -133,6 +138,9 @@ static const struct hid_blacklist {
3333     { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_QUAD_HD, HID_QUIRK_NO_INIT_REPORTS },
3334     { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_TP_V103, HID_QUIRK_NO_INIT_REPORTS },
3335     { USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD_A096, HID_QUIRK_NO_INIT_INPUT_REPORTS },
3336     + { USB_VENDOR_ID_MULTIPLE_1781, USB_DEVICE_ID_RAPHNET_4NES4SNES_OLD, HID_QUIRK_MULTI_INPUT },
3337     + { USB_VENDOR_ID_DRACAL_RAPHNET, USB_DEVICE_ID_RAPHNET_2NES2SNES, HID_QUIRK_MULTI_INPUT },
3338     + { USB_VENDOR_ID_DRACAL_RAPHNET, USB_DEVICE_ID_RAPHNET_4NES4SNES, HID_QUIRK_MULTI_INPUT },
3339    
3340     { 0, 0 }
3341     };
3342     diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
3343     index 0ff89b2ecdb5..3d1fc736a420 100644
3344     --- a/drivers/iommu/intel-iommu.c
3345     +++ b/drivers/iommu/intel-iommu.c
3346     @@ -50,6 +50,7 @@
3347     #define CONTEXT_SIZE VTD_PAGE_SIZE
3348    
3349     #define IS_GFX_DEVICE(pdev) ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY)
3350     +#define IS_USB_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_SERIAL_USB)
3351     #define IS_ISA_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_BRIDGE_ISA)
3352     #define IS_AZALIA(pdev) ((pdev)->vendor == 0x8086 && (pdev)->device == 0x3a3e)
3353    
3354     @@ -2558,6 +2559,10 @@ static bool device_has_rmrr(struct device *dev)
3355     * In both cases we assume that PCI USB devices with RMRRs have them largely
3356     * for historical reasons and that the RMRR space is not actively used post
3357     * boot. This exclusion may change if vendors begin to abuse it.
3358     + *
3359     + * The same exception is made for graphics devices, with the requirement that
3360     + * any use of the RMRR regions will be torn down before assigning the device
3361     + * to a guest.
3362     */
3363     static bool device_is_rmrr_locked(struct device *dev)
3364     {
3365     @@ -2567,7 +2572,7 @@ static bool device_is_rmrr_locked(struct device *dev)
3366     if (dev_is_pci(dev)) {
3367     struct pci_dev *pdev = to_pci_dev(dev);
3368    
3369     - if ((pdev->class >> 8) == PCI_CLASS_SERIAL_USB)
3370     + if (IS_USB_DEVICE(pdev) || IS_GFX_DEVICE(pdev))
3371     return false;
3372     }
3373    
3374     diff --git a/drivers/lguest/x86/core.c b/drivers/lguest/x86/core.c
3375     index 922a1acbf652..6adfd7ba4c97 100644
3376     --- a/drivers/lguest/x86/core.c
3377     +++ b/drivers/lguest/x86/core.c
3378     @@ -47,6 +47,7 @@
3379     #include <asm/lguest.h>
3380     #include <asm/uaccess.h>
3381     #include <asm/i387.h>
3382     +#include <asm/tlbflush.h>
3383     #include "../lg.h"
3384    
3385     static int cpu_had_pge;
3386     @@ -452,9 +453,9 @@ void lguest_arch_handle_trap(struct lg_cpu *cpu)
3387     static void adjust_pge(void *on)
3388     {
3389     if (on)
3390     - write_cr4(read_cr4() | X86_CR4_PGE);
3391     + cr4_set_bits(X86_CR4_PGE);
3392     else
3393     - write_cr4(read_cr4() & ~X86_CR4_PGE);
3394     + cr4_clear_bits(X86_CR4_PGE);
3395     }
3396    
3397     /*H:020
3398     diff --git a/drivers/media/dvb-frontends/a8293.h b/drivers/media/dvb-frontends/a8293.h
3399     index b6ef6427cfa5..5f0411939ffc 100644
3400     --- a/drivers/media/dvb-frontends/a8293.h
3401     +++ b/drivers/media/dvb-frontends/a8293.h
3402     @@ -27,7 +27,7 @@ struct a8293_config {
3403     u8 i2c_addr;
3404     };
3405    
3406     -#if IS_ENABLED(CONFIG_DVB_A8293)
3407     +#if IS_REACHABLE(CONFIG_DVB_A8293)
3408     extern struct dvb_frontend *a8293_attach(struct dvb_frontend *fe,
3409     struct i2c_adapter *i2c, const struct a8293_config *cfg);
3410     #else
3411     diff --git a/drivers/media/dvb-frontends/af9013.h b/drivers/media/dvb-frontends/af9013.h
3412     index 09273b2cd310..1dcc936e1661 100644
3413     --- a/drivers/media/dvb-frontends/af9013.h
3414     +++ b/drivers/media/dvb-frontends/af9013.h
3415     @@ -103,7 +103,7 @@ struct af9013_config {
3416     u8 gpio[4];
3417     };
3418    
3419     -#if IS_ENABLED(CONFIG_DVB_AF9013)
3420     +#if IS_REACHABLE(CONFIG_DVB_AF9013)
3421     extern struct dvb_frontend *af9013_attach(const struct af9013_config *config,
3422     struct i2c_adapter *i2c);
3423     #else
3424     diff --git a/drivers/media/dvb-frontends/atbm8830.h b/drivers/media/dvb-frontends/atbm8830.h
3425     index 8e0ac98f8d08..5446d13fdfe8 100644
3426     --- a/drivers/media/dvb-frontends/atbm8830.h
3427     +++ b/drivers/media/dvb-frontends/atbm8830.h
3428     @@ -61,7 +61,7 @@ struct atbm8830_config {
3429     u8 agc_hold_loop;
3430     };
3431    
3432     -#if IS_ENABLED(CONFIG_DVB_ATBM8830)
3433     +#if IS_REACHABLE(CONFIG_DVB_ATBM8830)
3434     extern struct dvb_frontend *atbm8830_attach(const struct atbm8830_config *config,
3435     struct i2c_adapter *i2c);
3436     #else
3437     diff --git a/drivers/media/dvb-frontends/au8522.h b/drivers/media/dvb-frontends/au8522.h
3438     index 83fe9a615619..5f48bd4fc51d 100644
3439     --- a/drivers/media/dvb-frontends/au8522.h
3440     +++ b/drivers/media/dvb-frontends/au8522.h
3441     @@ -61,7 +61,7 @@ struct au8522_config {
3442     enum au8522_if_freq qam_if;
3443     };
3444    
3445     -#if IS_ENABLED(CONFIG_DVB_AU8522_DTV)
3446     +#if IS_REACHABLE(CONFIG_DVB_AU8522_DTV)
3447     extern struct dvb_frontend *au8522_attach(const struct au8522_config *config,
3448     struct i2c_adapter *i2c);
3449     #else
3450     diff --git a/drivers/media/dvb-frontends/bcm3510.h b/drivers/media/dvb-frontends/bcm3510.h
3451     index 5bd56b1623bf..ff66492fb940 100644
3452     --- a/drivers/media/dvb-frontends/bcm3510.h
3453     +++ b/drivers/media/dvb-frontends/bcm3510.h
3454     @@ -34,7 +34,7 @@ struct bcm3510_config
3455     int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name);
3456     };
3457    
3458     -#if IS_ENABLED(CONFIG_DVB_BCM3510)
3459     +#if IS_REACHABLE(CONFIG_DVB_BCM3510)
3460     extern struct dvb_frontend* bcm3510_attach(const struct bcm3510_config* config,
3461     struct i2c_adapter* i2c);
3462     #else
3463     diff --git a/drivers/media/dvb-frontends/cx22700.h b/drivers/media/dvb-frontends/cx22700.h
3464     index 382a7b1f3618..e0a764868e6f 100644
3465     --- a/drivers/media/dvb-frontends/cx22700.h
3466     +++ b/drivers/media/dvb-frontends/cx22700.h
3467     @@ -31,7 +31,7 @@ struct cx22700_config
3468     u8 demod_address;
3469     };
3470    
3471     -#if IS_ENABLED(CONFIG_DVB_CX22700)
3472     +#if IS_REACHABLE(CONFIG_DVB_CX22700)
3473     extern struct dvb_frontend* cx22700_attach(const struct cx22700_config* config,
3474     struct i2c_adapter* i2c);
3475     #else
3476     diff --git a/drivers/media/dvb-frontends/cx22702.h b/drivers/media/dvb-frontends/cx22702.h
3477     index 0b1a6c2f9d5f..68b69a7660d2 100644
3478     --- a/drivers/media/dvb-frontends/cx22702.h
3479     +++ b/drivers/media/dvb-frontends/cx22702.h
3480     @@ -41,7 +41,7 @@ struct cx22702_config {
3481     u8 output_mode;
3482     };
3483    
3484     -#if IS_ENABLED(CONFIG_DVB_CX22702)
3485     +#if IS_REACHABLE(CONFIG_DVB_CX22702)
3486     extern struct dvb_frontend *cx22702_attach(
3487     const struct cx22702_config *config,
3488     struct i2c_adapter *i2c);
3489     diff --git a/drivers/media/dvb-frontends/cx24110.h b/drivers/media/dvb-frontends/cx24110.h
3490     index 527aff1f2723..d5453ed20b28 100644
3491     --- a/drivers/media/dvb-frontends/cx24110.h
3492     +++ b/drivers/media/dvb-frontends/cx24110.h
3493     @@ -46,7 +46,7 @@ static inline int cx24110_pll_write(struct dvb_frontend *fe, u32 val)
3494     return 0;
3495     }
3496    
3497     -#if IS_ENABLED(CONFIG_DVB_CX24110)
3498     +#if IS_REACHABLE(CONFIG_DVB_CX24110)
3499     extern struct dvb_frontend* cx24110_attach(const struct cx24110_config* config,
3500     struct i2c_adapter* i2c);
3501     #else
3502     diff --git a/drivers/media/dvb-frontends/cx24113.h b/drivers/media/dvb-frontends/cx24113.h
3503     index 782711ba1a32..962919b9b6e6 100644
3504     --- a/drivers/media/dvb-frontends/cx24113.h
3505     +++ b/drivers/media/dvb-frontends/cx24113.h
3506     @@ -32,7 +32,7 @@ struct cx24113_config {
3507     u32 xtal_khz;
3508     };
3509    
3510     -#if IS_ENABLED(CONFIG_DVB_TUNER_CX24113)
3511     +#if IS_REACHABLE(CONFIG_DVB_TUNER_CX24113)
3512     extern struct dvb_frontend *cx24113_attach(struct dvb_frontend *,
3513     const struct cx24113_config *config, struct i2c_adapter *i2c);
3514    
3515     diff --git a/drivers/media/dvb-frontends/cx24116.h b/drivers/media/dvb-frontends/cx24116.h
3516     index 2ec84fae3f9f..f6dbabc1d62b 100644
3517     --- a/drivers/media/dvb-frontends/cx24116.h
3518     +++ b/drivers/media/dvb-frontends/cx24116.h
3519     @@ -41,7 +41,7 @@ struct cx24116_config {
3520     u16 i2c_wr_max;
3521     };
3522    
3523     -#if IS_ENABLED(CONFIG_DVB_CX24116)
3524     +#if IS_REACHABLE(CONFIG_DVB_CX24116)
3525     extern struct dvb_frontend *cx24116_attach(
3526     const struct cx24116_config *config,
3527     struct i2c_adapter *i2c);
3528     diff --git a/drivers/media/dvb-frontends/cx24117.h b/drivers/media/dvb-frontends/cx24117.h
3529     index 4e59e9574fa7..1648ab432168 100644
3530     --- a/drivers/media/dvb-frontends/cx24117.h
3531     +++ b/drivers/media/dvb-frontends/cx24117.h
3532     @@ -30,7 +30,7 @@ struct cx24117_config {
3533     u8 demod_address;
3534     };
3535    
3536     -#if IS_ENABLED(CONFIG_DVB_CX24117)
3537     +#if IS_REACHABLE(CONFIG_DVB_CX24117)
3538     extern struct dvb_frontend *cx24117_attach(
3539     const struct cx24117_config *config,
3540     struct i2c_adapter *i2c);
3541     diff --git a/drivers/media/dvb-frontends/cx24123.h b/drivers/media/dvb-frontends/cx24123.h
3542     index 102e70d17c43..758aee5a072f 100644
3543     --- a/drivers/media/dvb-frontends/cx24123.h
3544     +++ b/drivers/media/dvb-frontends/cx24123.h
3545     @@ -39,7 +39,7 @@ struct cx24123_config {
3546     void (*agc_callback) (struct dvb_frontend *);
3547     };
3548    
3549     -#if IS_ENABLED(CONFIG_DVB_CX24123)
3550     +#if IS_REACHABLE(CONFIG_DVB_CX24123)
3551     extern struct dvb_frontend *cx24123_attach(const struct cx24123_config *config,
3552     struct i2c_adapter *i2c);
3553     extern struct i2c_adapter *cx24123_get_tuner_i2c_adapter(struct dvb_frontend *);
3554     diff --git a/drivers/media/dvb-frontends/cxd2820r.h b/drivers/media/dvb-frontends/cxd2820r.h
3555     index 6095dbcf7850..56d42760263d 100644
3556     --- a/drivers/media/dvb-frontends/cxd2820r.h
3557     +++ b/drivers/media/dvb-frontends/cxd2820r.h
3558     @@ -72,7 +72,7 @@ struct cxd2820r_config {
3559     };
3560    
3561    
3562     -#if IS_ENABLED(CONFIG_DVB_CXD2820R)
3563     +#if IS_REACHABLE(CONFIG_DVB_CXD2820R)
3564     extern struct dvb_frontend *cxd2820r_attach(
3565     const struct cxd2820r_config *config,
3566     struct i2c_adapter *i2c,
3567     diff --git a/drivers/media/dvb-frontends/dib0070.h b/drivers/media/dvb-frontends/dib0070.h
3568     index 0c6befcc9143..6c0b6672b1d9 100644
3569     --- a/drivers/media/dvb-frontends/dib0070.h
3570     +++ b/drivers/media/dvb-frontends/dib0070.h
3571     @@ -48,7 +48,7 @@ struct dib0070_config {
3572     u8 vga_filter;
3573     };
3574    
3575     -#if IS_ENABLED(CONFIG_DVB_TUNER_DIB0070)
3576     +#if IS_REACHABLE(CONFIG_DVB_TUNER_DIB0070)
3577     extern struct dvb_frontend *dib0070_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct dib0070_config *cfg);
3578     extern u16 dib0070_wbd_offset(struct dvb_frontend *);
3579     extern void dib0070_ctrl_agc_filter(struct dvb_frontend *, u8 open);
3580     diff --git a/drivers/media/dvb-frontends/dib0090.h b/drivers/media/dvb-frontends/dib0090.h
3581     index 6a090954fa10..ad74bc823f08 100644
3582     --- a/drivers/media/dvb-frontends/dib0090.h
3583     +++ b/drivers/media/dvb-frontends/dib0090.h
3584     @@ -75,7 +75,7 @@ struct dib0090_config {
3585     u8 force_crystal_mode;
3586     };
3587    
3588     -#if IS_ENABLED(CONFIG_DVB_TUNER_DIB0090)
3589     +#if IS_REACHABLE(CONFIG_DVB_TUNER_DIB0090)
3590     extern struct dvb_frontend *dib0090_register(struct dvb_frontend *fe, struct i2c_adapter *i2c, const struct dib0090_config *config);
3591     extern struct dvb_frontend *dib0090_fw_register(struct dvb_frontend *fe, struct i2c_adapter *i2c, const struct dib0090_config *config);
3592     extern void dib0090_dcc_freq(struct dvb_frontend *fe, u8 fast);
3593     diff --git a/drivers/media/dvb-frontends/dib3000.h b/drivers/media/dvb-frontends/dib3000.h
3594     index 9b6c3bbc983a..6ae9899b5b45 100644
3595     --- a/drivers/media/dvb-frontends/dib3000.h
3596     +++ b/drivers/media/dvb-frontends/dib3000.h
3597     @@ -41,7 +41,7 @@ struct dib_fe_xfer_ops
3598     int (*tuner_pass_ctrl)(struct dvb_frontend *fe, int onoff, u8 pll_ctrl);
3599     };
3600    
3601     -#if IS_ENABLED(CONFIG_DVB_DIB3000MB)
3602     +#if IS_REACHABLE(CONFIG_DVB_DIB3000MB)
3603     extern struct dvb_frontend* dib3000mb_attach(const struct dib3000_config* config,
3604     struct i2c_adapter* i2c, struct dib_fe_xfer_ops *xfer_ops);
3605     #else
3606     diff --git a/drivers/media/dvb-frontends/dib3000mc.h b/drivers/media/dvb-frontends/dib3000mc.h
3607     index 129d1425516a..74816f793611 100644
3608     --- a/drivers/media/dvb-frontends/dib3000mc.h
3609     +++ b/drivers/media/dvb-frontends/dib3000mc.h
3610     @@ -41,7 +41,7 @@ struct dib3000mc_config {
3611     #define DEFAULT_DIB3000MC_I2C_ADDRESS 16
3612     #define DEFAULT_DIB3000P_I2C_ADDRESS 24
3613    
3614     -#if IS_ENABLED(CONFIG_DVB_DIB3000MC)
3615     +#if IS_REACHABLE(CONFIG_DVB_DIB3000MC)
3616     extern struct dvb_frontend *dib3000mc_attach(struct i2c_adapter *i2c_adap,
3617     u8 i2c_addr,
3618     struct dib3000mc_config *cfg);
3619     diff --git a/drivers/media/dvb-frontends/dib7000m.h b/drivers/media/dvb-frontends/dib7000m.h
3620     index b585413f9a29..6468c278cc4d 100644
3621     --- a/drivers/media/dvb-frontends/dib7000m.h
3622     +++ b/drivers/media/dvb-frontends/dib7000m.h
3623     @@ -40,7 +40,7 @@ struct dib7000m_config {
3624    
3625     #define DEFAULT_DIB7000M_I2C_ADDRESS 18
3626    
3627     -#if IS_ENABLED(CONFIG_DVB_DIB7000M)
3628     +#if IS_REACHABLE(CONFIG_DVB_DIB7000M)
3629     extern struct dvb_frontend *dib7000m_attach(struct i2c_adapter *i2c_adap,
3630     u8 i2c_addr,
3631     struct dib7000m_config *cfg);
3632     diff --git a/drivers/media/dvb-frontends/dib7000p.h b/drivers/media/dvb-frontends/dib7000p.h
3633     index 1fea0e972654..baa278928cf3 100644
3634     --- a/drivers/media/dvb-frontends/dib7000p.h
3635     +++ b/drivers/media/dvb-frontends/dib7000p.h
3636     @@ -66,7 +66,7 @@ struct dib7000p_ops {
3637     struct dvb_frontend *(*init)(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib7000p_config *cfg);
3638     };
3639    
3640     -#if IS_ENABLED(CONFIG_DVB_DIB7000P)
3641     +#if IS_REACHABLE(CONFIG_DVB_DIB7000P)
3642     void *dib7000p_attach(struct dib7000p_ops *ops);
3643     #else
3644     static inline void *dib7000p_attach(struct dib7000p_ops *ops)
3645     diff --git a/drivers/media/dvb-frontends/dib8000.h b/drivers/media/dvb-frontends/dib8000.h
3646     index 84cc10383dcd..780c37bdcb72 100644
3647     --- a/drivers/media/dvb-frontends/dib8000.h
3648     +++ b/drivers/media/dvb-frontends/dib8000.h
3649     @@ -63,7 +63,7 @@ struct dib8000_ops {
3650     struct dvb_frontend *(*init)(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib8000_config *cfg);
3651     };
3652    
3653     -#if IS_ENABLED(CONFIG_DVB_DIB8000)
3654     +#if IS_REACHABLE(CONFIG_DVB_DIB8000)
3655     void *dib8000_attach(struct dib8000_ops *ops);
3656     #else
3657     static inline int dib8000_attach(struct dib8000_ops *ops)
3658     diff --git a/drivers/media/dvb-frontends/dib9000.h b/drivers/media/dvb-frontends/dib9000.h
3659     index f3639f045ff0..b10a70aa7c9f 100644
3660     --- a/drivers/media/dvb-frontends/dib9000.h
3661     +++ b/drivers/media/dvb-frontends/dib9000.h
3662     @@ -27,7 +27,7 @@ struct dib9000_config {
3663    
3664     #define DEFAULT_DIB9000_I2C_ADDRESS 18
3665    
3666     -#if IS_ENABLED(CONFIG_DVB_DIB9000)
3667     +#if IS_REACHABLE(CONFIG_DVB_DIB9000)
3668     extern struct dvb_frontend *dib9000_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, const struct dib9000_config *cfg);
3669     extern int dib9000_i2c_enumeration(struct i2c_adapter *host, int no_of_demods, u8 default_addr, u8 first_addr);
3670     extern struct i2c_adapter *dib9000_get_tuner_interface(struct dvb_frontend *fe);
3671     diff --git a/drivers/media/dvb-frontends/drxd.h b/drivers/media/dvb-frontends/drxd.h
3672     index d998e4d5a7fc..a47c22d6667e 100644
3673     --- a/drivers/media/dvb-frontends/drxd.h
3674     +++ b/drivers/media/dvb-frontends/drxd.h
3675     @@ -52,7 +52,7 @@ struct drxd_config {
3676     s16(*osc_deviation) (void *priv, s16 dev, int flag);
3677     };
3678    
3679     -#if IS_ENABLED(CONFIG_DVB_DRXD)
3680     +#if IS_REACHABLE(CONFIG_DVB_DRXD)
3681     extern
3682     struct dvb_frontend *drxd_attach(const struct drxd_config *config,
3683     void *priv, struct i2c_adapter *i2c,
3684     diff --git a/drivers/media/dvb-frontends/drxk.h b/drivers/media/dvb-frontends/drxk.h
3685     index f6cb34660327..8f0b9eec528f 100644
3686     --- a/drivers/media/dvb-frontends/drxk.h
3687     +++ b/drivers/media/dvb-frontends/drxk.h
3688     @@ -51,7 +51,7 @@ struct drxk_config {
3689     int qam_demod_parameter_count;
3690     };
3691    
3692     -#if IS_ENABLED(CONFIG_DVB_DRXK)
3693     +#if IS_REACHABLE(CONFIG_DVB_DRXK)
3694     extern struct dvb_frontend *drxk_attach(const struct drxk_config *config,
3695     struct i2c_adapter *i2c);
3696     #else
3697     diff --git a/drivers/media/dvb-frontends/ds3000.h b/drivers/media/dvb-frontends/ds3000.h
3698     index f9c21fb7af13..153169da9017 100644
3699     --- a/drivers/media/dvb-frontends/ds3000.h
3700     +++ b/drivers/media/dvb-frontends/ds3000.h
3701     @@ -35,7 +35,7 @@ struct ds3000_config {
3702     void (*set_lock_led)(struct dvb_frontend *fe, int offon);
3703     };
3704    
3705     -#if IS_ENABLED(CONFIG_DVB_DS3000)
3706     +#if IS_REACHABLE(CONFIG_DVB_DS3000)
3707     extern struct dvb_frontend *ds3000_attach(const struct ds3000_config *config,
3708     struct i2c_adapter *i2c);
3709     #else
3710     diff --git a/drivers/media/dvb-frontends/dvb-pll.h b/drivers/media/dvb-frontends/dvb-pll.h
3711     index f4b5a0601c3a..bf9602a88b6c 100644
3712     --- a/drivers/media/dvb-frontends/dvb-pll.h
3713     +++ b/drivers/media/dvb-frontends/dvb-pll.h
3714     @@ -38,7 +38,7 @@
3715     * @param pll_desc_id dvb_pll_desc to use.
3716     * @return Frontend pointer on success, NULL on failure
3717     */
3718     -#if IS_ENABLED(CONFIG_DVB_PLL)
3719     +#if IS_REACHABLE(CONFIG_DVB_PLL)
3720     extern struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
3721     int pll_addr,
3722     struct i2c_adapter *i2c,
3723     diff --git a/drivers/media/dvb-frontends/dvb_dummy_fe.h b/drivers/media/dvb-frontends/dvb_dummy_fe.h
3724     index 0cbf96105631..15e4ceab869a 100644
3725     --- a/drivers/media/dvb-frontends/dvb_dummy_fe.h
3726     +++ b/drivers/media/dvb-frontends/dvb_dummy_fe.h
3727     @@ -26,7 +26,7 @@
3728     #include <linux/dvb/frontend.h>
3729     #include "dvb_frontend.h"
3730    
3731     -#if IS_ENABLED(CONFIG_DVB_DUMMY_FE)
3732     +#if IS_REACHABLE(CONFIG_DVB_DUMMY_FE)
3733     extern struct dvb_frontend* dvb_dummy_fe_ofdm_attach(void);
3734     extern struct dvb_frontend* dvb_dummy_fe_qpsk_attach(void);
3735     extern struct dvb_frontend* dvb_dummy_fe_qam_attach(void);
3736     diff --git a/drivers/media/dvb-frontends/ec100.h b/drivers/media/dvb-frontends/ec100.h
3737     index 37558403068d..9544bab5cd1d 100644
3738     --- a/drivers/media/dvb-frontends/ec100.h
3739     +++ b/drivers/media/dvb-frontends/ec100.h
3740     @@ -31,7 +31,7 @@ struct ec100_config {
3741     };
3742    
3743    
3744     -#if IS_ENABLED(CONFIG_DVB_EC100)
3745     +#if IS_REACHABLE(CONFIG_DVB_EC100)
3746     extern struct dvb_frontend *ec100_attach(const struct ec100_config *config,
3747     struct i2c_adapter *i2c);
3748     #else
3749     diff --git a/drivers/media/dvb-frontends/hd29l2.h b/drivers/media/dvb-frontends/hd29l2.h
3750     index 05cd13028a91..48e9ab74c883 100644
3751     --- a/drivers/media/dvb-frontends/hd29l2.h
3752     +++ b/drivers/media/dvb-frontends/hd29l2.h
3753     @@ -51,7 +51,7 @@ struct hd29l2_config {
3754     };
3755    
3756    
3757     -#if IS_ENABLED(CONFIG_DVB_HD29L2)
3758     +#if IS_REACHABLE(CONFIG_DVB_HD29L2)
3759     extern struct dvb_frontend *hd29l2_attach(const struct hd29l2_config *config,
3760     struct i2c_adapter *i2c);
3761     #else
3762     diff --git a/drivers/media/dvb-frontends/isl6405.h b/drivers/media/dvb-frontends/isl6405.h
3763     index 8abb70c26fd9..3c148b830bd1 100644
3764     --- a/drivers/media/dvb-frontends/isl6405.h
3765     +++ b/drivers/media/dvb-frontends/isl6405.h
3766     @@ -55,7 +55,7 @@
3767     #define ISL6405_ENT2 0x20
3768     #define ISL6405_ISEL2 0x40
3769    
3770     -#if IS_ENABLED(CONFIG_DVB_ISL6405)
3771     +#if IS_REACHABLE(CONFIG_DVB_ISL6405)
3772     /* override_set and override_clear control which system register bits (above)
3773     * to always set & clear
3774     */
3775     diff --git a/drivers/media/dvb-frontends/isl6421.h b/drivers/media/dvb-frontends/isl6421.h
3776     index 630e7f8a150e..3273597833fd 100644
3777     --- a/drivers/media/dvb-frontends/isl6421.h
3778     +++ b/drivers/media/dvb-frontends/isl6421.h
3779     @@ -39,7 +39,7 @@
3780     #define ISL6421_ISEL1 0x20
3781     #define ISL6421_DCL 0x40
3782    
3783     -#if IS_ENABLED(CONFIG_DVB_ISL6421)
3784     +#if IS_REACHABLE(CONFIG_DVB_ISL6421)
3785     /* override_set and override_clear control which system register bits (above) to always set & clear */
3786     extern struct dvb_frontend *isl6421_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 i2c_addr,
3787     u8 override_set, u8 override_clear, bool override_tone);
3788     diff --git a/drivers/media/dvb-frontends/isl6423.h b/drivers/media/dvb-frontends/isl6423.h
3789     index 80dfd9cc4f41..a64df0ee256b 100644
3790     --- a/drivers/media/dvb-frontends/isl6423.h
3791     +++ b/drivers/media/dvb-frontends/isl6423.h
3792     @@ -42,7 +42,7 @@ struct isl6423_config {
3793     u8 mod_extern;
3794     };
3795    
3796     -#if IS_ENABLED(CONFIG_DVB_ISL6423)
3797     +#if IS_REACHABLE(CONFIG_DVB_ISL6423)
3798    
3799    
3800     extern struct dvb_frontend *isl6423_attach(struct dvb_frontend *fe,
3801     diff --git a/drivers/media/dvb-frontends/itd1000.h b/drivers/media/dvb-frontends/itd1000.h
3802     index edae0902f4fd..a691bb6f26de 100644
3803     --- a/drivers/media/dvb-frontends/itd1000.h
3804     +++ b/drivers/media/dvb-frontends/itd1000.h
3805     @@ -29,7 +29,7 @@ struct itd1000_config {
3806     u8 i2c_address;
3807     };
3808    
3809     -#if IS_ENABLED(CONFIG_DVB_TUNER_ITD1000)
3810     +#if IS_REACHABLE(CONFIG_DVB_TUNER_ITD1000)
3811     extern struct dvb_frontend *itd1000_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct itd1000_config *cfg);
3812     #else
3813     static inline struct dvb_frontend *itd1000_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct itd1000_config *cfg)
3814     diff --git a/drivers/media/dvb-frontends/ix2505v.h b/drivers/media/dvb-frontends/ix2505v.h
3815     index 1a735a75aa98..af107a2dd357 100644
3816     --- a/drivers/media/dvb-frontends/ix2505v.h
3817     +++ b/drivers/media/dvb-frontends/ix2505v.h
3818     @@ -49,7 +49,7 @@ struct ix2505v_config {
3819    
3820     };
3821    
3822     -#if IS_ENABLED(CONFIG_DVB_IX2505V)
3823     +#if IS_REACHABLE(CONFIG_DVB_IX2505V)
3824     extern struct dvb_frontend *ix2505v_attach(struct dvb_frontend *fe,
3825     const struct ix2505v_config *config, struct i2c_adapter *i2c);
3826     #else
3827     diff --git a/drivers/media/dvb-frontends/l64781.h b/drivers/media/dvb-frontends/l64781.h
3828     index 6813b08a774d..8697e2c2ba36 100644
3829     --- a/drivers/media/dvb-frontends/l64781.h
3830     +++ b/drivers/media/dvb-frontends/l64781.h
3831     @@ -31,7 +31,7 @@ struct l64781_config
3832     u8 demod_address;
3833     };
3834    
3835     -#if IS_ENABLED(CONFIG_DVB_L64781)
3836     +#if IS_REACHABLE(CONFIG_DVB_L64781)
3837     extern struct dvb_frontend* l64781_attach(const struct l64781_config* config,
3838     struct i2c_adapter* i2c);
3839     #else
3840     diff --git a/drivers/media/dvb-frontends/lg2160.h b/drivers/media/dvb-frontends/lg2160.h
3841     index 194a07a78dc1..d20bd909de39 100644
3842     --- a/drivers/media/dvb-frontends/lg2160.h
3843     +++ b/drivers/media/dvb-frontends/lg2160.h
3844     @@ -67,7 +67,7 @@ struct lg2160_config {
3845     enum lg_chip_type lg_chip;
3846     };
3847    
3848     -#if IS_ENABLED(CONFIG_DVB_LG2160)
3849     +#if IS_REACHABLE(CONFIG_DVB_LG2160)
3850     extern
3851     struct dvb_frontend *lg2160_attach(const struct lg2160_config *config,
3852     struct i2c_adapter *i2c_adap);
3853     diff --git a/drivers/media/dvb-frontends/lgdt3305.h b/drivers/media/dvb-frontends/lgdt3305.h
3854     index d9ab556c1b27..d8666043b3d2 100644
3855     --- a/drivers/media/dvb-frontends/lgdt3305.h
3856     +++ b/drivers/media/dvb-frontends/lgdt3305.h
3857     @@ -74,7 +74,7 @@ struct lgdt3305_config {
3858     enum lgdt_demod_chip_type demod_chip;
3859     };
3860    
3861     -#if IS_ENABLED(CONFIG_DVB_LGDT3305)
3862     +#if IS_REACHABLE(CONFIG_DVB_LGDT3305)
3863     extern
3864     struct dvb_frontend *lgdt3305_attach(const struct lgdt3305_config *config,
3865     struct i2c_adapter *i2c_adap);
3866     diff --git a/drivers/media/dvb-frontends/lgdt330x.h b/drivers/media/dvb-frontends/lgdt330x.h
3867     index ca0eab562e1e..b4ee363b6578 100644
3868     --- a/drivers/media/dvb-frontends/lgdt330x.h
3869     +++ b/drivers/media/dvb-frontends/lgdt330x.h
3870     @@ -52,7 +52,7 @@ struct lgdt330x_config
3871     int clock_polarity_flip;
3872     };
3873    
3874     -#if IS_ENABLED(CONFIG_DVB_LGDT330X)
3875     +#if IS_REACHABLE(CONFIG_DVB_LGDT330X)
3876     extern struct dvb_frontend* lgdt330x_attach(const struct lgdt330x_config* config,
3877     struct i2c_adapter* i2c);
3878     #else
3879     diff --git a/drivers/media/dvb-frontends/lgs8gl5.h b/drivers/media/dvb-frontends/lgs8gl5.h
3880     index c2da59614727..a5b3faf121f0 100644
3881     --- a/drivers/media/dvb-frontends/lgs8gl5.h
3882     +++ b/drivers/media/dvb-frontends/lgs8gl5.h
3883     @@ -31,7 +31,7 @@ struct lgs8gl5_config {
3884     u8 demod_address;
3885     };
3886    
3887     -#if IS_ENABLED(CONFIG_DVB_LGS8GL5)
3888     +#if IS_REACHABLE(CONFIG_DVB_LGS8GL5)
3889     extern struct dvb_frontend *lgs8gl5_attach(
3890     const struct lgs8gl5_config *config, struct i2c_adapter *i2c);
3891     #else
3892     diff --git a/drivers/media/dvb-frontends/lgs8gxx.h b/drivers/media/dvb-frontends/lgs8gxx.h
3893     index dadb78bf61a9..368c9928ef7f 100644
3894     --- a/drivers/media/dvb-frontends/lgs8gxx.h
3895     +++ b/drivers/media/dvb-frontends/lgs8gxx.h
3896     @@ -80,7 +80,7 @@ struct lgs8gxx_config {
3897     u8 tuner_address;
3898     };
3899    
3900     -#if IS_ENABLED(CONFIG_DVB_LGS8GXX)
3901     +#if IS_REACHABLE(CONFIG_DVB_LGS8GXX)
3902     extern struct dvb_frontend *lgs8gxx_attach(const struct lgs8gxx_config *config,
3903     struct i2c_adapter *i2c);
3904     #else
3905     diff --git a/drivers/media/dvb-frontends/lnbh24.h b/drivers/media/dvb-frontends/lnbh24.h
3906     index b327a4f31d16..a088b8ec1e53 100644
3907     --- a/drivers/media/dvb-frontends/lnbh24.h
3908     +++ b/drivers/media/dvb-frontends/lnbh24.h
3909     @@ -37,7 +37,7 @@
3910    
3911     #include <linux/dvb/frontend.h>
3912    
3913     -#if IS_ENABLED(CONFIG_DVB_LNBP21)
3914     +#if IS_REACHABLE(CONFIG_DVB_LNBP21)
3915     /* override_set and override_clear control which
3916     system register bits (above) to always set & clear */
3917     extern struct dvb_frontend *lnbh24_attach(struct dvb_frontend *fe,
3918     diff --git a/drivers/media/dvb-frontends/lnbp21.h b/drivers/media/dvb-frontends/lnbp21.h
3919     index dbcbcc2f20a3..a9b530de62a6 100644
3920     --- a/drivers/media/dvb-frontends/lnbp21.h
3921     +++ b/drivers/media/dvb-frontends/lnbp21.h
3922     @@ -57,7 +57,7 @@
3923    
3924     #include <linux/dvb/frontend.h>
3925    
3926     -#if IS_ENABLED(CONFIG_DVB_LNBP21)
3927     +#if IS_REACHABLE(CONFIG_DVB_LNBP21)
3928     /* override_set and override_clear control which
3929     system register bits (above) to always set & clear */
3930     extern struct dvb_frontend *lnbp21_attach(struct dvb_frontend *fe,
3931     diff --git a/drivers/media/dvb-frontends/lnbp22.h b/drivers/media/dvb-frontends/lnbp22.h
3932     index 63861b311dd8..628148385182 100644
3933     --- a/drivers/media/dvb-frontends/lnbp22.h
3934     +++ b/drivers/media/dvb-frontends/lnbp22.h
3935     @@ -39,7 +39,7 @@
3936    
3937     #include <linux/dvb/frontend.h>
3938    
3939     -#if IS_ENABLED(CONFIG_DVB_LNBP22)
3940     +#if IS_REACHABLE(CONFIG_DVB_LNBP22)
3941     /*
3942     * override_set and override_clear control which system register bits (above)
3943     * to always set & clear
3944     diff --git a/drivers/media/dvb-frontends/m88rs2000.h b/drivers/media/dvb-frontends/m88rs2000.h
3945     index 0a50ea90736b..de7430178e9e 100644
3946     --- a/drivers/media/dvb-frontends/m88rs2000.h
3947     +++ b/drivers/media/dvb-frontends/m88rs2000.h
3948     @@ -41,7 +41,7 @@ enum {
3949     CALL_IS_READ,
3950     };
3951    
3952     -#if IS_ENABLED(CONFIG_DVB_M88RS2000)
3953     +#if IS_REACHABLE(CONFIG_DVB_M88RS2000)
3954     extern struct dvb_frontend *m88rs2000_attach(
3955     const struct m88rs2000_config *config, struct i2c_adapter *i2c);
3956     #else
3957     diff --git a/drivers/media/dvb-frontends/mb86a16.h b/drivers/media/dvb-frontends/mb86a16.h
3958     index 277ce061acf9..e486dc0d8e60 100644
3959     --- a/drivers/media/dvb-frontends/mb86a16.h
3960     +++ b/drivers/media/dvb-frontends/mb86a16.h
3961     @@ -33,7 +33,7 @@ struct mb86a16_config {
3962    
3963    
3964    
3965     -#if IS_ENABLED(CONFIG_DVB_MB86A16)
3966     +#if IS_REACHABLE(CONFIG_DVB_MB86A16)
3967    
3968     extern struct dvb_frontend *mb86a16_attach(const struct mb86a16_config *config,
3969     struct i2c_adapter *i2c_adap);
3970     diff --git a/drivers/media/dvb-frontends/mb86a20s.h b/drivers/media/dvb-frontends/mb86a20s.h
3971     index cbeb941fba7c..f749c8ac5f39 100644
3972     --- a/drivers/media/dvb-frontends/mb86a20s.h
3973     +++ b/drivers/media/dvb-frontends/mb86a20s.h
3974     @@ -34,7 +34,7 @@ struct mb86a20s_config {
3975     bool is_serial;
3976     };
3977    
3978     -#if IS_ENABLED(CONFIG_DVB_MB86A20S)
3979     +#if IS_REACHABLE(CONFIG_DVB_MB86A20S)
3980     extern struct dvb_frontend *mb86a20s_attach(const struct mb86a20s_config *config,
3981     struct i2c_adapter *i2c);
3982     extern struct i2c_adapter *mb86a20s_get_tuner_i2c_adapter(struct dvb_frontend *);
3983     diff --git a/drivers/media/dvb-frontends/mt312.h b/drivers/media/dvb-frontends/mt312.h
3984     index 5706621ad79d..386939a90555 100644
3985     --- a/drivers/media/dvb-frontends/mt312.h
3986     +++ b/drivers/media/dvb-frontends/mt312.h
3987     @@ -36,7 +36,7 @@ struct mt312_config {
3988     unsigned int voltage_inverted:1;
3989     };
3990    
3991     -#if IS_ENABLED(CONFIG_DVB_MT312)
3992     +#if IS_REACHABLE(CONFIG_DVB_MT312)
3993     struct dvb_frontend *mt312_attach(const struct mt312_config *config,
3994     struct i2c_adapter *i2c);
3995     #else
3996     diff --git a/drivers/media/dvb-frontends/mt352.h b/drivers/media/dvb-frontends/mt352.h
3997     index 451d904e1500..5873263bd1af 100644
3998     --- a/drivers/media/dvb-frontends/mt352.h
3999     +++ b/drivers/media/dvb-frontends/mt352.h
4000     @@ -51,7 +51,7 @@ struct mt352_config
4001     int (*demod_init)(struct dvb_frontend* fe);
4002     };
4003    
4004     -#if IS_ENABLED(CONFIG_DVB_MT352)
4005     +#if IS_REACHABLE(CONFIG_DVB_MT352)
4006     extern struct dvb_frontend* mt352_attach(const struct mt352_config* config,
4007     struct i2c_adapter* i2c);
4008     #else
4009     diff --git a/drivers/media/dvb-frontends/nxt200x.h b/drivers/media/dvb-frontends/nxt200x.h
4010     index b518d545609e..3b3d7a7fa591 100644
4011     --- a/drivers/media/dvb-frontends/nxt200x.h
4012     +++ b/drivers/media/dvb-frontends/nxt200x.h
4013     @@ -42,7 +42,7 @@ struct nxt200x_config
4014     int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured);
4015     };
4016    
4017     -#if IS_ENABLED(CONFIG_DVB_NXT200X)
4018     +#if IS_REACHABLE(CONFIG_DVB_NXT200X)
4019     extern struct dvb_frontend* nxt200x_attach(const struct nxt200x_config* config,
4020     struct i2c_adapter* i2c);
4021     #else
4022     diff --git a/drivers/media/dvb-frontends/nxt6000.h b/drivers/media/dvb-frontends/nxt6000.h
4023     index b5867c2ae681..a94cefcc6dfd 100644
4024     --- a/drivers/media/dvb-frontends/nxt6000.h
4025     +++ b/drivers/media/dvb-frontends/nxt6000.h
4026     @@ -33,7 +33,7 @@ struct nxt6000_config
4027     u8 clock_inversion:1;
4028     };
4029    
4030     -#if IS_ENABLED(CONFIG_DVB_NXT6000)
4031     +#if IS_REACHABLE(CONFIG_DVB_NXT6000)
4032     extern struct dvb_frontend* nxt6000_attach(const struct nxt6000_config* config,
4033     struct i2c_adapter* i2c);
4034     #else
4035     diff --git a/drivers/media/dvb-frontends/or51132.h b/drivers/media/dvb-frontends/or51132.h
4036     index 938958386cb1..aeaaffc84c2e 100644
4037     --- a/drivers/media/dvb-frontends/or51132.h
4038     +++ b/drivers/media/dvb-frontends/or51132.h
4039     @@ -34,7 +34,7 @@ struct or51132_config
4040     int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured);
4041     };
4042    
4043     -#if IS_ENABLED(CONFIG_DVB_OR51132)
4044     +#if IS_REACHABLE(CONFIG_DVB_OR51132)
4045     extern struct dvb_frontend* or51132_attach(const struct or51132_config* config,
4046     struct i2c_adapter* i2c);
4047     #else
4048     diff --git a/drivers/media/dvb-frontends/or51211.h b/drivers/media/dvb-frontends/or51211.h
4049     index 9a8ae936b62d..cc6adab63249 100644
4050     --- a/drivers/media/dvb-frontends/or51211.h
4051     +++ b/drivers/media/dvb-frontends/or51211.h
4052     @@ -37,7 +37,7 @@ struct or51211_config
4053     void (*sleep)(struct dvb_frontend * fe);
4054     };
4055    
4056     -#if IS_ENABLED(CONFIG_DVB_OR51211)
4057     +#if IS_REACHABLE(CONFIG_DVB_OR51211)
4058     extern struct dvb_frontend* or51211_attach(const struct or51211_config* config,
4059     struct i2c_adapter* i2c);
4060     #else
4061     diff --git a/drivers/media/dvb-frontends/s5h1409.h b/drivers/media/dvb-frontends/s5h1409.h
4062     index 63b1e0a34e4e..7749efbeba28 100644
4063     --- a/drivers/media/dvb-frontends/s5h1409.h
4064     +++ b/drivers/media/dvb-frontends/s5h1409.h
4065     @@ -67,7 +67,7 @@ struct s5h1409_config {
4066     u8 hvr1600_opt;
4067     };
4068    
4069     -#if IS_ENABLED(CONFIG_DVB_S5H1409)
4070     +#if IS_REACHABLE(CONFIG_DVB_S5H1409)
4071     extern struct dvb_frontend *s5h1409_attach(const struct s5h1409_config *config,
4072     struct i2c_adapter *i2c);
4073     #else
4074     diff --git a/drivers/media/dvb-frontends/s5h1411.h b/drivers/media/dvb-frontends/s5h1411.h
4075     index e4f56871f982..d63b5b590abe 100644
4076     --- a/drivers/media/dvb-frontends/s5h1411.h
4077     +++ b/drivers/media/dvb-frontends/s5h1411.h
4078     @@ -69,7 +69,7 @@ struct s5h1411_config {
4079     u8 status_mode;
4080     };
4081    
4082     -#if IS_ENABLED(CONFIG_DVB_S5H1411)
4083     +#if IS_REACHABLE(CONFIG_DVB_S5H1411)
4084     extern struct dvb_frontend *s5h1411_attach(const struct s5h1411_config *config,
4085     struct i2c_adapter *i2c);
4086     #else
4087     diff --git a/drivers/media/dvb-frontends/s5h1420.h b/drivers/media/dvb-frontends/s5h1420.h
4088     index 210049b5cf30..142d93e7d02b 100644
4089     --- a/drivers/media/dvb-frontends/s5h1420.h
4090     +++ b/drivers/media/dvb-frontends/s5h1420.h
4091     @@ -40,7 +40,7 @@ struct s5h1420_config
4092     u8 serial_mpeg:1;
4093     };
4094    
4095     -#if IS_ENABLED(CONFIG_DVB_S5H1420)
4096     +#if IS_REACHABLE(CONFIG_DVB_S5H1420)
4097     extern struct dvb_frontend *s5h1420_attach(const struct s5h1420_config *config,
4098     struct i2c_adapter *i2c);
4099     extern struct i2c_adapter *s5h1420_get_tuner_i2c_adapter(struct dvb_frontend *fe);
4100     diff --git a/drivers/media/dvb-frontends/s5h1432.h b/drivers/media/dvb-frontends/s5h1432.h
4101     index 70917dd2533a..f490c5ee5801 100644
4102     --- a/drivers/media/dvb-frontends/s5h1432.h
4103     +++ b/drivers/media/dvb-frontends/s5h1432.h
4104     @@ -75,7 +75,7 @@ struct s5h1432_config {
4105     u8 status_mode;
4106     };
4107    
4108     -#if IS_ENABLED(CONFIG_DVB_S5H1432)
4109     +#if IS_REACHABLE(CONFIG_DVB_S5H1432)
4110     extern struct dvb_frontend *s5h1432_attach(const struct s5h1432_config *config,
4111     struct i2c_adapter *i2c);
4112     #else
4113     diff --git a/drivers/media/dvb-frontends/s921.h b/drivers/media/dvb-frontends/s921.h
4114     index 9b20c9e0eb88..7d3999a4e974 100644
4115     --- a/drivers/media/dvb-frontends/s921.h
4116     +++ b/drivers/media/dvb-frontends/s921.h
4117     @@ -25,7 +25,7 @@ struct s921_config {
4118     u8 demod_address;
4119     };
4120    
4121     -#if IS_ENABLED(CONFIG_DVB_S921)
4122     +#if IS_REACHABLE(CONFIG_DVB_S921)
4123     extern struct dvb_frontend *s921_attach(const struct s921_config *config,
4124     struct i2c_adapter *i2c);
4125     extern struct i2c_adapter *s921_get_tuner_i2c_adapter(struct dvb_frontend *);
4126     diff --git a/drivers/media/dvb-frontends/si21xx.h b/drivers/media/dvb-frontends/si21xx.h
4127     index 1509fed44a3a..ef5f351ca68e 100644
4128     --- a/drivers/media/dvb-frontends/si21xx.h
4129     +++ b/drivers/media/dvb-frontends/si21xx.h
4130     @@ -13,7 +13,7 @@ struct si21xx_config {
4131     int min_delay_ms;
4132     };
4133    
4134     -#if IS_ENABLED(CONFIG_DVB_SI21XX)
4135     +#if IS_REACHABLE(CONFIG_DVB_SI21XX)
4136     extern struct dvb_frontend *si21xx_attach(const struct si21xx_config *config,
4137     struct i2c_adapter *i2c);
4138     #else
4139     diff --git a/drivers/media/dvb-frontends/sp8870.h b/drivers/media/dvb-frontends/sp8870.h
4140     index 065ec67d4e30..f507b9fd707b 100644
4141     --- a/drivers/media/dvb-frontends/sp8870.h
4142     +++ b/drivers/media/dvb-frontends/sp8870.h
4143     @@ -35,7 +35,7 @@ struct sp8870_config
4144     int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name);
4145     };
4146    
4147     -#if IS_ENABLED(CONFIG_DVB_SP8870)
4148     +#if IS_REACHABLE(CONFIG_DVB_SP8870)
4149     extern struct dvb_frontend* sp8870_attach(const struct sp8870_config* config,
4150     struct i2c_adapter* i2c);
4151     #else
4152     diff --git a/drivers/media/dvb-frontends/sp887x.h b/drivers/media/dvb-frontends/sp887x.h
4153     index 2cdc4e8bc9cd..412f011e6dfd 100644
4154     --- a/drivers/media/dvb-frontends/sp887x.h
4155     +++ b/drivers/media/dvb-frontends/sp887x.h
4156     @@ -17,7 +17,7 @@ struct sp887x_config
4157     int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name);
4158     };
4159    
4160     -#if IS_ENABLED(CONFIG_DVB_SP887X)
4161     +#if IS_REACHABLE(CONFIG_DVB_SP887X)
4162     extern struct dvb_frontend* sp887x_attach(const struct sp887x_config* config,
4163     struct i2c_adapter* i2c);
4164     #else
4165     diff --git a/drivers/media/dvb-frontends/stb0899_drv.h b/drivers/media/dvb-frontends/stb0899_drv.h
4166     index 139264d19263..0a72131a57db 100644
4167     --- a/drivers/media/dvb-frontends/stb0899_drv.h
4168     +++ b/drivers/media/dvb-frontends/stb0899_drv.h
4169     @@ -141,7 +141,7 @@ struct stb0899_config {
4170     int (*tuner_set_rfsiggain)(struct dvb_frontend *fe, u32 rf_gain);
4171     };
4172    
4173     -#if IS_ENABLED(CONFIG_DVB_STB0899)
4174     +#if IS_REACHABLE(CONFIG_DVB_STB0899)
4175    
4176     extern struct dvb_frontend *stb0899_attach(struct stb0899_config *config,
4177     struct i2c_adapter *i2c);
4178     diff --git a/drivers/media/dvb-frontends/stb6000.h b/drivers/media/dvb-frontends/stb6000.h
4179     index a768189bfaad..da581b652cb9 100644
4180     --- a/drivers/media/dvb-frontends/stb6000.h
4181     +++ b/drivers/media/dvb-frontends/stb6000.h
4182     @@ -35,7 +35,7 @@
4183     * @param i2c i2c adapter to use.
4184     * @return FE pointer on success, NULL on failure.
4185     */
4186     -#if IS_ENABLED(CONFIG_DVB_STB6000)
4187     +#if IS_REACHABLE(CONFIG_DVB_STB6000)
4188     extern struct dvb_frontend *stb6000_attach(struct dvb_frontend *fe, int addr,
4189     struct i2c_adapter *i2c);
4190     #else
4191     diff --git a/drivers/media/dvb-frontends/stb6100.h b/drivers/media/dvb-frontends/stb6100.h
4192     index 3a1e40f3b8be..218c8188865d 100644
4193     --- a/drivers/media/dvb-frontends/stb6100.h
4194     +++ b/drivers/media/dvb-frontends/stb6100.h
4195     @@ -94,7 +94,7 @@ struct stb6100_state {
4196     u32 reference;
4197     };
4198    
4199     -#if IS_ENABLED(CONFIG_DVB_STB6100)
4200     +#if IS_REACHABLE(CONFIG_DVB_STB6100)
4201    
4202     extern struct dvb_frontend *stb6100_attach(struct dvb_frontend *fe,
4203     const struct stb6100_config *config,
4204     diff --git a/drivers/media/dvb-frontends/stv0288.h b/drivers/media/dvb-frontends/stv0288.h
4205     index a0bd93107154..b58603c00c80 100644
4206     --- a/drivers/media/dvb-frontends/stv0288.h
4207     +++ b/drivers/media/dvb-frontends/stv0288.h
4208     @@ -43,7 +43,7 @@ struct stv0288_config {
4209     int (*set_ts_params)(struct dvb_frontend *fe, int is_punctured);
4210     };
4211    
4212     -#if IS_ENABLED(CONFIG_DVB_STV0288)
4213     +#if IS_REACHABLE(CONFIG_DVB_STV0288)
4214     extern struct dvb_frontend *stv0288_attach(const struct stv0288_config *config,
4215     struct i2c_adapter *i2c);
4216     #else
4217     diff --git a/drivers/media/dvb-frontends/stv0297.h b/drivers/media/dvb-frontends/stv0297.h
4218     index c8ff3639ce00..b30632a67333 100644
4219     --- a/drivers/media/dvb-frontends/stv0297.h
4220     +++ b/drivers/media/dvb-frontends/stv0297.h
4221     @@ -42,7 +42,7 @@ struct stv0297_config
4222     u8 stop_during_read:1;
4223     };
4224    
4225     -#if IS_ENABLED(CONFIG_DVB_STV0297)
4226     +#if IS_REACHABLE(CONFIG_DVB_STV0297)
4227     extern struct dvb_frontend* stv0297_attach(const struct stv0297_config* config,
4228     struct i2c_adapter* i2c);
4229     #else
4230     diff --git a/drivers/media/dvb-frontends/stv0299.h b/drivers/media/dvb-frontends/stv0299.h
4231     index 06f70fc8327b..0aca30a8ec25 100644
4232     --- a/drivers/media/dvb-frontends/stv0299.h
4233     +++ b/drivers/media/dvb-frontends/stv0299.h
4234     @@ -95,7 +95,7 @@ struct stv0299_config
4235     int (*set_ts_params)(struct dvb_frontend *fe, int is_punctured);
4236     };
4237    
4238     -#if IS_ENABLED(CONFIG_DVB_STV0299)
4239     +#if IS_REACHABLE(CONFIG_DVB_STV0299)
4240     extern struct dvb_frontend *stv0299_attach(const struct stv0299_config *config,
4241     struct i2c_adapter *i2c);
4242     #else
4243     diff --git a/drivers/media/dvb-frontends/stv0367.h b/drivers/media/dvb-frontends/stv0367.h
4244     index ea80b341f094..92b3e85fb818 100644
4245     --- a/drivers/media/dvb-frontends/stv0367.h
4246     +++ b/drivers/media/dvb-frontends/stv0367.h
4247     @@ -39,7 +39,7 @@ struct stv0367_config {
4248     int clk_pol;
4249     };
4250    
4251     -#if IS_ENABLED(CONFIG_DVB_STV0367)
4252     +#if IS_REACHABLE(CONFIG_DVB_STV0367)
4253     extern struct
4254     dvb_frontend *stv0367ter_attach(const struct stv0367_config *config,
4255     struct i2c_adapter *i2c);
4256     diff --git a/drivers/media/dvb-frontends/stv0900.h b/drivers/media/dvb-frontends/stv0900.h
4257     index e2a6dc69ecb4..c90bf00ea9ce 100644
4258     --- a/drivers/media/dvb-frontends/stv0900.h
4259     +++ b/drivers/media/dvb-frontends/stv0900.h
4260     @@ -58,7 +58,7 @@ struct stv0900_config {
4261     void (*set_lock_led)(struct dvb_frontend *fe, int offon);
4262     };
4263    
4264     -#if IS_ENABLED(CONFIG_DVB_STV0900)
4265     +#if IS_REACHABLE(CONFIG_DVB_STV0900)
4266     extern struct dvb_frontend *stv0900_attach(const struct stv0900_config *config,
4267     struct i2c_adapter *i2c, int demod);
4268     #else
4269     diff --git a/drivers/media/dvb-frontends/stv090x.h b/drivers/media/dvb-frontends/stv090x.h
4270     index 0bd6adcfee8a..97ada6b246b7 100644
4271     --- a/drivers/media/dvb-frontends/stv090x.h
4272     +++ b/drivers/media/dvb-frontends/stv090x.h
4273     @@ -103,7 +103,7 @@ struct stv090x_config {
4274     void (*tuner_i2c_lock) (struct dvb_frontend *fe, int lock);
4275     };
4276    
4277     -#if IS_ENABLED(CONFIG_DVB_STV090x)
4278     +#if IS_REACHABLE(CONFIG_DVB_STV090x)
4279    
4280     extern struct dvb_frontend *stv090x_attach(const struct stv090x_config *config,
4281     struct i2c_adapter *i2c,
4282     diff --git a/drivers/media/dvb-frontends/stv6110.h b/drivers/media/dvb-frontends/stv6110.h
4283     index 8fa07e6a6745..f3c8a5c6b77d 100644
4284     --- a/drivers/media/dvb-frontends/stv6110.h
4285     +++ b/drivers/media/dvb-frontends/stv6110.h
4286     @@ -46,7 +46,7 @@ struct stv6110_config {
4287     u8 clk_div; /* divisor value for the output clock */
4288     };
4289    
4290     -#if IS_ENABLED(CONFIG_DVB_STV6110)
4291     +#if IS_REACHABLE(CONFIG_DVB_STV6110)
4292     extern struct dvb_frontend *stv6110_attach(struct dvb_frontend *fe,
4293     const struct stv6110_config *config,
4294     struct i2c_adapter *i2c);
4295     diff --git a/drivers/media/dvb-frontends/stv6110x.h b/drivers/media/dvb-frontends/stv6110x.h
4296     index bc4766db29c5..9f7eb251aec3 100644
4297     --- a/drivers/media/dvb-frontends/stv6110x.h
4298     +++ b/drivers/media/dvb-frontends/stv6110x.h
4299     @@ -53,7 +53,7 @@ struct stv6110x_devctl {
4300     };
4301    
4302    
4303     -#if IS_ENABLED(CONFIG_DVB_STV6110x)
4304     +#if IS_REACHABLE(CONFIG_DVB_STV6110x)
4305    
4306     extern struct stv6110x_devctl *stv6110x_attach(struct dvb_frontend *fe,
4307     const struct stv6110x_config *config,
4308     diff --git a/drivers/media/dvb-frontends/tda1002x.h b/drivers/media/dvb-frontends/tda1002x.h
4309     index e404b6e44802..0d334613de1b 100644
4310     --- a/drivers/media/dvb-frontends/tda1002x.h
4311     +++ b/drivers/media/dvb-frontends/tda1002x.h
4312     @@ -57,7 +57,7 @@ struct tda10023_config {
4313     u16 deltaf;
4314     };
4315    
4316     -#if IS_ENABLED(CONFIG_DVB_TDA10021)
4317     +#if IS_REACHABLE(CONFIG_DVB_TDA10021)
4318     extern struct dvb_frontend* tda10021_attach(const struct tda1002x_config* config,
4319     struct i2c_adapter* i2c, u8 pwm);
4320     #else
4321     @@ -69,7 +69,7 @@ static inline struct dvb_frontend* tda10021_attach(const struct tda1002x_config*
4322     }
4323     #endif // CONFIG_DVB_TDA10021
4324    
4325     -#if IS_ENABLED(CONFIG_DVB_TDA10023)
4326     +#if IS_REACHABLE(CONFIG_DVB_TDA10023)
4327     extern struct dvb_frontend *tda10023_attach(
4328     const struct tda10023_config *config,
4329     struct i2c_adapter *i2c, u8 pwm);
4330     diff --git a/drivers/media/dvb-frontends/tda10048.h b/drivers/media/dvb-frontends/tda10048.h
4331     index 5e7bf4e47cb3..bc77a7311de1 100644
4332     --- a/drivers/media/dvb-frontends/tda10048.h
4333     +++ b/drivers/media/dvb-frontends/tda10048.h
4334     @@ -73,7 +73,7 @@ struct tda10048_config {
4335     u8 pll_n;
4336     };
4337    
4338     -#if IS_ENABLED(CONFIG_DVB_TDA10048)
4339     +#if IS_REACHABLE(CONFIG_DVB_TDA10048)
4340     extern struct dvb_frontend *tda10048_attach(
4341     const struct tda10048_config *config,
4342     struct i2c_adapter *i2c);
4343     diff --git a/drivers/media/dvb-frontends/tda1004x.h b/drivers/media/dvb-frontends/tda1004x.h
4344     index dd283fbb61c0..efd7659dace9 100644
4345     --- a/drivers/media/dvb-frontends/tda1004x.h
4346     +++ b/drivers/media/dvb-frontends/tda1004x.h
4347     @@ -117,7 +117,7 @@ struct tda1004x_state {
4348     enum tda1004x_demod demod_type;
4349     };
4350    
4351     -#if IS_ENABLED(CONFIG_DVB_TDA1004X)
4352     +#if IS_REACHABLE(CONFIG_DVB_TDA1004X)
4353     extern struct dvb_frontend* tda10045_attach(const struct tda1004x_config* config,
4354     struct i2c_adapter* i2c);
4355    
4356     diff --git a/drivers/media/dvb-frontends/tda10071.h b/drivers/media/dvb-frontends/tda10071.h
4357     index 331b5a819383..da89f4249846 100644
4358     --- a/drivers/media/dvb-frontends/tda10071.h
4359     +++ b/drivers/media/dvb-frontends/tda10071.h
4360     @@ -72,7 +72,7 @@ struct tda10071_config {
4361     };
4362    
4363    
4364     -#if IS_ENABLED(CONFIG_DVB_TDA10071)
4365     +#if IS_REACHABLE(CONFIG_DVB_TDA10071)
4366     extern struct dvb_frontend *tda10071_attach(
4367     const struct tda10071_config *config, struct i2c_adapter *i2c);
4368     #else
4369     diff --git a/drivers/media/dvb-frontends/tda10086.h b/drivers/media/dvb-frontends/tda10086.h
4370     index 458fe91c1b88..690e469995b6 100644
4371     --- a/drivers/media/dvb-frontends/tda10086.h
4372     +++ b/drivers/media/dvb-frontends/tda10086.h
4373     @@ -46,7 +46,7 @@ struct tda10086_config
4374     enum tda10086_xtal xtal_freq;
4375     };
4376    
4377     -#if IS_ENABLED(CONFIG_DVB_TDA10086)
4378     +#if IS_REACHABLE(CONFIG_DVB_TDA10086)
4379     extern struct dvb_frontend* tda10086_attach(const struct tda10086_config* config,
4380     struct i2c_adapter* i2c);
4381     #else
4382     diff --git a/drivers/media/dvb-frontends/tda18271c2dd.h b/drivers/media/dvb-frontends/tda18271c2dd.h
4383     index dd84f7b69bec..7ebd8eaff4eb 100644
4384     --- a/drivers/media/dvb-frontends/tda18271c2dd.h
4385     +++ b/drivers/media/dvb-frontends/tda18271c2dd.h
4386     @@ -3,7 +3,7 @@
4387    
4388     #include <linux/kconfig.h>
4389    
4390     -#if IS_ENABLED(CONFIG_DVB_TDA18271C2DD)
4391     +#if IS_REACHABLE(CONFIG_DVB_TDA18271C2DD)
4392     struct dvb_frontend *tda18271c2dd_attach(struct dvb_frontend *fe,
4393     struct i2c_adapter *i2c, u8 adr);
4394     #else
4395     diff --git a/drivers/media/dvb-frontends/tda665x.h b/drivers/media/dvb-frontends/tda665x.h
4396     index 03a0da6d5cf2..baf520baa42e 100644
4397     --- a/drivers/media/dvb-frontends/tda665x.h
4398     +++ b/drivers/media/dvb-frontends/tda665x.h
4399     @@ -31,7 +31,7 @@ struct tda665x_config {
4400     u32 ref_divider;
4401     };
4402    
4403     -#if IS_ENABLED(CONFIG_DVB_TDA665x)
4404     +#if IS_REACHABLE(CONFIG_DVB_TDA665x)
4405    
4406     extern struct dvb_frontend *tda665x_attach(struct dvb_frontend *fe,
4407     const struct tda665x_config *config,
4408     diff --git a/drivers/media/dvb-frontends/tda8083.h b/drivers/media/dvb-frontends/tda8083.h
4409     index de6b1860dfdd..46be06fa7e0d 100644
4410     --- a/drivers/media/dvb-frontends/tda8083.h
4411     +++ b/drivers/media/dvb-frontends/tda8083.h
4412     @@ -35,7 +35,7 @@ struct tda8083_config
4413     u8 demod_address;
4414     };
4415    
4416     -#if IS_ENABLED(CONFIG_DVB_TDA8083)
4417     +#if IS_REACHABLE(CONFIG_DVB_TDA8083)
4418     extern struct dvb_frontend* tda8083_attach(const struct tda8083_config* config,
4419     struct i2c_adapter* i2c);
4420     #else
4421     diff --git a/drivers/media/dvb-frontends/tda8261.h b/drivers/media/dvb-frontends/tda8261.h
4422     index 55cf4ffcbfdf..9fa5b3076d5b 100644
4423     --- a/drivers/media/dvb-frontends/tda8261.h
4424     +++ b/drivers/media/dvb-frontends/tda8261.h
4425     @@ -34,7 +34,7 @@ struct tda8261_config {
4426     enum tda8261_step step_size;
4427     };
4428    
4429     -#if IS_ENABLED(CONFIG_DVB_TDA8261)
4430     +#if IS_REACHABLE(CONFIG_DVB_TDA8261)
4431    
4432     extern struct dvb_frontend *tda8261_attach(struct dvb_frontend *fe,
4433     const struct tda8261_config *config,
4434     diff --git a/drivers/media/dvb-frontends/tda826x.h b/drivers/media/dvb-frontends/tda826x.h
4435     index 5f0f20e7e4f8..81abe1aebe9f 100644
4436     --- a/drivers/media/dvb-frontends/tda826x.h
4437     +++ b/drivers/media/dvb-frontends/tda826x.h
4438     @@ -35,7 +35,7 @@
4439     * @param has_loopthrough Set to 1 if the card has a loopthrough RF connector.
4440     * @return FE pointer on success, NULL on failure.
4441     */
4442     -#if IS_ENABLED(CONFIG_DVB_TDA826X)
4443     +#if IS_REACHABLE(CONFIG_DVB_TDA826X)
4444     extern struct dvb_frontend* tda826x_attach(struct dvb_frontend *fe, int addr,
4445     struct i2c_adapter *i2c,
4446     int has_loopthrough);
4447     diff --git a/drivers/media/dvb-frontends/ts2020.h b/drivers/media/dvb-frontends/ts2020.h
4448     index b2fe6bb3a38b..595841def66d 100644
4449     --- a/drivers/media/dvb-frontends/ts2020.h
4450     +++ b/drivers/media/dvb-frontends/ts2020.h
4451     @@ -31,7 +31,7 @@ struct ts2020_config {
4452     u32 frequency_div;
4453     };
4454    
4455     -#if IS_ENABLED(CONFIG_DVB_TS2020)
4456     +#if IS_REACHABLE(CONFIG_DVB_TS2020)
4457    
4458     extern struct dvb_frontend *ts2020_attach(
4459     struct dvb_frontend *fe,
4460     diff --git a/drivers/media/dvb-frontends/tua6100.h b/drivers/media/dvb-frontends/tua6100.h
4461     index 83a9c30e67ca..52919e04e258 100644
4462     --- a/drivers/media/dvb-frontends/tua6100.h
4463     +++ b/drivers/media/dvb-frontends/tua6100.h
4464     @@ -34,7 +34,7 @@
4465     #include <linux/i2c.h>
4466     #include "dvb_frontend.h"
4467    
4468     -#if IS_ENABLED(CONFIG_DVB_TUA6100)
4469     +#if IS_REACHABLE(CONFIG_DVB_TUA6100)
4470     extern struct dvb_frontend *tua6100_attach(struct dvb_frontend *fe, int addr, struct i2c_adapter *i2c);
4471     #else
4472     static inline struct dvb_frontend* tua6100_attach(struct dvb_frontend *fe, int addr, struct i2c_adapter *i2c)
4473     diff --git a/drivers/media/dvb-frontends/ves1820.h b/drivers/media/dvb-frontends/ves1820.h
4474     index c073f353ac38..ece46fdcd714 100644
4475     --- a/drivers/media/dvb-frontends/ves1820.h
4476     +++ b/drivers/media/dvb-frontends/ves1820.h
4477     @@ -41,7 +41,7 @@ struct ves1820_config
4478     u8 selagc:1;
4479     };
4480    
4481     -#if IS_ENABLED(CONFIG_DVB_VES1820)
4482     +#if IS_REACHABLE(CONFIG_DVB_VES1820)
4483     extern struct dvb_frontend* ves1820_attach(const struct ves1820_config* config,
4484     struct i2c_adapter* i2c, u8 pwm);
4485     #else
4486     diff --git a/drivers/media/dvb-frontends/ves1x93.h b/drivers/media/dvb-frontends/ves1x93.h
4487     index 2307caea6aec..4510fe2f6676 100644
4488     --- a/drivers/media/dvb-frontends/ves1x93.h
4489     +++ b/drivers/media/dvb-frontends/ves1x93.h
4490     @@ -40,7 +40,7 @@ struct ves1x93_config
4491     u8 invert_pwm:1;
4492     };
4493    
4494     -#if IS_ENABLED(CONFIG_DVB_VES1X93)
4495     +#if IS_REACHABLE(CONFIG_DVB_VES1X93)
4496     extern struct dvb_frontend* ves1x93_attach(const struct ves1x93_config* config,
4497     struct i2c_adapter* i2c);
4498     #else
4499     diff --git a/drivers/media/dvb-frontends/zl10036.h b/drivers/media/dvb-frontends/zl10036.h
4500     index 5f1e8217eeb6..670e76a654ee 100644
4501     --- a/drivers/media/dvb-frontends/zl10036.h
4502     +++ b/drivers/media/dvb-frontends/zl10036.h
4503     @@ -38,7 +38,7 @@ struct zl10036_config {
4504     int rf_loop_enable;
4505     };
4506    
4507     -#if IS_ENABLED(CONFIG_DVB_ZL10036)
4508     +#if IS_REACHABLE(CONFIG_DVB_ZL10036)
4509     extern struct dvb_frontend *zl10036_attach(struct dvb_frontend *fe,
4510     const struct zl10036_config *config, struct i2c_adapter *i2c);
4511     #else
4512     diff --git a/drivers/media/dvb-frontends/zl10039.h b/drivers/media/dvb-frontends/zl10039.h
4513     index 750b9bca9d02..070929444e71 100644
4514     --- a/drivers/media/dvb-frontends/zl10039.h
4515     +++ b/drivers/media/dvb-frontends/zl10039.h
4516     @@ -24,7 +24,7 @@
4517    
4518     #include <linux/kconfig.h>
4519    
4520     -#if IS_ENABLED(CONFIG_DVB_ZL10039)
4521     +#if IS_REACHABLE(CONFIG_DVB_ZL10039)
4522     struct dvb_frontend *zl10039_attach(struct dvb_frontend *fe,
4523     u8 i2c_addr,
4524     struct i2c_adapter *i2c);
4525     diff --git a/drivers/media/dvb-frontends/zl10353.h b/drivers/media/dvb-frontends/zl10353.h
4526     index 50c1004aef36..37aa6e8f454a 100644
4527     --- a/drivers/media/dvb-frontends/zl10353.h
4528     +++ b/drivers/media/dvb-frontends/zl10353.h
4529     @@ -47,7 +47,7 @@ struct zl10353_config
4530     u8 pll_0; /* default: 0x15 */
4531     };
4532    
4533     -#if IS_ENABLED(CONFIG_DVB_ZL10353)
4534     +#if IS_REACHABLE(CONFIG_DVB_ZL10353)
4535     extern struct dvb_frontend* zl10353_attach(const struct zl10353_config *config,
4536     struct i2c_adapter *i2c);
4537     #else
4538     diff --git a/drivers/media/pci/cx23885/altera-ci.h b/drivers/media/pci/cx23885/altera-ci.h
4539     index 5028f0cf83f4..6c511723fd1b 100644
4540     --- a/drivers/media/pci/cx23885/altera-ci.h
4541     +++ b/drivers/media/pci/cx23885/altera-ci.h
4542     @@ -39,7 +39,7 @@ struct altera_ci_config {
4543     int (*fpga_rw) (void *dev, int ad_rg, int val, int rw);
4544     };
4545    
4546     -#if IS_ENABLED(CONFIG_MEDIA_ALTERA_CI)
4547     +#if IS_REACHABLE(CONFIG_MEDIA_ALTERA_CI)
4548    
4549     extern int altera_ci_init(struct altera_ci_config *config, int ci_nr);
4550     extern void altera_ci_release(void *dev, int ci_nr);
4551     diff --git a/drivers/media/tuners/fc0011.h b/drivers/media/tuners/fc0011.h
4552     index 43ec893a6877..81bb568d6943 100644
4553     --- a/drivers/media/tuners/fc0011.h
4554     +++ b/drivers/media/tuners/fc0011.h
4555     @@ -23,7 +23,7 @@ enum fc0011_fe_callback_commands {
4556     FC0011_FE_CALLBACK_RESET,
4557     };
4558    
4559     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_FC0011)
4560     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_FC0011)
4561     struct dvb_frontend *fc0011_attach(struct dvb_frontend *fe,
4562     struct i2c_adapter *i2c,
4563     const struct fc0011_config *config);
4564     diff --git a/drivers/media/tuners/fc0012.h b/drivers/media/tuners/fc0012.h
4565     index 1d08057e3275..9ad32859bab0 100644
4566     --- a/drivers/media/tuners/fc0012.h
4567     +++ b/drivers/media/tuners/fc0012.h
4568     @@ -49,7 +49,7 @@ struct fc0012_config {
4569     bool clock_out;
4570     };
4571    
4572     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_FC0012)
4573     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_FC0012)
4574     extern struct dvb_frontend *fc0012_attach(struct dvb_frontend *fe,
4575     struct i2c_adapter *i2c,
4576     const struct fc0012_config *cfg);
4577     diff --git a/drivers/media/tuners/fc0013.h b/drivers/media/tuners/fc0013.h
4578     index d65d5b37f56e..e130bd7a3230 100644
4579     --- a/drivers/media/tuners/fc0013.h
4580     +++ b/drivers/media/tuners/fc0013.h
4581     @@ -26,7 +26,7 @@
4582     #include "dvb_frontend.h"
4583     #include "fc001x-common.h"
4584    
4585     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_FC0013)
4586     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_FC0013)
4587     extern struct dvb_frontend *fc0013_attach(struct dvb_frontend *fe,
4588     struct i2c_adapter *i2c,
4589     u8 i2c_address, int dual_master,
4590     diff --git a/drivers/media/tuners/fc2580.h b/drivers/media/tuners/fc2580.h
4591     index 9c43c1cc82d9..b1ce6770f88e 100644
4592     --- a/drivers/media/tuners/fc2580.h
4593     +++ b/drivers/media/tuners/fc2580.h
4594     @@ -37,7 +37,7 @@ struct fc2580_config {
4595     u32 clock;
4596     };
4597    
4598     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_FC2580)
4599     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_FC2580)
4600     extern struct dvb_frontend *fc2580_attach(struct dvb_frontend *fe,
4601     struct i2c_adapter *i2c, const struct fc2580_config *cfg);
4602     #else
4603     diff --git a/drivers/media/tuners/max2165.h b/drivers/media/tuners/max2165.h
4604     index 26e1dc64bb67..5054f01a78fb 100644
4605     --- a/drivers/media/tuners/max2165.h
4606     +++ b/drivers/media/tuners/max2165.h
4607     @@ -32,7 +32,7 @@ struct max2165_config {
4608     u8 osc_clk; /* in MHz, selectable values: 4,16,18,20,22,24,26,28 */
4609     };
4610    
4611     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_MAX2165)
4612     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_MAX2165)
4613     extern struct dvb_frontend *max2165_attach(struct dvb_frontend *fe,
4614     struct i2c_adapter *i2c,
4615     struct max2165_config *cfg);
4616     diff --git a/drivers/media/tuners/mc44s803.h b/drivers/media/tuners/mc44s803.h
4617     index 9aae50aca2b7..b3e614be657d 100644
4618     --- a/drivers/media/tuners/mc44s803.h
4619     +++ b/drivers/media/tuners/mc44s803.h
4620     @@ -32,7 +32,7 @@ struct mc44s803_config {
4621     u8 dig_out;
4622     };
4623    
4624     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_MC44S803)
4625     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_MC44S803)
4626     extern struct dvb_frontend *mc44s803_attach(struct dvb_frontend *fe,
4627     struct i2c_adapter *i2c, struct mc44s803_config *cfg);
4628     #else
4629     diff --git a/drivers/media/tuners/mt2060.h b/drivers/media/tuners/mt2060.h
4630     index c64fc19cb278..6efed359a24f 100644
4631     --- a/drivers/media/tuners/mt2060.h
4632     +++ b/drivers/media/tuners/mt2060.h
4633     @@ -30,7 +30,7 @@ struct mt2060_config {
4634     u8 clock_out; /* 0 = off, 1 = CLK/4, 2 = CLK/2, 3 = CLK/1 */
4635     };
4636    
4637     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_MT2060)
4638     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_MT2060)
4639     extern struct dvb_frontend * mt2060_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct mt2060_config *cfg, u16 if1);
4640     #else
4641     static inline struct dvb_frontend * mt2060_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct mt2060_config *cfg, u16 if1)
4642     diff --git a/drivers/media/tuners/mt2063.h b/drivers/media/tuners/mt2063.h
4643     index e1acfc8e7ae3..e55e0a6dd1be 100644
4644     --- a/drivers/media/tuners/mt2063.h
4645     +++ b/drivers/media/tuners/mt2063.h
4646     @@ -8,7 +8,7 @@ struct mt2063_config {
4647     u32 refclock;
4648     };
4649    
4650     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_MT2063)
4651     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_MT2063)
4652     struct dvb_frontend *mt2063_attach(struct dvb_frontend *fe,
4653     struct mt2063_config *config,
4654     struct i2c_adapter *i2c);
4655     diff --git a/drivers/media/tuners/mt20xx.h b/drivers/media/tuners/mt20xx.h
4656     index f56241ccaa00..9912362b415e 100644
4657     --- a/drivers/media/tuners/mt20xx.h
4658     +++ b/drivers/media/tuners/mt20xx.h
4659     @@ -20,7 +20,7 @@
4660     #include <linux/i2c.h>
4661     #include "dvb_frontend.h"
4662    
4663     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_MT20XX)
4664     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_MT20XX)
4665     extern struct dvb_frontend *microtune_attach(struct dvb_frontend *fe,
4666     struct i2c_adapter* i2c_adap,
4667     u8 i2c_addr);
4668     diff --git a/drivers/media/tuners/mt2131.h b/drivers/media/tuners/mt2131.h
4669     index 09ceaf68e47c..f5896c931979 100644
4670     --- a/drivers/media/tuners/mt2131.h
4671     +++ b/drivers/media/tuners/mt2131.h
4672     @@ -30,7 +30,7 @@ struct mt2131_config {
4673     u8 clock_out; /* 0 = off, 1 = CLK/4, 2 = CLK/2, 3 = CLK/1 */
4674     };
4675    
4676     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_MT2131)
4677     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_MT2131)
4678     extern struct dvb_frontend* mt2131_attach(struct dvb_frontend *fe,
4679     struct i2c_adapter *i2c,
4680     struct mt2131_config *cfg,
4681     diff --git a/drivers/media/tuners/mt2266.h b/drivers/media/tuners/mt2266.h
4682     index fad6dd657d77..69abefa18c37 100644
4683     --- a/drivers/media/tuners/mt2266.h
4684     +++ b/drivers/media/tuners/mt2266.h
4685     @@ -24,7 +24,7 @@ struct mt2266_config {
4686     u8 i2c_address;
4687     };
4688    
4689     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_MT2266)
4690     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_MT2266)
4691     extern struct dvb_frontend * mt2266_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct mt2266_config *cfg);
4692     #else
4693     static inline struct dvb_frontend * mt2266_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct mt2266_config *cfg)
4694     diff --git a/drivers/media/tuners/mxl5005s.h b/drivers/media/tuners/mxl5005s.h
4695     index ae8db885ad87..5764b12c5c7c 100644
4696     --- a/drivers/media/tuners/mxl5005s.h
4697     +++ b/drivers/media/tuners/mxl5005s.h
4698     @@ -118,7 +118,7 @@ struct mxl5005s_config {
4699     u8 AgcMasterByte;
4700     };
4701    
4702     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_MXL5005S)
4703     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_MXL5005S)
4704     extern struct dvb_frontend *mxl5005s_attach(struct dvb_frontend *fe,
4705     struct i2c_adapter *i2c,
4706     struct mxl5005s_config *config);
4707     diff --git a/drivers/media/tuners/mxl5007t.h b/drivers/media/tuners/mxl5007t.h
4708     index 37b0942e2385..d4861d74152b 100644
4709     --- a/drivers/media/tuners/mxl5007t.h
4710     +++ b/drivers/media/tuners/mxl5007t.h
4711     @@ -77,7 +77,7 @@ struct mxl5007t_config {
4712     unsigned int clk_out_enable:1;
4713     };
4714    
4715     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_MXL5007T)
4716     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_MXL5007T)
4717     extern struct dvb_frontend *mxl5007t_attach(struct dvb_frontend *fe,
4718     struct i2c_adapter *i2c, u8 addr,
4719     struct mxl5007t_config *cfg);
4720     diff --git a/drivers/media/tuners/qt1010.h b/drivers/media/tuners/qt1010.h
4721     index 8ab5d479749f..e3198f23437c 100644
4722     --- a/drivers/media/tuners/qt1010.h
4723     +++ b/drivers/media/tuners/qt1010.h
4724     @@ -36,7 +36,7 @@ struct qt1010_config {
4725     * @param cfg tuner hw based configuration
4726     * @return fe pointer on success, NULL on failure
4727     */
4728     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_QT1010)
4729     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_QT1010)
4730     extern struct dvb_frontend *qt1010_attach(struct dvb_frontend *fe,
4731     struct i2c_adapter *i2c,
4732     struct qt1010_config *cfg);
4733     diff --git a/drivers/media/tuners/r820t.h b/drivers/media/tuners/r820t.h
4734     index 48af3548027d..b1e5661af1c7 100644
4735     --- a/drivers/media/tuners/r820t.h
4736     +++ b/drivers/media/tuners/r820t.h
4737     @@ -42,7 +42,7 @@ struct r820t_config {
4738     bool use_predetect;
4739     };
4740    
4741     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_R820T)
4742     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_R820T)
4743     struct dvb_frontend *r820t_attach(struct dvb_frontend *fe,
4744     struct i2c_adapter *i2c,
4745     const struct r820t_config *cfg);
4746     diff --git a/drivers/media/tuners/tda18218.h b/drivers/media/tuners/tda18218.h
4747     index 366410e0cc9a..1eacb4f84e93 100644
4748     --- a/drivers/media/tuners/tda18218.h
4749     +++ b/drivers/media/tuners/tda18218.h
4750     @@ -30,7 +30,7 @@ struct tda18218_config {
4751     u8 loop_through:1;
4752     };
4753    
4754     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_TDA18218)
4755     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_TDA18218)
4756     extern struct dvb_frontend *tda18218_attach(struct dvb_frontend *fe,
4757     struct i2c_adapter *i2c, struct tda18218_config *cfg);
4758     #else
4759     diff --git a/drivers/media/tuners/tda18271.h b/drivers/media/tuners/tda18271.h
4760     index 4c418d63f540..0a846333ce57 100644
4761     --- a/drivers/media/tuners/tda18271.h
4762     +++ b/drivers/media/tuners/tda18271.h
4763     @@ -121,7 +121,7 @@ enum tda18271_mode {
4764     TDA18271_DIGITAL,
4765     };
4766    
4767     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_TDA18271)
4768     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_TDA18271)
4769     extern struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr,
4770     struct i2c_adapter *i2c,
4771     struct tda18271_config *cfg);
4772     diff --git a/drivers/media/tuners/tda827x.h b/drivers/media/tuners/tda827x.h
4773     index b64292152baf..abf2e2fe5350 100644
4774     --- a/drivers/media/tuners/tda827x.h
4775     +++ b/drivers/media/tuners/tda827x.h
4776     @@ -51,7 +51,7 @@ struct tda827x_config
4777     * @param cfg optional callback function pointers.
4778     * @return FE pointer on success, NULL on failure.
4779     */
4780     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_TDA827X)
4781     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_TDA827X)
4782     extern struct dvb_frontend* tda827x_attach(struct dvb_frontend *fe, int addr,
4783     struct i2c_adapter *i2c,
4784     struct tda827x_config *cfg);
4785     diff --git a/drivers/media/tuners/tda8290.h b/drivers/media/tuners/tda8290.h
4786     index cf96e585785e..901b8cac7105 100644
4787     --- a/drivers/media/tuners/tda8290.h
4788     +++ b/drivers/media/tuners/tda8290.h
4789     @@ -38,7 +38,7 @@ struct tda829x_config {
4790     struct tda18271_std_map *tda18271_std_map;
4791     };
4792    
4793     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_TDA8290)
4794     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_TDA8290)
4795     extern int tda829x_probe(struct i2c_adapter *i2c_adap, u8 i2c_addr);
4796    
4797     extern struct dvb_frontend *tda829x_attach(struct dvb_frontend *fe,
4798     diff --git a/drivers/media/tuners/tda9887.h b/drivers/media/tuners/tda9887.h
4799     index 37a4a1123e0c..95070eca02ca 100644
4800     --- a/drivers/media/tuners/tda9887.h
4801     +++ b/drivers/media/tuners/tda9887.h
4802     @@ -21,7 +21,7 @@
4803     #include "dvb_frontend.h"
4804    
4805     /* ------------------------------------------------------------------------ */
4806     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_TDA9887)
4807     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_TDA9887)
4808     extern struct dvb_frontend *tda9887_attach(struct dvb_frontend *fe,
4809     struct i2c_adapter *i2c_adap,
4810     u8 i2c_addr);
4811     diff --git a/drivers/media/tuners/tea5761.h b/drivers/media/tuners/tea5761.h
4812     index 933228ffb509..2d624d9919e3 100644
4813     --- a/drivers/media/tuners/tea5761.h
4814     +++ b/drivers/media/tuners/tea5761.h
4815     @@ -20,7 +20,7 @@
4816     #include <linux/i2c.h>
4817     #include "dvb_frontend.h"
4818    
4819     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_TEA5761)
4820     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_TEA5761)
4821     extern int tea5761_autodetection(struct i2c_adapter* i2c_adap, u8 i2c_addr);
4822    
4823     extern struct dvb_frontend *tea5761_attach(struct dvb_frontend *fe,
4824     diff --git a/drivers/media/tuners/tea5767.h b/drivers/media/tuners/tea5767.h
4825     index c39101199383..4f6f6c92db78 100644
4826     --- a/drivers/media/tuners/tea5767.h
4827     +++ b/drivers/media/tuners/tea5767.h
4828     @@ -39,7 +39,7 @@ struct tea5767_ctrl {
4829     enum tea5767_xtal xtal_freq;
4830     };
4831    
4832     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_TEA5767)
4833     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_TEA5767)
4834     extern int tea5767_autodetection(struct i2c_adapter* i2c_adap, u8 i2c_addr);
4835    
4836     extern struct dvb_frontend *tea5767_attach(struct dvb_frontend *fe,
4837     diff --git a/drivers/media/tuners/tua9001.h b/drivers/media/tuners/tua9001.h
4838     index 26358da1c100..2c3375c7aeb9 100644
4839     --- a/drivers/media/tuners/tua9001.h
4840     +++ b/drivers/media/tuners/tua9001.h
4841     @@ -51,7 +51,7 @@ struct tua9001_config {
4842     #define TUA9001_CMD_RESETN 1
4843     #define TUA9001_CMD_RXEN 2
4844    
4845     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_TUA9001)
4846     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_TUA9001)
4847     extern struct dvb_frontend *tua9001_attach(struct dvb_frontend *fe,
4848     struct i2c_adapter *i2c, struct tua9001_config *cfg);
4849     #else
4850     diff --git a/drivers/media/tuners/tuner-simple.h b/drivers/media/tuners/tuner-simple.h
4851     index ffd12cfe650b..6399b45b0590 100644
4852     --- a/drivers/media/tuners/tuner-simple.h
4853     +++ b/drivers/media/tuners/tuner-simple.h
4854     @@ -20,7 +20,7 @@
4855     #include <linux/i2c.h>
4856     #include "dvb_frontend.h"
4857    
4858     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_SIMPLE)
4859     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_SIMPLE)
4860     extern struct dvb_frontend *simple_tuner_attach(struct dvb_frontend *fe,
4861     struct i2c_adapter *i2c_adap,
4862     u8 i2c_addr,
4863     diff --git a/drivers/media/tuners/tuner-xc2028.h b/drivers/media/tuners/tuner-xc2028.h
4864     index 181d087faec4..98e4effca896 100644
4865     --- a/drivers/media/tuners/tuner-xc2028.h
4866     +++ b/drivers/media/tuners/tuner-xc2028.h
4867     @@ -56,7 +56,7 @@ struct xc2028_config {
4868     #define XC2028_RESET_CLK 1
4869     #define XC2028_I2C_FLUSH 2
4870    
4871     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_XC2028)
4872     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_XC2028)
4873     extern struct dvb_frontend *xc2028_attach(struct dvb_frontend *fe,
4874     struct xc2028_config *cfg);
4875     #else
4876     diff --git a/drivers/media/tuners/xc4000.h b/drivers/media/tuners/xc4000.h
4877     index 97c23de5296c..40517860cf67 100644
4878     --- a/drivers/media/tuners/xc4000.h
4879     +++ b/drivers/media/tuners/xc4000.h
4880     @@ -50,7 +50,7 @@ struct xc4000_config {
4881     * it's passed back to a bridge during tuner_callback().
4882     */
4883    
4884     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_XC4000)
4885     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_XC4000)
4886     extern struct dvb_frontend *xc4000_attach(struct dvb_frontend *fe,
4887     struct i2c_adapter *i2c,
4888     struct xc4000_config *cfg);
4889     diff --git a/drivers/media/tuners/xc5000.h b/drivers/media/tuners/xc5000.h
4890     index 7245cae19f0c..f746a97e90bb 100644
4891     --- a/drivers/media/tuners/xc5000.h
4892     +++ b/drivers/media/tuners/xc5000.h
4893     @@ -57,7 +57,7 @@ struct xc5000_config {
4894     * it's passed back to a bridge during tuner_callback().
4895     */
4896    
4897     -#if IS_ENABLED(CONFIG_MEDIA_TUNER_XC5000)
4898     +#if IS_REACHABLE(CONFIG_MEDIA_TUNER_XC5000)
4899     extern struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe,
4900     struct i2c_adapter *i2c,
4901     const struct xc5000_config *cfg);
4902     diff --git a/drivers/net/bonding/bond_options.c b/drivers/net/bonding/bond_options.c
4903     index b62697f4a3de..f1c53944a2c3 100644
4904     --- a/drivers/net/bonding/bond_options.c
4905     +++ b/drivers/net/bonding/bond_options.c
4906     @@ -625,7 +625,7 @@ int __bond_opt_set(struct bonding *bond,
4907     out:
4908     if (ret)
4909     bond_opt_error_interpret(bond, opt, ret, val);
4910     - else
4911     + else if (bond->dev->reg_state == NETREG_REGISTERED)
4912     call_netdevice_notifiers(NETDEV_CHANGEINFODATA, bond->dev);
4913    
4914     return ret;
4915     diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c
4916     index fead5c65a4f0..9c827b7642e7 100644
4917     --- a/drivers/net/ethernet/emulex/benet/be_cmds.c
4918     +++ b/drivers/net/ethernet/emulex/benet/be_cmds.c
4919     @@ -1705,9 +1705,9 @@ int be_cmd_get_regs(struct be_adapter *adapter, u32 buf_len, void *buf)
4920     total_size = buf_len;
4921    
4922     get_fat_cmd.size = sizeof(struct be_cmd_req_get_fat) + 60*1024;
4923     - get_fat_cmd.va = pci_alloc_consistent(adapter->pdev,
4924     - get_fat_cmd.size,
4925     - &get_fat_cmd.dma);
4926     + get_fat_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev,
4927     + get_fat_cmd.size,
4928     + &get_fat_cmd.dma, GFP_ATOMIC);
4929     if (!get_fat_cmd.va) {
4930     dev_err(&adapter->pdev->dev,
4931     "Memory allocation failure while reading FAT data\n");
4932     @@ -1752,8 +1752,8 @@ int be_cmd_get_regs(struct be_adapter *adapter, u32 buf_len, void *buf)
4933     log_offset += buf_size;
4934     }
4935     err:
4936     - pci_free_consistent(adapter->pdev, get_fat_cmd.size,
4937     - get_fat_cmd.va, get_fat_cmd.dma);
4938     + dma_free_coherent(&adapter->pdev->dev, get_fat_cmd.size,
4939     + get_fat_cmd.va, get_fat_cmd.dma);
4940     spin_unlock_bh(&adapter->mcc_lock);
4941     return status;
4942     }
4943     @@ -2223,12 +2223,12 @@ int be_cmd_read_port_transceiver_data(struct be_adapter *adapter,
4944     return -EINVAL;
4945    
4946     cmd.size = sizeof(struct be_cmd_resp_port_type);
4947     - cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma);
4948     + cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma,
4949     + GFP_ATOMIC);
4950     if (!cmd.va) {
4951     dev_err(&adapter->pdev->dev, "Memory allocation failed\n");
4952     return -ENOMEM;
4953     }
4954     - memset(cmd.va, 0, cmd.size);
4955    
4956     spin_lock_bh(&adapter->mcc_lock);
4957    
4958     @@ -2253,7 +2253,7 @@ int be_cmd_read_port_transceiver_data(struct be_adapter *adapter,
4959     }
4960     err:
4961     spin_unlock_bh(&adapter->mcc_lock);
4962     - pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma);
4963     + dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, cmd.dma);
4964     return status;
4965     }
4966    
4967     @@ -2702,7 +2702,8 @@ int be_cmd_get_phy_info(struct be_adapter *adapter)
4968     goto err;
4969     }
4970     cmd.size = sizeof(struct be_cmd_req_get_phy_info);
4971     - cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma);
4972     + cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma,
4973     + GFP_ATOMIC);
4974     if (!cmd.va) {
4975     dev_err(&adapter->pdev->dev, "Memory alloc failure\n");
4976     status = -ENOMEM;
4977     @@ -2736,7 +2737,7 @@ int be_cmd_get_phy_info(struct be_adapter *adapter)
4978     BE_SUPPORTED_SPEED_1GBPS;
4979     }
4980     }
4981     - pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma);
4982     + dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, cmd.dma);
4983     err:
4984     spin_unlock_bh(&adapter->mcc_lock);
4985     return status;
4986     @@ -2787,8 +2788,9 @@ int be_cmd_get_cntl_attributes(struct be_adapter *adapter)
4987    
4988     memset(&attribs_cmd, 0, sizeof(struct be_dma_mem));
4989     attribs_cmd.size = sizeof(struct be_cmd_resp_cntl_attribs);
4990     - attribs_cmd.va = pci_alloc_consistent(adapter->pdev, attribs_cmd.size,
4991     - &attribs_cmd.dma);
4992     + attribs_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev,
4993     + attribs_cmd.size,
4994     + &attribs_cmd.dma, GFP_ATOMIC);
4995     if (!attribs_cmd.va) {
4996     dev_err(&adapter->pdev->dev, "Memory allocation failure\n");
4997     status = -ENOMEM;
4998     @@ -2815,8 +2817,8 @@ int be_cmd_get_cntl_attributes(struct be_adapter *adapter)
4999     err:
5000     mutex_unlock(&adapter->mbox_lock);
5001     if (attribs_cmd.va)
5002     - pci_free_consistent(adapter->pdev, attribs_cmd.size,
5003     - attribs_cmd.va, attribs_cmd.dma);
5004     + dma_free_coherent(&adapter->pdev->dev, attribs_cmd.size,
5005     + attribs_cmd.va, attribs_cmd.dma);
5006     return status;
5007     }
5008    
5009     @@ -2954,9 +2956,10 @@ int be_cmd_get_mac_from_list(struct be_adapter *adapter, u8 *mac,
5010    
5011     memset(&get_mac_list_cmd, 0, sizeof(struct be_dma_mem));
5012     get_mac_list_cmd.size = sizeof(struct be_cmd_resp_get_mac_list);
5013     - get_mac_list_cmd.va = pci_alloc_consistent(adapter->pdev,
5014     - get_mac_list_cmd.size,
5015     - &get_mac_list_cmd.dma);
5016     + get_mac_list_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev,
5017     + get_mac_list_cmd.size,
5018     + &get_mac_list_cmd.dma,
5019     + GFP_ATOMIC);
5020    
5021     if (!get_mac_list_cmd.va) {
5022     dev_err(&adapter->pdev->dev,
5023     @@ -3029,8 +3032,8 @@ int be_cmd_get_mac_from_list(struct be_adapter *adapter, u8 *mac,
5024    
5025     out:
5026     spin_unlock_bh(&adapter->mcc_lock);
5027     - pci_free_consistent(adapter->pdev, get_mac_list_cmd.size,
5028     - get_mac_list_cmd.va, get_mac_list_cmd.dma);
5029     + dma_free_coherent(&adapter->pdev->dev, get_mac_list_cmd.size,
5030     + get_mac_list_cmd.va, get_mac_list_cmd.dma);
5031     return status;
5032     }
5033    
5034     @@ -3083,8 +3086,8 @@ int be_cmd_set_mac_list(struct be_adapter *adapter, u8 *mac_array,
5035    
5036     memset(&cmd, 0, sizeof(struct be_dma_mem));
5037     cmd.size = sizeof(struct be_cmd_req_set_mac_list);
5038     - cmd.va = dma_alloc_coherent(&adapter->pdev->dev, cmd.size,
5039     - &cmd.dma, GFP_KERNEL);
5040     + cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma,
5041     + GFP_KERNEL);
5042     if (!cmd.va)
5043     return -ENOMEM;
5044    
5045     @@ -3255,7 +3258,8 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter)
5046    
5047     memset(&cmd, 0, sizeof(struct be_dma_mem));
5048     cmd.size = sizeof(struct be_cmd_resp_acpi_wol_magic_config_v1);
5049     - cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma);
5050     + cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma,
5051     + GFP_ATOMIC);
5052     if (!cmd.va) {
5053     dev_err(&adapter->pdev->dev, "Memory allocation failure\n");
5054     status = -ENOMEM;
5055     @@ -3290,7 +3294,8 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter)
5056     err:
5057     mutex_unlock(&adapter->mbox_lock);
5058     if (cmd.va)
5059     - pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma);
5060     + dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va,
5061     + cmd.dma);
5062     return status;
5063    
5064     }
5065     @@ -3304,8 +3309,9 @@ int be_cmd_set_fw_log_level(struct be_adapter *adapter, u32 level)
5066    
5067     memset(&extfat_cmd, 0, sizeof(struct be_dma_mem));
5068     extfat_cmd.size = sizeof(struct be_cmd_resp_get_ext_fat_caps);
5069     - extfat_cmd.va = pci_alloc_consistent(adapter->pdev, extfat_cmd.size,
5070     - &extfat_cmd.dma);
5071     + extfat_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev,
5072     + extfat_cmd.size, &extfat_cmd.dma,
5073     + GFP_ATOMIC);
5074     if (!extfat_cmd.va)
5075     return -ENOMEM;
5076    
5077     @@ -3327,8 +3333,8 @@ int be_cmd_set_fw_log_level(struct be_adapter *adapter, u32 level)
5078    
5079     status = be_cmd_set_ext_fat_capabilites(adapter, &extfat_cmd, cfgs);
5080     err:
5081     - pci_free_consistent(adapter->pdev, extfat_cmd.size, extfat_cmd.va,
5082     - extfat_cmd.dma);
5083     + dma_free_coherent(&adapter->pdev->dev, extfat_cmd.size, extfat_cmd.va,
5084     + extfat_cmd.dma);
5085     return status;
5086     }
5087    
5088     @@ -3341,8 +3347,9 @@ int be_cmd_get_fw_log_level(struct be_adapter *adapter)
5089    
5090     memset(&extfat_cmd, 0, sizeof(struct be_dma_mem));
5091     extfat_cmd.size = sizeof(struct be_cmd_resp_get_ext_fat_caps);
5092     - extfat_cmd.va = pci_alloc_consistent(adapter->pdev, extfat_cmd.size,
5093     - &extfat_cmd.dma);
5094     + extfat_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev,
5095     + extfat_cmd.size, &extfat_cmd.dma,
5096     + GFP_ATOMIC);
5097    
5098     if (!extfat_cmd.va) {
5099     dev_err(&adapter->pdev->dev, "%s: Memory allocation failure\n",
5100     @@ -3360,8 +3367,8 @@ int be_cmd_get_fw_log_level(struct be_adapter *adapter)
5101     level = cfgs->module[0].trace_lvl[j].dbg_lvl;
5102     }
5103     }
5104     - pci_free_consistent(adapter->pdev, extfat_cmd.size, extfat_cmd.va,
5105     - extfat_cmd.dma);
5106     + dma_free_coherent(&adapter->pdev->dev, extfat_cmd.size, extfat_cmd.va,
5107     + extfat_cmd.dma);
5108     err:
5109     return level;
5110     }
5111     @@ -3567,7 +3574,8 @@ int be_cmd_get_func_config(struct be_adapter *adapter, struct be_resources *res)
5112    
5113     memset(&cmd, 0, sizeof(struct be_dma_mem));
5114     cmd.size = sizeof(struct be_cmd_resp_get_func_config);
5115     - cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma);
5116     + cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma,
5117     + GFP_ATOMIC);
5118     if (!cmd.va) {
5119     dev_err(&adapter->pdev->dev, "Memory alloc failure\n");
5120     status = -ENOMEM;
5121     @@ -3607,7 +3615,8 @@ int be_cmd_get_func_config(struct be_adapter *adapter, struct be_resources *res)
5122     err:
5123     mutex_unlock(&adapter->mbox_lock);
5124     if (cmd.va)
5125     - pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma);
5126     + dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va,
5127     + cmd.dma);
5128     return status;
5129     }
5130    
5131     @@ -3628,7 +3637,8 @@ int be_cmd_get_profile_config(struct be_adapter *adapter,
5132    
5133     memset(&cmd, 0, sizeof(struct be_dma_mem));
5134     cmd.size = sizeof(struct be_cmd_resp_get_profile_config);
5135     - cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma);
5136     + cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma,
5137     + GFP_ATOMIC);
5138     if (!cmd.va)
5139     return -ENOMEM;
5140    
5141     @@ -3667,7 +3677,8 @@ int be_cmd_get_profile_config(struct be_adapter *adapter,
5142     res->vf_if_cap_flags = vf_res->cap_flags;
5143     err:
5144     if (cmd.va)
5145     - pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma);
5146     + dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va,
5147     + cmd.dma);
5148     return status;
5149     }
5150    
5151     @@ -3682,7 +3693,8 @@ static int be_cmd_set_profile_config(struct be_adapter *adapter, void *desc,
5152    
5153     memset(&cmd, 0, sizeof(struct be_dma_mem));
5154     cmd.size = sizeof(struct be_cmd_req_set_profile_config);
5155     - cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma);
5156     + cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma,
5157     + GFP_ATOMIC);
5158     if (!cmd.va)
5159     return -ENOMEM;
5160    
5161     @@ -3698,7 +3710,8 @@ static int be_cmd_set_profile_config(struct be_adapter *adapter, void *desc,
5162     status = be_cmd_notify_wait(adapter, &wrb);
5163    
5164     if (cmd.va)
5165     - pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma);
5166     + dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va,
5167     + cmd.dma);
5168     return status;
5169     }
5170    
5171     diff --git a/drivers/net/ethernet/emulex/benet/be_ethtool.c b/drivers/net/ethernet/emulex/benet/be_ethtool.c
5172     index e42a791c1835..a11c5e05634b 100644
5173     --- a/drivers/net/ethernet/emulex/benet/be_ethtool.c
5174     +++ b/drivers/net/ethernet/emulex/benet/be_ethtool.c
5175     @@ -266,8 +266,8 @@ static int lancer_cmd_read_file(struct be_adapter *adapter, u8 *file_name,
5176     int status = 0;
5177    
5178     read_cmd.size = LANCER_READ_FILE_CHUNK;
5179     - read_cmd.va = pci_alloc_consistent(adapter->pdev, read_cmd.size,
5180     - &read_cmd.dma);
5181     + read_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, read_cmd.size,
5182     + &read_cmd.dma, GFP_ATOMIC);
5183    
5184     if (!read_cmd.va) {
5185     dev_err(&adapter->pdev->dev,
5186     @@ -291,8 +291,8 @@ static int lancer_cmd_read_file(struct be_adapter *adapter, u8 *file_name,
5187     break;
5188     }
5189     }
5190     - pci_free_consistent(adapter->pdev, read_cmd.size, read_cmd.va,
5191     - read_cmd.dma);
5192     + dma_free_coherent(&adapter->pdev->dev, read_cmd.size, read_cmd.va,
5193     + read_cmd.dma);
5194    
5195     return status;
5196     }
5197     @@ -818,8 +818,9 @@ static int be_test_ddr_dma(struct be_adapter *adapter)
5198     };
5199    
5200     ddrdma_cmd.size = sizeof(struct be_cmd_req_ddrdma_test);
5201     - ddrdma_cmd.va = dma_alloc_coherent(&adapter->pdev->dev, ddrdma_cmd.size,
5202     - &ddrdma_cmd.dma, GFP_KERNEL);
5203     + ddrdma_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev,
5204     + ddrdma_cmd.size, &ddrdma_cmd.dma,
5205     + GFP_KERNEL);
5206     if (!ddrdma_cmd.va)
5207     return -ENOMEM;
5208    
5209     @@ -941,8 +942,9 @@ static int be_read_eeprom(struct net_device *netdev,
5210    
5211     memset(&eeprom_cmd, 0, sizeof(struct be_dma_mem));
5212     eeprom_cmd.size = sizeof(struct be_cmd_req_seeprom_read);
5213     - eeprom_cmd.va = dma_alloc_coherent(&adapter->pdev->dev, eeprom_cmd.size,
5214     - &eeprom_cmd.dma, GFP_KERNEL);
5215     + eeprom_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev,
5216     + eeprom_cmd.size, &eeprom_cmd.dma,
5217     + GFP_KERNEL);
5218    
5219     if (!eeprom_cmd.va)
5220     return -ENOMEM;
5221     diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
5222     index e51faf0ca989..fdd36794c536 100644
5223     --- a/drivers/net/ethernet/emulex/benet/be_main.c
5224     +++ b/drivers/net/ethernet/emulex/benet/be_main.c
5225     @@ -4113,8 +4113,8 @@ static int lancer_fw_download(struct be_adapter *adapter,
5226    
5227     flash_cmd.size = sizeof(struct lancer_cmd_req_write_object)
5228     + LANCER_FW_DOWNLOAD_CHUNK;
5229     - flash_cmd.va = dma_alloc_coherent(dev, flash_cmd.size,
5230     - &flash_cmd.dma, GFP_KERNEL);
5231     + flash_cmd.va = dma_zalloc_coherent(dev, flash_cmd.size,
5232     + &flash_cmd.dma, GFP_KERNEL);
5233     if (!flash_cmd.va)
5234     return -ENOMEM;
5235    
5236     @@ -4209,8 +4209,8 @@ static int be_fw_download(struct be_adapter *adapter, const struct firmware* fw)
5237     int status = 0, i = 0, num_imgs = 0, ufi_type = 0;
5238    
5239     flash_cmd.size = sizeof(struct be_cmd_write_flashrom);
5240     - flash_cmd.va = dma_alloc_coherent(&adapter->pdev->dev, flash_cmd.size,
5241     - &flash_cmd.dma, GFP_KERNEL);
5242     + flash_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, flash_cmd.size,
5243     + &flash_cmd.dma, GFP_KERNEL);
5244     if (!flash_cmd.va) {
5245     status = -ENOMEM;
5246     goto be_fw_exit;
5247     @@ -4587,10 +4587,10 @@ static int be_ctrl_init(struct be_adapter *adapter)
5248     goto done;
5249    
5250     mbox_mem_alloc->size = sizeof(struct be_mcc_mailbox) + 16;
5251     - mbox_mem_alloc->va = dma_alloc_coherent(&adapter->pdev->dev,
5252     - mbox_mem_alloc->size,
5253     - &mbox_mem_alloc->dma,
5254     - GFP_KERNEL);
5255     + mbox_mem_alloc->va = dma_zalloc_coherent(&adapter->pdev->dev,
5256     + mbox_mem_alloc->size,
5257     + &mbox_mem_alloc->dma,
5258     + GFP_KERNEL);
5259     if (!mbox_mem_alloc->va) {
5260     status = -ENOMEM;
5261     goto unmap_pci_bars;
5262     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c b/drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c
5263     index d476918ef269..aa78f07d3d5e 100644
5264     --- a/drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c
5265     +++ b/drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c
5266     @@ -211,26 +211,28 @@ static int alloc_4k(struct mlx5_core_dev *dev, u64 *addr)
5267     return 0;
5268     }
5269    
5270     +#define MLX5_U64_4K_PAGE_MASK ((~(u64)0U) << PAGE_SHIFT)
5271     +
5272     static void free_4k(struct mlx5_core_dev *dev, u64 addr)
5273     {
5274     struct fw_page *fwp;
5275     int n;
5276    
5277     - fwp = find_fw_page(dev, addr & PAGE_MASK);
5278     + fwp = find_fw_page(dev, addr & MLX5_U64_4K_PAGE_MASK);
5279     if (!fwp) {
5280     mlx5_core_warn(dev, "page not found\n");
5281     return;
5282     }
5283    
5284     - n = (addr & ~PAGE_MASK) >> MLX5_ADAPTER_PAGE_SHIFT;
5285     + n = (addr & ~MLX5_U64_4K_PAGE_MASK) >> MLX5_ADAPTER_PAGE_SHIFT;
5286     fwp->free_count++;
5287     set_bit(n, &fwp->bitmask);
5288     if (fwp->free_count == MLX5_NUM_4K_IN_PAGE) {
5289     rb_erase(&fwp->rb_node, &dev->priv.page_root);
5290     if (fwp->free_count != 1)
5291     list_del(&fwp->list);
5292     - dma_unmap_page(&dev->pdev->dev, addr & PAGE_MASK, PAGE_SIZE,
5293     - DMA_BIDIRECTIONAL);
5294     + dma_unmap_page(&dev->pdev->dev, addr & MLX5_U64_4K_PAGE_MASK,
5295     + PAGE_SIZE, DMA_BIDIRECTIONAL);
5296     __free_page(fwp->page);
5297     kfree(fwp);
5298     } else if (fwp->free_count == 1) {
5299     diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c
5300     index e22e602beef3..c5789cdf7778 100644
5301     --- a/drivers/net/phy/dp83640.c
5302     +++ b/drivers/net/phy/dp83640.c
5303     @@ -47,7 +47,7 @@
5304     #define PSF_TX 0x1000
5305     #define EXT_EVENT 1
5306     #define CAL_EVENT 7
5307     -#define CAL_TRIGGER 7
5308     +#define CAL_TRIGGER 1
5309     #define DP83640_N_PINS 12
5310    
5311     #define MII_DP83640_MICR 0x11
5312     @@ -495,7 +495,9 @@ static int ptp_dp83640_enable(struct ptp_clock_info *ptp,
5313     else
5314     evnt |= EVNT_RISE;
5315     }
5316     + mutex_lock(&clock->extreg_lock);
5317     ext_write(0, phydev, PAGE5, PTP_EVNT, evnt);
5318     + mutex_unlock(&clock->extreg_lock);
5319     return 0;
5320    
5321     case PTP_CLK_REQ_PEROUT:
5322     @@ -531,6 +533,8 @@ static u8 status_frame_src[6] = { 0x08, 0x00, 0x17, 0x0B, 0x6B, 0x0F };
5323    
5324     static void enable_status_frames(struct phy_device *phydev, bool on)
5325     {
5326     + struct dp83640_private *dp83640 = phydev->priv;
5327     + struct dp83640_clock *clock = dp83640->clock;
5328     u16 cfg0 = 0, ver;
5329    
5330     if (on)
5331     @@ -538,9 +542,13 @@ static void enable_status_frames(struct phy_device *phydev, bool on)
5332    
5333     ver = (PSF_PTPVER & VERSIONPTP_MASK) << VERSIONPTP_SHIFT;
5334    
5335     + mutex_lock(&clock->extreg_lock);
5336     +
5337     ext_write(0, phydev, PAGE5, PSF_CFG0, cfg0);
5338     ext_write(0, phydev, PAGE6, PSF_CFG1, ver);
5339    
5340     + mutex_unlock(&clock->extreg_lock);
5341     +
5342     if (!phydev->attached_dev) {
5343     pr_warn("expected to find an attached netdevice\n");
5344     return;
5345     @@ -837,7 +845,7 @@ static void decode_rxts(struct dp83640_private *dp83640,
5346     list_del_init(&rxts->list);
5347     phy2rxts(phy_rxts, rxts);
5348    
5349     - spin_lock_irqsave(&dp83640->rx_queue.lock, flags);
5350     + spin_lock(&dp83640->rx_queue.lock);
5351     skb_queue_walk(&dp83640->rx_queue, skb) {
5352     struct dp83640_skb_info *skb_info;
5353    
5354     @@ -852,7 +860,7 @@ static void decode_rxts(struct dp83640_private *dp83640,
5355     break;
5356     }
5357     }
5358     - spin_unlock_irqrestore(&dp83640->rx_queue.lock, flags);
5359     + spin_unlock(&dp83640->rx_queue.lock);
5360    
5361     if (!shhwtstamps)
5362     list_add_tail(&rxts->list, &dp83640->rxts);
5363     @@ -1172,11 +1180,18 @@ static int dp83640_config_init(struct phy_device *phydev)
5364    
5365     if (clock->chosen && !list_empty(&clock->phylist))
5366     recalibrate(clock);
5367     - else
5368     + else {
5369     + mutex_lock(&clock->extreg_lock);
5370     enable_broadcast(phydev, clock->page, 1);
5371     + mutex_unlock(&clock->extreg_lock);
5372     + }
5373    
5374     enable_status_frames(phydev, true);
5375     +
5376     + mutex_lock(&clock->extreg_lock);
5377     ext_write(0, phydev, PAGE4, PTP_CTL, PTP_ENABLE);
5378     + mutex_unlock(&clock->extreg_lock);
5379     +
5380     return 0;
5381     }
5382    
5383     diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
5384     index dc1f6f07326a..91d6d03da963 100644
5385     --- a/drivers/net/phy/phy.c
5386     +++ b/drivers/net/phy/phy.c
5387     @@ -1050,13 +1050,14 @@ int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable)
5388     {
5389     /* According to 802.3az,the EEE is supported only in full duplex-mode.
5390     * Also EEE feature is active when core is operating with MII, GMII
5391     - * or RGMII. Internal PHYs are also allowed to proceed and should
5392     - * return an error if they do not support EEE.
5393     + * or RGMII (all kinds). Internal PHYs are also allowed to proceed and
5394     + * should return an error if they do not support EEE.
5395     */
5396     if ((phydev->duplex == DUPLEX_FULL) &&
5397     ((phydev->interface == PHY_INTERFACE_MODE_MII) ||
5398     (phydev->interface == PHY_INTERFACE_MODE_GMII) ||
5399     - (phydev->interface == PHY_INTERFACE_MODE_RGMII) ||
5400     + (phydev->interface >= PHY_INTERFACE_MODE_RGMII &&
5401     + phydev->interface <= PHY_INTERFACE_MODE_RGMII_TXID) ||
5402     phy_is_internal(phydev))) {
5403     int eee_lp, eee_cap, eee_adv;
5404     u32 lp, cap, adv;
5405     diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
5406     index c3e4da9e79ca..8067b8fbb0ee 100644
5407     --- a/drivers/net/usb/cdc_ncm.c
5408     +++ b/drivers/net/usb/cdc_ncm.c
5409     @@ -1182,7 +1182,7 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)
5410     * payload data instead.
5411     */
5412     usbnet_set_skb_tx_stats(skb_out, n,
5413     - ctx->tx_curr_frame_payload - skb_out->len);
5414     + (long)ctx->tx_curr_frame_payload - skb_out->len);
5415    
5416     return skb_out;
5417    
5418     diff --git a/drivers/net/xen-netback/xenbus.c b/drivers/net/xen-netback/xenbus.c
5419     index c047282c4ee0..d9d1e2af50d0 100644
5420     --- a/drivers/net/xen-netback/xenbus.c
5421     +++ b/drivers/net/xen-netback/xenbus.c
5422     @@ -34,6 +34,8 @@ struct backend_info {
5423     enum xenbus_state frontend_state;
5424     struct xenbus_watch hotplug_status_watch;
5425     u8 have_hotplug_status_watch:1;
5426     +
5427     + const char *hotplug_script;
5428     };
5429    
5430     static int connect_rings(struct backend_info *be, struct xenvif_queue *queue);
5431     @@ -236,6 +238,7 @@ static int netback_remove(struct xenbus_device *dev)
5432     xenvif_free(be->vif);
5433     be->vif = NULL;
5434     }
5435     + kfree(be->hotplug_script);
5436     kfree(be);
5437     dev_set_drvdata(&dev->dev, NULL);
5438     return 0;
5439     @@ -253,6 +256,7 @@ static int netback_probe(struct xenbus_device *dev,
5440     struct xenbus_transaction xbt;
5441     int err;
5442     int sg;
5443     + const char *script;
5444     struct backend_info *be = kzalloc(sizeof(struct backend_info),
5445     GFP_KERNEL);
5446     if (!be) {
5447     @@ -345,6 +349,15 @@ static int netback_probe(struct xenbus_device *dev,
5448     if (err)
5449     pr_debug("Error writing multi-queue-max-queues\n");
5450    
5451     + script = xenbus_read(XBT_NIL, dev->nodename, "script", NULL);
5452     + if (IS_ERR(script)) {
5453     + err = PTR_ERR(script);
5454     + xenbus_dev_fatal(dev, err, "reading script");
5455     + goto fail;
5456     + }
5457     +
5458     + be->hotplug_script = script;
5459     +
5460     err = xenbus_switch_state(dev, XenbusStateInitWait);
5461     if (err)
5462     goto fail;
5463     @@ -377,22 +390,14 @@ static int netback_uevent(struct xenbus_device *xdev,
5464     struct kobj_uevent_env *env)
5465     {
5466     struct backend_info *be = dev_get_drvdata(&xdev->dev);
5467     - char *val;
5468    
5469     - val = xenbus_read(XBT_NIL, xdev->nodename, "script", NULL);
5470     - if (IS_ERR(val)) {
5471     - int err = PTR_ERR(val);
5472     - xenbus_dev_fatal(xdev, err, "reading script");
5473     - return err;
5474     - } else {
5475     - if (add_uevent_var(env, "script=%s", val)) {
5476     - kfree(val);
5477     - return -ENOMEM;
5478     - }
5479     - kfree(val);
5480     - }
5481     + if (!be)
5482     + return 0;
5483     +
5484     + if (add_uevent_var(env, "script=%s", be->hotplug_script))
5485     + return -ENOMEM;
5486    
5487     - if (!be || !be->vif)
5488     + if (!be->vif)
5489     return 0;
5490    
5491     return add_uevent_var(env, "vif=%s", be->vif->dev->name);
5492     @@ -735,6 +740,7 @@ static void connect(struct backend_info *be)
5493     goto err;
5494     }
5495    
5496     + queue->credit_bytes = credit_bytes;
5497     queue->remaining_credit = credit_bytes;
5498     queue->credit_usec = credit_usec;
5499    
5500     diff --git a/drivers/of/base.c b/drivers/of/base.c
5501     index 3823edf2d012..4c2ccde42427 100644
5502     --- a/drivers/of/base.c
5503     +++ b/drivers/of/base.c
5504     @@ -1250,6 +1250,39 @@ int of_property_read_u64(const struct device_node *np, const char *propname,
5505     EXPORT_SYMBOL_GPL(of_property_read_u64);
5506    
5507     /**
5508     + * of_property_read_u64_array - Find and read an array of 64 bit integers
5509     + * from a property.
5510     + *
5511     + * @np: device node from which the property value is to be read.
5512     + * @propname: name of the property to be searched.
5513     + * @out_values: pointer to return value, modified only if return value is 0.
5514     + * @sz: number of array elements to read
5515     + *
5516     + * Search for a property in a device node and read 64-bit value(s) from
5517     + * it. Returns 0 on success, -EINVAL if the property does not exist,
5518     + * -ENODATA if property does not have a value, and -EOVERFLOW if the
5519     + * property data isn't large enough.
5520     + *
5521     + * The out_values is modified only if a valid u64 value can be decoded.
5522     + */
5523     +int of_property_read_u64_array(const struct device_node *np,
5524     + const char *propname, u64 *out_values,
5525     + size_t sz)
5526     +{
5527     + const __be32 *val = of_find_property_value_of_size(np, propname,
5528     + (sz * sizeof(*out_values)));
5529     +
5530     + if (IS_ERR(val))
5531     + return PTR_ERR(val);
5532     +
5533     + while (sz--) {
5534     + *out_values++ = of_read_number(val, 2);
5535     + val += 2;
5536     + }
5537     + return 0;
5538     +}
5539     +
5540     +/**
5541     * of_property_read_string - Find and read a string from a property
5542     * @np: device node from which the property value is to be read.
5543     * @propname: name of the property to be searched.
5544     diff --git a/drivers/spi/spi-bitbang.c b/drivers/spi/spi-bitbang.c
5545     index dc7d2c2d643e..fecdda270c5d 100644
5546     --- a/drivers/spi/spi-bitbang.c
5547     +++ b/drivers/spi/spi-bitbang.c
5548     @@ -184,7 +184,6 @@ int spi_bitbang_setup(struct spi_device *spi)
5549     {
5550     struct spi_bitbang_cs *cs = spi->controller_state;
5551     struct spi_bitbang *bitbang;
5552     - int retval;
5553     unsigned long flags;
5554    
5555     bitbang = spi_master_get_devdata(spi->master);
5556     @@ -201,9 +200,11 @@ int spi_bitbang_setup(struct spi_device *spi)
5557     if (!cs->txrx_word)
5558     return -EINVAL;
5559    
5560     - retval = bitbang->setup_transfer(spi, NULL);
5561     - if (retval < 0)
5562     - return retval;
5563     + if (bitbang->setup_transfer) {
5564     + int retval = bitbang->setup_transfer(spi, NULL);
5565     + if (retval < 0)
5566     + return retval;
5567     + }
5568    
5569     dev_dbg(&spi->dev, "%s, %u nsec/bit\n", __func__, 2 * cs->nsecs);
5570    
5571     @@ -299,9 +300,11 @@ static int spi_bitbang_transfer_one(struct spi_master *master,
5572    
5573     /* init (-1) or override (1) transfer params */
5574     if (do_setup != 0) {
5575     - status = bitbang->setup_transfer(spi, t);
5576     - if (status < 0)
5577     - break;
5578     + if (bitbang->setup_transfer) {
5579     + status = bitbang->setup_transfer(spi, t);
5580     + if (status < 0)
5581     + break;
5582     + }
5583     if (do_setup == -1)
5584     do_setup = 0;
5585     }
5586     diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
5587     index a69e31e3410f..5c247d7943aa 100644
5588     --- a/drivers/tty/serial/8250/8250_dw.c
5589     +++ b/drivers/tty/serial/8250/8250_dw.c
5590     @@ -316,10 +316,20 @@ static int dw8250_probe_of(struct uart_port *p,
5591     static int dw8250_probe_acpi(struct uart_8250_port *up,
5592     struct dw8250_data *data)
5593     {
5594     + const struct acpi_device_id *id;
5595     struct uart_port *p = &up->port;
5596    
5597     dw8250_setup_port(up);
5598    
5599     + id = acpi_match_device(p->dev->driver->acpi_match_table, p->dev);
5600     + if (!id)
5601     + return -ENODEV;
5602     +
5603     + if (!p->uartclk)
5604     + if (device_property_read_u32(p->dev, "clock-frequency",
5605     + &p->uartclk))
5606     + return -EINVAL;
5607     +
5608     p->iotype = UPIO_MEM32;
5609     p->serial_in = dw8250_serial_in32;
5610     p->serial_out = dw8250_serial_out32;
5611     @@ -542,6 +552,8 @@ static const struct acpi_device_id dw8250_acpi_match[] = {
5612     { "INT3435", 0 },
5613     { "80860F0A", 0 },
5614     { "8086228A", 0 },
5615     + { "APMC0D08", 0},
5616     + { "AMD0020", 0 },
5617     { },
5618     };
5619     MODULE_DEVICE_TABLE(acpi, dw8250_acpi_match);
5620     diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
5621     index 8f62a3cec23e..369e18d9ab48 100644
5622     --- a/drivers/tty/serial/imx.c
5623     +++ b/drivers/tty/serial/imx.c
5624     @@ -590,13 +590,6 @@ static void imx_start_tx(struct uart_port *port)
5625     temp &= ~(UCR1_RRDYEN);
5626     writel(temp, sport->port.membase + UCR1);
5627     }
5628     - /* Clear any pending ORE flag before enabling interrupt */
5629     - temp = readl(sport->port.membase + USR2);
5630     - writel(temp | USR2_ORE, sport->port.membase + USR2);
5631     -
5632     - temp = readl(sport->port.membase + UCR4);
5633     - temp |= UCR4_OREN;
5634     - writel(temp, sport->port.membase + UCR4);
5635    
5636     if (!sport->dma_is_enabled) {
5637     temp = readl(sport->port.membase + UCR1);
5638     @@ -771,7 +764,7 @@ static irqreturn_t imx_int(int irq, void *dev_id)
5639     if (sts2 & USR2_ORE) {
5640     dev_err(sport->port.dev, "Rx FIFO overrun\n");
5641     sport->port.icount.overrun++;
5642     - writel(sts2 | USR2_ORE, sport->port.membase + USR2);
5643     + writel(USR2_ORE, sport->port.membase + USR2);
5644     }
5645    
5646     return IRQ_HANDLED;
5647     @@ -1141,10 +1134,12 @@ static int imx_startup(struct uart_port *port)
5648     }
5649    
5650     spin_lock_irqsave(&sport->port.lock, flags);
5651     +
5652     /*
5653     * Finally, clear and enable interrupts
5654     */
5655     writel(USR1_RTSD, sport->port.membase + USR1);
5656     + writel(USR2_ORE, sport->port.membase + USR2);
5657    
5658     temp = readl(sport->port.membase + UCR1);
5659     temp |= UCR1_RRDYEN | UCR1_RTSDEN | UCR1_UARTEN;
5660     @@ -1156,6 +1151,10 @@ static int imx_startup(struct uart_port *port)
5661    
5662     writel(temp, sport->port.membase + UCR1);
5663    
5664     + temp = readl(sport->port.membase + UCR4);
5665     + temp |= UCR4_OREN;
5666     + writel(temp, sport->port.membase + UCR4);
5667     +
5668     temp = readl(sport->port.membase + UCR2);
5669     temp |= (UCR2_RXEN | UCR2_TXEN);
5670     if (!sport->have_rtscts)
5671     diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
5672     index 0a0e6f0ad15f..e749631d6a97 100644
5673     --- a/drivers/usb/dwc2/hcd.c
5674     +++ b/drivers/usb/dwc2/hcd.c
5675     @@ -1517,7 +1517,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
5676     dev_dbg(hsotg->dev,
5677     "ClearPortFeature USB_PORT_FEAT_SUSPEND\n");
5678     writel(0, hsotg->regs + PCGCTL);
5679     - usleep_range(20000, 40000);
5680     + msleep(USB_RESUME_TIMEOUT);
5681    
5682     hprt0 = dwc2_read_hprt0(hsotg);
5683     hprt0 |= HPRT0_RES;
5684     diff --git a/firmware/ihex2fw.c b/firmware/ihex2fw.c
5685     index cf38e159131a..08d90e25abf0 100644
5686     --- a/firmware/ihex2fw.c
5687     +++ b/firmware/ihex2fw.c
5688     @@ -86,6 +86,7 @@ int main(int argc, char **argv)
5689     case 'j':
5690     include_jump = 1;
5691     break;
5692     + default:
5693     return usage();
5694     }
5695     }
5696     diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
5697     index 3dd249787b11..e39fe28f1ea0 100644
5698     --- a/fs/binfmt_elf.c
5699     +++ b/fs/binfmt_elf.c
5700     @@ -816,7 +816,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
5701     total_size = total_mapping_size(elf_phdata,
5702     loc->elf_ex.e_phnum);
5703     if (!total_size) {
5704     - error = -EINVAL;
5705     + retval = -EINVAL;
5706     goto out_free_dentry;
5707     }
5708     }
5709     diff --git a/fs/efivarfs/super.c b/fs/efivarfs/super.c
5710     index 0a48886e069c..c2f421c30ccd 100644
5711     --- a/fs/efivarfs/super.c
5712     +++ b/fs/efivarfs/super.c
5713     @@ -121,7 +121,7 @@ static int efivarfs_callback(efi_char16_t *name16, efi_guid_t vendor,
5714     int len, i;
5715     int err = -ENOMEM;
5716    
5717     - entry = kmalloc(sizeof(*entry), GFP_KERNEL);
5718     + entry = kzalloc(sizeof(*entry), GFP_KERNEL);
5719     if (!entry)
5720     return err;
5721    
5722     diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
5723     index bada5a1fb695..447486425b8c 100644
5724     --- a/fs/ext4/namei.c
5725     +++ b/fs/ext4/namei.c
5726     @@ -3261,12 +3261,18 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,
5727     EXT4_INDEX_EXTRA_TRANS_BLOCKS + 2);
5728     if (!(flags & RENAME_WHITEOUT)) {
5729     handle = ext4_journal_start(old.dir, EXT4_HT_DIR, credits);
5730     - if (IS_ERR(handle))
5731     - return PTR_ERR(handle);
5732     + if (IS_ERR(handle)) {
5733     + retval = PTR_ERR(handle);
5734     + handle = NULL;
5735     + goto end_rename;
5736     + }
5737     } else {
5738     whiteout = ext4_whiteout_for_rename(&old, credits, &handle);
5739     - if (IS_ERR(whiteout))
5740     - return PTR_ERR(whiteout);
5741     + if (IS_ERR(whiteout)) {
5742     + retval = PTR_ERR(whiteout);
5743     + whiteout = NULL;
5744     + goto end_rename;
5745     + }
5746     }
5747    
5748     if (IS_DIRSYNC(old.dir) || IS_DIRSYNC(new.dir))
5749     @@ -3430,8 +3436,11 @@ static int ext4_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
5750     handle = ext4_journal_start(old.dir, EXT4_HT_DIR,
5751     (2 * EXT4_DATA_TRANS_BLOCKS(old.dir->i_sb) +
5752     2 * EXT4_INDEX_EXTRA_TRANS_BLOCKS + 2));
5753     - if (IS_ERR(handle))
5754     - return PTR_ERR(handle);
5755     + if (IS_ERR(handle)) {
5756     + retval = PTR_ERR(handle);
5757     + handle = NULL;
5758     + goto end_rename;
5759     + }
5760    
5761     if (IS_DIRSYNC(old.dir) || IS_DIRSYNC(new.dir))
5762     ext4_handle_sync(handle);
5763     diff --git a/fs/namespace.c b/fs/namespace.c
5764     index 8b60287a488b..a19d05c4ebe5 100644
5765     --- a/fs/namespace.c
5766     +++ b/fs/namespace.c
5767     @@ -1490,7 +1490,7 @@ void __detach_mounts(struct dentry *dentry)
5768    
5769     namespace_lock();
5770     mp = lookup_mountpoint(dentry);
5771     - if (!mp)
5772     + if (IS_ERR_OR_NULL(mp))
5773     goto out_unlock;
5774    
5775     lock_mount_hash();
5776     diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
5777     index 8de31d472fad..20c757cdd391 100644
5778     --- a/include/acpi/acpi_bus.h
5779     +++ b/include/acpi/acpi_bus.h
5780     @@ -338,6 +338,12 @@ struct acpi_device_physical_node {
5781     bool put_online:1;
5782     };
5783    
5784     +/* ACPI Device Specific Data (_DSD) */
5785     +struct acpi_device_data {
5786     + const union acpi_object *pointer;
5787     + const union acpi_object *properties;
5788     +};
5789     +
5790     /* Device */
5791     struct acpi_device {
5792     int device_type;
5793     @@ -354,6 +360,7 @@ struct acpi_device {
5794     struct acpi_device_wakeup wakeup;
5795     struct acpi_device_perf performance;
5796     struct acpi_device_dir dir;
5797     + struct acpi_device_data data;
5798     struct acpi_scan_handler *handler;
5799     struct acpi_hotplug_context *hp;
5800     struct acpi_driver *driver;
5801     diff --git a/include/linux/acpi.h b/include/linux/acpi.h
5802     index 407a12f663eb..76d64d6a903a 100644
5803     --- a/include/linux/acpi.h
5804     +++ b/include/linux/acpi.h
5805     @@ -28,6 +28,7 @@
5806     #include <linux/errno.h>
5807     #include <linux/ioport.h> /* for struct resource */
5808     #include <linux/device.h>
5809     +#include <linux/property.h>
5810    
5811     #ifndef _LINUX
5812     #define _LINUX
5813     @@ -659,4 +660,75 @@ do { \
5814     #endif
5815     #endif
5816    
5817     +/* Device properties */
5818     +
5819     +#define MAX_ACPI_REFERENCE_ARGS 8
5820     +struct acpi_reference_args {
5821     + struct acpi_device *adev;
5822     + size_t nargs;
5823     + u64 args[MAX_ACPI_REFERENCE_ARGS];
5824     +};
5825     +
5826     +#ifdef CONFIG_ACPI
5827     +int acpi_dev_get_property(struct acpi_device *adev, const char *name,
5828     + acpi_object_type type, const union acpi_object **obj);
5829     +int acpi_dev_get_property_array(struct acpi_device *adev, const char *name,
5830     + acpi_object_type type,
5831     + const union acpi_object **obj);
5832     +int acpi_dev_get_property_reference(struct acpi_device *adev, const char *name,
5833     + const char *cells_name, size_t index,
5834     + struct acpi_reference_args *args);
5835     +
5836     +int acpi_dev_prop_get(struct acpi_device *adev, const char *propname,
5837     + void **valptr);
5838     +int acpi_dev_prop_read_single(struct acpi_device *adev, const char *propname,
5839     + enum dev_prop_type proptype, void *val);
5840     +int acpi_dev_prop_read(struct acpi_device *adev, const char *propname,
5841     + enum dev_prop_type proptype, void *val, size_t nval);
5842     +#else
5843     +static inline int acpi_dev_get_property(struct acpi_device *adev,
5844     + const char *name, acpi_object_type type,
5845     + const union acpi_object **obj)
5846     +{
5847     + return -ENXIO;
5848     +}
5849     +static inline int acpi_dev_get_property_array(struct acpi_device *adev,
5850     + const char *name,
5851     + acpi_object_type type,
5852     + const union acpi_object **obj)
5853     +{
5854     + return -ENXIO;
5855     +}
5856     +static inline int acpi_dev_get_property_reference(struct acpi_device *adev,
5857     + const char *name, const char *cells_name,
5858     + size_t index, struct acpi_reference_args *args)
5859     +{
5860     + return -ENXIO;
5861     +}
5862     +
5863     +static inline int acpi_dev_prop_get(struct acpi_device *adev,
5864     + const char *propname,
5865     + void **valptr)
5866     +{
5867     + return -ENXIO;
5868     +}
5869     +
5870     +static inline int acpi_dev_prop_read_single(struct acpi_device *adev,
5871     + const char *propname,
5872     + enum dev_prop_type proptype,
5873     + void *val)
5874     +{
5875     + return -ENXIO;
5876     +}
5877     +
5878     +static inline int acpi_dev_prop_read(struct acpi_device *adev,
5879     + const char *propname,
5880     + enum dev_prop_type proptype,
5881     + void *val, size_t nval)
5882     +{
5883     + return -ENXIO;
5884     +}
5885     +
5886     +#endif
5887     +
5888     #endif /*_LINUX_ACPI_H*/
5889     diff --git a/include/linux/compiler.h b/include/linux/compiler.h
5890     index 33063f872ee3..000c5f90f08c 100644
5891     --- a/include/linux/compiler.h
5892     +++ b/include/linux/compiler.h
5893     @@ -198,7 +198,7 @@ static __always_inline void data_access_exceeds_word_size(void)
5894     {
5895     }
5896    
5897     -static __always_inline void __read_once_size(volatile void *p, void *res, int size)
5898     +static __always_inline void __read_once_size(const volatile void *p, void *res, int size)
5899     {
5900     switch (size) {
5901     case 1: *(__u8 *)res = *(volatile __u8 *)p; break;
5902     @@ -255,10 +255,10 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
5903     */
5904    
5905     #define READ_ONCE(x) \
5906     - ({ typeof(x) __val; __read_once_size(&x, &__val, sizeof(__val)); __val; })
5907     + ({ union { typeof(x) __val; char __c[1]; } __u; __read_once_size(&(x), __u.__c, sizeof(x)); __u.__val; })
5908    
5909     #define WRITE_ONCE(x, val) \
5910     - ({ typeof(x) __val; __val = val; __write_once_size(&x, &__val, sizeof(__val)); __val; })
5911     + ({ typeof(x) __val = (val); __write_once_size(&(x), &__val, sizeof(__val)); __val; })
5912    
5913     #endif /* __KERNEL__ */
5914    
5915     diff --git a/include/linux/jhash.h b/include/linux/jhash.h
5916     index 47cb09edec1a..348c6f47e4cc 100644
5917     --- a/include/linux/jhash.h
5918     +++ b/include/linux/jhash.h
5919     @@ -145,11 +145,11 @@ static inline u32 jhash2(const u32 *k, u32 length, u32 initval)
5920     }
5921    
5922    
5923     -/* jhash_3words - hash exactly 3, 2 or 1 word(s) */
5924     -static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval)
5925     +/* __jhash_nwords - hash exactly 3, 2 or 1 word(s) */
5926     +static inline u32 __jhash_nwords(u32 a, u32 b, u32 c, u32 initval)
5927     {
5928     - a += JHASH_INITVAL;
5929     - b += JHASH_INITVAL;
5930     + a += initval;
5931     + b += initval;
5932     c += initval;
5933    
5934     __jhash_final(a, b, c);
5935     @@ -157,14 +157,19 @@ static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval)
5936     return c;
5937     }
5938    
5939     +static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval)
5940     +{
5941     + return __jhash_nwords(a, b, c, initval + JHASH_INITVAL + (3 << 2));
5942     +}
5943     +
5944     static inline u32 jhash_2words(u32 a, u32 b, u32 initval)
5945     {
5946     - return jhash_3words(a, b, 0, initval);
5947     + return __jhash_nwords(a, b, 0, initval + JHASH_INITVAL + (2 << 2));
5948     }
5949    
5950     static inline u32 jhash_1word(u32 a, u32 initval)
5951     {
5952     - return jhash_3words(a, 0, 0, initval);
5953     + return __jhash_nwords(a, 0, 0, initval + JHASH_INITVAL + (1 << 2));
5954     }
5955    
5956     #endif /* _LINUX_JHASH_H */
5957     diff --git a/include/linux/kconfig.h b/include/linux/kconfig.h
5958     index be342b94c640..16cfb3448568 100644
5959     --- a/include/linux/kconfig.h
5960     +++ b/include/linux/kconfig.h
5961     @@ -43,4 +43,13 @@
5962     */
5963     #define IS_MODULE(option) config_enabled(option##_MODULE)
5964    
5965     +/*
5966     + * IS_REACHABLE(CONFIG_FOO) evaluates to 1 if the currently compiled
5967     + * code can call a function defined in code compiled based on CONFIG_FOO.
5968     + * This is similar to IS_ENABLED(), but returns false when invoked from
5969     + * built-in code when CONFIG_FOO is set to 'm'.
5970     + */
5971     +#define IS_REACHABLE(option) (config_enabled(option) || \
5972     + (config_enabled(option##_MODULE) && config_enabled(MODULE)))
5973     +
5974     #endif /* __LINUX_KCONFIG_H */
5975     diff --git a/include/linux/of.h b/include/linux/of.h
5976     index 29f0adc5f3e4..ce9f6a2b3532 100644
5977     --- a/include/linux/of.h
5978     +++ b/include/linux/of.h
5979     @@ -23,6 +23,7 @@
5980     #include <linux/spinlock.h>
5981     #include <linux/topology.h>
5982     #include <linux/notifier.h>
5983     +#include <linux/property.h>
5984    
5985     #include <asm/byteorder.h>
5986     #include <asm/errno.h>
5987     @@ -263,6 +264,10 @@ extern int of_property_read_u32_array(const struct device_node *np,
5988     size_t sz);
5989     extern int of_property_read_u64(const struct device_node *np,
5990     const char *propname, u64 *out_value);
5991     +extern int of_property_read_u64_array(const struct device_node *np,
5992     + const char *propname,
5993     + u64 *out_values,
5994     + size_t sz);
5995    
5996     extern int of_property_read_string(struct device_node *np,
5997     const char *propname,
5998     @@ -477,6 +482,13 @@ static inline int of_property_read_u32_array(const struct device_node *np,
5999     return -ENOSYS;
6000     }
6001    
6002     +static inline int of_property_read_u64_array(const struct device_node *np,
6003     + const char *propname,
6004     + u64 *out_values, size_t sz)
6005     +{
6006     + return -ENOSYS;
6007     +}
6008     +
6009     static inline int of_property_read_string(struct device_node *np,
6010     const char *propname,
6011     const char **out_string)
6012     diff --git a/include/linux/property.h b/include/linux/property.h
6013     new file mode 100644
6014     index 000000000000..9242fb0221ba
6015     --- /dev/null
6016     +++ b/include/linux/property.h
6017     @@ -0,0 +1,73 @@
6018     +/*
6019     + * property.h - Unified device property interface.
6020     + *
6021     + * Copyright (C) 2014, Intel Corporation
6022     + * Authors: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
6023     + * Mika Westerberg <mika.westerberg@linux.intel.com>
6024     + *
6025     + * This program is free software; you can redistribute it and/or modify
6026     + * it under the terms of the GNU General Public License version 2 as
6027     + * published by the Free Software Foundation.
6028     + */
6029     +
6030     +#ifndef _LINUX_PROPERTY_H_
6031     +#define _LINUX_PROPERTY_H_
6032     +
6033     +#include <linux/types.h>
6034     +
6035     +struct device;
6036     +
6037     +enum dev_prop_type {
6038     + DEV_PROP_U8,
6039     + DEV_PROP_U16,
6040     + DEV_PROP_U32,
6041     + DEV_PROP_U64,
6042     + DEV_PROP_STRING,
6043     + DEV_PROP_MAX,
6044     +};
6045     +
6046     +bool device_property_present(struct device *dev, const char *propname);
6047     +int device_property_read_u8_array(struct device *dev, const char *propname,
6048     + u8 *val, size_t nval);
6049     +int device_property_read_u16_array(struct device *dev, const char *propname,
6050     + u16 *val, size_t nval);
6051     +int device_property_read_u32_array(struct device *dev, const char *propname,
6052     + u32 *val, size_t nval);
6053     +int device_property_read_u64_array(struct device *dev, const char *propname,
6054     + u64 *val, size_t nval);
6055     +int device_property_read_string_array(struct device *dev, const char *propname,
6056     + const char **val, size_t nval);
6057     +int device_property_read_string(struct device *dev, const char *propname,
6058     + const char **val);
6059     +
6060     +static inline bool device_property_read_bool(struct device *dev,
6061     + const char *propname)
6062     +{
6063     + return device_property_present(dev, propname);
6064     +}
6065     +
6066     +static inline int device_property_read_u8(struct device *dev,
6067     + const char *propname, u8 *val)
6068     +{
6069     + return device_property_read_u8_array(dev, propname, val, 1);
6070     +}
6071     +
6072     +static inline int device_property_read_u16(struct device *dev,
6073     + const char *propname, u16 *val)
6074     +{
6075     + return device_property_read_u16_array(dev, propname, val, 1);
6076     +}
6077     +
6078     +static inline int device_property_read_u32(struct device *dev,
6079     + const char *propname, u32 *val)
6080     +{
6081     + return device_property_read_u32_array(dev, propname, val, 1);
6082     +}
6083     +
6084     +static inline int device_property_read_u64(struct device *dev,
6085     + const char *propname, u64 *val)
6086     +{
6087     + return device_property_read_u64_array(dev, propname, val, 1);
6088     +}
6089     +
6090     +#endif /* _LINUX_PROPERTY_H_ */
6091     diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h
6092     index 848e85cb5c61..24d5c099d3ac 100644
6093     --- a/include/net/inet_connection_sock.h
6094     +++ b/include/net/inet_connection_sock.h
6095     @@ -98,7 +98,8 @@ struct inet_connection_sock {
6096     const struct tcp_congestion_ops *icsk_ca_ops;
6097     const struct inet_connection_sock_af_ops *icsk_af_ops;
6098     unsigned int (*icsk_sync_mss)(struct sock *sk, u32 pmtu);
6099     - __u8 icsk_ca_state;
6100     + __u8 icsk_ca_state:7,
6101     + icsk_ca_setsockopt:1;
6102     __u8 icsk_retransmits;
6103     __u8 icsk_pending;
6104     __u8 icsk_backoff;
6105     diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h
6106     index 856f01cb51dd..230775f5952a 100644
6107     --- a/include/net/sctp/sctp.h
6108     +++ b/include/net/sctp/sctp.h
6109     @@ -571,11 +571,14 @@ static inline void sctp_v6_map_v4(union sctp_addr *addr)
6110     /* Map v4 address to v4-mapped v6 address */
6111     static inline void sctp_v4_map_v6(union sctp_addr *addr)
6112     {
6113     + __be16 port;
6114     +
6115     + port = addr->v4.sin_port;
6116     + addr->v6.sin6_addr.s6_addr32[3] = addr->v4.sin_addr.s_addr;
6117     + addr->v6.sin6_port = port;
6118     addr->v6.sin6_family = AF_INET6;
6119     addr->v6.sin6_flowinfo = 0;
6120     addr->v6.sin6_scope_id = 0;
6121     - addr->v6.sin6_port = addr->v4.sin_port;
6122     - addr->v6.sin6_addr.s6_addr32[3] = addr->v4.sin_addr.s_addr;
6123     addr->v6.sin6_addr.s6_addr32[0] = 0;
6124     addr->v6.sin6_addr.s6_addr32[1] = 0;
6125     addr->v6.sin6_addr.s6_addr32[2] = htonl(0x0000ffff);
6126     diff --git a/include/net/sock.h b/include/net/sock.h
6127     index c8146ed9e66a..4406dbe491f0 100644
6128     --- a/include/net/sock.h
6129     +++ b/include/net/sock.h
6130     @@ -67,6 +67,7 @@
6131     #include <linux/atomic.h>
6132     #include <net/dst.h>
6133     #include <net/checksum.h>
6134     +#include <net/tcp_states.h>
6135     #include <linux/net_tstamp.h>
6136    
6137     struct cgroup;
6138     @@ -2267,6 +2268,14 @@ static inline struct sock *skb_steal_sock(struct sk_buff *skb)
6139     return NULL;
6140     }
6141    
6142     +/* This helper checks if a socket is a full socket,
6143     + * ie _not_ a timewait or request socket.
6144     + */
6145     +static inline bool sk_fullsock(const struct sock *sk)
6146     +{
6147     + return (1 << sk->sk_state) & ~(TCPF_TIME_WAIT | TCPF_NEW_SYN_RECV);
6148     +}
6149     +
6150     void sock_enable_timestamp(struct sock *sk, int flag);
6151     int sock_get_timestamp(struct sock *, struct timeval __user *);
6152     int sock_get_timestampns(struct sock *, struct timespec __user *);
6153     diff --git a/include/net/tcp_states.h b/include/net/tcp_states.h
6154     index b0b645988bd8..50e78a74d0df 100644
6155     --- a/include/net/tcp_states.h
6156     +++ b/include/net/tcp_states.h
6157     @@ -25,6 +25,7 @@ enum {
6158     TCP_LAST_ACK,
6159     TCP_LISTEN,
6160     TCP_CLOSING, /* Now a valid state */
6161     + TCP_NEW_SYN_RECV,
6162    
6163     TCP_MAX_STATES /* Leave at the end! */
6164     };
6165     @@ -44,7 +45,8 @@ enum {
6166     TCPF_CLOSE_WAIT = (1 << 8),
6167     TCPF_LAST_ACK = (1 << 9),
6168     TCPF_LISTEN = (1 << 10),
6169     - TCPF_CLOSING = (1 << 11)
6170     + TCPF_CLOSING = (1 << 11),
6171     + TCPF_NEW_SYN_RECV = (1 << 12),
6172     };
6173    
6174     #endif /* _LINUX_TCP_STATES_H */
6175     diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
6176     index ef2b104b254c..2246a36050f9 100644
6177     --- a/kernel/sched/fair.c
6178     +++ b/kernel/sched/fair.c
6179     @@ -1979,8 +1979,10 @@ void task_numa_work(struct callback_head *work)
6180     vma = mm->mmap;
6181     }
6182     for (; vma; vma = vma->vm_next) {
6183     - if (!vma_migratable(vma) || !vma_policy_mof(vma))
6184     + if (!vma_migratable(vma) || !vma_policy_mof(vma) ||
6185     + is_vm_hugetlb_page(vma) || (vma->vm_flags & VM_MIXEDMAP)) {
6186     continue;
6187     + }
6188    
6189     /*
6190     * Shared library pages mapped by multiple processes are not
6191     diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
6192     index 6f6c95cfe8f2..eab8862d9f88 100644
6193     --- a/net/bridge/br_fdb.c
6194     +++ b/net/bridge/br_fdb.c
6195     @@ -789,9 +789,11 @@ static int __br_fdb_add(struct ndmsg *ndm, struct net_bridge_port *p,
6196     int err = 0;
6197    
6198     if (ndm->ndm_flags & NTF_USE) {
6199     + local_bh_disable();
6200     rcu_read_lock();
6201     br_fdb_update(p->br, p, addr, vid, true);
6202     rcu_read_unlock();
6203     + local_bh_enable();
6204     } else {
6205     spin_lock_bh(&p->br->hash_lock);
6206     err = fdb_add_entry(p, addr, ndm->ndm_state,
6207     diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
6208     index c465876c7861..b0aee78dba41 100644
6209     --- a/net/bridge/br_multicast.c
6210     +++ b/net/bridge/br_multicast.c
6211     @@ -1071,7 +1071,7 @@ static int br_ip6_multicast_mld2_report(struct net_bridge *br,
6212    
6213     err = br_ip6_multicast_add_group(br, port, &grec->grec_mca,
6214     vid);
6215     - if (!err)
6216     + if (err)
6217     break;
6218     }
6219    
6220     @@ -1821,7 +1821,7 @@ static void br_multicast_query_expired(struct net_bridge *br,
6221     if (query->startup_sent < br->multicast_startup_query_count)
6222     query->startup_sent++;
6223    
6224     - RCU_INIT_POINTER(querier, NULL);
6225     + RCU_INIT_POINTER(querier->port, NULL);
6226     br_multicast_send_query(br, NULL, query);
6227     spin_unlock(&br->multicast_lock);
6228     }
6229     diff --git a/net/caif/caif_socket.c b/net/caif/caif_socket.c
6230     index 765c78110fa8..5e10ee0efffb 100644
6231     --- a/net/caif/caif_socket.c
6232     +++ b/net/caif/caif_socket.c
6233     @@ -330,6 +330,10 @@ static long caif_stream_data_wait(struct sock *sk, long timeo)
6234     release_sock(sk);
6235     timeo = schedule_timeout(timeo);
6236     lock_sock(sk);
6237     +
6238     + if (sock_flag(sk, SOCK_DEAD))
6239     + break;
6240     +
6241     clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
6242     }
6243    
6244     @@ -374,6 +378,10 @@ static int caif_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
6245     struct sk_buff *skb;
6246    
6247     lock_sock(sk);
6248     + if (sock_flag(sk, SOCK_DEAD)) {
6249     + err = -ECONNRESET;
6250     + goto unlock;
6251     + }
6252     skb = skb_dequeue(&sk->sk_receive_queue);
6253     caif_check_flow_release(sk);
6254    
6255     diff --git a/net/ceph/crush/mapper.c b/net/ceph/crush/mapper.c
6256     index a1ef53c04415..b1f2d1f44d37 100644
6257     --- a/net/ceph/crush/mapper.c
6258     +++ b/net/ceph/crush/mapper.c
6259     @@ -290,6 +290,7 @@ static int is_out(const struct crush_map *map,
6260     * @type: the type of item to choose
6261     * @out: pointer to output vector
6262     * @outpos: our position in that vector
6263     + * @out_size: size of the out vector
6264     * @tries: number of attempts to make
6265     * @recurse_tries: number of attempts to have recursive chooseleaf make
6266     * @local_retries: localized retries
6267     @@ -304,6 +305,7 @@ static int crush_choose_firstn(const struct crush_map *map,
6268     const __u32 *weight, int weight_max,
6269     int x, int numrep, int type,
6270     int *out, int outpos,
6271     + int out_size,
6272     unsigned int tries,
6273     unsigned int recurse_tries,
6274     unsigned int local_retries,
6275     @@ -322,6 +324,7 @@ static int crush_choose_firstn(const struct crush_map *map,
6276     int item = 0;
6277     int itemtype;
6278     int collide, reject;
6279     + int count = out_size;
6280    
6281     dprintk("CHOOSE%s bucket %d x %d outpos %d numrep %d tries %d recurse_tries %d local_retries %d local_fallback_retries %d parent_r %d\n",
6282     recurse_to_leaf ? "_LEAF" : "",
6283     @@ -329,7 +332,7 @@ static int crush_choose_firstn(const struct crush_map *map,
6284     tries, recurse_tries, local_retries, local_fallback_retries,
6285     parent_r);
6286    
6287     - for (rep = outpos; rep < numrep; rep++) {
6288     + for (rep = outpos; rep < numrep && count > 0 ; rep++) {
6289     /* keep trying until we get a non-out, non-colliding item */
6290     ftotal = 0;
6291     skip_rep = 0;
6292     @@ -403,7 +406,7 @@ static int crush_choose_firstn(const struct crush_map *map,
6293     map->buckets[-1-item],
6294     weight, weight_max,
6295     x, outpos+1, 0,
6296     - out2, outpos,
6297     + out2, outpos, count,
6298     recurse_tries, 0,
6299     local_retries,
6300     local_fallback_retries,
6301     @@ -463,6 +466,7 @@ reject:
6302     dprintk("CHOOSE got %d\n", item);
6303     out[outpos] = item;
6304     outpos++;
6305     + count--;
6306     }
6307    
6308     dprintk("CHOOSE returns %d\n", outpos);
6309     @@ -654,6 +658,7 @@ int crush_do_rule(const struct crush_map *map,
6310     __u32 step;
6311     int i, j;
6312     int numrep;
6313     + int out_size;
6314     /*
6315     * the original choose_total_tries value was off by one (it
6316     * counted "retries" and not "tries"). add one.
6317     @@ -761,6 +766,7 @@ int crush_do_rule(const struct crush_map *map,
6318     x, numrep,
6319     curstep->arg2,
6320     o+osize, j,
6321     + result_max-osize,
6322     choose_tries,
6323     recurse_tries,
6324     choose_local_retries,
6325     @@ -770,11 +776,13 @@ int crush_do_rule(const struct crush_map *map,
6326     c+osize,
6327     0);
6328     } else {
6329     + out_size = ((numrep < (result_max-osize)) ?
6330     + numrep : (result_max-osize));
6331     crush_choose_indep(
6332     map,
6333     map->buckets[-1-w[i]],
6334     weight, weight_max,
6335     - x, numrep, numrep,
6336     + x, out_size, numrep,
6337     curstep->arg2,
6338     o+osize, j,
6339     choose_tries,
6340     @@ -783,7 +791,7 @@ int crush_do_rule(const struct crush_map *map,
6341     recurse_to_leaf,
6342     c+osize,
6343     0);
6344     - osize += numrep;
6345     + osize += out_size;
6346     }
6347     }
6348    
6349     diff --git a/net/core/dev.c b/net/core/dev.c
6350     index 5cdbc1bd9783..fb9625874b3c 100644
6351     --- a/net/core/dev.c
6352     +++ b/net/core/dev.c
6353     @@ -5080,7 +5080,7 @@ static int __netdev_upper_dev_link(struct net_device *dev,
6354     if (__netdev_find_adj(upper_dev, dev, &upper_dev->all_adj_list.upper))
6355     return -EBUSY;
6356    
6357     - if (__netdev_find_adj(dev, upper_dev, &dev->all_adj_list.upper))
6358     + if (__netdev_find_adj(dev, upper_dev, &dev->adj_list.upper))
6359     return -EEXIST;
6360    
6361     if (master && netdev_master_upper_dev_get(dev))
6362     diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
6363     index c522f7a00eab..24d3242f0e01 100644
6364     --- a/net/core/rtnetlink.c
6365     +++ b/net/core/rtnetlink.c
6366     @@ -2229,6 +2229,9 @@ void rtmsg_ifinfo(int type, struct net_device *dev, unsigned int change,
6367     int err = -ENOBUFS;
6368     size_t if_info_size;
6369    
6370     + if (dev->reg_state != NETREG_REGISTERED)
6371     + return;
6372     +
6373     skb = nlmsg_new((if_info_size = if_nlmsg_size(dev, 0)), flags);
6374     if (skb == NULL)
6375     goto errout;
6376     diff --git a/net/ipv4/route.c b/net/ipv4/route.c
6377     index d58dd0ec3e53..b7ac498fed5f 100644
6378     --- a/net/ipv4/route.c
6379     +++ b/net/ipv4/route.c
6380     @@ -903,6 +903,10 @@ static int ip_error(struct sk_buff *skb)
6381     bool send;
6382     int code;
6383    
6384     + /* IP on this device is disabled. */
6385     + if (!in_dev)
6386     + goto out;
6387     +
6388     net = dev_net(rt->dst.dev);
6389     if (!IN_DEV_FORWARD(in_dev)) {
6390     switch (rt->dst.error) {
6391     diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
6392     index 38c2bcb8dd5d..de6195485b31 100644
6393     --- a/net/ipv4/tcp.c
6394     +++ b/net/ipv4/tcp.c
6395     @@ -2639,6 +2639,7 @@ void tcp_get_info(const struct sock *sk, struct tcp_info *info)
6396     const struct tcp_sock *tp = tcp_sk(sk);
6397     const struct inet_connection_sock *icsk = inet_csk(sk);
6398     u32 now = tcp_time_stamp;
6399     + u32 rate;
6400    
6401     memset(info, 0, sizeof(*info));
6402    
6403     @@ -2699,10 +2700,11 @@ void tcp_get_info(const struct sock *sk, struct tcp_info *info)
6404    
6405     info->tcpi_total_retrans = tp->total_retrans;
6406    
6407     - info->tcpi_pacing_rate = sk->sk_pacing_rate != ~0U ?
6408     - sk->sk_pacing_rate : ~0ULL;
6409     - info->tcpi_max_pacing_rate = sk->sk_max_pacing_rate != ~0U ?
6410     - sk->sk_max_pacing_rate : ~0ULL;
6411     + rate = READ_ONCE(sk->sk_pacing_rate);
6412     + info->tcpi_pacing_rate = rate != ~0U ? rate : ~0ULL;
6413     +
6414     + rate = READ_ONCE(sk->sk_max_pacing_rate);
6415     + info->tcpi_max_pacing_rate = rate != ~0U ? rate : ~0ULL;
6416     }
6417     EXPORT_SYMBOL_GPL(tcp_get_info);
6418    
6419     diff --git a/net/ipv4/tcp_cong.c b/net/ipv4/tcp_cong.c
6420     index b1c5970d47a1..b3316c8279a0 100644
6421     --- a/net/ipv4/tcp_cong.c
6422     +++ b/net/ipv4/tcp_cong.c
6423     @@ -248,9 +248,10 @@ int tcp_set_congestion_control(struct sock *sk, const char *name)
6424     ca = tcp_ca_find(name);
6425    
6426     /* no change asking for existing value */
6427     - if (ca == icsk->icsk_ca_ops)
6428     + if (ca == icsk->icsk_ca_ops) {
6429     + icsk->icsk_ca_setsockopt = 1;
6430     goto out;
6431     -
6432     + }
6433     #ifdef CONFIG_MODULES
6434     /* not found attempt to autoload module */
6435     if (!ca && capable(CAP_NET_ADMIN)) {
6436     @@ -273,6 +274,7 @@ int tcp_set_congestion_control(struct sock *sk, const char *name)
6437     else {
6438     tcp_cleanup_congestion_control(sk);
6439     icsk->icsk_ca_ops = ca;
6440     + icsk->icsk_ca_setsockopt = 1;
6441    
6442     if (sk->sk_state != TCP_CLOSE && icsk->icsk_ca_ops->init)
6443     icsk->icsk_ca_ops->init(sk);
6444     diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c
6445     index 63d2680b65db..2f6667116e85 100644
6446     --- a/net/ipv4/tcp_minisocks.c
6447     +++ b/net/ipv4/tcp_minisocks.c
6448     @@ -297,7 +297,7 @@ void tcp_time_wait(struct sock *sk, int state, int timeo)
6449     tw->tw_v6_daddr = sk->sk_v6_daddr;
6450     tw->tw_v6_rcv_saddr = sk->sk_v6_rcv_saddr;
6451     tw->tw_tclass = np->tclass;
6452     - tw->tw_flowlabel = np->flow_label >> 12;
6453     + tw->tw_flowlabel = be32_to_cpu(np->flow_label & IPV6_FLOWLABEL_MASK);
6454     tw->tw_ipv6only = sk->sk_ipv6only;
6455     }
6456     #endif
6457     @@ -451,7 +451,8 @@ struct sock *tcp_create_openreq_child(struct sock *sk, struct request_sock *req,
6458     newtp->snd_cwnd = TCP_INIT_CWND;
6459     newtp->snd_cwnd_cnt = 0;
6460    
6461     - if (!try_module_get(newicsk->icsk_ca_ops->owner))
6462     + if (!newicsk->icsk_ca_setsockopt ||
6463     + !try_module_get(newicsk->icsk_ca_ops->owner))
6464     tcp_assign_congestion_control(newsk);
6465    
6466     tcp_set_ca_state(newsk, TCP_CA_Open);
6467     diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
6468     index cd0db5471bb5..c5e3194fd9a5 100644
6469     --- a/net/ipv4/udp.c
6470     +++ b/net/ipv4/udp.c
6471     @@ -90,6 +90,7 @@
6472     #include <linux/socket.h>
6473     #include <linux/sockios.h>
6474     #include <linux/igmp.h>
6475     +#include <linux/inetdevice.h>
6476     #include <linux/in.h>
6477     #include <linux/errno.h>
6478     #include <linux/timer.h>
6479     @@ -1336,10 +1337,8 @@ csum_copy_err:
6480     }
6481     unlock_sock_fast(sk, slow);
6482    
6483     - if (noblock)
6484     - return -EAGAIN;
6485     -
6486     - /* starting over for a new packet */
6487     + /* starting over for a new packet, but check if we need to yield */
6488     + cond_resched();
6489     msg->msg_flags &= ~MSG_TRUNC;
6490     goto try_again;
6491     }
6492     @@ -1950,6 +1949,7 @@ void udp_v4_early_demux(struct sk_buff *skb)
6493     struct sock *sk;
6494     struct dst_entry *dst;
6495     int dif = skb->dev->ifindex;
6496     + int ours;
6497    
6498     /* validate the packet */
6499     if (!pskb_may_pull(skb, skb_transport_offset(skb) + sizeof(struct udphdr)))
6500     @@ -1959,14 +1959,24 @@ void udp_v4_early_demux(struct sk_buff *skb)
6501     uh = udp_hdr(skb);
6502    
6503     if (skb->pkt_type == PACKET_BROADCAST ||
6504     - skb->pkt_type == PACKET_MULTICAST)
6505     + skb->pkt_type == PACKET_MULTICAST) {
6506     + struct in_device *in_dev = __in_dev_get_rcu(skb->dev);
6507     +
6508     + if (!in_dev)
6509     + return;
6510     +
6511     + ours = ip_check_mc_rcu(in_dev, iph->daddr, iph->saddr,
6512     + iph->protocol);
6513     + if (!ours)
6514     + return;
6515     sk = __udp4_lib_mcast_demux_lookup(net, uh->dest, iph->daddr,
6516     uh->source, iph->saddr, dif);
6517     - else if (skb->pkt_type == PACKET_HOST)
6518     + } else if (skb->pkt_type == PACKET_HOST) {
6519     sk = __udp4_lib_demux_lookup(net, uh->dest, iph->daddr,
6520     uh->source, iph->saddr, dif);
6521     - else
6522     + } else {
6523     return;
6524     + }
6525    
6526     if (!sk)
6527     return;
6528     diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
6529     index bcda14de7f84..2459b7b0f705 100644
6530     --- a/net/ipv6/ip6_vti.c
6531     +++ b/net/ipv6/ip6_vti.c
6532     @@ -271,8 +271,7 @@ static struct ip6_tnl *vti6_locate(struct net *net, struct __ip6_tnl_parm *p,
6533     static void vti6_dev_uninit(struct net_device *dev)
6534     {
6535     struct ip6_tnl *t = netdev_priv(dev);
6536     - struct net *net = dev_net(dev);
6537     - struct vti6_net *ip6n = net_generic(net, vti6_net_id);
6538     + struct vti6_net *ip6n = net_generic(t->net, vti6_net_id);
6539    
6540     if (dev == ip6n->fb_tnl_dev)
6541     RCU_INIT_POINTER(ip6n->tnls_wc[0], NULL);
6542     diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
6543     index 79fe58510ee8..a3f9f11abf4c 100644
6544     --- a/net/ipv6/tcp_ipv6.c
6545     +++ b/net/ipv6/tcp_ipv6.c
6546     @@ -975,7 +975,7 @@ static void tcp_v6_timewait_ack(struct sock *sk, struct sk_buff *skb)
6547     tcptw->tw_rcv_wnd >> tw->tw_rcv_wscale,
6548     tcp_time_stamp + tcptw->tw_ts_offset,
6549     tcptw->tw_ts_recent, tw->tw_bound_dev_if, tcp_twsk_md5_key(tcptw),
6550     - tw->tw_tclass, (tw->tw_flowlabel << 12));
6551     + tw->tw_tclass, cpu_to_be32(tw->tw_flowlabel));
6552    
6553     inet_twsk_put(tw);
6554     }
6555     diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
6556     index f6ba535b6feb..dd530f0e5a8a 100644
6557     --- a/net/ipv6/udp.c
6558     +++ b/net/ipv6/udp.c
6559     @@ -514,10 +514,8 @@ csum_copy_err:
6560     }
6561     unlock_sock_fast(sk, slow);
6562    
6563     - if (noblock)
6564     - return -EAGAIN;
6565     -
6566     - /* starting over for a new packet */
6567     + /* starting over for a new packet, but check if we need to yield */
6568     + cond_resched();
6569     msg->msg_flags &= ~MSG_TRUNC;
6570     goto try_again;
6571     }
6572     @@ -721,7 +719,9 @@ static bool __udp_v6_is_mcast_sock(struct net *net, struct sock *sk,
6573     (inet->inet_dport && inet->inet_dport != rmt_port) ||
6574     (!ipv6_addr_any(&sk->sk_v6_daddr) &&
6575     !ipv6_addr_equal(&sk->sk_v6_daddr, rmt_addr)) ||
6576     - (sk->sk_bound_dev_if && sk->sk_bound_dev_if != dif))
6577     + (sk->sk_bound_dev_if && sk->sk_bound_dev_if != dif) ||
6578     + (!ipv6_addr_any(&sk->sk_v6_rcv_saddr) &&
6579     + !ipv6_addr_equal(&sk->sk_v6_rcv_saddr, loc_addr)))
6580     return false;
6581     if (!inet6_mc_check(sk, loc_addr, rmt_addr))
6582     return false;
6583     diff --git a/net/netfilter/xt_cgroup.c b/net/netfilter/xt_cgroup.c
6584     index 7198d660b4de..a1d126f29463 100644
6585     --- a/net/netfilter/xt_cgroup.c
6586     +++ b/net/netfilter/xt_cgroup.c
6587     @@ -39,7 +39,7 @@ cgroup_mt(const struct sk_buff *skb, struct xt_action_param *par)
6588     {
6589     const struct xt_cgroup_info *info = par->matchinfo;
6590    
6591     - if (skb->sk == NULL)
6592     + if (skb->sk == NULL || !sk_fullsock(skb->sk))
6593     return false;
6594    
6595     return (info->id == skb->sk->sk_classid) ^ info->invert;
6596     diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
6597     index aad6a679fb13..fae88709aaa2 100644
6598     --- a/net/sched/cls_api.c
6599     +++ b/net/sched/cls_api.c
6600     @@ -81,6 +81,11 @@ int unregister_tcf_proto_ops(struct tcf_proto_ops *ops)
6601     struct tcf_proto_ops *t;
6602     int rc = -ENOENT;
6603    
6604     + /* Wait for outstanding call_rcu()s, if any, from a
6605     + * tcf_proto_ops's destroy() handler.
6606     + */
6607     + rcu_barrier();
6608     +
6609     write_lock(&cls_mod_lock);
6610     list_for_each_entry(t, &tcf_proto_base, head) {
6611     if (t == ops) {
6612     diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
6613     index 76f402e05bd6..a25fae3c8ad6 100644
6614     --- a/net/sched/sch_api.c
6615     +++ b/net/sched/sch_api.c
6616     @@ -815,10 +815,8 @@ static int qdisc_graft(struct net_device *dev, struct Qdisc *parent,
6617     if (dev->flags & IFF_UP)
6618     dev_deactivate(dev);
6619    
6620     - if (new && new->ops->attach) {
6621     - new->ops->attach(new);
6622     - num_q = 0;
6623     - }
6624     + if (new && new->ops->attach)
6625     + goto skip;
6626    
6627     for (i = 0; i < num_q; i++) {
6628     struct netdev_queue *dev_queue = dev_ingress_queue(dev);
6629     @@ -834,12 +832,16 @@ static int qdisc_graft(struct net_device *dev, struct Qdisc *parent,
6630     qdisc_destroy(old);
6631     }
6632    
6633     +skip:
6634     if (!ingress) {
6635     notify_and_destroy(net, skb, n, classid,
6636     dev->qdisc, new);
6637     if (new && !new->ops->attach)
6638     atomic_inc(&new->refcnt);
6639     dev->qdisc = new ? : &noop_qdisc;
6640     +
6641     + if (new && new->ops->attach)
6642     + new->ops->attach(new);
6643     } else {
6644     notify_and_destroy(net, skb, n, classid, old, new);
6645     }
6646     diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c
6647     index 61c41298b4ea..6e5d5034b0f8 100644
6648     --- a/net/sunrpc/xprtrdma/verbs.c
6649     +++ b/net/sunrpc/xprtrdma/verbs.c
6650     @@ -511,8 +511,8 @@ int
6651     rpcrdma_ia_open(struct rpcrdma_xprt *xprt, struct sockaddr *addr, int memreg)
6652     {
6653     int rc, mem_priv;
6654     - struct ib_device_attr devattr;
6655     struct rpcrdma_ia *ia = &xprt->rx_ia;
6656     + struct ib_device_attr *devattr = &ia->ri_devattr;
6657    
6658     ia->ri_id = rpcrdma_create_id(xprt, ia, addr);
6659     if (IS_ERR(ia->ri_id)) {
6660     @@ -528,28 +528,24 @@ rpcrdma_ia_open(struct rpcrdma_xprt *xprt, struct sockaddr *addr, int memreg)
6661     goto out2;
6662     }
6663    
6664     - /*
6665     - * Query the device to determine if the requested memory
6666     - * registration strategy is supported. If it isn't, set the
6667     - * strategy to a globally supported model.
6668     - */
6669     - rc = ib_query_device(ia->ri_id->device, &devattr);
6670     + rc = ib_query_device(ia->ri_id->device, devattr);
6671     if (rc) {
6672     dprintk("RPC: %s: ib_query_device failed %d\n",
6673     __func__, rc);
6674     goto out2;
6675     }
6676    
6677     - if (devattr.device_cap_flags & IB_DEVICE_LOCAL_DMA_LKEY) {
6678     + if (devattr->device_cap_flags & IB_DEVICE_LOCAL_DMA_LKEY) {
6679     ia->ri_have_dma_lkey = 1;
6680     ia->ri_dma_lkey = ia->ri_id->device->local_dma_lkey;
6681     }
6682    
6683     if (memreg == RPCRDMA_FRMR) {
6684     /* Requires both frmr reg and local dma lkey */
6685     - if ((devattr.device_cap_flags &
6686     + if (((devattr->device_cap_flags &
6687     (IB_DEVICE_MEM_MGT_EXTENSIONS|IB_DEVICE_LOCAL_DMA_LKEY)) !=
6688     - (IB_DEVICE_MEM_MGT_EXTENSIONS|IB_DEVICE_LOCAL_DMA_LKEY)) {
6689     + (IB_DEVICE_MEM_MGT_EXTENSIONS|IB_DEVICE_LOCAL_DMA_LKEY)) ||
6690     + (devattr->max_fast_reg_page_list_len == 0)) {
6691     dprintk("RPC: %s: FRMR registration "
6692     "not supported by HCA\n", __func__);
6693     memreg = RPCRDMA_MTHCAFMR;
6694     @@ -557,7 +553,7 @@ rpcrdma_ia_open(struct rpcrdma_xprt *xprt, struct sockaddr *addr, int memreg)
6695     /* Mind the ia limit on FRMR page list depth */
6696     ia->ri_max_frmr_depth = min_t(unsigned int,
6697     RPCRDMA_MAX_DATA_SEGS,
6698     - devattr.max_fast_reg_page_list_len);
6699     + devattr->max_fast_reg_page_list_len);
6700     }
6701     }
6702     if (memreg == RPCRDMA_MTHCAFMR) {
6703     @@ -655,20 +651,13 @@ int
6704     rpcrdma_ep_create(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia,
6705     struct rpcrdma_create_data_internal *cdata)
6706     {
6707     - struct ib_device_attr devattr;
6708     + struct ib_device_attr *devattr = &ia->ri_devattr;
6709     struct ib_cq *sendcq, *recvcq;
6710     int rc, err;
6711    
6712     - rc = ib_query_device(ia->ri_id->device, &devattr);
6713     - if (rc) {
6714     - dprintk("RPC: %s: ib_query_device failed %d\n",
6715     - __func__, rc);
6716     - return rc;
6717     - }
6718     -
6719     /* check provider's send/recv wr limits */
6720     - if (cdata->max_requests > devattr.max_qp_wr)
6721     - cdata->max_requests = devattr.max_qp_wr;
6722     + if (cdata->max_requests > devattr->max_qp_wr)
6723     + cdata->max_requests = devattr->max_qp_wr;
6724    
6725     ep->rep_attr.event_handler = rpcrdma_qp_async_error_upcall;
6726     ep->rep_attr.qp_context = ep;
6727     @@ -703,8 +692,8 @@ rpcrdma_ep_create(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia,
6728    
6729     }
6730     ep->rep_attr.cap.max_send_wr *= depth;
6731     - if (ep->rep_attr.cap.max_send_wr > devattr.max_qp_wr) {
6732     - cdata->max_requests = devattr.max_qp_wr / depth;
6733     + if (ep->rep_attr.cap.max_send_wr > devattr->max_qp_wr) {
6734     + cdata->max_requests = devattr->max_qp_wr / depth;
6735     if (!cdata->max_requests)
6736     return -EINVAL;
6737     ep->rep_attr.cap.max_send_wr = cdata->max_requests *
6738     @@ -786,10 +775,11 @@ rpcrdma_ep_create(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia,
6739    
6740     /* Client offers RDMA Read but does not initiate */
6741     ep->rep_remote_cma.initiator_depth = 0;
6742     - if (devattr.max_qp_rd_atom > 32) /* arbitrary but <= 255 */
6743     + if (devattr->max_qp_rd_atom > 32) /* arbitrary but <= 255 */
6744     ep->rep_remote_cma.responder_resources = 32;
6745     else
6746     - ep->rep_remote_cma.responder_resources = devattr.max_qp_rd_atom;
6747     + ep->rep_remote_cma.responder_resources =
6748     + devattr->max_qp_rd_atom;
6749    
6750     ep->rep_remote_cma.retry_count = 7;
6751     ep->rep_remote_cma.flow_control = 0;
6752     diff --git a/net/sunrpc/xprtrdma/xprt_rdma.h b/net/sunrpc/xprtrdma/xprt_rdma.h
6753     index ac7fc9a31342..11f0e06f6623 100644
6754     --- a/net/sunrpc/xprtrdma/xprt_rdma.h
6755     +++ b/net/sunrpc/xprtrdma/xprt_rdma.h
6756     @@ -70,6 +70,7 @@ struct rpcrdma_ia {
6757     int ri_async_rc;
6758     enum rpcrdma_memreg ri_memreg_strategy;
6759     unsigned int ri_max_frmr_depth;
6760     + struct ib_device_attr ri_devattr;
6761     };
6762    
6763     /*
6764     diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
6765     index e96884380732..8232118b3f82 100644
6766     --- a/net/unix/af_unix.c
6767     +++ b/net/unix/af_unix.c
6768     @@ -1899,6 +1899,10 @@ static long unix_stream_data_wait(struct sock *sk, long timeo,
6769     unix_state_unlock(sk);
6770     timeo = freezable_schedule_timeout(timeo);
6771     unix_state_lock(sk);
6772     +
6773     + if (sock_flag(sk, SOCK_DEAD))
6774     + break;
6775     +
6776     clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
6777     }
6778    
6779     @@ -1963,6 +1967,10 @@ static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
6780     struct sk_buff *skb, *last;
6781    
6782     unix_state_lock(sk);
6783     + if (sock_flag(sk, SOCK_DEAD)) {
6784     + err = -ECONNRESET;
6785     + goto unlock;
6786     + }
6787     last = skb = skb_peek(&sk->sk_receive_queue);
6788     again:
6789     if (skb == NULL) {
6790     diff --git a/security/selinux/nlmsgtab.c b/security/selinux/nlmsgtab.c
6791     index 2df7b900e259..902b5e9cec7e 100644
6792     --- a/security/selinux/nlmsgtab.c
6793     +++ b/security/selinux/nlmsgtab.c
6794     @@ -100,6 +100,13 @@ static struct nlmsg_perm nlmsg_xfrm_perms[] =
6795     { XFRM_MSG_FLUSHPOLICY, NETLINK_XFRM_SOCKET__NLMSG_WRITE },
6796     { XFRM_MSG_NEWAE, NETLINK_XFRM_SOCKET__NLMSG_WRITE },
6797     { XFRM_MSG_GETAE, NETLINK_XFRM_SOCKET__NLMSG_READ },
6798     + { XFRM_MSG_REPORT, NETLINK_XFRM_SOCKET__NLMSG_READ },
6799     + { XFRM_MSG_MIGRATE, NETLINK_XFRM_SOCKET__NLMSG_WRITE },
6800     + { XFRM_MSG_NEWSADINFO, NETLINK_XFRM_SOCKET__NLMSG_READ },
6801     + { XFRM_MSG_GETSADINFO, NETLINK_XFRM_SOCKET__NLMSG_READ },
6802     + { XFRM_MSG_NEWSPDINFO, NETLINK_XFRM_SOCKET__NLMSG_WRITE },
6803     + { XFRM_MSG_GETSPDINFO, NETLINK_XFRM_SOCKET__NLMSG_READ },
6804     + { XFRM_MSG_MAPPING, NETLINK_XFRM_SOCKET__NLMSG_READ },
6805     };
6806    
6807     static struct nlmsg_perm nlmsg_audit_perms[] =
6808     diff --git a/tools/vm/Makefile b/tools/vm/Makefile
6809     index c604f3ec628a..3d907dacf2ac 100644
6810     --- a/tools/vm/Makefile
6811     +++ b/tools/vm/Makefile
6812     @@ -3,7 +3,7 @@
6813     TARGETS=page-types slabinfo
6814    
6815     LIB_DIR = ../lib/api
6816     -LIBS = $(LIB_DIR)/libapi.a
6817     +LIBS = $(LIB_DIR)/libapikfs.a
6818    
6819     CC = $(CROSS_COMPILE)gcc
6820     CFLAGS = -Wall -Wextra -I../lib/