3.9 merge window kernels

Josh Boyer jwboyer at gmail.com
Sat Feb 23 12:48:17 UTC 2013


On Sat, Feb 23, 2013 at 7:01 AM, Mauro Carvalho Chehab
<mchehab at redhat.com> wrote:
>> ------------[ cut here ]------------
>> WARNING: at lib/dma-debug.c:933 check_unmap+0x407/0x8a0()
>> Hardware name: M720-US3
>> skge 0000:01:09.0: DMA-API: device driver failed to check map
>> error[device address=0x0000000105d52522] [size=90 bytes] [mapped as single]
>> Modules linked in:
>>  …uetooth rfkill ip6t_REJECT nf_conntrack_ipv6 nf_conntrack_ipv4
>> nf_defrag_ipv6 nf_defrag_ipv4 xt_conntrack ip6table_filter nf_conntrack
>> ip6_tables… vhost_net tun macvtap… macvlan… nfsd auth_rpcgss nfs_acl
>> lockd… r8169… mii skge… sunrpc
>
> Funny enough, it is also a DMA error...
>
> I'm starting to suspect that maybe some change at the dma stack made
> it a little more pedantic ;)

Yes.  In 3.8.

> Two similar errors on different drivers is enough for me to take a deeper
> look into it to solve the mystery ;)
>
> Basically, those got generated by lib/dma-debug.c.
>
> On the af9015 case, this is a simple test, done at debug_dma_map_page().
> It checks if the area is in stack and print an error. I suspect that, on
> x86, the driver will still run, on most cases.
>
> In the case of the network driver, it detected that
> debug_dma_mapping_error() was never called. Also, I believe that the
> network driver will still work, and this is more a warning that bad
> things might happen with the driver, if the check is not done.

No, you don't call debug_dma_mapping_error directly.  That's used by the
DMA-API debugging functions itself.  It's not something drivers call.

> I _suspect_ that the network driver is calling dma_map_single() or
> dma_map_page() but not calling dma_map_error().

Close.  It's calling pci_map_single and not calling pci_dma_mapping_error.
Those are PCI wrappers around the same functions, but that's what they
should be using.

> The only network driver there on the list of drivers on your error is r8169.
> Weird enough, at least on linux-next, r8169 seems ok:

Er... his error was triggered by skge, which is a network driver.

> $ git grep -L dma_mapping_error $(git grep -l -e dma_map_single -e dma_map_page  drivers/net/)

That's the wrong function to grep for in most cases.  I don't think the
prbolem is as wide-spread as you fear.

Poma, you should probably just start filing bugs for things you hit.
In this case, the skge backtrace is just a warning but it can be fixed
up relatively easily.

josh


More information about the kernel mailing list