Magellan Linux

Contents of /trunk/kernel-lts/patches-3.4/0148-3.4.48-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2208 - (show annotations) (download)
Fri Jun 14 09:37:30 2013 UTC (10 years, 10 months ago) by niro
File size: 39167 byte(s)
-linux-3.4.49
1 diff --git a/arch/powerpc/platforms/pseries/eeh_pseries.c b/arch/powerpc/platforms/pseries/eeh_pseries.c
2 index 8752f79..8a811d9 100644
3 --- a/arch/powerpc/platforms/pseries/eeh_pseries.c
4 +++ b/arch/powerpc/platforms/pseries/eeh_pseries.c
5 @@ -83,7 +83,11 @@ static int pseries_eeh_init(void)
6 ibm_configure_pe = rtas_token("ibm,configure-pe");
7 ibm_configure_bridge = rtas_token ("ibm,configure-bridge");
8
9 - /* necessary sanity check */
10 + /*
11 + * Necessary sanity check. We needn't check "get-config-addr-info"
12 + * and its variant since the old firmware probably support address
13 + * of domain/bus/slot/function for EEH RTAS operations.
14 + */
15 if (ibm_set_eeh_option == RTAS_UNKNOWN_SERVICE) {
16 pr_warning("%s: RTAS service <ibm,set-eeh-option> invalid\n",
17 __func__);
18 @@ -102,12 +106,6 @@ static int pseries_eeh_init(void)
19 pr_warning("%s: RTAS service <ibm,slot-error-detail> invalid\n",
20 __func__);
21 return -EINVAL;
22 - } else if (ibm_get_config_addr_info2 == RTAS_UNKNOWN_SERVICE &&
23 - ibm_get_config_addr_info == RTAS_UNKNOWN_SERVICE) {
24 - pr_warning("%s: RTAS service <ibm,get-config-addr-info2> and "
25 - "<ibm,get-config-addr-info> invalid\n",
26 - __func__);
27 - return -EINVAL;
28 } else if (ibm_configure_pe == RTAS_UNKNOWN_SERVICE &&
29 ibm_configure_bridge == RTAS_UNKNOWN_SERVICE) {
30 pr_warning("%s: RTAS service <ibm,configure-pe> and "
31 diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
32 index 91357e1..6d2c49b 100644
33 --- a/drivers/acpi/video.c
34 +++ b/drivers/acpi/video.c
35 @@ -447,6 +447,22 @@ static struct dmi_system_id video_dmi_table[] __initdata = {
36 DMI_MATCH(DMI_PRODUCT_NAME, "HP Folio 13 - 2000 Notebook PC"),
37 },
38 },
39 + {
40 + .callback = video_ignore_initial_backlight,
41 + .ident = "HP Pavilion g6 Notebook PC",
42 + .matches = {
43 + DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
44 + DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion g6 Notebook PC"),
45 + },
46 + },
47 + {
48 + .callback = video_ignore_initial_backlight,
49 + .ident = "HP Pavilion m4",
50 + .matches = {
51 + DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
52 + DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion m4 Notebook PC"),
53 + },
54 + },
55 {}
56 };
57
58 diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
59 index c869436..dc33ba5 100644
60 --- a/drivers/gpu/drm/drm_irq.c
61 +++ b/drivers/gpu/drm/drm_irq.c
62 @@ -981,7 +981,7 @@ EXPORT_SYMBOL(drm_vblank_off);
63 */
64 void drm_vblank_pre_modeset(struct drm_device *dev, int crtc)
65 {
66 - /* vblank is not initialized (IRQ not installed ?) */
67 + /* vblank is not initialized (IRQ not installed ?), or has been freed */
68 if (!dev->num_crtcs)
69 return;
70 /*
71 @@ -1003,6 +1003,10 @@ void drm_vblank_post_modeset(struct drm_device *dev, int crtc)
72 {
73 unsigned long irqflags;
74
75 + /* vblank is not initialized (IRQ not installed ?), or has been freed */
76 + if (!dev->num_crtcs)
77 + return;
78 +
79 if (dev->vblank_inmodeset[crtc]) {
80 spin_lock_irqsave(&dev->vbl_lock, irqflags);
81 dev->vblank_disable_allowed = 1;
82 diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c
83 index 8ea202f..fa74a86 100644
84 --- a/drivers/gpu/drm/gma500/framebuffer.c
85 +++ b/drivers/gpu/drm/gma500/framebuffer.c
86 @@ -782,8 +782,8 @@ void psb_modeset_init(struct drm_device *dev)
87 for (i = 0; i < dev_priv->num_pipe; i++)
88 psb_intel_crtc_init(dev, i, mode_dev);
89
90 - dev->mode_config.max_width = 2048;
91 - dev->mode_config.max_height = 2048;
92 + dev->mode_config.max_width = 4096;
93 + dev->mode_config.max_height = 4096;
94
95 psb_setup_outputs(dev);
96 }
97 diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
98 index 1ad5906..207180d 100644
99 --- a/drivers/gpu/drm/i915/intel_lvds.c
100 +++ b/drivers/gpu/drm/i915/intel_lvds.c
101 @@ -747,10 +747,10 @@ static const struct dmi_system_id intel_no_lvds[] = {
102 },
103 {
104 .callback = intel_no_lvds_dmi_callback,
105 - .ident = "Hewlett-Packard HP t5740e Thin Client",
106 + .ident = "Hewlett-Packard HP t5740",
107 .matches = {
108 DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
109 - DMI_MATCH(DMI_PRODUCT_NAME, "HP t5740e Thin Client"),
110 + DMI_MATCH(DMI_PRODUCT_NAME, " t5740"),
111 },
112 },
113 {
114 diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
115 index 1b6b157..aeb9d6e 100644
116 --- a/drivers/gpu/drm/i915/intel_sdvo.c
117 +++ b/drivers/gpu/drm/i915/intel_sdvo.c
118 @@ -1581,7 +1581,7 @@ static void intel_sdvo_get_lvds_modes(struct drm_connector *connector)
119 * Assume that the preferred modes are
120 * arranged in priority order.
121 */
122 - intel_ddc_get_modes(connector, intel_sdvo->i2c);
123 + intel_ddc_get_modes(connector, &intel_sdvo->ddc);
124 if (list_empty(&connector->probed_modes) == false)
125 goto end;
126
127 diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
128 index 23e3ea6..ced9370 100644
129 --- a/drivers/gpu/drm/radeon/atombios_encoders.c
130 +++ b/drivers/gpu/drm/radeon/atombios_encoders.c
131 @@ -396,6 +396,8 @@ atombios_digital_setup(struct drm_encoder *encoder, int action)
132 int
133 atombios_get_encoder_mode(struct drm_encoder *encoder)
134 {
135 + struct drm_device *dev = encoder->dev;
136 + struct radeon_device *rdev = dev->dev_private;
137 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
138 struct drm_connector *connector;
139 struct radeon_connector *radeon_connector;
140 @@ -421,7 +423,8 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
141 case DRM_MODE_CONNECTOR_DVII:
142 case DRM_MODE_CONNECTOR_HDMIB: /* HDMI-B is basically DL-DVI; analog works fine */
143 if (drm_detect_hdmi_monitor(radeon_connector->edid) &&
144 - radeon_audio)
145 + radeon_audio &&
146 + !ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */
147 return ATOM_ENCODER_MODE_HDMI;
148 else if (radeon_connector->use_digital)
149 return ATOM_ENCODER_MODE_DVI;
150 @@ -432,7 +435,8 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
151 case DRM_MODE_CONNECTOR_HDMIA:
152 default:
153 if (drm_detect_hdmi_monitor(radeon_connector->edid) &&
154 - radeon_audio)
155 + radeon_audio &&
156 + !ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */
157 return ATOM_ENCODER_MODE_HDMI;
158 else
159 return ATOM_ENCODER_MODE_DVI;
160 @@ -446,7 +450,8 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
161 (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP))
162 return ATOM_ENCODER_MODE_DP;
163 else if (drm_detect_hdmi_monitor(radeon_connector->edid) &&
164 - radeon_audio)
165 + radeon_audio &&
166 + !ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */
167 return ATOM_ENCODER_MODE_HDMI;
168 else
169 return ATOM_ENCODER_MODE_DVI;
170 diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
171 index 6a8776e..300099d 100644
172 --- a/drivers/gpu/drm/radeon/evergreen.c
173 +++ b/drivers/gpu/drm/radeon/evergreen.c
174 @@ -3258,6 +3258,12 @@ static int evergreen_startup(struct radeon_device *rdev)
175 }
176
177 /* Enable IRQ */
178 + if (!rdev->irq.installed) {
179 + r = radeon_irq_kms_init(rdev);
180 + if (r)
181 + return r;
182 + }
183 +
184 r = r600_irq_init(rdev);
185 if (r) {
186 DRM_ERROR("radeon: IH init failed (%d).\n", r);
187 @@ -3409,10 +3415,6 @@ int evergreen_init(struct radeon_device *rdev)
188 if (r)
189 return r;
190
191 - r = radeon_irq_kms_init(rdev);
192 - if (r)
193 - return r;
194 -
195 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL;
196 r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024);
197
198 diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
199 index d706da8..f5387b3 100644
200 --- a/drivers/gpu/drm/radeon/ni.c
201 +++ b/drivers/gpu/drm/radeon/ni.c
202 @@ -1614,6 +1614,12 @@ static int cayman_startup(struct radeon_device *rdev)
203 }
204
205 /* Enable IRQ */
206 + if (!rdev->irq.installed) {
207 + r = radeon_irq_kms_init(rdev);
208 + if (r)
209 + return r;
210 + }
211 +
212 r = r600_irq_init(rdev);
213 if (r) {
214 DRM_ERROR("radeon: IH init failed (%d).\n", r);
215 @@ -1744,10 +1750,6 @@ int cayman_init(struct radeon_device *rdev)
216 if (r)
217 return r;
218
219 - r = radeon_irq_kms_init(rdev);
220 - if (r)
221 - return r;
222 -
223 ring->ring_obj = NULL;
224 r600_ring_init(rdev, ring, 1024 * 1024);
225
226 diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
227 index fe33d35..40ed0e5 100644
228 --- a/drivers/gpu/drm/radeon/r100.c
229 +++ b/drivers/gpu/drm/radeon/r100.c
230 @@ -3952,6 +3952,12 @@ static int r100_startup(struct radeon_device *rdev)
231 }
232
233 /* Enable IRQ */
234 + if (!rdev->irq.installed) {
235 + r = radeon_irq_kms_init(rdev);
236 + if (r)
237 + return r;
238 + }
239 +
240 r100_irq_set(rdev);
241 rdev->config.r100.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
242 /* 1M ring buffer */
243 @@ -4113,9 +4119,6 @@ int r100_init(struct radeon_device *rdev)
244 r = radeon_fence_driver_init(rdev);
245 if (r)
246 return r;
247 - r = radeon_irq_kms_init(rdev);
248 - if (r)
249 - return r;
250 /* Memory manager */
251 r = radeon_bo_init(rdev);
252 if (r)
253 diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c
254 index fa14383..63b53aa 100644
255 --- a/drivers/gpu/drm/radeon/r300.c
256 +++ b/drivers/gpu/drm/radeon/r300.c
257 @@ -1405,6 +1405,12 @@ static int r300_startup(struct radeon_device *rdev)
258 }
259
260 /* Enable IRQ */
261 + if (!rdev->irq.installed) {
262 + r = radeon_irq_kms_init(rdev);
263 + if (r)
264 + return r;
265 + }
266 +
267 r100_irq_set(rdev);
268 rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
269 /* 1M ring buffer */
270 @@ -1545,9 +1551,6 @@ int r300_init(struct radeon_device *rdev)
271 r = radeon_fence_driver_init(rdev);
272 if (r)
273 return r;
274 - r = radeon_irq_kms_init(rdev);
275 - if (r)
276 - return r;
277 /* Memory manager */
278 r = radeon_bo_init(rdev);
279 if (r)
280 diff --git a/drivers/gpu/drm/radeon/r420.c b/drivers/gpu/drm/radeon/r420.c
281 index f3fcaac..1a9347f 100644
282 --- a/drivers/gpu/drm/radeon/r420.c
283 +++ b/drivers/gpu/drm/radeon/r420.c
284 @@ -265,6 +265,12 @@ static int r420_startup(struct radeon_device *rdev)
285 }
286
287 /* Enable IRQ */
288 + if (!rdev->irq.installed) {
289 + r = radeon_irq_kms_init(rdev);
290 + if (r)
291 + return r;
292 + }
293 +
294 r100_irq_set(rdev);
295 rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
296 /* 1M ring buffer */
297 @@ -417,10 +423,6 @@ int r420_init(struct radeon_device *rdev)
298 if (r) {
299 return r;
300 }
301 - r = radeon_irq_kms_init(rdev);
302 - if (r) {
303 - return r;
304 - }
305 /* Memory manager */
306 r = radeon_bo_init(rdev);
307 if (r) {
308 diff --git a/drivers/gpu/drm/radeon/r520.c b/drivers/gpu/drm/radeon/r520.c
309 index ebcc15b..57be784 100644
310 --- a/drivers/gpu/drm/radeon/r520.c
311 +++ b/drivers/gpu/drm/radeon/r520.c
312 @@ -194,6 +194,12 @@ static int r520_startup(struct radeon_device *rdev)
313 }
314
315 /* Enable IRQ */
316 + if (!rdev->irq.installed) {
317 + r = radeon_irq_kms_init(rdev);
318 + if (r)
319 + return r;
320 + }
321 +
322 rs600_irq_set(rdev);
323 rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
324 /* 1M ring buffer */
325 @@ -301,9 +307,6 @@ int r520_init(struct radeon_device *rdev)
326 r = radeon_fence_driver_init(rdev);
327 if (r)
328 return r;
329 - r = radeon_irq_kms_init(rdev);
330 - if (r)
331 - return r;
332 /* Memory manager */
333 r = radeon_bo_init(rdev);
334 if (r)
335 diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
336 index b1ff9cc..8c403d9 100644
337 --- a/drivers/gpu/drm/radeon/r600.c
338 +++ b/drivers/gpu/drm/radeon/r600.c
339 @@ -2470,6 +2470,12 @@ int r600_startup(struct radeon_device *rdev)
340 }
341
342 /* Enable IRQ */
343 + if (!rdev->irq.installed) {
344 + r = radeon_irq_kms_init(rdev);
345 + if (r)
346 + return r;
347 + }
348 +
349 r = r600_irq_init(rdev);
350 if (r) {
351 DRM_ERROR("radeon: IH init failed (%d).\n", r);
352 @@ -2624,10 +2630,6 @@ int r600_init(struct radeon_device *rdev)
353 if (r)
354 return r;
355
356 - r = radeon_irq_kms_init(rdev);
357 - if (r)
358 - return r;
359 -
360 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL;
361 r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024);
362
363 diff --git a/drivers/gpu/drm/radeon/rs400.c b/drivers/gpu/drm/radeon/rs400.c
364 index 4cf381b..5099bd3 100644
365 --- a/drivers/gpu/drm/radeon/rs400.c
366 +++ b/drivers/gpu/drm/radeon/rs400.c
367 @@ -417,6 +417,12 @@ static int rs400_startup(struct radeon_device *rdev)
368 }
369
370 /* Enable IRQ */
371 + if (!rdev->irq.installed) {
372 + r = radeon_irq_kms_init(rdev);
373 + if (r)
374 + return r;
375 + }
376 +
377 r100_irq_set(rdev);
378 rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
379 /* 1M ring buffer */
380 @@ -541,9 +547,6 @@ int rs400_init(struct radeon_device *rdev)
381 r = radeon_fence_driver_init(rdev);
382 if (r)
383 return r;
384 - r = radeon_irq_kms_init(rdev);
385 - if (r)
386 - return r;
387 /* Memory manager */
388 r = radeon_bo_init(rdev);
389 if (r)
390 diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
391 index d25cf86..5248001 100644
392 --- a/drivers/gpu/drm/radeon/rs600.c
393 +++ b/drivers/gpu/drm/radeon/rs600.c
394 @@ -864,6 +864,12 @@ static int rs600_startup(struct radeon_device *rdev)
395 }
396
397 /* Enable IRQ */
398 + if (!rdev->irq.installed) {
399 + r = radeon_irq_kms_init(rdev);
400 + if (r)
401 + return r;
402 + }
403 +
404 rs600_irq_set(rdev);
405 rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
406 /* 1M ring buffer */
407 @@ -994,9 +1000,6 @@ int rs600_init(struct radeon_device *rdev)
408 r = radeon_fence_driver_init(rdev);
409 if (r)
410 return r;
411 - r = radeon_irq_kms_init(rdev);
412 - if (r)
413 - return r;
414 /* Memory manager */
415 r = radeon_bo_init(rdev);
416 if (r)
417 diff --git a/drivers/gpu/drm/radeon/rs690.c b/drivers/gpu/drm/radeon/rs690.c
418 index f2c3b9d..c46900c 100644
419 --- a/drivers/gpu/drm/radeon/rs690.c
420 +++ b/drivers/gpu/drm/radeon/rs690.c
421 @@ -628,6 +628,12 @@ static int rs690_startup(struct radeon_device *rdev)
422 }
423
424 /* Enable IRQ */
425 + if (!rdev->irq.installed) {
426 + r = radeon_irq_kms_init(rdev);
427 + if (r)
428 + return r;
429 + }
430 +
431 rs600_irq_set(rdev);
432 rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
433 /* 1M ring buffer */
434 @@ -759,9 +765,6 @@ int rs690_init(struct radeon_device *rdev)
435 r = radeon_fence_driver_init(rdev);
436 if (r)
437 return r;
438 - r = radeon_irq_kms_init(rdev);
439 - if (r)
440 - return r;
441 /* Memory manager */
442 r = radeon_bo_init(rdev);
443 if (r)
444 diff --git a/drivers/gpu/drm/radeon/rv515.c b/drivers/gpu/drm/radeon/rv515.c
445 index 43af363..0532bbe 100644
446 --- a/drivers/gpu/drm/radeon/rv515.c
447 +++ b/drivers/gpu/drm/radeon/rv515.c
448 @@ -386,6 +386,12 @@ static int rv515_startup(struct radeon_device *rdev)
449 }
450
451 /* Enable IRQ */
452 + if (!rdev->irq.installed) {
453 + r = radeon_irq_kms_init(rdev);
454 + if (r)
455 + return r;
456 + }
457 +
458 rs600_irq_set(rdev);
459 rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
460 /* 1M ring buffer */
461 @@ -520,9 +526,6 @@ int rv515_init(struct radeon_device *rdev)
462 r = radeon_fence_driver_init(rdev);
463 if (r)
464 return r;
465 - r = radeon_irq_kms_init(rdev);
466 - if (r)
467 - return r;
468 /* Memory manager */
469 r = radeon_bo_init(rdev);
470 if (r)
471 diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
472 index 591040b..4a3937f 100644
473 --- a/drivers/gpu/drm/radeon/rv770.c
474 +++ b/drivers/gpu/drm/radeon/rv770.c
475 @@ -1099,6 +1099,12 @@ static int rv770_startup(struct radeon_device *rdev)
476 }
477
478 /* Enable IRQ */
479 + if (!rdev->irq.installed) {
480 + r = radeon_irq_kms_init(rdev);
481 + if (r)
482 + return r;
483 + }
484 +
485 r = r600_irq_init(rdev);
486 if (r) {
487 DRM_ERROR("radeon: IH init failed (%d).\n", r);
488 @@ -1237,10 +1243,6 @@ int rv770_init(struct radeon_device *rdev)
489 if (r)
490 return r;
491
492 - r = radeon_irq_kms_init(rdev);
493 - if (r)
494 - return r;
495 -
496 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL;
497 r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024);
498
499 diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
500 index 2dbd585..e22b460 100644
501 --- a/drivers/gpu/drm/radeon/si.c
502 +++ b/drivers/gpu/drm/radeon/si.c
503 @@ -3876,6 +3876,12 @@ static int si_startup(struct radeon_device *rdev)
504 }
505
506 /* Enable IRQ */
507 + if (!rdev->irq.installed) {
508 + r = radeon_irq_kms_init(rdev);
509 + if (r)
510 + return r;
511 + }
512 +
513 r = si_irq_init(rdev);
514 if (r) {
515 DRM_ERROR("radeon: IH init failed (%d).\n", r);
516 @@ -4044,10 +4050,6 @@ int si_init(struct radeon_device *rdev)
517 if (r)
518 return r;
519
520 - r = radeon_irq_kms_init(rdev);
521 - if (r)
522 - return r;
523 -
524 ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
525 ring->ring_obj = NULL;
526 r600_ring_init(rdev, ring, 1024 * 1024);
527 diff --git a/drivers/hwmon/adm1021.c b/drivers/hwmon/adm1021.c
528 index 4394e7e..5653461 100644
529 --- a/drivers/hwmon/adm1021.c
530 +++ b/drivers/hwmon/adm1021.c
531 @@ -332,26 +332,68 @@ static int adm1021_detect(struct i2c_client *client,
532 man_id = i2c_smbus_read_byte_data(client, ADM1021_REG_MAN_ID);
533 dev_id = i2c_smbus_read_byte_data(client, ADM1021_REG_DEV_ID);
534
535 + if (man_id < 0 || dev_id < 0)
536 + return -ENODEV;
537 +
538 if (man_id == 0x4d && dev_id == 0x01)
539 type_name = "max1617a";
540 else if (man_id == 0x41) {
541 if ((dev_id & 0xF0) == 0x30)
542 type_name = "adm1023";
543 - else
544 + else if ((dev_id & 0xF0) == 0x00)
545 type_name = "adm1021";
546 + else
547 + return -ENODEV;
548 } else if (man_id == 0x49)
549 type_name = "thmc10";
550 else if (man_id == 0x23)
551 type_name = "gl523sm";
552 else if (man_id == 0x54)
553 type_name = "mc1066";
554 - /* LM84 Mfr ID in a different place, and it has more unused bits */
555 - else if (conv_rate == 0x00
556 - && (config & 0x7F) == 0x00
557 - && (status & 0xAB) == 0x00)
558 - type_name = "lm84";
559 - else
560 - type_name = "max1617";
561 + else {
562 + int lte, rte, lhi, rhi, llo, rlo;
563 +
564 + /* extra checks for LM84 and MAX1617 to avoid misdetections */
565 +
566 + llo = i2c_smbus_read_byte_data(client, ADM1021_REG_THYST_R(0));
567 + rlo = i2c_smbus_read_byte_data(client, ADM1021_REG_THYST_R(1));
568 +
569 + /* fail if any of the additional register reads failed */
570 + if (llo < 0 || rlo < 0)
571 + return -ENODEV;
572 +
573 + lte = i2c_smbus_read_byte_data(client, ADM1021_REG_TEMP(0));
574 + rte = i2c_smbus_read_byte_data(client, ADM1021_REG_TEMP(1));
575 + lhi = i2c_smbus_read_byte_data(client, ADM1021_REG_TOS_R(0));
576 + rhi = i2c_smbus_read_byte_data(client, ADM1021_REG_TOS_R(1));
577 +
578 + /*
579 + * Fail for negative temperatures and negative high limits.
580 + * This check also catches read errors on the tested registers.
581 + */
582 + if ((s8)lte < 0 || (s8)rte < 0 || (s8)lhi < 0 || (s8)rhi < 0)
583 + return -ENODEV;
584 +
585 + /* fail if all registers hold the same value */
586 + if (lte == rte && lte == lhi && lte == rhi && lte == llo
587 + && lte == rlo)
588 + return -ENODEV;
589 +
590 + /*
591 + * LM84 Mfr ID is in a different place,
592 + * and it has more unused bits.
593 + */
594 + if (conv_rate == 0x00
595 + && (config & 0x7F) == 0x00
596 + && (status & 0xAB) == 0x00) {
597 + type_name = "lm84";
598 + } else {
599 + /* fail if low limits are larger than high limits */
600 + if ((s8)llo > lhi || (s8)rlo > rhi)
601 + return -ENODEV;
602 + type_name = "max1617";
603 + }
604 + }
605
606 pr_debug("adm1021: Detected chip %s at adapter %d, address 0x%02x.\n",
607 type_name, i2c_adapter_id(adapter), client->addr);
608 diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c
609 index 14d2d71..a60679c 100644
610 --- a/drivers/usb/host/ehci-sched.c
611 +++ b/drivers/usb/host/ehci-sched.c
612 @@ -236,7 +236,7 @@ static inline unsigned char tt_start_uframe(struct ehci_hcd *ehci, __hc32 mask)
613 }
614
615 static const unsigned char
616 -max_tt_usecs[] = { 125, 125, 125, 125, 125, 125, 125, 25 };
617 +max_tt_usecs[] = { 125, 125, 125, 125, 125, 125, 30, 0 };
618
619 /* carryover low/fullspeed bandwidth that crosses uframe boundries */
620 static inline void carryover_tt_bandwidth(unsigned short tt_usecs[8])
621 diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
622 index f059222..5080b1d 100644
623 --- a/drivers/usb/host/xhci-mem.c
624 +++ b/drivers/usb/host/xhci-mem.c
625 @@ -1845,6 +1845,9 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
626 }
627 spin_unlock_irqrestore(&xhci->lock, flags);
628
629 + if (!xhci->rh_bw)
630 + goto no_bw;
631 +
632 num_ports = HCS_MAX_PORTS(xhci->hcs_params1);
633 for (i = 0; i < num_ports; i++) {
634 struct xhci_interval_bw_table *bwt = &xhci->rh_bw[i].bw_table;
635 @@ -1863,6 +1866,7 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
636 }
637 }
638
639 +no_bw:
640 xhci->num_usb2_ports = 0;
641 xhci->num_usb3_ports = 0;
642 xhci->num_active_eps = 0;
643 @@ -2274,6 +2278,9 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
644 u32 page_size, temp;
645 int i;
646
647 + INIT_LIST_HEAD(&xhci->lpm_failed_devs);
648 + INIT_LIST_HEAD(&xhci->cancel_cmd_list);
649 +
650 page_size = xhci_readl(xhci, &xhci->op_regs->page_size);
651 xhci_dbg(xhci, "Supported page size register = 0x%x\n", page_size);
652 for (i = 0; i < 16; i++) {
653 @@ -2352,7 +2359,6 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
654 xhci->cmd_ring = xhci_ring_alloc(xhci, 1, 1, TYPE_COMMAND, flags);
655 if (!xhci->cmd_ring)
656 goto fail;
657 - INIT_LIST_HEAD(&xhci->cancel_cmd_list);
658 xhci_dbg(xhci, "Allocated command ring at %p\n", xhci->cmd_ring);
659 xhci_dbg(xhci, "First segment DMA is 0x%llx\n",
660 (unsigned long long)xhci->cmd_ring->first_seg->dma);
661 @@ -2453,8 +2459,6 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
662 if (xhci_setup_port_arrays(xhci, flags))
663 goto fail;
664
665 - INIT_LIST_HEAD(&xhci->lpm_failed_devs);
666 -
667 /* Enable USB 3.0 device notifications for function remote wake, which
668 * is necessary for allowing USB 3.0 devices to do remote wakeup from
669 * U3 (device suspend).
670 diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
671 index ec2c89f..0f928b3 100644
672 --- a/drivers/usb/host/xhci.c
673 +++ b/drivers/usb/host/xhci.c
674 @@ -947,6 +947,7 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
675 struct usb_hcd *hcd = xhci_to_hcd(xhci);
676 struct usb_hcd *secondary_hcd;
677 int retval = 0;
678 + bool comp_timer_running = false;
679
680 /* Wait a bit if either of the roothubs need to settle from the
681 * transition into bus suspend.
682 @@ -984,6 +985,13 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
683
684 /* If restore operation fails, re-initialize the HC during resume */
685 if ((temp & STS_SRE) || hibernated) {
686 +
687 + if ((xhci->quirks & XHCI_COMP_MODE_QUIRK) &&
688 + !(xhci_all_ports_seen_u0(xhci))) {
689 + del_timer_sync(&xhci->comp_mode_recovery_timer);
690 + xhci_dbg(xhci, "Compliance Mode Recovery Timer deleted!\n");
691 + }
692 +
693 /* Let the USB core know _both_ roothubs lost power. */
694 usb_root_hub_lost_power(xhci->main_hcd->self.root_hub);
695 usb_root_hub_lost_power(xhci->shared_hcd->self.root_hub);
696 @@ -1026,6 +1034,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
697 retval = xhci_init(hcd->primary_hcd);
698 if (retval)
699 return retval;
700 + comp_timer_running = true;
701 +
702 xhci_dbg(xhci, "Start the primary HCD\n");
703 retval = xhci_run(hcd->primary_hcd);
704 if (!retval) {
705 @@ -1067,7 +1077,7 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
706 * to suffer the Compliance Mode issue again. It doesn't matter if
707 * ports have entered previously to U0 before system's suspension.
708 */
709 - if (xhci->quirks & XHCI_COMP_MODE_QUIRK)
710 + if ((xhci->quirks & XHCI_COMP_MODE_QUIRK) && !comp_timer_running)
711 compliance_mode_recovery_timer_init(xhci);
712
713 /* Re-enable port polling. */
714 diff --git a/drivers/usb/serial/ark3116.c b/drivers/usb/serial/ark3116.c
715 index f99f471..31bfe60 100644
716 --- a/drivers/usb/serial/ark3116.c
717 +++ b/drivers/usb/serial/ark3116.c
718 @@ -49,7 +49,7 @@ static bool debug;
719 #define DRIVER_NAME "ark3116"
720
721 /* usb timeout of 1 second */
722 -#define ARK_TIMEOUT (1*HZ)
723 +#define ARK_TIMEOUT 1000
724
725 static const struct usb_device_id id_table[] = {
726 { USB_DEVICE(0x6547, 0x0232) },
727 diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c
728 index afc886c..270bda8 100644
729 --- a/drivers/usb/serial/cypress_m8.c
730 +++ b/drivers/usb/serial/cypress_m8.c
731 @@ -70,6 +70,7 @@ static const struct usb_device_id id_table_earthmate[] = {
732 static const struct usb_device_id id_table_cyphidcomrs232[] = {
733 { USB_DEVICE(VENDOR_ID_CYPRESS, PRODUCT_ID_CYPHIDCOM) },
734 { USB_DEVICE(VENDOR_ID_POWERCOM, PRODUCT_ID_UPS) },
735 + { USB_DEVICE(VENDOR_ID_FRWD, PRODUCT_ID_CYPHIDCOM_FRWD) },
736 { } /* Terminating entry */
737 };
738
739 @@ -83,6 +84,7 @@ static const struct usb_device_id id_table_combined[] = {
740 { USB_DEVICE(VENDOR_ID_DELORME, PRODUCT_ID_EARTHMATEUSB_LT20) },
741 { USB_DEVICE(VENDOR_ID_CYPRESS, PRODUCT_ID_CYPHIDCOM) },
742 { USB_DEVICE(VENDOR_ID_POWERCOM, PRODUCT_ID_UPS) },
743 + { USB_DEVICE(VENDOR_ID_FRWD, PRODUCT_ID_CYPHIDCOM_FRWD) },
744 { USB_DEVICE(VENDOR_ID_DAZZLE, PRODUCT_ID_CA42) },
745 { } /* Terminating entry */
746 };
747 @@ -243,6 +245,12 @@ static struct usb_serial_driver * const serial_drivers[] = {
748 * Cypress serial helper functions
749 *****************************************************************************/
750
751 +/* FRWD Dongle hidcom needs to skip reset and speed checks */
752 +static inline bool is_frwd(struct usb_device *dev)
753 +{
754 + return ((le16_to_cpu(dev->descriptor.idVendor) == VENDOR_ID_FRWD) &&
755 + (le16_to_cpu(dev->descriptor.idProduct) == PRODUCT_ID_CYPHIDCOM_FRWD));
756 +}
757
758 static int analyze_baud_rate(struct usb_serial_port *port, speed_t new_rate)
759 {
760 @@ -252,6 +260,10 @@ static int analyze_baud_rate(struct usb_serial_port *port, speed_t new_rate)
761 if (unstable_bauds)
762 return new_rate;
763
764 + /* FRWD Dongle uses 115200 bps */
765 + if (is_frwd(port->serial->dev))
766 + return new_rate;
767 +
768 /*
769 * The general purpose firmware for the Cypress M8 allows for
770 * a maximum speed of 57600bps (I have no idea whether DeLorme
771 @@ -465,7 +477,11 @@ static int generic_startup(struct usb_serial *serial)
772 }
773 init_waitqueue_head(&priv->delta_msr_wait);
774
775 - usb_reset_configuration(serial->dev);
776 + /* Skip reset for FRWD device. It is a workaound:
777 + device hangs if it receives SET_CONFIGURE in Configured
778 + state. */
779 + if (!is_frwd(serial->dev))
780 + usb_reset_configuration(serial->dev);
781
782 priv->cmd_ctrl = 0;
783 priv->line_control = 0;
784 diff --git a/drivers/usb/serial/cypress_m8.h b/drivers/usb/serial/cypress_m8.h
785 index 67cf608..b461311 100644
786 --- a/drivers/usb/serial/cypress_m8.h
787 +++ b/drivers/usb/serial/cypress_m8.h
788 @@ -24,6 +24,10 @@
789 #define VENDOR_ID_CYPRESS 0x04b4
790 #define PRODUCT_ID_CYPHIDCOM 0x5500
791
792 +/* FRWD Dongle - a GPS sports watch */
793 +#define VENDOR_ID_FRWD 0x6737
794 +#define PRODUCT_ID_CYPHIDCOM_FRWD 0x0001
795 +
796 /* Powercom UPS, chip CY7C63723 */
797 #define VENDOR_ID_POWERCOM 0x0d9f
798 #define PRODUCT_ID_UPS 0x0002
799 diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
800 index c6f8e62..f8a9cd7 100644
801 --- a/drivers/usb/serial/ftdi_sio.c
802 +++ b/drivers/usb/serial/ftdi_sio.c
803 @@ -2173,7 +2173,7 @@ static void ftdi_set_termios(struct tty_struct *tty,
804
805 cflag = termios->c_cflag;
806
807 - if (old_termios == 0)
808 + if (!old_termios)
809 goto no_skip;
810
811 if (old_termios->c_cflag == termios->c_cflag
812 diff --git a/drivers/usb/serial/iuu_phoenix.c b/drivers/usb/serial/iuu_phoenix.c
813 index f2192d5..53c639c 100644
814 --- a/drivers/usb/serial/iuu_phoenix.c
815 +++ b/drivers/usb/serial/iuu_phoenix.c
816 @@ -326,7 +326,7 @@ static int bulk_immediate(struct usb_serial_port *port, u8 *buf, u8 count)
817 usb_bulk_msg(serial->dev,
818 usb_sndbulkpipe(serial->dev,
819 port->bulk_out_endpointAddress), buf,
820 - count, &actual, HZ * 1);
821 + count, &actual, 1000);
822
823 if (status != IUU_OPERATION_OK)
824 dbg("%s - error = %2x", __func__, status);
825 @@ -349,7 +349,7 @@ static int read_immediate(struct usb_serial_port *port, u8 *buf, u8 count)
826 usb_bulk_msg(serial->dev,
827 usb_rcvbulkpipe(serial->dev,
828 port->bulk_in_endpointAddress), buf,
829 - count, &actual, HZ * 1);
830 + count, &actual, 1000);
831
832 if (status != IUU_OPERATION_OK)
833 dbg("%s - error = %2x", __func__, status);
834 diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
835 index a39ddd1..253bff6 100644
836 --- a/drivers/usb/serial/keyspan.c
837 +++ b/drivers/usb/serial/keyspan.c
838 @@ -1705,7 +1705,7 @@ static int keyspan_usa26_send_setup(struct usb_serial *serial,
839 d_details = s_priv->device_details;
840 device_port = port->number - port->serial->minor;
841
842 - outcont_urb = d_details->outcont_endpoints[port->number];
843 + outcont_urb = d_details->outcont_endpoints[device_port];
844 this_urb = p_priv->outcont_urb;
845
846 dbg("%s - endpoint %d", __func__, usb_pipeendpoint(this_urb->pipe));
847 diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c
848 index bdce820..77d974d 100644
849 --- a/drivers/usb/serial/mos7720.c
850 +++ b/drivers/usb/serial/mos7720.c
851 @@ -44,7 +44,7 @@
852 #define DRIVER_DESC "Moschip USB Serial Driver"
853
854 /* default urb timeout */
855 -#define MOS_WDR_TIMEOUT (HZ * 5)
856 +#define MOS_WDR_TIMEOUT 5000
857
858 #define MOS_MAX_PORT 0x02
859 #define MOS_WRITE 0x0E
860 @@ -234,11 +234,22 @@ static int read_mos_reg(struct usb_serial *serial, unsigned int serial_portnum,
861 __u8 requesttype = (__u8)0xc0;
862 __u16 index = get_reg_index(reg);
863 __u16 value = get_reg_value(reg, serial_portnum);
864 - int status = usb_control_msg(usbdev, pipe, request, requesttype, value,
865 - index, data, 1, MOS_WDR_TIMEOUT);
866 - if (status < 0)
867 + u8 *buf;
868 + int status;
869 +
870 + buf = kmalloc(1, GFP_KERNEL);
871 + if (!buf)
872 + return -ENOMEM;
873 +
874 + status = usb_control_msg(usbdev, pipe, request, requesttype, value,
875 + index, buf, 1, MOS_WDR_TIMEOUT);
876 + if (status == 1)
877 + *data = *buf;
878 + else if (status < 0)
879 dev_err(&usbdev->dev,
880 "mos7720: usb_control_msg() failed: %d", status);
881 + kfree(buf);
882 +
883 return status;
884 }
885
886 @@ -1690,7 +1701,7 @@ static void change_port_settings(struct tty_struct *tty,
887 mos7720_port->shadowMCR |= (UART_MCR_XONANY);
888 /* To set hardware flow control to the specified *
889 * serial port, in SP1/2_CONTROL_REG */
890 - if (port->number)
891 + if (port_number)
892 write_mos_reg(serial, dummy, SP_CONTROL_REG, 0x01);
893 else
894 write_mos_reg(serial, dummy, SP_CONTROL_REG, 0x02);
895 @@ -2094,7 +2105,7 @@ static int mos7720_startup(struct usb_serial *serial)
896
897 /* setting configuration feature to one */
898 usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
899 - (__u8)0x03, 0x00, 0x01, 0x00, NULL, 0x00, 5*HZ);
900 + (__u8)0x03, 0x00, 0x01, 0x00, NULL, 0x00, 5000);
901
902 /* start the interrupt urb */
903 ret_val = usb_submit_urb(serial->port[0]->interrupt_in_urb, GFP_KERNEL);
904 @@ -2139,7 +2150,7 @@ static void mos7720_release(struct usb_serial *serial)
905 /* wait for synchronous usb calls to return */
906 if (mos_parport->msg_pending)
907 wait_for_completion_timeout(&mos_parport->syncmsg_compl,
908 - MOS_WDR_TIMEOUT);
909 + msecs_to_jiffies(MOS_WDR_TIMEOUT));
910
911 parport_remove_port(mos_parport->pp);
912 usb_set_serial_data(serial, NULL);
913 diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
914 index 386b3ab..5b24260 100644
915 --- a/drivers/usb/serial/option.c
916 +++ b/drivers/usb/serial/option.c
917 @@ -593,6 +593,8 @@ static const struct usb_device_id option_ids[] = {
918 .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist },
919 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff),
920 .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist },
921 + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x14ac, 0xff, 0xff, 0xff), /* Huawei E1820 */
922 + .driver_info = (kernel_ulong_t) &net_intf1_blacklist },
923 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4605, 0xff, 0xff, 0xff),
924 .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist },
925 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0xff, 0xff) },
926 diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c
927 index 71d6964..b3afd19 100644
928 --- a/drivers/usb/serial/visor.c
929 +++ b/drivers/usb/serial/visor.c
930 @@ -596,10 +596,19 @@ static int treo_attach(struct usb_serial *serial)
931 */
932 #define COPY_PORT(dest, src) \
933 do { \
934 + int i; \
935 + \
936 + for (i = 0; i < ARRAY_SIZE(src->read_urbs); ++i) { \
937 + dest->read_urbs[i] = src->read_urbs[i]; \
938 + dest->read_urbs[i]->context = dest; \
939 + dest->bulk_in_buffers[i] = src->bulk_in_buffers[i]; \
940 + } \
941 dest->read_urb = src->read_urb; \
942 dest->bulk_in_endpointAddress = src->bulk_in_endpointAddress;\
943 dest->bulk_in_buffer = src->bulk_in_buffer; \
944 + dest->bulk_in_size = src->bulk_in_size; \
945 dest->interrupt_in_urb = src->interrupt_in_urb; \
946 + dest->interrupt_in_urb->context = dest; \
947 dest->interrupt_in_endpointAddress = \
948 src->interrupt_in_endpointAddress;\
949 dest->interrupt_in_buffer = src->interrupt_in_buffer; \
950 diff --git a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c
951 index 171226a..0d06d7c 100644
952 --- a/drivers/usb/serial/whiteheat.c
953 +++ b/drivers/usb/serial/whiteheat.c
954 @@ -1154,7 +1154,7 @@ static void firm_setup_port(struct tty_struct *tty)
955 struct whiteheat_port_settings port_settings;
956 unsigned int cflag = tty->termios->c_cflag;
957
958 - port_settings.port = port->number + 1;
959 + port_settings.port = port->number - port->serial->minor + 1;
960
961 /* get the byte size */
962 switch (cflag & CSIZE) {
963 diff --git a/drivers/xen/xen-pciback/pciback_ops.c b/drivers/xen/xen-pciback/pciback_ops.c
964 index b6df20a..d52703c 100644
965 --- a/drivers/xen/xen-pciback/pciback_ops.c
966 +++ b/drivers/xen/xen-pciback/pciback_ops.c
967 @@ -9,6 +9,8 @@
968 #include <xen/events.h>
969 #include <linux/sched.h>
970 #include "pciback.h"
971 +#include <linux/ratelimit.h>
972 +#include <linux/printk.h>
973
974 int verbose_request;
975 module_param(verbose_request, int, 0644);
976 @@ -136,7 +138,6 @@ int xen_pcibk_enable_msi(struct xen_pcibk_device *pdev,
977 struct pci_dev *dev, struct xen_pci_op *op)
978 {
979 struct xen_pcibk_dev_data *dev_data;
980 - int otherend = pdev->xdev->otherend_id;
981 int status;
982
983 if (unlikely(verbose_request))
984 @@ -145,8 +146,9 @@ int xen_pcibk_enable_msi(struct xen_pcibk_device *pdev,
985 status = pci_enable_msi(dev);
986
987 if (status) {
988 - printk(KERN_ERR "error enable msi for guest %x status %x\n",
989 - otherend, status);
990 + pr_warn_ratelimited(DRV_NAME ": %s: error enabling MSI for guest %u: err %d\n",
991 + pci_name(dev), pdev->xdev->otherend_id,
992 + status);
993 op->value = 0;
994 return XEN_PCI_ERR_op_failed;
995 }
996 @@ -224,10 +226,10 @@ int xen_pcibk_enable_msix(struct xen_pcibk_device *pdev,
997 pci_name(dev), i,
998 op->msix_entries[i].vector);
999 }
1000 - } else {
1001 - printk(KERN_WARNING DRV_NAME ": %s: failed to enable MSI-X: err %d!\n",
1002 - pci_name(dev), result);
1003 - }
1004 + } else
1005 + pr_warn_ratelimited(DRV_NAME ": %s: error enabling MSI-X for guest %u: err %d!\n",
1006 + pci_name(dev), pdev->xdev->otherend_id,
1007 + result);
1008 kfree(entries);
1009
1010 op->value = result;
1011 diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
1012 index 72a6cab..f80ca4a 100644
1013 --- a/include/linux/ftrace.h
1014 +++ b/include/linux/ftrace.h
1015 @@ -299,7 +299,6 @@ ssize_t ftrace_filter_write(struct file *file, const char __user *ubuf,
1016 size_t cnt, loff_t *ppos);
1017 ssize_t ftrace_notrace_write(struct file *file, const char __user *ubuf,
1018 size_t cnt, loff_t *ppos);
1019 -loff_t ftrace_regex_lseek(struct file *file, loff_t offset, int origin);
1020 int ftrace_regex_release(struct inode *inode, struct file *file);
1021
1022 void __init
1023 @@ -420,6 +419,8 @@ static inline int
1024 ftrace_regex_release(struct inode *inode, struct file *file) { return -ENODEV; }
1025 #endif /* CONFIG_DYNAMIC_FTRACE */
1026
1027 +loff_t ftrace_filter_lseek(struct file *file, loff_t offset, int whence);
1028 +
1029 /* totally disable ftrace - can not re-enable after this */
1030 void ftrace_kill(void);
1031
1032 diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
1033 index c962d31..e101cf9 100644
1034 --- a/kernel/trace/ftrace.c
1035 +++ b/kernel/trace/ftrace.c
1036 @@ -999,6 +999,19 @@ static __init void ftrace_profile_debugfs(struct dentry *d_tracer)
1037
1038 static struct pid * const ftrace_swapper_pid = &init_struct_pid;
1039
1040 +loff_t
1041 +ftrace_filter_lseek(struct file *file, loff_t offset, int whence)
1042 +{
1043 + loff_t ret;
1044 +
1045 + if (file->f_mode & FMODE_READ)
1046 + ret = seq_lseek(file, offset, whence);
1047 + else
1048 + file->f_pos = ret = 1;
1049 +
1050 + return ret;
1051 +}
1052 +
1053 #ifdef CONFIG_DYNAMIC_FTRACE
1054
1055 #ifndef CONFIG_FTRACE_MCOUNT_RECORD
1056 @@ -2541,7 +2554,7 @@ static void ftrace_filter_reset(struct ftrace_hash *hash)
1057 * routine, you can use ftrace_filter_write() for the write
1058 * routine if @flag has FTRACE_ITER_FILTER set, or
1059 * ftrace_notrace_write() if @flag has FTRACE_ITER_NOTRACE set.
1060 - * ftrace_regex_lseek() should be used as the lseek routine, and
1061 + * ftrace_filter_lseek() should be used as the lseek routine, and
1062 * release must call ftrace_regex_release().
1063 */
1064 int
1065 @@ -2625,19 +2638,6 @@ ftrace_notrace_open(struct inode *inode, struct file *file)
1066 inode, file);
1067 }
1068
1069 -loff_t
1070 -ftrace_regex_lseek(struct file *file, loff_t offset, int origin)
1071 -{
1072 - loff_t ret;
1073 -
1074 - if (file->f_mode & FMODE_READ)
1075 - ret = seq_lseek(file, offset, origin);
1076 - else
1077 - file->f_pos = ret = 1;
1078 -
1079 - return ret;
1080 -}
1081 -
1082 static int ftrace_match(char *str, char *regex, int len, int type)
1083 {
1084 int matched = 0;
1085 @@ -3445,7 +3445,7 @@ static const struct file_operations ftrace_filter_fops = {
1086 .open = ftrace_filter_open,
1087 .read = seq_read,
1088 .write = ftrace_filter_write,
1089 - .llseek = ftrace_regex_lseek,
1090 + .llseek = ftrace_filter_lseek,
1091 .release = ftrace_regex_release,
1092 };
1093
1094 @@ -3453,7 +3453,7 @@ static const struct file_operations ftrace_notrace_fops = {
1095 .open = ftrace_notrace_open,
1096 .read = seq_read,
1097 .write = ftrace_notrace_write,
1098 - .llseek = ftrace_regex_lseek,
1099 + .llseek = ftrace_filter_lseek,
1100 .release = ftrace_regex_release,
1101 };
1102
1103 @@ -3659,8 +3659,8 @@ static const struct file_operations ftrace_graph_fops = {
1104 .open = ftrace_graph_open,
1105 .read = seq_read,
1106 .write = ftrace_graph_write,
1107 + .llseek = ftrace_filter_lseek,
1108 .release = ftrace_graph_release,
1109 - .llseek = seq_lseek,
1110 };
1111 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
1112
1113 @@ -4261,7 +4261,7 @@ static const struct file_operations ftrace_pid_fops = {
1114 .open = ftrace_pid_open,
1115 .write = ftrace_pid_write,
1116 .read = seq_read,
1117 - .llseek = seq_lseek,
1118 + .llseek = ftrace_filter_lseek,
1119 .release = ftrace_pid_release,
1120 };
1121
1122 diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
1123 index c70f6bf..8298997 100644
1124 --- a/kernel/trace/trace_stack.c
1125 +++ b/kernel/trace/trace_stack.c
1126 @@ -384,7 +384,7 @@ static const struct file_operations stack_trace_filter_fops = {
1127 .open = stack_trace_filter_open,
1128 .read = seq_read,
1129 .write = ftrace_filter_write,
1130 - .llseek = ftrace_regex_lseek,
1131 + .llseek = ftrace_filter_lseek,
1132 .release = ftrace_regex_release,
1133 };
1134
1135 diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
1136 index f008fc7..e075a67 100644
1137 --- a/sound/usb/mixer.c
1138 +++ b/sound/usb/mixer.c
1139 @@ -822,6 +822,7 @@ static void volume_control_quirks(struct usb_mixer_elem_info *cval,
1140 case USB_ID(0x046d, 0x0808):
1141 case USB_ID(0x046d, 0x0809):
1142 case USB_ID(0x046d, 0x081d): /* HD Webcam c510 */
1143 + case USB_ID(0x046d, 0x0825): /* HD Webcam c270 */
1144 case USB_ID(0x046d, 0x0991):
1145 /* Most audio usb devices lie about volume resolution.
1146 * Most Logitech webcams have res = 384.
1147 diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
1148 index fa4c2f7..915bc2c 100644
1149 --- a/sound/usb/quirks-table.h
1150 +++ b/sound/usb/quirks-table.h
1151 @@ -157,7 +157,13 @@
1152 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
1153 },
1154 {
1155 - USB_DEVICE(0x046d, 0x0990),
1156 + .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
1157 + USB_DEVICE_ID_MATCH_INT_CLASS |
1158 + USB_DEVICE_ID_MATCH_INT_SUBCLASS,
1159 + .idVendor = 0x046d,
1160 + .idProduct = 0x0990,
1161 + .bInterfaceClass = USB_CLASS_AUDIO,
1162 + .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
1163 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1164 .vendor_name = "Logitech, Inc.",
1165 .product_name = "QuickCam Pro 9000",
1166 @@ -1622,7 +1628,11 @@ YAMAHA_DEVICE(0x7010, "UB99"),
1167 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108),
1168 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1169 .ifnum = 0,
1170 - .type = QUIRK_MIDI_STANDARD_INTERFACE
1171 + .type = QUIRK_MIDI_FIXED_ENDPOINT,
1172 + .data = & (const struct snd_usb_midi_endpoint_info) {
1173 + .out_cables = 0x0007,
1174 + .in_cables = 0x0007
1175 + }
1176 }
1177 },
1178 {