Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
drivers/ptp/Kconfig:55c8fca1da("ptp_pch: Restore dependency on PCI")e5f3155267("ethernet: fix PTP_1588_CLOCK dependencies") Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
+16
-6
@@ -363,9 +363,15 @@ const struct bpf_func_proto bpf_jiffies64_proto = {
|
||||
#ifdef CONFIG_CGROUPS
|
||||
BPF_CALL_0(bpf_get_current_cgroup_id)
|
||||
{
|
||||
struct cgroup *cgrp = task_dfl_cgroup(current);
|
||||
struct cgroup *cgrp;
|
||||
u64 cgrp_id;
|
||||
|
||||
return cgroup_id(cgrp);
|
||||
rcu_read_lock();
|
||||
cgrp = task_dfl_cgroup(current);
|
||||
cgrp_id = cgroup_id(cgrp);
|
||||
rcu_read_unlock();
|
||||
|
||||
return cgrp_id;
|
||||
}
|
||||
|
||||
const struct bpf_func_proto bpf_get_current_cgroup_id_proto = {
|
||||
@@ -376,13 +382,17 @@ const struct bpf_func_proto bpf_get_current_cgroup_id_proto = {
|
||||
|
||||
BPF_CALL_1(bpf_get_current_ancestor_cgroup_id, int, ancestor_level)
|
||||
{
|
||||
struct cgroup *cgrp = task_dfl_cgroup(current);
|
||||
struct cgroup *cgrp;
|
||||
struct cgroup *ancestor;
|
||||
u64 cgrp_id;
|
||||
|
||||
rcu_read_lock();
|
||||
cgrp = task_dfl_cgroup(current);
|
||||
ancestor = cgroup_ancestor(cgrp, ancestor_level);
|
||||
if (!ancestor)
|
||||
return 0;
|
||||
return cgroup_id(ancestor);
|
||||
cgrp_id = ancestor ? cgroup_id(ancestor) : 0;
|
||||
rcu_read_unlock();
|
||||
|
||||
return cgrp_id;
|
||||
}
|
||||
|
||||
const struct bpf_func_proto bpf_get_current_ancestor_cgroup_id_proto = {
|
||||
|
||||
@@ -11955,6 +11955,7 @@ static void sanitize_dead_code(struct bpf_verifier_env *env)
|
||||
if (aux_data[i].seen)
|
||||
continue;
|
||||
memcpy(insn + i, &trap, sizeof(trap));
|
||||
aux_data[i].zext_dst = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -248,9 +248,9 @@ static inline cfi_check_fn find_shadow_check_fn(unsigned long ptr)
|
||||
{
|
||||
cfi_check_fn fn;
|
||||
|
||||
rcu_read_lock_sched();
|
||||
rcu_read_lock_sched_notrace();
|
||||
fn = ptr_to_check_fn(rcu_dereference_sched(cfi_shadow), ptr);
|
||||
rcu_read_unlock_sched();
|
||||
rcu_read_unlock_sched_notrace();
|
||||
|
||||
return fn;
|
||||
}
|
||||
@@ -269,11 +269,11 @@ static inline cfi_check_fn find_module_check_fn(unsigned long ptr)
|
||||
cfi_check_fn fn = NULL;
|
||||
struct module *mod;
|
||||
|
||||
rcu_read_lock_sched();
|
||||
rcu_read_lock_sched_notrace();
|
||||
mod = __module_address(ptr);
|
||||
if (mod)
|
||||
fn = mod->cfi_check;
|
||||
rcu_read_unlock_sched();
|
||||
rcu_read_unlock_sched_notrace();
|
||||
|
||||
return fn;
|
||||
}
|
||||
|
||||
+4
-1
@@ -265,8 +265,11 @@ int irq_startup(struct irq_desc *desc, bool resend, bool force)
|
||||
} else {
|
||||
switch (__irq_startup_managed(desc, aff, force)) {
|
||||
case IRQ_STARTUP_NORMAL:
|
||||
if (d->chip->flags & IRQCHIP_AFFINITY_PRE_STARTUP)
|
||||
irq_setup_affinity(desc);
|
||||
ret = __irq_startup(desc);
|
||||
irq_setup_affinity(desc);
|
||||
if (!(d->chip->flags & IRQCHIP_AFFINITY_PRE_STARTUP))
|
||||
irq_setup_affinity(desc);
|
||||
break;
|
||||
case IRQ_STARTUP_MANAGED:
|
||||
irq_do_set_affinity(d, aff, false);
|
||||
|
||||
+8
-5
@@ -476,11 +476,6 @@ skip_activate:
|
||||
return 0;
|
||||
|
||||
cleanup:
|
||||
for_each_msi_vector(desc, i, dev) {
|
||||
irq_data = irq_domain_get_irq_data(domain, i);
|
||||
if (irqd_is_activated(irq_data))
|
||||
irq_domain_deactivate_irq(irq_data);
|
||||
}
|
||||
msi_domain_free_irqs(domain, dev);
|
||||
return ret;
|
||||
}
|
||||
@@ -505,7 +500,15 @@ int msi_domain_alloc_irqs(struct irq_domain *domain, struct device *dev,
|
||||
|
||||
void __msi_domain_free_irqs(struct irq_domain *domain, struct device *dev)
|
||||
{
|
||||
struct irq_data *irq_data;
|
||||
struct msi_desc *desc;
|
||||
int i;
|
||||
|
||||
for_each_msi_vector(desc, i, dev) {
|
||||
irq_data = irq_domain_get_irq_data(domain, i);
|
||||
if (irqd_is_activated(irq_data))
|
||||
irq_domain_deactivate_irq(irq_data);
|
||||
}
|
||||
|
||||
for_each_msi_entry(desc, dev) {
|
||||
/*
|
||||
|
||||
@@ -453,6 +453,11 @@ static __always_inline void __irq_timings_store(int irq, struct irqt_stat *irqs,
|
||||
*/
|
||||
index = irq_timings_interval_index(interval);
|
||||
|
||||
if (index > PREDICTION_BUFFER_SIZE - 1) {
|
||||
irqs->count = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Store the index as an element of the pattern in another
|
||||
* circular array.
|
||||
|
||||
@@ -343,7 +343,7 @@ static __always_inline bool
|
||||
rt_mutex_cond_detect_deadlock(struct rt_mutex_waiter *waiter,
|
||||
enum rtmutex_chainwalk chwalk)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_DEBUG_RT_MUTEX))
|
||||
if (IS_ENABLED(CONFIG_DEBUG_RT_MUTEXES))
|
||||
return waiter != NULL;
|
||||
return chwalk == RT_MUTEX_FULL_CHAINWALK;
|
||||
}
|
||||
|
||||
@@ -219,6 +219,11 @@ config DYNAMIC_FTRACE_WITH_DIRECT_CALLS
|
||||
depends on DYNAMIC_FTRACE_WITH_REGS
|
||||
depends on HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
|
||||
|
||||
config DYNAMIC_FTRACE_WITH_ARGS
|
||||
def_bool y
|
||||
depends on DYNAMIC_FTRACE
|
||||
depends on HAVE_DYNAMIC_FTRACE_WITH_ARGS
|
||||
|
||||
config FUNCTION_PROFILER
|
||||
bool "Kernel function profiler"
|
||||
depends on FUNCTION_TRACER
|
||||
|
||||
+15
-3
@@ -2897,14 +2897,26 @@ int tracepoint_printk_sysctl(struct ctl_table *table, int write,
|
||||
|
||||
void trace_event_buffer_commit(struct trace_event_buffer *fbuffer)
|
||||
{
|
||||
enum event_trigger_type tt = ETT_NONE;
|
||||
struct trace_event_file *file = fbuffer->trace_file;
|
||||
|
||||
if (__event_trigger_test_discard(file, fbuffer->buffer, fbuffer->event,
|
||||
fbuffer->entry, &tt))
|
||||
goto discard;
|
||||
|
||||
if (static_key_false(&tracepoint_printk_key.key))
|
||||
output_printk(fbuffer);
|
||||
|
||||
if (static_branch_unlikely(&trace_event_exports_enabled))
|
||||
ftrace_exports(fbuffer->event, TRACE_EXPORT_EVENT);
|
||||
event_trigger_unlock_commit_regs(fbuffer->trace_file, fbuffer->buffer,
|
||||
fbuffer->event, fbuffer->entry,
|
||||
fbuffer->trace_ctx, fbuffer->regs);
|
||||
|
||||
trace_buffer_unlock_commit_regs(file->tr, fbuffer->buffer,
|
||||
fbuffer->event, fbuffer->trace_ctx, fbuffer->regs);
|
||||
|
||||
discard:
|
||||
if (tt)
|
||||
event_triggers_post_call(file, tt);
|
||||
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(trace_event_buffer_commit);
|
||||
|
||||
|
||||
@@ -1389,38 +1389,6 @@ event_trigger_unlock_commit(struct trace_event_file *file,
|
||||
event_triggers_post_call(file, tt);
|
||||
}
|
||||
|
||||
/**
|
||||
* event_trigger_unlock_commit_regs - handle triggers and finish event commit
|
||||
* @file: The file pointer associated with the event
|
||||
* @buffer: The ring buffer that the event is being written to
|
||||
* @event: The event meta data in the ring buffer
|
||||
* @entry: The event itself
|
||||
* @trace_ctx: The tracing context flags.
|
||||
*
|
||||
* This is a helper function to handle triggers that require data
|
||||
* from the event itself. It also tests the event against filters and
|
||||
* if the event is soft disabled and should be discarded.
|
||||
*
|
||||
* Same as event_trigger_unlock_commit() but calls
|
||||
* trace_buffer_unlock_commit_regs() instead of trace_buffer_unlock_commit().
|
||||
*/
|
||||
static inline void
|
||||
event_trigger_unlock_commit_regs(struct trace_event_file *file,
|
||||
struct trace_buffer *buffer,
|
||||
struct ring_buffer_event *event,
|
||||
void *entry, unsigned int trace_ctx,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
enum event_trigger_type tt = ETT_NONE;
|
||||
|
||||
if (!__event_trigger_test_discard(file, buffer, event, entry, &tt))
|
||||
trace_buffer_unlock_commit_regs(file->tr, buffer, event,
|
||||
trace_ctx, regs);
|
||||
|
||||
if (tt)
|
||||
event_triggers_post_call(file, tt);
|
||||
}
|
||||
|
||||
#define FILTER_PRED_INVALID ((unsigned short)-1)
|
||||
#define FILTER_PRED_IS_RIGHT (1 << 15)
|
||||
#define FILTER_PRED_FOLD (1 << 15)
|
||||
|
||||
@@ -3430,6 +3430,8 @@ trace_action_create_field_var(struct hist_trigger_data *hist_data,
|
||||
event = data->match_data.event;
|
||||
}
|
||||
|
||||
if (!event)
|
||||
goto free;
|
||||
/*
|
||||
* At this point, we're looking at a field on another
|
||||
* event. Because we can't modify a hist trigger on
|
||||
|
||||
@@ -253,10 +253,40 @@ static struct osnoise_data {
|
||||
*/
|
||||
static bool osnoise_busy;
|
||||
|
||||
#ifdef CONFIG_PREEMPT_RT
|
||||
/*
|
||||
* Print the osnoise header info.
|
||||
*/
|
||||
static void print_osnoise_headers(struct seq_file *s)
|
||||
{
|
||||
if (osnoise_data.tainted)
|
||||
seq_puts(s, "# osnoise is tainted!\n");
|
||||
|
||||
seq_puts(s, "# _-------=> irqs-off\n");
|
||||
seq_puts(s, "# / _------=> need-resched\n");
|
||||
seq_puts(s, "# | / _-----=> need-resched-lazy\n");
|
||||
seq_puts(s, "# || / _----=> hardirq/softirq\n");
|
||||
seq_puts(s, "# ||| / _---=> preempt-depth\n");
|
||||
seq_puts(s, "# |||| / _--=> preempt-lazy-depth\n");
|
||||
seq_puts(s, "# ||||| / _-=> migrate-disable\n");
|
||||
|
||||
seq_puts(s, "# |||||| / ");
|
||||
seq_puts(s, " MAX\n");
|
||||
|
||||
seq_puts(s, "# ||||| / ");
|
||||
seq_puts(s, " SINGLE Interference counters:\n");
|
||||
|
||||
seq_puts(s, "# ||||||| RUNTIME ");
|
||||
seq_puts(s, " NOISE %% OF CPU NOISE +-----------------------------+\n");
|
||||
|
||||
seq_puts(s, "# TASK-PID CPU# ||||||| TIMESTAMP IN US ");
|
||||
seq_puts(s, " IN US AVAILABLE IN US HW NMI IRQ SIRQ THREAD\n");
|
||||
|
||||
seq_puts(s, "# | | | ||||||| | | ");
|
||||
seq_puts(s, " | | | | | | | |\n");
|
||||
}
|
||||
#else /* CONFIG_PREEMPT_RT */
|
||||
static void print_osnoise_headers(struct seq_file *s)
|
||||
{
|
||||
if (osnoise_data.tainted)
|
||||
seq_puts(s, "# osnoise is tainted!\n");
|
||||
@@ -279,6 +309,7 @@ static void print_osnoise_headers(struct seq_file *s)
|
||||
seq_puts(s, "# | | | |||| | | ");
|
||||
seq_puts(s, " | | | | | | | |\n");
|
||||
}
|
||||
#endif /* CONFIG_PREEMPT_RT */
|
||||
|
||||
/*
|
||||
* osnoise_taint - report an osnoise error.
|
||||
@@ -323,6 +354,24 @@ static void trace_osnoise_sample(struct osnoise_sample *sample)
|
||||
/*
|
||||
* Print the timerlat header info.
|
||||
*/
|
||||
#ifdef CONFIG_PREEMPT_RT
|
||||
static void print_timerlat_headers(struct seq_file *s)
|
||||
{
|
||||
seq_puts(s, "# _-------=> irqs-off\n");
|
||||
seq_puts(s, "# / _------=> need-resched\n");
|
||||
seq_puts(s, "# | / _-----=> need-resched-lazy\n");
|
||||
seq_puts(s, "# || / _----=> hardirq/softirq\n");
|
||||
seq_puts(s, "# ||| / _---=> preempt-depth\n");
|
||||
seq_puts(s, "# |||| / _--=> preempt-lazy-depth\n");
|
||||
seq_puts(s, "# ||||| / _-=> migrate-disable\n");
|
||||
seq_puts(s, "# |||||| /\n");
|
||||
seq_puts(s, "# ||||||| ACTIVATION\n");
|
||||
seq_puts(s, "# TASK-PID CPU# ||||||| TIMESTAMP ID ");
|
||||
seq_puts(s, " CONTEXT LATENCY\n");
|
||||
seq_puts(s, "# | | | ||||||| | | ");
|
||||
seq_puts(s, " | |\n");
|
||||
}
|
||||
#else /* CONFIG_PREEMPT_RT */
|
||||
static void print_timerlat_headers(struct seq_file *s)
|
||||
{
|
||||
seq_puts(s, "# _-----=> irqs-off\n");
|
||||
@@ -336,6 +385,7 @@ static void print_timerlat_headers(struct seq_file *s)
|
||||
seq_puts(s, "# | | | |||| | | ");
|
||||
seq_puts(s, " | |\n");
|
||||
}
|
||||
#endif /* CONFIG_PREEMPT_RT */
|
||||
|
||||
/*
|
||||
* Record an timerlat_sample into the tracer buffer.
|
||||
@@ -1025,9 +1075,13 @@ diff_osn_sample_stats(struct osnoise_variables *osn_var, struct osnoise_sample *
|
||||
/*
|
||||
* osnoise_stop_tracing - Stop tracing and the tracer.
|
||||
*/
|
||||
static void osnoise_stop_tracing(void)
|
||||
static __always_inline void osnoise_stop_tracing(void)
|
||||
{
|
||||
struct trace_array *tr = osnoise_trace;
|
||||
|
||||
trace_array_printk_buf(tr->array_buffer.buffer, _THIS_IP_,
|
||||
"stop tracing hit on cpu %d\n", smp_processor_id());
|
||||
|
||||
tracer_tracing_off(tr);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user