diff options
author | Martyn Welch <martyn.welch@gefanuc.com> | 2009-08-11 16:20:22 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-09-15 12:02:11 -0700 |
commit | 400822fec46ce69d2ba7692689a1689653f7b847 (patch) | |
tree | 2ceb1f136ca514a17d8a14e38dfcc7595d192add /drivers/staging/vme/vme.c | |
parent | 238add523bf9c89db1a191599fff2770af55e0fd (diff) |
Staging: Use proper mutexes in the tsi-148 VME driver
The VME core and tsi-148 driver currently use semaphores as mutexes. Switch to proper
mutex implementation.
Signed-off-by: Martyn Welch <martyn.welch@gefanuc.com>
Reviewed-by: Emilio G. Cota <cota@braap.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/vme/vme.c')
-rw-r--r-- | drivers/staging/vme/vme.c | 60 |
1 files changed, 30 insertions, 30 deletions
diff --git a/drivers/staging/vme/vme.c b/drivers/staging/vme/vme.c index 7b442b99fa3..07b254a6535 100644 --- a/drivers/staging/vme/vme.c +++ b/drivers/staging/vme/vme.c @@ -28,15 +28,15 @@ #include <linux/device.h> #include <linux/dma-mapping.h> #include <linux/syscalls.h> -#include <linux/semaphore.h> +#include <linux/mutex.h> #include <linux/spinlock.h> #include "vme.h" #include "vme_bridge.h" -/* Bitmask and semaphore to keep track of bridge numbers */ +/* Bitmask and mutex to keep track of bridge numbers */ static unsigned int vme_bus_numbers; -DECLARE_MUTEX(vme_bus_num_sem); +DEFINE_MUTEX(vme_bus_num_mtx); static void __exit vme_exit (void); static int __init vme_init (void); @@ -251,17 +251,17 @@ struct vme_resource * vme_slave_request(struct device *dev, } /* Find an unlocked and compatible image */ - down(&(slave_image->sem)); + mutex_lock(&(slave_image->mtx)); if(((slave_image->address_attr & address) == address) && ((slave_image->cycle_attr & cycle) == cycle) && (slave_image->locked == 0)) { slave_image->locked = 1; - up(&(slave_image->sem)); + mutex_unlock(&(slave_image->mtx)); allocated_image = slave_image; break; } - up(&(slave_image->sem)); + mutex_unlock(&(slave_image->mtx)); } /* No free image */ @@ -280,9 +280,9 @@ struct vme_resource * vme_slave_request(struct device *dev, err_alloc: /* Unlock image */ - down(&(slave_image->sem)); + mutex_lock(&(slave_image->mtx)); slave_image->locked = 0; - up(&(slave_image->sem)); + mutex_unlock(&(slave_image->mtx)); err_image: err_bus: return NULL; @@ -365,12 +365,12 @@ void vme_slave_free(struct vme_resource *resource) } /* Unlock image */ - down(&(slave_image->sem)); + mutex_lock(&(slave_image->mtx)); if (slave_image->locked == 0) printk(KERN_ERR "Image is already free\n"); slave_image->locked = 0; - up(&(slave_image->sem)); + mutex_unlock(&(slave_image->mtx)); /* Free up resource memory */ kfree(resource); @@ -668,14 +668,14 @@ struct vme_resource *vme_request_dma(struct device *dev) } /* Find an unlocked controller */ - down(&(dma_ctrlr->sem)); + mutex_lock(&(dma_ctrlr->mtx)); if(dma_ctrlr->locked == 0) { dma_ctrlr->locked = 1; - up(&(dma_ctrlr->sem)); + mutex_unlock(&(dma_ctrlr->mtx)); allocated_ctrlr = dma_ctrlr; break; } - up(&(dma_ctrlr->sem)); + mutex_unlock(&(dma_ctrlr->mtx)); } /* Check to see if we found a resource */ @@ -694,9 +694,9 @@ struct vme_resource *vme_request_dma(struct device *dev) err_alloc: /* Unlock image */ - down(&(dma_ctrlr->sem)); + mutex_lock(&(dma_ctrlr->mtx)); dma_ctrlr->locked = 0; - up(&(dma_ctrlr->sem)); + mutex_unlock(&(dma_ctrlr->mtx)); err_ctrlr: err_bus: return NULL; @@ -726,7 +726,7 @@ struct vme_dma_list *vme_new_dma_list(struct vme_resource *resource) } INIT_LIST_HEAD(&(dma_list->entries)); dma_list->parent = ctrlr; - init_MUTEX(&(dma_list->sem)); + mutex_init(&(dma_list->mtx)); return dma_list; } @@ -876,14 +876,14 @@ int vme_dma_list_add(struct vme_dma_list *list, struct vme_dma_attr *src, return -EINVAL; } - if (down_trylock(&(list->sem))) { + if (mutex_trylock(&(list->mtx))) { printk("Link List already submitted\n"); return -EINVAL; } retval = bridge->dma_list_add(list, src, dest, count); - up(&(list->sem)); + mutex_unlock(&(list->mtx)); return retval; } @@ -899,11 +899,11 @@ int vme_dma_list_exec(struct vme_dma_list *list) return -EINVAL; } - down(&(list->sem)); + mutex_lock(&(list->mtx)); retval = bridge->dma_list_exec(list); - up(&(list->sem)); + mutex_unlock(&(list->mtx)); return retval; } @@ -919,7 +919,7 @@ int vme_dma_list_free(struct vme_dma_list *list) return -EINVAL; } - if (down_trylock(&(list->sem))) { + if (mutex_trylock(&(list->mtx))) { printk("Link List in use\n"); return -EINVAL; } @@ -931,10 +931,10 @@ int vme_dma_list_free(struct vme_dma_list *list) retval = bridge->dma_list_empty(list); if (retval) { printk("Unable to empty link-list entries\n"); - up(&(list->sem)); + mutex_unlock(&(list->mtx)); return retval; } - up(&(list->sem)); + mutex_unlock(&(list->mtx)); kfree(list); return retval; @@ -952,20 +952,20 @@ int vme_dma_free(struct vme_resource *resource) ctrlr = list_entry(resource->entry, struct vme_dma_resource, list); - if (down_trylock(&(ctrlr->sem))) { + if (mutex_trylock(&(ctrlr->mtx))) { printk("Resource busy, can't free\n"); return -EBUSY; } if (!(list_empty(&(ctrlr->pending)) && list_empty(&(ctrlr->running)))) { printk("Resource still processing transfers\n"); - up(&(ctrlr->sem)); + mutex_unlock(&(ctrlr->mtx)); return -EBUSY; } ctrlr->locked = 0; - up(&(ctrlr->sem)); + mutex_unlock(&(ctrlr->mtx)); return 0; } @@ -1149,23 +1149,23 @@ static int vme_alloc_bus_num(void) { int i; - down(&vme_bus_num_sem); + mutex_lock(&vme_bus_num_mtx); for (i = 0; i < sizeof(vme_bus_numbers) * 8; i++) { if (((vme_bus_numbers >> i) & 0x1) == 0) { vme_bus_numbers |= (0x1 << i); break; } } - up(&vme_bus_num_sem); + mutex_unlock(&vme_bus_num_mtx); return i; } static void vme_free_bus_num(int bus) { - down(&vme_bus_num_sem); + mutex_lock(&vme_bus_num_mtx); vme_bus_numbers |= ~(0x1 << bus); - up(&vme_bus_num_sem); + mutex_unlock(&vme_bus_num_mtx); } int vme_register_bridge (struct vme_bridge *bridge) |