|
|
|
|
|
|
|
|
|
|
xen-devel
[Xen-devel] locking in drivers/xen/xen-pciback/passthrough.c:__xen_pcibk
Konrad,
this function, before calling the passed in callback, drops the lock it
acquired at the beginning of the function, and re-acquires it after the
callback returned. It also uses list_for_each_entry_safe() in an
apparent attempt to deal with races here. However, I'm getting the
impression that this wouldn't really work (as the construct really isn't
meant for this case): If in the meantime the successor element got
removed from the list, the loop continuation would access data that
may already have got freed.
I see two possible solutions: Either after re-acquiring the lock the
function checks whether the current object is sill on the list, starting
over if not found (xen_pcibk_publish_pci_root() makes sure a
device doesn't get published twice), or (if so possible) the lock gets
converted to a mutex (which should be safe to be held across the
callback invocation).
What are your thoughts here?
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
<Prev in Thread] |
Current Thread |
[Next in Thread>
|
- [Xen-devel] locking in drivers/xen/xen-pciback/passthrough.c:__xen_pcibk_publish_pci_roots(),
Jan Beulich <=
|
|
|
|
|