[PATCH 3/5] Staging: vme: Correct operation of vme_lm_free
Martyn Welch
martyn.welch at gefanuc.com
Mon Oct 5 09:08:04 UTC 2009
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 at gefanuc.com>
---
drivers/staging/vme/vme.c | 14 ++++++++------
1 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/drivers/staging/vme/vme.c b/drivers/staging/vme/vme.c
index 9cfbbfa..c0153bf 100644
--- a/drivers/staging/vme/vme.c
+++ b/drivers/staging/vme/vme.c
@@ -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);
--
Martyn Welch MEng MPhil MIET (Principal Software Engineer) T:+44(0)1327322748
GE Fanuc Intelligent Platforms Ltd, |Registered in England and Wales
Tove Valley Business Park, Towcester, |(3828642) at 100 Barbirolli Square,
Northants, NN12 6PF, UK T:+44(0)1327359444 |Manchester,M2 3AB VAT:GB 927559189
More information about the devel
mailing list