Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2617 - (show annotations) (download)
Mon Jul 13 08:29:05 2015 UTC (8 years, 9 months ago) by niro
File size: 238602 byte(s)
-linux-3.18.17
1 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/