mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-20 08:44:33 +00:00
Remove global device lock acquisition from dev_relthread(), replacing it
with atomics on per-device data.
This commit is contained in:
parent
1a29adad30
commit
9e8bd2acf2
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=256885
|
@ -193,7 +193,7 @@ dev_refthread(struct cdev *dev, int *ref)
|
|||
if (csw != NULL) {
|
||||
cdp = cdev2priv(dev);
|
||||
if ((cdp->cdp_flags & CDP_SCHED_DTR) == 0)
|
||||
dev->si_threadcount++;
|
||||
atomic_add_long(&dev->si_threadcount, 1);
|
||||
else
|
||||
csw = NULL;
|
||||
}
|
||||
|
@ -234,7 +234,7 @@ devvn_refthread(struct vnode *vp, struct cdev **devp, int *ref)
|
|||
if ((cdp->cdp_flags & CDP_SCHED_DTR) == 0) {
|
||||
csw = dev->si_devsw;
|
||||
if (csw != NULL)
|
||||
dev->si_threadcount++;
|
||||
atomic_add_long(&dev->si_threadcount, 1);
|
||||
}
|
||||
dev_unlock();
|
||||
if (csw != NULL) {
|
||||
|
@ -251,11 +251,9 @@ dev_relthread(struct cdev *dev, int ref)
|
|||
mtx_assert(&devmtx, MA_NOTOWNED);
|
||||
if (!ref)
|
||||
return;
|
||||
dev_lock();
|
||||
KASSERT(dev->si_threadcount > 0,
|
||||
("%s threadcount is wrong", dev->si_name));
|
||||
dev->si_threadcount--;
|
||||
dev_unlock();
|
||||
atomic_subtract_rel_long(&dev->si_threadcount, 1);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
Loading…
Reference in a new issue