[svn-commits] sruffell: linux/trunk r6794 - in /linux/trunk: drivers/dahdi/ drivers/dahdi/w...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Mon Jun 29 15:56:19 CDT 2009


Author: sruffell
Date: Mon Jun 29 15:56:07 2009
New Revision: 6794

URL: http://svn.asterisk.org/svn-view/dahdi?view=rev&rev=6794
Log:
dahdi-base: Enable DAHDI to manage the reference counts for the board drivers.

Adds a struct module 'owner' member to the dahdi_span structure and updates
all the board drivers to set this member before registering the span.  This
allows the core of dahdi to maintain the reference counts on the channels
itself.

(closes issue #10601)
Reported by: Matti

Modified:
    linux/trunk/drivers/dahdi/dahdi-base.c
    linux/trunk/drivers/dahdi/dahdi_dummy.c
    linux/trunk/drivers/dahdi/dahdi_dynamic.c
    linux/trunk/drivers/dahdi/pciradio.c
    linux/trunk/drivers/dahdi/tor2.c
    linux/trunk/drivers/dahdi/wcb4xxp/base.c
    linux/trunk/drivers/dahdi/wcfxo.c
    linux/trunk/drivers/dahdi/wct1xxp.c
    linux/trunk/drivers/dahdi/wct4xxp/base.c
    linux/trunk/drivers/dahdi/wctdm.c
    linux/trunk/drivers/dahdi/wctdm24xxp/base.c
    linux/trunk/drivers/dahdi/wcte11xp.c
    linux/trunk/drivers/dahdi/wcte12xp/base.c
    linux/trunk/drivers/dahdi/xpp/card_bri.c
    linux/trunk/drivers/dahdi/xpp/card_fxo.c
    linux/trunk/drivers/dahdi/xpp/card_fxs.c
    linux/trunk/drivers/dahdi/xpp/card_pri.c
    linux/trunk/drivers/dahdi/xpp/xpp_dahdi.c
    linux/trunk/include/dahdi/kernel.h

Modified: linux/trunk/drivers/dahdi/dahdi-base.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/drivers/dahdi/dahdi-base.c?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/drivers/dahdi/dahdi-base.c (original)
+++ linux/trunk/drivers/dahdi/dahdi-base.c Mon Jun 29 15:56:07 2009
@@ -15,7 +15,7 @@
  * from Cisco 3620 to IBM x305 here in F1 Group
  *
  * Copyright (C) 2001 Jim Dixon / Zapata Telephony.
- * Copyright (C) 2001 - 2008 Digium, Inc.
+ * Copyright (C) 2001 - 2009 Digium, Inc.
  *
  * All rights reserved.
  *
@@ -2649,39 +2649,44 @@
 static int dahdi_specchan_open(struct inode *inode, struct file *file, int unit)
 {
 	int res = 0;
-
-	if (chans[unit] && chans[unit]->sig) {
+	struct dahdi_chan *const chan = chans[unit];
+
+	if (chan && chan->sig) {
 		/* Make sure we're not already open, a net device, or a slave device */
-		if (chans[unit]->flags & DAHDI_FLAG_NETDEV)
+		if (chan->flags & DAHDI_FLAG_NETDEV)
 			res = -EBUSY;
-		else if (chans[unit]->master != chans[unit])
+		else if (chan->master != chan)
 			res = -EBUSY;
-		else if ((chans[unit]->sig & __DAHDI_SIG_DACS) == __DAHDI_SIG_DACS)
+		else if ((chan->sig & __DAHDI_SIG_DACS) == __DAHDI_SIG_DACS)
 			res = -EBUSY;
-		else if (!test_and_set_bit(DAHDI_FLAGBIT_OPEN, &chans[unit]->flags)) {
+		else if (!test_and_set_bit(DAHDI_FLAGBIT_OPEN, &chan->flags)) {
 			unsigned long flags;
-			res = initialize_channel(chans[unit]);
+			res = initialize_channel(chan);
 			if (res) {
 				/* Reallocbufs must have failed */
-				clear_bit(DAHDI_FLAGBIT_OPEN, &chans[unit]->flags);
+				clear_bit(DAHDI_FLAGBIT_OPEN, &chan->flags);
 				return res;
 			}
-			spin_lock_irqsave(&chans[unit]->lock, flags);
-			if (chans[unit]->flags & DAHDI_FLAG_PSEUDO)
-				chans[unit]->flags |= DAHDI_FLAG_AUDIO;
-			if (chans[unit]->span && chans[unit]->span->open) {
-				res = chans[unit]->span->open(chans[unit]);
+			spin_lock_irqsave(&chan->lock, flags);
+			if (chan->flags & DAHDI_FLAG_PSEUDO)
+				chan->flags |= DAHDI_FLAG_AUDIO;
+			if (chan->span) {
+				if (!try_module_get(chan->span->owner))
+					res = -ENXIO;
+				else if (chan->span->open)
+					res = chan->span->open(chan);
 			}
 			if (!res) {
-				chans[unit]->file = file;
-				spin_unlock_irqrestore(&chans[unit]->lock, flags);
+				chan->file = file;
+				spin_unlock_irqrestore(&chan->lock, flags);
 			} else {
-				spin_unlock_irqrestore(&chans[unit]->lock, flags);
-				close_channel(chans[unit]);
-				clear_bit(DAHDI_FLAGBIT_OPEN, &chans[unit]->flags);
-			}
-		} else
+				spin_unlock_irqrestore(&chan->lock, flags);
+				close_channel(chan);
+				clear_bit(DAHDI_FLAGBIT_OPEN, &chan->flags);
+			}
+		} else {
 			res = -EBUSY;
+		}
 	} else
 		res = -ENXIO;
 	return res;
@@ -2691,18 +2696,22 @@
 {
 	int res=0;
 	unsigned long flags;
-
-	if (chans[unit]) {
+	struct dahdi_chan *const chan = chans[unit];
+
+	if (chan) {
 		/* Chan lock protects contents against potentially non atomic accesses.
 		 * So if the pointer setting is not atomic, we should protect */
-		spin_lock_irqsave(&chans[unit]->lock, flags);
-		chans[unit]->file = NULL;
-		spin_unlock_irqrestore(&chans[unit]->lock, flags);
-		close_channel(chans[unit]);
-		if (chans[unit]->span && chans[unit]->span->close)
-			res = chans[unit]->span->close(chans[unit]);
+		spin_lock_irqsave(&chan->lock, flags);
+		chan->file = NULL;
+		spin_unlock_irqrestore(&chan->lock, flags);
+		close_channel(chan);
+		if (chan->span) {
+			if (chan->span->close)
+				res = chan->span->close(chan);
+			module_put(chan->span->owner);
+		}
 		/* The channel might be destroyed by low-level driver span->close() */
-		if(chans[unit])
+		if (chans[unit])
 			clear_bit(DAHDI_FLAGBIT_OPEN, &chans[unit]->flags);
 	} else
 		res = -ENXIO;
@@ -3851,8 +3860,10 @@
 		CHECK_VALID_SPAN(j);
 		if (spans[j]->flags & DAHDI_FLAG_RUNNING)
 			return 0;
+
 		if (spans[j]->startup)
 			res = spans[j]->startup(spans[j]);
+
 		if (!res) {
 			/* Mark as running and hangup any channels */
 			spans[j]->flags |= DAHDI_FLAG_RUNNING;
@@ -5499,6 +5510,8 @@
 	if (!span)
 		return -EINVAL;
 
+	WARN_ON(!span->owner);
+
 	if (test_bit(DAHDI_FLAGBIT_REGISTERED, &span->flags)) {
 		module_printk(KERN_ERR, "Span %s already appears to be registered\n", span->name);
 		return -EBUSY;

Modified: linux/trunk/drivers/dahdi/dahdi_dummy.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/drivers/dahdi/dahdi_dummy.c?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/drivers/dahdi/dahdi_dummy.c (original)
+++ linux/trunk/drivers/dahdi/dahdi_dummy.c Mon Jun 29 15:56:07 2009
@@ -189,6 +189,7 @@
 	sprintf(ztd->chan->name, "DAHDI_DUMMY/%d/%d", 1, 0);
 	dahdi_copy_string(ztd->span.devicetype, "DAHDI Dummy Timing", sizeof(ztd->span.devicetype));
 	ztd->chan->chanpos = 1;
+	ztd->span.owner = THIS_MODULE;
 	ztd->span.chans = &ztd->chan;
 	ztd->span.channels = 0;		/* no channels on our span */
 	ztd->span.deflaw = DAHDI_LAW_MULAW;

Modified: linux/trunk/drivers/dahdi/dahdi_dynamic.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/drivers/dahdi/dahdi_dynamic.c?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/drivers/dahdi/dahdi_dynamic.c (original)
+++ linux/trunk/drivers/dahdi/dahdi_dynamic.c Mon Jun 29 15:56:07 2009
@@ -516,8 +516,6 @@
 			return -ENODEV;
 		z->usecount++;
 	}
-	if(!try_module_get(THIS_MODULE))
-		printk(KERN_NOTICE "TDMoX: Unable to increment module use count\n");
 	return 0;
 }
 
@@ -534,7 +532,6 @@
 		z->usecount--;
 	if (z->dead && !z->usecount)
 		dynamic_destroy(z);
-	module_put(THIS_MODULE);
 	return 0;
 }
 
@@ -604,6 +601,7 @@
 	z->timing = zds->timing;
 	sprintf(z->span.name, "DYN/%s/%s", zds->driver, zds->addr);
 	sprintf(z->span.desc, "Dynamic '%s' span at '%s'", zds->driver, zds->addr);
+	z->span.owner = THIS_MODULE;
 	z->span.channels = zds->numchans;
 	z->span.pvt = z;
 	z->span.deflaw = DAHDI_LAW_MULAW;

Modified: linux/trunk/drivers/dahdi/pciradio.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/drivers/dahdi/pciradio.c?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/drivers/dahdi/pciradio.c (original)
+++ linux/trunk/drivers/dahdi/pciradio.c Mon Jun 29 15:56:07 2009
@@ -1462,6 +1462,7 @@
 	int x;
 
 	/* DAHDI stuff */
+	rad->span.owner = THIS_MODULE;
 	sprintf(rad->span.name, "PCIRADIO/%d", rad->pos);
 	sprintf(rad->span.desc, "Board %d", rad->pos + 1);
 	rad->span.deflaw = DAHDI_LAW_MULAW;

Modified: linux/trunk/drivers/dahdi/tor2.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/drivers/dahdi/tor2.c?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/drivers/dahdi/tor2.c (original)
+++ linux/trunk/drivers/dahdi/tor2.c Mon Jun 29 15:56:07 2009
@@ -272,6 +272,7 @@
 		dahdi_copy_string(tor->spans[x].devicetype, tor->type, sizeof(tor->spans[x].devicetype));
 		snprintf(tor->spans[x].location, sizeof(tor->spans[x].location) - 1,
 			 "PCI Bus %02d Slot %02d", tor->pci->bus->number, PCI_SLOT(tor->pci->devfn) + 1);
+		tor->spans[x].owner = THIS_MODULE;
 		tor->spans[x].spanconfig = tor2_spanconfig;
 		tor->spans[x].chanconfig = tor2_chanconfig;
 		tor->spans[x].startup = tor2_startup;

Modified: linux/trunk/drivers/dahdi/wcb4xxp/base.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/drivers/dahdi/wcb4xxp/base.c?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/drivers/dahdi/wcb4xxp/base.c (original)
+++ linux/trunk/drivers/dahdi/wcb4xxp/base.c Mon Jun 29 15:56:07 2009
@@ -2084,10 +2084,6 @@
 	struct b4xxp *b4 = chan->pvt;
 	struct b4xxp_span *bspan = &b4->spans[chan->span->offset];
 
-	if (!try_module_get(THIS_MODULE)) {
-		return -EBUSY;
-	}
-
 	if (DBG_FOPS && DBG_SPANFILTER)
 		dev_info(b4->dev, "open() on chan %s (%i/%i)\n", chan->name, chan->channo, chan->chanpos);
 
@@ -2100,8 +2096,6 @@
 {
 	struct b4xxp *b4 = chan->pvt;
 	struct b4xxp_span *bspan = &b4->spans[chan->span->offset];
-
-	module_put(THIS_MODULE);
 
 	if (DBG_FOPS && DBG_SPANFILTER)
 		dev_info(b4->dev, "close() on chan %s (%i/%i)\n", chan->name, chan->channo, chan->chanpos);
@@ -2166,6 +2160,7 @@
 		sprintf(bspan->span.location, "PCI Bus %02d Slot %02d",
 			b4->pdev->bus->number, PCI_SLOT(b4->pdev->devfn) + 1);
 
+		bspan->span.owner = THIS_MODULE;
 		bspan->span.spanconfig = b4xxp_spanconfig;
 		bspan->span.chanconfig = b4xxp_chanconfig;
 		bspan->span.startup = b4xxp_startup;

Modified: linux/trunk/drivers/dahdi/wcfxo.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/drivers/dahdi/wcfxo.c?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/drivers/dahdi/wcfxo.c (original)
+++ linux/trunk/drivers/dahdi/wcfxo.c Mon Jun 29 15:56:07 2009
@@ -636,6 +636,7 @@
 static int wcfxo_initialize(struct wcfxo *wc)
 {
 	/* DAHDI stuff */
+	wc->span.owner = THIS_MODULE;
 	sprintf(wc->span.name, "WCFXO/%d", wc->pos);
 	snprintf(wc->span.desc, sizeof(wc->span.desc) - 1, "%s Board %d", wc->variety, wc->pos + 1);
 	sprintf(wc->chan->name, "WCFXO/%d/%d", wc->pos, 0);

Modified: linux/trunk/drivers/dahdi/wct1xxp.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/drivers/dahdi/wct1xxp.c?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/drivers/dahdi/wct1xxp.c (original)
+++ linux/trunk/drivers/dahdi/wct1xxp.c Mon Jun 29 15:56:07 2009
@@ -759,6 +759,7 @@
 	dahdi_copy_string(wc->span.devicetype, wc->variety, sizeof(wc->span.devicetype));
 	snprintf(wc->span.location, sizeof(wc->span.location) - 1,
 		 "PCI Bus %02d Slot %02d", wc->dev->bus->number, PCI_SLOT(wc->dev->devfn) + 1);
+	wc->span.owner = THIS_MODULE;
 	wc->span.spanconfig = t1xxp_spanconfig;
 	wc->span.chanconfig = t1xxp_chanconfig;
 	wc->span.irq = wc->dev->irq;

Modified: linux/trunk/drivers/dahdi/wct4xxp/base.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/drivers/dahdi/wct4xxp/base.c?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/drivers/dahdi/wct4xxp/base.c (original)
+++ linux/trunk/drivers/dahdi/wct4xxp/base.c Mon Jun 29 15:56:07 2009
@@ -1573,15 +1573,11 @@
 
 static int t4_open(struct dahdi_chan *chan)
 {
-	try_module_get(THIS_MODULE);
-
 	return 0;
 }
 
 static int t4_close(struct dahdi_chan *chan)
 {
-	module_put(THIS_MODULE);
-
 	return 0;
 }
 
@@ -1631,6 +1627,7 @@
 			ts->span.spantype = "J1";
 			break;
 		}
+		ts->span.owner = THIS_MODULE;
 		ts->span.spanconfig = t4_spanconfig;
 		ts->span.chanconfig = t4_chanconfig;
 		ts->span.irq = wc->dev->irq;

Modified: linux/trunk/drivers/dahdi/wctdm.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/drivers/dahdi/wctdm.c?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/drivers/dahdi/wctdm.c (original)
+++ linux/trunk/drivers/dahdi/wctdm.c Mon Jun 29 15:56:07 2009
@@ -1992,7 +1992,6 @@
 	if (wc->dead)
 		return -ENODEV;
 	wc->usecount++;
-	try_module_get(THIS_MODULE);
 	return 0;
 }
 
@@ -2007,7 +2006,6 @@
 {
 	struct wctdm *wc = chan->pvt;
 	wc->usecount--;
-	module_put(THIS_MODULE);
 	if (wc->modtype[chan->chanpos - 1] == MOD_TYPE_FXS) {
 		wc->mod[chan->chanpos - 1].fxs.idletxhookstate = POLARITY_XOR(chan->chanpos - 1) ? 0x5 : 0x1;
 	}
@@ -2105,6 +2103,7 @@
 		wc->chans[x]->chanpos = x+1;
 		wc->chans[x]->pvt = wc;
 	}
+	wc->span.owner = THIS_MODULE;
 	wc->span.chans = wc->chans;
 	wc->span.channels = NUM_CARDS;
 	wc->span.hooksig = wctdm_hooksig;

Modified: linux/trunk/drivers/dahdi/wctdm24xxp/base.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/drivers/dahdi/wctdm24xxp/base.c?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/drivers/dahdi/wctdm24xxp/base.c (original)
+++ linux/trunk/drivers/dahdi/wctdm24xxp/base.c Mon Jun 29 15:56:07 2009
@@ -2960,7 +2960,6 @@
 	if (wc->dead)
 		return -ENODEV;
 	wc->usecount++;
-	try_module_get(THIS_MODULE);
 	
 	/* Reset the mwi indicators */
 	spin_lock_irqsave(&wc->reglock, flags);
@@ -2984,7 +2983,6 @@
 	int x;
 	signed char reg;
 	wc->usecount--;
-	module_put(THIS_MODULE);
 	for (x=0;x<wc->cards;x++) {
 		if (wc->modtype[x] == MOD_TYPE_FXS) {
 			wc->mods[x].fxs.idletxhookstate = POLARITY_XOR(x) ? 5 : 1;
@@ -3226,6 +3224,7 @@
 		wc->chans[x]->chanpos = x+1;
 		wc->chans[x]->pvt = wc;
 	}
+	wc->span.owner = THIS_MODULE;
 	wc->span.chans = wc->chans;
 	wc->span.channels = wc->type;
 	wc->span.irq = pdev->irq;

Modified: linux/trunk/drivers/dahdi/wcte11xp.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/drivers/dahdi/wcte11xp.c?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/drivers/dahdi/wcte11xp.c (original)
+++ linux/trunk/drivers/dahdi/wcte11xp.c Mon Jun 29 15:56:07 2009
@@ -230,7 +230,6 @@
 	if (wc->dead)
 		return -ENODEV;
 	wc->usecount++;
-	try_module_get(THIS_MODULE);
 
 	return 0;
 }
@@ -355,7 +354,6 @@
 	struct t1 *wc = chan->pvt;
 
 	wc->usecount--;
-	module_put(THIS_MODULE);
 	/* If we're dead, release us now */
 	if (!wc->usecount && wc->dead) 
 		t1xxp_release(wc);

Modified: linux/trunk/drivers/dahdi/wcte12xp/base.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/drivers/dahdi/wcte12xp/base.c?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/drivers/dahdi/wcte12xp/base.c (original)
+++ linux/trunk/drivers/dahdi/wcte12xp/base.c Mon Jun 29 15:56:07 2009
@@ -1142,15 +1142,11 @@
 
 static int t1xxp_open(struct dahdi_chan *chan)
 {
-	if (!try_module_get(THIS_MODULE))
-		return -ENXIO;
-	else
-		return 0;
+	return 0;
 }
 
 static int t1xxp_close(struct dahdi_chan *chan)
 {
-	module_put(THIS_MODULE);
 	return 0;
 }
 
@@ -1226,6 +1222,7 @@
 	snprintf(wc->span.location, sizeof(wc->span.location) - 1,
 		"PCI Bus %02d Slot %02d", dev->bus->number, PCI_SLOT(dev->devfn) + 1);
 
+	wc->span.owner = THIS_MODULE;
 	wc->span.spanconfig = t1xxp_spanconfig;
 	wc->span.chanconfig = t1xxp_chanconfig;
 	wc->span.irq = dev->irq;

Modified: linux/trunk/drivers/dahdi/xpp/card_bri.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/drivers/dahdi/xpp/card_bri.c?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/drivers/dahdi/xpp/card_bri.c (original)
+++ linux/trunk/drivers/dahdi/xpp/card_bri.c Mon Jun 29 15:56:07 2009
@@ -872,6 +872,7 @@
 		/* Nothing to do yet */
 		return 0;
 	}
+	xpd->span.owner = THIS_MODULE;
 	xpd->span.spantype = "BRI";
 	xpd->span.linecompat = DAHDI_CONFIG_AMI | DAHDI_CONFIG_CCS;
 	xpd->span.deflaw = DAHDI_LAW_ALAW;

Modified: linux/trunk/drivers/dahdi/xpp/card_fxo.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/drivers/dahdi/xpp/card_fxo.c?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/drivers/dahdi/xpp/card_fxo.c (original)
+++ linux/trunk/drivers/dahdi/xpp/card_fxo.c Mon Jun 29 15:56:07 2009
@@ -509,6 +509,7 @@
 	BUG_ON(!priv);
 	timer_count = xpd->timer_count;
 	XPD_DBG(GENERAL, xpd, "%s\n", (on)?"ON":"OFF");
+	xpd->span.owner = THIS_MODULE;
 	xpd->span.spantype = "FXO";
 	for_each_line(xpd, i) {
 		struct dahdi_chan	*cur_chan = XPD_CHAN(xpd, i);

Modified: linux/trunk/drivers/dahdi/xpp/card_fxs.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/drivers/dahdi/xpp/card_fxs.c?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/drivers/dahdi/xpp/card_fxs.c (original)
+++ linux/trunk/drivers/dahdi/xpp/card_fxs.c Mon Jun 29 15:56:07 2009
@@ -494,6 +494,7 @@
 	priv = xpd->priv;
 	BUG_ON(!priv);
 	XPD_DBG(GENERAL, xpd, "%s\n", (on)?"on":"off");
+	xpd->span.owner = THIS_MODULE;
 	xpd->span.spantype = "FXS";
 	for_each_line(xpd, i) {
 		struct dahdi_chan	*cur_chan = XPD_CHAN(xpd, i);

Modified: linux/trunk/drivers/dahdi/xpp/card_pri.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/drivers/dahdi/xpp/card_pri.c?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/drivers/dahdi/xpp/card_pri.c (original)
+++ linux/trunk/drivers/dahdi/xpp/card_pri.c Mon Jun 29 15:56:07 2009
@@ -1017,6 +1017,7 @@
 		/* Nothing to do yet */
 		return 0;
 	}
+	xpd->span.owner = THIS_MODULE;
 	xpd->span.spantype = pri_protocol_name(priv->pri_protocol);
 	xpd->span.linecompat = pri_linecompat(priv->pri_protocol);
 	xpd->span.deflaw = priv->deflaw;

Modified: linux/trunk/drivers/dahdi/xpp/xpp_dahdi.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/drivers/dahdi/xpp/xpp_dahdi.c?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/drivers/dahdi/xpp/xpp_dahdi.c (original)
+++ linux/trunk/drivers/dahdi/xpp/xpp_dahdi.c Mon Jun 29 15:56:07 2009
@@ -1056,6 +1056,8 @@
 	const xops_t	*xops;
 
 	BUG_ON(!xpd);
+	WARN_ON(!xpd->span.owner);
+
 	xops = xpd->xops;
 	xbus = xpd->xbus;
 

Modified: linux/trunk/include/dahdi/kernel.h
URL: http://svn.asterisk.org/svn-view/dahdi/linux/trunk/include/dahdi/kernel.h?view=diff&rev=6794&r1=6793&r2=6794
==============================================================================
--- linux/trunk/include/dahdi/kernel.h (original)
+++ linux/trunk/include/dahdi/kernel.h Mon Jun 29 15:56:07 2009
@@ -734,6 +734,7 @@
 
 struct dahdi_span {
 	spinlock_t lock;
+	struct module *owner;		/*!< Which module is exporting this span. */
 	void *pvt;			/*!< Private stuff */
 	char name[40];			/*!< Span name */
 	char desc[80];			/*!< Span description */




More information about the svn-commits mailing list