aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/ethosu_device.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/kernel/ethosu_device.c b/kernel/ethosu_device.c
index b63d068..6866857 100644
--- a/kernel/ethosu_device.c
+++ b/kernel/ethosu_device.c
@@ -244,10 +244,6 @@ static long ethosu_ioctl(struct file *file,
void __user *udata = (void __user *)arg;
int ret;
- ret = device_lock_interruptible(dev);
- if (ret)
- return ret;
-
dev_info(dev, "Device ioctl. file=0x%pK, cmd=0x%x, arg=0x%lx",
file, cmd, arg);
@@ -271,8 +267,16 @@ static long ethosu_ioctl(struct file *file,
break;
}
case ETHOSU_IOCTL_PING: {
+ ret = device_lock_interruptible(dev);
+ if (ret)
+ return ret;
+
dev_info(dev, "Device ioctl: Send ping");
+
ret = ethosu_mailbox_ping(&edev->mailbox);
+
+ device_unlock(dev);
+
break;
}
case ETHOSU_IOCTL_BUFFER_CREATE: {
@@ -283,11 +287,18 @@ static long ethosu_ioctl(struct file *file,
break;
}
+ ret = device_lock_interruptible(dev);
+ if (ret)
+ return ret;
+
dev_info(dev,
"Device ioctl: Buffer create. capacity=%u",
uapi.capacity);
ret = ethosu_buffer_create(dev, uapi.capacity);
+
+ device_unlock(dev);
+
break;
}
case ETHOSU_IOCTL_NETWORK_CREATE: {
@@ -298,11 +309,18 @@ static long ethosu_ioctl(struct file *file,
break;
}
+ ret = device_lock_interruptible(dev);
+ if (ret)
+ return ret;
+
dev_info(dev,
"Device ioctl: Network create. type=%u, fd/index=%u",
uapi.type, uapi.fd);
ret = ethosu_network_create(dev, &edev->mailbox, &uapi);
+
+ device_unlock(dev);
+
break;
}
default: {
@@ -313,8 +331,6 @@ static long ethosu_ioctl(struct file *file,
}
}
- device_unlock(dev);
-
return ret;
}