mirror of
https://github.com/LineageOS/android_kernel_fxtec_sm6115.git
synced 2026-08-18 10:51:49 +00:00
Merge remote-tracking branch 'sm8250/lineage-20' into HEAD
* sm8250/lineage-20: BACKPORT: locking/rtmutex: Skip remove_waiter() when waiter is not enqueued BACKPORT: rtmutex: Use waiter::task instead of current in remove_waiter() tcp: fix an incorrect __user annotation on tcp_use_userconfig_sysctl_handler tcp: fix an incorrect __user annotation on tcp_proc_delayed_ack_control Change-Id: Ic92b58344a6f9c42bd28322256bc13298c6f256d
This commit is contained in:
@ -360,10 +360,10 @@ ssize_t tcp_splice_read(struct socket *sk, loff_t *ppos,
|
||||
|
||||
/* sysctl master controller */
|
||||
extern int tcp_use_userconfig_sysctl_handler(struct ctl_table *table,
|
||||
int write, void __user *buffer, size_t *length,
|
||||
int write, void *buffer, size_t *length,
|
||||
loff_t *ppos);
|
||||
extern int tcp_proc_delayed_ack_control(struct ctl_table *table, int write,
|
||||
void __user *buffer, size_t *length,
|
||||
void *buffer, size_t *length,
|
||||
loff_t *ppos);
|
||||
|
||||
static inline void tcp_dec_quickack_mode(struct sock *sk)
|
||||
|
||||
@ -1062,20 +1062,26 @@ static void mark_wakeup_next_waiter(struct wake_q_head *wake_q,
|
||||
*
|
||||
* Must be called with lock->wait_lock held and interrupts disabled. I must
|
||||
* have just failed to try_to_take_rt_mutex().
|
||||
*
|
||||
* When invoked from rt_mutex_start_proxy_lock() waiter::task != current !
|
||||
*/
|
||||
static void remove_waiter(struct rt_mutex *lock,
|
||||
struct rt_mutex_waiter *waiter)
|
||||
{
|
||||
bool is_top_waiter = (waiter == rt_mutex_top_waiter(lock));
|
||||
struct task_struct *owner = rt_mutex_owner(lock);
|
||||
struct task_struct *waiter_task = waiter->task;
|
||||
struct rt_mutex *next_lock;
|
||||
|
||||
lockdep_assert_held(&lock->wait_lock);
|
||||
|
||||
raw_spin_lock(¤t->pi_lock);
|
||||
if (!waiter_task) /* never enqueued */
|
||||
return;
|
||||
|
||||
raw_spin_lock(&waiter_task->pi_lock);
|
||||
rt_mutex_dequeue(lock, waiter);
|
||||
current->pi_blocked_on = NULL;
|
||||
raw_spin_unlock(¤t->pi_lock);
|
||||
waiter_task->pi_blocked_on = NULL;
|
||||
raw_spin_unlock(&waiter_task->pi_lock);
|
||||
|
||||
/*
|
||||
* Only update priority if the waiter was the highest priority
|
||||
@ -1111,7 +1117,7 @@ static void remove_waiter(struct rt_mutex *lock,
|
||||
raw_spin_unlock_irq(&lock->wait_lock);
|
||||
|
||||
rt_mutex_adjust_prio_chain(owner, RT_MUTEX_MIN_CHAINWALK, lock,
|
||||
next_lock, NULL, current);
|
||||
next_lock, NULL, waiter_task);
|
||||
|
||||
raw_spin_lock_irq(&lock->wait_lock);
|
||||
}
|
||||
@ -1801,7 +1807,7 @@ int rt_mutex_start_proxy_lock(struct rt_mutex *lock,
|
||||
|
||||
raw_spin_lock_irq(&lock->wait_lock);
|
||||
ret = __rt_mutex_start_proxy_lock(lock, waiter, task);
|
||||
if (unlikely(ret))
|
||||
if (unlikely(ret < 0))
|
||||
remove_waiter(lock, waiter);
|
||||
raw_spin_unlock_irq(&lock->wait_lock);
|
||||
|
||||
|
||||
@ -46,7 +46,7 @@ static void set_tcp_default(void)
|
||||
|
||||
/*sysctl handler for tcp_ack realted master control */
|
||||
int tcp_proc_delayed_ack_control(struct ctl_table *table, int write,
|
||||
void __user *buffer, size_t *length,
|
||||
void *buffer, size_t *length,
|
||||
loff_t *ppos)
|
||||
{
|
||||
int ret = proc_dointvec_minmax(table, write, buffer, length, ppos);
|
||||
@ -60,7 +60,7 @@ int tcp_proc_delayed_ack_control(struct ctl_table *table, int write,
|
||||
|
||||
/*sysctl handler for tcp_ack realted master control */
|
||||
int tcp_use_userconfig_sysctl_handler(struct ctl_table *table, int write,
|
||||
void __user *buffer, size_t *length,
|
||||
void *buffer, size_t *length,
|
||||
loff_t *ppos)
|
||||
{
|
||||
int ret = proc_dointvec_minmax(table, write, buffer, length, ppos);
|
||||
|
||||
Reference in New Issue
Block a user