修正为使用信号量.

Signed-off-by: chen.yang <chen.yang@yuzhen-iot.com>
This commit is contained in:
chen.yang 2022-04-16 13:48:42 +08:00
parent cf1b8765bc
commit 7748d464d4
1 changed files with 8 additions and 8 deletions

View File

@ -340,7 +340,7 @@ struct demo_dev
{
struct cdev cdev;
struct device *dev;
rwlock_t demo_rwlock;
struct rw_semaphore demo_rwsemp;
// This is a test.
char demo_text[DEMO_DATA_SIZE];
};
@ -351,7 +351,7 @@ static ssize_t demo_read(struct file *filp, char __user *buffer, size_t count, l
loff_t p;
ssize_t ret = 0;
read_lock(&devp->demo_rwlock);
down_read(&devp->demo_rwsemp);
p = *position;
// This is a test.
@ -362,13 +362,13 @@ static ssize_t demo_read(struct file *filp, char __user *buffer, size_t count, l
count = DEMO_DATA_SIZE-p;
if(copy_to_user((void*)buffer, &devp->demo_text[p], count)) {
read_unlock(&devp->demo_rwlock);
up_read(&devp->demo_rwsemp);
ret = -EFAULT;
}
else
{
*position += count;
read_unlock(&devp->demo_rwlock);
up_read(&devp->demo_rwsemp);
ret = count;
}
return ret;
@ -380,7 +380,7 @@ static ssize_t demo_write(struct file *filp, const char __user *buffer, size_t c
loff_t p;
ssize_t ret = 0;
write_lock(&devp->demo_rwlock);
down_write(&devp->demo_rwsemp);
p = *position;
// This is a test.
// 分析和获取有效的写长度
@ -390,12 +390,12 @@ static ssize_t demo_write(struct file *filp, const char __user *buffer, size_t c
count = DEMO_DATA_SIZE-p;
if(copy_from_user(&devp->demo_text[p], (void*)buffer, count)) {
write_unlock(&devp->demo_rwlock);
up_write(&devp->demo_rwsemp);
ret = -EFAULT;
}
else {
*position += count;
write_unlock(&devp->demo_rwlock);
up_write(&devp->demo_rwsemp);
ret = count;
}
@ -426,7 +426,7 @@ static int demo_setup_cdev(struct demo_dev *devp, int index)
devp->demo_text[DEMO_DATA_SIZE-1] = 0;
sprintf(devp->demo_text, "%d", index);
rwlock_init(&devp->demo_rwlock);
init_rwsem(&devp->demo_rwsemp);
return 0;
out_cdev:
cdev_del(&devp->cdev);