summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOron Peled <oron.peled@xorcom.com>2011-05-23 17:50:14 +0300
committerOron Peled <oron.peled@xorcom.com>2011-05-23 17:50:14 +0300
commit090ffe93c179ddd674e0f272e090eebd0b2941ad (patch)
treef3bc325060b2ca7d39d3f25d7b8ecb5c498cf706
parent35a1e9c60bccdafdf3d59d1c6c15e68d59d8ef11 (diff)
Allow low-level drivers to unregister a single span at a time:
- Rename the static dahdi_unregister_span() to _dahdi_unregister_span() - Export a new dahdi_unregister_span() [protected by registration_mutex]
-rw-r--r--drivers/dahdi/dahdi-base.c17
-rw-r--r--include/dahdi/kernel.h1
2 files changed, 15 insertions, 3 deletions
diff --git a/drivers/dahdi/dahdi-base.c b/drivers/dahdi/dahdi-base.c
index 1d14d4c..23cda1a 100644
--- a/drivers/dahdi/dahdi-base.c
+++ b/drivers/dahdi/dahdi-base.c
@@ -6786,7 +6786,7 @@ int dahdi_register_device(struct dahdi_device *ddev, struct device *parent)
EXPORT_SYMBOL(dahdi_register_device);
/**
- * dahdi_unregister_span() - unregister a DAHDI span
+ * _dahdi_unregister_span() - unregister a DAHDI span
* @span: the DAHDI span
* @prefmaster: will the new span be preferred as a master?
*
@@ -6804,7 +6804,7 @@ EXPORT_SYMBOL(dahdi_register_device);
* Must be called with the registration_mutex held.
*
*/
-static int dahdi_unregister_span(struct dahdi_span *span)
+static int _dahdi_unregister_span(struct dahdi_span *span)
{
int x;
struct dahdi_span *new_master, *s;
@@ -6854,6 +6854,17 @@ static int dahdi_unregister_span(struct dahdi_span *span)
return 0;
}
+int dahdi_unregister_span(struct dahdi_span *span)
+{
+ module_printk(KERN_NOTICE, "%s: %s\n", __FUNCTION__, span->name);
+ mutex_lock(&registration_mutex);
+ _dahdi_unregister_span(span);
+ list_del_init(&span->device_node);
+ mutex_unlock(&registration_mutex);
+ return 0;
+}
+EXPORT_SYMBOL(dahdi_unregister_span);
+
/**
* dahdi_unregister_device() - unregister a DAHDI device
* @span: the DAHDI span
@@ -6872,7 +6883,7 @@ void dahdi_unregister_device(struct dahdi_device *ddev)
mutex_lock(&registration_mutex);
list_for_each_entry(s, &ddev->spans, device_node)
- dahdi_unregister_span(s);
+ _dahdi_unregister_span(s);
mutex_unlock(&registration_mutex);
dahdi_sysfs_unregister_device(ddev);
diff --git a/include/dahdi/kernel.h b/include/dahdi/kernel.h
index bded00b..d2f3dc7 100644
--- a/include/dahdi/kernel.h
+++ b/include/dahdi/kernel.h
@@ -1132,6 +1132,7 @@ struct dahdi_device *dahdi_create_device(void);
int dahdi_register_device(struct dahdi_device *ddev, struct device *parent);
void dahdi_unregister_device(struct dahdi_device *ddev);
void dahdi_free_device(struct dahdi_device *ddev);
+int dahdi_unregister_span(struct dahdi_span *span);
/*! Allocate / free memory for a transcoder */
struct dahdi_transcoder *dahdi_transcoder_alloc(int numchans);