The atexit() is called from parent process as well as forked processes.
Hence the child restores the settings at exit while the parent is still
executing. Fix this by checking pid of atexit() calling process and only
restore THP number from parent process.
Fixes: c23ea61726d5 ("selftests/mm: protection_keys: save/restore nr_hugepages settings")
Tested-by: Joey Gouly <joey.gouly(a)arm.com>
Signed-off-by: Muhammad Usama Anjum <usama.anjum(a)collabora.com>
---
tools/testing/selftests/mm/protection_keys.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/mm/protection_keys.c b/tools/testing/selftests/mm/protection_keys.c
index f822ae31af22e..374a308174d2b 100644
--- a/tools/testing/selftests/mm/protection_keys.c
+++ b/tools/testing/selftests/mm/protection_keys.c
@@ -1745,9 +1745,12 @@ void pkey_setup_shadow(void)
shadow_pkey_reg = __read_pkey_reg();
}
+pid_t parent_pid;
+
void restore_settings_atexit(void)
{
- cat_into_file(buf, "/proc/sys/vm/nr_hugepages");
+ if (parent_pid == getpid())
+ cat_into_file(buf, "/proc/sys/vm/nr_hugepages");
}
void save_settings(void)
@@ -1773,6 +1776,7 @@ void save_settings(void)
exit(__LINE__);
}
+ parent_pid = getpid();
atexit(restore_settings_atexit);
close(fd);
}
--
2.39.2
Hi,
These two patches fix some minor error path mistakes in the device
module.
Changes:
--------
v1->v2:
* Add fixes tag.
* Add an imperative statement in the first commit descripton.
Wander Lairson Costa (2):
kunit: unregister the device on error
kunit: avoid memory leak on device register error
lib/kunit/device.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
--
2.44.0
This patch series depends on commits in the series submitted to net.
(https://lore.kernel.org/netdev/20240412152120.115067-1-richardbgobert@gmail…)
The fields network_offset and inner_network_offset are added to
napi_gro_cb, and are both set during the receive phase of GRO. This is then
leveraged in the next commit to remove flush_id state from napi_gro_cb, and
stateful code in {ipv6,inet}_gro_receive which may be unnecessarily
complicated due to encapsulation support in GRO.
3rd patch adds tests for different flush_id flows in GRO.
v6 -> v7:
- Moved bug fixes to a separate submission in net
- Added UDP fwd benchmark
- v6:
https://lore.kernel.org/all/20240410153423.107381-1-richardbgobert@gmail.co…
v5 -> v6:
- Write inner_network_offset in vxlan and geneve
- Ignore is_atomic when DF=0
- v5:
https://lore.kernel.org/all/20240408141720.98832-1-richardbgobert@gmail.com/
v4 -> v5:
- Add 1st commit - flush id checks in udp_gro_receive segment which can be
backported by itself
- Add TCP measurements for the 5th commit
- Add flush id tests to ensure flush id logic is preserved in GRO
- Simplify gro_inet_flush by removing a branch
- v4:
https://lore.kernel.org/all/202420325182543.87683-1-richardbgobert@gmail.co…
v3 -> v4:
- Fix code comment and commit message typos
- v3:
https://lore.kernel.org/all/f939c84a-2322-4393-a5b0-9b1e0be8ed8e@gmail.com/
v2 -> v3:
- Use napi_gro_cb instead of skb->{offset}
- v2:
https://lore.kernel.org/all/2ce1600b-e733-448b-91ac-9d0ae2b866a4@gmail.com/
v1 -> v2:
- Pass p_off in *_gro_complete to fix UDP bug
- Remove more conditionals and memory fetches from inet_gro_flush
- v1:
https://lore.kernel.org/netdev/e1d22505-c5f8-4c02-a997-64248480338b@gmail.c…
Richard Gobert (3):
net: gro: add {inner_}network_offset to napi_gro_cb
net: gro: move L3 flush checks to tcp_gro_receive and udp_gro_receive_segment
selftests/net: add flush id selftests
drivers/net/geneve.c | 1 +
drivers/net/vxlan/vxlan_core.c | 1 +
include/net/gro.h | 82 +++++++++++++++--
net/8021q/vlan_core.c | 2 +
net/core/gro.c | 5 +-
net/ethernet/eth.c | 1 +
net/ipv4/af_inet.c | 46 +---------
net/ipv4/gre_offload.c | 1 +
net/ipv4/tcp_offload.c | 15 +---
net/ipv4/udp_offload.c | 16 +---
net/ipv6/ip6_offload.c | 19 +---
tools/testing/selftests/net/gro.c | 144 ++++++++++++++++++++++++++++++
12 files changed, 238 insertions(+), 95 deletions(-)
--
2.36.1
The Linux next building selftests with clang and gcc-13 found these
build warnings.
Reported-by: Linux Kernel Functional Testing <lkft(a)linaro.org>
Build log:
---------
PATH:
Reported build warnings noticed on following test files,
selftests/arm64/mte/
* check_buffer_fill.c
* mte_common_util.c
check_buffer_fill.c: In function 'check_buffer_underflow_by_byte':
check_buffer_fill.c:94:93: warning: format '%lx' expects argument of
type 'long unsigned int', but argument 3 has type 'char *' [-Wformat=]
94 | ksft_print_msg("Buffer is not
filled at index:%d of ptr:0x%lx\n",
|
~~^
|
|
|
long unsigned int
|
%s
95 | j, ptr);
| ~~~
| |
| char *
<trim>
mte_common_util.c: In function 'mte_default_handler':
mte_common_util.c:41:101: warning: format '%lx' expects argument of
type 'long unsigned int', but argument 2 has type 'long long unsigned
int' [-Wformat=]
41 | ksft_print_msg("Got unexpected
SEGV_MTEAERR at pc=$lx, fault addr=%lx\n",
|
~~^
|
|
|
long unsigned int
|
%llx
42 | ((ucontext_t
*)uc)->uc_mcontext.pc,
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
long long unsigned int
mte_common_util.c:41:48: warning: too many arguments for format
[-Wformat-extra-args]
41 | ksft_print_msg("Got unexpected
SEGV_MTEAERR at pc=$lx, fault addr=%lx\n",
|
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Steps to reproduce:
---
tuxmake --runtime podman --target-arch arm64 --toolchain clang-nightly \
--kconfig https://storage.tuxsuite.com/public/linaro/lkft/builds/2fDW3nAXzFH2GOEle3S3…
\
LLVM=1 LLVM_IAS=1 debugkernel dtbs dtbs-legacy headers kernel
kselftest modules
tuxmake --runtime podman --target-arch arm64 --toolchain gcc-13 \
--kconfig https://storage.tuxsuite.com/public/linaro/lkft/builds/2fDW3wG8BqWxf0afUI5f…
\
debugkernel dtbs dtbs-legacy headers kernel kselftest modules
Links:
- https://storage.tuxsuite.com/public/linaro/lkft/builds/2fDW3nAXzFH2GOEle3S3…
- https://storage.tuxsuite.com/public/linaro/lkft/builds/2fDW3wG8BqWxf0afUI5f…
--
Linaro LKFT
https://lkft.linaro.org
The Linux next building selftests with clang-17 and gcc-13 found these
build warnings.
Reported-by: Linux Kernel Functional Testing <lkft(a)linaro.org>
Build log:
---------
PATH:
selftests/arm64/fp
The reported build warnings noticed on following test files.
* sve-ptrace.c
* za-ptrace.c
* zt-ptrace.c
clang-17 warnings:
-----
sve-ptrace.c:85:40: warning: data argument not used by format string
[-Wformat-extra-args]
85 | ksft_exit_fail_msg("PTRACE_TRACEME", strerror(errno));
| ~~~~~~~~~~~~~~~~ ^
sve-ptrace.c:88:40: warning: data argument not used by format string
[-Wformat-extra-args]
88 | ksft_exit_fail_msg("raise(SIGSTOP)", strerror(errno));
| ~~~~~~~~~~~~~~~~ ^
sve-ptrace.c:344:11: warning: format specifies type 'int' but the
argument has type 'size_t' (aka 'unsigned long') [-Wformat]
343 | ksft_test_result_fail("Error allocating %d
byte buffer for %s VL %u\n",
| ~~
| %zu
344 | data_size, type->name, vl);
| ^~~~~~~~~
and more
Gcc-13 warnings:
------
sve-ptrace.c: In function 'do_child':
sve-ptrace.c:85:36: warning: too many arguments for format [-Wformat-extra-args]
85 | ksft_exit_fail_msg("PTRACE_TRACEME", strerror(errno));
| ^~~~~~~~~~~~~~~~
sve-ptrace.c:88:36: warning: too many arguments for format [-Wformat-extra-args]
88 | ksft_exit_fail_msg("raise(SIGSTOP)", strerror(errno));
| ^~~~~~~~~~~~~~~~
sve-ptrace.c: In function 'ptrace_set_sve_get_sve_data':
sve-ptrace.c:343:58: warning: format '%d' expects argument of type
'int', but argument 2 has type 'size_t' {aka 'long unsigned int'}
[-Wformat=]
343 | ksft_test_result_fail("Error allocating %d
byte buffer for %s VL %u\n",
| ~^
| |
| int
| %ld
344 | data_size, type->name, vl);
| ~~~~~~~~~
| |
| size_t {aka long unsigned int}
and more
Steps to reproduce:
---
tuxmake --runtime podman --target-arch arm64 --toolchain clang-nightly \
--kconfig https://storage.tuxsuite.com/public/linaro/lkft/builds/2fDW3nAXzFH2GOEle3S3…
\
LLVM=1 LLVM_IAS=1 debugkernel dtbs dtbs-legacy headers kernel
kselftest modules
tuxmake --runtime podman --target-arch arm64 --toolchain gcc-13 \
--kconfig https://storage.tuxsuite.com/public/linaro/lkft/builds/2fDW3wG8BqWxf0afUI5f…
\
debugkernel dtbs dtbs-legacy headers kernel kselftest modules
Links:
- https://storage.tuxsuite.com/public/linaro/lkft/builds/2fDW3nAXzFH2GOEle3S3…
- https://storage.tuxsuite.com/public/linaro/lkft/builds/2fDW3wG8BqWxf0afUI5f…
--
Linaro LKFT
https://lkft.linaro.org
Hi Christian,
I am looking at tools/testing/selftests/clone3/clone3_set_tid.c as part
of a patch to clean up the uses of 'return ksft_exit_...();' throughout
the selftests (as they call exit() so they do not return) and I noticed
that it seems to always pass even when there may have been an error?
if (waitpid(ns_pid, &status, 0) < 0) {
ksft_print_msg("Child returned %s\n", strerror(errno));
ret = -errno;
goto out;
}
...
out:
ret = 0;
return !ret ? ksft_exit_pass() : ksft_exit_fail();
}
Should the ret and out label positions be switched? Alternatively, it
seems like ret and out do not have that many uses, perhaps it would just
be better to call the ksft_exit_...() directly in their respective
paths? I am not going to touch it as part of my patch but I felt it was
worth reporting since it appears to have been there since the
introduction of this test in commit 41585bbeeef9 ("selftests: add tests
for clone3() with *set_tid").
Cheers,
Nathan