2009-04-24 11:21:17

by David Vrabel

[permalink] [raw]
Subject: dma_debug_device_change() gives bogus errors

dma_debug_device_change() gives bogus errors if a driver unmaps dma
buffers within its driver->remove() method. This is because the
BUS_NOTIFY_UNBIND_DRIVER notification is raised before calling
driver->remove() (see __device_release_driver() in drivers/base/dd.c).

By the time my driver->remove() completes, there are no DMA mappings
(debug_dma_dump_mappings() produces no output).

Also, somewhat surprisingly, it only prints the error the first time the
driver is unbound.

David
--
David Vrabel, Senior Software Engineer, Drivers
CSR, Churchill House, Cambridge Business Park, Tel: +44 (0)1223 692562
Cowley Road, Cambridge, CB4 0WZ http://www.csr.com/


2009-04-24 12:19:17

by Joerg Roedel

[permalink] [raw]
Subject: Re: dma_debug_device_change() gives bogus errors

On Fri, Apr 24, 2009 at 12:20:04PM +0100, David Vrabel wrote:
> dma_debug_device_change() gives bogus errors if a driver unmaps dma
> buffers within its driver->remove() method. This is because the
> BUS_NOTIFY_UNBIND_DRIVER notification is raised before calling
> driver->remove() (see __device_release_driver() in drivers/base/dd.c).
>
> By the time my driver->remove() completes, there are no DMA mappings
> (debug_dma_dump_mappings() produces no output).
>
> Also, somewhat surprisingly, it only prints the error the first time the
> driver is unbound.

Thanks for the report. This is being worked on already. I will disable
this check for 2.6.30 and try to get a solution upstream for 2.6.31.

Joerg

--
| Advanced Micro Devices GmbH
Operating | Karl-Hammerschmidt-Str. 34, 85609 Dornach bei M?nchen
System |
Research | Gesch?ftsf?hrer: Jochen Polster, Thomas M. McCoy, Giuliano Meroni
Center | Sitz: Dornach, Gemeinde Aschheim, Landkreis M?nchen
| Registergericht M?nchen, HRB Nr. 43632