summaryrefslogtreecommitdiff
path: root/drivers/dahdi/xpp/xpp_dahdi.c
diff options
context:
space:
mode:
authorTzafrir Cohen <tzafrir.cohen@xorcom.com>2010-07-13 08:44:36 +0000
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>2010-07-13 08:44:36 +0000
commit330259c92d09fba56efca9d5be4cd2b237645725 (patch)
treefa94a11bc75abf2b9ce026a6e3d2f4bbc48f2569 /drivers/dahdi/xpp/xpp_dahdi.c
parent5b506aee19dd5e0e7cbfb10451c05ebf2bcb9739 (diff)
Cleanup: refcount_xpd()
* Change refcount_xpd(): instead of returning a pointer to the atomic counter, return directly its value (just like refcount_xbus()) * Add a refcount_xbus and refcount_xpd attributes to sysfs (for debugging) git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@8878 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers/dahdi/xpp/xpp_dahdi.c')
-rw-r--r--drivers/dahdi/xpp/xpp_dahdi.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/dahdi/xpp/xpp_dahdi.c b/drivers/dahdi/xpp/xpp_dahdi.c
index 3e4b9b2..26fa223 100644
--- a/drivers/dahdi/xpp/xpp_dahdi.c
+++ b/drivers/dahdi/xpp/xpp_dahdi.c
@@ -122,11 +122,11 @@ static int proc_xpd_blink_write(struct file *file, const char __user *buffer, un
/*------------------------- XPD Management -------------------------*/
-static atomic_t *refcount_xpd(xpd_t *xpd)
+int refcount_xpd(xpd_t *xpd)
{
struct kref *kref = &xpd->xpd_dev.kobj.kref;
- return &kref->refcount;
+ return atomic_read(&kref->refcount);
}
xpd_t *get_xpd(const char *msg, xpd_t *xpd)
@@ -134,15 +134,17 @@ xpd_t *get_xpd(const char *msg, xpd_t *xpd)
struct device *dev;
XPD_DBG(DEVICES, xpd, "%s: refcount_xpd=%d\n",
- msg, atomic_read(refcount_xpd(xpd)));
+ msg, refcount_xpd(xpd));
dev = get_device(&xpd->xpd_dev);
+ if (!dev)
+ return NULL;
return dev_to_xpd(dev);
}
void put_xpd(const char *msg, xpd_t *xpd)
{
XPD_DBG(DEVICES, xpd, "%s: refcount_xpd=%d\n",
- msg, atomic_read(refcount_xpd(xpd)));
+ msg, refcount_xpd(xpd));
put_device(&xpd->xpd_dev);
}
@@ -331,7 +333,7 @@ static int xpd_read_proc(char *page, char **start, off_t off, int count, int *eo
len += sprintf(page + len, "xpd_state: %s (%d)\n",
xpd_statename(xpd->xpd_state), xpd->xpd_state);
len += sprintf(page + len, "open_counter=%d refcount=%d\n",
- atomic_read(&xpd->open_counter), atomic_read(refcount_xpd(xpd)));
+ atomic_read(&xpd->open_counter), refcount_xpd(xpd));
len += sprintf(page + len, "Address: U=%d S=%d\n", xpd->addr.unit, xpd->addr.subunit);
len += sprintf(page + len, "Subunits: %d\n", xpd->subunits);
len += sprintf(page + len, "Type: %d.%d\n\n", xpd->type, xpd->subtype);