Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
We got slightly different patches removing a double word
in a comment in net/ipv4/raw.c - picked the version from net.
Simple conflict in drivers/net/ethernet/ibm/ibmvnic.c. Use cached
values instead of VNIC login response buffer (following what
commit 507ebe6444 ("ibmvnic: Fix use-after-free of VNIC login
response buffer") did).
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -182,15 +182,15 @@ static int arm_spe_read_record(struct arm_spe_decoder *decoder)
|
||||
if (payload & BIT(EV_TLB_ACCESS))
|
||||
decoder->record.type |= ARM_SPE_TLB_ACCESS;
|
||||
|
||||
if ((idx == 1 || idx == 2 || idx == 3) &&
|
||||
if ((idx == 2 || idx == 4 || idx == 8) &&
|
||||
(payload & BIT(EV_LLC_MISS)))
|
||||
decoder->record.type |= ARM_SPE_LLC_MISS;
|
||||
|
||||
if ((idx == 1 || idx == 2 || idx == 3) &&
|
||||
if ((idx == 2 || idx == 4 || idx == 8) &&
|
||||
(payload & BIT(EV_LLC_ACCESS)))
|
||||
decoder->record.type |= ARM_SPE_LLC_ACCESS;
|
||||
|
||||
if ((idx == 1 || idx == 2 || idx == 3) &&
|
||||
if ((idx == 2 || idx == 4 || idx == 8) &&
|
||||
(payload & BIT(EV_REMOTE_ACCESS)))
|
||||
decoder->record.type |= ARM_SPE_REMOTE_ACCESS;
|
||||
|
||||
|
||||
@@ -1344,8 +1344,15 @@ static int cs_etm__synth_events(struct cs_etm_auxtrace *etm,
|
||||
attr.sample_type &= ~(u64)PERF_SAMPLE_ADDR;
|
||||
}
|
||||
|
||||
if (etm->synth_opts.last_branch)
|
||||
if (etm->synth_opts.last_branch) {
|
||||
attr.sample_type |= PERF_SAMPLE_BRANCH_STACK;
|
||||
/*
|
||||
* We don't use the hardware index, but the sample generation
|
||||
* code uses the new format branch_stack with this field,
|
||||
* so the event attributes must indicate that it's present.
|
||||
*/
|
||||
attr.branch_sample_type |= PERF_SAMPLE_BRANCH_HW_INDEX;
|
||||
}
|
||||
|
||||
if (etm->synth_opts.instructions) {
|
||||
attr.config = PERF_COUNT_HW_INSTRUCTIONS;
|
||||
|
||||
@@ -3017,8 +3017,15 @@ static int intel_pt_synth_events(struct intel_pt *pt,
|
||||
|
||||
if (pt->synth_opts.callchain)
|
||||
attr.sample_type |= PERF_SAMPLE_CALLCHAIN;
|
||||
if (pt->synth_opts.last_branch)
|
||||
if (pt->synth_opts.last_branch) {
|
||||
attr.sample_type |= PERF_SAMPLE_BRANCH_STACK;
|
||||
/*
|
||||
* We don't use the hardware index, but the sample generation
|
||||
* code uses the new format branch_stack with this field,
|
||||
* so the event attributes must indicate that it's present.
|
||||
*/
|
||||
attr.branch_sample_type |= PERF_SAMPLE_BRANCH_HW_INDEX;
|
||||
}
|
||||
|
||||
if (pt->synth_opts.instructions) {
|
||||
attr.config = PERF_COUNT_HW_INSTRUCTIONS;
|
||||
|
||||
@@ -736,12 +736,6 @@ int machine__process_switch_event(struct machine *machine __maybe_unused,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int is_bpf_image(const char *name)
|
||||
{
|
||||
return strncmp(name, "bpf_trampoline_", sizeof("bpf_trampoline_") - 1) == 0 ||
|
||||
strncmp(name, "bpf_dispatcher_", sizeof("bpf_dispatcher_") - 1) == 0;
|
||||
}
|
||||
|
||||
static int machine__process_ksymbol_register(struct machine *machine,
|
||||
union perf_event *event,
|
||||
struct perf_sample *sample __maybe_unused)
|
||||
|
||||
@@ -267,6 +267,22 @@ bool __map__is_bpf_prog(const struct map *map)
|
||||
return name && (strstr(name, "bpf_prog_") == name);
|
||||
}
|
||||
|
||||
bool __map__is_bpf_image(const struct map *map)
|
||||
{
|
||||
const char *name;
|
||||
|
||||
if (map->dso->binary_type == DSO_BINARY_TYPE__BPF_IMAGE)
|
||||
return true;
|
||||
|
||||
/*
|
||||
* If PERF_RECORD_KSYMBOL is not included, the dso will not have
|
||||
* type of DSO_BINARY_TYPE__BPF_IMAGE. In such cases, we can
|
||||
* guess the type based on name.
|
||||
*/
|
||||
name = map->dso->short_name;
|
||||
return name && is_bpf_image(name);
|
||||
}
|
||||
|
||||
bool __map__is_ool(const struct map *map)
|
||||
{
|
||||
return map->dso && map->dso->binary_type == DSO_BINARY_TYPE__OOL;
|
||||
|
||||
@@ -147,12 +147,14 @@ int map__set_kallsyms_ref_reloc_sym(struct map *map, const char *symbol_name,
|
||||
bool __map__is_kernel(const struct map *map);
|
||||
bool __map__is_extra_kernel_map(const struct map *map);
|
||||
bool __map__is_bpf_prog(const struct map *map);
|
||||
bool __map__is_bpf_image(const struct map *map);
|
||||
bool __map__is_ool(const struct map *map);
|
||||
|
||||
static inline bool __map__is_kmodule(const struct map *map)
|
||||
{
|
||||
return !__map__is_kernel(map) && !__map__is_extra_kernel_map(map) &&
|
||||
!__map__is_bpf_prog(map) && !__map__is_ool(map);
|
||||
!__map__is_bpf_prog(map) && !__map__is_ool(map) &&
|
||||
!__map__is_bpf_image(map);
|
||||
}
|
||||
|
||||
bool map__has_symbols(const struct map *map);
|
||||
@@ -164,4 +166,9 @@ static inline bool is_entry_trampoline(const char *name)
|
||||
return !strcmp(name, ENTRY_TRAMPOLINE_NAME);
|
||||
}
|
||||
|
||||
static inline bool is_bpf_image(const char *name)
|
||||
{
|
||||
return strncmp(name, "bpf_trampoline_", sizeof("bpf_trampoline_") - 1) == 0 ||
|
||||
strncmp(name, "bpf_dispatcher_", sizeof("bpf_dispatcher_") - 1) == 0;
|
||||
}
|
||||
#endif /* __PERF_MAP_H */
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
#include "util/evsel_config.h"
|
||||
#include "util/event.h"
|
||||
#include "util/pfm.h"
|
||||
#include "perf.h"
|
||||
|
||||
#define MAX_NAME_LEN 100
|
||||
|
||||
@@ -1533,19 +1534,23 @@ int parse_events_add_pmu(struct parse_events_state *parse_state,
|
||||
evsel = __add_event(list, &parse_state->idx, &attr, true,
|
||||
get_config_name(head_config), pmu,
|
||||
&config_terms, auto_merge_stats, NULL);
|
||||
if (evsel) {
|
||||
evsel->unit = info.unit;
|
||||
evsel->scale = info.scale;
|
||||
evsel->per_pkg = info.per_pkg;
|
||||
evsel->snapshot = info.snapshot;
|
||||
evsel->metric_expr = info.metric_expr;
|
||||
evsel->metric_name = info.metric_name;
|
||||
evsel->pmu_name = name ? strdup(name) : NULL;
|
||||
evsel->use_uncore_alias = use_uncore_alias;
|
||||
evsel->percore = config_term_percore(&evsel->config_terms);
|
||||
}
|
||||
if (!evsel)
|
||||
return -ENOMEM;
|
||||
|
||||
return evsel ? 0 : -ENOMEM;
|
||||
evsel->pmu_name = name ? strdup(name) : NULL;
|
||||
evsel->use_uncore_alias = use_uncore_alias;
|
||||
evsel->percore = config_term_percore(&evsel->config_terms);
|
||||
|
||||
if (parse_state->fake_pmu)
|
||||
return 0;
|
||||
|
||||
evsel->unit = info.unit;
|
||||
evsel->scale = info.scale;
|
||||
evsel->per_pkg = info.per_pkg;
|
||||
evsel->snapshot = info.snapshot;
|
||||
evsel->metric_expr = info.metric_expr;
|
||||
evsel->metric_name = info.metric_name;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int parse_events_multi_pmu_add(struct parse_events_state *parse_state,
|
||||
@@ -1794,6 +1799,8 @@ static int get_event_modifier(struct event_modifier *mod, char *str,
|
||||
if (*str == 'u') {
|
||||
if (!exclude)
|
||||
exclude = eu = ek = eh = 1;
|
||||
if (!exclude_GH && !perf_guest)
|
||||
eG = 1;
|
||||
eu = 0;
|
||||
} else if (*str == 'k') {
|
||||
if (!exclude)
|
||||
|
||||
@@ -511,7 +511,7 @@ PE_PREFIX_MEM PE_VALUE '/' PE_VALUE ':' PE_MODIFIER_BP sep_dc
|
||||
list = alloc_list();
|
||||
ABORT_ON(!list);
|
||||
err = parse_events_add_breakpoint(list, &parse_state->idx,
|
||||
(void *) $2, $6, $4);
|
||||
(void *)(uintptr_t) $2, $6, $4);
|
||||
free($6);
|
||||
if (err) {
|
||||
free(list);
|
||||
@@ -528,7 +528,7 @@ PE_PREFIX_MEM PE_VALUE '/' PE_VALUE sep_dc
|
||||
list = alloc_list();
|
||||
ABORT_ON(!list);
|
||||
if (parse_events_add_breakpoint(list, &parse_state->idx,
|
||||
(void *) $2, NULL, $4)) {
|
||||
(void *)(uintptr_t) $2, NULL, $4)) {
|
||||
free(list);
|
||||
YYABORT;
|
||||
}
|
||||
@@ -544,7 +544,7 @@ PE_PREFIX_MEM PE_VALUE ':' PE_MODIFIER_BP sep_dc
|
||||
list = alloc_list();
|
||||
ABORT_ON(!list);
|
||||
err = parse_events_add_breakpoint(list, &parse_state->idx,
|
||||
(void *) $2, $4, 0);
|
||||
(void *)(uintptr_t) $2, $4, 0);
|
||||
free($4);
|
||||
if (err) {
|
||||
free(list);
|
||||
@@ -561,7 +561,7 @@ PE_PREFIX_MEM PE_VALUE sep_dc
|
||||
list = alloc_list();
|
||||
ABORT_ON(!list);
|
||||
if (parse_events_add_breakpoint(list, &parse_state->idx,
|
||||
(void *) $2, NULL, 0)) {
|
||||
(void *)(uintptr_t) $2, NULL, 0)) {
|
||||
free(list);
|
||||
YYABORT;
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ static int perf_session__process_compressed_event(struct perf_session *session,
|
||||
session->decomp_last = decomp;
|
||||
}
|
||||
|
||||
pr_debug("decomp (B): %ld to %ld\n", src_size, decomp_size);
|
||||
pr_debug("decomp (B): %zd to %zd\n", src_size, decomp_size);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -117,7 +117,7 @@ static void aggr_printout(struct perf_stat_config *config,
|
||||
cpu_map__id_to_die(id),
|
||||
config->csv_output ? 0 : -3,
|
||||
cpu_map__id_to_cpu(id), config->csv_sep);
|
||||
} else {
|
||||
} else if (id > -1) {
|
||||
fprintf(config->output, "CPU%*d%s",
|
||||
config->csv_output ? 0 : -7,
|
||||
evsel__cpus(evsel)->map[id],
|
||||
|
||||
@@ -113,6 +113,7 @@ struct perf_stat_config {
|
||||
bool summary;
|
||||
bool metric_no_group;
|
||||
bool metric_no_merge;
|
||||
bool stop_read_counter;
|
||||
FILE *output;
|
||||
unsigned int interval;
|
||||
unsigned int timeout;
|
||||
|
||||
@@ -663,6 +663,7 @@ static bool symbol__is_idle(const char *name)
|
||||
"exit_idle",
|
||||
"mwait_idle",
|
||||
"mwait_idle_with_hints",
|
||||
"mwait_idle_with_hints.constprop.0",
|
||||
"poll_idle",
|
||||
"ppc64_runlatch_off",
|
||||
"pseries_dedicated_idle_sleep",
|
||||
|
||||
@@ -99,7 +99,7 @@ size_t zstd_decompress_stream(struct zstd_data *data, void *src, size_t src_size
|
||||
while (input.pos < input.size) {
|
||||
ret = ZSTD_decompressStream(data->dstream, &output, &input);
|
||||
if (ZSTD_isError(ret)) {
|
||||
pr_err("failed to decompress (B): %ld -> %ld, dst_size %ld : %s\n",
|
||||
pr_err("failed to decompress (B): %zd -> %zd, dst_size %zd : %s\n",
|
||||
src_size, output.size, dst_size, ZSTD_getErrorName(ret));
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user