On 08/27/2012 12:38 PM, Jan Kiszka wrote: > >> Even worse, apply > >> restrictions on how the dispatched objects, the regions, have to be > >> treated because of this. > > > > Please elaborate. > > The fact that you can't manipulate a memory region object arbitrarily > after removing it from the mapping because you track the references to > the object that the region points to, not the region itself. The region > remains in use by the dispatching layer and potentially the called > device, even after deregistration.
That object will be a container_of() the region, usually literally but sometimes only in spirit. Reference counting the regions means they cannot be embedded into other objects any more. We can probably figure out a way to flush out accesses. After switching to rcu, for example, all we need is synchronize_rcu() in a non-deadlocking place. But my bet is that it will not be needed. -- I have a truly marvellous patch that fixes the bug which this signature is too narrow to contain.