[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20201110103509.GD387652@krava>
Date: Tue, 10 Nov 2020 11:35:09 +0100
From: Jiri Olsa <jolsa@...hat.com>
To: Daniel Borkmann <daniel@...earbox.net>
Cc: Jiri Olsa <jolsa@...nel.org>, Alexei Starovoitov <ast@...nel.org>,
Andrii Nakryiko <andriin@...com>,
Arnaldo Carvalho de Melo <acme@...nel.org>,
Yonghong Song <yhs@...com>, Song Liu <songliubraving@...com>,
Andrii Nakryiko <andrii@...nel.org>, netdev@...r.kernel.org,
bpf@...r.kernel.org, Martin KaFai Lau <kafai@...com>,
John Fastabend <john.fastabend@...il.com>,
KP Singh <kpsingh@...omium.org>
Subject: Re: [PATCHv5 bpf] bpf: Move iterator functions into special init
section
On Mon, Nov 09, 2020 at 11:04:34PM +0100, Daniel Borkmann wrote:
SNIP
> > index 7b53cb3092ee..a7c71e3b5f9a 100644
> > --- a/include/linux/init.h
> > +++ b/include/linux/init.h
> > @@ -52,6 +52,7 @@
> > #define __initconst __section(".init.rodata")
> > #define __exitdata __section(".exit.data")
> > #define __exit_call __used __section(".exitcall.exit")
> > +#define __init_bpf_preserve_type __section(".init.bpf.preserve_type")
>
> Small nit, why this detour via BPF_INIT define? Couldn't we just:
>
> #ifdef CONFIG_DEBUG_INFO_BTF
> #define __init_bpf_preserve_type __section(".init.bpf.preserve_type")
> #else
> #define __init_bpf_preserve_type __init
> #endif
>
> Also, the comment above the existing defines says '/* These are for everybody (although
> not all archs will actually discard it in modules) */' ... We should probably not add
> the __init_bpf_preserve_type right under this listing as-is in your patch, but instead
> 'separate' it by adding a small comment on top of its definition by explaining its
> purpose more clearly for others.
ok, for some reason I thought I needed to add it to init.h,
but as it's bpf specific, perhaps we can omit init.h change
completely.. how about the change below?
thanks,
jirka
---
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index b2b3d81b1535..f91029b3443b 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -685,8 +685,21 @@
.BTF_ids : AT(ADDR(.BTF_ids) - LOAD_OFFSET) { \
*(.BTF_ids) \
}
+
+/*
+ * .init.bpf.preserve_type
+ *
+ * This section store special BPF function and marks them
+ * with begin/end symbols pair for the sake of pahole tool.
+ */
+#define INIT_BPF_PRESERVE_TYPE \
+ __init_bpf_preserve_type_begin = .; \
+ *(.init.bpf.preserve_type) \
+ __init_bpf_preserve_type_end = .; \
+ MEM_DISCARD(init.bpf.preserve_type)
#else
#define BTF
+#define INIT_BPF_PRESERVE_TYPE
#endif
/*
@@ -741,7 +754,8 @@
#define INIT_TEXT \
*(.init.text .init.text.*) \
*(.text.startup) \
- MEM_DISCARD(init.text*)
+ MEM_DISCARD(init.text*) \
+ INIT_BPF_PRESERVE_TYPE
#define EXIT_DATA \
*(.exit.data .exit.data.*) \
diff --git a/include/linux/bpf.h b/include/linux/bpf.h
index 2b16bf48aab6..1739a92516ed 100644
--- a/include/linux/bpf.h
+++ b/include/linux/bpf.h
@@ -1276,10 +1276,20 @@ struct bpf_link *bpf_link_get_from_fd(u32 ufd);
int bpf_obj_pin_user(u32 ufd, const char __user *pathname);
int bpf_obj_get_user(const char __user *pathname, int flags);
+/* In case we generate BTF data, we need to group all iterator
+ * functions into special init section, so pahole can track them.
+ * Otherwise pure __init section is enough.
+ */
+#ifdef CONFIG_DEBUG_INFO_BTF
+#define __init_bpf_preserve_type __section(".init.bpf.preserve_type")
+#else
+#define __init_bpf_preserve_type __init
+#endif
+
#define BPF_ITER_FUNC_PREFIX "bpf_iter_"
#define DEFINE_BPF_ITER_FUNC(target, args...) \
extern int bpf_iter_ ## target(args); \
- int __init bpf_iter_ ## target(args) { return 0; }
+ int __init_bpf_preserve_type bpf_iter_ ## target(args) { return 0; }
struct bpf_iter_aux_info {
struct bpf_map *map;
Powered by blists - more mailing lists