From 82b3ce0bcc6989744a42c4991f54ef577ceb941f Mon Sep 17 00:00:00 2001 From: Huang Yiwei Date: Fri, 25 Dec 2020 18:07:37 +0800 Subject: [PATCH] ANDROID: rwsem: Export rwsem_waiter struct for loadable modules The rwsem_waiter struct is needed in vendor hook alter_rwsem_list_add. It has parameter sem which is a struct rw_semaphore (already export in rwsem.h), inside the structure there is a wait_list to link "struct rwsem_waiter" items. The task information in each item of the wait_list is needed to be referenced in vendor loadable modules. Bug: 174902706 Change-Id: Ic7d21ffdd795eaa203989751d26f8b1f32134d8b Signed-off-by: Huang Yiwei Signed-off-by: Vamsi Krishna Lanka --- include/linux/rwsem.h | 16 ++++++++++++++++ kernel/locking/rwsem.c | 14 -------------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h index 352c6127cb90..900ed1bf0d8b 100644 --- a/include/linux/rwsem.h +++ b/include/linux/rwsem.h @@ -66,6 +66,22 @@ struct rw_semaphore { #endif }; +enum rwsem_waiter_type { + RWSEM_WAITING_FOR_WRITE, + RWSEM_WAITING_FOR_READ +}; + +struct rwsem_waiter { + struct list_head list; + struct task_struct *task; + enum rwsem_waiter_type type; + unsigned long timeout; + unsigned long last_rowner; + + /* Writer only, not initialized in reader */ + bool handoff_set; +}; + /* In all implementations count != 0 means locked */ static inline int rwsem_is_locked(struct rw_semaphore *sem) { diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c index e63f740c2cc8..80b90293456b 100644 --- a/kernel/locking/rwsem.c +++ b/kernel/locking/rwsem.c @@ -325,20 +325,6 @@ void __init_rwsem(struct rw_semaphore *sem, const char *name, } EXPORT_SYMBOL(__init_rwsem); -enum rwsem_waiter_type { - RWSEM_WAITING_FOR_WRITE, - RWSEM_WAITING_FOR_READ -}; - -struct rwsem_waiter { - struct list_head list; - struct task_struct *task; - enum rwsem_waiter_type type; - unsigned long timeout; - - /* Writer only, not initialized in reader */ - bool handoff_set; -}; #define rwsem_first_waiter(sem) \ list_first_entry(&sem->wait_list, struct rwsem_waiter, list)