MIPS: Sibyte: Get rid of BKL.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
@@ -403,36 +403,31 @@ static int sbprof_zbprof_stop(void)
|
|||||||
static int sbprof_tb_open(struct inode *inode, struct file *filp)
|
static int sbprof_tb_open(struct inode *inode, struct file *filp)
|
||||||
{
|
{
|
||||||
int minor;
|
int minor;
|
||||||
int err = 0;
|
|
||||||
|
|
||||||
lock_kernel();
|
|
||||||
minor = iminor(inode);
|
minor = iminor(inode);
|
||||||
if (minor != 0) {
|
if (minor != 0)
|
||||||
err = -ENODEV;
|
return -ENODEV;
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (xchg(&sbp.open, SB_OPENING) != SB_CLOSED) {
|
if (xchg(&sbp.open, SB_OPENING) != SB_CLOSED)
|
||||||
err = -EBUSY;
|
return -EBUSY;
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(&sbp, 0, sizeof(struct sbprof_tb));
|
memset(&sbp, 0, sizeof(struct sbprof_tb));
|
||||||
sbp.sbprof_tbbuf = vmalloc(MAX_TBSAMPLE_BYTES);
|
sbp.sbprof_tbbuf = vmalloc(MAX_TBSAMPLE_BYTES);
|
||||||
if (!sbp.sbprof_tbbuf) {
|
if (!sbp.sbprof_tbbuf) {
|
||||||
err = -ENOMEM;
|
sbp.open = SB_CLOSED;
|
||||||
goto out;
|
wmb();
|
||||||
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(sbp.sbprof_tbbuf, 0, MAX_TBSAMPLE_BYTES);
|
memset(sbp.sbprof_tbbuf, 0, MAX_TBSAMPLE_BYTES);
|
||||||
init_waitqueue_head(&sbp.tb_sync);
|
init_waitqueue_head(&sbp.tb_sync);
|
||||||
init_waitqueue_head(&sbp.tb_read);
|
init_waitqueue_head(&sbp.tb_read);
|
||||||
mutex_init(&sbp.lock);
|
mutex_init(&sbp.lock);
|
||||||
|
|
||||||
sbp.open = SB_OPEN;
|
sbp.open = SB_OPEN;
|
||||||
|
wmb();
|
||||||
|
|
||||||
out:
|
return 0;
|
||||||
unlock_kernel();
|
|
||||||
return err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sbprof_tb_release(struct inode *inode, struct file *filp)
|
static int sbprof_tb_release(struct inode *inode, struct file *filp)
|
||||||
@@ -440,7 +435,7 @@ static int sbprof_tb_release(struct inode *inode, struct file *filp)
|
|||||||
int minor;
|
int minor;
|
||||||
|
|
||||||
minor = iminor(inode);
|
minor = iminor(inode);
|
||||||
if (minor != 0 || !sbp.open)
|
if (minor != 0 || sbp.open != SB_CLOSED)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
mutex_lock(&sbp.lock);
|
mutex_lock(&sbp.lock);
|
||||||
@@ -449,7 +444,8 @@ static int sbprof_tb_release(struct inode *inode, struct file *filp)
|
|||||||
sbprof_zbprof_stop();
|
sbprof_zbprof_stop();
|
||||||
|
|
||||||
vfree(sbp.sbprof_tbbuf);
|
vfree(sbp.sbprof_tbbuf);
|
||||||
sbp.open = 0;
|
sbp.open = SB_CLOSED;
|
||||||
|
wmb();
|
||||||
|
|
||||||
mutex_unlock(&sbp.lock);
|
mutex_unlock(&sbp.lock);
|
||||||
|
|
||||||
@@ -583,7 +579,8 @@ static int __init sbprof_tb_init(void)
|
|||||||
}
|
}
|
||||||
tb_dev = dev;
|
tb_dev = dev;
|
||||||
|
|
||||||
sbp.open = 0;
|
sbp.open = SB_CLOSED;
|
||||||
|
wmb();
|
||||||
tb_period = zbbus_mhz * 10000LL;
|
tb_period = zbbus_mhz * 10000LL;
|
||||||
pr_info(DEVNAME ": initialized - tb_period = %lld\n",
|
pr_info(DEVNAME ": initialized - tb_period = %lld\n",
|
||||||
(long long) tb_period);
|
(long long) tb_period);
|
||||||
|
Reference in New Issue
Block a user