mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-11 13:27:06 +09:00
Merge tag 'v4.9.165' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidg12-4.9.y
This is the 4.9.165 stable release
This commit is contained in:
@@ -1718,15 +1718,23 @@ static int rcu_future_gp_cleanup(struct rcu_state *rsp, struct rcu_node *rnp)
|
||||
}
|
||||
|
||||
/*
|
||||
* Awaken the grace-period kthread for the specified flavor of RCU.
|
||||
* Don't do a self-awaken, and don't bother awakening when there is
|
||||
* nothing for the grace-period kthread to do (as in several CPUs
|
||||
* raced to awaken, and we lost), and finally don't try to awaken
|
||||
* a kthread that has not yet been created.
|
||||
* Awaken the grace-period kthread. Don't do a self-awaken (unless in
|
||||
* an interrupt or softirq handler), and don't bother awakening when there
|
||||
* is nothing for the grace-period kthread to do (as in several CPUs raced
|
||||
* to awaken, and we lost), and finally don't try to awaken a kthread that
|
||||
* has not yet been created. If all those checks are passed, track some
|
||||
* debug information and awaken.
|
||||
*
|
||||
* So why do the self-wakeup when in an interrupt or softirq handler
|
||||
* in the grace-period kthread's context? Because the kthread might have
|
||||
* been interrupted just as it was going to sleep, and just after the final
|
||||
* pre-sleep check of the awaken condition. In this case, a wakeup really
|
||||
* is required, and is therefore supplied.
|
||||
*/
|
||||
static void rcu_gp_kthread_wake(struct rcu_state *rsp)
|
||||
{
|
||||
if (current == rsp->gp_kthread ||
|
||||
if ((current == rsp->gp_kthread &&
|
||||
!in_interrupt() && !in_serving_softirq()) ||
|
||||
!READ_ONCE(rsp->gp_flags) ||
|
||||
!rsp->gp_kthread)
|
||||
return;
|
||||
|
||||
@@ -2445,7 +2445,16 @@ static int do_proc_dointvec_minmax_conv(bool *negp, unsigned long *lvalp,
|
||||
{
|
||||
struct do_proc_dointvec_minmax_conv_param *param = data;
|
||||
if (write) {
|
||||
int val = *negp ? -*lvalp : *lvalp;
|
||||
int val;
|
||||
if (*negp) {
|
||||
if (*lvalp > (unsigned long) INT_MAX + 1)
|
||||
return -EINVAL;
|
||||
val = -*lvalp;
|
||||
} else {
|
||||
if (*lvalp > (unsigned long) INT_MAX)
|
||||
return -EINVAL;
|
||||
val = *lvalp;
|
||||
}
|
||||
if ((param->min && *param->min > val) ||
|
||||
(param->max && *param->max < val))
|
||||
return -EINVAL;
|
||||
|
||||
@@ -5147,7 +5147,6 @@ out:
|
||||
return ret;
|
||||
|
||||
fail:
|
||||
kfree(iter->trace);
|
||||
kfree(iter);
|
||||
__trace_array_put(tr);
|
||||
mutex_unlock(&trace_types_lock);
|
||||
|
||||
@@ -871,9 +871,10 @@ static inline void add_to_key(char *compound_key, void *key,
|
||||
/* ensure NULL-termination */
|
||||
if (size > key_field->size - 1)
|
||||
size = key_field->size - 1;
|
||||
}
|
||||
|
||||
memcpy(compound_key + key_field->offset, key, size);
|
||||
strncpy(compound_key + key_field->offset, (char *)key, size);
|
||||
} else
|
||||
memcpy(compound_key + key_field->offset, key, size);
|
||||
}
|
||||
|
||||
static void event_hist_trigger(struct event_trigger_data *data, void *rec)
|
||||
|
||||
Reference in New Issue
Block a user