Staging: vme: Correct operation of vme_lm_free
The vme_lm_free() function is not clearing up the resource created in vme_lm_request(). In addition vme_lm_free() is void function and is used in exit/error paths, we should wait for mutex to become free rather than exiting and not freeing the resource. Signed-off-by: Martyn Welch <martyn.welch@gefanuc.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
59c2290428
commit
8be9226c8f
|
@ -1191,7 +1191,7 @@ int vme_lm_set(struct vme_resource *resource, unsigned long long lm_base,
|
|||
|
||||
/* XXX Check parameters */
|
||||
|
||||
return lm->parent->lm_set(lm, lm_base, aspace, cycle);
|
||||
return bridge->lm_set(lm, lm_base, aspace, cycle);
|
||||
}
|
||||
EXPORT_SYMBOL(vme_lm_set);
|
||||
|
||||
|
@ -1271,16 +1271,18 @@ void vme_lm_free(struct vme_resource *resource)
|
|||
|
||||
lm = list_entry(resource->entry, struct vme_lm_resource, list);
|
||||
|
||||
if (mutex_trylock(&(lm->mtx))) {
|
||||
printk(KERN_ERR "Resource busy, can't free\n");
|
||||
return;
|
||||
}
|
||||
mutex_lock(&(lm->mtx));
|
||||
|
||||
/* XXX Check to see that there aren't any callbacks still attached */
|
||||
/* XXX
|
||||
* Check to see that there aren't any callbacks still attached, if
|
||||
* there are we should probably be detaching them!
|
||||
*/
|
||||
|
||||
lm->locked = 0;
|
||||
|
||||
mutex_unlock(&(lm->mtx));
|
||||
|
||||
kfree(resource);
|
||||
}
|
||||
EXPORT_SYMBOL(vme_lm_free);
|
||||
|
||||
|
|
Loading…
Reference in New Issue