From cd419f86a583306c63a461b7e79a52e96c1e20bc Mon Sep 17 00:00:00 2001 From: Shaun Ruffell Date: Thu, 2 Jun 2011 20:01:34 +0000 Subject: dahdi: Allow dahdi_span_ops.[chan|span]config and startup to block. This change ensures that the dahdi_span_ops callbacks are not called with any spinlocks held, and that the module is pinned in memory, and also passes the struct file * pointer to the callbacks. Passing the file pointer to the callbacks allows the board drivers to check any flags on the file descriptor used to configure the span/channel. The intent here is to allow dahdi_config to open the /dev/dahdi/ctl file in a non-blocking mode in case there is a lengthy processes that needs to happen as part of configuration. Signed-off-by: Shaun Ruffell Acked-by: Tzafrir Cohen git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@9940 a0bf4364-ded3-4de4-8d8a-66a801d63aff --- drivers/dahdi/wcte12xp/base.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'drivers/dahdi/wcte12xp/base.c') diff --git a/drivers/dahdi/wcte12xp/base.c b/drivers/dahdi/wcte12xp/base.c index 4610eac..1563855 100644 --- a/drivers/dahdi/wcte12xp/base.c +++ b/drivers/dahdi/wcte12xp/base.c @@ -929,7 +929,7 @@ static void set_span_devicetype(struct t1 *wc) #endif } -static int t1xxp_startup(struct dahdi_span *span) +static int t1xxp_startup(struct file *file, struct dahdi_span *span) { struct t1 *wc = container_of(span, struct t1, span); #ifndef CONFIG_VOICEBUS_ECREFERENCE @@ -954,7 +954,8 @@ static int t1xxp_startup(struct dahdi_span *span) return 0; } -static int t1xxp_chanconfig(struct dahdi_chan *chan, int sigtype) +static int t1xxp_chanconfig(struct file *file, + struct dahdi_chan *chan, int sigtype) { struct t1 *wc = chan->pvt; if (test_bit(DAHDI_FLAGBIT_RUNNING, &chan->span->flags) && @@ -1484,7 +1485,8 @@ static void t1_chan_set_sigcap(struct dahdi_span *span, int x) } static int -t1xxp_spanconfig(struct dahdi_span *span, struct dahdi_lineconfig *lc) +t1xxp_spanconfig(struct file *file, struct dahdi_span *span, + struct dahdi_lineconfig *lc) { struct t1 *wc = container_of(span, struct t1, span); int i; @@ -1504,7 +1506,7 @@ t1xxp_spanconfig(struct dahdi_span *span, struct dahdi_lineconfig *lc) /* If already running, apply changes immediately */ if (test_bit(DAHDI_FLAGBIT_RUNNING, &span->flags)) - return t1xxp_startup(span); + return t1xxp_startup(file, span); return 0; } -- cgit v1.2.3