summaryrefslogtreecommitdiff
path: root/drivers/dahdi/dahdi_dynamic_ethmf.c
diff options
context:
space:
mode:
authorShaun Ruffell <sruffell@digium.com>2011-01-03 18:25:56 +0000
committerShaun Ruffell <sruffell@digium.com>2011-01-03 18:25:56 +0000
commit217c8f524c98befd2b13e2f3ec7cb8cdcf5ff5ff (patch)
tree55b30899788c0ac82b63e9834838b36a012e9db0 /drivers/dahdi/dahdi_dynamic_ethmf.c
parentd7d5fbd8c1f1b2bf8361e23d07708fb96079b353 (diff)
dahdi_dynamic: Pass the dahdi_dynamic to create/destroy functions.
This allows the pvt member to be set under lock without holding the lock through the call to create destroy. Signed-off-by: Shaun Ruffell <sruffell@digium.com> Acked-by: Kinsey Moore <kmoore@digium.com> git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@9578 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers/dahdi/dahdi_dynamic_ethmf.c')
-rw-r--r--drivers/dahdi/dahdi_dynamic_ethmf.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/drivers/dahdi/dahdi_dynamic_ethmf.c b/drivers/dahdi/dahdi_dynamic_ethmf.c
index cd5a872..fecce48 100644
--- a/drivers/dahdi/dahdi_dynamic_ethmf.c
+++ b/drivers/dahdi/dahdi_dynamic_ethmf.c
@@ -388,9 +388,9 @@ static int ztdethmf_notifier(struct notifier_block *block, unsigned long event,
return 0;
}
-static void ztdethmf_transmit(void *pvt, unsigned char *msg, int msglen)
+static void ztdethmf_transmit(struct dahdi_dynamic *dyn, u8 *msg, size_t msglen)
{
- struct ztdeth *z = pvt, *ready_spans[ETHMF_MAX_PER_SPAN_GROUP];
+ struct ztdeth *z = dyn->pvt, *ready_spans[ETHMF_MAX_PER_SPAN_GROUP];
struct sk_buff *skb;
struct ztdeth_header *zh;
struct net_device *dev;
@@ -554,9 +554,9 @@ static struct packet_type ztdethmf_ptype = {
.func = ztdethmf_rcv, /* Receiver */
};
-static void ztdethmf_destroy(void *pvt)
+static void ztdethmf_destroy(struct dahdi_dynamic *dyn)
{
- struct ztdeth *z = pvt;
+ struct ztdeth *z = dyn->pvt;
unsigned long flags;
atomic_set(&shutdown, 1);
@@ -581,20 +581,21 @@ static void ztdethmf_destroy(void *pvt)
}
}
-static void *ztdethmf_create(struct dahdi_span *span, const char *addr)
+static int ztdethmf_create(struct dahdi_dynamic *dyn, const char *addr)
{
struct ztdeth *z;
char src[256];
char *src_ptr;
int x, bufsize, num_matched;
unsigned long flags;
+ struct dahdi_span *const span = &dyn->span;
BUG_ON(!span);
BUG_ON(!addr);
z = kmalloc(sizeof(struct ztdeth), GFP_KERNEL);
if (!z)
- return NULL;
+ return -ENOMEM;
/* Zero it out */
memset(z, 0, sizeof(struct ztdeth));
@@ -625,7 +626,7 @@ static void *ztdethmf_create(struct dahdi_span *span, const char *addr)
printk(KERN_ERR "Only matched %d entries in '%s'\n", num_matched, src);
printk(KERN_ERR "Invalid TDMoE Multiframe address: %s\n", addr);
kfree(z);
- return NULL;
+ return -EINVAL;
}
z->dev = dev_get_by_name(
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 24)
@@ -635,7 +636,7 @@ static void *ztdethmf_create(struct dahdi_span *span, const char *addr)
if (!z->dev) {
printk(KERN_ERR "TDMoE Multiframe: Invalid device '%s'\n", z->ethdev);
kfree(z);
- return NULL;
+ return -EINVAL;
}
z->span = span;
z->subaddr = htons(z->subaddr);
@@ -662,7 +663,8 @@ static void *ztdethmf_create(struct dahdi_span *span, const char *addr)
/* enable the timer for enabling the spans */
mod_timer(&timer, jiffies + HZ);
atomic_set(&shutdown, 0);
- return z;
+ dyn->pvt = z;
+ return 0;
}
static struct dahdi_dynamic_driver ztd_ethmf = {