Magellan Linux

Contents of /trunk/kernel-magellan/patches-3.6/0107-3.6.8-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1977 - (show annotations) (download)
Mon Dec 3 13:25:50 2012 UTC (11 years, 5 months ago) by niro
File size: 97270 byte(s)
-linux-3.6.8
1 diff --git a/Documentation/cgroups/memory.txt b/Documentation/cgroups/memory.txt
2 index 4372e6b..97aa4eb 100644
3 --- a/Documentation/cgroups/memory.txt
4 +++ b/Documentation/cgroups/memory.txt
5 @@ -466,6 +466,10 @@ Note:
6 5.3 swappiness
7
8 Similar to /proc/sys/vm/swappiness, but affecting a hierarchy of groups only.
9 +Please note that unlike the global swappiness, memcg knob set to 0
10 +really prevents from any swapping even if there is a swap storage
11 +available. This might lead to memcg OOM killer if there are no file
12 +pages to reclaim.
13
14 Following cgroups' swappiness can't be changed.
15 - root cgroup (uses /proc/sys/vm/swappiness).
16 diff --git a/arch/arm/boot/dts/tegra30.dtsi b/arch/arm/boot/dts/tegra30.dtsi
17 index 3e4334d..3f96658 100644
18 --- a/arch/arm/boot/dts/tegra30.dtsi
19 +++ b/arch/arm/boot/dts/tegra30.dtsi
20 @@ -73,8 +73,8 @@
21
22 pinmux: pinmux {
23 compatible = "nvidia,tegra30-pinmux";
24 - reg = <0x70000868 0xd0 /* Pad control registers */
25 - 0x70003000 0x3e0>; /* Mux registers */
26 + reg = <0x70000868 0xd4 /* Pad control registers */
27 + 0x70003000 0x3e4>; /* Mux registers */
28 };
29
30 serial@70006000 {
31 diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c
32 index 1b47319..bdbbbbc 100644
33 --- a/arch/arm/mach-at91/at91sam9g45_devices.c
34 +++ b/arch/arm/mach-at91/at91sam9g45_devices.c
35 @@ -1847,8 +1847,8 @@ static struct resource sha_resources[] = {
36 .flags = IORESOURCE_MEM,
37 },
38 [1] = {
39 - .start = AT91SAM9G45_ID_AESTDESSHA,
40 - .end = AT91SAM9G45_ID_AESTDESSHA,
41 + .start = NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA,
42 + .end = NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA,
43 .flags = IORESOURCE_IRQ,
44 },
45 };
46 @@ -1880,8 +1880,8 @@ static struct resource tdes_resources[] = {
47 .flags = IORESOURCE_MEM,
48 },
49 [1] = {
50 - .start = AT91SAM9G45_ID_AESTDESSHA,
51 - .end = AT91SAM9G45_ID_AESTDESSHA,
52 + .start = NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA,
53 + .end = NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA,
54 .flags = IORESOURCE_IRQ,
55 },
56 };
57 @@ -1916,8 +1916,8 @@ static struct resource aes_resources[] = {
58 .flags = IORESOURCE_MEM,
59 },
60 [1] = {
61 - .start = AT91SAM9G45_ID_AESTDESSHA,
62 - .end = AT91SAM9G45_ID_AESTDESSHA,
63 + .start = NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA,
64 + .end = NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA,
65 .flags = IORESOURCE_IRQ,
66 },
67 };
68 diff --git a/arch/arm/mach-imx/ehci-imx25.c b/arch/arm/mach-imx/ehci-imx25.c
69 index 05bb41d..8d5b30a 100644
70 --- a/arch/arm/mach-imx/ehci-imx25.c
71 +++ b/arch/arm/mach-imx/ehci-imx25.c
72 @@ -30,7 +30,7 @@
73 #define MX25_H1_SIC_SHIFT 21
74 #define MX25_H1_SIC_MASK (0x3 << MX25_H1_SIC_SHIFT)
75 #define MX25_H1_PP_BIT (1 << 18)
76 -#define MX25_H1_PM_BIT (1 << 8)
77 +#define MX25_H1_PM_BIT (1 << 16)
78 #define MX25_H1_IPPUE_UP_BIT (1 << 7)
79 #define MX25_H1_IPPUE_DOWN_BIT (1 << 6)
80 #define MX25_H1_TLL_BIT (1 << 5)
81 diff --git a/arch/arm/mach-imx/ehci-imx35.c b/arch/arm/mach-imx/ehci-imx35.c
82 index 73574c3..746ce5f 100644
83 --- a/arch/arm/mach-imx/ehci-imx35.c
84 +++ b/arch/arm/mach-imx/ehci-imx35.c
85 @@ -30,7 +30,7 @@
86 #define MX35_H1_SIC_SHIFT 21
87 #define MX35_H1_SIC_MASK (0x3 << MX35_H1_SIC_SHIFT)
88 #define MX35_H1_PP_BIT (1 << 18)
89 -#define MX35_H1_PM_BIT (1 << 8)
90 +#define MX35_H1_PM_BIT (1 << 16)
91 #define MX35_H1_IPPUE_UP_BIT (1 << 7)
92 #define MX35_H1_IPPUE_DOWN_BIT (1 << 6)
93 #define MX35_H1_TLL_BIT (1 << 5)
94 diff --git a/arch/arm/plat-omap/include/plat/omap-serial.h b/arch/arm/plat-omap/include/plat/omap-serial.h
95 index 3a57644..1a52725 100644
96 --- a/arch/arm/plat-omap/include/plat/omap-serial.h
97 +++ b/arch/arm/plat-omap/include/plat/omap-serial.h
98 @@ -42,10 +42,10 @@
99 #define OMAP_UART_WER_MOD_WKUP 0X7F
100
101 /* Enable XON/XOFF flow control on output */
102 -#define OMAP_UART_SW_TX 0x8
103 +#define OMAP_UART_SW_TX 0x04
104
105 /* Enable XON/XOFF flow control on input */
106 -#define OMAP_UART_SW_RX 0x2
107 +#define OMAP_UART_SW_RX 0x04
108
109 #define OMAP_UART_SYSC_RESET 0X07
110 #define OMAP_UART_TCR_TRIG 0X0F
111 diff --git a/arch/m68k/include/asm/signal.h b/arch/m68k/include/asm/signal.h
112 index 60e8866..93fe83e 100644
113 --- a/arch/m68k/include/asm/signal.h
114 +++ b/arch/m68k/include/asm/signal.h
115 @@ -156,7 +156,7 @@ typedef struct sigaltstack {
116 static inline void sigaddset(sigset_t *set, int _sig)
117 {
118 asm ("bfset %0{%1,#1}"
119 - : "+od" (*set)
120 + : "+o" (*set)
121 : "id" ((_sig - 1) ^ 31)
122 : "cc");
123 }
124 @@ -164,7 +164,7 @@ static inline void sigaddset(sigset_t *set, int _sig)
125 static inline void sigdelset(sigset_t *set, int _sig)
126 {
127 asm ("bfclr %0{%1,#1}"
128 - : "+od" (*set)
129 + : "+o" (*set)
130 : "id" ((_sig - 1) ^ 31)
131 : "cc");
132 }
133 @@ -180,7 +180,7 @@ static inline int __gen_sigismember(sigset_t *set, int _sig)
134 int ret;
135 asm ("bfextu %1{%2,#1},%0"
136 : "=d" (ret)
137 - : "od" (*set), "id" ((_sig-1) ^ 31)
138 + : "o" (*set), "id" ((_sig-1) ^ 31)
139 : "cc");
140 return ret;
141 }
142 diff --git a/arch/s390/include/asm/compat.h b/arch/s390/include/asm/compat.h
143 index 234f1d8..2e0a15b 100644
144 --- a/arch/s390/include/asm/compat.h
145 +++ b/arch/s390/include/asm/compat.h
146 @@ -20,7 +20,7 @@
147 #define PSW32_MASK_CC 0x00003000UL
148 #define PSW32_MASK_PM 0x00000f00UL
149
150 -#define PSW32_MASK_USER 0x00003F00UL
151 +#define PSW32_MASK_USER 0x0000FF00UL
152
153 #define PSW32_ADDR_AMODE 0x80000000UL
154 #define PSW32_ADDR_INSN 0x7FFFFFFFUL
155 diff --git a/arch/s390/include/asm/ptrace.h b/arch/s390/include/asm/ptrace.h
156 index d5f08ea..f512565 100644
157 --- a/arch/s390/include/asm/ptrace.h
158 +++ b/arch/s390/include/asm/ptrace.h
159 @@ -238,7 +238,7 @@ typedef struct
160 #define PSW_MASK_EA 0x00000000UL
161 #define PSW_MASK_BA 0x00000000UL
162
163 -#define PSW_MASK_USER 0x00003F00UL
164 +#define PSW_MASK_USER 0x0000FF00UL
165
166 #define PSW_ADDR_AMODE 0x80000000UL
167 #define PSW_ADDR_INSN 0x7FFFFFFFUL
168 @@ -267,7 +267,7 @@ typedef struct
169 #define PSW_MASK_EA 0x0000000100000000UL
170 #define PSW_MASK_BA 0x0000000080000000UL
171
172 -#define PSW_MASK_USER 0x00003F0180000000UL
173 +#define PSW_MASK_USER 0x0000FF0180000000UL
174
175 #define PSW_ADDR_AMODE 0x0000000000000000UL
176 #define PSW_ADDR_INSN 0xFFFFFFFFFFFFFFFFUL
177 diff --git a/arch/s390/kernel/compat_signal.c b/arch/s390/kernel/compat_signal.c
178 index a1e8a86..593fcc9 100644
179 --- a/arch/s390/kernel/compat_signal.c
180 +++ b/arch/s390/kernel/compat_signal.c
181 @@ -309,6 +309,10 @@ static int restore_sigregs32(struct pt_regs *regs,_sigregs32 __user *sregs)
182 regs->psw.mask = (regs->psw.mask & ~PSW_MASK_USER) |
183 (__u64)(regs32.psw.mask & PSW32_MASK_USER) << 32 |
184 (__u64)(regs32.psw.addr & PSW32_ADDR_AMODE);
185 + /* Check for invalid user address space control. */
186 + if ((regs->psw.mask & PSW_MASK_ASC) >= (psw_kernel_bits & PSW_MASK_ASC))
187 + regs->psw.mask = (psw_user_bits & PSW_MASK_ASC) |
188 + (regs->psw.mask & ~PSW_MASK_ASC);
189 regs->psw.addr = (__u64)(regs32.psw.addr & PSW32_ADDR_INSN);
190 for (i = 0; i < NUM_GPRS; i++)
191 regs->gprs[i] = (__u64) regs32.gprs[i];
192 @@ -481,7 +485,10 @@ static int setup_frame32(int sig, struct k_sigaction *ka,
193
194 /* Set up registers for signal handler */
195 regs->gprs[15] = (__force __u64) frame;
196 - regs->psw.mask |= PSW_MASK_BA; /* force amode 31 */
197 + /* Force 31 bit amode and default user address space control. */
198 + regs->psw.mask = PSW_MASK_BA |
199 + (psw_user_bits & PSW_MASK_ASC) |
200 + (regs->psw.mask & ~PSW_MASK_ASC);
201 regs->psw.addr = (__force __u64) ka->sa.sa_handler;
202
203 regs->gprs[2] = map_signal(sig);
204 @@ -549,7 +556,10 @@ static int setup_rt_frame32(int sig, struct k_sigaction *ka, siginfo_t *info,
205
206 /* Set up registers for signal handler */
207 regs->gprs[15] = (__force __u64) frame;
208 - regs->psw.mask |= PSW_MASK_BA; /* force amode 31 */
209 + /* Force 31 bit amode and default user address space control. */
210 + regs->psw.mask = PSW_MASK_BA |
211 + (psw_user_bits & PSW_MASK_ASC) |
212 + (regs->psw.mask & ~PSW_MASK_ASC);
213 regs->psw.addr = (__u64) ka->sa.sa_handler;
214
215 regs->gprs[2] = map_signal(sig);
216 diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c
217 index c13a2a3..d1259d8 100644
218 --- a/arch/s390/kernel/signal.c
219 +++ b/arch/s390/kernel/signal.c
220 @@ -136,6 +136,10 @@ static int restore_sigregs(struct pt_regs *regs, _sigregs __user *sregs)
221 /* Use regs->psw.mask instead of psw_user_bits to preserve PER bit. */
222 regs->psw.mask = (regs->psw.mask & ~PSW_MASK_USER) |
223 (user_sregs.regs.psw.mask & PSW_MASK_USER);
224 + /* Check for invalid user address space control. */
225 + if ((regs->psw.mask & PSW_MASK_ASC) >= (psw_kernel_bits & PSW_MASK_ASC))
226 + regs->psw.mask = (psw_user_bits & PSW_MASK_ASC) |
227 + (regs->psw.mask & ~PSW_MASK_ASC);
228 /* Check for invalid amode */
229 if (regs->psw.mask & PSW_MASK_EA)
230 regs->psw.mask |= PSW_MASK_BA;
231 @@ -273,7 +277,10 @@ static int setup_frame(int sig, struct k_sigaction *ka,
232
233 /* Set up registers for signal handler */
234 regs->gprs[15] = (unsigned long) frame;
235 - regs->psw.mask |= PSW_MASK_EA | PSW_MASK_BA; /* 64 bit amode */
236 + /* Force default amode and default user address space control. */
237 + regs->psw.mask = PSW_MASK_EA | PSW_MASK_BA |
238 + (psw_user_bits & PSW_MASK_ASC) |
239 + (regs->psw.mask & ~PSW_MASK_ASC);
240 regs->psw.addr = (unsigned long) ka->sa.sa_handler | PSW_ADDR_AMODE;
241
242 regs->gprs[2] = map_signal(sig);
243 @@ -346,7 +353,10 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
244
245 /* Set up registers for signal handler */
246 regs->gprs[15] = (unsigned long) frame;
247 - regs->psw.mask |= PSW_MASK_EA | PSW_MASK_BA; /* 64 bit amode */
248 + /* Force default amode and default user address space control. */
249 + regs->psw.mask = PSW_MASK_EA | PSW_MASK_BA |
250 + (psw_user_bits & PSW_MASK_ASC) |
251 + (regs->psw.mask & ~PSW_MASK_ASC);
252 regs->psw.addr = (unsigned long) ka->sa.sa_handler | PSW_ADDR_AMODE;
253
254 regs->gprs[2] = map_signal(sig);
255 diff --git a/arch/s390/mm/gup.c b/arch/s390/mm/gup.c
256 index 65cb06e..4ccf9f5 100644
257 --- a/arch/s390/mm/gup.c
258 +++ b/arch/s390/mm/gup.c
259 @@ -183,7 +183,7 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write,
260 addr = start;
261 len = (unsigned long) nr_pages << PAGE_SHIFT;
262 end = start + len;
263 - if (end < start)
264 + if ((end < start) || (end > TASK_SIZE))
265 goto slow_irqon;
266
267 /*
268 diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
269 index b1eb202..ff66a3b 100644
270 --- a/arch/x86/kvm/vmx.c
271 +++ b/arch/x86/kvm/vmx.c
272 @@ -6584,19 +6584,22 @@ static void vmx_cpuid_update(struct kvm_vcpu *vcpu)
273 }
274 }
275
276 - exec_control = vmcs_read32(SECONDARY_VM_EXEC_CONTROL);
277 /* Exposing INVPCID only when PCID is exposed */
278 best = kvm_find_cpuid_entry(vcpu, 0x7, 0);
279 if (vmx_invpcid_supported() &&
280 best && (best->ebx & bit(X86_FEATURE_INVPCID)) &&
281 guest_cpuid_has_pcid(vcpu)) {
282 + exec_control = vmcs_read32(SECONDARY_VM_EXEC_CONTROL);
283 exec_control |= SECONDARY_EXEC_ENABLE_INVPCID;
284 vmcs_write32(SECONDARY_VM_EXEC_CONTROL,
285 exec_control);
286 } else {
287 - exec_control &= ~SECONDARY_EXEC_ENABLE_INVPCID;
288 - vmcs_write32(SECONDARY_VM_EXEC_CONTROL,
289 - exec_control);
290 + if (cpu_has_secondary_exec_ctrls()) {
291 + exec_control = vmcs_read32(SECONDARY_VM_EXEC_CONTROL);
292 + exec_control &= ~SECONDARY_EXEC_ENABLE_INVPCID;
293 + vmcs_write32(SECONDARY_VM_EXEC_CONTROL,
294 + exec_control);
295 + }
296 if (best)
297 best->ebx &= ~bit(X86_FEATURE_INVPCID);
298 }
299 diff --git a/crypto/cryptd.c b/crypto/cryptd.c
300 index 671d4d6..7bdd61b 100644
301 --- a/crypto/cryptd.c
302 +++ b/crypto/cryptd.c
303 @@ -137,13 +137,18 @@ static void cryptd_queue_worker(struct work_struct *work)
304 struct crypto_async_request *req, *backlog;
305
306 cpu_queue = container_of(work, struct cryptd_cpu_queue, work);
307 - /* Only handle one request at a time to avoid hogging crypto
308 - * workqueue. preempt_disable/enable is used to prevent
309 - * being preempted by cryptd_enqueue_request() */
310 + /*
311 + * Only handle one request at a time to avoid hogging crypto workqueue.
312 + * preempt_disable/enable is used to prevent being preempted by
313 + * cryptd_enqueue_request(). local_bh_disable/enable is used to prevent
314 + * cryptd_enqueue_request() being accessed from software interrupts.
315 + */
316 + local_bh_disable();
317 preempt_disable();
318 backlog = crypto_get_backlog(&cpu_queue->queue);
319 req = crypto_dequeue_request(&cpu_queue->queue);
320 preempt_enable();
321 + local_bh_enable();
322
323 if (!req)
324 return;
325 diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
326 index 1e0a9e1..9fe2659 100644
327 --- a/drivers/acpi/video.c
328 +++ b/drivers/acpi/video.c
329 @@ -1345,12 +1345,15 @@ static int
330 acpi_video_bus_get_devices(struct acpi_video_bus *video,
331 struct acpi_device *device)
332 {
333 - int status;
334 + int status = 0;
335 struct acpi_device *dev;
336
337 - status = acpi_video_device_enumerate(video);
338 - if (status)
339 - return status;
340 + /*
341 + * There are systems where video module known to work fine regardless
342 + * of broken _DOD and ignoring returned value here doesn't cause
343 + * any issues later.
344 + */
345 + acpi_video_device_enumerate(video);
346
347 list_for_each_entry(dev, &device->children, node) {
348
349 diff --git a/drivers/ata/libata-acpi.c b/drivers/ata/libata-acpi.c
350 index fd9ecf7..5b0ba3f 100644
351 --- a/drivers/ata/libata-acpi.c
352 +++ b/drivers/ata/libata-acpi.c
353 @@ -1105,10 +1105,15 @@ static int ata_acpi_bind_device(struct ata_port *ap, struct scsi_device *sdev,
354 struct acpi_device *acpi_dev;
355 struct acpi_device_power_state *states;
356
357 - if (ap->flags & ATA_FLAG_ACPI_SATA)
358 - ata_dev = &ap->link.device[sdev->channel];
359 - else
360 + if (ap->flags & ATA_FLAG_ACPI_SATA) {
361 + if (!sata_pmp_attached(ap))
362 + ata_dev = &ap->link.device[sdev->id];
363 + else
364 + ata_dev = &ap->pmp_link[sdev->channel].device[sdev->id];
365 + }
366 + else {
367 ata_dev = &ap->link.device[sdev->id];
368 + }
369
370 *handle = ata_dev_acpi_handle(ata_dev);
371
372 diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
373 index 20cb52d..d554f64 100644
374 --- a/drivers/gpu/drm/i915/intel_sdvo.c
375 +++ b/drivers/gpu/drm/i915/intel_sdvo.c
376 @@ -2287,6 +2287,18 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, uint16_t flags)
377 return true;
378 }
379
380 +static void intel_sdvo_output_cleanup(struct intel_sdvo *intel_sdvo)
381 +{
382 + struct drm_device *dev = intel_sdvo->base.base.dev;
383 + struct drm_connector *connector, *tmp;
384 +
385 + list_for_each_entry_safe(connector, tmp,
386 + &dev->mode_config.connector_list, head) {
387 + if (intel_attached_encoder(connector) == &intel_sdvo->base)
388 + intel_sdvo_destroy(connector);
389 + }
390 +}
391 +
392 static bool intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo,
393 struct intel_sdvo_connector *intel_sdvo_connector,
394 int type)
395 @@ -2606,7 +2618,8 @@ bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, bool is_sdvob)
396 intel_sdvo->caps.output_flags) != true) {
397 DRM_DEBUG_KMS("SDVO output failed to setup on %s\n",
398 SDVO_NAME(intel_sdvo));
399 - goto err;
400 + /* Output_setup can leave behind connectors! */
401 + goto err_output;
402 }
403
404 /* Only enable the hotplug irq if we need it, to work around noisy
405 @@ -2619,12 +2632,12 @@ bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, bool is_sdvob)
406
407 /* Set the input timing to the screen. Assume always input 0. */
408 if (!intel_sdvo_set_target_input(intel_sdvo))
409 - goto err;
410 + goto err_output;
411
412 if (!intel_sdvo_get_input_pixel_clock_range(intel_sdvo,
413 &intel_sdvo->pixel_clock_min,
414 &intel_sdvo->pixel_clock_max))
415 - goto err;
416 + goto err_output;
417
418 DRM_DEBUG_KMS("%s device VID/DID: %02X:%02X.%02X, "
419 "clock range %dMHz - %dMHz, "
420 @@ -2644,6 +2657,9 @@ bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, bool is_sdvob)
421 (SDVO_OUTPUT_TMDS1 | SDVO_OUTPUT_RGB1) ? 'Y' : 'N');
422 return true;
423
424 +err_output:
425 + intel_sdvo_output_cleanup(intel_sdvo);
426 +
427 err:
428 drm_encoder_cleanup(&intel_encoder->base);
429 i2c_del_adapter(&intel_sdvo->ddc);
430 diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
431 index 6e8803a..2eb418e 100644
432 --- a/drivers/gpu/drm/radeon/atombios_encoders.c
433 +++ b/drivers/gpu/drm/radeon/atombios_encoders.c
434 @@ -1421,7 +1421,7 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode)
435 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_SETUP, 0, 0);
436 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0);
437 /* some early dce3.2 boards have a bug in their transmitter control table */
438 - if ((rdev->family != CHIP_RV710) || (rdev->family != CHIP_RV730))
439 + if ((rdev->family != CHIP_RV710) && (rdev->family != CHIP_RV730))
440 atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
441 }
442 if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) {
443 diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
444 index ebc6fac..578207e 100644
445 --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
446 +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
447 @@ -749,7 +749,10 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags,
448 /* clear the pages coming from the pool if requested */
449 if (flags & TTM_PAGE_FLAG_ZERO_ALLOC) {
450 list_for_each_entry(p, &plist, lru) {
451 - clear_page(page_address(p));
452 + if (PageHighMem(p))
453 + clear_highpage(p);
454 + else
455 + clear_page(page_address(p));
456 }
457 }
458
459 diff --git a/drivers/i2c/muxes/i2c-mux-pinctrl.c b/drivers/i2c/muxes/i2c-mux-pinctrl.c
460 index 46a6697..c524018 100644
461 --- a/drivers/i2c/muxes/i2c-mux-pinctrl.c
462 +++ b/drivers/i2c/muxes/i2c-mux-pinctrl.c
463 @@ -169,7 +169,7 @@ static int __devinit i2c_mux_pinctrl_probe(struct platform_device *pdev)
464 mux->busses = devm_kzalloc(&pdev->dev,
465 sizeof(mux->busses) * mux->pdata->bus_count,
466 GFP_KERNEL);
467 - if (!mux->states) {
468 + if (!mux->busses) {
469 dev_err(&pdev->dev, "Cannot allocate busses\n");
470 ret = -ENOMEM;
471 goto err;
472 diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
473 index cb9e114..554e6ac 100644
474 --- a/drivers/iommu/intel-iommu.c
475 +++ b/drivers/iommu/intel-iommu.c
476 @@ -4108,7 +4108,7 @@ static void swap_pci_ref(struct pci_dev **from, struct pci_dev *to)
477 static int intel_iommu_add_device(struct device *dev)
478 {
479 struct pci_dev *pdev = to_pci_dev(dev);
480 - struct pci_dev *bridge, *dma_pdev;
481 + struct pci_dev *bridge, *dma_pdev = NULL;
482 struct iommu_group *group;
483 int ret;
484
485 @@ -4122,7 +4122,7 @@ static int intel_iommu_add_device(struct device *dev)
486 dma_pdev = pci_get_domain_bus_and_slot(
487 pci_domain_nr(pdev->bus),
488 bridge->subordinate->number, 0);
489 - else
490 + if (!dma_pdev)
491 dma_pdev = pci_dev_get(bridge);
492 } else
493 dma_pdev = pci_dev_get(pdev);
494 diff --git a/drivers/net/ethernet/broadcom/Kconfig b/drivers/net/ethernet/broadcom/Kconfig
495 index f15e72e..4bd416b 100644
496 --- a/drivers/net/ethernet/broadcom/Kconfig
497 +++ b/drivers/net/ethernet/broadcom/Kconfig
498 @@ -101,6 +101,7 @@ config TIGON3
499 tristate "Broadcom Tigon3 support"
500 depends on PCI
501 select PHYLIB
502 + select HWMON
503 ---help---
504 This driver supports Broadcom Tigon3 based gigabit Ethernet cards.
505
506 diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
507 index bf906c5..711eb14 100644
508 --- a/drivers/net/ethernet/broadcom/tg3.c
509 +++ b/drivers/net/ethernet/broadcom/tg3.c
510 @@ -44,10 +44,8 @@
511 #include <linux/prefetch.h>
512 #include <linux/dma-mapping.h>
513 #include <linux/firmware.h>
514 -#if IS_ENABLED(CONFIG_HWMON)
515 #include <linux/hwmon.h>
516 #include <linux/hwmon-sysfs.h>
517 -#endif
518
519 #include <net/checksum.h>
520 #include <net/ip.h>
521 @@ -9517,7 +9515,6 @@ static int tg3_init_hw(struct tg3 *tp, int reset_phy)
522 return tg3_reset_hw(tp, reset_phy);
523 }
524
525 -#if IS_ENABLED(CONFIG_HWMON)
526 static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir)
527 {
528 int i;
529 @@ -9570,22 +9567,17 @@ static const struct attribute_group tg3_group = {
530 .attrs = tg3_attributes,
531 };
532
533 -#endif
534 -
535 static void tg3_hwmon_close(struct tg3 *tp)
536 {
537 -#if IS_ENABLED(CONFIG_HWMON)
538 if (tp->hwmon_dev) {
539 hwmon_device_unregister(tp->hwmon_dev);
540 tp->hwmon_dev = NULL;
541 sysfs_remove_group(&tp->pdev->dev.kobj, &tg3_group);
542 }
543 -#endif
544 }
545
546 static void tg3_hwmon_open(struct tg3 *tp)
547 {
548 -#if IS_ENABLED(CONFIG_HWMON)
549 int i, err;
550 u32 size = 0;
551 struct pci_dev *pdev = tp->pdev;
552 @@ -9617,7 +9609,6 @@ static void tg3_hwmon_open(struct tg3 *tp)
553 dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n");
554 sysfs_remove_group(&pdev->dev.kobj, &tg3_group);
555 }
556 -#endif
557 }
558
559
560 diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
561 index b47d5b3..df7bbba 100644
562 --- a/drivers/net/ethernet/realtek/r8169.c
563 +++ b/drivers/net/ethernet/realtek/r8169.c
564 @@ -77,7 +77,7 @@
565 static const int multicast_filter_limit = 32;
566
567 #define MAX_READ_REQUEST_SHIFT 12
568 -#define TX_DMA_BURST 6 /* Maximum PCI burst, '6' is 1024 */
569 +#define TX_DMA_BURST 7 /* Maximum PCI burst, '7' is unlimited */
570 #define SafeMtu 0x1c20 /* ... actually life sucks beyond ~7k */
571 #define InterFrameGap 0x03 /* 3 means InterFrameGap = the shortest one */
572
573 @@ -3832,6 +3832,8 @@ static void rtl_wol_suspend_quirk(struct rtl8169_private *tp)
574 void __iomem *ioaddr = tp->mmio_addr;
575
576 switch (tp->mac_version) {
577 + case RTL_GIGA_MAC_VER_25:
578 + case RTL_GIGA_MAC_VER_26:
579 case RTL_GIGA_MAC_VER_29:
580 case RTL_GIGA_MAC_VER_30:
581 case RTL_GIGA_MAC_VER_32:
582 @@ -4524,6 +4526,9 @@ static void rtl_set_rx_mode(struct net_device *dev)
583 mc_filter[1] = swab32(data);
584 }
585
586 + if (tp->mac_version == RTL_GIGA_MAC_VER_35)
587 + mc_filter[1] = mc_filter[0] = 0xffffffff;
588 +
589 RTL_W32(MAR0 + 4, mc_filter[1]);
590 RTL_W32(MAR0 + 0, mc_filter[0]);
591
592 diff --git a/drivers/net/wireless/iwlwifi/pcie/rx.c b/drivers/net/wireless/iwlwifi/pcie/rx.c
593 index d1a61ba..c3d2751 100644
594 --- a/drivers/net/wireless/iwlwifi/pcie/rx.c
595 +++ b/drivers/net/wireless/iwlwifi/pcie/rx.c
596 @@ -314,6 +314,14 @@ static void iwlagn_rx_allocate(struct iwl_trans *trans, gfp_t priority)
597 dma_map_page(trans->dev, page, 0,
598 PAGE_SIZE << trans_pcie->rx_page_order,
599 DMA_FROM_DEVICE);
600 + if (dma_mapping_error(trans->dev, rxb->page_dma)) {
601 + rxb->page = NULL;
602 + spin_lock_irqsave(&rxq->lock, flags);
603 + list_add(&rxb->list, &rxq->rx_used);
604 + spin_unlock_irqrestore(&rxq->lock, flags);
605 + __free_pages(page, trans_pcie->rx_page_order);
606 + return;
607 + }
608 /* dma address must be no more than 36 bits */
609 BUG_ON(rxb->page_dma & ~DMA_BIT_MASK(36));
610 /* and also 256 byte aligned! */
611 @@ -463,8 +471,19 @@ static void iwl_rx_handle_rxbuf(struct iwl_trans *trans,
612 dma_map_page(trans->dev, rxb->page, 0,
613 PAGE_SIZE << trans_pcie->rx_page_order,
614 DMA_FROM_DEVICE);
615 - list_add_tail(&rxb->list, &rxq->rx_free);
616 - rxq->free_count++;
617 + if (dma_mapping_error(trans->dev, rxb->page_dma)) {
618 + /*
619 + * free the page(s) as well to not break
620 + * the invariant that the items on the used
621 + * list have no page(s)
622 + */
623 + __free_pages(rxb->page, trans_pcie->rx_page_order);
624 + rxb->page = NULL;
625 + list_add_tail(&rxb->list, &rxq->rx_used);
626 + } else {
627 + list_add_tail(&rxb->list, &rxq->rx_free);
628 + rxq->free_count++;
629 + }
630 } else
631 list_add_tail(&rxb->list, &rxq->rx_used);
632 spin_unlock_irqrestore(&rxq->lock, flags);
633 diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
634 index d6fd6b6..729e038 100644
635 --- a/drivers/pci/pci-driver.c
636 +++ b/drivers/pci/pci-driver.c
637 @@ -421,6 +421,8 @@ static void pci_device_shutdown(struct device *dev)
638 struct pci_dev *pci_dev = to_pci_dev(dev);
639 struct pci_driver *drv = pci_dev->driver;
640
641 + pm_runtime_resume(dev);
642 +
643 if (drv && drv->shutdown)
644 drv->shutdown(pci_dev);
645 pci_msi_shutdown(pci_dev);
646 @@ -431,16 +433,6 @@ static void pci_device_shutdown(struct device *dev)
647 * continue to do DMA
648 */
649 pci_disable_device(pci_dev);
650 -
651 - /*
652 - * Devices may be enabled to wake up by runtime PM, but they need not
653 - * be supposed to wake up the system from its "power off" state (e.g.
654 - * ACPI S5). Therefore disable wakeup for all devices that aren't
655 - * supposed to wake up the system at this point. The state argument
656 - * will be ignored by pci_enable_wake().
657 - */
658 - if (!device_may_wakeup(dev))
659 - pci_enable_wake(pci_dev, PCI_UNKNOWN, false);
660 }
661
662 #ifdef CONFIG_PM
663 diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
664 index 02d107b..f39378d 100644
665 --- a/drivers/pci/pci-sysfs.c
666 +++ b/drivers/pci/pci-sysfs.c
667 @@ -458,40 +458,6 @@ boot_vga_show(struct device *dev, struct device_attribute *attr, char *buf)
668 }
669 struct device_attribute vga_attr = __ATTR_RO(boot_vga);
670
671 -static void
672 -pci_config_pm_runtime_get(struct pci_dev *pdev)
673 -{
674 - struct device *dev = &pdev->dev;
675 - struct device *parent = dev->parent;
676 -
677 - if (parent)
678 - pm_runtime_get_sync(parent);
679 - pm_runtime_get_noresume(dev);
680 - /*
681 - * pdev->current_state is set to PCI_D3cold during suspending,
682 - * so wait until suspending completes
683 - */
684 - pm_runtime_barrier(dev);
685 - /*
686 - * Only need to resume devices in D3cold, because config
687 - * registers are still accessible for devices suspended but
688 - * not in D3cold.
689 - */
690 - if (pdev->current_state == PCI_D3cold)
691 - pm_runtime_resume(dev);
692 -}
693 -
694 -static void
695 -pci_config_pm_runtime_put(struct pci_dev *pdev)
696 -{
697 - struct device *dev = &pdev->dev;
698 - struct device *parent = dev->parent;
699 -
700 - pm_runtime_put(dev);
701 - if (parent)
702 - pm_runtime_put_sync(parent);
703 -}
704 -
705 static ssize_t
706 pci_read_config(struct file *filp, struct kobject *kobj,
707 struct bin_attribute *bin_attr,
708 diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
709 index ab4bf5a..a0f8e8f 100644
710 --- a/drivers/pci/pci.c
711 +++ b/drivers/pci/pci.c
712 @@ -1910,6 +1910,38 @@ bool pci_dev_run_wake(struct pci_dev *dev)
713 }
714 EXPORT_SYMBOL_GPL(pci_dev_run_wake);
715
716 +void pci_config_pm_runtime_get(struct pci_dev *pdev)
717 +{
718 + struct device *dev = &pdev->dev;
719 + struct device *parent = dev->parent;
720 +
721 + if (parent)
722 + pm_runtime_get_sync(parent);
723 + pm_runtime_get_noresume(dev);
724 + /*
725 + * pdev->current_state is set to PCI_D3cold during suspending,
726 + * so wait until suspending completes
727 + */
728 + pm_runtime_barrier(dev);
729 + /*
730 + * Only need to resume devices in D3cold, because config
731 + * registers are still accessible for devices suspended but
732 + * not in D3cold.
733 + */
734 + if (pdev->current_state == PCI_D3cold)
735 + pm_runtime_resume(dev);
736 +}
737 +
738 +void pci_config_pm_runtime_put(struct pci_dev *pdev)
739 +{
740 + struct device *dev = &pdev->dev;
741 + struct device *parent = dev->parent;
742 +
743 + pm_runtime_put(dev);
744 + if (parent)
745 + pm_runtime_put_sync(parent);
746 +}
747 +
748 /**
749 * pci_pm_init - Initialize PM functions of given PCI device
750 * @dev: PCI device to handle.
751 diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
752 index bacbcba..fd92aab 100644
753 --- a/drivers/pci/pci.h
754 +++ b/drivers/pci/pci.h
755 @@ -72,6 +72,8 @@ extern void pci_disable_enabled_device(struct pci_dev *dev);
756 extern int pci_finish_runtime_suspend(struct pci_dev *dev);
757 extern int __pci_pme_wakeup(struct pci_dev *dev, void *ign);
758 extern void pci_wakeup_bus(struct pci_bus *bus);
759 +extern void pci_config_pm_runtime_get(struct pci_dev *dev);
760 +extern void pci_config_pm_runtime_put(struct pci_dev *dev);
761 extern void pci_pm_init(struct pci_dev *dev);
762 extern void platform_pci_wakeup_init(struct pci_dev *dev);
763 extern void pci_allocate_cap_save_buffers(struct pci_dev *dev);
764 diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c
765 index 27911b5..af028c7 100644
766 --- a/drivers/pci/proc.c
767 +++ b/drivers/pci/proc.c
768 @@ -76,6 +76,8 @@ proc_bus_pci_read(struct file *file, char __user *buf, size_t nbytes, loff_t *pp
769 if (!access_ok(VERIFY_WRITE, buf, cnt))
770 return -EINVAL;
771
772 + pci_config_pm_runtime_get(dev);
773 +
774 if ((pos & 1) && cnt) {
775 unsigned char val;
776 pci_user_read_config_byte(dev, pos, &val);
777 @@ -121,6 +123,8 @@ proc_bus_pci_read(struct file *file, char __user *buf, size_t nbytes, loff_t *pp
778 cnt--;
779 }
780
781 + pci_config_pm_runtime_put(dev);
782 +
783 *ppos = pos;
784 return nbytes;
785 }
786 @@ -146,6 +150,8 @@ proc_bus_pci_write(struct file *file, const char __user *buf, size_t nbytes, lof
787 if (!access_ok(VERIFY_READ, buf, cnt))
788 return -EINVAL;
789
790 + pci_config_pm_runtime_get(dev);
791 +
792 if ((pos & 1) && cnt) {
793 unsigned char val;
794 __get_user(val, buf);
795 @@ -191,6 +197,8 @@ proc_bus_pci_write(struct file *file, const char __user *buf, size_t nbytes, lof
796 cnt--;
797 }
798
799 + pci_config_pm_runtime_put(dev);
800 +
801 *ppos = pos;
802 i_size_write(ino, dp->size);
803 return nbytes;
804 diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
805 index 4838531..e6f2990a 100644
806 --- a/drivers/regulator/core.c
807 +++ b/drivers/regulator/core.c
808 @@ -1942,7 +1942,7 @@ int regulator_is_supported_voltage(struct regulator *regulator,
809 if (!(rdev->constraints->valid_ops_mask & REGULATOR_CHANGE_VOLTAGE)) {
810 ret = regulator_get_voltage(regulator);
811 if (ret >= 0)
812 - return (min_uV >= ret && ret <= max_uV);
813 + return (min_uV <= ret && ret <= max_uV);
814 else
815 return ret;
816 }
817 diff --git a/drivers/scsi/isci/host.c b/drivers/scsi/isci/host.c
818 index 45385f5..446fdd8 100644
819 --- a/drivers/scsi/isci/host.c
820 +++ b/drivers/scsi/isci/host.c
821 @@ -1079,7 +1079,6 @@ static void sci_controller_completion_handler(struct isci_host *ihost)
822
823 void ireq_done(struct isci_host *ihost, struct isci_request *ireq, struct sas_task *task)
824 {
825 - task->lldd_task = NULL;
826 if (!test_bit(IREQ_ABORT_PATH_ACTIVE, &ireq->flags) &&
827 !(task->task_state_flags & SAS_TASK_STATE_ABORTED)) {
828 if (test_bit(IREQ_COMPLETE_IN_TARGET, &ireq->flags)) {
829 @@ -1087,16 +1086,19 @@ void ireq_done(struct isci_host *ihost, struct isci_request *ireq, struct sas_ta
830 dev_dbg(&ihost->pdev->dev,
831 "%s: Normal - ireq/task = %p/%p\n",
832 __func__, ireq, task);
833 -
834 + task->lldd_task = NULL;
835 task->task_done(task);
836 } else {
837 dev_dbg(&ihost->pdev->dev,
838 "%s: Error - ireq/task = %p/%p\n",
839 __func__, ireq, task);
840 -
841 + if (sas_protocol_ata(task->task_proto))
842 + task->lldd_task = NULL;
843 sas_task_abort(task);
844 }
845 - }
846 + } else
847 + task->lldd_task = NULL;
848 +
849 if (test_and_clear_bit(IREQ_ABORT_PATH_ACTIVE, &ireq->flags))
850 wake_up_all(&ihost->eventq);
851
852 diff --git a/drivers/staging/android/android_alarm.h b/drivers/staging/android/android_alarm.h
853 index f2ffd96..d0cafd6 100644
854 --- a/drivers/staging/android/android_alarm.h
855 +++ b/drivers/staging/android/android_alarm.h
856 @@ -51,12 +51,10 @@ enum android_alarm_return_flags {
857 #define ANDROID_ALARM_WAIT _IO('a', 1)
858
859 #define ALARM_IOW(c, type, size) _IOW('a', (c) | ((type) << 4), size)
860 -#define ALARM_IOR(c, type, size) _IOR('a', (c) | ((type) << 4), size)
861 -
862 /* Set alarm */
863 #define ANDROID_ALARM_SET(type) ALARM_IOW(2, type, struct timespec)
864 #define ANDROID_ALARM_SET_AND_WAIT(type) ALARM_IOW(3, type, struct timespec)
865 -#define ANDROID_ALARM_GET_TIME(type) ALARM_IOR(4, type, struct timespec)
866 +#define ANDROID_ALARM_GET_TIME(type) ALARM_IOW(4, type, struct timespec)
867 #define ANDROID_ALARM_SET_RTC _IOW('a', 5, struct timespec)
868 #define ANDROID_ALARM_BASE_CMD(cmd) (cmd & ~(_IOC(0, 0, 0xf0, 0)))
869 #define ANDROID_ALARM_IOCTL_TO_TYPE(cmd) (_IOC_NR(cmd) >> 4)
870 diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
871 index 22992cd..d3cda0c 100644
872 --- a/drivers/tty/serial/omap-serial.c
873 +++ b/drivers/tty/serial/omap-serial.c
874 @@ -667,19 +667,19 @@ serial_omap_configure_xonxoff
875
876 /*
877 * IXON Flag:
878 - * Flow control for OMAP.TX
879 - * OMAP.RX should listen for XON/XOFF
880 + * Enable XON/XOFF flow control on output.
881 + * Transmit XON1, XOFF1
882 */
883 if (termios->c_iflag & IXON)
884 - up->efr |= OMAP_UART_SW_RX;
885 + up->efr |= OMAP_UART_SW_TX;
886
887 /*
888 * IXOFF Flag:
889 - * Flow control for OMAP.RX
890 - * OMAP.TX should send XON/XOFF
891 + * Enable XON/XOFF flow control on input.
892 + * Receiver compares XON1, XOFF1.
893 */
894 if (termios->c_iflag & IXOFF)
895 - up->efr |= OMAP_UART_SW_TX;
896 + up->efr |= OMAP_UART_SW_RX;
897
898 serial_out(up, UART_EFR, up->efr | UART_EFR_ECB);
899 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
900 diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
901 index f6788d7..059d44b 100644
902 --- a/drivers/usb/serial/keyspan.c
903 +++ b/drivers/usb/serial/keyspan.c
904 @@ -2448,7 +2448,7 @@ static void keyspan_release(struct usb_serial *serial)
905 static int keyspan_port_probe(struct usb_serial_port *port)
906 {
907 struct usb_serial *serial = port->serial;
908 - struct keyspan_port_private *s_priv;
909 + struct keyspan_serial_private *s_priv;
910 struct keyspan_port_private *p_priv;
911 const struct keyspan_device_details *d_details;
912 struct callbacks *cback;
913 @@ -2463,7 +2463,6 @@ static int keyspan_port_probe(struct usb_serial_port *port)
914 if (!p_priv)
915 return -ENOMEM;
916
917 - s_priv = usb_get_serial_data(port->serial);
918 p_priv->device_details = d_details;
919
920 /* Setup values for the various callback routines */
921 diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
922 index 76a48e4..f852329 100644
923 --- a/drivers/usb/serial/option.c
924 +++ b/drivers/usb/serial/option.c
925 @@ -158,6 +158,7 @@ static void option_instat_callback(struct urb *urb);
926 #define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED 0x8001
927 #define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED 0x9000
928 #define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED 0x9001
929 +#define NOVATELWIRELESS_PRODUCT_E362 0x9010
930 #define NOVATELWIRELESS_PRODUCT_G1 0xA001
931 #define NOVATELWIRELESS_PRODUCT_G1_M 0xA002
932 #define NOVATELWIRELESS_PRODUCT_G2 0xA010
933 @@ -193,6 +194,9 @@ static void option_instat_callback(struct urb *urb);
934 #define DELL_PRODUCT_5730_MINICARD_TELUS 0x8181
935 #define DELL_PRODUCT_5730_MINICARD_VZW 0x8182
936
937 +#define DELL_PRODUCT_5800_MINICARD_VZW 0x8195 /* Novatel E362 */
938 +#define DELL_PRODUCT_5800_V2_MINICARD_VZW 0x8196 /* Novatel E362 */
939 +
940 #define KYOCERA_VENDOR_ID 0x0c88
941 #define KYOCERA_PRODUCT_KPC650 0x17da
942 #define KYOCERA_PRODUCT_KPC680 0x180a
943 @@ -283,6 +287,7 @@ static void option_instat_callback(struct urb *urb);
944 /* ALCATEL PRODUCTS */
945 #define ALCATEL_VENDOR_ID 0x1bbb
946 #define ALCATEL_PRODUCT_X060S_X200 0x0000
947 +#define ALCATEL_PRODUCT_X220_X500D 0x0017
948
949 #define PIRELLI_VENDOR_ID 0x1266
950 #define PIRELLI_PRODUCT_C100_1 0x1002
951 @@ -706,6 +711,7 @@ static const struct usb_device_id option_ids[] = {
952 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G2) },
953 /* Novatel Ovation MC551 a.k.a. Verizon USB551L */
954 { USB_DEVICE_AND_INTERFACE_INFO(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC551, 0xff, 0xff, 0xff) },
955 + { USB_DEVICE_AND_INTERFACE_INFO(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_E362, 0xff, 0xff, 0xff) },
956
957 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) },
958 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) },
959 @@ -728,6 +734,8 @@ static const struct usb_device_id option_ids[] = {
960 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_SPRINT) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
961 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_TELUS) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
962 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_VZW) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
963 + { USB_DEVICE_AND_INTERFACE_INFO(DELL_VENDOR_ID, DELL_PRODUCT_5800_MINICARD_VZW, 0xff, 0xff, 0xff) },
964 + { USB_DEVICE_AND_INTERFACE_INFO(DELL_VENDOR_ID, DELL_PRODUCT_5800_V2_MINICARD_VZW, 0xff, 0xff, 0xff) },
965 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, /* ADU-E100, ADU-310 */
966 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) },
967 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_620UW) },
968 @@ -1157,6 +1165,7 @@ static const struct usb_device_id option_ids[] = {
969 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200),
970 .driver_info = (kernel_ulong_t)&alcatel_x200_blacklist
971 },
972 + { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D) },
973 { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) },
974 { USB_DEVICE(TLAYTECH_VENDOR_ID, TLAYTECH_PRODUCT_TEU800) },
975 { USB_DEVICE(LONGCHEER_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W14),
976 diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c
977 index 2f2d074..188b5b3 100644
978 --- a/drivers/usb/serial/usb_wwan.c
979 +++ b/drivers/usb/serial/usb_wwan.c
980 @@ -455,9 +455,6 @@ static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,
981 struct usb_serial *serial = port->serial;
982 struct urb *urb;
983
984 - if (endpoint == -1)
985 - return NULL; /* endpoint not needed */
986 -
987 urb = usb_alloc_urb(0, GFP_KERNEL); /* No ISO */
988 if (urb == NULL) {
989 dbg("%s: alloc for endpoint %d failed.", __func__, endpoint);
990 @@ -487,6 +484,9 @@ int usb_wwan_port_probe(struct usb_serial_port *port)
991 init_usb_anchor(&portdata->delayed);
992
993 for (i = 0; i < N_IN_URB; i++) {
994 + if (!port->bulk_in_size)
995 + break;
996 +
997 buffer = (u8 *)__get_free_page(GFP_KERNEL);
998 if (!buffer)
999 goto bail_out_error;
1000 @@ -499,8 +499,8 @@ int usb_wwan_port_probe(struct usb_serial_port *port)
1001 portdata->in_urbs[i] = urb;
1002 }
1003 for (i = 0; i < N_OUT_URB; i++) {
1004 - if (port->bulk_out_endpointAddress == -1)
1005 - continue;
1006 + if (!port->bulk_out_size)
1007 + break;
1008
1009 buffer = kmalloc(OUT_BUFLEN, GFP_KERNEL);
1010 if (!buffer)
1011 diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
1012 index c3b3f7f..abd47c7 100644
1013 --- a/drivers/virtio/virtio.c
1014 +++ b/drivers/virtio/virtio.c
1015 @@ -225,8 +225,10 @@ EXPORT_SYMBOL_GPL(register_virtio_device);
1016
1017 void unregister_virtio_device(struct virtio_device *dev)
1018 {
1019 + int index = dev->index; /* save for after device release */
1020 +
1021 device_unregister(&dev->dev);
1022 - ida_simple_remove(&virtio_index_ida, dev->index);
1023 + ida_simple_remove(&virtio_index_ida, index);
1024 }
1025 EXPORT_SYMBOL_GPL(unregister_virtio_device);
1026
1027 diff --git a/drivers/xen/events.c b/drivers/xen/events.c
1028 index 7595581..99c5345 100644
1029 --- a/drivers/xen/events.c
1030 +++ b/drivers/xen/events.c
1031 @@ -1374,8 +1374,8 @@ void xen_evtchn_do_upcall(struct pt_regs *regs)
1032 {
1033 struct pt_regs *old_regs = set_irq_regs(regs);
1034
1035 - exit_idle();
1036 irq_enter();
1037 + exit_idle();
1038
1039 __xen_evtchn_do_upcall();
1040
1041 diff --git a/fs/cifs/cifsacl.c b/fs/cifs/cifsacl.c
1042 index 05f4dc2..8d453b7 100644
1043 --- a/fs/cifs/cifsacl.c
1044 +++ b/fs/cifs/cifsacl.c
1045 @@ -225,6 +225,13 @@ sid_to_str(struct cifs_sid *sidptr, char *sidstr)
1046 }
1047
1048 static void
1049 +cifs_copy_sid(struct cifs_sid *dst, const struct cifs_sid *src)
1050 +{
1051 + memcpy(dst, src, sizeof(*dst));
1052 + dst->num_subauth = min_t(u8, src->num_subauth, NUM_SUBAUTHS);
1053 +}
1054 +
1055 +static void
1056 id_rb_insert(struct rb_root *root, struct cifs_sid *sidptr,
1057 struct cifs_sid_id **psidid, char *typestr)
1058 {
1059 @@ -248,7 +255,7 @@ id_rb_insert(struct rb_root *root, struct cifs_sid *sidptr,
1060 }
1061 }
1062
1063 - memcpy(&(*psidid)->sid, sidptr, sizeof(struct cifs_sid));
1064 + cifs_copy_sid(&(*psidid)->sid, sidptr);
1065 (*psidid)->time = jiffies - (SID_MAP_RETRY + 1);
1066 (*psidid)->refcount = 0;
1067
1068 @@ -354,7 +361,7 @@ id_to_sid(unsigned long cid, uint sidtype, struct cifs_sid *ssid)
1069 * any fields of the node after a reference is put .
1070 */
1071 if (test_bit(SID_ID_MAPPED, &psidid->state)) {
1072 - memcpy(ssid, &psidid->sid, sizeof(struct cifs_sid));
1073 + cifs_copy_sid(ssid, &psidid->sid);
1074 psidid->time = jiffies; /* update ts for accessing */
1075 goto id_sid_out;
1076 }
1077 @@ -370,14 +377,14 @@ id_to_sid(unsigned long cid, uint sidtype, struct cifs_sid *ssid)
1078 if (IS_ERR(sidkey)) {
1079 rc = -EINVAL;
1080 cFYI(1, "%s: Can't map and id to a SID", __func__);
1081 + } else if (sidkey->datalen < sizeof(struct cifs_sid)) {
1082 + rc = -EIO;
1083 + cFYI(1, "%s: Downcall contained malformed key "
1084 + "(datalen=%hu)", __func__, sidkey->datalen);
1085 } else {
1086 lsid = (struct cifs_sid *)sidkey->payload.data;
1087 - memcpy(&psidid->sid, lsid,
1088 - sidkey->datalen < sizeof(struct cifs_sid) ?
1089 - sidkey->datalen : sizeof(struct cifs_sid));
1090 - memcpy(ssid, &psidid->sid,
1091 - sidkey->datalen < sizeof(struct cifs_sid) ?
1092 - sidkey->datalen : sizeof(struct cifs_sid));
1093 + cifs_copy_sid(&psidid->sid, lsid);
1094 + cifs_copy_sid(ssid, &psidid->sid);
1095 set_bit(SID_ID_MAPPED, &psidid->state);
1096 key_put(sidkey);
1097 kfree(psidid->sidstr);
1098 @@ -396,7 +403,7 @@ id_to_sid(unsigned long cid, uint sidtype, struct cifs_sid *ssid)
1099 return rc;
1100 }
1101 if (test_bit(SID_ID_MAPPED, &psidid->state))
1102 - memcpy(ssid, &psidid->sid, sizeof(struct cifs_sid));
1103 + cifs_copy_sid(ssid, &psidid->sid);
1104 else
1105 rc = -EINVAL;
1106 }
1107 @@ -675,8 +682,6 @@ int compare_sids(const struct cifs_sid *ctsid, const struct cifs_sid *cwsid)
1108 static void copy_sec_desc(const struct cifs_ntsd *pntsd,
1109 struct cifs_ntsd *pnntsd, __u32 sidsoffset)
1110 {
1111 - int i;
1112 -
1113 struct cifs_sid *owner_sid_ptr, *group_sid_ptr;
1114 struct cifs_sid *nowner_sid_ptr, *ngroup_sid_ptr;
1115
1116 @@ -692,26 +697,14 @@ static void copy_sec_desc(const struct cifs_ntsd *pntsd,
1117 owner_sid_ptr = (struct cifs_sid *)((char *)pntsd +
1118 le32_to_cpu(pntsd->osidoffset));
1119 nowner_sid_ptr = (struct cifs_sid *)((char *)pnntsd + sidsoffset);
1120 -
1121 - nowner_sid_ptr->revision = owner_sid_ptr->revision;
1122 - nowner_sid_ptr->num_subauth = owner_sid_ptr->num_subauth;
1123 - for (i = 0; i < 6; i++)
1124 - nowner_sid_ptr->authority[i] = owner_sid_ptr->authority[i];
1125 - for (i = 0; i < 5; i++)
1126 - nowner_sid_ptr->sub_auth[i] = owner_sid_ptr->sub_auth[i];
1127 + cifs_copy_sid(nowner_sid_ptr, owner_sid_ptr);
1128
1129 /* copy group sid */
1130 group_sid_ptr = (struct cifs_sid *)((char *)pntsd +
1131 le32_to_cpu(pntsd->gsidoffset));
1132 ngroup_sid_ptr = (struct cifs_sid *)((char *)pnntsd + sidsoffset +
1133 sizeof(struct cifs_sid));
1134 -
1135 - ngroup_sid_ptr->revision = group_sid_ptr->revision;
1136 - ngroup_sid_ptr->num_subauth = group_sid_ptr->num_subauth;
1137 - for (i = 0; i < 6; i++)
1138 - ngroup_sid_ptr->authority[i] = group_sid_ptr->authority[i];
1139 - for (i = 0; i < 5; i++)
1140 - ngroup_sid_ptr->sub_auth[i] = group_sid_ptr->sub_auth[i];
1141 + cifs_copy_sid(ngroup_sid_ptr, group_sid_ptr);
1142
1143 return;
1144 }
1145 @@ -1120,8 +1113,7 @@ static int build_sec_desc(struct cifs_ntsd *pntsd, struct cifs_ntsd *pnntsd,
1146 kfree(nowner_sid_ptr);
1147 return rc;
1148 }
1149 - memcpy(owner_sid_ptr, nowner_sid_ptr,
1150 - sizeof(struct cifs_sid));
1151 + cifs_copy_sid(owner_sid_ptr, nowner_sid_ptr);
1152 kfree(nowner_sid_ptr);
1153 *aclflag = CIFS_ACL_OWNER;
1154 }
1155 @@ -1139,8 +1131,7 @@ static int build_sec_desc(struct cifs_ntsd *pntsd, struct cifs_ntsd *pnntsd,
1156 kfree(ngroup_sid_ptr);
1157 return rc;
1158 }
1159 - memcpy(group_sid_ptr, ngroup_sid_ptr,
1160 - sizeof(struct cifs_sid));
1161 + cifs_copy_sid(group_sid_ptr, ngroup_sid_ptr);
1162 kfree(ngroup_sid_ptr);
1163 *aclflag = CIFS_ACL_GROUP;
1164 }
1165 diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
1166 index 781025b..2b33b2c 100644
1167 --- a/fs/cifs/dir.c
1168 +++ b/fs/cifs/dir.c
1169 @@ -392,7 +392,16 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry,
1170 * in network traffic in the other paths.
1171 */
1172 if (!(oflags & O_CREAT)) {
1173 - struct dentry *res = cifs_lookup(inode, direntry, 0);
1174 + struct dentry *res;
1175 +
1176 + /*
1177 + * Check for hashed negative dentry. We have already revalidated
1178 + * the dentry and it is fine. No need to perform another lookup.
1179 + */
1180 + if (!d_unhashed(direntry))
1181 + return -ENOENT;
1182 +
1183 + res = cifs_lookup(inode, direntry, 0);
1184 if (IS_ERR(res))
1185 return PTR_ERR(res);
1186
1187 diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
1188 index 5c69f2b..b686b43 100644
1189 --- a/fs/ext4/ext4.h
1190 +++ b/fs/ext4/ext4.h
1191 @@ -2046,8 +2046,7 @@ extern int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count);
1192 extern int ext4_calculate_overhead(struct super_block *sb);
1193 extern int ext4_superblock_csum_verify(struct super_block *sb,
1194 struct ext4_super_block *es);
1195 -extern void ext4_superblock_csum_set(struct super_block *sb,
1196 - struct ext4_super_block *es);
1197 +extern void ext4_superblock_csum_set(struct super_block *sb);
1198 extern void *ext4_kvmalloc(size_t size, gfp_t flags);
1199 extern void *ext4_kvzalloc(size_t size, gfp_t flags);
1200 extern void ext4_kvfree(void *ptr);
1201 diff --git a/fs/ext4/ext4_jbd2.c b/fs/ext4/ext4_jbd2.c
1202 index bfa65b4..b4323ba 100644
1203 --- a/fs/ext4/ext4_jbd2.c
1204 +++ b/fs/ext4/ext4_jbd2.c
1205 @@ -143,17 +143,13 @@ int __ext4_handle_dirty_super(const char *where, unsigned int line,
1206 struct buffer_head *bh = EXT4_SB(sb)->s_sbh;
1207 int err = 0;
1208
1209 + ext4_superblock_csum_set(sb);
1210 if (ext4_handle_valid(handle)) {
1211 - ext4_superblock_csum_set(sb,
1212 - (struct ext4_super_block *)bh->b_data);
1213 err = jbd2_journal_dirty_metadata(handle, bh);
1214 if (err)
1215 ext4_journal_abort_handle(where, line, __func__,
1216 bh, handle, err);
1217 - } else {
1218 - ext4_superblock_csum_set(sb,
1219 - (struct ext4_super_block *)bh->b_data);
1220 + } else
1221 mark_buffer_dirty(bh);
1222 - }
1223 return err;
1224 }
1225 diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
1226 index 71241bc..101b41c 100644
1227 --- a/fs/ext4/resize.c
1228 +++ b/fs/ext4/resize.c
1229 @@ -979,7 +979,7 @@ static void update_backups(struct super_block *sb,
1230 goto exit_err;
1231 }
1232
1233 - ext4_superblock_csum_set(sb, (struct ext4_super_block *)data);
1234 + ext4_superblock_csum_set(sb);
1235
1236 while ((group = ext4_list_backups(sb, &three, &five, &seven)) < last) {
1237 struct buffer_head *bh;
1238 diff --git a/fs/ext4/super.c b/fs/ext4/super.c
1239 index e44b233..2b5fb60 100644
1240 --- a/fs/ext4/super.c
1241 +++ b/fs/ext4/super.c
1242 @@ -143,9 +143,10 @@ int ext4_superblock_csum_verify(struct super_block *sb,
1243 return es->s_checksum == ext4_superblock_csum(sb, es);
1244 }
1245
1246 -void ext4_superblock_csum_set(struct super_block *sb,
1247 - struct ext4_super_block *es)
1248 +void ext4_superblock_csum_set(struct super_block *sb)
1249 {
1250 + struct ext4_super_block *es = EXT4_SB(sb)->s_es;
1251 +
1252 if (!EXT4_HAS_RO_COMPAT_FEATURE(sb,
1253 EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
1254 return;
1255 @@ -4343,7 +4344,7 @@ static int ext4_commit_super(struct super_block *sb, int sync)
1256 cpu_to_le32(percpu_counter_sum_positive(
1257 &EXT4_SB(sb)->s_freeinodes_counter));
1258 BUFFER_TRACE(sbh, "marking dirty");
1259 - ext4_superblock_csum_set(sb, es);
1260 + ext4_superblock_csum_set(sb);
1261 mark_buffer_dirty(sbh);
1262 if (sync) {
1263 error = sync_dirty_buffer(sbh);
1264 diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c
1265 index 382000f..07cc71f 100644
1266 --- a/fs/gfs2/file.c
1267 +++ b/fs/gfs2/file.c
1268 @@ -515,15 +515,13 @@ static int gfs2_mmap(struct file *file, struct vm_area_struct *vma)
1269 struct gfs2_holder i_gh;
1270 int error;
1271
1272 - gfs2_holder_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh);
1273 - error = gfs2_glock_nq(&i_gh);
1274 - if (error == 0) {
1275 - file_accessed(file);
1276 - gfs2_glock_dq(&i_gh);
1277 - }
1278 - gfs2_holder_uninit(&i_gh);
1279 + error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY,
1280 + &i_gh);
1281 if (error)
1282 return error;
1283 + /* grab lock to update inode */
1284 + gfs2_glock_dq_uninit(&i_gh);
1285 + file_accessed(file);
1286 }
1287 vma->vm_ops = &gfs2_vm_ops;
1288 vma->vm_flags |= VM_CAN_NONLINEAR;
1289 diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
1290 index fc3168f..12ff463 100644
1291 --- a/fs/gfs2/super.c
1292 +++ b/fs/gfs2/super.c
1293 @@ -810,7 +810,8 @@ static void gfs2_dirty_inode(struct inode *inode, int flags)
1294 return;
1295 }
1296 need_unlock = 1;
1297 - }
1298 + } else if (WARN_ON_ONCE(ip->i_gl->gl_state != LM_ST_EXCLUSIVE))
1299 + return;
1300
1301 if (current->journal_info == NULL) {
1302 ret = gfs2_trans_begin(sdp, RES_DINODE, 0);
1303 diff --git a/fs/notify/fanotify/fanotify.c b/fs/notify/fanotify/fanotify.c
1304 index f35794b..a506360 100644
1305 --- a/fs/notify/fanotify/fanotify.c
1306 +++ b/fs/notify/fanotify/fanotify.c
1307 @@ -21,6 +21,7 @@ static bool should_merge(struct fsnotify_event *old, struct fsnotify_event *new)
1308 if ((old->path.mnt == new->path.mnt) &&
1309 (old->path.dentry == new->path.dentry))
1310 return true;
1311 + break;
1312 case (FSNOTIFY_EVENT_NONE):
1313 return true;
1314 default:
1315 diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c
1316 index 29996e8..2d1e0f3 100644
1317 --- a/fs/pstore/platform.c
1318 +++ b/fs/pstore/platform.c
1319 @@ -161,12 +161,13 @@ static void pstore_console_write(struct console *con, const char *s, unsigned c)
1320
1321 while (s < e) {
1322 unsigned long flags;
1323 + u64 id;
1324
1325 if (c > psinfo->bufsize)
1326 c = psinfo->bufsize;
1327 spin_lock_irqsave(&psinfo->buf_lock, flags);
1328 memcpy(psinfo->buf, s, c);
1329 - psinfo->write(PSTORE_TYPE_CONSOLE, 0, NULL, 0, c, psinfo);
1330 + psinfo->write(PSTORE_TYPE_CONSOLE, 0, &id, 0, c, psinfo);
1331 spin_unlock_irqrestore(&psinfo->buf_lock, flags);
1332 s += c;
1333 c = e - s;
1334 diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c
1335 index 63ce6be..567c10c 100644
1336 --- a/fs/reiserfs/inode.c
1337 +++ b/fs/reiserfs/inode.c
1338 @@ -1782,8 +1782,9 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th,
1339
1340 BUG_ON(!th->t_trans_id);
1341
1342 - dquot_initialize(inode);
1343 + reiserfs_write_unlock(inode->i_sb);
1344 err = dquot_alloc_inode(inode);
1345 + reiserfs_write_lock(inode->i_sb);
1346 if (err)
1347 goto out_end_trans;
1348 if (!dir->i_nlink) {
1349 @@ -1979,8 +1980,10 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th,
1350
1351 out_end_trans:
1352 journal_end(th, th->t_super, th->t_blocks_allocated);
1353 + reiserfs_write_unlock(inode->i_sb);
1354 /* Drop can be outside and it needs more credits so it's better to have it outside */
1355 dquot_drop(inode);
1356 + reiserfs_write_lock(inode->i_sb);
1357 inode->i_flags |= S_NOQUOTA;
1358 make_bad_inode(inode);
1359
1360 @@ -3103,10 +3106,9 @@ int reiserfs_setattr(struct dentry *dentry, struct iattr *attr)
1361 /* must be turned off for recursive notify_change calls */
1362 ia_valid = attr->ia_valid &= ~(ATTR_KILL_SUID|ATTR_KILL_SGID);
1363
1364 - depth = reiserfs_write_lock_once(inode->i_sb);
1365 if (is_quota_modification(inode, attr))
1366 dquot_initialize(inode);
1367 -
1368 + depth = reiserfs_write_lock_once(inode->i_sb);
1369 if (attr->ia_valid & ATTR_SIZE) {
1370 /* version 2 items will be caught by the s_maxbytes check
1371 ** done for us in vmtruncate
1372 @@ -3170,7 +3172,9 @@ int reiserfs_setattr(struct dentry *dentry, struct iattr *attr)
1373 error = journal_begin(&th, inode->i_sb, jbegin_count);
1374 if (error)
1375 goto out;
1376 + reiserfs_write_unlock_once(inode->i_sb, depth);
1377 error = dquot_transfer(inode, attr);
1378 + depth = reiserfs_write_lock_once(inode->i_sb);
1379 if (error) {
1380 journal_end(&th, inode->i_sb, jbegin_count);
1381 goto out;
1382 diff --git a/fs/reiserfs/stree.c b/fs/reiserfs/stree.c
1383 index f8afa4b..2f40a4c 100644
1384 --- a/fs/reiserfs/stree.c
1385 +++ b/fs/reiserfs/stree.c
1386 @@ -1968,7 +1968,9 @@ int reiserfs_paste_into_item(struct reiserfs_transaction_handle *th, struct tree
1387 key2type(&(key->on_disk_key)));
1388 #endif
1389
1390 + reiserfs_write_unlock(inode->i_sb);
1391 retval = dquot_alloc_space_nodirty(inode, pasted_size);
1392 + reiserfs_write_lock(inode->i_sb);
1393 if (retval) {
1394 pathrelse(search_path);
1395 return retval;
1396 @@ -2061,9 +2063,11 @@ int reiserfs_insert_item(struct reiserfs_transaction_handle *th,
1397 "reiserquota insert_item(): allocating %u id=%u type=%c",
1398 quota_bytes, inode->i_uid, head2type(ih));
1399 #endif
1400 + reiserfs_write_unlock(inode->i_sb);
1401 /* We can't dirty inode here. It would be immediately written but
1402 * appropriate stat item isn't inserted yet... */
1403 retval = dquot_alloc_space_nodirty(inode, quota_bytes);
1404 + reiserfs_write_lock(inode->i_sb);
1405 if (retval) {
1406 pathrelse(path);
1407 return retval;
1408 diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c
1409 index 7a37dab..4300030 100644
1410 --- a/fs/reiserfs/super.c
1411 +++ b/fs/reiserfs/super.c
1412 @@ -298,7 +298,9 @@ static int finish_unfinished(struct super_block *s)
1413 retval = remove_save_link_only(s, &save_link_key, 0);
1414 continue;
1415 }
1416 + reiserfs_write_unlock(s);
1417 dquot_initialize(inode);
1418 + reiserfs_write_lock(s);
1419
1420 if (truncate && S_ISDIR(inode->i_mode)) {
1421 /* We got a truncate request for a dir which is impossible.
1422 @@ -1330,7 +1332,7 @@ static int reiserfs_remount(struct super_block *s, int *mount_flags, char *arg)
1423 kfree(qf_names[i]);
1424 #endif
1425 err = -EINVAL;
1426 - goto out_err;
1427 + goto out_unlock;
1428 }
1429 #ifdef CONFIG_QUOTA
1430 handle_quota_files(s, qf_names, &qfmt);
1431 @@ -1374,7 +1376,7 @@ static int reiserfs_remount(struct super_block *s, int *mount_flags, char *arg)
1432 if (blocks) {
1433 err = reiserfs_resize(s, blocks);
1434 if (err != 0)
1435 - goto out_err;
1436 + goto out_unlock;
1437 }
1438
1439 if (*mount_flags & MS_RDONLY) {
1440 @@ -1384,9 +1386,15 @@ static int reiserfs_remount(struct super_block *s, int *mount_flags, char *arg)
1441 /* it is read-only already */
1442 goto out_ok;
1443
1444 + /*
1445 + * Drop write lock. Quota will retake it when needed and lock
1446 + * ordering requires calling dquot_suspend() without it.
1447 + */
1448 + reiserfs_write_unlock(s);
1449 err = dquot_suspend(s, -1);
1450 if (err < 0)
1451 goto out_err;
1452 + reiserfs_write_lock(s);
1453
1454 /* try to remount file system with read-only permissions */
1455 if (sb_umount_state(rs) == REISERFS_VALID_FS
1456 @@ -1396,7 +1404,7 @@ static int reiserfs_remount(struct super_block *s, int *mount_flags, char *arg)
1457
1458 err = journal_begin(&th, s, 10);
1459 if (err)
1460 - goto out_err;
1461 + goto out_unlock;
1462
1463 /* Mounting a rw partition read-only. */
1464 reiserfs_prepare_for_journal(s, SB_BUFFER_WITH_SB(s), 1);
1465 @@ -1411,7 +1419,7 @@ static int reiserfs_remount(struct super_block *s, int *mount_flags, char *arg)
1466
1467 if (reiserfs_is_journal_aborted(journal)) {
1468 err = journal->j_errno;
1469 - goto out_err;
1470 + goto out_unlock;
1471 }
1472
1473 handle_data_mode(s, mount_options);
1474 @@ -1420,7 +1428,7 @@ static int reiserfs_remount(struct super_block *s, int *mount_flags, char *arg)
1475 s->s_flags &= ~MS_RDONLY; /* now it is safe to call journal_begin */
1476 err = journal_begin(&th, s, 10);
1477 if (err)
1478 - goto out_err;
1479 + goto out_unlock;
1480
1481 /* Mount a partition which is read-only, read-write */
1482 reiserfs_prepare_for_journal(s, SB_BUFFER_WITH_SB(s), 1);
1483 @@ -1437,10 +1445,16 @@ static int reiserfs_remount(struct super_block *s, int *mount_flags, char *arg)
1484 SB_JOURNAL(s)->j_must_wait = 1;
1485 err = journal_end(&th, s, 10);
1486 if (err)
1487 - goto out_err;
1488 + goto out_unlock;
1489
1490 if (!(*mount_flags & MS_RDONLY)) {
1491 + /*
1492 + * Drop write lock. Quota will retake it when needed and lock
1493 + * ordering requires calling dquot_resume() without it.
1494 + */
1495 + reiserfs_write_unlock(s);
1496 dquot_resume(s, -1);
1497 + reiserfs_write_lock(s);
1498 finish_unfinished(s);
1499 reiserfs_xattr_init(s, *mount_flags);
1500 }
1501 @@ -1450,9 +1464,10 @@ out_ok:
1502 reiserfs_write_unlock(s);
1503 return 0;
1504
1505 +out_unlock:
1506 + reiserfs_write_unlock(s);
1507 out_err:
1508 kfree(new_opts);
1509 - reiserfs_write_unlock(s);
1510 return err;
1511 }
1512
1513 @@ -2090,13 +2105,15 @@ static int reiserfs_write_dquot(struct dquot *dquot)
1514 REISERFS_QUOTA_TRANS_BLOCKS(dquot->dq_sb));
1515 if (ret)
1516 goto out;
1517 + reiserfs_write_unlock(dquot->dq_sb);
1518 ret = dquot_commit(dquot);
1519 + reiserfs_write_lock(dquot->dq_sb);
1520 err =
1521 journal_end(&th, dquot->dq_sb,
1522 REISERFS_QUOTA_TRANS_BLOCKS(dquot->dq_sb));
1523 if (!ret && err)
1524 ret = err;
1525 - out:
1526 +out:
1527 reiserfs_write_unlock(dquot->dq_sb);
1528 return ret;
1529 }
1530 @@ -2112,13 +2129,15 @@ static int reiserfs_acquire_dquot(struct dquot *dquot)
1531 REISERFS_QUOTA_INIT_BLOCKS(dquot->dq_sb));
1532 if (ret)
1533 goto out;
1534 + reiserfs_write_unlock(dquot->dq_sb);
1535 ret = dquot_acquire(dquot);
1536 + reiserfs_write_lock(dquot->dq_sb);
1537 err =
1538 journal_end(&th, dquot->dq_sb,
1539 REISERFS_QUOTA_INIT_BLOCKS(dquot->dq_sb));
1540 if (!ret && err)
1541 ret = err;
1542 - out:
1543 +out:
1544 reiserfs_write_unlock(dquot->dq_sb);
1545 return ret;
1546 }
1547 @@ -2132,19 +2151,21 @@ static int reiserfs_release_dquot(struct dquot *dquot)
1548 ret =
1549 journal_begin(&th, dquot->dq_sb,
1550 REISERFS_QUOTA_DEL_BLOCKS(dquot->dq_sb));
1551 + reiserfs_write_unlock(dquot->dq_sb);
1552 if (ret) {
1553 /* Release dquot anyway to avoid endless cycle in dqput() */
1554 dquot_release(dquot);
1555 goto out;
1556 }
1557 ret = dquot_release(dquot);
1558 + reiserfs_write_lock(dquot->dq_sb);
1559 err =
1560 journal_end(&th, dquot->dq_sb,
1561 REISERFS_QUOTA_DEL_BLOCKS(dquot->dq_sb));
1562 if (!ret && err)
1563 ret = err;
1564 - out:
1565 reiserfs_write_unlock(dquot->dq_sb);
1566 +out:
1567 return ret;
1568 }
1569
1570 @@ -2169,11 +2190,13 @@ static int reiserfs_write_info(struct super_block *sb, int type)
1571 ret = journal_begin(&th, sb, 2);
1572 if (ret)
1573 goto out;
1574 + reiserfs_write_unlock(sb);
1575 ret = dquot_commit_info(sb, type);
1576 + reiserfs_write_lock(sb);
1577 err = journal_end(&th, sb, 2);
1578 if (!ret && err)
1579 ret = err;
1580 - out:
1581 +out:
1582 reiserfs_write_unlock(sb);
1583 return ret;
1584 }
1585 @@ -2198,8 +2221,11 @@ static int reiserfs_quota_on(struct super_block *sb, int type, int format_id,
1586 struct reiserfs_transaction_handle th;
1587 int opt = type == USRQUOTA ? REISERFS_USRQUOTA : REISERFS_GRPQUOTA;
1588
1589 - if (!(REISERFS_SB(sb)->s_mount_opt & (1 << opt)))
1590 - return -EINVAL;
1591 + reiserfs_write_lock(sb);
1592 + if (!(REISERFS_SB(sb)->s_mount_opt & (1 << opt))) {
1593 + err = -EINVAL;
1594 + goto out;
1595 + }
1596
1597 /* Quotafile not on the same filesystem? */
1598 if (path->dentry->d_sb != sb) {
1599 @@ -2241,8 +2267,10 @@ static int reiserfs_quota_on(struct super_block *sb, int type, int format_id,
1600 if (err)
1601 goto out;
1602 }
1603 - err = dquot_quota_on(sb, type, format_id, path);
1604 + reiserfs_write_unlock(sb);
1605 + return dquot_quota_on(sb, type, format_id, path);
1606 out:
1607 + reiserfs_write_unlock(sb);
1608 return err;
1609 }
1610
1611 @@ -2315,7 +2343,9 @@ static ssize_t reiserfs_quota_write(struct super_block *sb, int type,
1612 tocopy = sb->s_blocksize - offset < towrite ?
1613 sb->s_blocksize - offset : towrite;
1614 tmp_bh.b_state = 0;
1615 + reiserfs_write_lock(sb);
1616 err = reiserfs_get_block(inode, blk, &tmp_bh, GET_BLOCK_CREATE);
1617 + reiserfs_write_unlock(sb);
1618 if (err)
1619 goto out;
1620 if (offset || tocopy != sb->s_blocksize)
1621 @@ -2331,10 +2361,12 @@ static ssize_t reiserfs_quota_write(struct super_block *sb, int type,
1622 flush_dcache_page(bh->b_page);
1623 set_buffer_uptodate(bh);
1624 unlock_buffer(bh);
1625 + reiserfs_write_lock(sb);
1626 reiserfs_prepare_for_journal(sb, bh, 1);
1627 journal_mark_dirty(current->journal_info, sb, bh);
1628 if (!journal_quota)
1629 reiserfs_add_ordered_list(inode, bh);
1630 + reiserfs_write_unlock(sb);
1631 brelse(bh);
1632 offset = 0;
1633 towrite -= tocopy;
1634 diff --git a/fs/ubifs/find.c b/fs/ubifs/find.c
1635 index 28ec13a..2dcf3d4 100644
1636 --- a/fs/ubifs/find.c
1637 +++ b/fs/ubifs/find.c
1638 @@ -681,8 +681,16 @@ int ubifs_find_free_leb_for_idx(struct ubifs_info *c)
1639 if (!lprops) {
1640 lprops = ubifs_fast_find_freeable(c);
1641 if (!lprops) {
1642 - ubifs_assert(c->freeable_cnt == 0);
1643 - if (c->lst.empty_lebs - c->lst.taken_empty_lebs > 0) {
1644 + /*
1645 + * The first condition means the following: go scan the
1646 + * LPT if there are uncategorized lprops, which means
1647 + * there may be freeable LEBs there (UBIFS does not
1648 + * store the information about freeable LEBs in the
1649 + * master node).
1650 + */
1651 + if (c->in_a_category_cnt != c->main_lebs ||
1652 + c->lst.empty_lebs - c->lst.taken_empty_lebs > 0) {
1653 + ubifs_assert(c->freeable_cnt == 0);
1654 lprops = scan_for_leb_for_idx(c);
1655 if (IS_ERR(lprops)) {
1656 err = PTR_ERR(lprops);
1657 diff --git a/fs/ubifs/lprops.c b/fs/ubifs/lprops.c
1658 index 86eb8e5..b33ec7a 100644
1659 --- a/fs/ubifs/lprops.c
1660 +++ b/fs/ubifs/lprops.c
1661 @@ -300,8 +300,11 @@ void ubifs_add_to_cat(struct ubifs_info *c, struct ubifs_lprops *lprops,
1662 default:
1663 ubifs_assert(0);
1664 }
1665 +
1666 lprops->flags &= ~LPROPS_CAT_MASK;
1667 lprops->flags |= cat;
1668 + c->in_a_category_cnt += 1;
1669 + ubifs_assert(c->in_a_category_cnt <= c->main_lebs);
1670 }
1671
1672 /**
1673 @@ -334,6 +337,9 @@ static void ubifs_remove_from_cat(struct ubifs_info *c,
1674 default:
1675 ubifs_assert(0);
1676 }
1677 +
1678 + c->in_a_category_cnt -= 1;
1679 + ubifs_assert(c->in_a_category_cnt >= 0);
1680 }
1681
1682 /**
1683 diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h
1684 index 1e5a086..51ac3e6 100644
1685 --- a/fs/ubifs/ubifs.h
1686 +++ b/fs/ubifs/ubifs.h
1687 @@ -1184,6 +1184,8 @@ struct ubifs_debug_info;
1688 * @freeable_list: list of freeable non-index LEBs (free + dirty == @leb_size)
1689 * @frdi_idx_list: list of freeable index LEBs (free + dirty == @leb_size)
1690 * @freeable_cnt: number of freeable LEBs in @freeable_list
1691 + * @in_a_category_cnt: count of lprops which are in a certain category, which
1692 + * basically meants that they were loaded from the flash
1693 *
1694 * @ltab_lnum: LEB number of LPT's own lprops table
1695 * @ltab_offs: offset of LPT's own lprops table
1696 @@ -1413,6 +1415,7 @@ struct ubifs_info {
1697 struct list_head freeable_list;
1698 struct list_head frdi_idx_list;
1699 int freeable_cnt;
1700 + int in_a_category_cnt;
1701
1702 int ltab_lnum;
1703 int ltab_offs;
1704 diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
1705 index 933b793..4b0b8dd 100644
1706 --- a/fs/xfs/xfs_buf.c
1707 +++ b/fs/xfs/xfs_buf.c
1708 @@ -1197,9 +1197,14 @@ xfs_buf_bio_end_io(
1709 {
1710 xfs_buf_t *bp = (xfs_buf_t *)bio->bi_private;
1711
1712 - xfs_buf_ioerror(bp, -error);
1713 + /*
1714 + * don't overwrite existing errors - otherwise we can lose errors on
1715 + * buffers that require multiple bios to complete.
1716 + */
1717 + if (!bp->b_error)
1718 + xfs_buf_ioerror(bp, -error);
1719
1720 - if (!error && xfs_buf_is_vmapped(bp) && (bp->b_flags & XBF_READ))
1721 + if (!bp->b_error && xfs_buf_is_vmapped(bp) && (bp->b_flags & XBF_READ))
1722 invalidate_kernel_vmap_range(bp->b_addr, xfs_buf_vmap_len(bp));
1723
1724 _xfs_buf_ioend(bp, 1);
1725 @@ -1279,6 +1284,11 @@ next_chunk:
1726 if (size)
1727 goto next_chunk;
1728 } else {
1729 + /*
1730 + * This is guaranteed not to be the last io reference count
1731 + * because the caller (xfs_buf_iorequest) holds a count itself.
1732 + */
1733 + atomic_dec(&bp->b_io_remaining);
1734 xfs_buf_ioerror(bp, EIO);
1735 bio_put(bio);
1736 }
1737 diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
1738 index 2daa54f..a16d929 100644
1739 --- a/include/linux/mmzone.h
1740 +++ b/include/linux/mmzone.h
1741 @@ -744,7 +744,7 @@ extern int init_currently_empty_zone(struct zone *zone, unsigned long start_pfn,
1742 unsigned long size,
1743 enum memmap_context context);
1744
1745 -extern void lruvec_init(struct lruvec *lruvec, struct zone *zone);
1746 +extern void lruvec_init(struct lruvec *lruvec);
1747
1748 static inline struct zone *lruvec_zone(struct lruvec *lruvec)
1749 {
1750 diff --git a/include/linux/ptp_clock_kernel.h b/include/linux/ptp_clock_kernel.h
1751 index 945704c..00b9e61 100644
1752 --- a/include/linux/ptp_clock_kernel.h
1753 +++ b/include/linux/ptp_clock_kernel.h
1754 @@ -50,7 +50,8 @@ struct ptp_clock_request {
1755 * clock operations
1756 *
1757 * @adjfreq: Adjusts the frequency of the hardware clock.
1758 - * parameter delta: Desired period change in parts per billion.
1759 + * parameter delta: Desired frequency offset from nominal frequency
1760 + * in parts per billion
1761 *
1762 * @adjtime: Shifts the time of the hardware clock.
1763 * parameter delta: Desired change in nanoseconds.
1764 diff --git a/kernel/module.c b/kernel/module.c
1765 index 9ad9ee9..2a15c59 100644
1766 --- a/kernel/module.c
1767 +++ b/kernel/module.c
1768 @@ -2273,12 +2273,17 @@ static void layout_symtab(struct module *mod, struct load_info *info)
1769 src = (void *)info->hdr + symsect->sh_offset;
1770 nsrc = symsect->sh_size / sizeof(*src);
1771
1772 + /* strtab always starts with a nul, so offset 0 is the empty string. */
1773 + strtab_size = 1;
1774 +
1775 /* Compute total space required for the core symbols' strtab. */
1776 - for (ndst = i = strtab_size = 1; i < nsrc; ++i, ++src)
1777 - if (is_core_symbol(src, info->sechdrs, info->hdr->e_shnum)) {
1778 - strtab_size += strlen(&info->strtab[src->st_name]) + 1;
1779 + for (ndst = i = 0; i < nsrc; i++) {
1780 + if (i == 0 ||
1781 + is_core_symbol(src+i, info->sechdrs, info->hdr->e_shnum)) {
1782 + strtab_size += strlen(&info->strtab[src[i].st_name])+1;
1783 ndst++;
1784 }
1785 + }
1786
1787 /* Append room for core symbols at end of core part. */
1788 info->symoffs = ALIGN(mod->core_size, symsect->sh_addralign ?: 1);
1789 @@ -2312,15 +2317,15 @@ static void add_kallsyms(struct module *mod, const struct load_info *info)
1790 mod->core_symtab = dst = mod->module_core + info->symoffs;
1791 mod->core_strtab = s = mod->module_core + info->stroffs;
1792 src = mod->symtab;
1793 - *dst = *src;
1794 *s++ = 0;
1795 - for (ndst = i = 1; i < mod->num_symtab; ++i, ++src) {
1796 - if (!is_core_symbol(src, info->sechdrs, info->hdr->e_shnum))
1797 - continue;
1798 -
1799 - dst[ndst] = *src;
1800 - dst[ndst++].st_name = s - mod->core_strtab;
1801 - s += strlcpy(s, &mod->strtab[src->st_name], KSYM_NAME_LEN) + 1;
1802 + for (ndst = i = 0; i < mod->num_symtab; i++) {
1803 + if (i == 0 ||
1804 + is_core_symbol(src+i, info->sechdrs, info->hdr->e_shnum)) {
1805 + dst[ndst] = src[i];
1806 + dst[ndst++].st_name = s - mod->core_strtab;
1807 + s += strlcpy(s, &mod->strtab[src[i].st_name],
1808 + KSYM_NAME_LEN) + 1;
1809 + }
1810 }
1811 mod->core_num_syms = ndst;
1812 }
1813 diff --git a/mm/memcontrol.c b/mm/memcontrol.c
1814 index 795e525..a6e2f81 100644
1815 --- a/mm/memcontrol.c
1816 +++ b/mm/memcontrol.c
1817 @@ -1061,12 +1061,24 @@ struct lruvec *mem_cgroup_zone_lruvec(struct zone *zone,
1818 struct mem_cgroup *memcg)
1819 {
1820 struct mem_cgroup_per_zone *mz;
1821 + struct lruvec *lruvec;
1822
1823 - if (mem_cgroup_disabled())
1824 - return &zone->lruvec;
1825 + if (mem_cgroup_disabled()) {
1826 + lruvec = &zone->lruvec;
1827 + goto out;
1828 + }
1829
1830 mz = mem_cgroup_zoneinfo(memcg, zone_to_nid(zone), zone_idx(zone));
1831 - return &mz->lruvec;
1832 + lruvec = &mz->lruvec;
1833 +out:
1834 + /*
1835 + * Since a node can be onlined after the mem_cgroup was created,
1836 + * we have to be prepared to initialize lruvec->zone here;
1837 + * and if offlined then reonlined, we need to reinitialize it.
1838 + */
1839 + if (unlikely(lruvec->zone != zone))
1840 + lruvec->zone = zone;
1841 + return lruvec;
1842 }
1843
1844 /*
1845 @@ -1093,9 +1105,12 @@ struct lruvec *mem_cgroup_page_lruvec(struct page *page, struct zone *zone)
1846 struct mem_cgroup_per_zone *mz;
1847 struct mem_cgroup *memcg;
1848 struct page_cgroup *pc;
1849 + struct lruvec *lruvec;
1850
1851 - if (mem_cgroup_disabled())
1852 - return &zone->lruvec;
1853 + if (mem_cgroup_disabled()) {
1854 + lruvec = &zone->lruvec;
1855 + goto out;
1856 + }
1857
1858 pc = lookup_page_cgroup(page);
1859 memcg = pc->mem_cgroup;
1860 @@ -1113,7 +1128,16 @@ struct lruvec *mem_cgroup_page_lruvec(struct page *page, struct zone *zone)
1861 pc->mem_cgroup = memcg = root_mem_cgroup;
1862
1863 mz = page_cgroup_zoneinfo(memcg, page);
1864 - return &mz->lruvec;
1865 + lruvec = &mz->lruvec;
1866 +out:
1867 + /*
1868 + * Since a node can be onlined after the mem_cgroup was created,
1869 + * we have to be prepared to initialize lruvec->zone here;
1870 + * and if offlined then reonlined, we need to reinitialize it.
1871 + */
1872 + if (unlikely(lruvec->zone != zone))
1873 + lruvec->zone = zone;
1874 + return lruvec;
1875 }
1876
1877 /**
1878 @@ -1458,17 +1482,26 @@ static int mem_cgroup_count_children(struct mem_cgroup *memcg)
1879 static u64 mem_cgroup_get_limit(struct mem_cgroup *memcg)
1880 {
1881 u64 limit;
1882 - u64 memsw;
1883
1884 limit = res_counter_read_u64(&memcg->res, RES_LIMIT);
1885 - limit += total_swap_pages << PAGE_SHIFT;
1886
1887 - memsw = res_counter_read_u64(&memcg->memsw, RES_LIMIT);
1888 /*
1889 - * If memsw is finite and limits the amount of swap space available
1890 - * to this memcg, return that limit.
1891 + * Do not consider swap space if we cannot swap due to swappiness
1892 */
1893 - return min(limit, memsw);
1894 + if (mem_cgroup_swappiness(memcg)) {
1895 + u64 memsw;
1896 +
1897 + limit += total_swap_pages << PAGE_SHIFT;
1898 + memsw = res_counter_read_u64(&memcg->memsw, RES_LIMIT);
1899 +
1900 + /*
1901 + * If memsw is finite and limits the amount of swap space
1902 + * available to this memcg, return that limit.
1903 + */
1904 + limit = min(limit, memsw);
1905 + }
1906 +
1907 + return limit;
1908 }
1909
1910 void mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask,
1911 @@ -3694,17 +3727,17 @@ unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
1912 static bool mem_cgroup_force_empty_list(struct mem_cgroup *memcg,
1913 int node, int zid, enum lru_list lru)
1914 {
1915 - struct mem_cgroup_per_zone *mz;
1916 + struct lruvec *lruvec;
1917 unsigned long flags, loop;
1918 struct list_head *list;
1919 struct page *busy;
1920 struct zone *zone;
1921
1922 zone = &NODE_DATA(node)->node_zones[zid];
1923 - mz = mem_cgroup_zoneinfo(memcg, node, zid);
1924 - list = &mz->lruvec.lists[lru];
1925 + lruvec = mem_cgroup_zone_lruvec(zone, memcg);
1926 + list = &lruvec->lists[lru];
1927
1928 - loop = mz->lru_size[lru];
1929 + loop = mem_cgroup_get_lru_size(lruvec, lru);
1930 /* give some margin against EBUSY etc...*/
1931 loop += 256;
1932 busy = NULL;
1933 @@ -4742,7 +4775,7 @@ static int alloc_mem_cgroup_per_zone_info(struct mem_cgroup *memcg, int node)
1934
1935 for (zone = 0; zone < MAX_NR_ZONES; zone++) {
1936 mz = &pn->zoneinfo[zone];
1937 - lruvec_init(&mz->lruvec, &NODE_DATA(node)->node_zones[zone]);
1938 + lruvec_init(&mz->lruvec);
1939 mz->usage_in_excess = 0;
1940 mz->on_tree = false;
1941 mz->memcg = memcg;
1942 diff --git a/mm/mmzone.c b/mm/mmzone.c
1943 index 3cef80f..4596d81 100644
1944 --- a/mm/mmzone.c
1945 +++ b/mm/mmzone.c
1946 @@ -87,7 +87,7 @@ int memmap_valid_within(unsigned long pfn,
1947 }
1948 #endif /* CONFIG_ARCH_HAS_HOLES_MEMORYMODEL */
1949
1950 -void lruvec_init(struct lruvec *lruvec, struct zone *zone)
1951 +void lruvec_init(struct lruvec *lruvec)
1952 {
1953 enum lru_list lru;
1954
1955 @@ -95,8 +95,4 @@ void lruvec_init(struct lruvec *lruvec, struct zone *zone)
1956
1957 for_each_lru(lru)
1958 INIT_LIST_HEAD(&lruvec->lists[lru]);
1959 -
1960 -#ifdef CONFIG_MEMCG
1961 - lruvec->zone = zone;
1962 -#endif
1963 }
1964 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
1965 index c13ea75..d2d8f54 100644
1966 --- a/mm/page_alloc.c
1967 +++ b/mm/page_alloc.c
1968 @@ -4456,7 +4456,7 @@ static void __paginginit free_area_init_core(struct pglist_data *pgdat,
1969 zone->zone_pgdat = pgdat;
1970
1971 zone_pcp_init(zone);
1972 - lruvec_init(&zone->lruvec, zone);
1973 + lruvec_init(&zone->lruvec);
1974 if (!size)
1975 continue;
1976
1977 diff --git a/mm/shmem.c b/mm/shmem.c
1978 index d2eeca1..31e1506 100644
1979 --- a/mm/shmem.c
1980 +++ b/mm/shmem.c
1981 @@ -654,7 +654,7 @@ static void shmem_evict_inode(struct inode *inode)
1982 kfree(xattr->name);
1983 kfree(xattr);
1984 }
1985 - BUG_ON(inode->i_blocks);
1986 + WARN_ON(inode->i_blocks);
1987 shmem_free_inode(inode->i_sb);
1988 clear_inode(inode);
1989 }
1990 @@ -1156,8 +1156,20 @@ repeat:
1991 if (!error) {
1992 error = shmem_add_to_page_cache(page, mapping, index,
1993 gfp, swp_to_radix_entry(swap));
1994 - /* We already confirmed swap, and make no allocation */
1995 - VM_BUG_ON(error);
1996 + /*
1997 + * We already confirmed swap under page lock, and make
1998 + * no memory allocation here, so usually no possibility
1999 + * of error; but free_swap_and_cache() only trylocks a
2000 + * page, so it is just possible that the entry has been
2001 + * truncated or holepunched since swap was confirmed.
2002 + * shmem_undo_range() will have done some of the
2003 + * unaccounting, now delete_from_swap_cache() will do
2004 + * the rest (including mem_cgroup_uncharge_swapcache).
2005 + * Reset swap.val? No, leave it so "failed" goes back to
2006 + * "repeat": reading a hole and writing should succeed.
2007 + */
2008 + if (error)
2009 + delete_from_swap_cache(page);
2010 }
2011 if (error)
2012 goto failed;
2013 diff --git a/mm/vmscan.c b/mm/vmscan.c
2014 index 99b434b..a018dfc 100644
2015 --- a/mm/vmscan.c
2016 +++ b/mm/vmscan.c
2017 @@ -2953,6 +2953,8 @@ static int kswapd(void *p)
2018 &balanced_classzone_idx);
2019 }
2020 }
2021 +
2022 + current->reclaim_state = NULL;
2023 return 0;
2024 }
2025
2026 diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
2027 index eba022d..534250a 100644
2028 --- a/net/bluetooth/mgmt.c
2029 +++ b/net/bluetooth/mgmt.c
2030 @@ -321,7 +321,7 @@ static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data,
2031 struct hci_dev *d;
2032 size_t rp_len;
2033 u16 count;
2034 - int i, err;
2035 + int err;
2036
2037 BT_DBG("sock %p", sk);
2038
2039 @@ -339,17 +339,18 @@ static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data,
2040 return -ENOMEM;
2041 }
2042
2043 - rp->num_controllers = cpu_to_le16(count);
2044 -
2045 - i = 0;
2046 + count = 0;
2047 list_for_each_entry(d, &hci_dev_list, list) {
2048 if (test_bit(HCI_SETUP, &d->dev_flags))
2049 continue;
2050
2051 - rp->index[i++] = cpu_to_le16(d->id);
2052 + rp->index[count++] = cpu_to_le16(d->id);
2053 BT_DBG("Added hci%u", d->id);
2054 }
2055
2056 + rp->num_controllers = cpu_to_le16(count);
2057 + rp_len = sizeof(*rp) + (2 * count);
2058 +
2059 read_unlock(&hci_dev_list_lock);
2060
2061 err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_INDEX_LIST, 0, rp,
2062 diff --git a/net/core/dev.c b/net/core/dev.c
2063 index aed87a4..1dce5b5 100644
2064 --- a/net/core/dev.c
2065 +++ b/net/core/dev.c
2066 @@ -2793,8 +2793,10 @@ static int get_rps_cpu(struct net_device *dev, struct sk_buff *skb,
2067 if (unlikely(tcpu != next_cpu) &&
2068 (tcpu == RPS_NO_CPU || !cpu_online(tcpu) ||
2069 ((int)(per_cpu(softnet_data, tcpu).input_queue_head -
2070 - rflow->last_qtail)) >= 0))
2071 + rflow->last_qtail)) >= 0)) {
2072 + tcpu = next_cpu;
2073 rflow = set_rps_cpu(dev, skb, rflow, next_cpu);
2074 + }
2075
2076 if (tcpu != RPS_NO_CPU && cpu_online(tcpu)) {
2077 *rflowp = rflow;
2078 diff --git a/net/core/dev_addr_lists.c b/net/core/dev_addr_lists.c
2079 index c4cc2bc..716f363 100644
2080 --- a/net/core/dev_addr_lists.c
2081 +++ b/net/core/dev_addr_lists.c
2082 @@ -317,7 +317,8 @@ int dev_addr_del(struct net_device *dev, unsigned char *addr,
2083 */
2084 ha = list_first_entry(&dev->dev_addrs.list,
2085 struct netdev_hw_addr, list);
2086 - if (ha->addr == dev->dev_addr && ha->refcount == 1)
2087 + if (!memcmp(ha->addr, addr, dev->addr_len) &&
2088 + ha->type == addr_type && ha->refcount == 1)
2089 return -ENOENT;
2090
2091 err = __hw_addr_del(&dev->dev_addrs, addr, dev->addr_len,
2092 diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
2093 index 5eea4a8..14bbfcf 100644
2094 --- a/net/ipv4/ip_sockglue.c
2095 +++ b/net/ipv4/ip_sockglue.c
2096 @@ -457,19 +457,28 @@ static int do_ip_setsockopt(struct sock *sk, int level,
2097 struct inet_sock *inet = inet_sk(sk);
2098 int val = 0, err;
2099
2100 - if (((1<<optname) & ((1<<IP_PKTINFO) | (1<<IP_RECVTTL) |
2101 - (1<<IP_RECVOPTS) | (1<<IP_RECVTOS) |
2102 - (1<<IP_RETOPTS) | (1<<IP_TOS) |
2103 - (1<<IP_TTL) | (1<<IP_HDRINCL) |
2104 - (1<<IP_MTU_DISCOVER) | (1<<IP_RECVERR) |
2105 - (1<<IP_ROUTER_ALERT) | (1<<IP_FREEBIND) |
2106 - (1<<IP_PASSSEC) | (1<<IP_TRANSPARENT) |
2107 - (1<<IP_MINTTL) | (1<<IP_NODEFRAG))) ||
2108 - optname == IP_UNICAST_IF ||
2109 - optname == IP_MULTICAST_TTL ||
2110 - optname == IP_MULTICAST_ALL ||
2111 - optname == IP_MULTICAST_LOOP ||
2112 - optname == IP_RECVORIGDSTADDR) {
2113 + switch (optname) {
2114 + case IP_PKTINFO:
2115 + case IP_RECVTTL:
2116 + case IP_RECVOPTS:
2117 + case IP_RECVTOS:
2118 + case IP_RETOPTS:
2119 + case IP_TOS:
2120 + case IP_TTL:
2121 + case IP_HDRINCL:
2122 + case IP_MTU_DISCOVER:
2123 + case IP_RECVERR:
2124 + case IP_ROUTER_ALERT:
2125 + case IP_FREEBIND:
2126 + case IP_PASSSEC:
2127 + case IP_TRANSPARENT:
2128 + case IP_MINTTL:
2129 + case IP_NODEFRAG:
2130 + case IP_UNICAST_IF:
2131 + case IP_MULTICAST_TTL:
2132 + case IP_MULTICAST_ALL:
2133 + case IP_MULTICAST_LOOP:
2134 + case IP_RECVORIGDSTADDR:
2135 if (optlen >= sizeof(int)) {
2136 if (get_user(val, (int __user *) optval))
2137 return -EFAULT;
2138 diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
2139 index 3511ffb..bf89b21 100644
2140 --- a/net/ipv4/ip_vti.c
2141 +++ b/net/ipv4/ip_vti.c
2142 @@ -341,12 +341,17 @@ static int vti_rcv(struct sk_buff *skb)
2143 if (tunnel != NULL) {
2144 struct pcpu_tstats *tstats;
2145
2146 + if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb))
2147 + return -1;
2148 +
2149 tstats = this_cpu_ptr(tunnel->dev->tstats);
2150 u64_stats_update_begin(&tstats->syncp);
2151 tstats->rx_packets++;
2152 tstats->rx_bytes += skb->len;
2153 u64_stats_update_end(&tstats->syncp);
2154
2155 + skb->mark = 0;
2156 + secpath_reset(skb);
2157 skb->dev = tunnel->dev;
2158 rcu_read_unlock();
2159 return 1;
2160 diff --git a/net/ipv4/netfilter/nf_nat_standalone.c b/net/ipv4/netfilter/nf_nat_standalone.c
2161 index 3828a42..da4098f 100644
2162 --- a/net/ipv4/netfilter/nf_nat_standalone.c
2163 +++ b/net/ipv4/netfilter/nf_nat_standalone.c
2164 @@ -194,7 +194,8 @@ nf_nat_out(unsigned int hooknum,
2165
2166 if ((ct->tuplehash[dir].tuple.src.u3.ip !=
2167 ct->tuplehash[!dir].tuple.dst.u3.ip) ||
2168 - (ct->tuplehash[dir].tuple.src.u.all !=
2169 + (ct->tuplehash[dir].tuple.dst.protonum != IPPROTO_ICMP &&
2170 + ct->tuplehash[dir].tuple.src.u.all !=
2171 ct->tuplehash[!dir].tuple.dst.u.all)
2172 )
2173 return ip_xfrm_me_harder(skb) == 0 ? ret : NF_DROP;
2174 @@ -230,7 +231,8 @@ nf_nat_local_fn(unsigned int hooknum,
2175 ret = NF_DROP;
2176 }
2177 #ifdef CONFIG_XFRM
2178 - else if (ct->tuplehash[dir].tuple.dst.u.all !=
2179 + else if (ct->tuplehash[dir].tuple.dst.protonum != IPPROTO_ICMP &&
2180 + ct->tuplehash[dir].tuple.dst.u.all !=
2181 ct->tuplehash[!dir].tuple.src.u.all)
2182 if (ip_xfrm_me_harder(skb))
2183 ret = NF_DROP;
2184 diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
2185 index 49dd993..b0b39f6 100644
2186 --- a/net/ipv4/tcp.c
2187 +++ b/net/ipv4/tcp.c
2188 @@ -1236,7 +1236,7 @@ new_segment:
2189 wait_for_sndbuf:
2190 set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
2191 wait_for_memory:
2192 - if (copied && likely(!tp->repair))
2193 + if (copied)
2194 tcp_push(sk, flags & ~MSG_MORE, mss_now, TCP_NAGLE_PUSH);
2195
2196 if ((err = sk_stream_wait_memory(sk, &timeo)) != 0)
2197 @@ -1247,7 +1247,7 @@ wait_for_memory:
2198 }
2199
2200 out:
2201 - if (copied && likely(!tp->repair))
2202 + if (copied)
2203 tcp_push(sk, flags, mss_now, tp->nonagle);
2204 release_sock(sk);
2205 return copied + copied_syn;
2206 diff --git a/net/ipv4/tcp_metrics.c b/net/ipv4/tcp_metrics.c
2207 index 0abe67b..2efd1a5 100644
2208 --- a/net/ipv4/tcp_metrics.c
2209 +++ b/net/ipv4/tcp_metrics.c
2210 @@ -1,13 +1,13 @@
2211 #include <linux/rcupdate.h>
2212 #include <linux/spinlock.h>
2213 #include <linux/jiffies.h>
2214 -#include <linux/bootmem.h>
2215 #include <linux/module.h>
2216 #include <linux/cache.h>
2217 #include <linux/slab.h>
2218 #include <linux/init.h>
2219 #include <linux/tcp.h>
2220 #include <linux/hash.h>
2221 +#include <linux/vmalloc.h>
2222
2223 #include <net/inet_connection_sock.h>
2224 #include <net/net_namespace.h>
2225 @@ -722,7 +722,10 @@ static int __net_init tcp_net_metrics_init(struct net *net)
2226 net->ipv4.tcp_metrics_hash_log = order_base_2(slots);
2227 size = sizeof(struct tcpm_hash_bucket) << net->ipv4.tcp_metrics_hash_log;
2228
2229 - net->ipv4.tcp_metrics_hash = kzalloc(size, GFP_KERNEL);
2230 + net->ipv4.tcp_metrics_hash = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
2231 + if (!net->ipv4.tcp_metrics_hash)
2232 + net->ipv4.tcp_metrics_hash = vzalloc(size);
2233 +
2234 if (!net->ipv4.tcp_metrics_hash)
2235 return -ENOMEM;
2236
2237 @@ -743,7 +746,10 @@ static void __net_exit tcp_net_metrics_exit(struct net *net)
2238 tm = next;
2239 }
2240 }
2241 - kfree(net->ipv4.tcp_metrics_hash);
2242 + if (is_vmalloc_addr(net->ipv4.tcp_metrics_hash))
2243 + vfree(net->ipv4.tcp_metrics_hash);
2244 + else
2245 + kfree(net->ipv4.tcp_metrics_hash);
2246 }
2247
2248 static __net_initdata struct pernet_operations tcp_net_metrics_ops = {
2249 diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
2250 index d046326..6735bea 100644
2251 --- a/net/ipv4/tcp_output.c
2252 +++ b/net/ipv4/tcp_output.c
2253 @@ -1977,6 +1977,9 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle,
2254 tso_segs = tcp_init_tso_segs(sk, skb, mss_now);
2255 BUG_ON(!tso_segs);
2256
2257 + if (unlikely(tp->repair) && tp->repair_queue == TCP_SEND_QUEUE)
2258 + goto repair; /* Skip network transmission */
2259 +
2260 cwnd_quota = tcp_cwnd_test(tp, skb);
2261 if (!cwnd_quota)
2262 break;
2263 @@ -2017,6 +2020,7 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle,
2264 if (unlikely(tcp_transmit_skb(sk, skb, 1, gfp)))
2265 break;
2266
2267 +repair:
2268 /* Advance the send_head. This one is sent out.
2269 * This call will increment packets_out.
2270 */
2271 diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c
2272 index ba6d13d..e02faed 100644
2273 --- a/net/ipv6/ipv6_sockglue.c
2274 +++ b/net/ipv6/ipv6_sockglue.c
2275 @@ -827,6 +827,7 @@ pref_skip_coa:
2276 if (val < 0 || val > 255)
2277 goto e_inval;
2278 np->min_hopcount = val;
2279 + retv = 0;
2280 break;
2281 case IPV6_DONTFRAG:
2282 np->dontfrag = valbool;
2283 diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
2284 index bb61f77..642a2a3 100644
2285 --- a/net/mac80211/ieee80211_i.h
2286 +++ b/net/mac80211/ieee80211_i.h
2287 @@ -1304,6 +1304,8 @@ netdev_tx_t ieee80211_monitor_start_xmit(struct sk_buff *skb,
2288 struct net_device *dev);
2289 netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
2290 struct net_device *dev);
2291 +void ieee80211_purge_tx_queue(struct ieee80211_hw *hw,
2292 + struct sk_buff_head *skbs);
2293
2294 /* HT */
2295 void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata,
2296 diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
2297 index 63882b9..31aa8b8 100644
2298 --- a/net/mac80211/sta_info.c
2299 +++ b/net/mac80211/sta_info.c
2300 @@ -730,8 +730,8 @@ int __must_check __sta_info_destroy(struct sta_info *sta)
2301
2302 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
2303 local->total_ps_buffered -= skb_queue_len(&sta->ps_tx_buf[ac]);
2304 - __skb_queue_purge(&sta->ps_tx_buf[ac]);
2305 - __skb_queue_purge(&sta->tx_filtered[ac]);
2306 + ieee80211_purge_tx_queue(&local->hw, &sta->ps_tx_buf[ac]);
2307 + ieee80211_purge_tx_queue(&local->hw, &sta->tx_filtered[ac]);
2308 }
2309
2310 #ifdef CONFIG_MAC80211_MESH
2311 @@ -765,7 +765,7 @@ int __must_check __sta_info_destroy(struct sta_info *sta)
2312 tid_tx = rcu_dereference_raw(sta->ampdu_mlme.tid_tx[i]);
2313 if (!tid_tx)
2314 continue;
2315 - __skb_queue_purge(&tid_tx->pending);
2316 + ieee80211_purge_tx_queue(&local->hw, &tid_tx->pending);
2317 kfree(tid_tx);
2318 }
2319
2320 @@ -948,6 +948,7 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta)
2321 struct ieee80211_local *local = sdata->local;
2322 struct sk_buff_head pending;
2323 int filtered = 0, buffered = 0, ac;
2324 + unsigned long flags;
2325
2326 clear_sta_flag(sta, WLAN_STA_SP);
2327
2328 @@ -963,12 +964,16 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta)
2329 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
2330 int count = skb_queue_len(&pending), tmp;
2331
2332 + spin_lock_irqsave(&sta->tx_filtered[ac].lock, flags);
2333 skb_queue_splice_tail_init(&sta->tx_filtered[ac], &pending);
2334 + spin_unlock_irqrestore(&sta->tx_filtered[ac].lock, flags);
2335 tmp = skb_queue_len(&pending);
2336 filtered += tmp - count;
2337 count = tmp;
2338
2339 + spin_lock_irqsave(&sta->ps_tx_buf[ac].lock, flags);
2340 skb_queue_splice_tail_init(&sta->ps_tx_buf[ac], &pending);
2341 + spin_unlock_irqrestore(&sta->ps_tx_buf[ac].lock, flags);
2342 tmp = skb_queue_len(&pending);
2343 buffered += tmp - count;
2344 }
2345 diff --git a/net/mac80211/status.c b/net/mac80211/status.c
2346 index 118329a..14e1b83 100644
2347 --- a/net/mac80211/status.c
2348 +++ b/net/mac80211/status.c
2349 @@ -648,3 +648,12 @@ void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb)
2350 dev_kfree_skb_any(skb);
2351 }
2352 EXPORT_SYMBOL(ieee80211_free_txskb);
2353 +
2354 +void ieee80211_purge_tx_queue(struct ieee80211_hw *hw,
2355 + struct sk_buff_head *skbs)
2356 +{
2357 + struct sk_buff *skb;
2358 +
2359 + while ((skb = __skb_dequeue(skbs)))
2360 + ieee80211_free_txskb(hw, skb);
2361 +}
2362 diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
2363 index 362c418..8133fed 100644
2364 --- a/net/mac80211/tx.c
2365 +++ b/net/mac80211/tx.c
2366 @@ -1358,7 +1358,7 @@ static int invoke_tx_handlers(struct ieee80211_tx_data *tx)
2367 if (tx->skb)
2368 ieee80211_free_txskb(&tx->local->hw, tx->skb);
2369 else
2370 - __skb_queue_purge(&tx->skbs);
2371 + ieee80211_purge_tx_queue(&tx->local->hw, &tx->skbs);
2372 return -1;
2373 } else if (unlikely(res == TX_QUEUED)) {
2374 I802_DEBUG_INC(tx->local->tx_handlers_queued);
2375 @@ -2132,10 +2132,13 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
2376 */
2377 void ieee80211_clear_tx_pending(struct ieee80211_local *local)
2378 {
2379 + struct sk_buff *skb;
2380 int i;
2381
2382 - for (i = 0; i < local->hw.queues; i++)
2383 - skb_queue_purge(&local->pending[i]);
2384 + for (i = 0; i < local->hw.queues; i++) {
2385 + while ((skb = skb_dequeue(&local->pending[i])) != NULL)
2386 + ieee80211_free_txskb(&local->hw, skb);
2387 + }
2388 }
2389
2390 /*
2391 diff --git a/net/mac80211/util.c b/net/mac80211/util.c
2392 index 1cfe6d5..7883449 100644
2393 --- a/net/mac80211/util.c
2394 +++ b/net/mac80211/util.c
2395 @@ -1434,6 +1434,8 @@ int ieee80211_reconfig(struct ieee80211_local *local)
2396 list_for_each_entry(sdata, &local->interfaces, list) {
2397 if (sdata->vif.type != NL80211_IFTYPE_STATION)
2398 continue;
2399 + if (!sdata->u.mgd.associated)
2400 + continue;
2401
2402 ieee80211_send_nullfunc(local, sdata, 0);
2403 }
2404 diff --git a/net/netfilter/nf_conntrack_h323_main.c b/net/netfilter/nf_conntrack_h323_main.c
2405 index 4283b20..02f65bc 100644
2406 --- a/net/netfilter/nf_conntrack_h323_main.c
2407 +++ b/net/netfilter/nf_conntrack_h323_main.c
2408 @@ -733,7 +733,8 @@ static int callforward_do_filter(const union nf_inet_addr *src,
2409 flowi4_to_flowi(&fl1), false)) {
2410 if (!afinfo->route(&init_net, (struct dst_entry **)&rt2,
2411 flowi4_to_flowi(&fl2), false)) {
2412 - if (rt1->rt_gateway == rt2->rt_gateway &&
2413 + if (rt_nexthop(rt1, fl1.daddr) ==
2414 + rt_nexthop(rt2, fl2.daddr) &&
2415 rt1->dst.dev == rt2->dst.dev)
2416 ret = 1;
2417 dst_release(&rt2->dst);
2418 diff --git a/net/netfilter/xt_TEE.c b/net/netfilter/xt_TEE.c
2419 index ee2e5bc..bd93e51 100644
2420 --- a/net/netfilter/xt_TEE.c
2421 +++ b/net/netfilter/xt_TEE.c
2422 @@ -70,6 +70,7 @@ tee_tg_route4(struct sk_buff *skb, const struct xt_tee_tginfo *info)
2423 fl4.daddr = info->gw.ip;
2424 fl4.flowi4_tos = RT_TOS(iph->tos);
2425 fl4.flowi4_scope = RT_SCOPE_UNIVERSE;
2426 + fl4.flowi4_flags = FLOWI_FLAG_KNOWN_NH;
2427 rt = ip_route_output_key(net, &fl4);
2428 if (IS_ERR(rt))
2429 return false;
2430 diff --git a/net/nfc/llcp/llcp.c b/net/nfc/llcp/llcp.c
2431 index 82f0f75..7dd983a 100644
2432 --- a/net/nfc/llcp/llcp.c
2433 +++ b/net/nfc/llcp/llcp.c
2434 @@ -1182,8 +1182,8 @@ int nfc_llcp_register_device(struct nfc_dev *ndev)
2435 goto err_rx_wq;
2436 }
2437
2438 - local->sockets.lock = __RW_LOCK_UNLOCKED(local->sockets.lock);
2439 - local->connecting_sockets.lock = __RW_LOCK_UNLOCKED(local->connecting_sockets.lock);
2440 + rwlock_init(&local->sockets.lock);
2441 + rwlock_init(&local->connecting_sockets.lock);
2442
2443 nfc_llcp_build_gb(local);
2444
2445 diff --git a/net/wireless/reg.c b/net/wireless/reg.c
2446 index 72d170c..3062b88 100644
2447 --- a/net/wireless/reg.c
2448 +++ b/net/wireless/reg.c
2449 @@ -141,9 +141,8 @@ static const struct ieee80211_regdomain world_regdom = {
2450 .reg_rules = {
2451 /* IEEE 802.11b/g, channels 1..11 */
2452 REG_RULE(2412-10, 2462+10, 40, 6, 20, 0),
2453 - /* IEEE 802.11b/g, channels 12..13. No HT40
2454 - * channel fits here. */
2455 - REG_RULE(2467-10, 2472+10, 20, 6, 20,
2456 + /* IEEE 802.11b/g, channels 12..13. */
2457 + REG_RULE(2467-10, 2472+10, 40, 6, 20,
2458 NL80211_RRF_PASSIVE_SCAN |
2459 NL80211_RRF_NO_IBSS),
2460 /* IEEE 802.11 channel 14 - Only JP enables
2461 diff --git a/security/selinux/netnode.c b/security/selinux/netnode.c
2462 index 28f911c..c5454c0 100644
2463 --- a/security/selinux/netnode.c
2464 +++ b/security/selinux/netnode.c
2465 @@ -174,7 +174,8 @@ static void sel_netnode_insert(struct sel_netnode *node)
2466 if (sel_netnode_hash[idx].size == SEL_NETNODE_HASH_BKT_LIMIT) {
2467 struct sel_netnode *tail;
2468 tail = list_entry(
2469 - rcu_dereference(sel_netnode_hash[idx].list.prev),
2470 + rcu_dereference_protected(sel_netnode_hash[idx].list.prev,
2471 + lockdep_is_held(&sel_netnode_lock)),
2472 struct sel_netnode, list);
2473 list_del_rcu(&tail->list);
2474 kfree_rcu(tail, rcu);
2475 diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
2476 index 0208fa1..b2cd011 100644
2477 --- a/sound/pci/hda/patch_analog.c
2478 +++ b/sound/pci/hda/patch_analog.c
2479 @@ -545,6 +545,7 @@ static int ad198x_build_pcms(struct hda_codec *codec)
2480 if (spec->multiout.dig_out_nid) {
2481 info++;
2482 codec->num_pcms++;
2483 + codec->spdif_status_reset = 1;
2484 info->name = "AD198x Digital";
2485 info->pcm_type = HDA_PCM_TYPE_SPDIF;
2486 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = ad198x_pcm_digital_playback;
2487 diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
2488 index cc31346..2bb9bee 100644
2489 --- a/sound/pci/hda/patch_cirrus.c
2490 +++ b/sound/pci/hda/patch_cirrus.c
2491 @@ -96,8 +96,8 @@ enum {
2492 #define CS420X_VENDOR_NID 0x11
2493 #define CS_DIG_OUT1_PIN_NID 0x10
2494 #define CS_DIG_OUT2_PIN_NID 0x15
2495 -#define CS_DMIC1_PIN_NID 0x12
2496 -#define CS_DMIC2_PIN_NID 0x0e
2497 +#define CS_DMIC1_PIN_NID 0x0e
2498 +#define CS_DMIC2_PIN_NID 0x12
2499
2500 /* coef indices */
2501 #define IDX_SPDIF_STAT 0x0000
2502 @@ -1074,14 +1074,18 @@ static void init_input(struct hda_codec *codec)
2503 cs_automic(codec);
2504
2505 coef = 0x000a; /* ADC1/2 - Digital and Analog Soft Ramp */
2506 + cs_vendor_coef_set(codec, IDX_ADC_CFG, coef);
2507 +
2508 + coef = cs_vendor_coef_get(codec, IDX_BEEP_CFG);
2509 if (is_active_pin(codec, CS_DMIC2_PIN_NID))
2510 - coef |= 0x0500; /* DMIC2 2 chan on, GPIO1 off */
2511 + coef |= 1 << 4; /* DMIC2 2 chan on, GPIO1 off */
2512 if (is_active_pin(codec, CS_DMIC1_PIN_NID))
2513 - coef |= 0x1800; /* DMIC1 2 chan on, GPIO0 off
2514 + coef |= 1 << 3; /* DMIC1 2 chan on, GPIO0 off
2515 * No effect if SPDIF_OUT2 is
2516 * selected in IDX_SPDIF_CTL.
2517 */
2518 - cs_vendor_coef_set(codec, IDX_ADC_CFG, coef);
2519 +
2520 + cs_vendor_coef_set(codec, IDX_BEEP_CFG, coef);
2521 } else {
2522 if (spec->mic_detect)
2523 cs_automic(codec);
2524 @@ -1102,7 +1106,7 @@ static const struct hda_verb cs_coef_init_verbs[] = {
2525 | 0x0400 /* Disable Coefficient Auto increment */
2526 )},
2527 /* Beep */
2528 - {0x11, AC_VERB_SET_COEF_INDEX, IDX_DAC_CFG},
2529 + {0x11, AC_VERB_SET_COEF_INDEX, IDX_BEEP_CFG},
2530 {0x11, AC_VERB_SET_PROC_COEF, 0x0007}, /* Enable Beep thru DAC1/2/3 */
2531
2532 {} /* terminator */
2533 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
2534 index 70ce60f..f6b5995 100644
2535 --- a/sound/pci/hda/patch_realtek.c
2536 +++ b/sound/pci/hda/patch_realtek.c
2537 @@ -5434,6 +5434,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
2538 SND_PCI_QUIRK(0x106b, 0x4000, "MacbookPro 5,1", ALC889_FIXUP_IMAC91_VREF),
2539 SND_PCI_QUIRK(0x106b, 0x4100, "Macmini 3,1", ALC889_FIXUP_IMAC91_VREF),
2540 SND_PCI_QUIRK(0x106b, 0x4200, "Mac Pro 5,1", ALC885_FIXUP_MACPRO_GPIO),
2541 + SND_PCI_QUIRK(0x106b, 0x4300, "iMac 9,1", ALC889_FIXUP_IMAC91_VREF),
2542 SND_PCI_QUIRK(0x106b, 0x4600, "MacbookPro 5,2", ALC889_FIXUP_IMAC91_VREF),
2543 SND_PCI_QUIRK(0x106b, 0x4900, "iMac 9,1 Aluminum", ALC889_FIXUP_IMAC91_VREF),
2544 SND_PCI_QUIRK(0x106b, 0x4a00, "Macbook 5,2", ALC889_FIXUP_IMAC91_VREF),
2545 @@ -5867,7 +5868,7 @@ static int alc269_parse_auto_config(struct hda_codec *codec)
2546 return alc_parse_auto_config(codec, alc269_ignore, ssids);
2547 }
2548
2549 -static void alc269_toggle_power_output(struct hda_codec *codec, int power_up)
2550 +static void alc269vb_toggle_power_output(struct hda_codec *codec, int power_up)
2551 {
2552 int val = alc_read_coef_idx(codec, 0x04);
2553 if (power_up)
2554 @@ -5884,10 +5885,10 @@ static void alc269_shutup(struct hda_codec *codec)
2555 if (spec->codec_variant != ALC269_TYPE_ALC269VB)
2556 return;
2557
2558 - if ((alc_get_coef0(codec) & 0x00ff) == 0x017)
2559 - alc269_toggle_power_output(codec, 0);
2560 - if ((alc_get_coef0(codec) & 0x00ff) == 0x018) {
2561 - alc269_toggle_power_output(codec, 0);
2562 + if (spec->codec_variant == ALC269_TYPE_ALC269VB)
2563 + alc269vb_toggle_power_output(codec, 0);
2564 + if (spec->codec_variant == ALC269_TYPE_ALC269VB &&
2565 + (alc_get_coef0(codec) & 0x00ff) == 0x018) {
2566 msleep(150);
2567 }
2568 }
2569 @@ -5897,24 +5898,22 @@ static int alc269_resume(struct hda_codec *codec)
2570 {
2571 struct alc_spec *spec = codec->spec;
2572
2573 - if (spec->codec_variant == ALC269_TYPE_ALC269VB ||
2574 + if (spec->codec_variant == ALC269_TYPE_ALC269VB)
2575 + alc269vb_toggle_power_output(codec, 0);
2576 + if (spec->codec_variant == ALC269_TYPE_ALC269VB &&
2577 (alc_get_coef0(codec) & 0x00ff) == 0x018) {
2578 - alc269_toggle_power_output(codec, 0);
2579 msleep(150);
2580 }
2581
2582 codec->patch_ops.init(codec);
2583
2584 - if (spec->codec_variant == ALC269_TYPE_ALC269VB ||
2585 + if (spec->codec_variant == ALC269_TYPE_ALC269VB)
2586 + alc269vb_toggle_power_output(codec, 1);
2587 + if (spec->codec_variant == ALC269_TYPE_ALC269VB &&
2588 (alc_get_coef0(codec) & 0x00ff) == 0x017) {
2589 - alc269_toggle_power_output(codec, 1);
2590 msleep(200);
2591 }
2592
2593 - if (spec->codec_variant == ALC269_TYPE_ALC269VB ||
2594 - (alc_get_coef0(codec) & 0x00ff) == 0x018)
2595 - alc269_toggle_power_output(codec, 1);
2596 -
2597 snd_hda_codec_resume_amp(codec);
2598 snd_hda_codec_resume_cache(codec);
2599 hda_call_check_power_status(codec, 0x01);
2600 @@ -7103,6 +7102,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = {
2601 .patch = patch_alc662 },
2602 { .id = 0x10ec0663, .name = "ALC663", .patch = patch_alc662 },
2603 { .id = 0x10ec0665, .name = "ALC665", .patch = patch_alc662 },
2604 + { .id = 0x10ec0668, .name = "ALC668", .patch = patch_alc662 },
2605 { .id = 0x10ec0670, .name = "ALC670", .patch = patch_alc662 },
2606 { .id = 0x10ec0680, .name = "ALC680", .patch = patch_alc680 },
2607 { .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 },
2608 @@ -7120,6 +7120,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = {
2609 { .id = 0x10ec0889, .name = "ALC889", .patch = patch_alc882 },
2610 { .id = 0x10ec0892, .name = "ALC892", .patch = patch_alc662 },
2611 { .id = 0x10ec0899, .name = "ALC898", .patch = patch_alc882 },
2612 + { .id = 0x10ec0900, .name = "ALC1150", .patch = patch_alc882 },
2613 {} /* terminator */
2614 };
2615
2616 diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
2617 index 4c404a0..66cd4f0 100644
2618 --- a/sound/pci/hda/patch_via.c
2619 +++ b/sound/pci/hda/patch_via.c
2620 @@ -1875,11 +1875,11 @@ static int via_auto_fill_dac_nids(struct hda_codec *codec)
2621 {
2622 struct via_spec *spec = codec->spec;
2623 const struct auto_pin_cfg *cfg = &spec->autocfg;
2624 - int i, dac_num;
2625 + int i;
2626 hda_nid_t nid;
2627
2628 + spec->multiout.num_dacs = 0;
2629 spec->multiout.dac_nids = spec->private_dac_nids;
2630 - dac_num = 0;
2631 for (i = 0; i < cfg->line_outs; i++) {
2632 hda_nid_t dac = 0;
2633 nid = cfg->line_out_pins[i];
2634 @@ -1890,16 +1890,13 @@ static int via_auto_fill_dac_nids(struct hda_codec *codec)
2635 if (!i && parse_output_path(codec, nid, dac, 1,
2636 &spec->out_mix_path))
2637 dac = spec->out_mix_path.path[0];
2638 - if (dac) {
2639 - spec->private_dac_nids[i] = dac;
2640 - dac_num++;
2641 - }
2642 + if (dac)
2643 + spec->private_dac_nids[spec->multiout.num_dacs++] = dac;
2644 }
2645 if (!spec->out_path[0].depth && spec->out_mix_path.depth) {
2646 spec->out_path[0] = spec->out_mix_path;
2647 spec->out_mix_path.depth = 0;
2648 }
2649 - spec->multiout.num_dacs = dac_num;
2650 return 0;
2651 }
2652
2653 @@ -3700,6 +3697,18 @@ static const struct snd_pci_quirk vt2002p_fixups[] = {
2654 {}
2655 };
2656
2657 +/* NIDs 0x24 and 0x33 on VT1802 have connections to non-existing NID 0x3e
2658 + * Replace this with mixer NID 0x1c
2659 + */
2660 +static void fix_vt1802_connections(struct hda_codec *codec)
2661 +{
2662 + static hda_nid_t conn_24[] = { 0x14, 0x1c };
2663 + static hda_nid_t conn_33[] = { 0x1c };
2664 +
2665 + snd_hda_override_conn_list(codec, 0x24, ARRAY_SIZE(conn_24), conn_24);
2666 + snd_hda_override_conn_list(codec, 0x33, ARRAY_SIZE(conn_33), conn_33);
2667 +}
2668 +
2669 /* patch for vt2002P */
2670 static int patch_vt2002P(struct hda_codec *codec)
2671 {
2672 @@ -3714,6 +3723,8 @@ static int patch_vt2002P(struct hda_codec *codec)
2673 spec->aa_mix_nid = 0x21;
2674 override_mic_boost(codec, 0x2b, 0, 3, 40);
2675 override_mic_boost(codec, 0x29, 0, 3, 40);
2676 + if (spec->codec_type == VT1802)
2677 + fix_vt1802_connections(codec);
2678 add_secret_dac_path(codec);
2679
2680 snd_hda_pick_fixup(codec, NULL, vt2002p_fixups, via_fixups);
2681 diff --git a/sound/soc/codecs/cs42l52.c b/sound/soc/codecs/cs42l52.c
2682 index 628daf6..d8cfcc7 100644
2683 --- a/sound/soc/codecs/cs42l52.c
2684 +++ b/sound/soc/codecs/cs42l52.c
2685 @@ -774,7 +774,6 @@ static int cs42l52_set_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
2686 {
2687 struct snd_soc_codec *codec = codec_dai->codec;
2688 struct cs42l52_private *cs42l52 = snd_soc_codec_get_drvdata(codec);
2689 - int ret = 0;
2690 u8 iface = 0;
2691
2692 switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
2693 @@ -823,7 +822,7 @@ static int cs42l52_set_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
2694 case SND_SOC_DAIFMT_NB_IF:
2695 break;
2696 default:
2697 - ret = -EINVAL;
2698 + return -EINVAL;
2699 }
2700 cs42l52->config.format = iface;
2701 snd_soc_write(codec, CS42L52_IFACE_CTL1, cs42l52->config.format);
2702 diff --git a/sound/soc/codecs/wm8978.c b/sound/soc/codecs/wm8978.c
2703 index a5be3ad..2f46d66 100644
2704 --- a/sound/soc/codecs/wm8978.c
2705 +++ b/sound/soc/codecs/wm8978.c
2706 @@ -782,7 +782,7 @@ static int wm8978_hw_params(struct snd_pcm_substream *substream,
2707 wm8978->mclk_idx = -1;
2708 f_sel = wm8978->f_mclk;
2709 } else {
2710 - if (!wm8978->f_pllout) {
2711 + if (!wm8978->f_opclk) {
2712 /* We only enter here, if OPCLK is not used */
2713 int ret = wm8978_configure_pll(codec);
2714 if (ret < 0)
2715 diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
2716 index c501af6..8bf05d7 100644
2717 --- a/sound/soc/soc-core.c
2718 +++ b/sound/soc/soc-core.c
2719 @@ -2776,8 +2776,9 @@ int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol,
2720 val = (ucontrol->value.integer.value[0] + min) & mask;
2721 val = val << shift;
2722
2723 - if (snd_soc_update_bits_locked(codec, reg, val_mask, val))
2724 - return err;
2725 + err = snd_soc_update_bits_locked(codec, reg, val_mask, val);
2726 + if (err < 0)
2727 + return err;
2728
2729 if (snd_soc_volsw_is_stereo(mc)) {
2730 val_mask = mask << rshift;
2731 diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
2732 index f90139b..c4a08a2 100644
2733 --- a/sound/soc/soc-dapm.c
2734 +++ b/sound/soc/soc-dapm.c
2735 @@ -3710,7 +3710,7 @@ void snd_soc_dapm_shutdown(struct snd_soc_card *card)
2736 {
2737 struct snd_soc_codec *codec;
2738
2739 - list_for_each_entry(codec, &card->codec_dev_list, list) {
2740 + list_for_each_entry(codec, &card->codec_dev_list, card_list) {
2741 soc_dapm_shutdown_codec(&codec->dapm);
2742 if (codec->dapm.bias_level == SND_SOC_BIAS_STANDBY)
2743 snd_soc_dapm_set_bias_level(&codec->dapm,
2744 diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c
2745 index d9de667..eafc889 100644
2746 --- a/sound/usb/endpoint.c
2747 +++ b/sound/usb/endpoint.c
2748 @@ -35,6 +35,7 @@
2749
2750 #define EP_FLAG_ACTIVATED 0
2751 #define EP_FLAG_RUNNING 1
2752 +#define EP_FLAG_STOPPING 2
2753
2754 /*
2755 * snd_usb_endpoint is a model that abstracts everything related to an
2756 @@ -502,10 +503,20 @@ static int wait_clear_urbs(struct snd_usb_endpoint *ep)
2757 if (alive)
2758 snd_printk(KERN_ERR "timeout: still %d active urbs on EP #%x\n",
2759 alive, ep->ep_num);
2760 + clear_bit(EP_FLAG_STOPPING, &ep->flags);
2761
2762 return 0;
2763 }
2764
2765 +/* sync the pending stop operation;
2766 + * this function itself doesn't trigger the stop operation
2767 + */
2768 +void snd_usb_endpoint_sync_pending_stop(struct snd_usb_endpoint *ep)
2769 +{
2770 + if (ep && test_bit(EP_FLAG_STOPPING, &ep->flags))
2771 + wait_clear_urbs(ep);
2772 +}
2773 +
2774 /*
2775 * unlink active urbs.
2776 */
2777 @@ -913,6 +924,8 @@ void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep,
2778
2779 if (wait)
2780 wait_clear_urbs(ep);
2781 + else
2782 + set_bit(EP_FLAG_STOPPING, &ep->flags);
2783 }
2784 }
2785
2786 diff --git a/sound/usb/endpoint.h b/sound/usb/endpoint.h
2787 index cbbbdf2..774a0eb 100644
2788 --- a/sound/usb/endpoint.h
2789 +++ b/sound/usb/endpoint.h
2790 @@ -16,6 +16,7 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,
2791 int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, int can_sleep);
2792 void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep,
2793 int force, int can_sleep, int wait);
2794 +void snd_usb_endpoint_sync_pending_stop(struct snd_usb_endpoint *ep);
2795 int snd_usb_endpoint_activate(struct snd_usb_endpoint *ep);
2796 int snd_usb_endpoint_deactivate(struct snd_usb_endpoint *ep);
2797 void snd_usb_endpoint_free(struct list_head *head);
2798 diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
2799 index ee3c15c..90731af 100644
2800 --- a/sound/usb/pcm.c
2801 +++ b/sound/usb/pcm.c
2802 @@ -563,6 +563,9 @@ static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream)
2803 goto unlock;
2804 }
2805
2806 + snd_usb_endpoint_sync_pending_stop(subs->sync_endpoint);
2807 + snd_usb_endpoint_sync_pending_stop(subs->data_endpoint);
2808 +
2809 /* some unit conversions in runtime */
2810 subs->data_endpoint->maxframesize =
2811 bytes_to_frames(runtime, subs->data_endpoint->maxpacksize);