Magellan Linux

Contents of /trunk/kernel-alx/patches-3.12/0116-3.12.17-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2431 - (show annotations) (download)
Tue May 13 11:02:45 2014 UTC (9 years, 11 months ago) by niro
File size: 64354 byte(s)
-linux-3.12.17
1 diff --git a/Documentation/i2c/busses/i2c-i801 b/Documentation/i2c/busses/i2c-i801
2 index d29dea0f3232..7b0dcdb57173 100644
3 --- a/Documentation/i2c/busses/i2c-i801
4 +++ b/Documentation/i2c/busses/i2c-i801
5 @@ -25,6 +25,7 @@ Supported adapters:
6 * Intel Avoton (SOC)
7 * Intel Wellsburg (PCH)
8 * Intel Coleto Creek (PCH)
9 + * Intel Wildcat Point-LP (PCH)
10 Datasheets: Publicly available at the Intel website
11
12 On Intel Patsburg and later chipsets, both the normal host SMBus controller
13 diff --git a/Makefile b/Makefile
14 index 4aab3be88e9b..fbd1ee8afea8 100644
15 --- a/Makefile
16 +++ b/Makefile
17 @@ -1,6 +1,6 @@
18 VERSION = 3
19 PATCHLEVEL = 12
20 -SUBLEVEL = 16
21 +SUBLEVEL = 17
22 EXTRAVERSION =
23 NAME = One Giant Leap for Frogkind
24
25 diff --git a/arch/s390/kernel/vdso32/clock_gettime.S b/arch/s390/kernel/vdso32/clock_gettime.S
26 index 5be8e472f57d..65fc3979c2f1 100644
27 --- a/arch/s390/kernel/vdso32/clock_gettime.S
28 +++ b/arch/s390/kernel/vdso32/clock_gettime.S
29 @@ -46,18 +46,13 @@ __kernel_clock_gettime:
30 jnm 3f
31 a %r0,__VDSO_TK_MULT(%r5)
32 3: alr %r0,%r2
33 - al %r0,__VDSO_XTIME_NSEC(%r5) /* + tk->xtime_nsec */
34 - al %r1,__VDSO_XTIME_NSEC+4(%r5)
35 - brc 12,4f
36 - ahi %r0,1
37 -4: al %r0,__VDSO_WTOM_NSEC(%r5) /* + wall_to_monotonic.nsec */
38 + al %r0,__VDSO_WTOM_NSEC(%r5)
39 al %r1,__VDSO_WTOM_NSEC+4(%r5)
40 brc 12,5f
41 ahi %r0,1
42 5: l %r2,__VDSO_TK_SHIFT(%r5) /* Timekeeper shift */
43 srdl %r0,0(%r2) /* >> tk->shift */
44 - l %r2,__VDSO_XTIME_SEC+4(%r5)
45 - al %r2,__VDSO_WTOM_SEC+4(%r5)
46 + l %r2,__VDSO_WTOM_SEC+4(%r5)
47 cl %r4,__VDSO_UPD_COUNT+4(%r5) /* check update counter */
48 jne 1b
49 basr %r5,0
50 diff --git a/arch/s390/kernel/vdso64/clock_gettime.S b/arch/s390/kernel/vdso64/clock_gettime.S
51 index 0add1072ba30..c09cda31c894 100644
52 --- a/arch/s390/kernel/vdso64/clock_gettime.S
53 +++ b/arch/s390/kernel/vdso64/clock_gettime.S
54 @@ -35,13 +35,11 @@ __kernel_clock_gettime:
55 jnz 0b
56 stck 48(%r15) /* Store TOD clock */
57 lgf %r2,__VDSO_TK_SHIFT(%r5) /* Timekeeper shift */
58 - lg %r0,__VDSO_XTIME_SEC(%r5) /* tk->xtime_sec */
59 - alg %r0,__VDSO_WTOM_SEC(%r5) /* + wall_to_monotonic.sec */
60 + lg %r0,__VDSO_WTOM_SEC(%r5)
61 lg %r1,48(%r15)
62 sg %r1,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
63 msgf %r1,__VDSO_TK_MULT(%r5) /* * tk->mult */
64 - alg %r1,__VDSO_XTIME_NSEC(%r5) /* + tk->xtime_nsec */
65 - alg %r1,__VDSO_WTOM_NSEC(%r5) /* + wall_to_monotonic.nsec */
66 + alg %r1,__VDSO_WTOM_NSEC(%r5)
67 srlg %r1,%r1,0(%r2) /* >> tk->shift */
68 clg %r4,__VDSO_UPD_COUNT(%r5) /* check update counter */
69 jne 0b
70 diff --git a/arch/x86/crypto/sha256_ssse3_glue.c b/arch/x86/crypto/sha256_ssse3_glue.c
71 index 50226c4b86ed..e52947f80e68 100644
72 --- a/arch/x86/crypto/sha256_ssse3_glue.c
73 +++ b/arch/x86/crypto/sha256_ssse3_glue.c
74 @@ -281,7 +281,7 @@ static int __init sha256_ssse3_mod_init(void)
75 /* allow AVX to override SSSE3, it's a little faster */
76 if (avx_usable()) {
77 #ifdef CONFIG_AS_AVX2
78 - if (boot_cpu_has(X86_FEATURE_AVX2))
79 + if (boot_cpu_has(X86_FEATURE_AVX2) && boot_cpu_has(X86_FEATURE_BMI2))
80 sha256_transform_asm = sha256_transform_rorx;
81 else
82 #endif
83 diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
84 index 5ad38ad07890..bbc8b12fa443 100644
85 --- a/arch/x86/include/asm/pgtable.h
86 +++ b/arch/x86/include/asm/pgtable.h
87 @@ -445,20 +445,10 @@ static inline int pte_same(pte_t a, pte_t b)
88 return a.pte == b.pte;
89 }
90
91 -static inline int pteval_present(pteval_t pteval)
92 -{
93 - /*
94 - * Yes Linus, _PAGE_PROTNONE == _PAGE_NUMA. Expressing it this
95 - * way clearly states that the intent is that protnone and numa
96 - * hinting ptes are considered present for the purposes of
97 - * pagetable operations like zapping, protection changes, gup etc.
98 - */
99 - return pteval & (_PAGE_PRESENT | _PAGE_PROTNONE | _PAGE_NUMA);
100 -}
101 -
102 static inline int pte_present(pte_t a)
103 {
104 - return pteval_present(pte_flags(a));
105 + return pte_flags(a) & (_PAGE_PRESENT | _PAGE_PROTNONE |
106 + _PAGE_NUMA);
107 }
108
109 #define pte_accessible pte_accessible
110 diff --git a/arch/x86/include/asm/topology.h b/arch/x86/include/asm/topology.h
111 index d35f24e231cd..1306d117967d 100644
112 --- a/arch/x86/include/asm/topology.h
113 +++ b/arch/x86/include/asm/topology.h
114 @@ -119,9 +119,10 @@ static inline void setup_node_to_cpumask_map(void) { }
115
116 extern const struct cpumask *cpu_coregroup_mask(int cpu);
117
118 -#ifdef ENABLE_TOPO_DEFINES
119 #define topology_physical_package_id(cpu) (cpu_data(cpu).phys_proc_id)
120 #define topology_core_id(cpu) (cpu_data(cpu).cpu_core_id)
121 +
122 +#ifdef ENABLE_TOPO_DEFINES
123 #define topology_core_cpumask(cpu) (per_cpu(cpu_core_map, cpu))
124 #define topology_thread_cpumask(cpu) (per_cpu(cpu_sibling_map, cpu))
125 #endif
126 diff --git a/arch/x86/mm/srat.c b/arch/x86/mm/srat.c
127 index 266ca912f62e..5ecf65117e6f 100644
128 --- a/arch/x86/mm/srat.c
129 +++ b/arch/x86/mm/srat.c
130 @@ -42,15 +42,25 @@ static __init inline int srat_disabled(void)
131 return acpi_numa < 0;
132 }
133
134 -/* Callback for SLIT parsing */
135 +/*
136 + * Callback for SLIT parsing. pxm_to_node() returns NUMA_NO_NODE for
137 + * I/O localities since SRAT does not list them. I/O localities are
138 + * not supported at this point.
139 + */
140 void __init acpi_numa_slit_init(struct acpi_table_slit *slit)
141 {
142 int i, j;
143
144 - for (i = 0; i < slit->locality_count; i++)
145 - for (j = 0; j < slit->locality_count; j++)
146 + for (i = 0; i < slit->locality_count; i++) {
147 + if (pxm_to_node(i) == NUMA_NO_NODE)
148 + continue;
149 + for (j = 0; j < slit->locality_count; j++) {
150 + if (pxm_to_node(j) == NUMA_NO_NODE)
151 + continue;
152 numa_set_distance(pxm_to_node(i), pxm_to_node(j),
153 slit->entry[slit->locality_count * i + j]);
154 + }
155 + }
156 }
157
158 /* Callback for Proximity Domain -> x2APIC mapping */
159 diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
160 index d5af43af64dc..fdc3ba28ca38 100644
161 --- a/arch/x86/xen/mmu.c
162 +++ b/arch/x86/xen/mmu.c
163 @@ -365,7 +365,7 @@ void xen_ptep_modify_prot_commit(struct mm_struct *mm, unsigned long addr,
164 /* Assume pteval_t is equivalent to all the other *val_t types. */
165 static pteval_t pte_mfn_to_pfn(pteval_t val)
166 {
167 - if (pteval_present(val)) {
168 + if (val & _PAGE_PRESENT) {
169 unsigned long mfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT;
170 unsigned long pfn = mfn_to_pfn(mfn);
171
172 @@ -381,7 +381,7 @@ static pteval_t pte_mfn_to_pfn(pteval_t val)
173
174 static pteval_t pte_pfn_to_mfn(pteval_t val)
175 {
176 - if (pteval_present(val)) {
177 + if (val & _PAGE_PRESENT) {
178 unsigned long pfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT;
179 pteval_t flags = val & PTE_FLAGS_MASK;
180 unsigned long mfn;
181 diff --git a/crypto/asymmetric_keys/x509_parser.h b/crypto/asymmetric_keys/x509_parser.h
182 index f86dc5fcc4ad..d9351ee19f18 100644
183 --- a/crypto/asymmetric_keys/x509_parser.h
184 +++ b/crypto/asymmetric_keys/x509_parser.h
185 @@ -9,6 +9,7 @@
186 * 2 of the Licence, or (at your option) any later version.
187 */
188
189 +#include <linux/time.h>
190 #include <crypto/public_key.h>
191
192 struct x509_certificate {
193 diff --git a/drivers/block/aoe/aoecmd.c b/drivers/block/aoe/aoecmd.c
194 index d2515435e23f..8fb295350efb 100644
195 --- a/drivers/block/aoe/aoecmd.c
196 +++ b/drivers/block/aoe/aoecmd.c
197 @@ -905,7 +905,7 @@ bio_pageinc(struct bio *bio)
198 /* Non-zero page count for non-head members of
199 * compound pages is no longer allowed by the kernel.
200 */
201 - page = compound_trans_head(bv->bv_page);
202 + page = compound_head(bv->bv_page);
203 atomic_inc(&page->_count);
204 }
205 }
206 @@ -918,7 +918,7 @@ bio_pagedec(struct bio *bio)
207 int i;
208
209 bio_for_each_segment(bv, bio, i) {
210 - page = compound_trans_head(bv->bv_page);
211 + page = compound_head(bv->bv_page);
212 atomic_dec(&page->_count);
213 }
214 }
215 diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
216 index 1f7b4caefb6e..c7fa2e420d49 100644
217 --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
218 +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
219 @@ -536,7 +536,7 @@ void i915_gem_suspend_gtt_mappings(struct drm_device *dev)
220 dev_priv->gtt.base.clear_range(&dev_priv->gtt.base,
221 dev_priv->gtt.base.start / PAGE_SIZE,
222 dev_priv->gtt.base.total / PAGE_SIZE,
223 - false);
224 + true);
225 }
226
227 void i915_gem_restore_gtt_mappings(struct drm_device *dev)
228 diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c b/drivers/gpu/drm/nouveau/nouveau_acpi.c
229 index 8160fbddbcfe..200e8564c59d 100644
230 --- a/drivers/gpu/drm/nouveau/nouveau_acpi.c
231 +++ b/drivers/gpu/drm/nouveau/nouveau_acpi.c
232 @@ -66,6 +66,7 @@ bool nouveau_is_v1_dsm(void) {
233 #define NOUVEAU_DSM_HAS_MUX 0x1
234 #define NOUVEAU_DSM_HAS_OPT 0x2
235
236 +#ifdef CONFIG_VGA_SWITCHEROO
237 static const char nouveau_dsm_muid[] = {
238 0xA0, 0xA0, 0x95, 0x9D, 0x60, 0x00, 0x48, 0x4D,
239 0xB3, 0x4D, 0x7E, 0x5F, 0xEA, 0x12, 0x9F, 0xD4,
240 @@ -378,6 +379,11 @@ void nouveau_unregister_dsm_handler(void)
241 if (nouveau_dsm_priv.optimus_detected || nouveau_dsm_priv.dsm_detected)
242 vga_switcheroo_unregister_handler();
243 }
244 +#else
245 +void nouveau_register_dsm_handler(void) {}
246 +void nouveau_unregister_dsm_handler(void) {}
247 +void nouveau_switcheroo_optimus_dsm(void) {}
248 +#endif
249
250 /* retrieve the ROM in 4k blocks */
251 static int nouveau_rom_call(acpi_handle rom_handle, uint8_t *bios,
252 diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
253 index cd30d98ac510..4e901081e287 100644
254 --- a/drivers/i2c/busses/Kconfig
255 +++ b/drivers/i2c/busses/Kconfig
256 @@ -109,6 +109,7 @@ config I2C_I801
257 Avoton (SOC)
258 Wellsburg (PCH)
259 Coleto Creek (PCH)
260 + Wildcat Point-LP (PCH)
261
262 This driver can also be built as a module. If so, the module
263 will be called i2c-i801.
264 diff --git a/drivers/i2c/busses/i2c-cpm.c b/drivers/i2c/busses/i2c-cpm.c
265 index b2b8aa9adc0e..c5121459196b 100644
266 --- a/drivers/i2c/busses/i2c-cpm.c
267 +++ b/drivers/i2c/busses/i2c-cpm.c
268 @@ -40,7 +40,9 @@
269 #include <linux/i2c.h>
270 #include <linux/io.h>
271 #include <linux/dma-mapping.h>
272 +#include <linux/of_address.h>
273 #include <linux/of_device.h>
274 +#include <linux/of_irq.h>
275 #include <linux/of_platform.h>
276 #include <sysdev/fsl_soc.h>
277 #include <asm/cpm.h>
278 diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
279 index 4296d1721272..737e29866887 100644
280 --- a/drivers/i2c/busses/i2c-i801.c
281 +++ b/drivers/i2c/busses/i2c-i801.c
282 @@ -59,6 +59,7 @@
283 Wellsburg (PCH) MS 0x8d7e 32 hard yes yes yes
284 Wellsburg (PCH) MS 0x8d7f 32 hard yes yes yes
285 Coleto Creek (PCH) 0x23b0 32 hard yes yes yes
286 + Wildcat Point-LP (PCH) 0x9ca2 32 hard yes yes yes
287
288 Features supported by this driver:
289 Software PEC no
290 @@ -177,6 +178,7 @@
291 #define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS1 0x8d7e
292 #define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS2 0x8d7f
293 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_SMBUS 0x9c22
294 +#define PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP_SMBUS 0x9ca2
295
296 struct i801_mux_config {
297 char *gpio_chip;
298 @@ -819,6 +821,7 @@ static DEFINE_PCI_DEVICE_TABLE(i801_ids) = {
299 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS1) },
300 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS2) },
301 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_COLETOCREEK_SMBUS) },
302 + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP_SMBUS) },
303 { 0, }
304 };
305
306 diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
307 index d47bb0f267f7..53235814ea0f 100644
308 --- a/drivers/idle/intel_idle.c
309 +++ b/drivers/idle/intel_idle.c
310 @@ -1,7 +1,7 @@
311 /*
312 * intel_idle.c - native hardware idle loop for modern Intel processors
313 *
314 - * Copyright (c) 2010, Intel Corporation.
315 + * Copyright (c) 2013, Intel Corporation.
316 * Len Brown <len.brown@intel.com>
317 *
318 * This program is free software; you can redistribute it and/or modify it
319 @@ -329,6 +329,22 @@ static struct cpuidle_state atom_cstates[CPUIDLE_STATE_MAX] = {
320 {
321 .enter = NULL }
322 };
323 +static struct cpuidle_state avn_cstates[] __initdata = {
324 + {
325 + .name = "C1-AVN",
326 + .desc = "MWAIT 0x00",
327 + .flags = MWAIT2flg(0x00) | CPUIDLE_FLAG_TIME_VALID,
328 + .exit_latency = 2,
329 + .target_residency = 2,
330 + .enter = &intel_idle },
331 + {
332 + .name = "C6-AVN",
333 + .desc = "MWAIT 0x51",
334 + .flags = MWAIT2flg(0x51) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED,
335 + .exit_latency = 15,
336 + .target_residency = 45,
337 + .enter = &intel_idle },
338 +};
339
340 /**
341 * intel_idle
342 @@ -465,6 +481,11 @@ static const struct idle_cpu idle_cpu_hsw = {
343 .disable_promotion_to_c1e = true,
344 };
345
346 +static const struct idle_cpu idle_cpu_avn = {
347 + .state_table = avn_cstates,
348 + .disable_promotion_to_c1e = true,
349 +};
350 +
351 #define ICPU(model, cpu) \
352 { X86_VENDOR_INTEL, 6, model, X86_FEATURE_MWAIT, (unsigned long)&cpu }
353
354 @@ -486,6 +507,7 @@ static const struct x86_cpu_id intel_idle_ids[] = {
355 ICPU(0x3f, idle_cpu_hsw),
356 ICPU(0x45, idle_cpu_hsw),
357 ICPU(0x46, idle_cpu_hsw),
358 + ICPU(0x4D, idle_cpu_avn),
359 {}
360 };
361 MODULE_DEVICE_TABLE(x86cpu, intel_idle_ids);
362 diff --git a/drivers/input/mouse/cypress_ps2.c b/drivers/input/mouse/cypress_ps2.c
363 index 888a81a7ea3d..0aaea7ad6cee 100644
364 --- a/drivers/input/mouse/cypress_ps2.c
365 +++ b/drivers/input/mouse/cypress_ps2.c
366 @@ -410,7 +410,6 @@ static int cypress_set_input_params(struct input_dev *input,
367 __clear_bit(REL_X, input->relbit);
368 __clear_bit(REL_Y, input->relbit);
369
370 - __set_bit(INPUT_PROP_BUTTONPAD, input->propbit);
371 __set_bit(EV_KEY, input->evbit);
372 __set_bit(BTN_LEFT, input->keybit);
373 __set_bit(BTN_RIGHT, input->keybit);
374 diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
375 index 26386f9d2569..d8d49d10f9bb 100644
376 --- a/drivers/input/mouse/synaptics.c
377 +++ b/drivers/input/mouse/synaptics.c
378 @@ -265,11 +265,22 @@ static int synaptics_identify(struct psmouse *psmouse)
379 * Read touchpad resolution and maximum reported coordinates
380 * Resolution is left zero if touchpad does not support the query
381 */
382 +
383 +static const int *quirk_min_max;
384 +
385 static int synaptics_resolution(struct psmouse *psmouse)
386 {
387 struct synaptics_data *priv = psmouse->private;
388 unsigned char resp[3];
389
390 + if (quirk_min_max) {
391 + priv->x_min = quirk_min_max[0];
392 + priv->x_max = quirk_min_max[1];
393 + priv->y_min = quirk_min_max[2];
394 + priv->y_max = quirk_min_max[3];
395 + return 0;
396 + }
397 +
398 if (SYN_ID_MAJOR(priv->identity) < 4)
399 return 0;
400
401 @@ -1485,10 +1496,54 @@ static const struct dmi_system_id olpc_dmi_table[] __initconst = {
402 { }
403 };
404
405 +static const struct dmi_system_id min_max_dmi_table[] __initconst = {
406 +#if defined(CONFIG_DMI)
407 + {
408 + /* Lenovo ThinkPad Helix */
409 + .matches = {
410 + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
411 + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad Helix"),
412 + },
413 + .driver_data = (int []){1024, 5052, 2258, 4832},
414 + },
415 + {
416 + /* Lenovo ThinkPad X240 */
417 + .matches = {
418 + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
419 + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X240"),
420 + },
421 + .driver_data = (int []){1232, 5710, 1156, 4696},
422 + },
423 + {
424 + /* Lenovo ThinkPad T440s */
425 + .matches = {
426 + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
427 + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T440"),
428 + },
429 + .driver_data = (int []){1024, 5112, 2024, 4832},
430 + },
431 + {
432 + /* Lenovo ThinkPad T540p */
433 + .matches = {
434 + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
435 + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T540"),
436 + },
437 + .driver_data = (int []){1024, 5056, 2058, 4832},
438 + },
439 +#endif
440 + { }
441 +};
442 +
443 void __init synaptics_module_init(void)
444 {
445 + const struct dmi_system_id *min_max_dmi;
446 +
447 impaired_toshiba_kbc = dmi_check_system(toshiba_dmi_table);
448 broken_olpc_ec = dmi_check_system(olpc_dmi_table);
449 +
450 + min_max_dmi = dmi_first_match(min_max_dmi_table);
451 + if (min_max_dmi)
452 + quirk_min_max = min_max_dmi->driver_data;
453 }
454
455 static int __synaptics_init(struct psmouse *psmouse, bool absolute_mode)
456 diff --git a/drivers/input/mousedev.c b/drivers/input/mousedev.c
457 index 4c842c320c2e..b604564dec5c 100644
458 --- a/drivers/input/mousedev.c
459 +++ b/drivers/input/mousedev.c
460 @@ -67,7 +67,6 @@ struct mousedev {
461 struct device dev;
462 struct cdev cdev;
463 bool exist;
464 - bool is_mixdev;
465
466 struct list_head mixdev_node;
467 bool opened_by_mixdev;
468 @@ -77,6 +76,9 @@ struct mousedev {
469 int old_x[4], old_y[4];
470 int frac_dx, frac_dy;
471 unsigned long touch;
472 +
473 + int (*open_device)(struct mousedev *mousedev);
474 + void (*close_device)(struct mousedev *mousedev);
475 };
476
477 enum mousedev_emul {
478 @@ -116,9 +118,6 @@ static unsigned char mousedev_imex_seq[] = { 0xf3, 200, 0xf3, 200, 0xf3, 80 };
479 static struct mousedev *mousedev_mix;
480 static LIST_HEAD(mousedev_mix_list);
481
482 -static void mixdev_open_devices(void);
483 -static void mixdev_close_devices(void);
484 -
485 #define fx(i) (mousedev->old_x[(mousedev->pkt_count - (i)) & 03])
486 #define fy(i) (mousedev->old_y[(mousedev->pkt_count - (i)) & 03])
487
488 @@ -428,9 +427,7 @@ static int mousedev_open_device(struct mousedev *mousedev)
489 if (retval)
490 return retval;
491
492 - if (mousedev->is_mixdev)
493 - mixdev_open_devices();
494 - else if (!mousedev->exist)
495 + if (!mousedev->exist)
496 retval = -ENODEV;
497 else if (!mousedev->open++) {
498 retval = input_open_device(&mousedev->handle);
499 @@ -446,9 +443,7 @@ static void mousedev_close_device(struct mousedev *mousedev)
500 {
501 mutex_lock(&mousedev->mutex);
502
503 - if (mousedev->is_mixdev)
504 - mixdev_close_devices();
505 - else if (mousedev->exist && !--mousedev->open)
506 + if (mousedev->exist && !--mousedev->open)
507 input_close_device(&mousedev->handle);
508
509 mutex_unlock(&mousedev->mutex);
510 @@ -459,21 +454,29 @@ static void mousedev_close_device(struct mousedev *mousedev)
511 * stream. Note that this function is called with mousedev_mix->mutex
512 * held.
513 */
514 -static void mixdev_open_devices(void)
515 +static int mixdev_open_devices(struct mousedev *mixdev)
516 {
517 - struct mousedev *mousedev;
518 + int error;
519 +
520 + error = mutex_lock_interruptible(&mixdev->mutex);
521 + if (error)
522 + return error;
523
524 - if (mousedev_mix->open++)
525 - return;
526 + if (!mixdev->open++) {
527 + struct mousedev *mousedev;
528
529 - list_for_each_entry(mousedev, &mousedev_mix_list, mixdev_node) {
530 - if (!mousedev->opened_by_mixdev) {
531 - if (mousedev_open_device(mousedev))
532 - continue;
533 + list_for_each_entry(mousedev, &mousedev_mix_list, mixdev_node) {
534 + if (!mousedev->opened_by_mixdev) {
535 + if (mousedev_open_device(mousedev))
536 + continue;
537
538 - mousedev->opened_by_mixdev = true;
539 + mousedev->opened_by_mixdev = true;
540 + }
541 }
542 }
543 +
544 + mutex_unlock(&mixdev->mutex);
545 + return 0;
546 }
547
548 /*
549 @@ -481,19 +484,22 @@ static void mixdev_open_devices(void)
550 * device. Note that this function is called with mousedev_mix->mutex
551 * held.
552 */
553 -static void mixdev_close_devices(void)
554 +static void mixdev_close_devices(struct mousedev *mixdev)
555 {
556 - struct mousedev *mousedev;
557 + mutex_lock(&mixdev->mutex);
558
559 - if (--mousedev_mix->open)
560 - return;
561 + if (!--mixdev->open) {
562 + struct mousedev *mousedev;
563
564 - list_for_each_entry(mousedev, &mousedev_mix_list, mixdev_node) {
565 - if (mousedev->opened_by_mixdev) {
566 - mousedev->opened_by_mixdev = false;
567 - mousedev_close_device(mousedev);
568 + list_for_each_entry(mousedev, &mousedev_mix_list, mixdev_node) {
569 + if (mousedev->opened_by_mixdev) {
570 + mousedev->opened_by_mixdev = false;
571 + mousedev_close_device(mousedev);
572 + }
573 }
574 }
575 +
576 + mutex_unlock(&mixdev->mutex);
577 }
578
579
580 @@ -522,7 +528,7 @@ static int mousedev_release(struct inode *inode, struct file *file)
581 mousedev_detach_client(mousedev, client);
582 kfree(client);
583
584 - mousedev_close_device(mousedev);
585 + mousedev->close_device(mousedev);
586
587 return 0;
588 }
589 @@ -550,7 +556,7 @@ static int mousedev_open(struct inode *inode, struct file *file)
590 client->mousedev = mousedev;
591 mousedev_attach_client(mousedev, client);
592
593 - error = mousedev_open_device(mousedev);
594 + error = mousedev->open_device(mousedev);
595 if (error)
596 goto err_free_client;
597
598 @@ -861,16 +867,21 @@ static struct mousedev *mousedev_create(struct input_dev *dev,
599
600 if (mixdev) {
601 dev_set_name(&mousedev->dev, "mice");
602 +
603 + mousedev->open_device = mixdev_open_devices;
604 + mousedev->close_device = mixdev_close_devices;
605 } else {
606 int dev_no = minor;
607 /* Normalize device number if it falls into legacy range */
608 if (dev_no < MOUSEDEV_MINOR_BASE + MOUSEDEV_MINORS)
609 dev_no -= MOUSEDEV_MINOR_BASE;
610 dev_set_name(&mousedev->dev, "mouse%d", dev_no);
611 +
612 + mousedev->open_device = mousedev_open_device;
613 + mousedev->close_device = mousedev_close_device;
614 }
615
616 mousedev->exist = true;
617 - mousedev->is_mixdev = mixdev;
618 mousedev->handle.dev = input_get_device(dev);
619 mousedev->handle.name = dev_name(&mousedev->dev);
620 mousedev->handle.handler = handler;
621 @@ -919,7 +930,7 @@ static void mousedev_destroy(struct mousedev *mousedev)
622 device_del(&mousedev->dev);
623 mousedev_cleanup(mousedev);
624 input_free_minor(MINOR(mousedev->dev.devt));
625 - if (!mousedev->is_mixdev)
626 + if (mousedev != mousedev_mix)
627 input_unregister_handle(&mousedev->handle);
628 put_device(&mousedev->dev);
629 }
630 diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c
631 index a6debe13d5b9..44a1fb6fa4a0 100644
632 --- a/drivers/input/tablet/wacom_sys.c
633 +++ b/drivers/input/tablet/wacom_sys.c
634 @@ -722,7 +722,7 @@ static int wacom_led_control(struct wacom *wacom)
635 return -ENOMEM;
636
637 if (wacom->wacom_wac.features.type >= INTUOS5S &&
638 - wacom->wacom_wac.features.type <= INTUOS5L) {
639 + wacom->wacom_wac.features.type <= INTUOSPL) {
640 /*
641 * Touch Ring and crop mark LED luminance may take on
642 * one of four values:
643 @@ -984,6 +984,9 @@ static int wacom_initialize_leds(struct wacom *wacom)
644 case INTUOS5S:
645 case INTUOS5:
646 case INTUOS5L:
647 + case INTUOSPS:
648 + case INTUOSPM:
649 + case INTUOSPL:
650 wacom->led.select[0] = 0;
651 wacom->led.select[1] = 0;
652 wacom->led.llv = 32;
653 @@ -1027,6 +1030,9 @@ static void wacom_destroy_leds(struct wacom *wacom)
654 case INTUOS5S:
655 case INTUOS5:
656 case INTUOS5L:
657 + case INTUOSPS:
658 + case INTUOSPM:
659 + case INTUOSPL:
660 sysfs_remove_group(&wacom->intf->dev.kobj,
661 &intuos5_led_attr_group);
662 break;
663 @@ -1305,7 +1311,7 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
664 * HID descriptor. If this is the touch interface (wMaxPacketSize
665 * of WACOM_PKGLEN_BBTOUCH3), override the table values.
666 */
667 - if (features->type >= INTUOS5S && features->type <= INTUOS5L) {
668 + if (features->type >= INTUOS5S && features->type <= INTUOSPL) {
669 if (endpoint->wMaxPacketSize == WACOM_PKGLEN_BBTOUCH3) {
670 features->device_type = BTN_TOOL_FINGER;
671 features->pktlen = WACOM_PKGLEN_BBTOUCH3;
672 diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
673 index c59b797eeafa..0091bdedb240 100644
674 --- a/drivers/input/tablet/wacom_wac.c
675 +++ b/drivers/input/tablet/wacom_wac.c
676 @@ -621,14 +621,14 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
677 } else {
678 input_report_abs(input, ABS_MISC, 0);
679 }
680 - } else if (features->type >= INTUOS5S && features->type <= INTUOS5L) {
681 + } else if (features->type >= INTUOS5S && features->type <= INTUOSPL) {
682 int i;
683
684 /* Touch ring mode switch has no capacitive sensor */
685 input_report_key(input, BTN_0, (data[3] & 0x01));
686
687 /*
688 - * ExpressKeys on Intuos5 have a capacitive sensor in
689 + * ExpressKeys on Intuos5/Intuos Pro have a capacitive sensor in
690 * addition to the mechanical switch. Switch data is
691 * stored in data[4], capacitive data in data[5].
692 */
693 @@ -716,7 +716,9 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
694 features->type == INTUOS4 ||
695 features->type == INTUOS4S ||
696 features->type == INTUOS5 ||
697 - features->type == INTUOS5S)) {
698 + features->type == INTUOS5S ||
699 + features->type == INTUOSPM ||
700 + features->type == INTUOSPS)) {
701
702 return 0;
703 }
704 @@ -769,8 +771,7 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
705
706 } else if (wacom->tool[idx] == BTN_TOOL_MOUSE) {
707 /* I4 mouse */
708 - if ((features->type >= INTUOS4S && features->type <= INTUOS4L) ||
709 - (features->type >= INTUOS5S && features->type <= INTUOS5L)) {
710 + if (features->type >= INTUOS4S && features->type <= INTUOSPL) {
711 input_report_key(input, BTN_LEFT, data[6] & 0x01);
712 input_report_key(input, BTN_MIDDLE, data[6] & 0x02);
713 input_report_key(input, BTN_RIGHT, data[6] & 0x04);
714 @@ -797,7 +798,8 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
715 }
716 }
717 } else if ((features->type < INTUOS3S || features->type == INTUOS3L ||
718 - features->type == INTUOS4L || features->type == INTUOS5L) &&
719 + features->type == INTUOS4L || features->type == INTUOS5L ||
720 + features->type == INTUOSPL) &&
721 wacom->tool[idx] == BTN_TOOL_LENS) {
722 /* Lens cursor packets */
723 input_report_key(input, BTN_LEFT, data[8] & 0x01);
724 @@ -1107,6 +1109,7 @@ static int wacom_bpt_touch(struct wacom_wac *wacom)
725
726 static void wacom_bpt3_touch_msg(struct wacom_wac *wacom, unsigned char *data)
727 {
728 + struct wacom_features *features = &wacom->features;
729 struct input_dev *input = wacom->input;
730 bool touch = data[1] & 0x80;
731 int slot = input_mt_get_slot_by_key(input, data[0]);
732 @@ -1122,14 +1125,23 @@ static void wacom_bpt3_touch_msg(struct wacom_wac *wacom, unsigned char *data)
733 if (touch) {
734 int x = (data[2] << 4) | (data[4] >> 4);
735 int y = (data[3] << 4) | (data[4] & 0x0f);
736 - int a = data[5];
737 + int width, height;
738
739 - // "a" is a scaled-down area which we assume is roughly
740 - // circular and which can be described as: a=(pi*r^2)/C.
741 - int x_res = input_abs_get_res(input, ABS_X);
742 - int y_res = input_abs_get_res(input, ABS_Y);
743 - int width = 2 * int_sqrt(a * WACOM_CONTACT_AREA_SCALE);
744 - int height = width * y_res / x_res;
745 + if (features->type >= INTUOSPS && features->type <= INTUOSPL) {
746 + width = data[5];
747 + height = data[6];
748 + } else {
749 + /*
750 + * "a" is a scaled-down area which we assume is
751 + * roughly circular and which can be described as:
752 + * a=(pi*r^2)/C.
753 + */
754 + int a = data[5];
755 + int x_res = input_abs_get_res(input, ABS_X);
756 + int y_res = input_abs_get_res(input, ABS_Y);
757 + width = 2 * int_sqrt(a * WACOM_CONTACT_AREA_SCALE);
758 + height = width * y_res / x_res;
759 + }
760
761 input_report_abs(input, ABS_MT_POSITION_X, x);
762 input_report_abs(input, ABS_MT_POSITION_Y, y);
763 @@ -1337,6 +1349,9 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
764 case INTUOS5S:
765 case INTUOS5:
766 case INTUOS5L:
767 + case INTUOSPS:
768 + case INTUOSPM:
769 + case INTUOSPL:
770 if (len == WACOM_PKGLEN_BBTOUCH3)
771 sync = wacom_bpt3_touch(wacom_wac);
772 else
773 @@ -1420,7 +1435,7 @@ void wacom_setup_device_quirks(struct wacom_features *features)
774
775 /* these device have multiple inputs */
776 if (features->type >= WIRELESS ||
777 - (features->type >= INTUOS5S && features->type <= INTUOS5L) ||
778 + (features->type >= INTUOS5S && features->type <= INTUOSPL) ||
779 (features->oVid && features->oPid))
780 features->quirks |= WACOM_QUIRK_MULTI_INPUT;
781
782 @@ -1627,6 +1642,8 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev,
783
784 case INTUOS5:
785 case INTUOS5L:
786 + case INTUOSPM:
787 + case INTUOSPL:
788 if (features->device_type == BTN_TOOL_PEN) {
789 __set_bit(BTN_7, input_dev->keybit);
790 __set_bit(BTN_8, input_dev->keybit);
791 @@ -1634,6 +1651,7 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev,
792 /* fall through */
793
794 case INTUOS5S:
795 + case INTUOSPS:
796 __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
797
798 if (features->device_type == BTN_TOOL_PEN) {
799 @@ -1952,6 +1970,18 @@ static const struct wacom_features wacom_features_0x29 =
800 static const struct wacom_features wacom_features_0x2A =
801 { "Wacom Intuos5 M", WACOM_PKGLEN_INTUOS, 44704, 27940, 2047,
802 63, INTUOS5, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
803 +static const struct wacom_features wacom_features_0x314 =
804 + { "Wacom Intuos Pro S", WACOM_PKGLEN_INTUOS, 31496, 19685, 2047,
805 + 63, INTUOSPS, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES,
806 + .touch_max = 16 };
807 +static const struct wacom_features wacom_features_0x315 =
808 + { "Wacom Intuos Pro M", WACOM_PKGLEN_INTUOS, 44704, 27940, 2047,
809 + 63, INTUOSPM, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES,
810 + .touch_max = 16 };
811 +static const struct wacom_features wacom_features_0x317 =
812 + { "Wacom Intuos Pro L", WACOM_PKGLEN_INTUOS, 65024, 40640, 2047,
813 + 63, INTUOSPL, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES,
814 + .touch_max = 16 };
815 static const struct wacom_features wacom_features_0xF4 =
816 { "Wacom Cintiq 24HD", WACOM_PKGLEN_INTUOS, 104480, 65600, 2047,
817 63, WACOM_24HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
818 @@ -2259,6 +2289,9 @@ const struct usb_device_id wacom_ids[] = {
819 { USB_DEVICE_WACOM(0x300) },
820 { USB_DEVICE_WACOM(0x301) },
821 { USB_DEVICE_WACOM(0x304) },
822 + { USB_DEVICE_DETAILED(0x314, USB_CLASS_HID, 0, 0) },
823 + { USB_DEVICE_DETAILED(0x315, USB_CLASS_HID, 0, 0) },
824 + { USB_DEVICE_DETAILED(0x317, USB_CLASS_HID, 0, 0) },
825 { USB_DEVICE_WACOM(0x4001) },
826 { USB_DEVICE_WACOM(0x47) },
827 { USB_DEVICE_WACOM(0xF4) },
828 diff --git a/drivers/input/tablet/wacom_wac.h b/drivers/input/tablet/wacom_wac.h
829 index dfc9e08e7f70..d6dec5800791 100644
830 --- a/drivers/input/tablet/wacom_wac.h
831 +++ b/drivers/input/tablet/wacom_wac.h
832 @@ -76,6 +76,9 @@ enum {
833 INTUOS5S,
834 INTUOS5,
835 INTUOS5L,
836 + INTUOSPS,
837 + INTUOSPM,
838 + INTUOSPL,
839 WACOM_21UX2,
840 WACOM_22HD,
841 DTK,
842 diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
843 index e35bac7cfdf1..71d9cad02704 100644
844 --- a/drivers/net/ethernet/marvell/mvneta.c
845 +++ b/drivers/net/ethernet/marvell/mvneta.c
846 @@ -88,8 +88,9 @@
847 #define MVNETA_TX_IN_PRGRS BIT(1)
848 #define MVNETA_TX_FIFO_EMPTY BIT(8)
849 #define MVNETA_RX_MIN_FRAME_SIZE 0x247c
850 -#define MVNETA_SGMII_SERDES_CFG 0x24A0
851 +#define MVNETA_SERDES_CFG 0x24A0
852 #define MVNETA_SGMII_SERDES_PROTO 0x0cc7
853 +#define MVNETA_RGMII_SERDES_PROTO 0x0667
854 #define MVNETA_TYPE_PRIO 0x24bc
855 #define MVNETA_FORCE_UNI BIT(21)
856 #define MVNETA_TXQ_CMD_1 0x24e4
857 @@ -121,7 +122,7 @@
858 #define MVNETA_GMAC_MAX_RX_SIZE_MASK 0x7ffc
859 #define MVNETA_GMAC0_PORT_ENABLE BIT(0)
860 #define MVNETA_GMAC_CTRL_2 0x2c08
861 -#define MVNETA_GMAC2_PSC_ENABLE BIT(3)
862 +#define MVNETA_GMAC2_PCS_ENABLE BIT(3)
863 #define MVNETA_GMAC2_PORT_RGMII BIT(4)
864 #define MVNETA_GMAC2_PORT_RESET BIT(6)
865 #define MVNETA_GMAC_STATUS 0x2c10
866 @@ -665,35 +666,6 @@ static void mvneta_rxq_bm_disable(struct mvneta_port *pp,
867 mvreg_write(pp, MVNETA_RXQ_CONFIG_REG(rxq->id), val);
868 }
869
870 -
871 -
872 -/* Sets the RGMII Enable bit (RGMIIEn) in port MAC control register */
873 -static void mvneta_gmac_rgmii_set(struct mvneta_port *pp, int enable)
874 -{
875 - u32 val;
876 -
877 - val = mvreg_read(pp, MVNETA_GMAC_CTRL_2);
878 -
879 - if (enable)
880 - val |= MVNETA_GMAC2_PORT_RGMII;
881 - else
882 - val &= ~MVNETA_GMAC2_PORT_RGMII;
883 -
884 - mvreg_write(pp, MVNETA_GMAC_CTRL_2, val);
885 -}
886 -
887 -/* Config SGMII port */
888 -static void mvneta_port_sgmii_config(struct mvneta_port *pp)
889 -{
890 - u32 val;
891 -
892 - val = mvreg_read(pp, MVNETA_GMAC_CTRL_2);
893 - val |= MVNETA_GMAC2_PSC_ENABLE;
894 - mvreg_write(pp, MVNETA_GMAC_CTRL_2, val);
895 -
896 - mvreg_write(pp, MVNETA_SGMII_SERDES_CFG, MVNETA_SGMII_SERDES_PROTO);
897 -}
898 -
899 /* Start the Ethernet port RX and TX activity */
900 static void mvneta_port_up(struct mvneta_port *pp)
901 {
902 @@ -2723,12 +2695,15 @@ static void mvneta_port_power_up(struct mvneta_port *pp, int phy_mode)
903 mvreg_write(pp, MVNETA_UNIT_INTR_CAUSE, 0);
904
905 if (phy_mode == PHY_INTERFACE_MODE_SGMII)
906 - mvneta_port_sgmii_config(pp);
907 + mvreg_write(pp, MVNETA_SERDES_CFG, MVNETA_SGMII_SERDES_PROTO);
908 + else
909 + mvreg_write(pp, MVNETA_SERDES_CFG, MVNETA_RGMII_SERDES_PROTO);
910
911 - mvneta_gmac_rgmii_set(pp, 1);
912 + val = mvreg_read(pp, MVNETA_GMAC_CTRL_2);
913 +
914 + val |= MVNETA_GMAC2_PCS_ENABLE | MVNETA_GMAC2_PORT_RGMII;
915
916 /* Cancel Port Reset */
917 - val = mvreg_read(pp, MVNETA_GMAC_CTRL_2);
918 val &= ~MVNETA_GMAC2_PORT_RESET;
919 mvreg_write(pp, MVNETA_GMAC_CTRL_2, val);
920
921 diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
922 index 4fb7a8f83c8a..54af4e933695 100644
923 --- a/drivers/vfio/vfio_iommu_type1.c
924 +++ b/drivers/vfio/vfio_iommu_type1.c
925 @@ -186,12 +186,12 @@ static bool is_invalid_reserved_pfn(unsigned long pfn)
926 if (pfn_valid(pfn)) {
927 bool reserved;
928 struct page *tail = pfn_to_page(pfn);
929 - struct page *head = compound_trans_head(tail);
930 + struct page *head = compound_head(tail);
931 reserved = !!(PageReserved(head));
932 if (head != tail) {
933 /*
934 * "head" is not a dangling pointer
935 - * (compound_trans_head takes care of that)
936 + * (compound_head takes care of that)
937 * but the hugepage may have been split
938 * from under us (and we may not hold a
939 * reference count on the head page so it can
940 diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
941 index dacaf74256a3..8659eb160b4d 100644
942 --- a/drivers/video/fbmem.c
943 +++ b/drivers/video/fbmem.c
944 @@ -1916,6 +1916,9 @@ int fb_get_options(const char *name, char **option)
945 options = opt + name_len + 1;
946 }
947 }
948 + /* No match, pass global option */
949 + if (!options && option && fb_mode_option)
950 + options = kstrdup(fb_mode_option, GFP_KERNEL);
951 if (options && !strncmp(options, "off", 3))
952 retval = 1;
953
954 diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
955 index b232908a6192..4c437efa9d91 100644
956 --- a/drivers/xen/balloon.c
957 +++ b/drivers/xen/balloon.c
958 @@ -405,11 +405,25 @@ static enum bp_state decrease_reservation(unsigned long nr_pages, gfp_t gfp)
959 state = BP_EAGAIN;
960 break;
961 }
962 + scrub_page(page);
963
964 - pfn = page_to_pfn(page);
965 - frame_list[i] = pfn_to_mfn(pfn);
966 + frame_list[i] = page_to_pfn(page);
967 + }
968
969 - scrub_page(page);
970 + /*
971 + * Ensure that ballooned highmem pages don't have kmaps.
972 + *
973 + * Do this before changing the p2m as kmap_flush_unused()
974 + * reads PTEs to obtain pages (and hence needs the original
975 + * p2m entry).
976 + */
977 + kmap_flush_unused();
978 +
979 + /* Update direct mapping, invalidate P2M, and add to balloon. */
980 + for (i = 0; i < nr_pages; i++) {
981 + pfn = frame_list[i];
982 + frame_list[i] = pfn_to_mfn(pfn);
983 + page = pfn_to_page(pfn);
984
985 /*
986 * Ballooned out frames are effectively replaced with
987 @@ -433,11 +447,9 @@ static enum bp_state decrease_reservation(unsigned long nr_pages, gfp_t gfp)
988 }
989 put_balloon_scratch_page();
990
991 - balloon_append(pfn_to_page(pfn));
992 + balloon_append(page);
993 }
994
995 - /* Ensure that ballooned highmem pages don't have kmaps. */
996 - kmap_flush_unused();
997 flush_tlb_all();
998
999 set_xen_guest_handle(reservation.extent_start, frame_list);
1000 diff --git a/fs/dcache.c b/fs/dcache.c
1001 index 4021e0172602..30b38e23caa7 100644
1002 --- a/fs/dcache.c
1003 +++ b/fs/dcache.c
1004 @@ -2846,9 +2846,9 @@ static int prepend_name(char **buffer, int *buflen, struct qstr *name)
1005 u32 dlen = ACCESS_ONCE(name->len);
1006 char *p;
1007
1008 - if (*buflen < dlen + 1)
1009 - return -ENAMETOOLONG;
1010 *buflen -= dlen + 1;
1011 + if (*buflen < 0)
1012 + return -ENAMETOOLONG;
1013 p = *buffer -= dlen + 1;
1014 *p++ = '/';
1015 while (dlen--) {
1016 diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c
1017 index d90909ec6aa6..a5e34dd6a32c 100644
1018 --- a/fs/dlm/lowcomms.c
1019 +++ b/fs/dlm/lowcomms.c
1020 @@ -649,6 +649,7 @@ static void process_sctp_notification(struct connection *con,
1021 struct msghdr *msg, char *buf)
1022 {
1023 union sctp_notification *sn = (union sctp_notification *)buf;
1024 + struct linger linger;
1025
1026 switch (sn->sn_header.sn_type) {
1027 case SCTP_SEND_FAILED:
1028 @@ -727,6 +728,13 @@ static void process_sctp_notification(struct connection *con,
1029 }
1030 add_sock(new_con->sock, new_con);
1031
1032 + linger.l_onoff = 1;
1033 + linger.l_linger = 0;
1034 + ret = kernel_setsockopt(new_con->sock, SOL_SOCKET, SO_LINGER,
1035 + (char *)&linger, sizeof(linger));
1036 + if (ret < 0)
1037 + log_print("set socket option SO_LINGER failed");
1038 +
1039 log_print("connecting to %d sctp association %d",
1040 nodeid, (int)sn->sn_assoc_change.sac_assoc_id);
1041
1042 diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
1043 index 55fe412b2410..786bf0708904 100644
1044 --- a/fs/ext4/inode.c
1045 +++ b/fs/ext4/inode.c
1046 @@ -38,6 +38,7 @@
1047 #include <linux/slab.h>
1048 #include <linux/ratelimit.h>
1049 #include <linux/aio.h>
1050 +#include <linux/bitops.h>
1051
1052 #include "ext4_jbd2.h"
1053 #include "xattr.h"
1054 @@ -3922,18 +3923,20 @@ int ext4_get_inode_loc(struct inode *inode, struct ext4_iloc *iloc)
1055 void ext4_set_inode_flags(struct inode *inode)
1056 {
1057 unsigned int flags = EXT4_I(inode)->i_flags;
1058 + unsigned int new_fl = 0;
1059
1060 - inode->i_flags &= ~(S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC);
1061 if (flags & EXT4_SYNC_FL)
1062 - inode->i_flags |= S_SYNC;
1063 + new_fl |= S_SYNC;
1064 if (flags & EXT4_APPEND_FL)
1065 - inode->i_flags |= S_APPEND;
1066 + new_fl |= S_APPEND;
1067 if (flags & EXT4_IMMUTABLE_FL)
1068 - inode->i_flags |= S_IMMUTABLE;
1069 + new_fl |= S_IMMUTABLE;
1070 if (flags & EXT4_NOATIME_FL)
1071 - inode->i_flags |= S_NOATIME;
1072 + new_fl |= S_NOATIME;
1073 if (flags & EXT4_DIRSYNC_FL)
1074 - inode->i_flags |= S_DIRSYNC;
1075 + new_fl |= S_DIRSYNC;
1076 + set_mask_bits(&inode->i_flags,
1077 + S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC, new_fl);
1078 }
1079
1080 /* Propagate flags from i_flags to EXT4_I(inode)->i_flags */
1081 diff --git a/fs/fscache/object-list.c b/fs/fscache/object-list.c
1082 index e1959efad64f..b5ebc2d7d80d 100644
1083 --- a/fs/fscache/object-list.c
1084 +++ b/fs/fscache/object-list.c
1085 @@ -50,6 +50,8 @@ void fscache_objlist_add(struct fscache_object *obj)
1086 struct fscache_object *xobj;
1087 struct rb_node **p = &fscache_object_list.rb_node, *parent = NULL;
1088
1089 + ASSERT(RB_EMPTY_NODE(&obj->objlist_link));
1090 +
1091 write_lock(&fscache_object_list_lock);
1092
1093 while (*p) {
1094 @@ -75,6 +77,9 @@ void fscache_objlist_add(struct fscache_object *obj)
1095 */
1096 void fscache_objlist_remove(struct fscache_object *obj)
1097 {
1098 + if (RB_EMPTY_NODE(&obj->objlist_link))
1099 + return;
1100 +
1101 write_lock(&fscache_object_list_lock);
1102
1103 BUG_ON(RB_EMPTY_ROOT(&fscache_object_list));
1104 diff --git a/fs/fscache/object.c b/fs/fscache/object.c
1105 index 86d75a60b20c..fec41344dacc 100644
1106 --- a/fs/fscache/object.c
1107 +++ b/fs/fscache/object.c
1108 @@ -314,6 +314,9 @@ void fscache_object_init(struct fscache_object *object,
1109 object->cache = cache;
1110 object->cookie = cookie;
1111 object->parent = NULL;
1112 +#ifdef CONFIG_FSCACHE_OBJECT_LIST
1113 + RB_CLEAR_NODE(&object->objlist_link);
1114 +#endif
1115
1116 object->oob_event_mask = 0;
1117 for (t = object->oob_table; t->events; t++)
1118 diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
1119 index e81a1cae81b5..140280623348 100644
1120 --- a/fs/nfs/dir.c
1121 +++ b/fs/nfs/dir.c
1122 @@ -276,6 +276,15 @@ out_eof:
1123 return -EBADCOOKIE;
1124 }
1125
1126 +static bool
1127 +nfs_readdir_inode_mapping_valid(struct nfs_inode *nfsi)
1128 +{
1129 + if (nfsi->cache_validity & (NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA))
1130 + return false;
1131 + smp_rmb();
1132 + return !test_bit(NFS_INO_INVALIDATING, &nfsi->flags);
1133 +}
1134 +
1135 static
1136 int nfs_readdir_search_for_cookie(struct nfs_cache_array *array, nfs_readdir_descriptor_t *desc)
1137 {
1138 @@ -289,8 +298,8 @@ int nfs_readdir_search_for_cookie(struct nfs_cache_array *array, nfs_readdir_des
1139 struct nfs_open_dir_context *ctx = desc->file->private_data;
1140
1141 new_pos = desc->current_index + i;
1142 - if (ctx->attr_gencount != nfsi->attr_gencount
1143 - || (nfsi->cache_validity & (NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA))) {
1144 + if (ctx->attr_gencount != nfsi->attr_gencount ||
1145 + !nfs_readdir_inode_mapping_valid(nfsi)) {
1146 ctx->duped = 0;
1147 ctx->attr_gencount = nfsi->attr_gencount;
1148 } else if (new_pos < desc->ctx->pos) {
1149 @@ -1139,7 +1148,13 @@ out_zap_parent:
1150 if (inode && S_ISDIR(inode->i_mode)) {
1151 /* Purge readdir caches. */
1152 nfs_zap_caches(inode);
1153 - if (dentry->d_flags & DCACHE_DISCONNECTED)
1154 + /*
1155 + * We can't d_drop the root of a disconnected tree:
1156 + * its d_hash is on the s_anon list and d_drop() would hide
1157 + * it from shrink_dcache_for_unmount(), leading to busy
1158 + * inodes on unmount and further oopses.
1159 + */
1160 + if (IS_ROOT(dentry))
1161 goto out_valid;
1162 }
1163 /* If we have submounts, don't unhash ! */
1164 diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
1165 index 91ff089d3412..af5f3ffcb157 100644
1166 --- a/fs/nfs/direct.c
1167 +++ b/fs/nfs/direct.c
1168 @@ -223,14 +223,31 @@ out:
1169 * Synchronous I/O uses a stack-allocated iocb. Thus we can't trust
1170 * the iocb is still valid here if this is a synchronous request.
1171 */
1172 -static void nfs_direct_complete(struct nfs_direct_req *dreq)
1173 +static void nfs_direct_complete(struct nfs_direct_req *dreq, bool write)
1174 {
1175 + struct inode *inode = dreq->inode;
1176 +
1177 + if (dreq->iocb && write) {
1178 + loff_t pos = dreq->iocb->ki_pos + dreq->count;
1179 +
1180 + spin_lock(&inode->i_lock);
1181 + if (i_size_read(inode) < pos)
1182 + i_size_write(inode, pos);
1183 + spin_unlock(&inode->i_lock);
1184 + }
1185 +
1186 + if (write)
1187 + nfs_zap_mapping(inode, inode->i_mapping);
1188 +
1189 + inode_dio_done(inode);
1190 +
1191 if (dreq->iocb) {
1192 long res = (long) dreq->error;
1193 if (!res)
1194 res = (long) dreq->count;
1195 aio_complete(dreq->iocb, res, 0);
1196 }
1197 +
1198 complete_all(&dreq->completion);
1199
1200 nfs_direct_req_release(dreq);
1201 @@ -273,7 +290,7 @@ static void nfs_direct_read_completion(struct nfs_pgio_header *hdr)
1202 }
1203 out_put:
1204 if (put_dreq(dreq))
1205 - nfs_direct_complete(dreq);
1206 + nfs_direct_complete(dreq, false);
1207 hdr->release(hdr);
1208 }
1209
1210 @@ -403,6 +420,7 @@ static ssize_t nfs_direct_read_schedule_iovec(struct nfs_direct_req *dreq,
1211 loff_t pos, bool uio)
1212 {
1213 struct nfs_pageio_descriptor desc;
1214 + struct inode *inode = dreq->inode;
1215 ssize_t result = -EINVAL;
1216 size_t requested_bytes = 0;
1217 unsigned long seg;
1218 @@ -411,6 +429,7 @@ static ssize_t nfs_direct_read_schedule_iovec(struct nfs_direct_req *dreq,
1219 &nfs_direct_read_completion_ops);
1220 get_dreq(dreq);
1221 desc.pg_dreq = dreq;
1222 + atomic_inc(&inode->i_dio_count);
1223
1224 for (seg = 0; seg < nr_segs; seg++) {
1225 const struct iovec *vec = &iov[seg];
1226 @@ -430,12 +449,13 @@ static ssize_t nfs_direct_read_schedule_iovec(struct nfs_direct_req *dreq,
1227 * generic layer handle the completion.
1228 */
1229 if (requested_bytes == 0) {
1230 + inode_dio_done(inode);
1231 nfs_direct_req_release(dreq);
1232 return result < 0 ? result : -EIO;
1233 }
1234
1235 if (put_dreq(dreq))
1236 - nfs_direct_complete(dreq);
1237 + nfs_direct_complete(dreq, false);
1238 return 0;
1239 }
1240
1241 @@ -473,12 +493,6 @@ out:
1242 return result;
1243 }
1244
1245 -static void nfs_inode_dio_write_done(struct inode *inode)
1246 -{
1247 - nfs_zap_mapping(inode, inode->i_mapping);
1248 - inode_dio_done(inode);
1249 -}
1250 -
1251 #if IS_ENABLED(CONFIG_NFS_V3) || IS_ENABLED(CONFIG_NFS_V4)
1252 static void nfs_direct_write_reschedule(struct nfs_direct_req *dreq)
1253 {
1254 @@ -594,8 +608,7 @@ static void nfs_direct_write_schedule_work(struct work_struct *work)
1255 nfs_direct_write_reschedule(dreq);
1256 break;
1257 default:
1258 - nfs_inode_dio_write_done(dreq->inode);
1259 - nfs_direct_complete(dreq);
1260 + nfs_direct_complete(dreq, true);
1261 }
1262 }
1263
1264 @@ -611,8 +624,7 @@ static void nfs_direct_write_schedule_work(struct work_struct *work)
1265
1266 static void nfs_direct_write_complete(struct nfs_direct_req *dreq, struct inode *inode)
1267 {
1268 - nfs_inode_dio_write_done(inode);
1269 - nfs_direct_complete(dreq);
1270 + nfs_direct_complete(dreq, true);
1271 }
1272 #endif
1273
1274 diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
1275 index 0ee22ab9ef97..fdeeb28f287b 100644
1276 --- a/fs/nfs/inode.c
1277 +++ b/fs/nfs/inode.c
1278 @@ -988,11 +988,11 @@ static int nfs_invalidate_mapping(struct inode *inode, struct address_space *map
1279 if (ret < 0)
1280 return ret;
1281 }
1282 - spin_lock(&inode->i_lock);
1283 - nfsi->cache_validity &= ~NFS_INO_INVALID_DATA;
1284 - if (S_ISDIR(inode->i_mode))
1285 + if (S_ISDIR(inode->i_mode)) {
1286 + spin_lock(&inode->i_lock);
1287 memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf));
1288 - spin_unlock(&inode->i_lock);
1289 + spin_unlock(&inode->i_lock);
1290 + }
1291 nfs_inc_stats(inode, NFSIOS_DATAINVALIDATE);
1292 nfs_fscache_wait_on_invalidate(inode);
1293
1294 @@ -1018,6 +1018,7 @@ static bool nfs_mapping_need_revalidate_inode(struct inode *inode)
1295 int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping)
1296 {
1297 struct nfs_inode *nfsi = NFS_I(inode);
1298 + unsigned long *bitlock = &nfsi->flags;
1299 int ret = 0;
1300
1301 /* swapfiles are not supposed to be shared. */
1302 @@ -1029,12 +1030,46 @@ int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping)
1303 if (ret < 0)
1304 goto out;
1305 }
1306 - if (nfsi->cache_validity & NFS_INO_INVALID_DATA) {
1307 - trace_nfs_invalidate_mapping_enter(inode);
1308 - ret = nfs_invalidate_mapping(inode, mapping);
1309 - trace_nfs_invalidate_mapping_exit(inode, ret);
1310 +
1311 + /*
1312 + * We must clear NFS_INO_INVALID_DATA first to ensure that
1313 + * invalidations that come in while we're shooting down the mappings
1314 + * are respected. But, that leaves a race window where one revalidator
1315 + * can clear the flag, and then another checks it before the mapping
1316 + * gets invalidated. Fix that by serializing access to this part of
1317 + * the function.
1318 + *
1319 + * At the same time, we need to allow other tasks to see whether we
1320 + * might be in the middle of invalidating the pages, so we only set
1321 + * the bit lock here if it looks like we're going to be doing that.
1322 + */
1323 + for (;;) {
1324 + ret = wait_on_bit(bitlock, NFS_INO_INVALIDATING,
1325 + nfs_wait_bit_killable, TASK_KILLABLE);
1326 + if (ret)
1327 + goto out;
1328 + spin_lock(&inode->i_lock);
1329 + if (test_bit(NFS_INO_INVALIDATING, bitlock)) {
1330 + spin_unlock(&inode->i_lock);
1331 + continue;
1332 + }
1333 + if (nfsi->cache_validity & NFS_INO_INVALID_DATA)
1334 + break;
1335 + spin_unlock(&inode->i_lock);
1336 + goto out;
1337 }
1338
1339 + set_bit(NFS_INO_INVALIDATING, bitlock);
1340 + smp_wmb();
1341 + nfsi->cache_validity &= ~NFS_INO_INVALID_DATA;
1342 + spin_unlock(&inode->i_lock);
1343 + trace_nfs_invalidate_mapping_enter(inode);
1344 + ret = nfs_invalidate_mapping(inode, mapping);
1345 + trace_nfs_invalidate_mapping_exit(inode, ret);
1346 +
1347 + clear_bit_unlock(NFS_INO_INVALIDATING, bitlock);
1348 + smp_mb__after_clear_bit();
1349 + wake_up_bit(bitlock, NFS_INO_INVALIDATING);
1350 out:
1351 return ret;
1352 }
1353 diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h
1354 index 28842abafab4..fdfd59157dce 100644
1355 --- a/fs/nfs/nfs4_fs.h
1356 +++ b/fs/nfs/nfs4_fs.h
1357 @@ -249,6 +249,7 @@ static inline struct nfs4_session *nfs4_get_session(const struct nfs_server *ser
1358 extern int nfs41_setup_sequence(struct nfs4_session *session,
1359 struct nfs4_sequence_args *args, struct nfs4_sequence_res *res,
1360 struct rpc_task *task);
1361 +extern int nfs41_sequence_done(struct rpc_task *, struct nfs4_sequence_res *);
1362 extern int nfs4_proc_create_session(struct nfs_client *, struct rpc_cred *);
1363 extern int nfs4_proc_destroy_session(struct nfs4_session *, struct rpc_cred *);
1364 extern int nfs4_proc_get_lease_time(struct nfs_client *clp,
1365 diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
1366 index b86464ba25e1..394b0a0c54bf 100644
1367 --- a/fs/nfs/nfs4filelayout.c
1368 +++ b/fs/nfs/nfs4filelayout.c
1369 @@ -335,8 +335,11 @@ static void filelayout_read_call_done(struct rpc_task *task, void *data)
1370 dprintk("--> %s task->tk_status %d\n", __func__, task->tk_status);
1371
1372 if (test_bit(NFS_IOHDR_REDO, &rdata->header->flags) &&
1373 - task->tk_status == 0)
1374 + task->tk_status == 0) {
1375 + if (rdata->res.seq_res.sr_slot != NULL)
1376 + nfs41_sequence_done(task, &rdata->res.seq_res);
1377 return;
1378 + }
1379
1380 /* Note this may cause RPC to be resent */
1381 rdata->header->mds_ops->rpc_call_done(task, data);
1382 @@ -442,8 +445,11 @@ static void filelayout_write_call_done(struct rpc_task *task, void *data)
1383 struct nfs_write_data *wdata = data;
1384
1385 if (test_bit(NFS_IOHDR_REDO, &wdata->header->flags) &&
1386 - task->tk_status == 0)
1387 + task->tk_status == 0) {
1388 + if (wdata->res.seq_res.sr_slot != NULL)
1389 + nfs41_sequence_done(task, &wdata->res.seq_res);
1390 return;
1391 + }
1392
1393 /* Note this may cause RPC to be resent */
1394 wdata->header->mds_ops->rpc_call_done(task, data);
1395 @@ -1216,17 +1222,17 @@ static void filelayout_recover_commit_reqs(struct list_head *dst,
1396 struct pnfs_commit_bucket *b;
1397 int i;
1398
1399 - /* NOTE cinfo->lock is NOT held, relying on fact that this is
1400 - * only called on single thread per dreq.
1401 - * Can't take the lock because need to do pnfs_put_lseg
1402 - */
1403 + spin_lock(cinfo->lock);
1404 for (i = 0, b = cinfo->ds->buckets; i < cinfo->ds->nbuckets; i++, b++) {
1405 if (transfer_commit_list(&b->written, dst, cinfo, 0)) {
1406 + spin_unlock(cinfo->lock);
1407 pnfs_put_lseg(b->wlseg);
1408 b->wlseg = NULL;
1409 + spin_lock(cinfo->lock);
1410 }
1411 }
1412 cinfo->ds->nwritten = 0;
1413 + spin_unlock(cinfo->lock);
1414 }
1415
1416 static unsigned int
1417 diff --git a/fs/nfs/nfs4filelayoutdev.c b/fs/nfs/nfs4filelayoutdev.c
1418 index c7c295e556ed..efac602edb37 100644
1419 --- a/fs/nfs/nfs4filelayoutdev.c
1420 +++ b/fs/nfs/nfs4filelayoutdev.c
1421 @@ -95,7 +95,7 @@ same_sockaddr(struct sockaddr *addr1, struct sockaddr *addr2)
1422 b6 = (struct sockaddr_in6 *)addr2;
1423
1424 /* LINKLOCAL addresses must have matching scope_id */
1425 - if (ipv6_addr_scope(&a6->sin6_addr) ==
1426 + if (ipv6_addr_src_scope(&a6->sin6_addr) ==
1427 IPV6_ADDR_SCOPE_LINKLOCAL &&
1428 a6->sin6_scope_id != b6->sin6_scope_id)
1429 return false;
1430 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
1431 index 5a5fb98edb8a..bcd42fbc04e7 100644
1432 --- a/fs/nfs/nfs4proc.c
1433 +++ b/fs/nfs/nfs4proc.c
1434 @@ -585,7 +585,7 @@ out_unlock:
1435 nfs41_server_notify_highest_slotid_update(session->clp);
1436 }
1437
1438 -static int nfs41_sequence_done(struct rpc_task *task, struct nfs4_sequence_res *res)
1439 +int nfs41_sequence_done(struct rpc_task *task, struct nfs4_sequence_res *res)
1440 {
1441 struct nfs4_session *session;
1442 struct nfs4_slot *slot;
1443 @@ -685,6 +685,7 @@ out_retry:
1444 rpc_delay(task, NFS4_POLL_RETRY_MAX);
1445 return 0;
1446 }
1447 +EXPORT_SYMBOL_GPL(nfs41_sequence_done);
1448
1449 static int nfs4_sequence_done(struct rpc_task *task,
1450 struct nfs4_sequence_res *res)
1451 @@ -7273,7 +7274,14 @@ static void nfs4_layoutreturn_done(struct rpc_task *task, void *calldata)
1452 return;
1453
1454 server = NFS_SERVER(lrp->args.inode);
1455 - if (nfs4_async_handle_error(task, server, NULL) == -EAGAIN) {
1456 + switch (task->tk_status) {
1457 + default:
1458 + task->tk_status = 0;
1459 + case 0:
1460 + break;
1461 + case -NFS4ERR_DELAY:
1462 + if (nfs4_async_handle_error(task, server, NULL) != -EAGAIN)
1463 + break;
1464 rpc_restart_call_prepare(task);
1465 return;
1466 }
1467 diff --git a/fs/nfs/nfstrace.h b/fs/nfs/nfstrace.h
1468 index 89fe741e58b1..59f838cdc009 100644
1469 --- a/fs/nfs/nfstrace.h
1470 +++ b/fs/nfs/nfstrace.h
1471 @@ -36,6 +36,7 @@
1472 __print_flags(v, "|", \
1473 { 1 << NFS_INO_ADVISE_RDPLUS, "ADVISE_RDPLUS" }, \
1474 { 1 << NFS_INO_STALE, "STALE" }, \
1475 + { 1 << NFS_INO_INVALIDATING, "INVALIDATING" }, \
1476 { 1 << NFS_INO_FLUSHING, "FLUSHING" }, \
1477 { 1 << NFS_INO_FSCACHE, "FSCACHE" }, \
1478 { 1 << NFS_INO_COMMIT, "COMMIT" }, \
1479 diff --git a/fs/nfs/write.c b/fs/nfs/write.c
1480 index 28466be64eeb..c6aa89f92558 100644
1481 --- a/fs/nfs/write.c
1482 +++ b/fs/nfs/write.c
1483 @@ -909,9 +909,14 @@ bool nfs_ctx_key_to_expire(struct nfs_open_context *ctx)
1484 */
1485 static bool nfs_write_pageuptodate(struct page *page, struct inode *inode)
1486 {
1487 + struct nfs_inode *nfsi = NFS_I(inode);
1488 +
1489 if (nfs_have_delegated_attributes(inode))
1490 goto out;
1491 - if (NFS_I(inode)->cache_validity & (NFS_INO_INVALID_DATA|NFS_INO_REVAL_PAGECACHE))
1492 + if (nfsi->cache_validity & (NFS_INO_INVALID_DATA|NFS_INO_REVAL_PAGECACHE))
1493 + return false;
1494 + smp_rmb();
1495 + if (test_bit(NFS_INO_INVALIDATING, &nfsi->flags))
1496 return false;
1497 out:
1498 return PageUptodate(page) != 0;
1499 diff --git a/fs/proc/page.c b/fs/proc/page.c
1500 index b8730d9ebaee..2a8cc94bb641 100644
1501 --- a/fs/proc/page.c
1502 +++ b/fs/proc/page.c
1503 @@ -121,7 +121,7 @@ u64 stable_page_flags(struct page *page)
1504 * just checks PG_head/PG_tail, so we need to check PageLRU to make
1505 * sure a given page is a thp, not a non-huge compound page.
1506 */
1507 - else if (PageTransCompound(page) && PageLRU(compound_trans_head(page)))
1508 + else if (PageTransCompound(page) && PageLRU(compound_head(page)))
1509 u |= 1 << KPF_THP;
1510
1511 /*
1512 diff --git a/include/linux/bitops.h b/include/linux/bitops.h
1513 index a3b6b82108b9..c1dde8e00d25 100644
1514 --- a/include/linux/bitops.h
1515 +++ b/include/linux/bitops.h
1516 @@ -185,6 +185,21 @@ static inline unsigned long __ffs64(u64 word)
1517
1518 #ifdef __KERNEL__
1519
1520 +#ifndef set_mask_bits
1521 +#define set_mask_bits(ptr, _mask, _bits) \
1522 +({ \
1523 + const typeof(*ptr) mask = (_mask), bits = (_bits); \
1524 + typeof(*ptr) old, new; \
1525 + \
1526 + do { \
1527 + old = ACCESS_ONCE(*ptr); \
1528 + new = (old & ~mask) | bits; \
1529 + } while (cmpxchg(ptr, old, new) != old); \
1530 + \
1531 + new; \
1532 +})
1533 +#endif
1534 +
1535 #ifndef find_last_bit
1536 /**
1537 * find_last_bit - find the last set bit in a memory region
1538 diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h
1539 index 3935428c57cf..a291552ab767 100644
1540 --- a/include/linux/huge_mm.h
1541 +++ b/include/linux/huge_mm.h
1542 @@ -156,23 +156,6 @@ static inline int hpage_nr_pages(struct page *page)
1543 return HPAGE_PMD_NR;
1544 return 1;
1545 }
1546 -static inline struct page *compound_trans_head(struct page *page)
1547 -{
1548 - if (PageTail(page)) {
1549 - struct page *head;
1550 - head = page->first_page;
1551 - smp_rmb();
1552 - /*
1553 - * head may be a dangling pointer.
1554 - * __split_huge_page_refcount clears PageTail before
1555 - * overwriting first_page, so if PageTail is still
1556 - * there it means the head pointer isn't dangling.
1557 - */
1558 - if (PageTail(page))
1559 - return head;
1560 - }
1561 - return page;
1562 -}
1563
1564 extern int do_huge_pmd_numa_page(struct mm_struct *mm, struct vm_area_struct *vma,
1565 unsigned long addr, pmd_t pmd, pmd_t *pmdp);
1566 @@ -202,7 +185,6 @@ static inline int split_huge_page(struct page *page)
1567 do { } while (0)
1568 #define split_huge_page_pmd_mm(__mm, __address, __pmd) \
1569 do { } while (0)
1570 -#define compound_trans_head(page) compound_head(page)
1571 static inline int hugepage_madvise(struct vm_area_struct *vma,
1572 unsigned long *vm_flags, int advice)
1573 {
1574 diff --git a/include/linux/mm.h b/include/linux/mm.h
1575 index 648bcb007eba..073734339583 100644
1576 --- a/include/linux/mm.h
1577 +++ b/include/linux/mm.h
1578 @@ -371,8 +371,18 @@ static inline void compound_unlock_irqrestore(struct page *page,
1579
1580 static inline struct page *compound_head(struct page *page)
1581 {
1582 - if (unlikely(PageTail(page)))
1583 - return page->first_page;
1584 + if (unlikely(PageTail(page))) {
1585 + struct page *head = page->first_page;
1586 +
1587 + /*
1588 + * page->first_page may be a dangling pointer to an old
1589 + * compound page, so recheck that it is still a tail
1590 + * page before returning.
1591 + */
1592 + smp_rmb();
1593 + if (likely(PageTail(page)))
1594 + return head;
1595 + }
1596 return page;
1597 }
1598
1599 diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h
1600 index 3ea4cde8701c..a632498d42fa 100644
1601 --- a/include/linux/nfs_fs.h
1602 +++ b/include/linux/nfs_fs.h
1603 @@ -215,6 +215,7 @@ struct nfs_inode {
1604 #define NFS_INO_ADVISE_RDPLUS (0) /* advise readdirplus */
1605 #define NFS_INO_STALE (1) /* possible stale inode */
1606 #define NFS_INO_ACL_LRU_SET (2) /* Inode is on the LRU list */
1607 +#define NFS_INO_INVALIDATING (3) /* inode is being invalidated */
1608 #define NFS_INO_FLUSHING (4) /* inode is flushing out data */
1609 #define NFS_INO_FSCACHE (5) /* inode can be cached by FS-Cache */
1610 #define NFS_INO_FSCACHE_LOCK (6) /* FS-Cache cookie management lock */
1611 diff --git a/mm/ksm.c b/mm/ksm.c
1612 index 0bea2b262a47..c78fff1e9eae 100644
1613 --- a/mm/ksm.c
1614 +++ b/mm/ksm.c
1615 @@ -444,7 +444,7 @@ static void break_cow(struct rmap_item *rmap_item)
1616 static struct page *page_trans_compound_anon(struct page *page)
1617 {
1618 if (PageTransCompound(page)) {
1619 - struct page *head = compound_trans_head(page);
1620 + struct page *head = compound_head(page);
1621 /*
1622 * head may actually be splitted and freed from under
1623 * us but it's ok here.
1624 diff --git a/mm/memory-failure.c b/mm/memory-failure.c
1625 index de476c2f8827..5ea3cf734138 100644
1626 --- a/mm/memory-failure.c
1627 +++ b/mm/memory-failure.c
1628 @@ -1659,7 +1659,7 @@ int soft_offline_page(struct page *page, int flags)
1629 {
1630 int ret;
1631 unsigned long pfn = page_to_pfn(page);
1632 - struct page *hpage = compound_trans_head(page);
1633 + struct page *hpage = compound_head(page);
1634
1635 if (PageHWPoison(page)) {
1636 pr_info("soft offline: %#lx page already poisoned\n", pfn);
1637 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
1638 index 06f847933eeb..6fca39097766 100644
1639 --- a/mm/page_alloc.c
1640 +++ b/mm/page_alloc.c
1641 @@ -369,9 +369,11 @@ void prep_compound_page(struct page *page, unsigned long order)
1642 __SetPageHead(page);
1643 for (i = 1; i < nr_pages; i++) {
1644 struct page *p = page + i;
1645 - __SetPageTail(p);
1646 set_page_count(p, 0);
1647 p->first_page = page;
1648 + /* Make sure p->first_page is always valid for PageTail() */
1649 + smp_wmb();
1650 + __SetPageTail(p);
1651 }
1652 }
1653
1654 diff --git a/mm/swap.c b/mm/swap.c
1655 index 0c8f7a471925..aa4da5d9401d 100644
1656 --- a/mm/swap.c
1657 +++ b/mm/swap.c
1658 @@ -84,7 +84,7 @@ static void put_compound_page(struct page *page)
1659 {
1660 if (unlikely(PageTail(page))) {
1661 /* __split_huge_page_refcount can run under us */
1662 - struct page *page_head = compound_trans_head(page);
1663 + struct page *page_head = compound_head(page);
1664
1665 if (likely(page != page_head &&
1666 get_page_unless_zero(page_head))) {
1667 @@ -222,7 +222,7 @@ bool __get_page_tail(struct page *page)
1668 */
1669 unsigned long flags;
1670 bool got = false;
1671 - struct page *page_head = compound_trans_head(page);
1672 + struct page *page_head = compound_head(page);
1673
1674 if (likely(page != page_head && get_page_unless_zero(page_head))) {
1675 /* Ref to put_compound_page() comment. */
1676 diff --git a/net/netfilter/ipvs/ip_vs_conn.c b/net/netfilter/ipvs/ip_vs_conn.c
1677 index 4c8e5c0aa1ab..d585626d7676 100644
1678 --- a/net/netfilter/ipvs/ip_vs_conn.c
1679 +++ b/net/netfilter/ipvs/ip_vs_conn.c
1680 @@ -871,11 +871,11 @@ ip_vs_conn_new(const struct ip_vs_conn_param *p,
1681 cp->protocol = p->protocol;
1682 ip_vs_addr_set(p->af, &cp->caddr, p->caddr);
1683 cp->cport = p->cport;
1684 - ip_vs_addr_set(p->af, &cp->vaddr, p->vaddr);
1685 - cp->vport = p->vport;
1686 - /* proto should only be IPPROTO_IP if d_addr is a fwmark */
1687 + /* proto should only be IPPROTO_IP if p->vaddr is a fwmark */
1688 ip_vs_addr_set(p->protocol == IPPROTO_IP ? AF_UNSPEC : p->af,
1689 - &cp->daddr, daddr);
1690 + &cp->vaddr, p->vaddr);
1691 + cp->vport = p->vport;
1692 + ip_vs_addr_set(p->af, &cp->daddr, daddr);
1693 cp->dport = dport;
1694 cp->flags = flags;
1695 cp->fwmark = fwmark;
1696 diff --git a/net/netfilter/nf_conntrack_proto_dccp.c b/net/netfilter/nf_conntrack_proto_dccp.c
1697 index a99b6c3427b0..59359bec328a 100644
1698 --- a/net/netfilter/nf_conntrack_proto_dccp.c
1699 +++ b/net/netfilter/nf_conntrack_proto_dccp.c
1700 @@ -428,7 +428,7 @@ static bool dccp_new(struct nf_conn *ct, const struct sk_buff *skb,
1701 const char *msg;
1702 u_int8_t state;
1703
1704 - dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &dh);
1705 + dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &_dh);
1706 BUG_ON(dh == NULL);
1707
1708 state = dccp_state_table[CT_DCCP_ROLE_CLIENT][dh->dccph_type][CT_DCCP_NONE];
1709 @@ -486,7 +486,7 @@ static int dccp_packet(struct nf_conn *ct, const struct sk_buff *skb,
1710 u_int8_t type, old_state, new_state;
1711 enum ct_dccp_roles role;
1712
1713 - dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &dh);
1714 + dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &_dh);
1715 BUG_ON(dh == NULL);
1716 type = dh->dccph_type;
1717
1718 @@ -577,7 +577,7 @@ static int dccp_error(struct net *net, struct nf_conn *tmpl,
1719 unsigned int cscov;
1720 const char *msg;
1721
1722 - dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &dh);
1723 + dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &_dh);
1724 if (dh == NULL) {
1725 msg = "nf_ct_dccp: short packet ";
1726 goto out_invalid;
1727 diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c
1728 index a7f9821d1760..bb035f8451c6 100644
1729 --- a/net/sunrpc/auth_gss/auth_gss.c
1730 +++ b/net/sunrpc/auth_gss/auth_gss.c
1731 @@ -1508,7 +1508,7 @@ out:
1732 static int
1733 gss_refresh_null(struct rpc_task *task)
1734 {
1735 - return -EACCES;
1736 + return 0;
1737 }
1738
1739 static __be32 *
1740 diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
1741 index 7d4ccfa48008..31da88bf6c1c 100644
1742 --- a/sound/pci/hda/hda_generic.c
1743 +++ b/sound/pci/hda/hda_generic.c
1744 @@ -3264,7 +3264,7 @@ static int cap_put_caller(struct snd_kcontrol *kcontrol,
1745 mutex_unlock(&codec->control_mutex);
1746 snd_hda_codec_flush_cache(codec); /* flush the updates */
1747 if (err >= 0 && spec->cap_sync_hook)
1748 - spec->cap_sync_hook(codec, ucontrol);
1749 + spec->cap_sync_hook(codec, kcontrol, ucontrol);
1750 return err;
1751 }
1752
1753 @@ -3385,7 +3385,7 @@ static int cap_single_sw_put(struct snd_kcontrol *kcontrol,
1754 return ret;
1755
1756 if (spec->cap_sync_hook)
1757 - spec->cap_sync_hook(codec, ucontrol);
1758 + spec->cap_sync_hook(codec, kcontrol, ucontrol);
1759
1760 return ret;
1761 }
1762 @@ -3790,7 +3790,7 @@ static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
1763 return 0;
1764 snd_hda_activate_path(codec, path, true, false);
1765 if (spec->cap_sync_hook)
1766 - spec->cap_sync_hook(codec, NULL);
1767 + spec->cap_sync_hook(codec, NULL, NULL);
1768 path_power_down_sync(codec, old_path);
1769 return 1;
1770 }
1771 @@ -5233,7 +5233,7 @@ static void init_input_src(struct hda_codec *codec)
1772 }
1773
1774 if (spec->cap_sync_hook)
1775 - spec->cap_sync_hook(codec, NULL);
1776 + spec->cap_sync_hook(codec, NULL, NULL);
1777 }
1778
1779 /* set right pin controls for digital I/O */
1780 diff --git a/sound/pci/hda/hda_generic.h b/sound/pci/hda/hda_generic.h
1781 index 0929a06df812..a1095de808c8 100644
1782 --- a/sound/pci/hda/hda_generic.h
1783 +++ b/sound/pci/hda/hda_generic.h
1784 @@ -274,6 +274,7 @@ struct hda_gen_spec {
1785 void (*init_hook)(struct hda_codec *codec);
1786 void (*automute_hook)(struct hda_codec *codec);
1787 void (*cap_sync_hook)(struct hda_codec *codec,
1788 + struct snd_kcontrol *kcontrol,
1789 struct snd_ctl_elem_value *ucontrol);
1790
1791 /* PCM hooks */
1792 diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
1793 index 96f07ce56603..fde381d02afd 100644
1794 --- a/sound/pci/hda/patch_conexant.c
1795 +++ b/sound/pci/hda/patch_conexant.c
1796 @@ -3282,7 +3282,8 @@ static void cxt_update_headset_mode(struct hda_codec *codec)
1797 }
1798
1799 static void cxt_update_headset_mode_hook(struct hda_codec *codec,
1800 - struct snd_ctl_elem_value *ucontrol)
1801 + struct snd_kcontrol *kcontrol,
1802 + struct snd_ctl_elem_value *ucontrol)
1803 {
1804 cxt_update_headset_mode(codec);
1805 }
1806 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
1807 index deddee9c1565..6a32c857f704 100644
1808 --- a/sound/pci/hda/patch_realtek.c
1809 +++ b/sound/pci/hda/patch_realtek.c
1810 @@ -695,7 +695,8 @@ static void alc_inv_dmic_sync(struct hda_codec *codec, bool force)
1811 }
1812
1813 static void alc_inv_dmic_hook(struct hda_codec *codec,
1814 - struct snd_ctl_elem_value *ucontrol)
1815 + struct snd_kcontrol *kcontrol,
1816 + struct snd_ctl_elem_value *ucontrol)
1817 {
1818 alc_inv_dmic_sync(codec, false);
1819 }
1820 @@ -3141,7 +3142,8 @@ static void alc269_fixup_hp_gpio_mute_hook(void *private_data, int enabled)
1821
1822 /* turn on/off mic-mute LED per capture hook */
1823 static void alc269_fixup_hp_gpio_mic_mute_hook(struct hda_codec *codec,
1824 - struct snd_ctl_elem_value *ucontrol)
1825 + struct snd_kcontrol *kcontrol,
1826 + struct snd_ctl_elem_value *ucontrol)
1827 {
1828 struct alc_spec *spec = codec->spec;
1829 unsigned int oldval = spec->gpio_led;
1830 @@ -3403,7 +3405,8 @@ static void alc_update_headset_mode(struct hda_codec *codec)
1831 }
1832
1833 static void alc_update_headset_mode_hook(struct hda_codec *codec,
1834 - struct snd_ctl_elem_value *ucontrol)
1835 + struct snd_kcontrol *kcontrol,
1836 + struct snd_ctl_elem_value *ucontrol)
1837 {
1838 alc_update_headset_mode(codec);
1839 }
1840 diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
1841 index 6133423821d1..d761c0b879c9 100644
1842 --- a/sound/pci/hda/patch_sigmatel.c
1843 +++ b/sound/pci/hda/patch_sigmatel.c
1844 @@ -195,7 +195,7 @@ struct sigmatel_spec {
1845 int default_polarity;
1846
1847 unsigned int mic_mute_led_gpio; /* capture mute LED GPIO */
1848 - bool mic_mute_led_on; /* current mic mute state */
1849 + unsigned int mic_enabled; /* current mic mute state (bitmask) */
1850
1851 /* stream */
1852 unsigned int stream_delay;
1853 @@ -325,19 +325,26 @@ static void stac_gpio_set(struct hda_codec *codec, unsigned int mask,
1854
1855 /* hook for controlling mic-mute LED GPIO */
1856 static void stac_capture_led_hook(struct hda_codec *codec,
1857 - struct snd_ctl_elem_value *ucontrol)
1858 + struct snd_kcontrol *kcontrol,
1859 + struct snd_ctl_elem_value *ucontrol)
1860 {
1861 struct sigmatel_spec *spec = codec->spec;
1862 - bool mute;
1863 + unsigned int mask;
1864 + bool cur_mute, prev_mute;
1865
1866 - if (!ucontrol)
1867 + if (!kcontrol || !ucontrol)
1868 return;
1869
1870 - mute = !(ucontrol->value.integer.value[0] ||
1871 - ucontrol->value.integer.value[1]);
1872 - if (spec->mic_mute_led_on != mute) {
1873 - spec->mic_mute_led_on = mute;
1874 - if (mute)
1875 + mask = 1U << snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
1876 + prev_mute = !spec->mic_enabled;
1877 + if (ucontrol->value.integer.value[0] ||
1878 + ucontrol->value.integer.value[1])
1879 + spec->mic_enabled |= mask;
1880 + else
1881 + spec->mic_enabled &= ~mask;
1882 + cur_mute = !spec->mic_enabled;
1883 + if (cur_mute != prev_mute) {
1884 + if (cur_mute)
1885 spec->gpio_data |= spec->mic_mute_led_gpio;
1886 else
1887 spec->gpio_data &= ~spec->mic_mute_led_gpio;
1888 @@ -3974,7 +3981,7 @@ static void stac_setup_gpio(struct hda_codec *codec)
1889 if (spec->mic_mute_led_gpio) {
1890 spec->gpio_mask |= spec->mic_mute_led_gpio;
1891 spec->gpio_dir |= spec->mic_mute_led_gpio;
1892 - spec->mic_mute_led_on = true;
1893 + spec->mic_enabled = 0;
1894 spec->gpio_data |= spec->mic_mute_led_gpio;
1895
1896 spec->gen.cap_sync_hook = stac_capture_led_hook;