mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 17:57:38 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Cross-merge networking fixes after downstream PR (net-6.17-rc2). No conflicts. Adjacent changes: drivers/net/ethernet/stmicro/stmmac/dwmac-rk.cd7a276a576("net: stmmac: rk: convert to suspend()/resume() methods")de1e963ad0("net: stmmac: rk: put the PHY clock on remove") Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -10965,11 +10965,14 @@ struct bpf_link *bpf_program__attach_perf_event_opts(const struct bpf_program *p
|
||||
}
|
||||
link->link.fd = pfd;
|
||||
}
|
||||
if (ioctl(pfd, PERF_EVENT_IOC_ENABLE, 0) < 0) {
|
||||
err = -errno;
|
||||
pr_warn("prog '%s': failed to enable perf_event FD %d: %s\n",
|
||||
prog->name, pfd, errstr(err));
|
||||
goto err_out;
|
||||
|
||||
if (!OPTS_GET(opts, dont_enable, false)) {
|
||||
if (ioctl(pfd, PERF_EVENT_IOC_ENABLE, 0) < 0) {
|
||||
err = -errno;
|
||||
pr_warn("prog '%s': failed to enable perf_event FD %d: %s\n",
|
||||
prog->name, pfd, errstr(err));
|
||||
goto err_out;
|
||||
}
|
||||
}
|
||||
|
||||
return &link->link;
|
||||
|
||||
@@ -499,9 +499,11 @@ struct bpf_perf_event_opts {
|
||||
__u64 bpf_cookie;
|
||||
/* don't use BPF link when attach BPF program */
|
||||
bool force_ioctl_attach;
|
||||
/* don't automatically enable the event */
|
||||
bool dont_enable;
|
||||
size_t :0;
|
||||
};
|
||||
#define bpf_perf_event_opts__last_field force_ioctl_attach
|
||||
#define bpf_perf_event_opts__last_field dont_enable
|
||||
|
||||
LIBBPF_API struct bpf_link *
|
||||
bpf_program__attach_perf_event(const struct bpf_program *prog, int pfd);
|
||||
|
||||
@@ -451,6 +451,8 @@ int perf_bpf_filter__prepare(struct evsel *evsel, struct target *target)
|
||||
struct bpf_link *link;
|
||||
struct perf_bpf_filter_entry *entry;
|
||||
bool needs_idx_hash = !target__has_cpu(target);
|
||||
DECLARE_LIBBPF_OPTS(bpf_perf_event_opts, pe_opts,
|
||||
.dont_enable = true);
|
||||
|
||||
entry = calloc(MAX_FILTERS, sizeof(*entry));
|
||||
if (entry == NULL)
|
||||
@@ -522,7 +524,8 @@ int perf_bpf_filter__prepare(struct evsel *evsel, struct target *target)
|
||||
prog = skel->progs.perf_sample_filter;
|
||||
for (x = 0; x < xyarray__max_x(evsel->core.fd); x++) {
|
||||
for (y = 0; y < xyarray__max_y(evsel->core.fd); y++) {
|
||||
link = bpf_program__attach_perf_event(prog, FD(evsel, x, y));
|
||||
link = bpf_program__attach_perf_event_opts(prog, FD(evsel, x, y),
|
||||
&pe_opts);
|
||||
if (IS_ERR(link)) {
|
||||
pr_err("Failed to attach perf sample-filter program\n");
|
||||
ret = PTR_ERR(link);
|
||||
|
||||
@@ -47,10 +47,11 @@ name as necessary to disambiguate it from others is necessary. Note that option
|
||||
MSRs are read as 64-bits, u32 truncates the displayed value to 32-bits.
|
||||
default: u64
|
||||
|
||||
format: {\fBraw\fP | \fBdelta\fP | \fBpercent\fP}
|
||||
format: {\fBraw\fP | \fBdelta\fP | \fBpercent\fP | \fBaverage\fP}
|
||||
'raw' shows the MSR contents in hex.
|
||||
'delta' shows the difference in values during the measurement interval.
|
||||
'percent' shows the delta as a percentage of the cycles elapsed.
|
||||
'average' similar to raw, but also averaged for node/package summaries (or when using -S).
|
||||
default: delta
|
||||
|
||||
name: "name_string"
|
||||
@@ -186,6 +187,14 @@ The system configuration dump (if --quiet is not used) is followed by statistics
|
||||
.PP
|
||||
\fBSAMAMHz\fP Instantaneous snapshot of what sysfs presents at the end of the measurement interval. From /sys/class/drm/card0/gt/gt1/rps_act_freq_mhz or /sys/class/drm/card0/device/tile0/gtN/freq0/act_freq depending on the graphics driver being used.
|
||||
.PP
|
||||
\fBTotl%C0\fP Weighted percentage of time that CPUs are busy. If N CPUs are busy during an interval, the percentage is N * 100%.
|
||||
.PP
|
||||
\fBAny%C0\fP Percentage of time that at least one CPU is busy.
|
||||
.PP
|
||||
\fBGFX%C0\fP Percentage of time that at least one GFX compute engine is busy.
|
||||
.PP
|
||||
\fBCPUGFX%\fP Percentage of time that at least one CPU is busy at the same time as at least one Graphics compute enginer is busy.
|
||||
.PP
|
||||
\fBPkg%pc2, Pkg%pc3, Pkg%pc6, Pkg%pc7\fP percentage residency in hardware package idle states. These numbers are from hardware residency counters.
|
||||
.PP
|
||||
\fBPkgWatt\fP Watts consumed by the whole package.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -35,6 +35,8 @@ def _setup_deferred_cleanup(cfg) -> None:
|
||||
threaded = cmd(f"cat /sys/class/net/{cfg.ifname}/threaded").stdout
|
||||
defer(_set_threaded_state, cfg, threaded)
|
||||
|
||||
return combined
|
||||
|
||||
|
||||
def enable_dev_threaded_disable_napi_threaded(cfg, nl) -> None:
|
||||
"""
|
||||
@@ -49,7 +51,7 @@ def enable_dev_threaded_disable_napi_threaded(cfg, nl) -> None:
|
||||
napi0_id = napis[0]['id']
|
||||
napi1_id = napis[1]['id']
|
||||
|
||||
_setup_deferred_cleanup(cfg)
|
||||
qcnt = _setup_deferred_cleanup(cfg)
|
||||
|
||||
# set threaded
|
||||
_set_threaded_state(cfg, 1)
|
||||
@@ -62,7 +64,7 @@ def enable_dev_threaded_disable_napi_threaded(cfg, nl) -> None:
|
||||
nl.napi_set({'id': napi1_id, 'threaded': 'disabled'})
|
||||
|
||||
cmd(f"ethtool -L {cfg.ifname} combined 1")
|
||||
cmd(f"ethtool -L {cfg.ifname} combined 2")
|
||||
cmd(f"ethtool -L {cfg.ifname} combined {qcnt}")
|
||||
_assert_napi_threaded_enabled(nl, napi0_id)
|
||||
_assert_napi_threaded_disabled(nl, napi1_id)
|
||||
|
||||
@@ -80,7 +82,7 @@ def change_num_queues(cfg, nl) -> None:
|
||||
napi0_id = napis[0]['id']
|
||||
napi1_id = napis[1]['id']
|
||||
|
||||
_setup_deferred_cleanup(cfg)
|
||||
qcnt = _setup_deferred_cleanup(cfg)
|
||||
|
||||
# set threaded
|
||||
_set_threaded_state(cfg, 1)
|
||||
@@ -90,7 +92,7 @@ def change_num_queues(cfg, nl) -> None:
|
||||
_assert_napi_threaded_enabled(nl, napi1_id)
|
||||
|
||||
cmd(f"ethtool -L {cfg.ifname} combined 1")
|
||||
cmd(f"ethtool -L {cfg.ifname} combined 2")
|
||||
cmd(f"ethtool -L {cfg.ifname} combined {qcnt}")
|
||||
|
||||
# check napi threaded is set for both napis
|
||||
_assert_napi_threaded_enabled(nl, napi0_id)
|
||||
|
||||
@@ -11,6 +11,7 @@ ALL_TESTS="
|
||||
ets_test_strict
|
||||
ets_test_mixed
|
||||
ets_test_dwrr
|
||||
ets_test_plug
|
||||
classifier_mode
|
||||
ets_test_strict
|
||||
ets_test_mixed
|
||||
|
||||
@@ -224,3 +224,11 @@ ets_test_dwrr()
|
||||
ets_set_dwrr_two_bands
|
||||
xfail_on_slow ets_dwrr_test_01
|
||||
}
|
||||
|
||||
ets_test_plug()
|
||||
{
|
||||
ets_change_qdisc $put 2 "3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3" "1514 1514"
|
||||
tc qdisc add dev $put handle 20: parent 10:4 plug
|
||||
start_traffic_pktsize 100 $h1.10 192.0.2.1 192.0.2.2 00:c1:a0:c1:a0:00 "-c 1"
|
||||
ets_qdisc_setup $put 2
|
||||
}
|
||||
|
||||
@@ -2708,6 +2708,69 @@ TEST(prequeue) {
|
||||
close(cfd);
|
||||
}
|
||||
|
||||
TEST(data_steal) {
|
||||
struct tls_crypto_info_keys tls;
|
||||
char buf[20000], buf2[20000];
|
||||
struct sockaddr_in addr;
|
||||
int sfd, cfd, ret, fd;
|
||||
int pid, status;
|
||||
socklen_t len;
|
||||
|
||||
len = sizeof(addr);
|
||||
memrnd(buf, sizeof(buf));
|
||||
|
||||
tls_crypto_info_init(TLS_1_2_VERSION, TLS_CIPHER_AES_GCM_256, &tls, 0);
|
||||
|
||||
addr.sin_family = AF_INET;
|
||||
addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
addr.sin_port = 0;
|
||||
|
||||
fd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
sfd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
|
||||
ASSERT_EQ(bind(sfd, &addr, sizeof(addr)), 0);
|
||||
ASSERT_EQ(listen(sfd, 10), 0);
|
||||
ASSERT_EQ(getsockname(sfd, &addr, &len), 0);
|
||||
ASSERT_EQ(connect(fd, &addr, sizeof(addr)), 0);
|
||||
ASSERT_GE(cfd = accept(sfd, &addr, &len), 0);
|
||||
close(sfd);
|
||||
|
||||
ret = setsockopt(fd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls"));
|
||||
if (ret) {
|
||||
ASSERT_EQ(errno, ENOENT);
|
||||
SKIP(return, "no TLS support");
|
||||
}
|
||||
ASSERT_EQ(setsockopt(cfd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls")), 0);
|
||||
|
||||
/* Spawn a child and get it into the read wait path of the underlying
|
||||
* TCP socket.
|
||||
*/
|
||||
pid = fork();
|
||||
ASSERT_GE(pid, 0);
|
||||
if (!pid) {
|
||||
EXPECT_EQ(recv(cfd, buf, sizeof(buf), MSG_WAITALL),
|
||||
sizeof(buf));
|
||||
exit(!__test_passed(_metadata));
|
||||
}
|
||||
|
||||
usleep(2000);
|
||||
ASSERT_EQ(setsockopt(fd, SOL_TLS, TLS_TX, &tls, tls.len), 0);
|
||||
ASSERT_EQ(setsockopt(cfd, SOL_TLS, TLS_RX, &tls, tls.len), 0);
|
||||
|
||||
EXPECT_EQ(send(fd, buf, sizeof(buf), 0), sizeof(buf));
|
||||
usleep(2000);
|
||||
EXPECT_EQ(recv(cfd, buf2, sizeof(buf2), MSG_DONTWAIT), -1);
|
||||
/* Don't check errno, the error will be different depending
|
||||
* on what random bytes TLS interpreted as the record length.
|
||||
*/
|
||||
|
||||
close(fd);
|
||||
close(cfd);
|
||||
|
||||
EXPECT_EQ(wait(&status), pid);
|
||||
EXPECT_EQ(status, 0);
|
||||
}
|
||||
|
||||
static void __attribute__((constructor)) fips_check(void) {
|
||||
int res;
|
||||
FILE *f;
|
||||
|
||||
@@ -202,11 +202,11 @@ static void print_first_lines(char *text, int nr)
|
||||
int offs = end - text;
|
||||
|
||||
text[offs] = '\0';
|
||||
printf(text);
|
||||
printf("%s", text);
|
||||
text[offs] = '\n';
|
||||
printf("\n");
|
||||
} else {
|
||||
printf(text);
|
||||
printf("%s", text);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -221,7 +221,7 @@ static void print_last_lines(char *text, int nr)
|
||||
nr--;
|
||||
start--;
|
||||
}
|
||||
printf(start);
|
||||
printf("%s", start);
|
||||
}
|
||||
|
||||
static void print_boundaries(const char *title, FIXTURE_DATA(proc_maps_race) *self)
|
||||
|
||||
Reference in New Issue
Block a user