Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2d0e30c3 authored by Daniel Borkmann's avatar Daniel Borkmann Committed by David S. Miller
Browse files

bpf: add helper for retrieving current numa node id



Use case is mainly for soreuseport to select sockets for the local
numa node, but since generic, lets also add this for other networking
and tracing program types.

Suggested-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
Acked-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a10b91b8
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -319,6 +319,7 @@ extern const struct bpf_func_proto bpf_map_delete_elem_proto;


extern const struct bpf_func_proto bpf_get_prandom_u32_proto;
extern const struct bpf_func_proto bpf_get_prandom_u32_proto;
extern const struct bpf_func_proto bpf_get_smp_processor_id_proto;
extern const struct bpf_func_proto bpf_get_smp_processor_id_proto;
extern const struct bpf_func_proto bpf_get_numa_node_id_proto;
extern const struct bpf_func_proto bpf_tail_call_proto;
extern const struct bpf_func_proto bpf_tail_call_proto;
extern const struct bpf_func_proto bpf_ktime_get_ns_proto;
extern const struct bpf_func_proto bpf_ktime_get_ns_proto;
extern const struct bpf_func_proto bpf_get_current_pid_tgid_proto;
extern const struct bpf_func_proto bpf_get_current_pid_tgid_proto;
+6 −0
Original line number Original line Diff line number Diff line
@@ -426,6 +426,12 @@ enum bpf_func_id {
	 */
	 */
	BPF_FUNC_set_hash_invalid,
	BPF_FUNC_set_hash_invalid,


	/**
	 * bpf_get_numa_node_id()
	 * Returns the id of the current NUMA node.
	 */
	BPF_FUNC_get_numa_node_id,

	__BPF_FUNC_MAX_ID,
	__BPF_FUNC_MAX_ID,
};
};


+1 −0
Original line number Original line Diff line number Diff line
@@ -1043,6 +1043,7 @@ const struct bpf_func_proto bpf_map_delete_elem_proto __weak;


const struct bpf_func_proto bpf_get_prandom_u32_proto __weak;
const struct bpf_func_proto bpf_get_prandom_u32_proto __weak;
const struct bpf_func_proto bpf_get_smp_processor_id_proto __weak;
const struct bpf_func_proto bpf_get_smp_processor_id_proto __weak;
const struct bpf_func_proto bpf_get_numa_node_id_proto __weak;
const struct bpf_func_proto bpf_ktime_get_ns_proto __weak;
const struct bpf_func_proto bpf_ktime_get_ns_proto __weak;


const struct bpf_func_proto bpf_get_current_pid_tgid_proto __weak;
const struct bpf_func_proto bpf_get_current_pid_tgid_proto __weak;
+12 −0
Original line number Original line Diff line number Diff line
@@ -13,6 +13,7 @@
#include <linux/rcupdate.h>
#include <linux/rcupdate.h>
#include <linux/random.h>
#include <linux/random.h>
#include <linux/smp.h>
#include <linux/smp.h>
#include <linux/topology.h>
#include <linux/ktime.h>
#include <linux/ktime.h>
#include <linux/sched.h>
#include <linux/sched.h>
#include <linux/uidgid.h>
#include <linux/uidgid.h>
@@ -92,6 +93,17 @@ const struct bpf_func_proto bpf_get_smp_processor_id_proto = {
	.ret_type	= RET_INTEGER,
	.ret_type	= RET_INTEGER,
};
};


BPF_CALL_0(bpf_get_numa_node_id)
{
	return numa_node_id();
}

const struct bpf_func_proto bpf_get_numa_node_id_proto = {
	.func		= bpf_get_numa_node_id,
	.gpl_only	= false,
	.ret_type	= RET_INTEGER,
};

BPF_CALL_0(bpf_ktime_get_ns)
BPF_CALL_0(bpf_ktime_get_ns)
{
{
	/* NMI safe access to clock monotonic */
	/* NMI safe access to clock monotonic */
+2 −0
Original line number Original line Diff line number Diff line
@@ -422,6 +422,8 @@ static const struct bpf_func_proto *tracing_func_proto(enum bpf_func_id func_id)
		return bpf_get_trace_printk_proto();
		return bpf_get_trace_printk_proto();
	case BPF_FUNC_get_smp_processor_id:
	case BPF_FUNC_get_smp_processor_id:
		return &bpf_get_smp_processor_id_proto;
		return &bpf_get_smp_processor_id_proto;
	case BPF_FUNC_get_numa_node_id:
		return &bpf_get_numa_node_id_proto;
	case BPF_FUNC_perf_event_read:
	case BPF_FUNC_perf_event_read:
		return &bpf_perf_event_read_proto;
		return &bpf_perf_event_read_proto;
	case BPF_FUNC_probe_write_user:
	case BPF_FUNC_probe_write_user:
Loading