Files
linux/include/linux
Clemens Ladisch bc677d5b64 usb: fix number of mapped SG DMA entries
Add a new field num_mapped_sgs to struct urb so that we have a place to
store the number of mapped entries and can also retain the original
value of entries in num_sgs.  Previously, usb_hcd_map_urb_for_dma()
would overwrite this with the number of mapped entries, which would
break dma_unmap_sg() because it requires the original number of entries.

This fixes warnings like the following when using USB storage devices:
 ------------[ cut here ]------------
 WARNING: at lib/dma-debug.c:902 check_unmap+0x4e4/0x695()
 ehci_hcd 0000:00:12.2: DMA-API: device driver frees DMA sg list with different entry count [map count=4] [unmap count=1]
 Modules linked in: ohci_hcd ehci_hcd
 Pid: 0, comm: kworker/0:1 Not tainted 3.2.0-rc2+ #319
 Call Trace:
  <IRQ>  [<ffffffff81036d3b>] warn_slowpath_common+0x80/0x98
  [<ffffffff81036de7>] warn_slowpath_fmt+0x41/0x43
  [<ffffffff811fa5ae>] check_unmap+0x4e4/0x695
  [<ffffffff8105e92c>] ? trace_hardirqs_off+0xd/0xf
  [<ffffffff8147208b>] ? _raw_spin_unlock_irqrestore+0x33/0x50
  [<ffffffff811fa84a>] debug_dma_unmap_sg+0xeb/0x117
  [<ffffffff8137b02f>] usb_hcd_unmap_urb_for_dma+0x71/0x188
  [<ffffffff8137b166>] unmap_urb_for_dma+0x20/0x22
  [<ffffffff8137b1c5>] usb_hcd_giveback_urb+0x5d/0xc0
  [<ffffffffa0000d02>] ehci_urb_done+0xf7/0x10c [ehci_hcd]
  [<ffffffffa0001140>] qh_completions+0x429/0x4bd [ehci_hcd]
  [<ffffffffa000340a>] ehci_work+0x95/0x9c0 [ehci_hcd]
  ...
 ---[ end trace f29ac88a5a48c580 ]---
 Mapped at:
  [<ffffffff811faac4>] debug_dma_map_sg+0x45/0x139
  [<ffffffff8137bc0b>] usb_hcd_map_urb_for_dma+0x22e/0x478
  [<ffffffff8137c494>] usb_hcd_submit_urb+0x63f/0x6fa
  [<ffffffff8137d01c>] usb_submit_urb+0x2c7/0x2de
  [<ffffffff8137dcd4>] usb_sg_wait+0x55/0x161

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-12-09 16:18:19 -08:00
..
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2011-11-07 09:11:16 -08:00
2011-03-31 11:26:23 -03:00
2010-03-12 15:53:10 -08:00
2011-02-24 19:58:42 +01:00
2010-10-15 21:18:59 +02:00
2009-06-17 00:36:36 -04:00
2011-07-22 08:25:37 -07:00
2010-11-23 20:14:46 +00:00
2011-11-02 16:07:03 -07:00
2011-07-20 20:47:43 -04:00
2009-09-08 17:42:50 -07:00
2011-07-26 16:49:47 -07:00
2011-10-26 15:43:25 -04:00
2011-07-26 16:49:47 -07:00
2011-01-15 20:07:45 -05:00
2011-03-22 17:43:59 -07:00
2011-03-11 14:25:50 +00:00
2011-11-16 09:21:50 +01:00
2011-07-26 16:49:47 -07:00
2011-08-03 11:30:42 -04:00
2010-06-24 21:30:09 -07:00
2011-07-31 22:05:09 +02:00
2009-11-20 20:13:39 +01:00
2009-11-20 20:13:39 +01:00
2009-11-20 20:13:39 +01:00
2011-07-26 16:49:47 -07:00
2011-03-31 11:26:23 -03:00
2010-12-16 17:53:38 +01:00
2011-03-31 11:26:23 -03:00
2011-05-26 17:12:34 -07:00
2011-09-27 09:25:02 +01:00
2011-03-31 11:26:23 -03:00
2010-10-25 08:02:40 -07:00
2011-10-31 17:30:44 -07:00
2011-07-26 16:49:47 -07:00
2011-08-25 16:25:33 -07:00
2011-03-31 11:26:23 -03:00
2011-03-22 17:44:15 -07:00
2011-07-06 14:44:42 -07:00
2011-07-25 20:57:16 -07:00
2011-11-02 12:53:43 +01:00
2011-07-05 23:42:17 -07:00
2011-01-10 08:51:44 -08:00
2011-07-26 16:49:47 -07:00
2010-05-19 22:41:57 -04:00
2010-08-04 11:00:45 +02:00
2011-11-07 23:54:53 +01:00
2011-05-23 10:47:06 -05:00
2009-12-10 23:52:01 +00:00
2011-05-29 13:03:09 +01:00
2011-10-31 20:19:04 +00:00
2009-11-04 09:50:58 -08:00
2011-03-10 11:35:17 +01:00
2011-05-24 10:21:29 +02:00
2009-09-14 17:41:42 -07:00
2009-11-04 09:50:58 -08:00
2011-03-31 11:26:23 -03:00
2011-09-14 15:24:51 -04:00
2011-03-31 11:26:23 -03:00
2009-12-23 13:33:54 +01:00
2011-01-12 20:16:43 -05:00
2011-03-14 19:12:20 -04:00
2011-07-26 16:49:47 -07:00
2011-07-26 16:49:47 -07:00
2011-01-10 08:51:44 -08:00
2011-01-07 17:50:27 +11:00
2011-11-16 22:00:34 -05:00
2011-01-07 17:50:23 +11:00
2011-08-08 16:08:08 +02:00
2009-06-18 13:04:05 -07:00
2009-11-04 09:50:58 -08:00
2010-10-25 14:11:37 -07:00
2011-07-01 15:34:45 -07:00
2009-09-01 01:13:31 -07:00
2010-02-09 11:13:56 +01:00
2011-03-31 11:26:23 -03:00
2011-06-28 10:48:34 +02:00
2010-03-07 22:17:09 +01:00
2010-10-12 16:53:37 +02:00
2010-03-02 12:23:42 +01:00
2011-02-23 00:53:26 +00:00
2011-11-23 11:33:07 +01:00
2011-03-31 11:26:23 -03:00
2011-07-01 10:37:15 +02:00
2011-05-08 16:41:45 -07:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2010-06-03 03:21:52 -07:00
2009-11-04 09:50:58 -08:00
2011-10-30 04:43:30 -04:00
2011-07-21 13:47:54 -07:00
2010-08-09 20:45:05 -07:00
2009-09-26 10:17:19 -07:00
2010-11-24 11:16:42 -08:00
2010-10-07 14:08:55 +01:00
2011-09-27 18:08:04 +02:00
2010-06-03 03:21:52 -07:00
2011-03-31 11:26:23 -03:00
2010-08-10 11:49:21 -07:00
2010-12-09 20:17:07 -08:00
2010-08-12 11:27:58 +02:00
2011-02-17 11:12:40 -08:00
2011-01-13 17:32:31 -08:00
2011-07-26 16:49:47 -07:00
2011-07-26 16:49:47 -07:00
2011-01-13 17:32:47 -08:00
2011-02-13 16:54:24 -08:00
2011-01-24 14:45:11 +10:30
2010-09-09 18:57:24 -07:00
2011-03-31 11:26:23 -03:00
2011-09-25 19:52:59 +03:00
2011-09-16 19:20:20 -04:00
2009-07-30 16:03:45 +09:30
2011-05-24 14:33:35 +02:00
2011-04-25 18:14:10 -07:00
2009-06-16 19:47:48 -07:00
2010-12-06 11:03:46 -08:00
2009-09-22 07:17:35 -07:00
2009-06-16 08:40:20 +02:00
2010-06-03 03:21:52 -07:00
2011-11-02 16:06:57 -07:00
2011-11-02 16:06:58 -07:00
2011-07-26 16:49:47 -07:00
2011-07-26 16:49:47 -07:00
2011-03-31 11:26:23 -03:00
2010-02-10 23:49:08 +09:00
2010-10-12 16:53:34 +02:00
2011-07-26 16:49:47 -07:00
2009-11-04 09:50:58 -08:00
2009-06-17 18:02:11 -07:00
2011-07-31 12:18:16 -04:00
2011-07-28 16:19:22 -06:00
2010-07-05 16:14:52 -06:00
2011-10-31 14:03:22 +01:00
2011-03-31 11:26:23 -03:00
2011-01-16 13:47:07 -05:00
2011-05-26 17:12:37 -07:00
2010-08-21 23:40:14 -07:00
2011-03-31 11:26:23 -03:00
2010-08-04 21:53:17 -07:00
2011-11-02 16:07:02 -07:00
2011-01-13 08:03:21 -08:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2011-07-26 16:49:47 -07:00
2010-10-29 04:16:31 -04:00
2010-02-10 17:47:17 -08:00
2011-01-14 02:36:43 +00:00
2010-09-08 18:16:55 -07:00
2010-08-09 16:47:27 -04:00
2010-11-15 13:24:06 -05:00
2011-05-25 08:39:19 -07:00
2009-11-04 09:50:58 -08:00
2010-05-11 10:09:47 +02:00
2011-07-26 14:50:01 -07:00
2010-06-03 03:21:52 -07:00
2011-06-07 10:02:35 +02:00
2011-07-30 08:44:19 -10:00
2011-03-31 11:26:23 -03:00
2011-07-26 16:49:47 -07:00
2011-03-31 11:26:23 -03:00
2011-07-26 16:49:47 -07:00
2011-07-25 20:57:11 -07:00
2010-08-09 16:48:44 -04:00
2011-10-31 17:30:47 -07:00
2011-08-16 00:16:49 -07:00
2011-08-03 14:25:22 -10:00
2011-10-31 17:30:44 -07:00
2011-11-02 16:07:02 -07:00
2011-10-03 14:01:21 -04:00
2010-03-25 17:18:43 -07:00
2011-02-02 15:28:18 +01:00
2010-11-29 08:55:25 +11:00
2010-11-29 08:55:22 +11:00
2011-06-27 20:30:08 +02:00
2011-08-23 10:10:38 -07:00
2011-03-31 11:26:23 -03:00
2009-11-10 20:54:38 -08:00
2011-06-07 09:05:42 -07:00
2011-12-09 16:18:19 -08:00
2011-11-02 16:07:02 -07:00
2010-05-19 22:40:47 -04:00
2011-03-31 11:26:23 -03:00
2011-07-26 16:49:47 -07:00
2011-03-31 11:26:23 -03:00
2011-07-26 16:49:47 -07:00
2011-09-14 15:24:51 -04:00
2011-03-31 11:26:23 -03:00
2011-01-13 08:03:24 -08:00
2010-04-06 20:35:58 +04:00