staging: vchiq_arm: rework close/remove_service IOCTLS
The implementation of both IOCTLS was the same except for one function call. This joins both implementations and updates the code to avoid unneeded indentations. Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de> Acked-by: Stefan Wahren <stefan.wahren@i2se.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
49fa9157a4
commit
ddd7536ad4
@ -1019,55 +1019,37 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
}
|
||||
} break;
|
||||
|
||||
case VCHIQ_IOC_CLOSE_SERVICE: {
|
||||
VCHIQ_SERVICE_HANDLE_T handle = (VCHIQ_SERVICE_HANDLE_T)arg;
|
||||
|
||||
service = find_service_for_instance(instance, handle);
|
||||
if (service != NULL) {
|
||||
USER_SERVICE_T *user_service =
|
||||
(USER_SERVICE_T *)service->base.userdata;
|
||||
/* close_pending is false on first entry, and when the
|
||||
wait in vchiq_close_service has been interrupted. */
|
||||
if (!user_service->close_pending) {
|
||||
status = vchiq_close_service(service->handle);
|
||||
if (status != VCHIQ_SUCCESS)
|
||||
break;
|
||||
}
|
||||
|
||||
/* close_pending is true once the underlying service
|
||||
has been closed until the client library calls the
|
||||
CLOSE_DELIVERED ioctl, signalling close_event. */
|
||||
if (user_service->close_pending &&
|
||||
down_interruptible(&user_service->close_event))
|
||||
status = VCHIQ_RETRY;
|
||||
} else
|
||||
ret = -EINVAL;
|
||||
} break;
|
||||
|
||||
case VCHIQ_IOC_CLOSE_SERVICE:
|
||||
case VCHIQ_IOC_REMOVE_SERVICE: {
|
||||
VCHIQ_SERVICE_HANDLE_T handle = (VCHIQ_SERVICE_HANDLE_T)arg;
|
||||
USER_SERVICE_T *user_service;
|
||||
|
||||
service = find_service_for_instance(instance, handle);
|
||||
if (service != NULL) {
|
||||
USER_SERVICE_T *user_service =
|
||||
(USER_SERVICE_T *)service->base.userdata;
|
||||
/* close_pending is false on first entry, and when the
|
||||
wait in vchiq_close_service has been interrupted. */
|
||||
if (!user_service->close_pending) {
|
||||
status = vchiq_remove_service(service->handle);
|
||||
if (status != VCHIQ_SUCCESS)
|
||||
break;
|
||||
}
|
||||
|
||||
/* close_pending is true once the underlying service
|
||||
has been closed until the client library calls the
|
||||
CLOSE_DELIVERED ioctl, signalling close_event. */
|
||||
if (user_service->close_pending &&
|
||||
down_interruptible(&user_service->close_event))
|
||||
status = VCHIQ_RETRY;
|
||||
} else
|
||||
if (!service) {
|
||||
ret = -EINVAL;
|
||||
} break;
|
||||
break;
|
||||
}
|
||||
|
||||
user_service = service->base.userdata;
|
||||
|
||||
/* close_pending is false on first entry, and when the
|
||||
wait in vchiq_close_service has been interrupted. */
|
||||
if (!user_service->close_pending) {
|
||||
status = (cmd == VCHIQ_IOC_CLOSE_SERVICE) ?
|
||||
vchiq_close_service(service->handle) :
|
||||
vchiq_remove_service(service->handle);
|
||||
if (status != VCHIQ_SUCCESS)
|
||||
break;
|
||||
}
|
||||
|
||||
/* close_pending is true once the underlying service
|
||||
has been closed until the client library calls the
|
||||
CLOSE_DELIVERED ioctl, signalling close_event. */
|
||||
if (user_service->close_pending &&
|
||||
down_interruptible(&user_service->close_event))
|
||||
status = VCHIQ_RETRY;
|
||||
break;
|
||||
}
|
||||
|
||||
case VCHIQ_IOC_USE_SERVICE:
|
||||
case VCHIQ_IOC_RELEASE_SERVICE: {
|
||||
|
Loading…
x
Reference in New Issue
Block a user