Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf
Alexei Starovoitov says: ==================== pull-request: bpf 2020-03-12 The following pull-request contains BPF updates for your *net* tree. We've added 12 non-merge commits during the last 8 day(s) which contain a total of 12 files changed, 161 insertions(+), 15 deletions(-). The main changes are: 1) Andrii fixed two bugs in cgroup-bpf. 2) John fixed sockmap. 3) Luke fixed x32 jit. 4) Martin fixed two issues in struct_ops. 5) Yonghong fixed bpf_send_signal. 6) Yoshiki fixed BTF enum. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <test_progs.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/mman.h>
|
||||
#include <pthread.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include "test_send_signal_kern.skel.h"
|
||||
|
||||
static void sigusr1_handler(int signum)
|
||||
{
|
||||
}
|
||||
|
||||
#define THREAD_COUNT 100
|
||||
|
||||
static void *worker(void *p)
|
||||
{
|
||||
int i;
|
||||
|
||||
for ( i = 0; i < 1000; i++)
|
||||
usleep(1);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void test_send_signal_sched_switch(void)
|
||||
{
|
||||
struct test_send_signal_kern *skel;
|
||||
pthread_t threads[THREAD_COUNT];
|
||||
u32 duration = 0;
|
||||
int i, err;
|
||||
|
||||
signal(SIGUSR1, sigusr1_handler);
|
||||
|
||||
skel = test_send_signal_kern__open_and_load();
|
||||
if (CHECK(!skel, "skel_open_and_load", "skeleton open_and_load failed\n"))
|
||||
return;
|
||||
|
||||
skel->bss->pid = getpid();
|
||||
skel->bss->sig = SIGUSR1;
|
||||
|
||||
err = test_send_signal_kern__attach(skel);
|
||||
if (CHECK(err, "skel_attach", "skeleton attach failed\n"))
|
||||
goto destroy_skel;
|
||||
|
||||
for (i = 0; i < THREAD_COUNT; i++) {
|
||||
err = pthread_create(threads + i, NULL, worker, NULL);
|
||||
if (CHECK(err, "pthread_create", "Error creating thread, %s\n",
|
||||
strerror(errno)))
|
||||
goto destroy_skel;
|
||||
}
|
||||
|
||||
for (i = 0; i < THREAD_COUNT; i++)
|
||||
pthread_join(threads[i], NULL);
|
||||
|
||||
destroy_skel:
|
||||
test_send_signal_kern__destroy(skel);
|
||||
}
|
||||
@@ -31,6 +31,12 @@ int send_signal_tp(void *ctx)
|
||||
return bpf_send_signal_test(ctx);
|
||||
}
|
||||
|
||||
SEC("tracepoint/sched/sched_switch")
|
||||
int send_signal_tp_sched(void *ctx)
|
||||
{
|
||||
return bpf_send_signal_test(ctx);
|
||||
}
|
||||
|
||||
SEC("perf_event")
|
||||
int send_signal_perf(void *ctx)
|
||||
{
|
||||
|
||||
@@ -1062,6 +1062,48 @@ static struct btf_raw_test raw_tests[] = {
|
||||
.err_str = "Member exceeds struct_size",
|
||||
},
|
||||
|
||||
/* Test member unexceeds the size of struct
|
||||
*
|
||||
* enum E {
|
||||
* E0,
|
||||
* E1,
|
||||
* };
|
||||
*
|
||||
* struct A {
|
||||
* char m;
|
||||
* enum E __attribute__((packed)) n;
|
||||
* };
|
||||
*/
|
||||
{
|
||||
.descr = "size check test #5",
|
||||
.raw_types = {
|
||||
/* int */ /* [1] */
|
||||
BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, sizeof(int)),
|
||||
/* char */ /* [2] */
|
||||
BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 8, 1),
|
||||
/* enum E { */ /* [3] */
|
||||
BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_ENUM, 0, 2), 1),
|
||||
BTF_ENUM_ENC(NAME_TBD, 0),
|
||||
BTF_ENUM_ENC(NAME_TBD, 1),
|
||||
/* } */
|
||||
/* struct A { */ /* [4] */
|
||||
BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 2), 2),
|
||||
BTF_MEMBER_ENC(NAME_TBD, 2, 0), /* char m; */
|
||||
BTF_MEMBER_ENC(NAME_TBD, 3, 8),/* enum E __attribute__((packed)) n; */
|
||||
/* } */
|
||||
BTF_END_RAW,
|
||||
},
|
||||
.str_sec = "\0E\0E0\0E1\0A\0m\0n",
|
||||
.str_sec_size = sizeof("\0E\0E0\0E1\0A\0m\0n"),
|
||||
.map_type = BPF_MAP_TYPE_ARRAY,
|
||||
.map_name = "size_check5_map",
|
||||
.key_size = sizeof(int),
|
||||
.value_size = 2,
|
||||
.key_type_id = 1,
|
||||
.value_type_id = 4,
|
||||
.max_entries = 4,
|
||||
},
|
||||
|
||||
/* typedef const void * const_void_ptr;
|
||||
* struct A {
|
||||
* const_void_ptr m;
|
||||
|
||||
@@ -61,6 +61,21 @@
|
||||
},
|
||||
.flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
|
||||
},
|
||||
{
|
||||
"jset32: ignores upper bits",
|
||||
.insns = {
|
||||
BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
BPF_LD_IMM64(BPF_REG_7, 0x8000000000000000),
|
||||
BPF_LD_IMM64(BPF_REG_8, 0x8000000000000000),
|
||||
BPF_JMP_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
BPF_JMP32_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),
|
||||
BPF_MOV64_IMM(BPF_REG_0, 2),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.result = ACCEPT,
|
||||
.retval = 2,
|
||||
},
|
||||
{
|
||||
"jset32: min/max deduction",
|
||||
.insns = {
|
||||
|
||||
Reference in New Issue
Block a user