Annotation of /trunk/kernel-alx/patches-3.10/0179-3.10.80-all-fixes.patch
Parent Directory | Revision Log
Revision 2667 -
(hide annotations)
(download)
Tue Jul 21 16:20:24 2015 UTC (9 years, 2 months ago) by niro
File size: 40262 byte(s)
Tue Jul 21 16:20:24 2015 UTC (9 years, 2 months ago) by niro
File size: 40262 byte(s)
-linux-3.10.80
1 | niro | 2667 | diff --git a/Makefile b/Makefile |
2 | index e26cb1e56266..067433219984 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 3 | ||
7 | PATCHLEVEL = 10 | ||
8 | -SUBLEVEL = 79 | ||
9 | +SUBLEVEL = 80 | ||
10 | EXTRAVERSION = | ||
11 | NAME = TOSSUG Baby Fish | ||
12 | |||
13 | @@ -241,7 +241,7 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ | ||
14 | |||
15 | HOSTCC = gcc | ||
16 | HOSTCXX = g++ | ||
17 | -HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer | ||
18 | +HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89 | ||
19 | HOSTCXXFLAGS = -O2 | ||
20 | |||
21 | # Decide whether to build built-in, modular, or both. | ||
22 | @@ -373,7 +373,9 @@ KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \ | ||
23 | -fno-strict-aliasing -fno-common \ | ||
24 | -Werror-implicit-function-declaration \ | ||
25 | -Wno-format-security \ | ||
26 | - -fno-delete-null-pointer-checks | ||
27 | + -fno-delete-null-pointer-checks \ | ||
28 | + -std=gnu89 | ||
29 | + | ||
30 | KBUILD_AFLAGS_KERNEL := | ||
31 | KBUILD_CFLAGS_KERNEL := | ||
32 | KBUILD_AFLAGS := -D__ASSEMBLY__ | ||
33 | diff --git a/arch/arm/boot/dts/imx27.dtsi b/arch/arm/boot/dts/imx27.dtsi | ||
34 | index 75bd11386516..77730a37344e 100644 | ||
35 | --- a/arch/arm/boot/dts/imx27.dtsi | ||
36 | +++ b/arch/arm/boot/dts/imx27.dtsi | ||
37 | @@ -290,7 +290,7 @@ | ||
38 | |||
39 | fec: ethernet@1002b000 { | ||
40 | compatible = "fsl,imx27-fec"; | ||
41 | - reg = <0x1002b000 0x4000>; | ||
42 | + reg = <0x1002b000 0x1000>; | ||
43 | interrupts = <50>; | ||
44 | clocks = <&clks 48>, <&clks 67>, <&clks 0>; | ||
45 | clock-names = "ipg", "ahb", "ptp"; | ||
46 | diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S | ||
47 | index 4bc816a74a2e..f2646934c714 100644 | ||
48 | --- a/arch/arm/kernel/entry-common.S | ||
49 | +++ b/arch/arm/kernel/entry-common.S | ||
50 | @@ -32,7 +32,9 @@ ret_fast_syscall: | ||
51 | UNWIND(.fnstart ) | ||
52 | UNWIND(.cantunwind ) | ||
53 | disable_irq @ disable interrupts | ||
54 | - ldr r1, [tsk, #TI_FLAGS] | ||
55 | + ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing | ||
56 | + tst r1, #_TIF_SYSCALL_WORK | ||
57 | + bne __sys_trace_return | ||
58 | tst r1, #_TIF_WORK_MASK | ||
59 | bne fast_work_pending | ||
60 | asm_trace_hardirqs_on | ||
61 | diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S | ||
62 | index f096e72262f4..1db685104ffc 100644 | ||
63 | --- a/arch/powerpc/kernel/vmlinux.lds.S | ||
64 | +++ b/arch/powerpc/kernel/vmlinux.lds.S | ||
65 | @@ -213,6 +213,7 @@ SECTIONS | ||
66 | *(.opd) | ||
67 | } | ||
68 | |||
69 | + . = ALIGN(256); | ||
70 | .got : AT(ADDR(.got) - LOAD_OFFSET) { | ||
71 | __toc_start = .; | ||
72 | #ifndef CONFIG_RELOCATABLE | ||
73 | diff --git a/arch/s390/crypto/ghash_s390.c b/arch/s390/crypto/ghash_s390.c | ||
74 | index 7940dc90e80b..b258110da952 100644 | ||
75 | --- a/arch/s390/crypto/ghash_s390.c | ||
76 | +++ b/arch/s390/crypto/ghash_s390.c | ||
77 | @@ -16,11 +16,12 @@ | ||
78 | #define GHASH_DIGEST_SIZE 16 | ||
79 | |||
80 | struct ghash_ctx { | ||
81 | - u8 icv[16]; | ||
82 | - u8 key[16]; | ||
83 | + u8 key[GHASH_BLOCK_SIZE]; | ||
84 | }; | ||
85 | |||
86 | struct ghash_desc_ctx { | ||
87 | + u8 icv[GHASH_BLOCK_SIZE]; | ||
88 | + u8 key[GHASH_BLOCK_SIZE]; | ||
89 | u8 buffer[GHASH_BLOCK_SIZE]; | ||
90 | u32 bytes; | ||
91 | }; | ||
92 | @@ -28,8 +29,10 @@ struct ghash_desc_ctx { | ||
93 | static int ghash_init(struct shash_desc *desc) | ||
94 | { | ||
95 | struct ghash_desc_ctx *dctx = shash_desc_ctx(desc); | ||
96 | + struct ghash_ctx *ctx = crypto_shash_ctx(desc->tfm); | ||
97 | |||
98 | memset(dctx, 0, sizeof(*dctx)); | ||
99 | + memcpy(dctx->key, ctx->key, GHASH_BLOCK_SIZE); | ||
100 | |||
101 | return 0; | ||
102 | } | ||
103 | @@ -45,7 +48,6 @@ static int ghash_setkey(struct crypto_shash *tfm, | ||
104 | } | ||
105 | |||
106 | memcpy(ctx->key, key, GHASH_BLOCK_SIZE); | ||
107 | - memset(ctx->icv, 0, GHASH_BLOCK_SIZE); | ||
108 | |||
109 | return 0; | ||
110 | } | ||
111 | @@ -54,7 +56,6 @@ static int ghash_update(struct shash_desc *desc, | ||
112 | const u8 *src, unsigned int srclen) | ||
113 | { | ||
114 | struct ghash_desc_ctx *dctx = shash_desc_ctx(desc); | ||
115 | - struct ghash_ctx *ctx = crypto_shash_ctx(desc->tfm); | ||
116 | unsigned int n; | ||
117 | u8 *buf = dctx->buffer; | ||
118 | int ret; | ||
119 | @@ -70,7 +71,7 @@ static int ghash_update(struct shash_desc *desc, | ||
120 | src += n; | ||
121 | |||
122 | if (!dctx->bytes) { | ||
123 | - ret = crypt_s390_kimd(KIMD_GHASH, ctx, buf, | ||
124 | + ret = crypt_s390_kimd(KIMD_GHASH, dctx, buf, | ||
125 | GHASH_BLOCK_SIZE); | ||
126 | if (ret != GHASH_BLOCK_SIZE) | ||
127 | return -EIO; | ||
128 | @@ -79,7 +80,7 @@ static int ghash_update(struct shash_desc *desc, | ||
129 | |||
130 | n = srclen & ~(GHASH_BLOCK_SIZE - 1); | ||
131 | if (n) { | ||
132 | - ret = crypt_s390_kimd(KIMD_GHASH, ctx, src, n); | ||
133 | + ret = crypt_s390_kimd(KIMD_GHASH, dctx, src, n); | ||
134 | if (ret != n) | ||
135 | return -EIO; | ||
136 | src += n; | ||
137 | @@ -94,7 +95,7 @@ static int ghash_update(struct shash_desc *desc, | ||
138 | return 0; | ||
139 | } | ||
140 | |||
141 | -static int ghash_flush(struct ghash_ctx *ctx, struct ghash_desc_ctx *dctx) | ||
142 | +static int ghash_flush(struct ghash_desc_ctx *dctx) | ||
143 | { | ||
144 | u8 *buf = dctx->buffer; | ||
145 | int ret; | ||
146 | @@ -104,24 +105,24 @@ static int ghash_flush(struct ghash_ctx *ctx, struct ghash_desc_ctx *dctx) | ||
147 | |||
148 | memset(pos, 0, dctx->bytes); | ||
149 | |||
150 | - ret = crypt_s390_kimd(KIMD_GHASH, ctx, buf, GHASH_BLOCK_SIZE); | ||
151 | + ret = crypt_s390_kimd(KIMD_GHASH, dctx, buf, GHASH_BLOCK_SIZE); | ||
152 | if (ret != GHASH_BLOCK_SIZE) | ||
153 | return -EIO; | ||
154 | + | ||
155 | + dctx->bytes = 0; | ||
156 | } | ||
157 | |||
158 | - dctx->bytes = 0; | ||
159 | return 0; | ||
160 | } | ||
161 | |||
162 | static int ghash_final(struct shash_desc *desc, u8 *dst) | ||
163 | { | ||
164 | struct ghash_desc_ctx *dctx = shash_desc_ctx(desc); | ||
165 | - struct ghash_ctx *ctx = crypto_shash_ctx(desc->tfm); | ||
166 | int ret; | ||
167 | |||
168 | - ret = ghash_flush(ctx, dctx); | ||
169 | + ret = ghash_flush(dctx); | ||
170 | if (!ret) | ||
171 | - memcpy(dst, ctx->icv, GHASH_BLOCK_SIZE); | ||
172 | + memcpy(dst, dctx->icv, GHASH_BLOCK_SIZE); | ||
173 | return ret; | ||
174 | } | ||
175 | |||
176 | diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c | ||
177 | index e14b1f8667bb..5a75ebf3d69f 100644 | ||
178 | --- a/arch/x86/kvm/mmu.c | ||
179 | +++ b/arch/x86/kvm/mmu.c | ||
180 | @@ -3975,7 +3975,7 @@ void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa, | ||
181 | ++vcpu->kvm->stat.mmu_pte_write; | ||
182 | kvm_mmu_audit(vcpu, AUDIT_PRE_PTE_WRITE); | ||
183 | |||
184 | - mask.cr0_wp = mask.cr4_pae = mask.nxe = 1; | ||
185 | + mask.cr0_wp = mask.cr4_pae = mask.nxe = mask.smep_andnot_wp = 1; | ||
186 | for_each_gfn_indirect_valid_sp(vcpu->kvm, sp, gfn) { | ||
187 | if (detect_write_misaligned(sp, gpa, bytes) || | ||
188 | detect_write_flooding(sp)) { | ||
189 | diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c | ||
190 | index e72186340fec..11441ad69de3 100644 | ||
191 | --- a/drivers/acpi/osl.c | ||
192 | +++ b/drivers/acpi/osl.c | ||
193 | @@ -173,7 +173,7 @@ static void __init acpi_request_region (struct acpi_generic_address *gas, | ||
194 | request_mem_region(addr, length, desc); | ||
195 | } | ||
196 | |||
197 | -static int __init acpi_reserve_resources(void) | ||
198 | +static void __init acpi_reserve_resources(void) | ||
199 | { | ||
200 | acpi_request_region(&acpi_gbl_FADT.xpm1a_event_block, acpi_gbl_FADT.pm1_event_length, | ||
201 | "ACPI PM1a_EVT_BLK"); | ||
202 | @@ -202,10 +202,7 @@ static int __init acpi_reserve_resources(void) | ||
203 | if (!(acpi_gbl_FADT.gpe1_block_length & 0x1)) | ||
204 | acpi_request_region(&acpi_gbl_FADT.xgpe1_block, | ||
205 | acpi_gbl_FADT.gpe1_block_length, "ACPI GPE1_BLK"); | ||
206 | - | ||
207 | - return 0; | ||
208 | } | ||
209 | -device_initcall(acpi_reserve_resources); | ||
210 | |||
211 | void acpi_os_printf(const char *fmt, ...) | ||
212 | { | ||
213 | @@ -1727,6 +1724,7 @@ acpi_status __init acpi_os_initialize(void) | ||
214 | |||
215 | acpi_status __init acpi_os_initialize1(void) | ||
216 | { | ||
217 | + acpi_reserve_resources(); | ||
218 | kacpid_wq = alloc_workqueue("kacpid", 0, 1); | ||
219 | kacpi_notify_wq = alloc_workqueue("kacpi_notify", 0, 1); | ||
220 | kacpi_hotplug_wq = alloc_workqueue("kacpi_hotplug", 0, 1); | ||
221 | diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c | ||
222 | index 8905e03a53a2..cf5f35877559 100644 | ||
223 | --- a/drivers/ata/libahci.c | ||
224 | +++ b/drivers/ata/libahci.c | ||
225 | @@ -1684,8 +1684,7 @@ static void ahci_handle_port_interrupt(struct ata_port *ap, | ||
226 | if (unlikely(resetting)) | ||
227 | status &= ~PORT_IRQ_BAD_PMP; | ||
228 | |||
229 | - /* if LPM is enabled, PHYRDY doesn't mean anything */ | ||
230 | - if (ap->link.lpm_policy > ATA_LPM_MAX_POWER) { | ||
231 | + if (sata_lpm_ignore_phy_events(&ap->link)) { | ||
232 | status &= ~PORT_IRQ_PHYRDY; | ||
233 | ahci_scr_write(&ap->link, SCR_ERROR, SERR_PHYRDY_CHG); | ||
234 | } | ||
235 | diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c | ||
236 | index ca7c23d58a03..5d47a040129a 100644 | ||
237 | --- a/drivers/ata/libata-core.c | ||
238 | +++ b/drivers/ata/libata-core.c | ||
239 | @@ -6800,6 +6800,38 @@ u32 ata_wait_register(struct ata_port *ap, void __iomem *reg, u32 mask, u32 val, | ||
240 | return tmp; | ||
241 | } | ||
242 | |||
243 | +/** | ||
244 | + * sata_lpm_ignore_phy_events - test if PHY event should be ignored | ||
245 | + * @link: Link receiving the event | ||
246 | + * | ||
247 | + * Test whether the received PHY event has to be ignored or not. | ||
248 | + * | ||
249 | + * LOCKING: | ||
250 | + * None: | ||
251 | + * | ||
252 | + * RETURNS: | ||
253 | + * True if the event has to be ignored. | ||
254 | + */ | ||
255 | +bool sata_lpm_ignore_phy_events(struct ata_link *link) | ||
256 | +{ | ||
257 | + unsigned long lpm_timeout = link->last_lpm_change + | ||
258 | + msecs_to_jiffies(ATA_TMOUT_SPURIOUS_PHY); | ||
259 | + | ||
260 | + /* if LPM is enabled, PHYRDY doesn't mean anything */ | ||
261 | + if (link->lpm_policy > ATA_LPM_MAX_POWER) | ||
262 | + return true; | ||
263 | + | ||
264 | + /* ignore the first PHY event after the LPM policy changed | ||
265 | + * as it is might be spurious | ||
266 | + */ | ||
267 | + if ((link->flags & ATA_LFLAG_CHANGED) && | ||
268 | + time_before(jiffies, lpm_timeout)) | ||
269 | + return true; | ||
270 | + | ||
271 | + return false; | ||
272 | +} | ||
273 | +EXPORT_SYMBOL_GPL(sata_lpm_ignore_phy_events); | ||
274 | + | ||
275 | /* | ||
276 | * Dummy port_ops | ||
277 | */ | ||
278 | diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c | ||
279 | index 370462fa8e01..063036d876b0 100644 | ||
280 | --- a/drivers/ata/libata-eh.c | ||
281 | +++ b/drivers/ata/libata-eh.c | ||
282 | @@ -3481,6 +3481,9 @@ static int ata_eh_set_lpm(struct ata_link *link, enum ata_lpm_policy policy, | ||
283 | } | ||
284 | } | ||
285 | |||
286 | + link->last_lpm_change = jiffies; | ||
287 | + link->flags |= ATA_LFLAG_CHANGED; | ||
288 | + | ||
289 | return 0; | ||
290 | |||
291 | fail: | ||
292 | diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h | ||
293 | index 47d8b68c5004..0ebe0c3f5074 100644 | ||
294 | --- a/drivers/gpu/drm/i915/i915_drv.h | ||
295 | +++ b/drivers/gpu/drm/i915/i915_drv.h | ||
296 | @@ -1804,7 +1804,7 @@ void i915_teardown_sysfs(struct drm_device *dev_priv); | ||
297 | /* intel_i2c.c */ | ||
298 | extern int intel_setup_gmbus(struct drm_device *dev); | ||
299 | extern void intel_teardown_gmbus(struct drm_device *dev); | ||
300 | -extern inline bool intel_gmbus_is_port_valid(unsigned port) | ||
301 | +static inline bool intel_gmbus_is_port_valid(unsigned port) | ||
302 | { | ||
303 | return (port >= GMBUS_PORT_SSC && port <= GMBUS_PORT_DPD); | ||
304 | } | ||
305 | @@ -1813,7 +1813,7 @@ extern struct i2c_adapter *intel_gmbus_get_adapter( | ||
306 | struct drm_i915_private *dev_priv, unsigned port); | ||
307 | extern void intel_gmbus_set_speed(struct i2c_adapter *adapter, int speed); | ||
308 | extern void intel_gmbus_force_bit(struct i2c_adapter *adapter, bool force_bit); | ||
309 | -extern inline bool intel_gmbus_is_forced_bit(struct i2c_adapter *adapter) | ||
310 | +static inline bool intel_gmbus_is_forced_bit(struct i2c_adapter *adapter) | ||
311 | { | ||
312 | return container_of(adapter, struct intel_gmbus, adapter)->force_bit; | ||
313 | } | ||
314 | diff --git a/drivers/hwmon/ntc_thermistor.c b/drivers/hwmon/ntc_thermistor.c | ||
315 | index c64d3d497c50..d7bb12ad4945 100644 | ||
316 | --- a/drivers/hwmon/ntc_thermistor.c | ||
317 | +++ b/drivers/hwmon/ntc_thermistor.c | ||
318 | @@ -181,8 +181,10 @@ static struct ntc_thermistor_platform_data * | ||
319 | ntc_thermistor_parse_dt(struct platform_device *pdev) | ||
320 | { | ||
321 | struct iio_channel *chan; | ||
322 | + enum iio_chan_type type; | ||
323 | struct device_node *np = pdev->dev.of_node; | ||
324 | struct ntc_thermistor_platform_data *pdata; | ||
325 | + int ret; | ||
326 | |||
327 | if (!np) | ||
328 | return NULL; | ||
329 | @@ -195,6 +197,13 @@ ntc_thermistor_parse_dt(struct platform_device *pdev) | ||
330 | if (IS_ERR(chan)) | ||
331 | return ERR_CAST(chan); | ||
332 | |||
333 | + ret = iio_get_channel_type(chan, &type); | ||
334 | + if (ret < 0) | ||
335 | + return ERR_PTR(ret); | ||
336 | + | ||
337 | + if (type != IIO_VOLTAGE) | ||
338 | + return ERR_PTR(-EINVAL); | ||
339 | + | ||
340 | if (of_property_read_u32(np, "pullup-uv", &pdata->pullup_uv)) | ||
341 | return ERR_PTR(-ENODEV); | ||
342 | if (of_property_read_u32(np, "pullup-ohm", &pdata->pullup_ohm)) | ||
343 | diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c | ||
344 | index 1af7df263368..dbd4f5ad3343 100644 | ||
345 | --- a/drivers/input/mouse/elantech.c | ||
346 | +++ b/drivers/input/mouse/elantech.c | ||
347 | @@ -314,7 +314,7 @@ static void elantech_report_semi_mt_data(struct input_dev *dev, | ||
348 | unsigned int x2, unsigned int y2) | ||
349 | { | ||
350 | elantech_set_slot(dev, 0, num_fingers != 0, x1, y1); | ||
351 | - elantech_set_slot(dev, 1, num_fingers == 2, x2, y2); | ||
352 | + elantech_set_slot(dev, 1, num_fingers >= 2, x2, y2); | ||
353 | } | ||
354 | |||
355 | /* | ||
356 | diff --git a/drivers/lguest/core.c b/drivers/lguest/core.c | ||
357 | index 0bf1e4edf04d..19da22249bd8 100644 | ||
358 | --- a/drivers/lguest/core.c | ||
359 | +++ b/drivers/lguest/core.c | ||
360 | @@ -176,7 +176,7 @@ static void unmap_switcher(void) | ||
361 | bool lguest_address_ok(const struct lguest *lg, | ||
362 | unsigned long addr, unsigned long len) | ||
363 | { | ||
364 | - return (addr+len) / PAGE_SIZE < lg->pfn_limit && (addr+len >= addr); | ||
365 | + return addr+len <= lg->pfn_limit * PAGE_SIZE && (addr+len >= addr); | ||
366 | } | ||
367 | |||
368 | /* | ||
369 | diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c | ||
370 | index 1b6986ce5da9..ef18ca745b1e 100644 | ||
371 | --- a/drivers/md/raid5.c | ||
372 | +++ b/drivers/md/raid5.c | ||
373 | @@ -1701,7 +1701,8 @@ static int resize_stripes(struct r5conf *conf, int newsize) | ||
374 | |||
375 | conf->slab_cache = sc; | ||
376 | conf->active_name = 1-conf->active_name; | ||
377 | - conf->pool_size = newsize; | ||
378 | + if (!err) | ||
379 | + conf->pool_size = newsize; | ||
380 | return err; | ||
381 | } | ||
382 | |||
383 | diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c | ||
384 | index 84b054b08462..e742761679fa 100644 | ||
385 | --- a/drivers/mmc/host/atmel-mci.c | ||
386 | +++ b/drivers/mmc/host/atmel-mci.c | ||
387 | @@ -1295,7 +1295,7 @@ static void atmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) | ||
388 | |||
389 | if (ios->clock) { | ||
390 | unsigned int clock_min = ~0U; | ||
391 | - u32 clkdiv; | ||
392 | + int clkdiv; | ||
393 | |||
394 | spin_lock_bh(&host->lock); | ||
395 | if (!host->mode_reg) { | ||
396 | @@ -1320,7 +1320,12 @@ static void atmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) | ||
397 | /* Calculate clock divider */ | ||
398 | if (host->caps.has_odd_clk_div) { | ||
399 | clkdiv = DIV_ROUND_UP(host->bus_hz, clock_min) - 2; | ||
400 | - if (clkdiv > 511) { | ||
401 | + if (clkdiv < 0) { | ||
402 | + dev_warn(&mmc->class_dev, | ||
403 | + "clock %u too fast; using %lu\n", | ||
404 | + clock_min, host->bus_hz / 2); | ||
405 | + clkdiv = 0; | ||
406 | + } else if (clkdiv > 511) { | ||
407 | dev_warn(&mmc->class_dev, | ||
408 | "clock %u too slow; using %lu\n", | ||
409 | clock_min, host->bus_hz / (511 + 2)); | ||
410 | diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c | ||
411 | index 400b8679796a..44b6715ccfb1 100644 | ||
412 | --- a/drivers/net/wireless/rt2x00/rt2800usb.c | ||
413 | +++ b/drivers/net/wireless/rt2x00/rt2800usb.c | ||
414 | @@ -1020,6 +1020,7 @@ static struct usb_device_id rt2800usb_device_table[] = { | ||
415 | { USB_DEVICE(0x07d1, 0x3c16) }, | ||
416 | { USB_DEVICE(0x07d1, 0x3c17) }, | ||
417 | { USB_DEVICE(0x2001, 0x3c1b) }, | ||
418 | + { USB_DEVICE(0x2001, 0x3c25) }, | ||
419 | /* Draytek */ | ||
420 | { USB_DEVICE(0x07fa, 0x7712) }, | ||
421 | /* DVICO */ | ||
422 | diff --git a/drivers/net/wireless/rtlwifi/usb.c b/drivers/net/wireless/rtlwifi/usb.c | ||
423 | index 57b12a5883a0..3ad79736b255 100644 | ||
424 | --- a/drivers/net/wireless/rtlwifi/usb.c | ||
425 | +++ b/drivers/net/wireless/rtlwifi/usb.c | ||
426 | @@ -119,7 +119,7 @@ static int _usbctrl_vendorreq_sync_read(struct usb_device *udev, u8 request, | ||
427 | |||
428 | do { | ||
429 | status = usb_control_msg(udev, pipe, request, reqtype, value, | ||
430 | - index, pdata, len, 0); /*max. timeout*/ | ||
431 | + index, pdata, len, 1000); | ||
432 | if (status < 0) { | ||
433 | /* firmware download is checksumed, don't retry */ | ||
434 | if ((value >= FW_8192C_START_ADDRESS && | ||
435 | diff --git a/drivers/staging/rtl8187se/ieee80211/ieee80211.h b/drivers/staging/rtl8187se/ieee80211/ieee80211.h | ||
436 | index 8fc9f588b056..9fdd566e8d4a 100644 | ||
437 | --- a/drivers/staging/rtl8187se/ieee80211/ieee80211.h | ||
438 | +++ b/drivers/staging/rtl8187se/ieee80211/ieee80211.h | ||
439 | @@ -1447,12 +1447,12 @@ extern void ieee80211_sta_ps_send_null_frame(struct ieee80211_device *ieee, shor | ||
440 | |||
441 | extern const long ieee80211_wlan_frequencies[]; | ||
442 | |||
443 | -extern inline void ieee80211_increment_scans(struct ieee80211_device *ieee) | ||
444 | +static inline void ieee80211_increment_scans(struct ieee80211_device *ieee) | ||
445 | { | ||
446 | ieee->scans++; | ||
447 | } | ||
448 | |||
449 | -extern inline int ieee80211_get_scans(struct ieee80211_device *ieee) | ||
450 | +static inline int ieee80211_get_scans(struct ieee80211_device *ieee) | ||
451 | { | ||
452 | return ieee->scans; | ||
453 | } | ||
454 | diff --git a/drivers/staging/rtl8192e/rtllib.h b/drivers/staging/rtl8192e/rtllib.h | ||
455 | index 3485ef1dfab1..f35948ec5ebf 100644 | ||
456 | --- a/drivers/staging/rtl8192e/rtllib.h | ||
457 | +++ b/drivers/staging/rtl8192e/rtllib.h | ||
458 | @@ -2761,7 +2761,6 @@ extern void rtllib_stop_scan(struct rtllib_device *ieee); | ||
459 | extern bool rtllib_act_scanning(struct rtllib_device *ieee, bool sync_scan); | ||
460 | extern void rtllib_stop_scan_syncro(struct rtllib_device *ieee); | ||
461 | extern void rtllib_start_scan_syncro(struct rtllib_device *ieee, u8 is_mesh); | ||
462 | -extern inline struct sk_buff *rtllib_probe_req(struct rtllib_device *ieee); | ||
463 | extern u8 MgntQuery_MgntFrameTxRate(struct rtllib_device *ieee); | ||
464 | extern void rtllib_sta_ps_send_null_frame(struct rtllib_device *ieee, | ||
465 | short pwr); | ||
466 | @@ -2943,12 +2942,12 @@ void rtllib_softmac_scan_syncro(struct rtllib_device *ieee, u8 is_mesh); | ||
467 | |||
468 | extern const long rtllib_wlan_frequencies[]; | ||
469 | |||
470 | -extern inline void rtllib_increment_scans(struct rtllib_device *ieee) | ||
471 | +static inline void rtllib_increment_scans(struct rtllib_device *ieee) | ||
472 | { | ||
473 | ieee->scans++; | ||
474 | } | ||
475 | |||
476 | -extern inline int rtllib_get_scans(struct rtllib_device *ieee) | ||
477 | +static inline int rtllib_get_scans(struct rtllib_device *ieee) | ||
478 | { | ||
479 | return ieee->scans; | ||
480 | } | ||
481 | diff --git a/drivers/staging/rtl8192e/rtllib_softmac.c b/drivers/staging/rtl8192e/rtllib_softmac.c | ||
482 | index 4feecec8609c..0e4e83758d6a 100644 | ||
483 | --- a/drivers/staging/rtl8192e/rtllib_softmac.c | ||
484 | +++ b/drivers/staging/rtl8192e/rtllib_softmac.c | ||
485 | @@ -341,7 +341,7 @@ inline void softmac_ps_mgmt_xmit(struct sk_buff *skb, | ||
486 | } | ||
487 | } | ||
488 | |||
489 | -inline struct sk_buff *rtllib_probe_req(struct rtllib_device *ieee) | ||
490 | +static inline struct sk_buff *rtllib_probe_req(struct rtllib_device *ieee) | ||
491 | { | ||
492 | unsigned int len, rate_len; | ||
493 | u8 *tag; | ||
494 | diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211.h b/drivers/staging/rtl8192u/ieee80211/ieee80211.h | ||
495 | index 210898c8e66c..e1339c33888f 100644 | ||
496 | --- a/drivers/staging/rtl8192u/ieee80211/ieee80211.h | ||
497 | +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211.h | ||
498 | @@ -2250,7 +2250,7 @@ static inline void *ieee80211_priv(struct net_device *dev) | ||
499 | return ((struct ieee80211_device *)netdev_priv(dev))->priv; | ||
500 | } | ||
501 | |||
502 | -extern inline int ieee80211_is_empty_essid(const char *essid, int essid_len) | ||
503 | +static inline int ieee80211_is_empty_essid(const char *essid, int essid_len) | ||
504 | { | ||
505 | /* Single white space is for Linksys APs */ | ||
506 | if (essid_len == 1 && essid[0] == ' ') | ||
507 | @@ -2266,7 +2266,7 @@ extern inline int ieee80211_is_empty_essid(const char *essid, int essid_len) | ||
508 | return 1; | ||
509 | } | ||
510 | |||
511 | -extern inline int ieee80211_is_valid_mode(struct ieee80211_device *ieee, int mode) | ||
512 | +static inline int ieee80211_is_valid_mode(struct ieee80211_device *ieee, int mode) | ||
513 | { | ||
514 | /* | ||
515 | * It is possible for both access points and our device to support | ||
516 | @@ -2292,7 +2292,7 @@ extern inline int ieee80211_is_valid_mode(struct ieee80211_device *ieee, int mod | ||
517 | return 0; | ||
518 | } | ||
519 | |||
520 | -extern inline int ieee80211_get_hdrlen(u16 fc) | ||
521 | +static inline int ieee80211_get_hdrlen(u16 fc) | ||
522 | { | ||
523 | int hdrlen = IEEE80211_3ADDR_LEN; | ||
524 | |||
525 | @@ -2578,12 +2578,12 @@ void ieee80211_softmac_scan_syncro(struct ieee80211_device *ieee); | ||
526 | |||
527 | extern const long ieee80211_wlan_frequencies[]; | ||
528 | |||
529 | -extern inline void ieee80211_increment_scans(struct ieee80211_device *ieee) | ||
530 | +static inline void ieee80211_increment_scans(struct ieee80211_device *ieee) | ||
531 | { | ||
532 | ieee->scans++; | ||
533 | } | ||
534 | |||
535 | -extern inline int ieee80211_get_scans(struct ieee80211_device *ieee) | ||
536 | +static inline int ieee80211_get_scans(struct ieee80211_device *ieee) | ||
537 | { | ||
538 | return ieee->scans; | ||
539 | } | ||
540 | diff --git a/drivers/staging/rtl8712/ieee80211.h b/drivers/staging/rtl8712/ieee80211.h | ||
541 | index da4000e49da6..8269be80437a 100644 | ||
542 | --- a/drivers/staging/rtl8712/ieee80211.h | ||
543 | +++ b/drivers/staging/rtl8712/ieee80211.h | ||
544 | @@ -734,7 +734,7 @@ enum ieee80211_state { | ||
545 | #define IEEE_G (1<<2) | ||
546 | #define IEEE_MODE_MASK (IEEE_A|IEEE_B|IEEE_G) | ||
547 | |||
548 | -extern inline int ieee80211_is_empty_essid(const char *essid, int essid_len) | ||
549 | +static inline int ieee80211_is_empty_essid(const char *essid, int essid_len) | ||
550 | { | ||
551 | /* Single white space is for Linksys APs */ | ||
552 | if (essid_len == 1 && essid[0] == ' ') | ||
553 | @@ -748,7 +748,7 @@ extern inline int ieee80211_is_empty_essid(const char *essid, int essid_len) | ||
554 | return 1; | ||
555 | } | ||
556 | |||
557 | -extern inline int ieee80211_get_hdrlen(u16 fc) | ||
558 | +static inline int ieee80211_get_hdrlen(u16 fc) | ||
559 | { | ||
560 | int hdrlen = 24; | ||
561 | |||
562 | diff --git a/drivers/staging/wlags49_h2/wl_internal.h b/drivers/staging/wlags49_h2/wl_internal.h | ||
563 | index b23078164149..11b00c39a98c 100644 | ||
564 | --- a/drivers/staging/wlags49_h2/wl_internal.h | ||
565 | +++ b/drivers/staging/wlags49_h2/wl_internal.h | ||
566 | @@ -1014,7 +1014,7 @@ static inline void wl_unlock(struct wl_private *lp, | ||
567 | /* Interrupt enable disable functions */ | ||
568 | /********************************************************************/ | ||
569 | |||
570 | -extern inline void wl_act_int_on(struct wl_private *lp) | ||
571 | +static inline void wl_act_int_on(struct wl_private *lp) | ||
572 | { | ||
573 | /* | ||
574 | * Only do something when the driver is handling | ||
575 | @@ -1026,7 +1026,7 @@ extern inline void wl_act_int_on(struct wl_private *lp) | ||
576 | } | ||
577 | } | ||
578 | |||
579 | -extern inline void wl_act_int_off(struct wl_private *lp) | ||
580 | +static inline void wl_act_int_off(struct wl_private *lp) | ||
581 | { | ||
582 | /* | ||
583 | * Only do something when the driver is handling | ||
584 | diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c | ||
585 | index b1e77ff9a636..244776bec1c7 100644 | ||
586 | --- a/drivers/target/target_core_pscsi.c | ||
587 | +++ b/drivers/target/target_core_pscsi.c | ||
588 | @@ -520,6 +520,7 @@ static int pscsi_configure_device(struct se_device *dev) | ||
589 | " pdv_host_id: %d\n", pdv->pdv_host_id); | ||
590 | return -EINVAL; | ||
591 | } | ||
592 | + pdv->pdv_lld_host = sh; | ||
593 | } | ||
594 | } else { | ||
595 | if (phv->phv_mode == PHV_VIRTUAL_HOST_ID) { | ||
596 | @@ -602,6 +603,8 @@ static void pscsi_free_device(struct se_device *dev) | ||
597 | if ((phv->phv_mode == PHV_LLD_SCSI_HOST_NO) && | ||
598 | (phv->phv_lld_host != NULL)) | ||
599 | scsi_host_put(phv->phv_lld_host); | ||
600 | + else if (pdv->pdv_lld_host) | ||
601 | + scsi_host_put(pdv->pdv_lld_host); | ||
602 | |||
603 | if ((sd->type == TYPE_DISK) || (sd->type == TYPE_ROM)) | ||
604 | scsi_device_put(sd); | ||
605 | diff --git a/drivers/target/target_core_pscsi.h b/drivers/target/target_core_pscsi.h | ||
606 | index 1bd757dff8ee..820d3052b775 100644 | ||
607 | --- a/drivers/target/target_core_pscsi.h | ||
608 | +++ b/drivers/target/target_core_pscsi.h | ||
609 | @@ -45,6 +45,7 @@ struct pscsi_dev_virt { | ||
610 | int pdv_lun_id; | ||
611 | struct block_device *pdv_bd; | ||
612 | struct scsi_device *pdv_sd; | ||
613 | + struct Scsi_Host *pdv_lld_host; | ||
614 | } ____cacheline_aligned; | ||
615 | |||
616 | typedef enum phv_modes { | ||
617 | diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c | ||
618 | index 80e7f75a56c7..3dab424515ef 100644 | ||
619 | --- a/drivers/usb/gadget/configfs.c | ||
620 | +++ b/drivers/usb/gadget/configfs.c | ||
621 | @@ -757,6 +757,7 @@ static void purge_configs_funcs(struct gadget_info *gi) | ||
622 | } | ||
623 | } | ||
624 | c->next_interface_id = 0; | ||
625 | + memset(c->interface, 0, sizeof(c->interface)); | ||
626 | c->superspeed = 0; | ||
627 | c->highspeed = 0; | ||
628 | c->fullspeed = 0; | ||
629 | diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c | ||
630 | index bc7a886e3c36..30533952b4a3 100644 | ||
631 | --- a/drivers/usb/host/xhci-ring.c | ||
632 | +++ b/drivers/usb/host/xhci-ring.c | ||
633 | @@ -2144,8 +2144,13 @@ static int process_isoc_td(struct xhci_hcd *xhci, struct xhci_td *td, | ||
634 | break; | ||
635 | case COMP_DEV_ERR: | ||
636 | case COMP_STALL: | ||
637 | + frame->status = -EPROTO; | ||
638 | + skip_td = true; | ||
639 | + break; | ||
640 | case COMP_TX_ERR: | ||
641 | frame->status = -EPROTO; | ||
642 | + if (event_trb != td->last_trb) | ||
643 | + return 0; | ||
644 | skip_td = true; | ||
645 | break; | ||
646 | case COMP_STOP: | ||
647 | @@ -2762,7 +2767,7 @@ irqreturn_t xhci_irq(struct usb_hcd *hcd) | ||
648 | xhci_halt(xhci); | ||
649 | hw_died: | ||
650 | spin_unlock(&xhci->lock); | ||
651 | - return -ESHUTDOWN; | ||
652 | + return IRQ_HANDLED; | ||
653 | } | ||
654 | |||
655 | /* | ||
656 | diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h | ||
657 | index 373d4dada565..ed8de724b285 100644 | ||
658 | --- a/drivers/usb/host/xhci.h | ||
659 | +++ b/drivers/usb/host/xhci.h | ||
660 | @@ -1237,7 +1237,7 @@ union xhci_trb { | ||
661 | * since the command ring is 64-byte aligned. | ||
662 | * It must also be greater than 16. | ||
663 | */ | ||
664 | -#define TRBS_PER_SEGMENT 64 | ||
665 | +#define TRBS_PER_SEGMENT 256 | ||
666 | /* Allow two commands + a link TRB, along with any reserved command TRBs */ | ||
667 | #define MAX_RSVD_CMD_TRBS (TRBS_PER_SEGMENT - 3) | ||
668 | #define TRB_SEGMENT_SIZE (TRBS_PER_SEGMENT*16) | ||
669 | diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c | ||
670 | index 79e9ea005c63..691a82105180 100644 | ||
671 | --- a/drivers/usb/serial/cp210x.c | ||
672 | +++ b/drivers/usb/serial/cp210x.c | ||
673 | @@ -127,6 +127,7 @@ static const struct usb_device_id id_table[] = { | ||
674 | { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */ | ||
675 | { USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */ | ||
676 | { USB_DEVICE(0x10C4, 0x8977) }, /* CEL MeshWorks DevKit Device */ | ||
677 | + { USB_DEVICE(0x10C4, 0x8998) }, /* KCF Technologies PRN */ | ||
678 | { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ | ||
679 | { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ | ||
680 | { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */ | ||
681 | diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c | ||
682 | index de3e15d8eb10..33313caed504 100644 | ||
683 | --- a/drivers/usb/serial/pl2303.c | ||
684 | +++ b/drivers/usb/serial/pl2303.c | ||
685 | @@ -63,7 +63,6 @@ static const struct usb_device_id id_table[] = { | ||
686 | { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) }, | ||
687 | { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) }, | ||
688 | { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) }, | ||
689 | - { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) }, | ||
690 | { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1) }, | ||
691 | { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) }, | ||
692 | { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75) }, | ||
693 | diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h | ||
694 | index 71fd9da1d6e7..e3b7af8adfb7 100644 | ||
695 | --- a/drivers/usb/serial/pl2303.h | ||
696 | +++ b/drivers/usb/serial/pl2303.h | ||
697 | @@ -62,10 +62,6 @@ | ||
698 | #define ALCATEL_VENDOR_ID 0x11f7 | ||
699 | #define ALCATEL_PRODUCT_ID 0x02df | ||
700 | |||
701 | -/* Samsung I330 phone cradle */ | ||
702 | -#define SAMSUNG_VENDOR_ID 0x04e8 | ||
703 | -#define SAMSUNG_PRODUCT_ID 0x8001 | ||
704 | - | ||
705 | #define SIEMENS_VENDOR_ID 0x11f5 | ||
706 | #define SIEMENS_PRODUCT_ID_SX1 0x0001 | ||
707 | #define SIEMENS_PRODUCT_ID_X65 0x0003 | ||
708 | diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c | ||
709 | index 9910aa2edf4b..727905de0ba4 100644 | ||
710 | --- a/drivers/usb/serial/visor.c | ||
711 | +++ b/drivers/usb/serial/visor.c | ||
712 | @@ -96,7 +96,7 @@ static struct usb_device_id id_table [] = { | ||
713 | .driver_info = (kernel_ulong_t)&palm_os_4_probe }, | ||
714 | { USB_DEVICE(ACER_VENDOR_ID, ACER_S10_ID), | ||
715 | .driver_info = (kernel_ulong_t)&palm_os_4_probe }, | ||
716 | - { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_SCH_I330_ID), | ||
717 | + { USB_DEVICE_INTERFACE_CLASS(SAMSUNG_VENDOR_ID, SAMSUNG_SCH_I330_ID, 0xff), | ||
718 | .driver_info = (kernel_ulong_t)&palm_os_4_probe }, | ||
719 | { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_SPH_I500_ID), | ||
720 | .driver_info = (kernel_ulong_t)&palm_os_4_probe }, | ||
721 | diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h | ||
722 | index 7f625306ea80..821e1e2f70f6 100644 | ||
723 | --- a/drivers/usb/storage/unusual_devs.h | ||
724 | +++ b/drivers/usb/storage/unusual_devs.h | ||
725 | @@ -760,6 +760,13 @@ UNUSUAL_DEV( 0x059f, 0x0643, 0x0000, 0x0000, | ||
726 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | ||
727 | US_FL_GO_SLOW ), | ||
728 | |||
729 | +/* Reported by Christian Schaller <cschalle@redhat.com> */ | ||
730 | +UNUSUAL_DEV( 0x059f, 0x0651, 0x0000, 0x0000, | ||
731 | + "LaCie", | ||
732 | + "External HDD", | ||
733 | + USB_SC_DEVICE, USB_PR_DEVICE, NULL, | ||
734 | + US_FL_NO_WP_DETECT ), | ||
735 | + | ||
736 | /* Submitted by Joel Bourquard <numlock@freesurf.ch> | ||
737 | * Some versions of this device need the SubClass and Protocol overrides | ||
738 | * while others don't. | ||
739 | diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c | ||
740 | index 53f620a4350e..618bcc84a09e 100644 | ||
741 | --- a/fs/binfmt_elf.c | ||
742 | +++ b/fs/binfmt_elf.c | ||
743 | @@ -824,7 +824,7 @@ static int load_elf_binary(struct linux_binprm *bprm) | ||
744 | total_size = total_mapping_size(elf_phdata, | ||
745 | loc->elf_ex.e_phnum); | ||
746 | if (!total_size) { | ||
747 | - error = -EINVAL; | ||
748 | + retval = -EINVAL; | ||
749 | goto out_free_dentry; | ||
750 | } | ||
751 | } | ||
752 | diff --git a/fs/dcache.c b/fs/dcache.c | ||
753 | index efa4602e064f..e2800926ae05 100644 | ||
754 | --- a/fs/dcache.c | ||
755 | +++ b/fs/dcache.c | ||
756 | @@ -1179,13 +1179,13 @@ ascend: | ||
757 | /* might go back up the wrong parent if we have had a rename. */ | ||
758 | if (!locked && read_seqretry(&rename_lock, seq)) | ||
759 | goto rename_retry; | ||
760 | - next = child->d_child.next; | ||
761 | - while (unlikely(child->d_flags & DCACHE_DENTRY_KILLED)) { | ||
762 | + /* go into the first sibling still alive */ | ||
763 | + do { | ||
764 | + next = child->d_child.next; | ||
765 | if (next == &this_parent->d_subdirs) | ||
766 | goto ascend; | ||
767 | child = list_entry(next, struct dentry, d_child); | ||
768 | - next = next->next; | ||
769 | - } | ||
770 | + } while (unlikely(child->d_flags & DCACHE_DENTRY_KILLED)); | ||
771 | rcu_read_unlock(); | ||
772 | goto resume; | ||
773 | } | ||
774 | diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c | ||
775 | index 7fbd1c5b74af..df633bb25909 100644 | ||
776 | --- a/fs/ext4/extents.c | ||
777 | +++ b/fs/ext4/extents.c | ||
778 | @@ -363,7 +363,7 @@ static int ext4_valid_extent(struct inode *inode, struct ext4_extent *ext) | ||
779 | ext4_lblk_t lblock = le32_to_cpu(ext->ee_block); | ||
780 | ext4_lblk_t last = lblock + len - 1; | ||
781 | |||
782 | - if (lblock > last) | ||
783 | + if (len == 0 || lblock > last) | ||
784 | return 0; | ||
785 | return ext4_data_block_valid(EXT4_SB(inode->i_sb), block, len); | ||
786 | } | ||
787 | diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c | ||
788 | index 9e3d8dd6c40a..8a277505a3be 100644 | ||
789 | --- a/fs/ext4/inode.c | ||
790 | +++ b/fs/ext4/inode.c | ||
791 | @@ -1032,7 +1032,8 @@ retry_journal: | ||
792 | ext4_journal_stop(handle); | ||
793 | goto retry_grab; | ||
794 | } | ||
795 | - wait_on_page_writeback(page); | ||
796 | + /* In case writeback began while the page was unlocked */ | ||
797 | + wait_for_stable_page(page); | ||
798 | |||
799 | if (ext4_should_dioread_nolock(inode)) | ||
800 | ret = __block_write_begin(page, pos, len, ext4_get_block_write); | ||
801 | @@ -2729,7 +2730,7 @@ retry_journal: | ||
802 | goto retry_grab; | ||
803 | } | ||
804 | /* In case writeback began while the page was unlocked */ | ||
805 | - wait_on_page_writeback(page); | ||
806 | + wait_for_stable_page(page); | ||
807 | |||
808 | ret = __block_write_begin(page, pos, len, ext4_da_get_block_prep); | ||
809 | if (ret < 0) { | ||
810 | diff --git a/fs/fhandle.c b/fs/fhandle.c | ||
811 | index 999ff5c3cab0..d59712dfa3e7 100644 | ||
812 | --- a/fs/fhandle.c | ||
813 | +++ b/fs/fhandle.c | ||
814 | @@ -195,8 +195,9 @@ static int handle_to_path(int mountdirfd, struct file_handle __user *ufh, | ||
815 | goto out_err; | ||
816 | } | ||
817 | /* copy the full handle */ | ||
818 | - if (copy_from_user(handle, ufh, | ||
819 | - sizeof(struct file_handle) + | ||
820 | + *handle = f_handle; | ||
821 | + if (copy_from_user(&handle->f_handle, | ||
822 | + &ufh->f_handle, | ||
823 | f_handle.handle_bytes)) { | ||
824 | retval = -EFAULT; | ||
825 | goto out_handle; | ||
826 | diff --git a/fs/omfs/inode.c b/fs/omfs/inode.c | ||
827 | index d8b0afde2179..2dba0caf1f4a 100644 | ||
828 | --- a/fs/omfs/inode.c | ||
829 | +++ b/fs/omfs/inode.c | ||
830 | @@ -361,7 +361,7 @@ nomem: | ||
831 | } | ||
832 | |||
833 | enum { | ||
834 | - Opt_uid, Opt_gid, Opt_umask, Opt_dmask, Opt_fmask | ||
835 | + Opt_uid, Opt_gid, Opt_umask, Opt_dmask, Opt_fmask, Opt_err | ||
836 | }; | ||
837 | |||
838 | static const match_table_t tokens = { | ||
839 | @@ -370,6 +370,7 @@ static const match_table_t tokens = { | ||
840 | {Opt_umask, "umask=%o"}, | ||
841 | {Opt_dmask, "dmask=%o"}, | ||
842 | {Opt_fmask, "fmask=%o"}, | ||
843 | + {Opt_err, NULL}, | ||
844 | }; | ||
845 | |||
846 | static int parse_options(char *options, struct omfs_sb_info *sbi) | ||
847 | diff --git a/include/linux/libata.h b/include/linux/libata.h | ||
848 | index cc82cfb66259..8e5d45fa83cf 100644 | ||
849 | --- a/include/linux/libata.h | ||
850 | +++ b/include/linux/libata.h | ||
851 | @@ -187,6 +187,7 @@ enum { | ||
852 | ATA_LFLAG_SW_ACTIVITY = (1 << 7), /* keep activity stats */ | ||
853 | ATA_LFLAG_NO_LPM = (1 << 8), /* disable LPM on this link */ | ||
854 | ATA_LFLAG_RST_ONCE = (1 << 9), /* limit recovery to one reset */ | ||
855 | + ATA_LFLAG_CHANGED = (1 << 10), /* LPM state changed on this link */ | ||
856 | |||
857 | /* struct ata_port flags */ | ||
858 | ATA_FLAG_SLAVE_POSS = (1 << 0), /* host supports slave dev */ | ||
859 | @@ -289,6 +290,12 @@ enum { | ||
860 | */ | ||
861 | ATA_TMOUT_PMP_SRST_WAIT = 5000, | ||
862 | |||
863 | + /* When the LPM policy is set to ATA_LPM_MAX_POWER, there might | ||
864 | + * be a spurious PHY event, so ignore the first PHY event that | ||
865 | + * occurs within 10s after the policy change. | ||
866 | + */ | ||
867 | + ATA_TMOUT_SPURIOUS_PHY = 10000, | ||
868 | + | ||
869 | /* ATA bus states */ | ||
870 | BUS_UNKNOWN = 0, | ||
871 | BUS_DMA = 1, | ||
872 | @@ -736,6 +743,8 @@ struct ata_link { | ||
873 | struct ata_eh_context eh_context; | ||
874 | |||
875 | struct ata_device device[ATA_MAX_DEVICES]; | ||
876 | + | ||
877 | + unsigned long last_lpm_change; /* when last LPM change happened */ | ||
878 | }; | ||
879 | #define ATA_LINK_CLEAR_BEGIN offsetof(struct ata_link, active_tag) | ||
880 | #define ATA_LINK_CLEAR_END offsetof(struct ata_link, device[0]) | ||
881 | @@ -1085,6 +1094,7 @@ extern struct ata_device *ata_dev_pair(struct ata_device *adev); | ||
882 | extern int ata_do_set_mode(struct ata_link *link, struct ata_device **r_failed_dev); | ||
883 | extern void ata_scsi_port_error_handler(struct Scsi_Host *host, struct ata_port *ap); | ||
884 | extern void ata_scsi_cmd_error_handler(struct Scsi_Host *host, struct ata_port *ap, struct list_head *eh_q); | ||
885 | +extern bool sata_lpm_ignore_phy_events(struct ata_link *link); | ||
886 | |||
887 | extern int ata_cable_40wire(struct ata_port *ap); | ||
888 | extern int ata_cable_80wire(struct ata_port *ap); | ||
889 | diff --git a/lib/strnlen_user.c b/lib/strnlen_user.c | ||
890 | index a28df5206d95..11649615c505 100644 | ||
891 | --- a/lib/strnlen_user.c | ||
892 | +++ b/lib/strnlen_user.c | ||
893 | @@ -57,7 +57,8 @@ static inline long do_strnlen_user(const char __user *src, unsigned long count, | ||
894 | return res + find_zero(data) + 1 - align; | ||
895 | } | ||
896 | res += sizeof(unsigned long); | ||
897 | - if (unlikely(max < sizeof(unsigned long))) | ||
898 | + /* We already handled 'unsigned long' bytes. Did we do it all ? */ | ||
899 | + if (unlikely(max <= sizeof(unsigned long))) | ||
900 | break; | ||
901 | max -= sizeof(unsigned long); | ||
902 | if (unlikely(__get_user(c,(unsigned long __user *)(src+res)))) | ||
903 | diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c | ||
904 | index 1b51d9216e7e..7665ce336e2b 100644 | ||
905 | --- a/net/ceph/osd_client.c | ||
906 | +++ b/net/ceph/osd_client.c | ||
907 | @@ -1702,20 +1702,29 @@ static void kick_requests(struct ceph_osd_client *osdc, bool force_resend, | ||
908 | err = __map_request(osdc, req, | ||
909 | force_resend || force_resend_writes); | ||
910 | dout("__map_request returned %d\n", err); | ||
911 | - if (err == 0) | ||
912 | - continue; /* no change and no osd was specified */ | ||
913 | if (err < 0) | ||
914 | continue; /* hrm! */ | ||
915 | - if (req->r_osd == NULL) { | ||
916 | - dout("tid %llu maps to no valid osd\n", req->r_tid); | ||
917 | - needmap++; /* request a newer map */ | ||
918 | - continue; | ||
919 | - } | ||
920 | + if (req->r_osd == NULL || err > 0) { | ||
921 | + if (req->r_osd == NULL) { | ||
922 | + dout("lingering %p tid %llu maps to no osd\n", | ||
923 | + req, req->r_tid); | ||
924 | + /* | ||
925 | + * A homeless lingering request makes | ||
926 | + * no sense, as it's job is to keep | ||
927 | + * a particular OSD connection open. | ||
928 | + * Request a newer map and kick the | ||
929 | + * request, knowing that it won't be | ||
930 | + * resent until we actually get a map | ||
931 | + * that can tell us where to send it. | ||
932 | + */ | ||
933 | + needmap++; | ||
934 | + } | ||
935 | |||
936 | - dout("kicking lingering %p tid %llu osd%d\n", req, req->r_tid, | ||
937 | - req->r_osd ? req->r_osd->o_osd : -1); | ||
938 | - __register_request(osdc, req); | ||
939 | - __unregister_linger_request(osdc, req); | ||
940 | + dout("kicking lingering %p tid %llu osd%d\n", req, | ||
941 | + req->r_tid, req->r_osd ? req->r_osd->o_osd : -1); | ||
942 | + __register_request(osdc, req); | ||
943 | + __unregister_linger_request(osdc, req); | ||
944 | + } | ||
945 | } | ||
946 | reset_changed_osds(osdc); | ||
947 | mutex_unlock(&osdc->request_mutex); | ||
948 | diff --git a/net/socket.c b/net/socket.c | ||
949 | index fc90b4f0da3c..53b6e411f7a4 100644 | ||
950 | --- a/net/socket.c | ||
951 | +++ b/net/socket.c | ||
952 | @@ -1988,14 +1988,12 @@ static int ___sys_sendmsg(struct socket *sock, struct msghdr __user *msg, | ||
953 | int err, ctl_len, total_len; | ||
954 | |||
955 | err = -EFAULT; | ||
956 | - if (MSG_CMSG_COMPAT & flags) { | ||
957 | - if (get_compat_msghdr(msg_sys, msg_compat)) | ||
958 | - return -EFAULT; | ||
959 | - } else { | ||
960 | + if (MSG_CMSG_COMPAT & flags) | ||
961 | + err = get_compat_msghdr(msg_sys, msg_compat); | ||
962 | + else | ||
963 | err = copy_msghdr_from_user(msg_sys, msg); | ||
964 | - if (err) | ||
965 | - return err; | ||
966 | - } | ||
967 | + if (err) | ||
968 | + return err; | ||
969 | |||
970 | if (msg_sys->msg_iovlen > UIO_FASTIOV) { | ||
971 | err = -EMSGSIZE; | ||
972 | @@ -2200,14 +2198,12 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg, | ||
973 | struct sockaddr __user *uaddr; | ||
974 | int __user *uaddr_len; | ||
975 | |||
976 | - if (MSG_CMSG_COMPAT & flags) { | ||
977 | - if (get_compat_msghdr(msg_sys, msg_compat)) | ||
978 | - return -EFAULT; | ||
979 | - } else { | ||
980 | + if (MSG_CMSG_COMPAT & flags) | ||
981 | + err = get_compat_msghdr(msg_sys, msg_compat); | ||
982 | + else | ||
983 | err = copy_msghdr_from_user(msg_sys, msg); | ||
984 | - if (err) | ||
985 | - return err; | ||
986 | - } | ||
987 | + if (err) | ||
988 | + return err; | ||
989 | |||
990 | if (msg_sys->msg_iovlen > UIO_FASTIOV) { | ||
991 | err = -EMSGSIZE; | ||
992 | diff --git a/net/sunrpc/auth_gss/gss_rpc_xdr.c b/net/sunrpc/auth_gss/gss_rpc_xdr.c | ||
993 | index f0f78c5f1c7d..e0062c544ac8 100644 | ||
994 | --- a/net/sunrpc/auth_gss/gss_rpc_xdr.c | ||
995 | +++ b/net/sunrpc/auth_gss/gss_rpc_xdr.c | ||
996 | @@ -794,20 +794,26 @@ int gssx_dec_accept_sec_context(struct rpc_rqst *rqstp, | ||
997 | { | ||
998 | u32 value_follows; | ||
999 | int err; | ||
1000 | + struct page *scratch; | ||
1001 | + | ||
1002 | + scratch = alloc_page(GFP_KERNEL); | ||
1003 | + if (!scratch) | ||
1004 | + return -ENOMEM; | ||
1005 | + xdr_set_scratch_buffer(xdr, page_address(scratch), PAGE_SIZE); | ||
1006 | |||
1007 | /* res->status */ | ||
1008 | err = gssx_dec_status(xdr, &res->status); | ||
1009 | if (err) | ||
1010 | - return err; | ||
1011 | + goto out_free; | ||
1012 | |||
1013 | /* res->context_handle */ | ||
1014 | err = gssx_dec_bool(xdr, &value_follows); | ||
1015 | if (err) | ||
1016 | - return err; | ||
1017 | + goto out_free; | ||
1018 | if (value_follows) { | ||
1019 | err = gssx_dec_ctx(xdr, res->context_handle); | ||
1020 | if (err) | ||
1021 | - return err; | ||
1022 | + goto out_free; | ||
1023 | } else { | ||
1024 | res->context_handle = NULL; | ||
1025 | } | ||
1026 | @@ -815,11 +821,11 @@ int gssx_dec_accept_sec_context(struct rpc_rqst *rqstp, | ||
1027 | /* res->output_token */ | ||
1028 | err = gssx_dec_bool(xdr, &value_follows); | ||
1029 | if (err) | ||
1030 | - return err; | ||
1031 | + goto out_free; | ||
1032 | if (value_follows) { | ||
1033 | err = gssx_dec_buffer(xdr, res->output_token); | ||
1034 | if (err) | ||
1035 | - return err; | ||
1036 | + goto out_free; | ||
1037 | } else { | ||
1038 | res->output_token = NULL; | ||
1039 | } | ||
1040 | @@ -827,14 +833,17 @@ int gssx_dec_accept_sec_context(struct rpc_rqst *rqstp, | ||
1041 | /* res->delegated_cred_handle */ | ||
1042 | err = gssx_dec_bool(xdr, &value_follows); | ||
1043 | if (err) | ||
1044 | - return err; | ||
1045 | + goto out_free; | ||
1046 | if (value_follows) { | ||
1047 | /* we do not support upcall servers sending this data. */ | ||
1048 | - return -EINVAL; | ||
1049 | + err = -EINVAL; | ||
1050 | + goto out_free; | ||
1051 | } | ||
1052 | |||
1053 | /* res->options */ | ||
1054 | err = gssx_dec_option_array(xdr, &res->options); | ||
1055 | |||
1056 | +out_free: | ||
1057 | + __free_page(scratch); | ||
1058 | return err; | ||
1059 | } | ||
1060 | diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c | ||
1061 | index fab909908a42..3cda292f74e4 100644 | ||
1062 | --- a/sound/pci/hda/patch_conexant.c | ||
1063 | +++ b/sound/pci/hda/patch_conexant.c | ||
1064 | @@ -3490,6 +3490,14 @@ static const struct hda_codec_preset snd_hda_preset_conexant[] = { | ||
1065 | .patch = patch_conexant_auto }, | ||
1066 | { .id = 0x14f150b9, .name = "CX20665", | ||
1067 | .patch = patch_conexant_auto }, | ||
1068 | + { .id = 0x14f150f1, .name = "CX20721", | ||
1069 | + .patch = patch_conexant_auto }, | ||
1070 | + { .id = 0x14f150f2, .name = "CX20722", | ||
1071 | + .patch = patch_conexant_auto }, | ||
1072 | + { .id = 0x14f150f3, .name = "CX20723", | ||
1073 | + .patch = patch_conexant_auto }, | ||
1074 | + { .id = 0x14f150f4, .name = "CX20724", | ||
1075 | + .patch = patch_conexant_auto }, | ||
1076 | { .id = 0x14f1510f, .name = "CX20751/2", | ||
1077 | .patch = patch_conexant_auto }, | ||
1078 | { .id = 0x14f15110, .name = "CX20751/2", | ||
1079 | @@ -3524,6 +3532,10 @@ MODULE_ALIAS("snd-hda-codec-id:14f150ab"); | ||
1080 | MODULE_ALIAS("snd-hda-codec-id:14f150ac"); | ||
1081 | MODULE_ALIAS("snd-hda-codec-id:14f150b8"); | ||
1082 | MODULE_ALIAS("snd-hda-codec-id:14f150b9"); | ||
1083 | +MODULE_ALIAS("snd-hda-codec-id:14f150f1"); | ||
1084 | +MODULE_ALIAS("snd-hda-codec-id:14f150f2"); | ||
1085 | +MODULE_ALIAS("snd-hda-codec-id:14f150f3"); | ||
1086 | +MODULE_ALIAS("snd-hda-codec-id:14f150f4"); | ||
1087 | MODULE_ALIAS("snd-hda-codec-id:14f1510f"); | ||
1088 | MODULE_ALIAS("snd-hda-codec-id:14f15110"); | ||
1089 | MODULE_ALIAS("snd-hda-codec-id:14f15111"); | ||
1090 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c | ||
1091 | index a8eb7fe2766e..444019696f85 100644 | ||
1092 | --- a/sound/pci/hda/patch_realtek.c | ||
1093 | +++ b/sound/pci/hda/patch_realtek.c | ||
1094 | @@ -3736,6 +3736,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | ||
1095 | SND_PCI_QUIRK_VENDOR(0x1025, "Acer Aspire", ALC271_FIXUP_DMIC), | ||
1096 | SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook", ALC269_FIXUP_LIFEBOOK), | ||
1097 | SND_PCI_QUIRK(0x10cf, 0x15dc, "Lifebook T731", ALC269_FIXUP_LIFEBOOK_HP_PIN), | ||
1098 | + SND_PCI_QUIRK(0x10cf, 0x1757, "Lifebook E752", ALC269_FIXUP_LIFEBOOK_HP_PIN), | ||
1099 | SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC), | ||
1100 | SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE), | ||
1101 | SND_PCI_QUIRK(0x17aa, 0x215e, "Thinkpad L512", ALC269_FIXUP_SKU_IGNORE), | ||
1102 | diff --git a/sound/soc/codecs/mc13783.c b/sound/soc/codecs/mc13783.c | ||
1103 | index 8a8d9364e87f..d0fc21559a85 100644 | ||
1104 | --- a/sound/soc/codecs/mc13783.c | ||
1105 | +++ b/sound/soc/codecs/mc13783.c | ||
1106 | @@ -604,14 +604,14 @@ static int mc13783_probe(struct snd_soc_codec *codec) | ||
1107 | AUDIO_SSI_SEL, 0); | ||
1108 | else | ||
1109 | mc13xxx_reg_rmw(priv->mc13xxx, MC13783_AUDIO_CODEC, | ||
1110 | - 0, AUDIO_SSI_SEL); | ||
1111 | + AUDIO_SSI_SEL, AUDIO_SSI_SEL); | ||
1112 | |||
1113 | if (priv->dac_ssi_port == MC13783_SSI1_PORT) | ||
1114 | mc13xxx_reg_rmw(priv->mc13xxx, MC13783_AUDIO_DAC, | ||
1115 | AUDIO_SSI_SEL, 0); | ||
1116 | else | ||
1117 | mc13xxx_reg_rmw(priv->mc13xxx, MC13783_AUDIO_DAC, | ||
1118 | - 0, AUDIO_SSI_SEL); | ||
1119 | + AUDIO_SSI_SEL, AUDIO_SSI_SEL); | ||
1120 | |||
1121 | mc13xxx_unlock(priv->mc13xxx); | ||
1122 | |||
1123 | diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c | ||
1124 | index 4a8decf85a4a..39f65bc9de56 100644 | ||
1125 | --- a/sound/soc/codecs/wm8960.c | ||
1126 | +++ b/sound/soc/codecs/wm8960.c | ||
1127 | @@ -392,7 +392,7 @@ static const struct snd_soc_dapm_route audio_paths[] = { | ||
1128 | { "Right Input Mixer", "Boost Switch", "Right Boost Mixer", }, | ||
1129 | { "Right Input Mixer", NULL, "RINPUT1", }, /* Really Boost Switch */ | ||
1130 | { "Right Input Mixer", NULL, "RINPUT2" }, | ||
1131 | - { "Right Input Mixer", NULL, "LINPUT3" }, | ||
1132 | + { "Right Input Mixer", NULL, "RINPUT3" }, | ||
1133 | |||
1134 | { "Left ADC", NULL, "Left Input Mixer" }, | ||
1135 | { "Right ADC", NULL, "Right Input Mixer" }, | ||
1136 | diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c | ||
1137 | index 29e95f93d482..6e746c7474bf 100644 | ||
1138 | --- a/sound/soc/codecs/wm8994.c | ||
1139 | +++ b/sound/soc/codecs/wm8994.c | ||
1140 | @@ -2679,7 +2679,7 @@ static struct { | ||
1141 | }; | ||
1142 | |||
1143 | static int fs_ratios[] = { | ||
1144 | - 64, 128, 192, 256, 348, 512, 768, 1024, 1408, 1536 | ||
1145 | + 64, 128, 192, 256, 384, 512, 768, 1024, 1408, 1536 | ||
1146 | }; | ||
1147 | |||
1148 | static int bclk_divs[] = { |