diff options
author | Shaun Ruffell <sruffell@digium.com> | 2011-01-03 18:25:56 +0000 |
---|---|---|
committer | Shaun Ruffell <sruffell@digium.com> | 2011-01-03 18:25:56 +0000 |
commit | 217c8f524c98befd2b13e2f3ec7cb8cdcf5ff5ff (patch) | |
tree | 55b30899788c0ac82b63e9834838b36a012e9db0 /drivers/dahdi/dahdi_dynamic_ethmf.c | |
parent | d7d5fbd8c1f1b2bf8361e23d07708fb96079b353 (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.c | 20 |
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 = { |