Magellan Linux

Contents of /trunk/kernel-lts/patches-3.4/0155-3.4.56-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2260 - (show annotations) (download)
Mon Aug 19 09:25:36 2013 UTC (10 years, 8 months ago) by niro
File size: 51606 byte(s)
-linux-3.4.56
1 diff --git a/Makefile b/Makefile
2 index c11116f..2fe1f6d 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 3
7 PATCHLEVEL = 4
8 -SUBLEVEL = 55
9 +SUBLEVEL = 56
10 EXTRAVERSION =
11 NAME = Saber-toothed Squirrel
12
13 diff --git a/arch/powerpc/include/asm/module.h b/arch/powerpc/include/asm/module.h
14 index 0192a4e..80de64b 100644
15 --- a/arch/powerpc/include/asm/module.h
16 +++ b/arch/powerpc/include/asm/module.h
17 @@ -87,10 +87,9 @@ struct exception_table_entry;
18 void sort_ex_table(struct exception_table_entry *start,
19 struct exception_table_entry *finish);
20
21 -#ifdef CONFIG_MODVERSIONS
22 +#if defined(CONFIG_MODVERSIONS) && defined(CONFIG_PPC64)
23 #define ARCH_RELOCATES_KCRCTAB
24 -
25 -extern const unsigned long reloc_start[];
26 +#define reloc_start PHYSICAL_START
27 #endif
28 #endif /* __KERNEL__ */
29 #endif /* _ASM_POWERPC_MODULE_H */
30 diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S
31 index 65d1c08..7703569 100644
32 --- a/arch/powerpc/kernel/vmlinux.lds.S
33 +++ b/arch/powerpc/kernel/vmlinux.lds.S
34 @@ -38,9 +38,6 @@ jiffies = jiffies_64 + 4;
35 #endif
36 SECTIONS
37 {
38 - . = 0;
39 - reloc_start = .;
40 -
41 . = KERNELBASE;
42
43 /*
44 diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
45 index 011358c..2f36a66 100644
46 --- a/arch/s390/include/asm/pgtable.h
47 +++ b/arch/s390/include/asm/pgtable.h
48 @@ -67,6 +67,10 @@ static inline int is_zero_pfn(unsigned long pfn)
49
50 #define my_zero_pfn(addr) page_to_pfn(ZERO_PAGE(addr))
51
52 +/* TODO: s390 cannot support io_remap_pfn_range... */
53 +#define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \
54 + remap_pfn_range(vma, vaddr, pfn, size, prot)
55 +
56 #endif /* !__ASSEMBLY__ */
57
58 /*
59 diff --git a/drivers/acpi/acpi_memhotplug.c b/drivers/acpi/acpi_memhotplug.c
60 index d985713..f81597f 100644
61 --- a/drivers/acpi/acpi_memhotplug.c
62 +++ b/drivers/acpi/acpi_memhotplug.c
63 @@ -421,6 +421,7 @@ static int acpi_memory_device_add(struct acpi_device *device)
64 /* Get the range from the _CRS */
65 result = acpi_memory_get_device_resources(mem_device);
66 if (result) {
67 + device->driver_data = NULL;
68 kfree(mem_device);
69 return result;
70 }
71 diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
72 index 6bdedd7..1ad34ed 100644
73 --- a/drivers/ata/Kconfig
74 +++ b/drivers/ata/Kconfig
75 @@ -93,7 +93,7 @@ config SATA_FSL
76 If unsure, say N.
77
78 config SATA_INIC162X
79 - tristate "Initio 162x SATA support"
80 + tristate "Initio 162x SATA support (Very Experimental)"
81 depends on PCI
82 help
83 This option enables support for Initio 162x Serial ATA.
84 diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
85 index 45cc02b..9dbd3ae 100644
86 --- a/drivers/ata/ata_piix.c
87 +++ b/drivers/ata/ata_piix.c
88 @@ -344,7 +344,7 @@ static const struct pci_device_id piix_pci_tbl[] = {
89 /* SATA Controller IDE (Wellsburg) */
90 { 0x8086, 0x8d00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
91 /* SATA Controller IDE (Wellsburg) */
92 - { 0x8086, 0x8d08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
93 + { 0x8086, 0x8d08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_snb },
94 /* SATA Controller IDE (Wellsburg) */
95 { 0x8086, 0x8d60, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
96 /* SATA Controller IDE (Wellsburg) */
97 diff --git a/drivers/ata/sata_inic162x.c b/drivers/ata/sata_inic162x.c
98 index 5c7d70c..3a8b55e 100644
99 --- a/drivers/ata/sata_inic162x.c
100 +++ b/drivers/ata/sata_inic162x.c
101 @@ -6,6 +6,18 @@
102 *
103 * This file is released under GPL v2.
104 *
105 + * **** WARNING ****
106 + *
107 + * This driver never worked properly and unfortunately data corruption is
108 + * relatively common. There isn't anyone working on the driver and there's
109 + * no support from the vendor. Do not use this driver in any production
110 + * environment.
111 + *
112 + * http://thread.gmane.org/gmane.linux.debian.devel.bugs.rc/378525/focus=54491
113 + * https://bugzilla.kernel.org/show_bug.cgi?id=60565
114 + *
115 + * *****************
116 + *
117 * This controller is eccentric and easily locks up if something isn't
118 * right. Documentation is available at initio's website but it only
119 * documents registers (not programming model).
120 @@ -809,6 +821,8 @@ static int inic_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
121
122 ata_print_version_once(&pdev->dev, DRV_VERSION);
123
124 + dev_alert(&pdev->dev, "inic162x support is broken with common data corruption issues and will be disabled by default, contact linux-ide@vger.kernel.org if in production use\n");
125 +
126 /* alloc host */
127 host = ata_host_alloc_pinfo(&pdev->dev, ppi, NR_PORTS);
128 hpriv = devm_kzalloc(&pdev->dev, sizeof(*hpriv), GFP_KERNEL);
129 diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
130 index 4fd1dea..4ed7bf9 100644
131 --- a/drivers/block/xen-blkback/blkback.c
132 +++ b/drivers/block/xen-blkback/blkback.c
133 @@ -399,7 +399,18 @@ static int dispatch_discard_io(struct xen_blkif *blkif,
134 int status = BLKIF_RSP_OKAY;
135 struct block_device *bdev = blkif->vbd.bdev;
136 unsigned long secure;
137 + struct phys_req preq;
138 +
139 + preq.sector_number = req->u.discard.sector_number;
140 + preq.nr_sects = req->u.discard.nr_sectors;
141
142 + err = xen_vbd_translate(&preq, blkif, WRITE);
143 + if (err) {
144 + pr_warn(DRV_PFX "access denied: DISCARD [%llu->%llu] on dev=%04x\n",
145 + preq.sector_number,
146 + preq.sector_number + preq.nr_sects, blkif->vbd.pdevice);
147 + goto fail_response;
148 + }
149 blkif->st_ds_req++;
150
151 xen_blkif_get(blkif);
152 @@ -410,7 +421,7 @@ static int dispatch_discard_io(struct xen_blkif *blkif,
153 err = blkdev_issue_discard(bdev, req->u.discard.sector_number,
154 req->u.discard.nr_sectors,
155 GFP_KERNEL, secure);
156 -
157 +fail_response:
158 if (err == -EOPNOTSUPP) {
159 pr_debug(DRV_PFX "discard op failed, not supported\n");
160 status = BLKIF_RSP_EOPNOTSUPP;
161 diff --git a/drivers/firewire/core-cdev.c b/drivers/firewire/core-cdev.c
162 index b8e4809..b558810 100644
163 --- a/drivers/firewire/core-cdev.c
164 +++ b/drivers/firewire/core-cdev.c
165 @@ -53,6 +53,7 @@
166 #define FW_CDEV_KERNEL_VERSION 5
167 #define FW_CDEV_VERSION_EVENT_REQUEST2 4
168 #define FW_CDEV_VERSION_ALLOCATE_REGION_END 4
169 +#define FW_CDEV_VERSION_AUTO_FLUSH_ISO_OVERFLOW 5
170
171 struct client {
172 u32 version;
173 @@ -998,6 +999,8 @@ static int ioctl_create_iso_context(struct client *client, union ioctl_arg *arg)
174 a->channel, a->speed, a->header_size, cb, client);
175 if (IS_ERR(context))
176 return PTR_ERR(context);
177 + if (client->version < FW_CDEV_VERSION_AUTO_FLUSH_ISO_OVERFLOW)
178 + context->drop_overflow_headers = true;
179
180 /* We only support one context at this time. */
181 spin_lock_irq(&client->lock);
182 diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c
183 index 2b54600..c1de4c3 100644
184 --- a/drivers/firewire/ohci.c
185 +++ b/drivers/firewire/ohci.c
186 @@ -2694,8 +2694,11 @@ static void copy_iso_headers(struct iso_context *ctx, const u32 *dma_hdr)
187 {
188 u32 *ctx_hdr;
189
190 - if (ctx->header_length + ctx->base.header_size > PAGE_SIZE)
191 + if (ctx->header_length + ctx->base.header_size > PAGE_SIZE) {
192 + if (ctx->base.drop_overflow_headers)
193 + return;
194 flush_iso_completions(ctx);
195 + }
196
197 ctx_hdr = ctx->header + ctx->header_length;
198 ctx->last_timestamp = (u16)le32_to_cpu((__force __le32)dma_hdr[0]);
199 @@ -2855,8 +2858,11 @@ static int handle_it_packet(struct context *context,
200
201 sync_it_packet_for_cpu(context, d);
202
203 - if (ctx->header_length + 4 > PAGE_SIZE)
204 + if (ctx->header_length + 4 > PAGE_SIZE) {
205 + if (ctx->base.drop_overflow_headers)
206 + return 1;
207 flush_iso_completions(ctx);
208 + }
209
210 ctx_hdr = ctx->header + ctx->header_length;
211 ctx->last_timestamp = le16_to_cpu(last->res_count);
212 diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c
213 index 43672b6..daa1e34 100644
214 --- a/drivers/gpu/drm/radeon/atom.c
215 +++ b/drivers/gpu/drm/radeon/atom.c
216 @@ -1222,12 +1222,17 @@ int atom_execute_table(struct atom_context *ctx, int index, uint32_t * params)
217 int r;
218
219 mutex_lock(&ctx->mutex);
220 + /* reset data block */
221 + ctx->data_block = 0;
222 /* reset reg block */
223 ctx->reg_block = 0;
224 /* reset fb window */
225 ctx->fb_base = 0;
226 /* reset io mode */
227 ctx->io_mode = ATOM_IO_MM;
228 + /* reset divmul */
229 + ctx->divmul[0] = 0;
230 + ctx->divmul[1] = 0;
231 r = atom_execute_table_locked(ctx, index, params);
232 mutex_unlock(&ctx->mutex);
233 return r;
234 diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c
235 index 886b41f..505f27e 100644
236 --- a/drivers/gpu/drm/radeon/atombios_dp.c
237 +++ b/drivers/gpu/drm/radeon/atombios_dp.c
238 @@ -45,6 +45,41 @@ static char *pre_emph_names[] = {
239 };
240
241 /***** radeon AUX functions *****/
242 +
243 +/* Atom needs data in little endian format
244 + * so swap as appropriate when copying data to
245 + * or from atom. Note that atom operates on
246 + * dw units.
247 + */
248 +static void radeon_copy_swap(u8 *dst, u8 *src, u8 num_bytes, bool to_le)
249 +{
250 +#ifdef __BIG_ENDIAN
251 + u8 src_tmp[20], dst_tmp[20]; /* used for byteswapping */
252 + u32 *dst32, *src32;
253 + int i;
254 +
255 + memcpy(src_tmp, src, num_bytes);
256 + src32 = (u32 *)src_tmp;
257 + dst32 = (u32 *)dst_tmp;
258 + if (to_le) {
259 + for (i = 0; i < ((num_bytes + 3) / 4); i++)
260 + dst32[i] = cpu_to_le32(src32[i]);
261 + memcpy(dst, dst_tmp, num_bytes);
262 + } else {
263 + u8 dws = num_bytes & ~3;
264 + for (i = 0; i < ((num_bytes + 3) / 4); i++)
265 + dst32[i] = le32_to_cpu(src32[i]);
266 + memcpy(dst, dst_tmp, dws);
267 + if (num_bytes % 4) {
268 + for (i = 0; i < (num_bytes % 4); i++)
269 + dst[dws+i] = dst_tmp[dws+i];
270 + }
271 + }
272 +#else
273 + memcpy(dst, src, num_bytes);
274 +#endif
275 +}
276 +
277 union aux_channel_transaction {
278 PROCESS_AUX_CHANNEL_TRANSACTION_PS_ALLOCATION v1;
279 PROCESS_AUX_CHANNEL_TRANSACTION_PARAMETERS_V2 v2;
280 @@ -66,10 +101,10 @@ static int radeon_process_aux_ch(struct radeon_i2c_chan *chan,
281
282 base = (unsigned char *)(rdev->mode_info.atom_context->scratch + 1);
283
284 - memcpy(base, send, send_bytes);
285 + radeon_copy_swap(base, send, send_bytes, true);
286
287 - args.v1.lpAuxRequest = 0 + 4;
288 - args.v1.lpDataOut = 16 + 4;
289 + args.v1.lpAuxRequest = cpu_to_le16((u16)(0 + 4));
290 + args.v1.lpDataOut = cpu_to_le16((u16)(16 + 4));
291 args.v1.ucDataOutLen = 0;
292 args.v1.ucChannelID = chan->rec.i2c_id;
293 args.v1.ucDelay = delay / 10;
294 @@ -103,7 +138,7 @@ static int radeon_process_aux_ch(struct radeon_i2c_chan *chan,
295 recv_bytes = recv_size;
296
297 if (recv && recv_size)
298 - memcpy(recv, base + 16, recv_bytes);
299 + radeon_copy_swap(recv, base + 16, recv_bytes, false);
300
301 return recv_bytes;
302 }
303 diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c
304 index 2b2c557..07d0bcd 100644
305 --- a/drivers/gpu/drm/radeon/radeon_combios.c
306 +++ b/drivers/gpu/drm/radeon/radeon_combios.c
307 @@ -147,7 +147,7 @@ static uint16_t combios_get_table_offset(struct drm_device *dev,
308 enum radeon_combios_table_offset table)
309 {
310 struct radeon_device *rdev = dev->dev_private;
311 - int rev;
312 + int rev, size;
313 uint16_t offset = 0, check_offset;
314
315 if (!rdev->bios)
316 @@ -156,174 +156,106 @@ static uint16_t combios_get_table_offset(struct drm_device *dev,
317 switch (table) {
318 /* absolute offset tables */
319 case COMBIOS_ASIC_INIT_1_TABLE:
320 - check_offset = RBIOS16(rdev->bios_header_start + 0xc);
321 - if (check_offset)
322 - offset = check_offset;
323 + check_offset = 0xc;
324 break;
325 case COMBIOS_BIOS_SUPPORT_TABLE:
326 - check_offset = RBIOS16(rdev->bios_header_start + 0x14);
327 - if (check_offset)
328 - offset = check_offset;
329 + check_offset = 0x14;
330 break;
331 case COMBIOS_DAC_PROGRAMMING_TABLE:
332 - check_offset = RBIOS16(rdev->bios_header_start + 0x2a);
333 - if (check_offset)
334 - offset = check_offset;
335 + check_offset = 0x2a;
336 break;
337 case COMBIOS_MAX_COLOR_DEPTH_TABLE:
338 - check_offset = RBIOS16(rdev->bios_header_start + 0x2c);
339 - if (check_offset)
340 - offset = check_offset;
341 + check_offset = 0x2c;
342 break;
343 case COMBIOS_CRTC_INFO_TABLE:
344 - check_offset = RBIOS16(rdev->bios_header_start + 0x2e);
345 - if (check_offset)
346 - offset = check_offset;
347 + check_offset = 0x2e;
348 break;
349 case COMBIOS_PLL_INFO_TABLE:
350 - check_offset = RBIOS16(rdev->bios_header_start + 0x30);
351 - if (check_offset)
352 - offset = check_offset;
353 + check_offset = 0x30;
354 break;
355 case COMBIOS_TV_INFO_TABLE:
356 - check_offset = RBIOS16(rdev->bios_header_start + 0x32);
357 - if (check_offset)
358 - offset = check_offset;
359 + check_offset = 0x32;
360 break;
361 case COMBIOS_DFP_INFO_TABLE:
362 - check_offset = RBIOS16(rdev->bios_header_start + 0x34);
363 - if (check_offset)
364 - offset = check_offset;
365 + check_offset = 0x34;
366 break;
367 case COMBIOS_HW_CONFIG_INFO_TABLE:
368 - check_offset = RBIOS16(rdev->bios_header_start + 0x36);
369 - if (check_offset)
370 - offset = check_offset;
371 + check_offset = 0x36;
372 break;
373 case COMBIOS_MULTIMEDIA_INFO_TABLE:
374 - check_offset = RBIOS16(rdev->bios_header_start + 0x38);
375 - if (check_offset)
376 - offset = check_offset;
377 + check_offset = 0x38;
378 break;
379 case COMBIOS_TV_STD_PATCH_TABLE:
380 - check_offset = RBIOS16(rdev->bios_header_start + 0x3e);
381 - if (check_offset)
382 - offset = check_offset;
383 + check_offset = 0x3e;
384 break;
385 case COMBIOS_LCD_INFO_TABLE:
386 - check_offset = RBIOS16(rdev->bios_header_start + 0x40);
387 - if (check_offset)
388 - offset = check_offset;
389 + check_offset = 0x40;
390 break;
391 case COMBIOS_MOBILE_INFO_TABLE:
392 - check_offset = RBIOS16(rdev->bios_header_start + 0x42);
393 - if (check_offset)
394 - offset = check_offset;
395 + check_offset = 0x42;
396 break;
397 case COMBIOS_PLL_INIT_TABLE:
398 - check_offset = RBIOS16(rdev->bios_header_start + 0x46);
399 - if (check_offset)
400 - offset = check_offset;
401 + check_offset = 0x46;
402 break;
403 case COMBIOS_MEM_CONFIG_TABLE:
404 - check_offset = RBIOS16(rdev->bios_header_start + 0x48);
405 - if (check_offset)
406 - offset = check_offset;
407 + check_offset = 0x48;
408 break;
409 case COMBIOS_SAVE_MASK_TABLE:
410 - check_offset = RBIOS16(rdev->bios_header_start + 0x4a);
411 - if (check_offset)
412 - offset = check_offset;
413 + check_offset = 0x4a;
414 break;
415 case COMBIOS_HARDCODED_EDID_TABLE:
416 - check_offset = RBIOS16(rdev->bios_header_start + 0x4c);
417 - if (check_offset)
418 - offset = check_offset;
419 + check_offset = 0x4c;
420 break;
421 case COMBIOS_ASIC_INIT_2_TABLE:
422 - check_offset = RBIOS16(rdev->bios_header_start + 0x4e);
423 - if (check_offset)
424 - offset = check_offset;
425 + check_offset = 0x4e;
426 break;
427 case COMBIOS_CONNECTOR_INFO_TABLE:
428 - check_offset = RBIOS16(rdev->bios_header_start + 0x50);
429 - if (check_offset)
430 - offset = check_offset;
431 + check_offset = 0x50;
432 break;
433 case COMBIOS_DYN_CLK_1_TABLE:
434 - check_offset = RBIOS16(rdev->bios_header_start + 0x52);
435 - if (check_offset)
436 - offset = check_offset;
437 + check_offset = 0x52;
438 break;
439 case COMBIOS_RESERVED_MEM_TABLE:
440 - check_offset = RBIOS16(rdev->bios_header_start + 0x54);
441 - if (check_offset)
442 - offset = check_offset;
443 + check_offset = 0x54;
444 break;
445 case COMBIOS_EXT_TMDS_INFO_TABLE:
446 - check_offset = RBIOS16(rdev->bios_header_start + 0x58);
447 - if (check_offset)
448 - offset = check_offset;
449 + check_offset = 0x58;
450 break;
451 case COMBIOS_MEM_CLK_INFO_TABLE:
452 - check_offset = RBIOS16(rdev->bios_header_start + 0x5a);
453 - if (check_offset)
454 - offset = check_offset;
455 + check_offset = 0x5a;
456 break;
457 case COMBIOS_EXT_DAC_INFO_TABLE:
458 - check_offset = RBIOS16(rdev->bios_header_start + 0x5c);
459 - if (check_offset)
460 - offset = check_offset;
461 + check_offset = 0x5c;
462 break;
463 case COMBIOS_MISC_INFO_TABLE:
464 - check_offset = RBIOS16(rdev->bios_header_start + 0x5e);
465 - if (check_offset)
466 - offset = check_offset;
467 + check_offset = 0x5e;
468 break;
469 case COMBIOS_CRT_INFO_TABLE:
470 - check_offset = RBIOS16(rdev->bios_header_start + 0x60);
471 - if (check_offset)
472 - offset = check_offset;
473 + check_offset = 0x60;
474 break;
475 case COMBIOS_INTEGRATED_SYSTEM_INFO_TABLE:
476 - check_offset = RBIOS16(rdev->bios_header_start + 0x62);
477 - if (check_offset)
478 - offset = check_offset;
479 + check_offset = 0x62;
480 break;
481 case COMBIOS_COMPONENT_VIDEO_INFO_TABLE:
482 - check_offset = RBIOS16(rdev->bios_header_start + 0x64);
483 - if (check_offset)
484 - offset = check_offset;
485 + check_offset = 0x64;
486 break;
487 case COMBIOS_FAN_SPEED_INFO_TABLE:
488 - check_offset = RBIOS16(rdev->bios_header_start + 0x66);
489 - if (check_offset)
490 - offset = check_offset;
491 + check_offset = 0x66;
492 break;
493 case COMBIOS_OVERDRIVE_INFO_TABLE:
494 - check_offset = RBIOS16(rdev->bios_header_start + 0x68);
495 - if (check_offset)
496 - offset = check_offset;
497 + check_offset = 0x68;
498 break;
499 case COMBIOS_OEM_INFO_TABLE:
500 - check_offset = RBIOS16(rdev->bios_header_start + 0x6a);
501 - if (check_offset)
502 - offset = check_offset;
503 + check_offset = 0x6a;
504 break;
505 case COMBIOS_DYN_CLK_2_TABLE:
506 - check_offset = RBIOS16(rdev->bios_header_start + 0x6c);
507 - if (check_offset)
508 - offset = check_offset;
509 + check_offset = 0x6c;
510 break;
511 case COMBIOS_POWER_CONNECTOR_INFO_TABLE:
512 - check_offset = RBIOS16(rdev->bios_header_start + 0x6e);
513 - if (check_offset)
514 - offset = check_offset;
515 + check_offset = 0x6e;
516 break;
517 case COMBIOS_I2C_INFO_TABLE:
518 - check_offset = RBIOS16(rdev->bios_header_start + 0x70);
519 - if (check_offset)
520 - offset = check_offset;
521 + check_offset = 0x70;
522 break;
523 /* relative offset tables */
524 case COMBIOS_ASIC_INIT_3_TABLE: /* offset from misc info */
525 @@ -439,11 +371,16 @@ static uint16_t combios_get_table_offset(struct drm_device *dev,
526 }
527 break;
528 default:
529 + check_offset = 0;
530 break;
531 }
532
533 - return offset;
534 + size = RBIOS8(rdev->bios_header_start + 0x6);
535 + /* check absolute offset tables */
536 + if (table < COMBIOS_ASIC_INIT_3_TABLE && check_offset && check_offset < size)
537 + offset = RBIOS16(rdev->bios_header_start + check_offset);
538
539 + return offset;
540 }
541
542 bool radeon_combios_check_hardcoded_edid(struct radeon_device *rdev)
543 @@ -953,8 +890,10 @@ struct radeon_encoder_primary_dac *radeon_combios_get_primary_dac_info(struct
544 dac = RBIOS8(dac_info + 0x3) & 0xf;
545 p_dac->ps2_pdac_adj = (bg << 8) | (dac);
546 }
547 - /* if the values are all zeros, use the table */
548 - if (p_dac->ps2_pdac_adj)
549 + /* if the values are zeros, use the table */
550 + if ((dac == 0) || (bg == 0))
551 + found = 0;
552 + else
553 found = 1;
554 }
555
556 diff --git a/drivers/md/dm-verity.c b/drivers/md/dm-verity.c
557 index 68bf5c3..9ab2a6a 100644
558 --- a/drivers/md/dm-verity.c
559 +++ b/drivers/md/dm-verity.c
560 @@ -813,9 +813,8 @@ static int verity_ctr(struct dm_target *ti, unsigned argc, char **argv)
561 for (i = v->levels - 1; i >= 0; i--) {
562 sector_t s;
563 v->hash_level_block[i] = hash_position;
564 - s = verity_position_at_level(v, v->data_blocks, i);
565 - s = (s >> v->hash_per_block_bits) +
566 - !!(s & ((1 << v->hash_per_block_bits) - 1));
567 + s = (v->data_blocks + ((sector_t)1 << ((i + 1) * v->hash_per_block_bits)) - 1)
568 + >> ((i + 1) * v->hash_per_block_bits);
569 if (hash_position + s < hash_position) {
570 ti->error = "Hash device offset overflow";
571 r = -E2BIG;
572 diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
573 index 0cc7985..54ba531 100644
574 --- a/drivers/md/raid10.c
575 +++ b/drivers/md/raid10.c
576 @@ -2029,12 +2029,18 @@ static void recovery_request_write(struct mddev *mddev, struct r10bio *r10_bio)
577 d = r10_bio->devs[1].devnum;
578 wbio = r10_bio->devs[1].bio;
579 wbio2 = r10_bio->devs[1].repl_bio;
580 + /* Need to test wbio2->bi_end_io before we call
581 + * generic_make_request as if the former is NULL,
582 + * the latter is free to free wbio2.
583 + */
584 + if (wbio2 && !wbio2->bi_end_io)
585 + wbio2 = NULL;
586 if (wbio->bi_end_io) {
587 atomic_inc(&conf->mirrors[d].rdev->nr_pending);
588 md_sync_acct(conf->mirrors[d].rdev->bdev, wbio->bi_size >> 9);
589 generic_make_request(wbio);
590 }
591 - if (wbio2 && wbio2->bi_end_io) {
592 + if (wbio2) {
593 atomic_inc(&conf->mirrors[d].replacement->nr_pending);
594 md_sync_acct(conf->mirrors[d].replacement->bdev,
595 wbio2->bi_size >> 9);
596 diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
597 index 0240576..6155c8b 100644
598 --- a/drivers/md/raid5.c
599 +++ b/drivers/md/raid5.c
600 @@ -3326,6 +3326,7 @@ static void handle_stripe(struct stripe_head *sh)
601 if (test_and_clear_bit(STRIPE_SYNC_REQUESTED, &sh->state)) {
602 set_bit(STRIPE_SYNCING, &sh->state);
603 clear_bit(STRIPE_INSYNC, &sh->state);
604 + clear_bit(STRIPE_REPLACED, &sh->state);
605 }
606 clear_bit(STRIPE_DELAYED, &sh->state);
607
608 @@ -3465,19 +3466,23 @@ static void handle_stripe(struct stripe_head *sh)
609 handle_parity_checks5(conf, sh, &s, disks);
610 }
611
612 - if (s.replacing && s.locked == 0
613 - && !test_bit(STRIPE_INSYNC, &sh->state)) {
614 + if ((s.replacing || s.syncing) && s.locked == 0
615 + && !test_bit(STRIPE_COMPUTE_RUN, &sh->state)
616 + && !test_bit(STRIPE_REPLACED, &sh->state)) {
617 /* Write out to replacement devices where possible */
618 for (i = 0; i < conf->raid_disks; i++)
619 - if (test_bit(R5_UPTODATE, &sh->dev[i].flags) &&
620 - test_bit(R5_NeedReplace, &sh->dev[i].flags)) {
621 + if (test_bit(R5_NeedReplace, &sh->dev[i].flags)) {
622 + WARN_ON(!test_bit(R5_UPTODATE, &sh->dev[i].flags));
623 set_bit(R5_WantReplace, &sh->dev[i].flags);
624 set_bit(R5_LOCKED, &sh->dev[i].flags);
625 s.locked++;
626 }
627 - set_bit(STRIPE_INSYNC, &sh->state);
628 + if (s.replacing)
629 + set_bit(STRIPE_INSYNC, &sh->state);
630 + set_bit(STRIPE_REPLACED, &sh->state);
631 }
632 if ((s.syncing || s.replacing) && s.locked == 0 &&
633 + !test_bit(STRIPE_COMPUTE_RUN, &sh->state) &&
634 test_bit(STRIPE_INSYNC, &sh->state)) {
635 md_done_sync(conf->mddev, STRIPE_SECTORS, 1);
636 clear_bit(STRIPE_SYNCING, &sh->state);
637 diff --git a/drivers/md/raid5.h b/drivers/md/raid5.h
638 index 8d8e139..f1ed18e 100644
639 --- a/drivers/md/raid5.h
640 +++ b/drivers/md/raid5.h
641 @@ -306,6 +306,7 @@ enum {
642 STRIPE_SYNC_REQUESTED,
643 STRIPE_SYNCING,
644 STRIPE_INSYNC,
645 + STRIPE_REPLACED,
646 STRIPE_PREREAD_ACTIVE,
647 STRIPE_DELAYED,
648 STRIPE_DEGRADED,
649 diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
650 index cbefe67..bc177b9 100644
651 --- a/drivers/net/virtio_net.c
652 +++ b/drivers/net/virtio_net.c
653 @@ -518,7 +518,7 @@ static int virtnet_poll(struct napi_struct *napi, int budget)
654 {
655 struct virtnet_info *vi = container_of(napi, struct virtnet_info, napi);
656 void *buf;
657 - unsigned int len, received = 0;
658 + unsigned int r, len, received = 0;
659
660 again:
661 while (received < budget &&
662 @@ -535,8 +535,9 @@ again:
663
664 /* Out of packets? */
665 if (received < budget) {
666 + r = virtqueue_enable_cb_prepare(vi->rvq);
667 napi_complete(napi);
668 - if (unlikely(!virtqueue_enable_cb(vi->rvq)) &&
669 + if (unlikely(virtqueue_poll(vi->rvq, r)) &&
670 napi_schedule_prep(napi)) {
671 virtqueue_disable_cb(vi->rvq);
672 __napi_schedule(napi);
673 diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c
674 index 4f1b10b..3743ac9 100644
675 --- a/drivers/s390/scsi/zfcp_aux.c
676 +++ b/drivers/s390/scsi/zfcp_aux.c
677 @@ -3,7 +3,7 @@
678 *
679 * Module interface and handling of zfcp data structures.
680 *
681 - * Copyright IBM Corporation 2002, 2010
682 + * Copyright IBM Corp. 2002, 2013
683 */
684
685 /*
686 @@ -23,6 +23,7 @@
687 * Christof Schmitt
688 * Martin Petermann
689 * Sven Schuetz
690 + * Steffen Maier
691 */
692
693 #define KMSG_COMPONENT "zfcp"
694 @@ -415,6 +416,8 @@ struct zfcp_adapter *zfcp_adapter_enqueue(struct ccw_device *ccw_device)
695 adapter->dma_parms.max_segment_size = ZFCP_QDIO_SBALE_LEN;
696 adapter->ccw_device->dev.dma_parms = &adapter->dma_parms;
697
698 + adapter->stat_read_buf_num = FSF_STATUS_READS_RECOM;
699 +
700 if (!zfcp_scsi_adapter_register(adapter))
701 return adapter;
702
703 diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c
704 index 5fdf70b..961e327 100644
705 --- a/drivers/s390/scsi/zfcp_fsf.c
706 +++ b/drivers/s390/scsi/zfcp_fsf.c
707 @@ -3,7 +3,7 @@
708 *
709 * Implementation of FSF commands.
710 *
711 - * Copyright IBM Corporation 2002, 2010
712 + * Copyright IBM Corp. 2002, 2013
713 */
714
715 #define KMSG_COMPONENT "zfcp"
716 @@ -483,12 +483,8 @@ static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req)
717
718 fc_host_port_name(shost) = nsp->fl_wwpn;
719 fc_host_node_name(shost) = nsp->fl_wwnn;
720 - fc_host_port_id(shost) = ntoh24(bottom->s_id);
721 - fc_host_speed(shost) =
722 - zfcp_fsf_convert_portspeed(bottom->fc_link_speed);
723 fc_host_supported_classes(shost) = FC_COS_CLASS2 | FC_COS_CLASS3;
724
725 - adapter->hydra_version = bottom->adapter_type;
726 adapter->timer_ticks = bottom->timer_interval & ZFCP_FSF_TIMER_INT_MASK;
727 adapter->stat_read_buf_num = max(bottom->status_read_buf_num,
728 (u16)FSF_STATUS_READS_RECOM);
729 @@ -496,6 +492,19 @@ static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req)
730 if (fc_host_permanent_port_name(shost) == -1)
731 fc_host_permanent_port_name(shost) = fc_host_port_name(shost);
732
733 + zfcp_scsi_set_prot(adapter);
734 +
735 + /* no error return above here, otherwise must fix call chains */
736 + /* do not evaluate invalid fields */
737 + if (req->qtcb->header.fsf_status == FSF_EXCHANGE_CONFIG_DATA_INCOMPLETE)
738 + return 0;
739 +
740 + fc_host_port_id(shost) = ntoh24(bottom->s_id);
741 + fc_host_speed(shost) =
742 + zfcp_fsf_convert_portspeed(bottom->fc_link_speed);
743 +
744 + adapter->hydra_version = bottom->adapter_type;
745 +
746 switch (bottom->fc_topology) {
747 case FSF_TOPO_P2P:
748 adapter->peer_d_id = ntoh24(bottom->peer_d_id);
749 @@ -517,8 +526,6 @@ static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req)
750 return -EIO;
751 }
752
753 - zfcp_scsi_set_prot(adapter);
754 -
755 return 0;
756 }
757
758 @@ -569,6 +576,8 @@ static void zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *req)
759 &adapter->status);
760 zfcp_fsf_link_down_info_eval(req,
761 &qtcb->header.fsf_status_qual.link_down_info);
762 + if (zfcp_fsf_exchange_config_evaluate(req))
763 + return;
764 break;
765 default:
766 zfcp_erp_adapter_shutdown(adapter, 0, "fsecdh3");
767 diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
768 index eac9509..d99d4a0 100644
769 --- a/drivers/scsi/qla2xxx/qla_iocb.c
770 +++ b/drivers/scsi/qla2xxx/qla_iocb.c
771 @@ -423,6 +423,8 @@ qla2x00_start_scsi(srb_t *sp)
772 __constant_cpu_to_le16(CF_SIMPLE_TAG);
773 break;
774 }
775 + } else {
776 + cmd_pkt->control_flags = __constant_cpu_to_le16(CF_SIMPLE_TAG);
777 }
778
779 /* Load SCSI command packet. */
780 @@ -1331,11 +1333,11 @@ qla24xx_build_scsi_crc_2_iocbs(srb_t *sp, struct cmd_type_crc_2 *cmd_pkt,
781 fcp_cmnd->task_attribute = TSK_ORDERED;
782 break;
783 default:
784 - fcp_cmnd->task_attribute = 0;
785 + fcp_cmnd->task_attribute = TSK_SIMPLE;
786 break;
787 }
788 } else {
789 - fcp_cmnd->task_attribute = 0;
790 + fcp_cmnd->task_attribute = TSK_SIMPLE;
791 }
792
793 cmd_pkt->fcp_rsp_dseg_len = 0; /* Let response come in status iocb */
794 @@ -1541,7 +1543,12 @@ qla24xx_start_scsi(srb_t *sp)
795 case ORDERED_QUEUE_TAG:
796 cmd_pkt->task = TSK_ORDERED;
797 break;
798 + default:
799 + cmd_pkt->task = TSK_SIMPLE;
800 + break;
801 }
802 + } else {
803 + cmd_pkt->task = TSK_SIMPLE;
804 }
805
806 /* Load SCSI command packet. */
807 diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
808 index 3141c1a..105fff2 100644
809 --- a/drivers/scsi/sd.c
810 +++ b/drivers/scsi/sd.c
811 @@ -672,10 +672,17 @@ static int scsi_setup_flush_cmnd(struct scsi_device *sdp, struct request *rq)
812
813 static void sd_unprep_fn(struct request_queue *q, struct request *rq)
814 {
815 + struct scsi_cmnd *SCpnt = rq->special;
816 +
817 if (rq->cmd_flags & REQ_DISCARD) {
818 free_page((unsigned long)rq->buffer);
819 rq->buffer = NULL;
820 }
821 + if (SCpnt->cmnd != rq->cmd) {
822 + mempool_free(SCpnt->cmnd, sd_cdb_pool);
823 + SCpnt->cmnd = NULL;
824 + SCpnt->cmd_len = 0;
825 + }
826 }
827
828 /**
829 @@ -1539,21 +1546,6 @@ static int sd_done(struct scsi_cmnd *SCpnt)
830 if (rq_data_dir(SCpnt->request) == READ && scsi_prot_sg_count(SCpnt))
831 sd_dif_complete(SCpnt, good_bytes);
832
833 - if (scsi_host_dif_capable(sdkp->device->host, sdkp->protection_type)
834 - == SD_DIF_TYPE2_PROTECTION && SCpnt->cmnd != SCpnt->request->cmd) {
835 -
836 - /* We have to print a failed command here as the
837 - * extended CDB gets freed before scsi_io_completion()
838 - * is called.
839 - */
840 - if (result)
841 - scsi_print_command(SCpnt);
842 -
843 - mempool_free(SCpnt->cmnd, sd_cdb_pool);
844 - SCpnt->cmnd = NULL;
845 - SCpnt->cmd_len = 0;
846 - }
847 -
848 return good_bytes;
849 }
850
851 diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c
852 index 3799cf1..50dc93e 100644
853 --- a/drivers/staging/comedi/comedi_fops.c
854 +++ b/drivers/staging/comedi/comedi_fops.c
855 @@ -1370,6 +1370,7 @@ static int do_cancel_ioctl(struct comedi_device *dev, unsigned int arg,
856 void *file)
857 {
858 struct comedi_subdevice *s;
859 + int ret;
860
861 if (arg >= dev->n_subdevices)
862 return -EINVAL;
863 @@ -1386,7 +1387,11 @@ static int do_cancel_ioctl(struct comedi_device *dev, unsigned int arg,
864 if (s->busy != file)
865 return -EBUSY;
866
867 - return do_cancel(dev, s);
868 + ret = do_cancel(dev, s);
869 + if (comedi_get_subdevice_runflags(s) & SRF_USER)
870 + wake_up_interruptible(&s->async->wait_head);
871 +
872 + return ret;
873 }
874
875 /*
876 diff --git a/drivers/target/iscsi/iscsi_target_configfs.c b/drivers/target/iscsi/iscsi_target_configfs.c
877 index 00c58cc..facb3ad 100644
878 --- a/drivers/target/iscsi/iscsi_target_configfs.c
879 +++ b/drivers/target/iscsi/iscsi_target_configfs.c
880 @@ -415,7 +415,7 @@ static ssize_t __iscsi_##prefix##_store_##name( \
881 if (!capable(CAP_SYS_ADMIN)) \
882 return -EPERM; \
883 \
884 - snprintf(auth->name, PAGE_SIZE, "%s", page); \
885 + snprintf(auth->name, sizeof(auth->name), "%s", page); \
886 if (!strncmp("NULL", auth->name, 4)) \
887 auth->naf_flags &= ~flags; \
888 else \
889 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
890 index 49b139c..a969ec1 100644
891 --- a/drivers/usb/core/hub.c
892 +++ b/drivers/usb/core/hub.c
893 @@ -488,6 +488,15 @@ resubmit:
894 static inline int
895 hub_clear_tt_buffer (struct usb_device *hdev, u16 devinfo, u16 tt)
896 {
897 + /* Need to clear both directions for control ep */
898 + if (((devinfo >> 11) & USB_ENDPOINT_XFERTYPE_MASK) ==
899 + USB_ENDPOINT_XFER_CONTROL) {
900 + int status = usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
901 + HUB_CLEAR_TT_BUFFER, USB_RT_PORT,
902 + devinfo ^ 0x8000, tt, NULL, 0, 1000);
903 + if (status)
904 + return status;
905 + }
906 return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
907 HUB_CLEAR_TT_BUFFER, USB_RT_PORT, devinfo,
908 tt, NULL, 0, 1000);
909 diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
910 index 6c7945b..29a68f0a 100644
911 --- a/drivers/usb/dwc3/core.h
912 +++ b/drivers/usb/dwc3/core.h
913 @@ -641,8 +641,8 @@ struct dwc3 {
914
915 struct dwc3_event_type {
916 u32 is_devspec:1;
917 - u32 type:6;
918 - u32 reserved8_31:25;
919 + u32 type:7;
920 + u32 reserved8_31:24;
921 } __packed;
922
923 #define DWC3_DEPEVT_XFERCOMPLETE 0x01
924 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
925 index f62629b..6d6fb88 100644
926 --- a/drivers/usb/dwc3/gadget.c
927 +++ b/drivers/usb/dwc3/gadget.c
928 @@ -1393,6 +1393,7 @@ err1:
929 __dwc3_gadget_ep_disable(dwc->eps[0]);
930
931 err0:
932 + dwc->gadget_driver = NULL;
933 spin_unlock_irqrestore(&dwc->lock, flags);
934
935 return ret;
936 diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
937 index 84e82dc..8b1c27f 100644
938 --- a/drivers/usb/host/xhci-pci.c
939 +++ b/drivers/usb/host/xhci-pci.c
940 @@ -89,7 +89,6 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
941 xhci->quirks |= XHCI_AMD_PLL_FIX;
942 if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
943 pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) {
944 - xhci->quirks |= XHCI_SPURIOUS_SUCCESS;
945 xhci->quirks |= XHCI_EP_LIMIT_QUIRK;
946 xhci->limit_active_eps = 64;
947 xhci->quirks |= XHCI_SW_BW_CHECKING;
948 diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
949 index 843b3e8..1770ed5 100644
950 --- a/drivers/usb/host/xhci-ring.c
951 +++ b/drivers/usb/host/xhci-ring.c
952 @@ -434,7 +434,7 @@ static void ring_doorbell_for_active_rings(struct xhci_hcd *xhci,
953
954 /* A ring has pending URBs if its TD list is not empty */
955 if (!(ep->ep_state & EP_HAS_STREAMS)) {
956 - if (!(list_empty(&ep->ring->td_list)))
957 + if (ep->ring && !(list_empty(&ep->ring->td_list)))
958 xhci_ring_ep_doorbell(xhci, slot_id, ep_index, 0);
959 return;
960 }
961 diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
962 index 0f928b3..8072a93 100644
963 --- a/drivers/usb/host/xhci.c
964 +++ b/drivers/usb/host/xhci.c
965 @@ -1162,9 +1162,6 @@ static int xhci_check_args(struct usb_hcd *hcd, struct usb_device *udev,
966 }
967
968 xhci = hcd_to_xhci(hcd);
969 - if (xhci->xhc_state & XHCI_STATE_HALTED)
970 - return -ENODEV;
971 -
972 if (check_virt_dev) {
973 if (!udev->slot_id || !xhci->devs[udev->slot_id]) {
974 printk(KERN_DEBUG "xHCI %s called with unaddressed "
975 @@ -1180,6 +1177,9 @@ static int xhci_check_args(struct usb_hcd *hcd, struct usb_device *udev,
976 }
977 }
978
979 + if (xhci->xhc_state & XHCI_STATE_HALTED)
980 + return -ENODEV;
981 +
982 return 1;
983 }
984
985 @@ -4194,6 +4194,13 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
986
987 get_quirks(dev, xhci);
988
989 + /* In xhci controllers which follow xhci 1.0 spec gives a spurious
990 + * success event after a short transfer. This quirk will ignore such
991 + * spurious event.
992 + */
993 + if (xhci->hci_version > 0x96)
994 + xhci->quirks |= XHCI_SPURIOUS_SUCCESS;
995 +
996 /* Make sure the HC is halted. */
997 retval = xhci_halt(xhci);
998 if (retval)
999 diff --git a/drivers/usb/misc/sisusbvga/sisusb.c b/drivers/usb/misc/sisusbvga/sisusb.c
1000 index dd573ab..7af163d 100644
1001 --- a/drivers/usb/misc/sisusbvga/sisusb.c
1002 +++ b/drivers/usb/misc/sisusbvga/sisusb.c
1003 @@ -3247,6 +3247,7 @@ static const struct usb_device_id sisusb_table[] = {
1004 { USB_DEVICE(0x0711, 0x0903) },
1005 { USB_DEVICE(0x0711, 0x0918) },
1006 { USB_DEVICE(0x0711, 0x0920) },
1007 + { USB_DEVICE(0x0711, 0x0950) },
1008 { USB_DEVICE(0x182d, 0x021c) },
1009 { USB_DEVICE(0x182d, 0x0269) },
1010 { }
1011 diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
1012 index f8a9cd7..3e4c27d 100644
1013 --- a/drivers/usb/serial/ftdi_sio.c
1014 +++ b/drivers/usb/serial/ftdi_sio.c
1015 @@ -745,9 +745,34 @@ static struct usb_device_id id_table_combined [] = {
1016 { USB_DEVICE(FTDI_VID, FTDI_NDI_AURORA_SCU_PID),
1017 .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
1018 { USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) },
1019 - { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_SERIAL_VX7_PID) },
1020 - { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_CT29B_PID) },
1021 - { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_RTS01_PID) },
1022 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S03_PID) },
1023 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_59_PID) },
1024 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_57A_PID) },
1025 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_57B_PID) },
1026 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_29A_PID) },
1027 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_29B_PID) },
1028 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_29F_PID) },
1029 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_62B_PID) },
1030 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S01_PID) },
1031 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_63_PID) },
1032 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_29C_PID) },
1033 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_81B_PID) },
1034 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_82B_PID) },
1035 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_K5D_PID) },
1036 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_K4Y_PID) },
1037 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_K5G_PID) },
1038 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S05_PID) },
1039 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_60_PID) },
1040 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_61_PID) },
1041 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_62_PID) },
1042 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_63B_PID) },
1043 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_64_PID) },
1044 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_65_PID) },
1045 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_92_PID) },
1046 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_92D_PID) },
1047 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_W5R_PID) },
1048 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_A5R_PID) },
1049 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_PW1_PID) },
1050 { USB_DEVICE(FTDI_VID, FTDI_MAXSTREAM_PID) },
1051 { USB_DEVICE(FTDI_VID, FTDI_PHI_FISCO_PID) },
1052 { USB_DEVICE(TML_VID, TML_USB_SERIAL_PID) },
1053 diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
1054 index 6dd7925..1b8af46 100644
1055 --- a/drivers/usb/serial/ftdi_sio_ids.h
1056 +++ b/drivers/usb/serial/ftdi_sio_ids.h
1057 @@ -815,11 +815,35 @@
1058 /*
1059 * RT Systems programming cables for various ham radios
1060 */
1061 -#define RTSYSTEMS_VID 0x2100 /* Vendor ID */
1062 -#define RTSYSTEMS_SERIAL_VX7_PID 0x9e52 /* Serial converter for VX-7 Radios using FT232RL */
1063 -#define RTSYSTEMS_CT29B_PID 0x9e54 /* CT29B Radio Cable */
1064 -#define RTSYSTEMS_RTS01_PID 0x9e57 /* USB-RTS01 Radio Cable */
1065 -
1066 +#define RTSYSTEMS_VID 0x2100 /* Vendor ID */
1067 +#define RTSYSTEMS_USB_S03_PID 0x9001 /* RTS-03 USB to Serial Adapter */
1068 +#define RTSYSTEMS_USB_59_PID 0x9e50 /* USB-59 USB to 8 pin plug */
1069 +#define RTSYSTEMS_USB_57A_PID 0x9e51 /* USB-57A USB to 4pin 3.5mm plug */
1070 +#define RTSYSTEMS_USB_57B_PID 0x9e52 /* USB-57B USB to extended 4pin 3.5mm plug */
1071 +#define RTSYSTEMS_USB_29A_PID 0x9e53 /* USB-29A USB to 3.5mm stereo plug */
1072 +#define RTSYSTEMS_USB_29B_PID 0x9e54 /* USB-29B USB to 6 pin mini din */
1073 +#define RTSYSTEMS_USB_29F_PID 0x9e55 /* USB-29F USB to 6 pin modular plug */
1074 +#define RTSYSTEMS_USB_62B_PID 0x9e56 /* USB-62B USB to 8 pin mini din plug*/
1075 +#define RTSYSTEMS_USB_S01_PID 0x9e57 /* USB-RTS01 USB to 3.5 mm stereo plug*/
1076 +#define RTSYSTEMS_USB_63_PID 0x9e58 /* USB-63 USB to 9 pin female*/
1077 +#define RTSYSTEMS_USB_29C_PID 0x9e59 /* USB-29C USB to 4 pin modular plug*/
1078 +#define RTSYSTEMS_USB_81B_PID 0x9e5A /* USB-81 USB to 8 pin mini din plug*/
1079 +#define RTSYSTEMS_USB_82B_PID 0x9e5B /* USB-82 USB to 2.5 mm stereo plug*/
1080 +#define RTSYSTEMS_USB_K5D_PID 0x9e5C /* USB-K5D USB to 8 pin modular plug*/
1081 +#define RTSYSTEMS_USB_K4Y_PID 0x9e5D /* USB-K4Y USB to 2.5/3.5 mm plugs*/
1082 +#define RTSYSTEMS_USB_K5G_PID 0x9e5E /* USB-K5G USB to 8 pin modular plug*/
1083 +#define RTSYSTEMS_USB_S05_PID 0x9e5F /* USB-RTS05 USB to 2.5 mm stereo plug*/
1084 +#define RTSYSTEMS_USB_60_PID 0x9e60 /* USB-60 USB to 6 pin din*/
1085 +#define RTSYSTEMS_USB_61_PID 0x9e61 /* USB-61 USB to 6 pin mini din*/
1086 +#define RTSYSTEMS_USB_62_PID 0x9e62 /* USB-62 USB to 8 pin mini din*/
1087 +#define RTSYSTEMS_USB_63B_PID 0x9e63 /* USB-63 USB to 9 pin female*/
1088 +#define RTSYSTEMS_USB_64_PID 0x9e64 /* USB-64 USB to 9 pin male*/
1089 +#define RTSYSTEMS_USB_65_PID 0x9e65 /* USB-65 USB to 9 pin female null modem*/
1090 +#define RTSYSTEMS_USB_92_PID 0x9e66 /* USB-92 USB to 12 pin plug*/
1091 +#define RTSYSTEMS_USB_92D_PID 0x9e67 /* USB-92D USB to 12 pin plug data*/
1092 +#define RTSYSTEMS_USB_W5R_PID 0x9e68 /* USB-W5R USB to 8 pin modular plug*/
1093 +#define RTSYSTEMS_USB_A5R_PID 0x9e69 /* USB-A5R USB to 8 pin modular plug*/
1094 +#define RTSYSTEMS_USB_PW1_PID 0x9e6A /* USB-PW1 USB to 8 pin modular plug*/
1095
1096 /*
1097 * Physik Instrumente
1098 diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
1099 index a39a08c..a7492ba 100644
1100 --- a/drivers/usb/serial/ti_usb_3410_5052.c
1101 +++ b/drivers/usb/serial/ti_usb_3410_5052.c
1102 @@ -390,7 +390,7 @@ static int ti_startup(struct usb_serial *serial)
1103 usb_set_serial_data(serial, tdev);
1104
1105 /* determine device type */
1106 - if (usb_match_id(serial->interface, ti_id_table_3410))
1107 + if (serial->type == &ti_1port_device)
1108 tdev->td_is_3410 = 1;
1109 dbg("%s - device type is %s", __func__,
1110 tdev->td_is_3410 ? "3410" : "5052");
1111 diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
1112 index 8ee632c..cf442e0 100644
1113 --- a/drivers/usb/storage/unusual_devs.h
1114 +++ b/drivers/usb/storage/unusual_devs.h
1115 @@ -657,6 +657,13 @@ UNUSUAL_DEV( 0x054c, 0x016a, 0x0000, 0x9999,
1116 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1117 US_FL_FIX_INQUIRY ),
1118
1119 +/* Submitted by Ren Bigcren <bigcren.ren@sonymobile.com> */
1120 +UNUSUAL_DEV( 0x054c, 0x02a5, 0x0100, 0x0100,
1121 + "Sony Corp.",
1122 + "MicroVault Flash Drive",
1123 + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1124 + US_FL_NO_READ_CAPACITY_16 ),
1125 +
1126 /* floppy reports multiple luns */
1127 UNUSUAL_DEV( 0x055d, 0x2020, 0x0000, 0x0210,
1128 "SAMSUNG",
1129 diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
1130 index 52bfd07..c212de7 100644
1131 --- a/drivers/virtio/virtio_ring.c
1132 +++ b/drivers/virtio/virtio_ring.c
1133 @@ -498,16 +498,18 @@ EXPORT_SYMBOL_GPL(virtqueue_disable_cb);
1134 * virtqueue_enable_cb - restart callbacks after disable_cb.
1135 * @vq: the struct virtqueue we're talking about.
1136 *
1137 - * This re-enables callbacks; it returns "false" if there are pending
1138 - * buffers in the queue, to detect a possible race between the driver
1139 - * checking for more work, and enabling callbacks.
1140 + * This re-enables callbacks; it returns current queue state
1141 + * in an opaque unsigned value. This value should be later tested by
1142 + * virtqueue_poll, to detect a possible race between the driver checking for
1143 + * more work, and enabling callbacks.
1144 *
1145 * Caller must ensure we don't call this with other virtqueue
1146 * operations at the same time (except where noted).
1147 */
1148 -bool virtqueue_enable_cb(struct virtqueue *_vq)
1149 +unsigned virtqueue_enable_cb_prepare(struct virtqueue *_vq)
1150 {
1151 struct vring_virtqueue *vq = to_vvq(_vq);
1152 + u16 last_used_idx;
1153
1154 START_USE(vq);
1155
1156 @@ -517,15 +519,45 @@ bool virtqueue_enable_cb(struct virtqueue *_vq)
1157 * either clear the flags bit or point the event index at the next
1158 * entry. Always do both to keep code simple. */
1159 vq->vring.avail->flags &= ~VRING_AVAIL_F_NO_INTERRUPT;
1160 - vring_used_event(&vq->vring) = vq->last_used_idx;
1161 + vring_used_event(&vq->vring) = last_used_idx = vq->last_used_idx;
1162 + END_USE(vq);
1163 + return last_used_idx;
1164 +}
1165 +EXPORT_SYMBOL_GPL(virtqueue_enable_cb_prepare);
1166 +
1167 +/**
1168 + * virtqueue_poll - query pending used buffers
1169 + * @vq: the struct virtqueue we're talking about.
1170 + * @last_used_idx: virtqueue state (from call to virtqueue_enable_cb_prepare).
1171 + *
1172 + * Returns "true" if there are pending used buffers in the queue.
1173 + *
1174 + * This does not need to be serialized.
1175 + */
1176 +bool virtqueue_poll(struct virtqueue *_vq, unsigned last_used_idx)
1177 +{
1178 + struct vring_virtqueue *vq = to_vvq(_vq);
1179 +
1180 virtio_mb(vq);
1181 - if (unlikely(more_used(vq))) {
1182 - END_USE(vq);
1183 - return false;
1184 - }
1185 + return (u16)last_used_idx != vq->vring.used->idx;
1186 +}
1187 +EXPORT_SYMBOL_GPL(virtqueue_poll);
1188
1189 - END_USE(vq);
1190 - return true;
1191 +/**
1192 + * virtqueue_enable_cb - restart callbacks after disable_cb.
1193 + * @vq: the struct virtqueue we're talking about.
1194 + *
1195 + * This re-enables callbacks; it returns "false" if there are pending
1196 + * buffers in the queue, to detect a possible race between the driver
1197 + * checking for more work, and enabling callbacks.
1198 + *
1199 + * Caller must ensure we don't call this with other virtqueue
1200 + * operations at the same time (except where noted).
1201 + */
1202 +bool virtqueue_enable_cb(struct virtqueue *_vq)
1203 +{
1204 + unsigned last_used_idx = virtqueue_enable_cb_prepare(_vq);
1205 + return !virtqueue_poll(_vq, last_used_idx);
1206 }
1207 EXPORT_SYMBOL_GPL(virtqueue_enable_cb);
1208
1209 diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c
1210 index b2db77e..82b27d4 100644
1211 --- a/drivers/xen/evtchn.c
1212 +++ b/drivers/xen/evtchn.c
1213 @@ -377,18 +377,12 @@ static long evtchn_ioctl(struct file *file,
1214 if (unbind.port >= NR_EVENT_CHANNELS)
1215 break;
1216
1217 - spin_lock_irq(&port_user_lock);
1218 -
1219 rc = -ENOTCONN;
1220 - if (get_port_user(unbind.port) != u) {
1221 - spin_unlock_irq(&port_user_lock);
1222 + if (get_port_user(unbind.port) != u)
1223 break;
1224 - }
1225
1226 disable_irq(irq_from_evtchn(unbind.port));
1227
1228 - spin_unlock_irq(&port_user_lock);
1229 -
1230 evtchn_unbind_from_user(u, unbind.port);
1231
1232 rc = 0;
1233 @@ -488,26 +482,15 @@ static int evtchn_release(struct inode *inode, struct file *filp)
1234 int i;
1235 struct per_user_data *u = filp->private_data;
1236
1237 - spin_lock_irq(&port_user_lock);
1238 -
1239 - free_page((unsigned long)u->ring);
1240 -
1241 for (i = 0; i < NR_EVENT_CHANNELS; i++) {
1242 if (get_port_user(i) != u)
1243 continue;
1244
1245 disable_irq(irq_from_evtchn(i));
1246 - }
1247 -
1248 - spin_unlock_irq(&port_user_lock);
1249 -
1250 - for (i = 0; i < NR_EVENT_CHANNELS; i++) {
1251 - if (get_port_user(i) != u)
1252 - continue;
1253 -
1254 evtchn_unbind_from_user(get_port_user(i), i);
1255 }
1256
1257 + free_page((unsigned long)u->ring);
1258 kfree(u->name);
1259 kfree(u);
1260
1261 diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
1262 index fef1f21..c4f0a99 100644
1263 --- a/fs/btrfs/extent-tree.c
1264 +++ b/fs/btrfs/extent-tree.c
1265 @@ -6846,6 +6846,7 @@ int btrfs_drop_snapshot(struct btrfs_root *root,
1266 int err = 0;
1267 int ret;
1268 int level;
1269 + bool root_dropped = false;
1270
1271 path = btrfs_alloc_path();
1272 if (!path) {
1273 @@ -6903,6 +6904,7 @@ int btrfs_drop_snapshot(struct btrfs_root *root,
1274 while (1) {
1275 btrfs_tree_lock(path->nodes[level]);
1276 btrfs_set_lock_blocking(path->nodes[level]);
1277 + path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING;
1278
1279 ret = btrfs_lookup_extent_info(trans, root,
1280 path->nodes[level]->start,
1281 @@ -6919,6 +6921,7 @@ int btrfs_drop_snapshot(struct btrfs_root *root,
1282 break;
1283
1284 btrfs_tree_unlock(path->nodes[level]);
1285 + path->locks[level] = 0;
1286 WARN_ON(wc->refs[level] != 1);
1287 level--;
1288 }
1289 @@ -7014,12 +7017,22 @@ int btrfs_drop_snapshot(struct btrfs_root *root,
1290 free_extent_buffer(root->commit_root);
1291 kfree(root);
1292 }
1293 + root_dropped = true;
1294 out_end_trans:
1295 btrfs_end_transaction_throttle(trans, tree_root);
1296 out_free:
1297 kfree(wc);
1298 btrfs_free_path(path);
1299 out:
1300 + /*
1301 + * So if we need to stop dropping the snapshot for whatever reason we
1302 + * need to make sure to add it back to the dead root list so that we
1303 + * keep trying to do the work later. This also cleans up roots if we
1304 + * don't have it in the radix (like when we recover after a power fail
1305 + * or unmount) so we don't leak memory.
1306 + */
1307 + if (root_dropped == false)
1308 + btrfs_add_dead_root(root);
1309 if (err)
1310 btrfs_std_error(root->fs_info, err);
1311 return err;
1312 diff --git a/fs/super.c b/fs/super.c
1313 index cf00177..3c520a5 100644
1314 --- a/fs/super.c
1315 +++ b/fs/super.c
1316 @@ -298,19 +298,19 @@ EXPORT_SYMBOL(deactivate_super);
1317 * and want to turn it into a full-blown active reference. grab_super()
1318 * is called with sb_lock held and drops it. Returns 1 in case of
1319 * success, 0 if we had failed (superblock contents was already dead or
1320 - * dying when grab_super() had been called).
1321 + * dying when grab_super() had been called). Note that this is only
1322 + * called for superblocks not in rundown mode (== ones still on ->fs_supers
1323 + * of their type), so increment of ->s_count is OK here.
1324 */
1325 static int grab_super(struct super_block *s) __releases(sb_lock)
1326 {
1327 - if (atomic_inc_not_zero(&s->s_active)) {
1328 - spin_unlock(&sb_lock);
1329 - return 1;
1330 - }
1331 - /* it's going away */
1332 s->s_count++;
1333 spin_unlock(&sb_lock);
1334 - /* wait for it to die */
1335 down_write(&s->s_umount);
1336 + if ((s->s_flags & MS_BORN) && atomic_inc_not_zero(&s->s_active)) {
1337 + put_super(s);
1338 + return 1;
1339 + }
1340 up_write(&s->s_umount);
1341 put_super(s);
1342 return 0;
1343 @@ -440,11 +440,6 @@ retry:
1344 destroy_super(s);
1345 s = NULL;
1346 }
1347 - down_write(&old->s_umount);
1348 - if (unlikely(!(old->s_flags & MS_BORN))) {
1349 - deactivate_locked_super(old);
1350 - goto retry;
1351 - }
1352 return old;
1353 }
1354 }
1355 @@ -677,10 +672,10 @@ restart:
1356 if (hlist_unhashed(&sb->s_instances))
1357 continue;
1358 if (sb->s_bdev == bdev) {
1359 - if (grab_super(sb)) /* drops sb_lock */
1360 - return sb;
1361 - else
1362 + if (!grab_super(sb))
1363 goto restart;
1364 + up_write(&sb->s_umount);
1365 + return sb;
1366 }
1367 }
1368 spin_unlock(&sb_lock);
1369 diff --git a/include/linux/firewire-cdev.h b/include/linux/firewire-cdev.h
1370 index d500369..1db453e 100644
1371 --- a/include/linux/firewire-cdev.h
1372 +++ b/include/linux/firewire-cdev.h
1373 @@ -215,8 +215,8 @@ struct fw_cdev_event_request2 {
1374 * with the %FW_CDEV_ISO_INTERRUPT bit set, when explicitly requested with
1375 * %FW_CDEV_IOC_FLUSH_ISO, or when there have been so many completed packets
1376 * without the interrupt bit set that the kernel's internal buffer for @header
1377 - * is about to overflow. (In the last case, kernels with ABI version < 5 drop
1378 - * header data up to the next interrupt packet.)
1379 + * is about to overflow. (In the last case, ABI versions < 5 drop header data
1380 + * up to the next interrupt packet.)
1381 *
1382 * Isochronous transmit events (context type %FW_CDEV_ISO_CONTEXT_TRANSMIT):
1383 *
1384 diff --git a/include/linux/firewire.h b/include/linux/firewire.h
1385 index cdc9b71..4d259fc 100644
1386 --- a/include/linux/firewire.h
1387 +++ b/include/linux/firewire.h
1388 @@ -409,6 +409,7 @@ struct fw_iso_context {
1389 int type;
1390 int channel;
1391 int speed;
1392 + bool drop_overflow_headers;
1393 size_t header_size;
1394 union {
1395 fw_iso_callback_t sc;
1396 diff --git a/include/linux/virtio.h b/include/linux/virtio.h
1397 index 8efd28a..2b779bf 100644
1398 --- a/include/linux/virtio.h
1399 +++ b/include/linux/virtio.h
1400 @@ -44,6 +44,10 @@ void virtqueue_disable_cb(struct virtqueue *vq);
1401
1402 bool virtqueue_enable_cb(struct virtqueue *vq);
1403
1404 +unsigned virtqueue_enable_cb_prepare(struct virtqueue *vq);
1405 +
1406 +bool virtqueue_poll(struct virtqueue *vq, unsigned);
1407 +
1408 bool virtqueue_enable_cb_delayed(struct virtqueue *vq);
1409
1410 void *virtqueue_detach_unused_buf(struct virtqueue *vq);
1411 diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c
1412 index e675182..c9ce09a 100644
1413 --- a/kernel/trace/trace_syscalls.c
1414 +++ b/kernel/trace/trace_syscalls.c
1415 @@ -358,6 +358,9 @@ void ftrace_syscall_exit(void *ignore, struct pt_regs *regs, long ret)
1416 if (!sys_data)
1417 return;
1418
1419 + local_save_flags(irq_flags);
1420 + pc = preempt_count();
1421 +
1422 event = trace_current_buffer_lock_reserve(&buffer,
1423 sys_data->exit_event->event.type, sizeof(*entry),
1424 irq_flags, pc);
1425 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
1426 index 533ea80..8090542 100644
1427 --- a/mm/page_alloc.c
1428 +++ b/mm/page_alloc.c
1429 @@ -5592,6 +5592,10 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
1430 zone->free_area[order].nr_free--;
1431 __mod_zone_page_state(zone, NR_FREE_PAGES,
1432 - (1UL << order));
1433 +#ifdef CONFIG_HIGHMEM
1434 + if (PageHighMem(page))
1435 + totalhigh_pages -= 1 << order;
1436 +#endif
1437 for (i = 0; i < (1 << order); i++)
1438 SetPageReserved((page+i));
1439 pfn += (1 << order);
1440 diff --git a/sound/soc/codecs/max98088.c b/sound/soc/codecs/max98088.c
1441 index 4790568..8df4597 100644
1442 --- a/sound/soc/codecs/max98088.c
1443 +++ b/sound/soc/codecs/max98088.c
1444 @@ -1594,7 +1594,7 @@ static int max98088_dai2_digital_mute(struct snd_soc_dai *codec_dai, int mute)
1445
1446 static void max98088_sync_cache(struct snd_soc_codec *codec)
1447 {
1448 - u16 *reg_cache = codec->reg_cache;
1449 + u8 *reg_cache = codec->reg_cache;
1450 int i;
1451
1452 if (!codec->cache_sync)
1453 diff --git a/sound/soc/codecs/wm8962.c b/sound/soc/codecs/wm8962.c
1454 index 96f6f9f..e96c6ed 100644
1455 --- a/sound/soc/codecs/wm8962.c
1456 +++ b/sound/soc/codecs/wm8962.c
1457 @@ -1599,7 +1599,6 @@ static int wm8962_put_hp_sw(struct snd_kcontrol *kcontrol,
1458 struct snd_ctl_elem_value *ucontrol)
1459 {
1460 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
1461 - u16 *reg_cache = codec->reg_cache;
1462 int ret;
1463
1464 /* Apply the update (if any) */
1465 @@ -1608,16 +1607,19 @@ static int wm8962_put_hp_sw(struct snd_kcontrol *kcontrol,
1466 return 0;
1467
1468 /* If the left PGA is enabled hit that VU bit... */
1469 - if (snd_soc_read(codec, WM8962_PWR_MGMT_2) & WM8962_HPOUTL_PGA_ENA)
1470 - return snd_soc_write(codec, WM8962_HPOUTL_VOLUME,
1471 - reg_cache[WM8962_HPOUTL_VOLUME]);
1472 + ret = snd_soc_read(codec, WM8962_PWR_MGMT_2);
1473 + if (ret & WM8962_HPOUTL_PGA_ENA) {
1474 + snd_soc_write(codec, WM8962_HPOUTL_VOLUME,
1475 + snd_soc_read(codec, WM8962_HPOUTL_VOLUME));
1476 + return 1;
1477 + }
1478
1479 /* ...otherwise the right. The VU is stereo. */
1480 - if (snd_soc_read(codec, WM8962_PWR_MGMT_2) & WM8962_HPOUTR_PGA_ENA)
1481 - return snd_soc_write(codec, WM8962_HPOUTR_VOLUME,
1482 - reg_cache[WM8962_HPOUTR_VOLUME]);
1483 + if (ret & WM8962_HPOUTR_PGA_ENA)
1484 + snd_soc_write(codec, WM8962_HPOUTR_VOLUME,
1485 + snd_soc_read(codec, WM8962_HPOUTR_VOLUME));
1486
1487 - return 0;
1488 + return 1;
1489 }
1490
1491 /* The VU bits for the speakers are in a different register to the mute
1492 @@ -3363,7 +3365,6 @@ static int wm8962_probe(struct snd_soc_codec *codec)
1493 int ret;
1494 struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
1495 struct wm8962_pdata *pdata = dev_get_platdata(codec->dev);
1496 - u16 *reg_cache = codec->reg_cache;
1497 int i, trigger, irq_pol;
1498 bool dmicclk, dmicdat;
1499
1500 @@ -3421,8 +3422,9 @@ static int wm8962_probe(struct snd_soc_codec *codec)
1501
1502 /* Put the speakers into mono mode? */
1503 if (pdata->spk_mono)
1504 - reg_cache[WM8962_CLASS_D_CONTROL_2]
1505 - |= WM8962_SPK_MONO;
1506 + snd_soc_update_bits(codec, WM8962_CLASS_D_CONTROL_2,
1507 + WM8962_SPK_MONO_MASK, WM8962_SPK_MONO);
1508 +
1509
1510 /* Micbias setup, detection enable and detection
1511 * threasholds. */