@@ -251,17 +251,17 @@ static long media_device_ioctl(struct file *filp, unsigned int cmd,
break;
case MEDIA_IOC_ENUM_LINKS:
- mutex_lock(&dev->graph_mutex);
+ spin_lock(&dev->graph_lock);
ret = media_device_enum_links(dev,
(struct media_links_enum __user *)arg);
- mutex_unlock(&dev->graph_mutex);
+ spin_unlock(&dev->graph_lock);
break;
case MEDIA_IOC_SETUP_LINK:
- mutex_lock(&dev->graph_mutex);
+ spin_lock(&dev->graph_lock);
ret = media_device_setup_link(dev,
(struct media_link_desc __user *)arg);
- mutex_unlock(&dev->graph_mutex);
+ spin_unlock(&dev->graph_lock);
break;
default:
@@ -315,10 +315,10 @@ static long media_device_compat_ioctl(struct file *filp, unsigned int cmd,
return media_device_ioctl(filp, cmd, arg);
case MEDIA_IOC_ENUM_LINKS32:
- mutex_lock(&dev->graph_mutex);
+ spin_lock(&dev->graph_lock);
ret = media_device_enum_links32(dev,
(struct media_links_enum32 __user *)arg);
- mutex_unlock(&dev->graph_mutex);
+ spin_unlock(&dev->graph_lock);
break;
default:
@@ -383,7 +383,7 @@ int __must_check __media_device_register(struct media_device *mdev,
INIT_LIST_HEAD(&mdev->entities);
INIT_LIST_HEAD(&mdev->entity_notify);
spin_lock_init(&mdev->lock);
- mutex_init(&mdev->graph_mutex);
+ spin_lock_init(&mdev->graph_lock);
/* Register the device node. */
mdev->devnode.fops = &media_device_fops;
@@ -230,7 +230,7 @@ __must_check int media_entity_pipeline_start(struct media_entity *entity,
struct media_entity *entity_err = entity;
int ret;
- mutex_lock(&mdev->graph_mutex);
+ spin_lock(&mdev->graph_lock);
media_entity_graph_walk_start(&graph, entity);
@@ -303,7 +303,7 @@ __must_check int media_entity_pipeline_start(struct media_entity *entity,
}
}
- mutex_unlock(&mdev->graph_mutex);
+ spin_unlock(&mdev->graph_lock);
return 0;
@@ -327,7 +327,7 @@ error:
break;
}
- mutex_unlock(&mdev->graph_mutex);
+ spin_unlock(&mdev->graph_lock);
return ret;
}
@@ -350,7 +350,7 @@ void media_entity_pipeline_stop(struct media_entity *entity)
struct media_device *mdev = entity->parent;
struct media_entity_graph graph;
- mutex_lock(&mdev->graph_mutex);
+ spin_lock(&mdev->graph_lock);
media_entity_graph_walk_start(&graph, entity);
@@ -360,7 +360,7 @@ void media_entity_pipeline_stop(struct media_entity *entity)
entity->pipe = NULL;
}
- mutex_unlock(&mdev->graph_mutex);
+ spin_unlock(&mdev->graph_lock);
}
EXPORT_SYMBOL_GPL(media_entity_pipeline_stop);
@@ -519,9 +519,9 @@ void media_entity_remove_links(struct media_entity *entity)
if (entity->parent == NULL)
return;
- mutex_lock(&entity->parent->graph_mutex);
+ spin_lock(&entity->parent->graph_lock);
__media_entity_remove_links(entity);
- mutex_unlock(&entity->parent->graph_mutex);
+ spin_unlock(&entity->parent->graph_lock);
}
EXPORT_SYMBOL_GPL(media_entity_remove_links);
@@ -611,9 +611,9 @@ int media_entity_setup_link(struct media_link *link, u32 flags)
{
int ret;
- mutex_lock(&link->source->entity->parent->graph_mutex);
+ spin_lock(&link->source->entity->parent->graph_lock);
ret = __media_entity_setup_link(link, flags);
- mutex_unlock(&link->source->entity->parent->graph_mutex);
+ spin_unlock(&link->source->entity->parent->graph_lock);
return ret;
}
@@ -50,7 +50,7 @@ struct media_entity_notify {
* @entity_id: ID of the next entity to be registered
* @entities: List of registered entities
* @lock: Entities list lock
- * @graph_mutex: Entities graph operation lock
+ * @graph_lock: Entities graph operation lock
* @link_notify: Link state change notification callback
*
* This structure represents an abstract high-level media device. It allows easy
@@ -82,7 +82,7 @@ struct media_device {
/* Protects the entities list */
spinlock_t lock;
/* Serializes graph operations. */
- struct mutex graph_mutex;
+ spinlock_t graph_lock;
int (*link_notify)(struct media_link *link, u32 flags,
unsigned int notification);
ALSA driver calls Media Controller start/stop pipeline interfaces from IRQ handler. Start/stop pipeline lock graph_mutex which is unsafe from a IRQ handler. Convert graph_mutex into a spinlock and call it graph_lock. IRQ safe start/stop pipeline interfaces will be added based on this change. Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com> --- drivers/media/media-device.c | 14 +++++++------- drivers/media/media-entity.c | 18 +++++++++--------- include/media/media-device.h | 4 ++-- 3 files changed, 18 insertions(+), 18 deletions(-)