On 02/23/13 13:48, Josh Boyer wrote:
On Sat, Feb 23, 2013 at 7:01 AM, Mauro Carvalho Chehab
<mchehab(a)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.
https://bugzilla.redhat.com/show_bug.cgi?id=914994
Josh, Mauro thanks for the overview. :)
Antti, cheers. ;)
poma