From 47a482419ec58a2dc37f9d5eb036554e8e35b59e Mon Sep 17 00:00:00 2001 From: tzafrir Date: Tue, 5 Sep 2006 00:11:47 +0000 Subject: SPAN_REGISTERED() should not rely on zaptel ZT_FLAG_REGISTERED since zaptel set it before registration is finished. (right: xpp needs to replicate zaptel's bookkeeping here). git-svn-id: http://svn.digium.com/svn/zaptel/trunk@1397 5390a7c7-147a-4af0-8ec9-7488f05a26cb --- xpp/xpd.h | 1 + xpp/xpp_zap.c | 3 +++ xpp/xpp_zap.h | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/xpp/xpd.h b/xpp/xpd.h index da4eba8..f8d60ea 100644 --- a/xpp/xpd.h +++ b/xpp/xpd.h @@ -264,6 +264,7 @@ struct xpd { xbus_t *xbus; /* The XBUS we are connected to */ spinlock_t lock; + atomic_t zt_registered; /* Am I fully registered with zaptel */ atomic_t open_counter; /* Number of open channels */ int flags; diff --git a/xpp/xpp_zap.c b/xpp/xpp_zap.c index b6bb618..d9d413d 100644 --- a/xpp/xpp_zap.c +++ b/xpp/xpp_zap.c @@ -523,6 +523,7 @@ xpd_t *xpd_alloc(size_t privsize, xbus_t *xbus, int xpd_num, const xproto_table_ xpd->idletxhookstate[i] = FXS_LINE_ENABLED; /* By default, don't send on hook */ } + atomic_set(&xpd->zt_registered, 0); atomic_set(&xpd->open_counter, 0); xpd->chans = kmalloc(sizeof(struct zt_chan)*xpd->channels, GFP_KERNEL); @@ -1295,6 +1296,7 @@ static int zaptel_unregister_xpd(xpd_t *xpd) spin_unlock_irqrestore(&xpd->lock, flags); return -EIDRM; } + atomic_dec(&xpd->zt_registered); if(sync_master == xpd) sync_master_is(NULL); // FIXME: it's better to elect a new prince update_xpd_status(xpd, ZT_ALARM_NOTOPEN); @@ -1370,6 +1372,7 @@ static int zaptel_register_xpd(xpd_t *xpd) ERR("%s/%s: Failed to zt_register span\n", xbus->busname, xpd->xpdname); return -ENODEV; } + atomic_inc(&xpd->zt_registered); xpd->xops->card_zaptel_postregistration(xpd, 1); return 0; } diff --git a/xpp/xpp_zap.h b/xpp/xpp_zap.h index 920e76f..39608c0 100644 --- a/xpp/xpp_zap.h +++ b/xpp/xpp_zap.h @@ -50,6 +50,6 @@ extern struct workqueue_struct *xpp_worker; extern struct proc_dir_entry *xpp_proc_toplevel; #endif -#define SPAN_REGISTERED(xpd) ((xpd)->span.flags & ZT_FLAG_REGISTERED) +#define SPAN_REGISTERED(xpd) atomic_read(&(xpd)->zt_registered) #endif /* XPP_ZAP_H */ -- cgit v1.2.3