base: genlock: Remove genlock_release_lock and associated ioctl
Allowing a lock to be asynchronously released while a handle was still active turned out to be too dangerous to use in a multi-threaded environment and it served no pratical purpose anyway. Handles now hold an attached lock until they are destroyed. CRs-fixed: 333141 Change-Id: Ic0dedbad8050ff01927ddb165c65a939bf297c10 Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
This commit is contained in:
@@ -82,15 +82,13 @@ descriptor.
|
||||
Release a handle.
|
||||
|
||||
* struct genlock * genlock_create_lock(struct genlock_handle *)
|
||||
Create a new lock and attach it to the handle.
|
||||
Create a new lock and attach it to the handle. Once a lock is attached to a
|
||||
handle it stays attached until the handle is destroyed.
|
||||
|
||||
* struct genlock * genlock_attach_lock(struct genlock_handle *handle, int fd)
|
||||
Given a valid file descriptor, get the lock associated with it and attach it to
|
||||
the handle.
|
||||
|
||||
* void genlock_release_lock(struct genlock_handle *)
|
||||
Release a lock attached to a handle.
|
||||
|
||||
* int genlock_lock(struct genlock_handle *, int op, int flags, u32 timeout)
|
||||
Lock or unlock the lock attached to the handle. A zero timeout value will
|
||||
be treated just like if the GENOCK_NOBLOCK flag is passed; if the lock
|
||||
@@ -155,7 +153,4 @@ passed in genlock_lock.timeout. Returns 0 when the lock has been released,
|
||||
-EINVAL if a zero timeout is passed, or -ETIMEDOUT if the timeout expires.
|
||||
|
||||
* GENLOCK_IOC_RELEASE
|
||||
Use this to release an existing lock. This is useful if you wish to attach a
|
||||
different lock to the same handle. You do not need to call this under normal
|
||||
circumstances; when the handle is closed the reference to the lock is released.
|
||||
No data is passed from the user for this ioctl.
|
||||
This ioctl has been deprecated. Do not use.
|
||||
|
||||
@@ -496,12 +496,7 @@ done:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* genlock_release_lock - Release a lock attached to a handle
|
||||
* @handle - Pointer to the handle holding the lock
|
||||
*/
|
||||
|
||||
void genlock_release_lock(struct genlock_handle *handle)
|
||||
static void genlock_release_lock(struct genlock_handle *handle)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
@@ -522,7 +517,6 @@ void genlock_release_lock(struct genlock_handle *handle)
|
||||
handle->lock = NULL;
|
||||
handle->active = 0;
|
||||
}
|
||||
EXPORT_SYMBOL(genlock_release_lock);
|
||||
|
||||
/*
|
||||
* Release function called when all references to a handle are released
|
||||
@@ -671,8 +665,13 @@ static long genlock_dev_ioctl(struct file *filep, unsigned int cmd,
|
||||
return genlock_wait(handle, param.timeout);
|
||||
}
|
||||
case GENLOCK_IOC_RELEASE: {
|
||||
genlock_release_lock(handle);
|
||||
return 0;
|
||||
/*
|
||||
* Return error - this ioctl has been deprecated.
|
||||
* Locks should only be released when the handle is
|
||||
* destroyed
|
||||
*/
|
||||
GENLOCK_LOG_ERR("Deprecated RELEASE ioctl called\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
default:
|
||||
GENLOCK_LOG_ERR("Invalid ioctl\n");
|
||||
|
||||
@@ -12,7 +12,7 @@ void genlock_put_handle(struct genlock_handle *handle);
|
||||
struct genlock *genlock_create_lock(struct genlock_handle *);
|
||||
struct genlock *genlock_attach_lock(struct genlock_handle *, int fd);
|
||||
int genlock_wait(struct genlock_handle *handle, u32 timeout);
|
||||
void genlock_release_lock(struct genlock_handle *);
|
||||
/* genlock_release_lock was deprecated */
|
||||
int genlock_lock(struct genlock_handle *handle, int op, int flags,
|
||||
u32 timeout);
|
||||
#endif
|
||||
@@ -39,6 +39,8 @@ struct genlock_lock {
|
||||
struct genlock_lock)
|
||||
#define GENLOCK_IOC_LOCK _IOW(GENLOCK_IOC_MAGIC, 3, \
|
||||
struct genlock_lock)
|
||||
|
||||
/* Deprecated */
|
||||
#define GENLOCK_IOC_RELEASE _IO(GENLOCK_IOC_MAGIC, 4)
|
||||
#define GENLOCK_IOC_WAIT _IOW(GENLOCK_IOC_MAGIC, 5, \
|
||||
struct genlock_lock)
|
||||
|
||||
Reference in New Issue
Block a user