Skip to content

Commit

Permalink
Staging: vme: Correct operation of vme_lm_free
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Martyn Welch authored and Greg Kroah-Hartman committed Dec 11, 2009
1 parent 59c2290 commit 8be9226
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions drivers/staging/vme/vme.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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);

Expand Down

0 comments on commit 8be9226

Please sign in to comment.