* [PATCH cgroup/for-5.20] cgroup: Replace cgroup->ancestor_ids[] with ->ancestors[]
@ 2022-07-29 19:05 Tejun Heo
[not found] ` <YuQvcCrcgNWbtndU-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org>
0 siblings, 1 reply; 28+ messages in thread
From: Tejun Heo @ 2022-07-29 19:05 UTC (permalink / raw)
To: cgroups-u79uwXL29TY76Z2rM5mHXA, Zefan Li, Michal Koutný,
Christian Brauner
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-team-b10kYP2dOMg,
Namhyung Kim, Pablo Neira Ayuso
Every cgroup knows all its ancestors through its ->ancestor_ids[]. While all
the existing users only need the IDs, there's no advantage to remembering
the IDs instead of the pointers directly. Let's replace
cgroup->ancestor_ids[] with ->ancestors[] so that it's easy to access non-ID
ancestor fields.
This patch shouldn't cause any behavior differences.
Signed-off-by: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
---
Namhyung, I think the change in bperf_cgroup is correct but couldn't figure
out how to test it (normal perf build wouldn't compile it). Can you please
see whether it's correct?
Thanks.
include/linux/cgroup-defs.h | 10 +++++-----
include/linux/cgroup.h | 2 +-
kernel/cgroup/cgroup.c | 7 +++----
net/netfilter/nft_socket.c | 5 +++--
tools/perf/util/bpf_skel/bperf_cgroup.bpf.c | 2 +-
5 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/include/linux/cgroup-defs.h b/include/linux/cgroup-defs.h
index 63bf43c7ca3b..51fa744c2e9d 100644
--- a/include/linux/cgroup-defs.h
+++ b/include/linux/cgroup-defs.h
@@ -379,7 +379,7 @@ struct cgroup {
/*
* The depth this cgroup is at. The root is at depth zero and each
* step down the hierarchy increments the level. This along with
- * ancestor_ids[] can determine whether a given cgroup is a
+ * ancestors[] can determine whether a given cgroup is a
* descendant of another without traversing the hierarchy.
*/
int level;
@@ -499,8 +499,8 @@ struct cgroup {
/* Used to store internal freezer state */
struct cgroup_freezer_state freezer;
- /* ids of the ancestors at each level including self */
- u64 ancestor_ids[];
+ /* All ancestors including self */
+ struct cgroup *ancestors[];
};
/*
@@ -520,8 +520,8 @@ struct cgroup_root {
/* The root cgroup. Root is destroyed on its release. */
struct cgroup cgrp;
- /* for cgrp->ancestor_ids[0] */
- u64 cgrp_ancestor_id_storage;
+ /* for cgrp->ancestors[0] */
+ u64 cgrp_ancestor_storage;
/* Number of cgroups in the hierarchy, used only for /proc/cgroups */
atomic_t nr_cgrps;
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
index ed53bfe7c46c..5334b6134399 100644
--- a/include/linux/cgroup.h
+++ b/include/linux/cgroup.h
@@ -574,7 +574,7 @@ static inline bool cgroup_is_descendant(struct cgroup *cgrp,
{
if (cgrp->root != ancestor->root || cgrp->level < ancestor->level)
return false;
- return cgrp->ancestor_ids[ancestor->level] == cgroup_id(ancestor);
+ return cgrp->ancestors[ancestor->level] == ancestor;
}
/**
diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
index 85fa4c8587a8..ce587fe43dab 100644
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
@@ -2047,7 +2047,7 @@ int cgroup_setup_root(struct cgroup_root *root, u16 ss_mask)
}
root_cgrp->kn = kernfs_root_to_node(root->kf_root);
WARN_ON_ONCE(cgroup_ino(root_cgrp) != 1);
- root_cgrp->ancestor_ids[0] = cgroup_id(root_cgrp);
+ root_cgrp->ancestors[0] = root_cgrp;
ret = css_populate_dir(&root_cgrp->self);
if (ret)
@@ -5391,8 +5391,7 @@ static struct cgroup *cgroup_create(struct cgroup *parent, const char *name,
int ret;
/* allocate the cgroup and its ID, 0 is reserved for the root */
- cgrp = kzalloc(struct_size(cgrp, ancestor_ids, (level + 1)),
- GFP_KERNEL);
+ cgrp = kzalloc(struct_size(cgrp, ancestors, (level + 1)), GFP_KERNEL);
if (!cgrp)
return ERR_PTR(-ENOMEM);
@@ -5444,7 +5443,7 @@ static struct cgroup *cgroup_create(struct cgroup *parent, const char *name,
spin_lock_irq(&css_set_lock);
for (tcgrp = cgrp; tcgrp; tcgrp = cgroup_parent(tcgrp)) {
- cgrp->ancestor_ids[tcgrp->level] = cgroup_id(tcgrp);
+ cgrp->ancestors[tcgrp->level] = tcgrp;
if (tcgrp != cgrp) {
tcgrp->nr_descendants++;
diff --git a/net/netfilter/nft_socket.c b/net/netfilter/nft_socket.c
index 05ae5a338b6f..d64784d4bd02 100644
--- a/net/netfilter/nft_socket.c
+++ b/net/netfilter/nft_socket.c
@@ -40,6 +40,7 @@ static noinline bool
nft_sock_get_eval_cgroupv2(u32 *dest, struct sock *sk, const struct nft_pktinfo *pkt, u32 level)
{
struct cgroup *cgrp;
+ u64 cgid;
if (!sk_fullsock(sk))
return false;
@@ -48,8 +49,8 @@ nft_sock_get_eval_cgroupv2(u32 *dest, struct sock *sk, const struct nft_pktinfo
if (level > cgrp->level)
return false;
- memcpy(dest, &cgrp->ancestor_ids[level], sizeof(u64));
-
+ cgid = cgroup_id(cgrp->ancestors[level]);
+ memcpy(dest, &cgid, sizeof(u64));
return true;
}
#endif
diff --git a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c
index 292c430768b5..bd6a420acc8f 100644
--- a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c
+++ b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c
@@ -68,7 +68,7 @@ static inline int get_cgroup_v1_idx(__u32 *cgrps, int size)
break;
// convert cgroup-id to a map index
- cgrp_id = BPF_CORE_READ(cgrp, ancestor_ids[i]);
+ cgrp_id = BPF_CORE_READ(cgrp, ancestors[i], kn, id);
elem = bpf_map_lookup_elem(&cgrp_idx, &cgrp_id);
if (!elem)
continue;
^ permalink raw reply related [flat|nested] 28+ messages in thread[parent not found: <YuQvcCrcgNWbtndU-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org>]
* Re: [PATCH cgroup/for-5.20] cgroup: Replace cgroup->ancestor_ids[] with ->ancestors[] [not found] ` <YuQvcCrcgNWbtndU-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org> @ 2022-07-29 20:30 ` Namhyung Kim 2022-07-29 20:58 ` [PATCH v2 " Tejun Heo 1 sibling, 0 replies; 28+ messages in thread From: Namhyung Kim @ 2022-07-29 20:30 UTC (permalink / raw) To: Tejun Heo Cc: cgroups, Zefan Li, Michal Koutný, Christian Brauner, linux-kernel, Kernel Team, Pablo Neira Ayuso Hi Tejun, On Fri, Jul 29, 2022 at 12:06 PM Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> wrote: > > Every cgroup knows all its ancestors through its ->ancestor_ids[]. While all > the existing users only need the IDs, there's no advantage to remembering > the IDs instead of the pointers directly. Let's replace > cgroup->ancestor_ids[] with ->ancestors[] so that it's easy to access non-ID > ancestor fields. > > This patch shouldn't cause any behavior differences. > > Signed-off-by: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> > --- > Namhyung, I think the change in bperf_cgroup is correct but couldn't figure > out how to test it (normal perf build wouldn't compile it). Can you please > see whether it's correct? Looks ok to me. For the perf part, Acked-by: Namhyung Kim <namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> Note that you need to pass BUILD_BPF_SKEL=1 when you build perf to enable BPF stuff. IIRC Arnaldo will make it default at some point. Thanks, Namhyung > > Thanks. > > include/linux/cgroup-defs.h | 10 +++++----- > include/linux/cgroup.h | 2 +- > kernel/cgroup/cgroup.c | 7 +++---- > net/netfilter/nft_socket.c | 5 +++-- > tools/perf/util/bpf_skel/bperf_cgroup.bpf.c | 2 +- > 5 files changed, 13 insertions(+), 13 deletions(-) > > diff --git a/include/linux/cgroup-defs.h b/include/linux/cgroup-defs.h > index 63bf43c7ca3b..51fa744c2e9d 100644 > --- a/include/linux/cgroup-defs.h > +++ b/include/linux/cgroup-defs.h > @@ -379,7 +379,7 @@ struct cgroup { > /* > * The depth this cgroup is at. The root is at depth zero and each > * step down the hierarchy increments the level. This along with > - * ancestor_ids[] can determine whether a given cgroup is a > + * ancestors[] can determine whether a given cgroup is a > * descendant of another without traversing the hierarchy. > */ > int level; > @@ -499,8 +499,8 @@ struct cgroup { > /* Used to store internal freezer state */ > struct cgroup_freezer_state freezer; > > - /* ids of the ancestors at each level including self */ > - u64 ancestor_ids[]; > + /* All ancestors including self */ > + struct cgroup *ancestors[]; > }; > > /* > @@ -520,8 +520,8 @@ struct cgroup_root { > /* The root cgroup. Root is destroyed on its release. */ > struct cgroup cgrp; > > - /* for cgrp->ancestor_ids[0] */ > - u64 cgrp_ancestor_id_storage; > + /* for cgrp->ancestors[0] */ > + u64 cgrp_ancestor_storage; > > /* Number of cgroups in the hierarchy, used only for /proc/cgroups */ > atomic_t nr_cgrps; > diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h > index ed53bfe7c46c..5334b6134399 100644 > --- a/include/linux/cgroup.h > +++ b/include/linux/cgroup.h > @@ -574,7 +574,7 @@ static inline bool cgroup_is_descendant(struct cgroup *cgrp, > { > if (cgrp->root != ancestor->root || cgrp->level < ancestor->level) > return false; > - return cgrp->ancestor_ids[ancestor->level] == cgroup_id(ancestor); > + return cgrp->ancestors[ancestor->level] == ancestor; > } > > /** > diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c > index 85fa4c8587a8..ce587fe43dab 100644 > --- a/kernel/cgroup/cgroup.c > +++ b/kernel/cgroup/cgroup.c > @@ -2047,7 +2047,7 @@ int cgroup_setup_root(struct cgroup_root *root, u16 ss_mask) > } > root_cgrp->kn = kernfs_root_to_node(root->kf_root); > WARN_ON_ONCE(cgroup_ino(root_cgrp) != 1); > - root_cgrp->ancestor_ids[0] = cgroup_id(root_cgrp); > + root_cgrp->ancestors[0] = root_cgrp; > > ret = css_populate_dir(&root_cgrp->self); > if (ret) > @@ -5391,8 +5391,7 @@ static struct cgroup *cgroup_create(struct cgroup *parent, const char *name, > int ret; > > /* allocate the cgroup and its ID, 0 is reserved for the root */ > - cgrp = kzalloc(struct_size(cgrp, ancestor_ids, (level + 1)), > - GFP_KERNEL); > + cgrp = kzalloc(struct_size(cgrp, ancestors, (level + 1)), GFP_KERNEL); > if (!cgrp) > return ERR_PTR(-ENOMEM); > > @@ -5444,7 +5443,7 @@ static struct cgroup *cgroup_create(struct cgroup *parent, const char *name, > > spin_lock_irq(&css_set_lock); > for (tcgrp = cgrp; tcgrp; tcgrp = cgroup_parent(tcgrp)) { > - cgrp->ancestor_ids[tcgrp->level] = cgroup_id(tcgrp); > + cgrp->ancestors[tcgrp->level] = tcgrp; > > if (tcgrp != cgrp) { > tcgrp->nr_descendants++; > diff --git a/net/netfilter/nft_socket.c b/net/netfilter/nft_socket.c > index 05ae5a338b6f..d64784d4bd02 100644 > --- a/net/netfilter/nft_socket.c > +++ b/net/netfilter/nft_socket.c > @@ -40,6 +40,7 @@ static noinline bool > nft_sock_get_eval_cgroupv2(u32 *dest, struct sock *sk, const struct nft_pktinfo *pkt, u32 level) > { > struct cgroup *cgrp; > + u64 cgid; > > if (!sk_fullsock(sk)) > return false; > @@ -48,8 +49,8 @@ nft_sock_get_eval_cgroupv2(u32 *dest, struct sock *sk, const struct nft_pktinfo > if (level > cgrp->level) > return false; > > - memcpy(dest, &cgrp->ancestor_ids[level], sizeof(u64)); > - > + cgid = cgroup_id(cgrp->ancestors[level]); > + memcpy(dest, &cgid, sizeof(u64)); > return true; > } > #endif > diff --git a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > index 292c430768b5..bd6a420acc8f 100644 > --- a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > +++ b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > @@ -68,7 +68,7 @@ static inline int get_cgroup_v1_idx(__u32 *cgrps, int size) > break; > > // convert cgroup-id to a map index > - cgrp_id = BPF_CORE_READ(cgrp, ancestor_ids[i]); > + cgrp_id = BPF_CORE_READ(cgrp, ancestors[i], kn, id); > elem = bpf_map_lookup_elem(&cgrp_idx, &cgrp_id); > if (!elem) > continue; ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v2 cgroup/for-5.20] cgroup: Replace cgroup->ancestor_ids[] with ->ancestors[] [not found] ` <YuQvcCrcgNWbtndU-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org> 2022-07-29 20:30 ` Namhyung Kim @ 2022-07-29 20:58 ` Tejun Heo [not found] ` <YuRJ7uzKY5/fokH5-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org> 2022-07-29 23:10 ` [PATCH v3 " Tejun Heo 1 sibling, 2 replies; 28+ messages in thread From: Tejun Heo @ 2022-07-29 20:58 UTC (permalink / raw) To: cgroups-u79uwXL29TY76Z2rM5mHXA, Zefan Li, Michal Koutný, Christian Brauner Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-team-b10kYP2dOMg, Namhyung Kim, Pablo Neira Ayuso Every cgroup knows all its ancestors through its ->ancestor_ids[]. There's no advantage to remembering the IDs instead of the pointers directly and this makes the array useless for finding an actual ancestor cgroup forcing cgroup_ancestor() to iteratively walk up the hierarchy instead. Let's replace cgroup->ancestor_ids[] with ->ancestors[] and remove the walking-up from cgroup_ancestor(). This patch shouldn't cause user-visible behavior differences. v2: Update cgroup_ancestor() to use ->ancestors[]. Signed-off-by: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> Acked-by: Namhyung Kim <namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> --- include/linux/cgroup-defs.h | 10 +++++----- include/linux/cgroup.h | 8 +++----- kernel/cgroup/cgroup.c | 7 +++---- net/netfilter/nft_socket.c | 9 +++++---- tools/perf/util/bpf_skel/bperf_cgroup.bpf.c | 2 +- 5 files changed, 17 insertions(+), 19 deletions(-) diff --git a/include/linux/cgroup-defs.h b/include/linux/cgroup-defs.h index 63bf43c7ca3b..51fa744c2e9d 100644 --- a/include/linux/cgroup-defs.h +++ b/include/linux/cgroup-defs.h @@ -379,7 +379,7 @@ struct cgroup { /* * The depth this cgroup is at. The root is at depth zero and each * step down the hierarchy increments the level. This along with - * ancestor_ids[] can determine whether a given cgroup is a + * ancestors[] can determine whether a given cgroup is a * descendant of another without traversing the hierarchy. */ int level; @@ -499,8 +499,8 @@ struct cgroup { /* Used to store internal freezer state */ struct cgroup_freezer_state freezer; - /* ids of the ancestors at each level including self */ - u64 ancestor_ids[]; + /* All ancestors including self */ + struct cgroup *ancestors[]; }; /* @@ -520,8 +520,8 @@ struct cgroup_root { /* The root cgroup. Root is destroyed on its release. */ struct cgroup cgrp; - /* for cgrp->ancestor_ids[0] */ - u64 cgrp_ancestor_id_storage; + /* for cgrp->ancestors[0] */ + u64 cgrp_ancestor_storage; /* Number of cgroups in the hierarchy, used only for /proc/cgroups */ atomic_t nr_cgrps; diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index ed53bfe7c46c..4d143729b246 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h @@ -574,7 +574,7 @@ static inline bool cgroup_is_descendant(struct cgroup *cgrp, { if (cgrp->root != ancestor->root || cgrp->level < ancestor->level) return false; - return cgrp->ancestor_ids[ancestor->level] == cgroup_id(ancestor); + return cgrp->ancestors[ancestor->level] == ancestor; } /** @@ -591,11 +591,9 @@ static inline bool cgroup_is_descendant(struct cgroup *cgrp, static inline struct cgroup *cgroup_ancestor(struct cgroup *cgrp, int ancestor_level) { - if (cgrp->level < ancestor_level) + if (ancestor_level < 0 || ancestor_level > cgrp->level) return NULL; - while (cgrp && cgrp->level > ancestor_level) - cgrp = cgroup_parent(cgrp); - return cgrp; + return cgrp->ancestors[ancestor_level]; } /** diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index 85fa4c8587a8..ce587fe43dab 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -2047,7 +2047,7 @@ int cgroup_setup_root(struct cgroup_root *root, u16 ss_mask) } root_cgrp->kn = kernfs_root_to_node(root->kf_root); WARN_ON_ONCE(cgroup_ino(root_cgrp) != 1); - root_cgrp->ancestor_ids[0] = cgroup_id(root_cgrp); + root_cgrp->ancestors[0] = root_cgrp; ret = css_populate_dir(&root_cgrp->self); if (ret) @@ -5391,8 +5391,7 @@ static struct cgroup *cgroup_create(struct cgroup *parent, const char *name, int ret; /* allocate the cgroup and its ID, 0 is reserved for the root */ - cgrp = kzalloc(struct_size(cgrp, ancestor_ids, (level + 1)), - GFP_KERNEL); + cgrp = kzalloc(struct_size(cgrp, ancestors, (level + 1)), GFP_KERNEL); if (!cgrp) return ERR_PTR(-ENOMEM); @@ -5444,7 +5443,7 @@ static struct cgroup *cgroup_create(struct cgroup *parent, const char *name, spin_lock_irq(&css_set_lock); for (tcgrp = cgrp; tcgrp; tcgrp = cgroup_parent(tcgrp)) { - cgrp->ancestor_ids[tcgrp->level] = cgroup_id(tcgrp); + cgrp->ancestors[tcgrp->level] = tcgrp; if (tcgrp != cgrp) { tcgrp->nr_descendants++; diff --git a/net/netfilter/nft_socket.c b/net/netfilter/nft_socket.c index 05ae5a338b6f..d982a7c22a77 100644 --- a/net/netfilter/nft_socket.c +++ b/net/netfilter/nft_socket.c @@ -40,16 +40,17 @@ static noinline bool nft_sock_get_eval_cgroupv2(u32 *dest, struct sock *sk, const struct nft_pktinfo *pkt, u32 level) { struct cgroup *cgrp; + u64 cgid; if (!sk_fullsock(sk)) return false; - cgrp = sock_cgroup_ptr(&sk->sk_cgrp_data); - if (level > cgrp->level) + cgrp = cgroup_ancestor(sock_cgroup_ptr(&sk->sk_cgrp_data), level); + if (!cgrp) return false; - memcpy(dest, &cgrp->ancestor_ids[level], sizeof(u64)); - + cgid = cgroup_id(cgrp); + memcpy(dest, &cgid, sizeof(u64)); return true; } #endif diff --git a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c index 292c430768b5..bd6a420acc8f 100644 --- a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c +++ b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c @@ -68,7 +68,7 @@ static inline int get_cgroup_v1_idx(__u32 *cgrps, int size) break; // convert cgroup-id to a map index - cgrp_id = BPF_CORE_READ(cgrp, ancestor_ids[i]); + cgrp_id = BPF_CORE_READ(cgrp, ancestors[i], kn, id); elem = bpf_map_lookup_elem(&cgrp_idx, &cgrp_id); if (!elem) continue; ^ permalink raw reply related [flat|nested] 28+ messages in thread
[parent not found: <YuRJ7uzKY5/fokH5-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org>]
* Re: [PATCH v2 cgroup/for-5.20] cgroup: Replace cgroup->ancestor_ids[] with ->ancestors[] [not found] ` <YuRJ7uzKY5/fokH5-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org> @ 2022-07-29 22:42 ` Michal Koutný 2022-07-29 23:02 ` Tejun Heo 0 siblings, 1 reply; 28+ messages in thread From: Michal Koutný @ 2022-07-29 22:42 UTC (permalink / raw) To: Tejun Heo Cc: cgroups-u79uwXL29TY76Z2rM5mHXA, Zefan Li, Christian Brauner, linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-team-b10kYP2dOMg, Namhyung Kim, Pablo Neira Ayuso On Fri, Jul 29, 2022 at 10:58:22AM -1000, Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> wrote: > @@ -520,8 +520,8 @@ struct cgroup_root { > /* The root cgroup. Root is destroyed on its release. */ > struct cgroup cgrp; > > - /* for cgrp->ancestor_ids[0] */ > - u64 cgrp_ancestor_id_storage; > + /* for cgrp->ancestors[0] */ > + u64 cgrp_ancestor_storage; Just noticed, this member is (and was AFAICS) superfluous. Michal ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 cgroup/for-5.20] cgroup: Replace cgroup->ancestor_ids[] with ->ancestors[] 2022-07-29 22:42 ` Michal Koutný @ 2022-07-29 23:02 ` Tejun Heo 0 siblings, 0 replies; 28+ messages in thread From: Tejun Heo @ 2022-07-29 23:02 UTC (permalink / raw) To: Michal Koutný Cc: cgroups-u79uwXL29TY76Z2rM5mHXA, Zefan Li, Christian Brauner, linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-team-b10kYP2dOMg, Namhyung Kim, Pablo Neira Ayuso On Sat, Jul 30, 2022 at 12:42:09AM +0200, Michal Koutný wrote: > On Fri, Jul 29, 2022 at 10:58:22AM -1000, Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> wrote: > > @@ -520,8 +520,8 @@ struct cgroup_root { > > /* The root cgroup. Root is destroyed on its release. */ > > struct cgroup cgrp; > > > > - /* for cgrp->ancestor_ids[0] */ > > - u64 cgrp_ancestor_id_storage; > > + /* for cgrp->ancestors[0] */ > > + u64 cgrp_ancestor_storage; > > Just noticed, this member is (and was AFAICS) superfluous. I should have changed the type to struct cgroup * but that's the space into which cgroup_root->cgrp->ancestors[] stretch into. Thanks. -- tejun ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v3 cgroup/for-5.20] cgroup: Replace cgroup->ancestor_ids[] with ->ancestors[] 2022-07-29 20:58 ` [PATCH v2 " Tejun Heo [not found] ` <YuRJ7uzKY5/fokH5-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org> @ 2022-07-29 23:10 ` Tejun Heo 2022-08-15 21:17 ` Tejun Heo 1 sibling, 1 reply; 28+ messages in thread From: Tejun Heo @ 2022-07-29 23:10 UTC (permalink / raw) To: cgroups, Zefan Li, Michal Koutný, Christian Brauner Cc: linux-kernel, kernel-team, Namhyung Kim, Pablo Neira Ayuso Every cgroup knows all its ancestors through its ->ancestor_ids[]. There's no advantage to remembering the IDs instead of the pointers directly and this makes the array useless for finding an actual ancestor cgroup forcing cgroup_ancestor() to iteratively walk up the hierarchy instead. Let's replace cgroup->ancestor_ids[] with ->ancestors[] and remove the walking-up from cgroup_ancestor(). While at it, improve comments around cgroup_root->cgrp_ancestor_storage. This patch shouldn't cause user-visible behavior differences. v2: Update cgroup_ancestor() to use ->ancestors[]. v3: cgroup_root->cgrp_ancestor_storage's type is updated to match cgroup->ancestors[]. Better comments. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Namhyung Kim <namhyung@kernel.org> --- include/linux/cgroup-defs.h | 16 ++++++++++------ include/linux/cgroup.h | 8 +++----- kernel/cgroup/cgroup.c | 7 +++---- net/netfilter/nft_socket.c | 9 +++++---- tools/perf/util/bpf_skel/bperf_cgroup.bpf.c | 2 +- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/include/linux/cgroup-defs.h b/include/linux/cgroup-defs.h index 63bf43c7ca3b..52a3c47c89bc 100644 --- a/include/linux/cgroup-defs.h +++ b/include/linux/cgroup-defs.h @@ -379,7 +379,7 @@ struct cgroup { /* * The depth this cgroup is at. The root is at depth zero and each * step down the hierarchy increments the level. This along with - * ancestor_ids[] can determine whether a given cgroup is a + * ancestors[] can determine whether a given cgroup is a * descendant of another without traversing the hierarchy. */ int level; @@ -499,8 +499,8 @@ struct cgroup { /* Used to store internal freezer state */ struct cgroup_freezer_state freezer; - /* ids of the ancestors at each level including self */ - u64 ancestor_ids[]; + /* All ancestors including self */ + struct cgroup *ancestors[]; }; /* @@ -517,11 +517,15 @@ struct cgroup_root { /* Unique id for this hierarchy. */ int hierarchy_id; - /* The root cgroup. Root is destroyed on its release. */ + /* + * The root cgroup. The containing cgroup_root will be destroyed on its + * release. cgrp->ancestors[0] will be used overflowing into the + * following field. cgrp_ancestor_storage must immediately follow. + */ struct cgroup cgrp; - /* for cgrp->ancestor_ids[0] */ - u64 cgrp_ancestor_id_storage; + /* must follow cgrp for cgrp->ancestors[0], see above */ + struct cgroup *cgrp_ancestor_storage; /* Number of cgroups in the hierarchy, used only for /proc/cgroups */ atomic_t nr_cgrps; diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index ed53bfe7c46c..4d143729b246 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h @@ -574,7 +574,7 @@ static inline bool cgroup_is_descendant(struct cgroup *cgrp, { if (cgrp->root != ancestor->root || cgrp->level < ancestor->level) return false; - return cgrp->ancestor_ids[ancestor->level] == cgroup_id(ancestor); + return cgrp->ancestors[ancestor->level] == ancestor; } /** @@ -591,11 +591,9 @@ static inline bool cgroup_is_descendant(struct cgroup *cgrp, static inline struct cgroup *cgroup_ancestor(struct cgroup *cgrp, int ancestor_level) { - if (cgrp->level < ancestor_level) + if (ancestor_level < 0 || ancestor_level > cgrp->level) return NULL; - while (cgrp && cgrp->level > ancestor_level) - cgrp = cgroup_parent(cgrp); - return cgrp; + return cgrp->ancestors[ancestor_level]; } /** diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index 85fa4c8587a8..ce587fe43dab 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -2047,7 +2047,7 @@ int cgroup_setup_root(struct cgroup_root *root, u16 ss_mask) } root_cgrp->kn = kernfs_root_to_node(root->kf_root); WARN_ON_ONCE(cgroup_ino(root_cgrp) != 1); - root_cgrp->ancestor_ids[0] = cgroup_id(root_cgrp); + root_cgrp->ancestors[0] = root_cgrp; ret = css_populate_dir(&root_cgrp->self); if (ret) @@ -5391,8 +5391,7 @@ static struct cgroup *cgroup_create(struct cgroup *parent, const char *name, int ret; /* allocate the cgroup and its ID, 0 is reserved for the root */ - cgrp = kzalloc(struct_size(cgrp, ancestor_ids, (level + 1)), - GFP_KERNEL); + cgrp = kzalloc(struct_size(cgrp, ancestors, (level + 1)), GFP_KERNEL); if (!cgrp) return ERR_PTR(-ENOMEM); @@ -5444,7 +5443,7 @@ static struct cgroup *cgroup_create(struct cgroup *parent, const char *name, spin_lock_irq(&css_set_lock); for (tcgrp = cgrp; tcgrp; tcgrp = cgroup_parent(tcgrp)) { - cgrp->ancestor_ids[tcgrp->level] = cgroup_id(tcgrp); + cgrp->ancestors[tcgrp->level] = tcgrp; if (tcgrp != cgrp) { tcgrp->nr_descendants++; diff --git a/net/netfilter/nft_socket.c b/net/netfilter/nft_socket.c index 05ae5a338b6f..d982a7c22a77 100644 --- a/net/netfilter/nft_socket.c +++ b/net/netfilter/nft_socket.c @@ -40,16 +40,17 @@ static noinline bool nft_sock_get_eval_cgroupv2(u32 *dest, struct sock *sk, const struct nft_pktinfo *pkt, u32 level) { struct cgroup *cgrp; + u64 cgid; if (!sk_fullsock(sk)) return false; - cgrp = sock_cgroup_ptr(&sk->sk_cgrp_data); - if (level > cgrp->level) + cgrp = cgroup_ancestor(sock_cgroup_ptr(&sk->sk_cgrp_data), level); + if (!cgrp) return false; - memcpy(dest, &cgrp->ancestor_ids[level], sizeof(u64)); - + cgid = cgroup_id(cgrp); + memcpy(dest, &cgid, sizeof(u64)); return true; } #endif diff --git a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c index 292c430768b5..bd6a420acc8f 100644 --- a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c +++ b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c @@ -68,7 +68,7 @@ static inline int get_cgroup_v1_idx(__u32 *cgrps, int size) break; // convert cgroup-id to a map index - cgrp_id = BPF_CORE_READ(cgrp, ancestor_ids[i]); + cgrp_id = BPF_CORE_READ(cgrp, ancestors[i], kn, id); elem = bpf_map_lookup_elem(&cgrp_idx, &cgrp_id); if (!elem) continue; ^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH v3 cgroup/for-5.20] cgroup: Replace cgroup->ancestor_ids[] with ->ancestors[] 2022-07-29 23:10 ` [PATCH v3 " Tejun Heo @ 2022-08-15 21:17 ` Tejun Heo [not found] ` <Yvq33G14AU0cuswB-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org> 0 siblings, 1 reply; 28+ messages in thread From: Tejun Heo @ 2022-08-15 21:17 UTC (permalink / raw) To: cgroups, Zefan Li, Michal Koutný, Christian Brauner Cc: linux-kernel, kernel-team, Namhyung Kim, Pablo Neira Ayuso On Fri, Jul 29, 2022 at 01:10:16PM -1000, Tejun Heo wrote: > Every cgroup knows all its ancestors through its ->ancestor_ids[]. There's > no advantage to remembering the IDs instead of the pointers directly and > this makes the array useless for finding an actual ancestor cgroup forcing > cgroup_ancestor() to iteratively walk up the hierarchy instead. Let's > replace cgroup->ancestor_ids[] with ->ancestors[] and remove the walking-up > from cgroup_ancestor(). > > While at it, improve comments around cgroup_root->cgrp_ancestor_storage. > > This patch shouldn't cause user-visible behavior differences. > > v2: Update cgroup_ancestor() to use ->ancestors[]. > > v3: cgroup_root->cgrp_ancestor_storage's type is updated to match > cgroup->ancestors[]. Better comments. > > Signed-off-by: Tejun Heo <tj@kernel.org> > Acked-by: Namhyung Kim <namhyung@kernel.org> Applied to cgroup/for-6.1. -- tejun ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <Yvq33G14AU0cuswB-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org>]
* Re: [PATCH v3 cgroup/for-5.20] cgroup: Replace cgroup->ancestor_ids[] with ->ancestors[] [not found] ` <Yvq33G14AU0cuswB-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org> @ 2022-09-22 4:05 ` Namhyung Kim [not found] ` <CAM9d7cjQ20a01YoZi=o-_7HT6TzR0TZgtpscKNvRrMq2yqV1Og-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 0 siblings, 1 reply; 28+ messages in thread From: Namhyung Kim @ 2022-09-22 4:05 UTC (permalink / raw) To: Tejun Heo Cc: cgroups, Zefan Li, Michal Koutný, Christian Brauner, linux-kernel, Kernel Team, Pablo Neira Ayuso, Arnaldo Carvalho de Melo, Jiri Olsa Hi Tejun, On Mon, Aug 15, 2022 at 2:17 PM Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> wrote: > > On Fri, Jul 29, 2022 at 01:10:16PM -1000, Tejun Heo wrote: > > Every cgroup knows all its ancestors through its ->ancestor_ids[]. There's > > no advantage to remembering the IDs instead of the pointers directly and > > this makes the array useless for finding an actual ancestor cgroup forcing > > cgroup_ancestor() to iteratively walk up the hierarchy instead. Let's > > replace cgroup->ancestor_ids[] with ->ancestors[] and remove the walking-up > > from cgroup_ancestor(). > > > > While at it, improve comments around cgroup_root->cgrp_ancestor_storage. > > > > This patch shouldn't cause user-visible behavior differences. > > > > v2: Update cgroup_ancestor() to use ->ancestors[]. > > > > v3: cgroup_root->cgrp_ancestor_storage's type is updated to match > > cgroup->ancestors[]. Better comments. > > > > Signed-off-by: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> > > Acked-by: Namhyung Kim <namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> > > Applied to cgroup/for-6.1. I've realized that perf stat change needs backward compatibility. Will send a fix soon. Thanks, Namhyung ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <CAM9d7cjQ20a01YoZi=o-_7HT6TzR0TZgtpscKNvRrMq2yqV1Og-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>]
* [PATCH] perf stat: Support old kernels for bperf cgroup counting [not found] ` <CAM9d7cjQ20a01YoZi=o-_7HT6TzR0TZgtpscKNvRrMq2yqV1Og-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> @ 2022-09-22 4:14 ` Namhyung Kim 2022-09-24 3:22 ` Tejun Heo ` (4 more replies) 0 siblings, 5 replies; 28+ messages in thread From: Namhyung Kim @ 2022-09-22 4:14 UTC (permalink / raw) To: Tejun Heo, Zefan Li, Johannes Weiner Cc: cgroups-u79uwXL29TY76Z2rM5mHXA, Arnaldo Carvalho de Melo, Jiri Olsa, LKML, linux-perf-users-u79uwXL29TY76Z2rM5mHXA, Song Liu, bpf-u79uwXL29TY76Z2rM5mHXA The recent change in the cgroup will break the backward compatiblity in the BPF program. It should support both old and new kernels using BPF CO-RE technique. Like the task_struct->__state handling in the offcpu analysis, we can check the field name in the cgroup struct. Signed-off-by: Namhyung Kim <namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> --- Arnaldo, I think this should go through the cgroup tree since it depends on the earlier change there. I don't think it'd conflict with other perf changes but please let me know if you see any trouble, thanks! tools/perf/util/bpf_skel/bperf_cgroup.bpf.c | 29 ++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c index 488bd398f01d..4fe61043de04 100644 --- a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c +++ b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c @@ -43,12 +43,39 @@ struct { __uint(value_size, sizeof(struct bpf_perf_event_value)); } cgrp_readings SEC(".maps"); +/* new kernel cgroup definition */ +struct cgroup___new { + int level; + struct cgroup *ancestors[]; +} __attribute__((preserve_access_index)); + +/* old kernel cgroup definition */ +struct cgroup___old { + int level; + u64 ancestor_ids[]; +} __attribute__((preserve_access_index)); + const volatile __u32 num_events = 1; const volatile __u32 num_cpus = 1; int enabled = 0; int use_cgroup_v2 = 0; +static inline __u64 get_cgroup_v1_ancestor_id(struct cgroup *cgrp, int level) +{ + /* recast pointer to capture new type for compiler */ + struct cgroup___new *cgrp_new = (void *)cgrp; + + if (bpf_core_field_exists(cgrp_new->ancestors)) { + return BPF_CORE_READ(cgrp_new, ancestors[level], kn, id); + } else { + /* recast pointer to capture old type for compiler */ + struct cgroup___old *cgrp_old = (void *)cgrp; + + return BPF_CORE_READ(cgrp_old, ancestor_ids[level]); + } +} + static inline int get_cgroup_v1_idx(__u32 *cgrps, int size) { struct task_struct *p = (void *)bpf_get_current_task(); @@ -70,7 +97,7 @@ static inline int get_cgroup_v1_idx(__u32 *cgrps, int size) break; // convert cgroup-id to a map index - cgrp_id = BPF_CORE_READ(cgrp, ancestors[i], kn, id); + cgrp_id = get_cgroup_v1_ancestor_id(cgrp, i); elem = bpf_map_lookup_elem(&cgrp_idx, &cgrp_id); if (!elem) continue; -- 2.37.3.968.ga6b4b080e4-goog ^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH] perf stat: Support old kernels for bperf cgroup counting 2022-09-22 4:14 ` [PATCH] perf stat: Support old kernels for bperf cgroup counting Namhyung Kim @ 2022-09-24 3:22 ` Tejun Heo [not found] ` <Yy54CwK84JY/o+Ci-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org> 2022-09-30 21:43 ` Jiri Olsa ` (3 subsequent siblings) 4 siblings, 1 reply; 28+ messages in thread From: Tejun Heo @ 2022-09-24 3:22 UTC (permalink / raw) To: Namhyung Kim Cc: Zefan Li, Johannes Weiner, cgroups, Arnaldo Carvalho de Melo, Jiri Olsa, LKML, linux-perf-users, Song Liu, bpf On Wed, Sep 21, 2022 at 09:14:35PM -0700, Namhyung Kim wrote: > The recent change in the cgroup will break the backward compatiblity in > the BPF program. It should support both old and new kernels using BPF > CO-RE technique. > > Like the task_struct->__state handling in the offcpu analysis, we can > check the field name in the cgroup struct. > > Signed-off-by: Namhyung Kim <namhyung@kernel.org> > --- > Arnaldo, I think this should go through the cgroup tree since it depends > on the earlier change there. I don't think it'd conflict with other > perf changes but please let me know if you see any trouble, thanks! FWIW, looks fine to me and I'd be happy to route this through the cgroup tree once it gets acked. Thanks. -- tejun ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <Yy54CwK84JY/o+Ci-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org>]
* Re: [PATCH] perf stat: Support old kernels for bperf cgroup counting [not found] ` <Yy54CwK84JY/o+Ci-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org> @ 2022-09-30 20:30 ` Namhyung Kim 0 siblings, 0 replies; 28+ messages in thread From: Namhyung Kim @ 2022-09-30 20:30 UTC (permalink / raw) To: Tejun Heo, Jiri Olsa, Song Liu, Arnaldo Carvalho de Melo Cc: Zefan Li, Johannes Weiner, cgroups, LKML, linux-perf-users, bpf On Fri, Sep 23, 2022 at 8:22 PM Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> wrote: > > On Wed, Sep 21, 2022 at 09:14:35PM -0700, Namhyung Kim wrote: > > The recent change in the cgroup will break the backward compatiblity in > > the BPF program. It should support both old and new kernels using BPF > > CO-RE technique. > > > > Like the task_struct->__state handling in the offcpu analysis, we can > > check the field name in the cgroup struct. > > > > Signed-off-by: Namhyung Kim <namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> > > --- > > Arnaldo, I think this should go through the cgroup tree since it depends > > on the earlier change there. I don't think it'd conflict with other > > perf changes but please let me know if you see any trouble, thanks! > > FWIW, looks fine to me and I'd be happy to route this through the cgroup > tree once it gets acked. Thanks Tejun! Can any perf + bpf folks take a look? ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH] perf stat: Support old kernels for bperf cgroup counting 2022-09-22 4:14 ` [PATCH] perf stat: Support old kernels for bperf cgroup counting Namhyung Kim 2022-09-24 3:22 ` Tejun Heo @ 2022-09-30 21:43 ` Jiri Olsa 2022-09-30 21:56 ` Namhyung Kim 2022-09-30 22:48 ` Andrii Nakryiko ` (2 subsequent siblings) 4 siblings, 1 reply; 28+ messages in thread From: Jiri Olsa @ 2022-09-30 21:43 UTC (permalink / raw) To: Namhyung Kim Cc: Tejun Heo, Zefan Li, Johannes Weiner, cgroups, Arnaldo Carvalho de Melo, LKML, linux-perf-users, Song Liu, bpf On Wed, Sep 21, 2022 at 09:14:35PM -0700, Namhyung Kim wrote: > The recent change in the cgroup will break the backward compatiblity in > the BPF program. It should support both old and new kernels using BPF > CO-RE technique. > > Like the task_struct->__state handling in the offcpu analysis, we can > check the field name in the cgroup struct. > > Signed-off-by: Namhyung Kim <namhyung@kernel.org> > --- > Arnaldo, I think this should go through the cgroup tree since it depends > on the earlier change there. I don't think it'd conflict with other > perf changes but please let me know if you see any trouble, thanks! could you please paste the cgroup tree link? thanks, jirka > > tools/perf/util/bpf_skel/bperf_cgroup.bpf.c | 29 ++++++++++++++++++++- > 1 file changed, 28 insertions(+), 1 deletion(-) > > diff --git a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > index 488bd398f01d..4fe61043de04 100644 > --- a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > +++ b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > @@ -43,12 +43,39 @@ struct { > __uint(value_size, sizeof(struct bpf_perf_event_value)); > } cgrp_readings SEC(".maps"); > > +/* new kernel cgroup definition */ > +struct cgroup___new { > + int level; > + struct cgroup *ancestors[]; > +} __attribute__((preserve_access_index)); > + > +/* old kernel cgroup definition */ > +struct cgroup___old { > + int level; > + u64 ancestor_ids[]; > +} __attribute__((preserve_access_index)); > + > const volatile __u32 num_events = 1; > const volatile __u32 num_cpus = 1; > > int enabled = 0; > int use_cgroup_v2 = 0; > > +static inline __u64 get_cgroup_v1_ancestor_id(struct cgroup *cgrp, int level) > +{ > + /* recast pointer to capture new type for compiler */ > + struct cgroup___new *cgrp_new = (void *)cgrp; > + > + if (bpf_core_field_exists(cgrp_new->ancestors)) { > + return BPF_CORE_READ(cgrp_new, ancestors[level], kn, id); > + } else { > + /* recast pointer to capture old type for compiler */ > + struct cgroup___old *cgrp_old = (void *)cgrp; > + > + return BPF_CORE_READ(cgrp_old, ancestor_ids[level]); > + } > +} > + > static inline int get_cgroup_v1_idx(__u32 *cgrps, int size) > { > struct task_struct *p = (void *)bpf_get_current_task(); > @@ -70,7 +97,7 @@ static inline int get_cgroup_v1_idx(__u32 *cgrps, int size) > break; > > // convert cgroup-id to a map index > - cgrp_id = BPF_CORE_READ(cgrp, ancestors[i], kn, id); > + cgrp_id = get_cgroup_v1_ancestor_id(cgrp, i); > elem = bpf_map_lookup_elem(&cgrp_idx, &cgrp_id); > if (!elem) > continue; > -- > 2.37.3.968.ga6b4b080e4-goog > ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH] perf stat: Support old kernels for bperf cgroup counting 2022-09-30 21:43 ` Jiri Olsa @ 2022-09-30 21:56 ` Namhyung Kim [not found] ` <CAM9d7cjKaZvWQUwGwoTLNzAgHS7ndL_V_5+O+WqMUvuHJ7cWNg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 0 siblings, 1 reply; 28+ messages in thread From: Namhyung Kim @ 2022-09-30 21:56 UTC (permalink / raw) To: Jiri Olsa Cc: Tejun Heo, Zefan Li, Johannes Weiner, cgroups, Arnaldo Carvalho de Melo, LKML, linux-perf-users, Song Liu, bpf Hi Jiri, On Fri, Sep 30, 2022 at 2:44 PM Jiri Olsa <olsajiri-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > On Wed, Sep 21, 2022 at 09:14:35PM -0700, Namhyung Kim wrote: > > The recent change in the cgroup will break the backward compatiblity in > > the BPF program. It should support both old and new kernels using BPF > > CO-RE technique. > > > > Like the task_struct->__state handling in the offcpu analysis, we can > > check the field name in the cgroup struct. > > > > Signed-off-by: Namhyung Kim <namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> > > --- > > Arnaldo, I think this should go through the cgroup tree since it depends > > on the earlier change there. I don't think it'd conflict with other > > perf changes but please let me know if you see any trouble, thanks! > > could you please paste the cgroup tree link? Do you mean this? https://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git Thanks,. Namhyung ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <CAM9d7cjKaZvWQUwGwoTLNzAgHS7ndL_V_5+O+WqMUvuHJ7cWNg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>]
* Re: [PATCH] perf stat: Support old kernels for bperf cgroup counting [not found] ` <CAM9d7cjKaZvWQUwGwoTLNzAgHS7ndL_V_5+O+WqMUvuHJ7cWNg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> @ 2022-09-30 22:00 ` Arnaldo Carvalho de Melo [not found] ` <88915C51-33CD-49A4-A9E0-F5F5ECDEA0C7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2022-10-01 13:57 ` Jiri Olsa 1 sibling, 1 reply; 28+ messages in thread From: Arnaldo Carvalho de Melo @ 2022-09-30 22:00 UTC (permalink / raw) To: Namhyung Kim, Jiri Olsa Cc: Tejun Heo, Zefan Li, Johannes Weiner, cgroups, Arnaldo Carvalho de Melo, LKML, linux-perf-users, Song Liu, bpf On September 30, 2022 6:56:40 PM GMT-03:00, Namhyung Kim <namhyung@kernel.org> wrote: >Hi Jiri, > >On Fri, Sep 30, 2022 at 2:44 PM Jiri Olsa <olsajiri@gmail.com> wrote: >> >> On Wed, Sep 21, 2022 at 09:14:35PM -0700, Namhyung Kim wrote: >> > The recent change in the cgroup will break the backward compatiblity in >> > the BPF program. It should support both old and new kernels using BPF >> > CO-RE technique. >> > >> > Like the task_struct->__state handling in the offcpu analysis, we can >> > check the field name in the cgroup struct. >> > >> > Signed-off-by: Namhyung Kim <namhyung@kernel.org> >> > --- >> > Arnaldo, I think this should go through the cgroup tree since it depends >> > on the earlier change there. I don't think it'd conflict with other >> > perf changes but please let me know if you see any trouble, thanks! >> >> could you please paste the cgroup tree link? > >Do you mean this? > > https://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git > Which branch and cset in that tree does you perf skel depends on? - Arnaldo >Thanks,. >Namhyung ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <88915C51-33CD-49A4-A9E0-F5F5ECDEA0C7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH] perf stat: Support old kernels for bperf cgroup counting [not found] ` <88915C51-33CD-49A4-A9E0-F5F5ECDEA0C7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2022-09-30 22:11 ` Namhyung Kim 0 siblings, 0 replies; 28+ messages in thread From: Namhyung Kim @ 2022-09-30 22:11 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Jiri Olsa, Tejun Heo, Zefan Li, Johannes Weiner, cgroups, Arnaldo Carvalho de Melo, LKML, linux-perf-users, Song Liu, bpf On Fri, Sep 30, 2022 at 3:00 PM Arnaldo Carvalho de Melo <arnaldo.melo-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > On September 30, 2022 6:56:40 PM GMT-03:00, Namhyung Kim <namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> wrote: > >Hi Jiri, > > > >On Fri, Sep 30, 2022 at 2:44 PM Jiri Olsa <olsajiri-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > >> > >> On Wed, Sep 21, 2022 at 09:14:35PM -0700, Namhyung Kim wrote: > >> > The recent change in the cgroup will break the backward compatiblity in > >> > the BPF program. It should support both old and new kernels using BPF > >> > CO-RE technique. > >> > > >> > Like the task_struct->__state handling in the offcpu analysis, we can > >> > check the field name in the cgroup struct. > >> > > >> > Signed-off-by: Namhyung Kim <namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> > >> > --- > >> > Arnaldo, I think this should go through the cgroup tree since it depends > >> > on the earlier change there. I don't think it'd conflict with other > >> > perf changes but please let me know if you see any trouble, thanks! > >> > >> could you please paste the cgroup tree link? > > > >Do you mean this? > > > > https://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git > > > > > Which branch and cset in that tree does you perf skel depends on? I believe it's for-6.1 and the cset is in https://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git/commit/?h=for-6.1&id=7f203bc89eb66d6afde7eae91347fc0352090cc3 Thanks, Namhyung ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH] perf stat: Support old kernels for bperf cgroup counting [not found] ` <CAM9d7cjKaZvWQUwGwoTLNzAgHS7ndL_V_5+O+WqMUvuHJ7cWNg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2022-09-30 22:00 ` Arnaldo Carvalho de Melo @ 2022-10-01 13:57 ` Jiri Olsa 1 sibling, 0 replies; 28+ messages in thread From: Jiri Olsa @ 2022-10-01 13:57 UTC (permalink / raw) To: Namhyung Kim Cc: Jiri Olsa, Tejun Heo, Zefan Li, Johannes Weiner, cgroups, Arnaldo Carvalho de Melo, LKML, linux-perf-users, Song Liu, bpf On Fri, Sep 30, 2022 at 02:56:40PM -0700, Namhyung Kim wrote: > Hi Jiri, > > On Fri, Sep 30, 2022 at 2:44 PM Jiri Olsa <olsajiri-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > On Wed, Sep 21, 2022 at 09:14:35PM -0700, Namhyung Kim wrote: > > > The recent change in the cgroup will break the backward compatiblity in > > > the BPF program. It should support both old and new kernels using BPF > > > CO-RE technique. > > > > > > Like the task_struct->__state handling in the offcpu analysis, we can > > > check the field name in the cgroup struct. > > > > > > Signed-off-by: Namhyung Kim <namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> > > > --- > > > Arnaldo, I think this should go through the cgroup tree since it depends > > > on the earlier change there. I don't think it'd conflict with other > > > perf changes but please let me know if you see any trouble, thanks! > > > > could you please paste the cgroup tree link? > > Do you mean this? > > https://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git yea, wanted to try that.. I cherry-picked the 7f203bc89eb6 ;-) thanks, jirka > > Thanks,. > Namhyung ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH] perf stat: Support old kernels for bperf cgroup counting 2022-09-22 4:14 ` [PATCH] perf stat: Support old kernels for bperf cgroup counting Namhyung Kim 2022-09-24 3:22 ` Tejun Heo 2022-09-30 21:43 ` Jiri Olsa @ 2022-09-30 22:48 ` Andrii Nakryiko 2022-10-01 2:31 ` Namhyung Kim [not found] ` <20220922041435.709119-1-namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> 2022-10-10 23:59 ` Tejun Heo 4 siblings, 1 reply; 28+ messages in thread From: Andrii Nakryiko @ 2022-09-30 22:48 UTC (permalink / raw) To: Namhyung Kim Cc: Tejun Heo, Zefan Li, Johannes Weiner, cgroups, Arnaldo Carvalho de Melo, Jiri Olsa, LKML, linux-perf-users, Song Liu, bpf On Wed, Sep 21, 2022 at 9:21 PM Namhyung Kim <namhyung@kernel.org> wrote: > > The recent change in the cgroup will break the backward compatiblity in > the BPF program. It should support both old and new kernels using BPF > CO-RE technique. > > Like the task_struct->__state handling in the offcpu analysis, we can > check the field name in the cgroup struct. > > Signed-off-by: Namhyung Kim <namhyung@kernel.org> > --- > Arnaldo, I think this should go through the cgroup tree since it depends > on the earlier change there. I don't think it'd conflict with other > perf changes but please let me know if you see any trouble, thanks! > > tools/perf/util/bpf_skel/bperf_cgroup.bpf.c | 29 ++++++++++++++++++++- > 1 file changed, 28 insertions(+), 1 deletion(-) > > diff --git a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > index 488bd398f01d..4fe61043de04 100644 > --- a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > +++ b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > @@ -43,12 +43,39 @@ struct { > __uint(value_size, sizeof(struct bpf_perf_event_value)); > } cgrp_readings SEC(".maps"); > > +/* new kernel cgroup definition */ > +struct cgroup___new { > + int level; > + struct cgroup *ancestors[]; > +} __attribute__((preserve_access_index)); > + > +/* old kernel cgroup definition */ > +struct cgroup___old { > + int level; > + u64 ancestor_ids[]; > +} __attribute__((preserve_access_index)); > + > const volatile __u32 num_events = 1; > const volatile __u32 num_cpus = 1; > > int enabled = 0; > int use_cgroup_v2 = 0; > > +static inline __u64 get_cgroup_v1_ancestor_id(struct cgroup *cgrp, int level) > +{ > + /* recast pointer to capture new type for compiler */ > + struct cgroup___new *cgrp_new = (void *)cgrp; > + > + if (bpf_core_field_exists(cgrp_new->ancestors)) { > + return BPF_CORE_READ(cgrp_new, ancestors[level], kn, id); have you checked generated BPF code for this ancestors[level] access? I'd expect CO-RE relocation for finding ancestors offset and then just normal + level * 8 arithmetic, but would be nice to confirm. Apart from this, looks good to me: Acked-by: Andrii Nakryiko <andrii@kernel.org> > + } else { > + /* recast pointer to capture old type for compiler */ > + struct cgroup___old *cgrp_old = (void *)cgrp; > + > + return BPF_CORE_READ(cgrp_old, ancestor_ids[level]); > + } > +} > + > static inline int get_cgroup_v1_idx(__u32 *cgrps, int size) > { > struct task_struct *p = (void *)bpf_get_current_task(); > @@ -70,7 +97,7 @@ static inline int get_cgroup_v1_idx(__u32 *cgrps, int size) > break; > > // convert cgroup-id to a map index > - cgrp_id = BPF_CORE_READ(cgrp, ancestors[i], kn, id); > + cgrp_id = get_cgroup_v1_ancestor_id(cgrp, i); > elem = bpf_map_lookup_elem(&cgrp_idx, &cgrp_id); > if (!elem) > continue; > -- > 2.37.3.968.ga6b4b080e4-goog > ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH] perf stat: Support old kernels for bperf cgroup counting 2022-09-30 22:48 ` Andrii Nakryiko @ 2022-10-01 2:31 ` Namhyung Kim [not found] ` <CAM9d7ch8RUgf8V1hi=ccgV84XSfujuWtUKKgre8eQdGmtdiFLA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 0 siblings, 1 reply; 28+ messages in thread From: Namhyung Kim @ 2022-10-01 2:31 UTC (permalink / raw) To: Andrii Nakryiko Cc: Tejun Heo, Zefan Li, Johannes Weiner, cgroups, Arnaldo Carvalho de Melo, Jiri Olsa, LKML, linux-perf-users, Song Liu, bpf Hello, On Fri, Sep 30, 2022 at 3:48 PM Andrii Nakryiko <andrii.nakryiko@gmail.com> wrote: > > On Wed, Sep 21, 2022 at 9:21 PM Namhyung Kim <namhyung@kernel.org> wrote: > > > > The recent change in the cgroup will break the backward compatiblity in > > the BPF program. It should support both old and new kernels using BPF > > CO-RE technique. > > > > Like the task_struct->__state handling in the offcpu analysis, we can > > check the field name in the cgroup struct. > > > > Signed-off-by: Namhyung Kim <namhyung@kernel.org> > > --- > > Arnaldo, I think this should go through the cgroup tree since it depends > > on the earlier change there. I don't think it'd conflict with other > > perf changes but please let me know if you see any trouble, thanks! > > > > tools/perf/util/bpf_skel/bperf_cgroup.bpf.c | 29 ++++++++++++++++++++- > > 1 file changed, 28 insertions(+), 1 deletion(-) > > > > diff --git a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > > index 488bd398f01d..4fe61043de04 100644 > > --- a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > > +++ b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > > @@ -43,12 +43,39 @@ struct { > > __uint(value_size, sizeof(struct bpf_perf_event_value)); > > } cgrp_readings SEC(".maps"); > > > > +/* new kernel cgroup definition */ > > +struct cgroup___new { > > + int level; > > + struct cgroup *ancestors[]; > > +} __attribute__((preserve_access_index)); > > + > > +/* old kernel cgroup definition */ > > +struct cgroup___old { > > + int level; > > + u64 ancestor_ids[]; > > +} __attribute__((preserve_access_index)); > > + > > const volatile __u32 num_events = 1; > > const volatile __u32 num_cpus = 1; > > > > int enabled = 0; > > int use_cgroup_v2 = 0; > > > > +static inline __u64 get_cgroup_v1_ancestor_id(struct cgroup *cgrp, int level) > > +{ > > + /* recast pointer to capture new type for compiler */ > > + struct cgroup___new *cgrp_new = (void *)cgrp; > > + > > + if (bpf_core_field_exists(cgrp_new->ancestors)) { > > + return BPF_CORE_READ(cgrp_new, ancestors[level], kn, id); > > have you checked generated BPF code for this ancestors[level] access? > I'd expect CO-RE relocation for finding ancestors offset and then just > normal + level * 8 arithmetic, but would be nice to confirm. Apart > from this, looks good to me: > > Acked-by: Andrii Nakryiko <andrii@kernel.org> Thanks for your review! How can I check the generated code? Do you have something works with skeletons or do I have to save the BPF object somehow during the build? Thanks, Namhyung ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <CAM9d7ch8RUgf8V1hi=ccgV84XSfujuWtUKKgre8eQdGmtdiFLA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>]
* Re: [PATCH] perf stat: Support old kernels for bperf cgroup counting [not found] ` <CAM9d7ch8RUgf8V1hi=ccgV84XSfujuWtUKKgre8eQdGmtdiFLA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> @ 2022-10-05 22:36 ` Andrii Nakryiko 0 siblings, 0 replies; 28+ messages in thread From: Andrii Nakryiko @ 2022-10-05 22:36 UTC (permalink / raw) To: Namhyung Kim Cc: Tejun Heo, Zefan Li, Johannes Weiner, cgroups, Arnaldo Carvalho de Melo, Jiri Olsa, LKML, linux-perf-users, Song Liu, bpf On Fri, Sep 30, 2022 at 7:31 PM Namhyung Kim <namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> wrote: > > Hello, > > On Fri, Sep 30, 2022 at 3:48 PM Andrii Nakryiko > <andrii.nakryiko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > On Wed, Sep 21, 2022 at 9:21 PM Namhyung Kim <namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> wrote: > > > > > > The recent change in the cgroup will break the backward compatiblity in > > > the BPF program. It should support both old and new kernels using BPF > > > CO-RE technique. > > > > > > Like the task_struct->__state handling in the offcpu analysis, we can > > > check the field name in the cgroup struct. > > > > > > Signed-off-by: Namhyung Kim <namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> > > > --- > > > Arnaldo, I think this should go through the cgroup tree since it depends > > > on the earlier change there. I don't think it'd conflict with other > > > perf changes but please let me know if you see any trouble, thanks! > > > > > > tools/perf/util/bpf_skel/bperf_cgroup.bpf.c | 29 ++++++++++++++++++++- > > > 1 file changed, 28 insertions(+), 1 deletion(-) > > > > > > diff --git a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > > > index 488bd398f01d..4fe61043de04 100644 > > > --- a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > > > +++ b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > > > @@ -43,12 +43,39 @@ struct { > > > __uint(value_size, sizeof(struct bpf_perf_event_value)); > > > } cgrp_readings SEC(".maps"); > > > > > > +/* new kernel cgroup definition */ > > > +struct cgroup___new { > > > + int level; > > > + struct cgroup *ancestors[]; > > > +} __attribute__((preserve_access_index)); > > > + > > > +/* old kernel cgroup definition */ > > > +struct cgroup___old { > > > + int level; > > > + u64 ancestor_ids[]; > > > +} __attribute__((preserve_access_index)); > > > + > > > const volatile __u32 num_events = 1; > > > const volatile __u32 num_cpus = 1; > > > > > > int enabled = 0; > > > int use_cgroup_v2 = 0; > > > > > > +static inline __u64 get_cgroup_v1_ancestor_id(struct cgroup *cgrp, int level) > > > +{ > > > + /* recast pointer to capture new type for compiler */ > > > + struct cgroup___new *cgrp_new = (void *)cgrp; > > > + > > > + if (bpf_core_field_exists(cgrp_new->ancestors)) { > > > + return BPF_CORE_READ(cgrp_new, ancestors[level], kn, id); > > > > have you checked generated BPF code for this ancestors[level] access? > > I'd expect CO-RE relocation for finding ancestors offset and then just > > normal + level * 8 arithmetic, but would be nice to confirm. Apart > > from this, looks good to me: > > > > Acked-by: Andrii Nakryiko <andrii-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> > > Thanks for your review! > > How can I check the generated code? Do you have something works with > skeletons or do I have to save the BPF object somehow during the build? > skeleton is generated from ELF BPF object file. You can do llvm-objdump -d <obj.bpf.o> to see instructions. Unfortunately you can't see BPF CO-RE relocations this way, you'd have to use something like my custom tool ([0]). But anyways, I checked locally similar code pattern and I think it's all good from BPF CO-RE perspective. I see appropriate relocations in all the necessary places. So this should work. Acked-by: Andrii Nakryiko <andrii-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> [0] https://github.com/anakryiko/btfdump > Thanks, > Namhyung ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <20220922041435.709119-1-namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>]
* Re: [PATCH] perf stat: Support old kernels for bperf cgroup counting [not found] ` <20220922041435.709119-1-namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> @ 2022-10-01 13:58 ` Jiri Olsa 0 siblings, 0 replies; 28+ messages in thread From: Jiri Olsa @ 2022-10-01 13:58 UTC (permalink / raw) To: Namhyung Kim Cc: Tejun Heo, Zefan Li, Johannes Weiner, cgroups-u79uwXL29TY76Z2rM5mHXA, Arnaldo Carvalho de Melo, LKML, linux-perf-users-u79uwXL29TY76Z2rM5mHXA, Song Liu, bpf-u79uwXL29TY76Z2rM5mHXA On Wed, Sep 21, 2022 at 09:14:35PM -0700, Namhyung Kim wrote: > The recent change in the cgroup will break the backward compatiblity in > the BPF program. It should support both old and new kernels using BPF > CO-RE technique. > > Like the task_struct->__state handling in the offcpu analysis, we can > check the field name in the cgroup struct. > > Signed-off-by: Namhyung Kim <namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> lgtm Acked-by: Jiri Olsa <jolsa-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> jirka > --- > Arnaldo, I think this should go through the cgroup tree since it depends > on the earlier change there. I don't think it'd conflict with other > perf changes but please let me know if you see any trouble, thanks! > > tools/perf/util/bpf_skel/bperf_cgroup.bpf.c | 29 ++++++++++++++++++++- > 1 file changed, 28 insertions(+), 1 deletion(-) > > diff --git a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > index 488bd398f01d..4fe61043de04 100644 > --- a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > +++ b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > @@ -43,12 +43,39 @@ struct { > __uint(value_size, sizeof(struct bpf_perf_event_value)); > } cgrp_readings SEC(".maps"); > > +/* new kernel cgroup definition */ > +struct cgroup___new { > + int level; > + struct cgroup *ancestors[]; > +} __attribute__((preserve_access_index)); > + > +/* old kernel cgroup definition */ > +struct cgroup___old { > + int level; > + u64 ancestor_ids[]; > +} __attribute__((preserve_access_index)); > + > const volatile __u32 num_events = 1; > const volatile __u32 num_cpus = 1; > > int enabled = 0; > int use_cgroup_v2 = 0; > > +static inline __u64 get_cgroup_v1_ancestor_id(struct cgroup *cgrp, int level) > +{ > + /* recast pointer to capture new type for compiler */ > + struct cgroup___new *cgrp_new = (void *)cgrp; > + > + if (bpf_core_field_exists(cgrp_new->ancestors)) { > + return BPF_CORE_READ(cgrp_new, ancestors[level], kn, id); > + } else { > + /* recast pointer to capture old type for compiler */ > + struct cgroup___old *cgrp_old = (void *)cgrp; > + > + return BPF_CORE_READ(cgrp_old, ancestor_ids[level]); > + } > +} > + > static inline int get_cgroup_v1_idx(__u32 *cgrps, int size) > { > struct task_struct *p = (void *)bpf_get_current_task(); > @@ -70,7 +97,7 @@ static inline int get_cgroup_v1_idx(__u32 *cgrps, int size) > break; > > // convert cgroup-id to a map index > - cgrp_id = BPF_CORE_READ(cgrp, ancestors[i], kn, id); > + cgrp_id = get_cgroup_v1_ancestor_id(cgrp, i); > elem = bpf_map_lookup_elem(&cgrp_idx, &cgrp_id); > if (!elem) > continue; > -- > 2.37.3.968.ga6b4b080e4-goog > ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH] perf stat: Support old kernels for bperf cgroup counting 2022-09-22 4:14 ` [PATCH] perf stat: Support old kernels for bperf cgroup counting Namhyung Kim ` (3 preceding siblings ...) [not found] ` <20220922041435.709119-1-namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> @ 2022-10-10 23:59 ` Tejun Heo [not found] ` <Y0Sx2KWX4gPlLytq-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org> 4 siblings, 1 reply; 28+ messages in thread From: Tejun Heo @ 2022-10-10 23:59 UTC (permalink / raw) To: Namhyung Kim Cc: Zefan Li, Johannes Weiner, cgroups, Arnaldo Carvalho de Melo, Jiri Olsa, LKML, linux-perf-users, Song Liu, bpf On Wed, Sep 21, 2022 at 09:14:35PM -0700, Namhyung Kim wrote: > The recent change in the cgroup will break the backward compatiblity in > the BPF program. It should support both old and new kernels using BPF > CO-RE technique. > > Like the task_struct->__state handling in the offcpu analysis, we can > check the field name in the cgroup struct. > > Signed-off-by: Namhyung Kim <namhyung@kernel.org> Looks like it's acked enough but the patch doesn't apply anymore. Namhyung, can you please refresh the patch? I'll route this through cgroup/for-6.1-fixes unless somebody objects. Thanks. -- tejun ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <Y0Sx2KWX4gPlLytq-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org>]
* Re: [PATCH] perf stat: Support old kernels for bperf cgroup counting [not found] ` <Y0Sx2KWX4gPlLytq-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org> @ 2022-10-11 5:24 ` Namhyung Kim 2022-10-11 5:28 ` [PATCH v2] " Namhyung Kim 1 sibling, 0 replies; 28+ messages in thread From: Namhyung Kim @ 2022-10-11 5:24 UTC (permalink / raw) To: Tejun Heo Cc: Zefan Li, Johannes Weiner, cgroups-u79uwXL29TY76Z2rM5mHXA, Arnaldo Carvalho de Melo, Jiri Olsa, LKML, linux-perf-users-u79uwXL29TY76Z2rM5mHXA, Song Liu, bpf-u79uwXL29TY76Z2rM5mHXA Hi Tejun, On Mon, Oct 10, 2022 at 4:59 PM Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> wrote: > > On Wed, Sep 21, 2022 at 09:14:35PM -0700, Namhyung Kim wrote: > > The recent change in the cgroup will break the backward compatiblity in > > the BPF program. It should support both old and new kernels using BPF > > CO-RE technique. > > > > Like the task_struct->__state handling in the offcpu analysis, we can > > check the field name in the cgroup struct. > > > > Signed-off-by: Namhyung Kim <namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> > > Looks like it's acked enough but the patch doesn't apply anymore. Namhyung, > can you please refresh the patch? I'll route this through > cgroup/for-6.1-fixes unless somebody objects. Sorry about the conflict. There was another change to get the perf cgroup subsys id properly. Will send v2 soon. Thanks, Namhyung ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v2] perf stat: Support old kernels for bperf cgroup counting [not found] ` <Y0Sx2KWX4gPlLytq-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org> 2022-10-11 5:24 ` Namhyung Kim @ 2022-10-11 5:28 ` Namhyung Kim 2022-10-11 16:53 ` Tejun Heo 1 sibling, 1 reply; 28+ messages in thread From: Namhyung Kim @ 2022-10-11 5:28 UTC (permalink / raw) To: Tejun Heo, Arnaldo Carvalho de Melo Cc: Zefan Li, Johannes Weiner, cgroups-u79uwXL29TY76Z2rM5mHXA, Jiri Olsa, LKML, linux-perf-users-u79uwXL29TY76Z2rM5mHXA, Song Liu, bpf-u79uwXL29TY76Z2rM5mHXA, Andrii Nakryiko The recent change in the cgroup will break the backward compatiblity in the BPF program. It should support both old and new kernels using BPF CO-RE technique. Like the task_struct->__state handling in the offcpu analysis, we can check the field name in the cgroup struct. Acked-by: Jiri Olsa <jolsa-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> Acked-by: Andrii Nakryiko <andrii-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> Signed-off-by: Namhyung Kim <namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> --- tools/perf/util/bpf_skel/bperf_cgroup.bpf.c | 29 ++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c index 435a87556688..6a438e0102c5 100644 --- a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c +++ b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c @@ -43,6 +43,18 @@ struct { __uint(value_size, sizeof(struct bpf_perf_event_value)); } cgrp_readings SEC(".maps"); +/* new kernel cgroup definition */ +struct cgroup___new { + int level; + struct cgroup *ancestors[]; +} __attribute__((preserve_access_index)); + +/* old kernel cgroup definition */ +struct cgroup___old { + int level; + u64 ancestor_ids[]; +} __attribute__((preserve_access_index)); + const volatile __u32 num_events = 1; const volatile __u32 num_cpus = 1; @@ -50,6 +62,21 @@ int enabled = 0; int use_cgroup_v2 = 0; int perf_subsys_id = -1; +static inline __u64 get_cgroup_v1_ancestor_id(struct cgroup *cgrp, int level) +{ + /* recast pointer to capture new type for compiler */ + struct cgroup___new *cgrp_new = (void *)cgrp; + + if (bpf_core_field_exists(cgrp_new->ancestors)) { + return BPF_CORE_READ(cgrp_new, ancestors[level], kn, id); + } else { + /* recast pointer to capture old type for compiler */ + struct cgroup___old *cgrp_old = (void *)cgrp; + + return BPF_CORE_READ(cgrp_old, ancestor_ids[level]); + } +} + static inline int get_cgroup_v1_idx(__u32 *cgrps, int size) { struct task_struct *p = (void *)bpf_get_current_task(); @@ -77,7 +104,7 @@ static inline int get_cgroup_v1_idx(__u32 *cgrps, int size) break; // convert cgroup-id to a map index - cgrp_id = BPF_CORE_READ(cgrp, ancestors[i], kn, id); + cgrp_id = get_cgroup_v1_ancestor_id(cgrp, i); elem = bpf_map_lookup_elem(&cgrp_idx, &cgrp_id); if (!elem) continue; -- 2.38.0.rc1.362.ged0d419d3c-goog ^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH v2] perf stat: Support old kernels for bperf cgroup counting 2022-10-11 5:28 ` [PATCH v2] " Namhyung Kim @ 2022-10-11 16:53 ` Tejun Heo 2022-10-14 13:27 ` Arnaldo Carvalho de Melo 0 siblings, 1 reply; 28+ messages in thread From: Tejun Heo @ 2022-10-11 16:53 UTC (permalink / raw) To: Namhyung Kim Cc: Arnaldo Carvalho de Melo, Zefan Li, Johannes Weiner, cgroups, Jiri Olsa, LKML, linux-perf-users, Song Liu, bpf, Andrii Nakryiko On Mon, Oct 10, 2022 at 10:28:08PM -0700, Namhyung Kim wrote: > The recent change in the cgroup will break the backward compatiblity in > the BPF program. It should support both old and new kernels using BPF > CO-RE technique. > > Like the task_struct->__state handling in the offcpu analysis, we can > check the field name in the cgroup struct. > > Acked-by: Jiri Olsa <jolsa@kernel.org> > Acked-by: Andrii Nakryiko <andrii@kernel.org> > Signed-off-by: Namhyung Kim <namhyung@kernel.org> Applied to cgroup/for-6.1-fixes. Thanks. -- tejun ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2] perf stat: Support old kernels for bperf cgroup counting 2022-10-11 16:53 ` Tejun Heo @ 2022-10-14 13:27 ` Arnaldo Carvalho de Melo [not found] ` <Y0ljzN920sWalEHR-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> 0 siblings, 1 reply; 28+ messages in thread From: Arnaldo Carvalho de Melo @ 2022-10-14 13:27 UTC (permalink / raw) To: Tejun Heo Cc: Namhyung Kim, Zefan Li, Johannes Weiner, cgroups, Jiri Olsa, LKML, linux-perf-users, Song Liu, bpf, Andrii Nakryiko Em Tue, Oct 11, 2022 at 06:53:43AM -1000, Tejun Heo escreveu: > On Mon, Oct 10, 2022 at 10:28:08PM -0700, Namhyung Kim wrote: > > The recent change in the cgroup will break the backward compatiblity in > > the BPF program. It should support both old and new kernels using BPF > > CO-RE technique. > > Like the task_struct->__state handling in the offcpu analysis, we can > > check the field name in the cgroup struct. > > Acked-by: Jiri Olsa <jolsa@kernel.org> > > Acked-by: Andrii Nakryiko <andrii@kernel.org> > > Signed-off-by: Namhyung Kim <namhyung@kernel.org> > Applied to cgroup/for-6.1-fixes. Hey, I noticed that the perf build is broken for the tools/perf/util/bpf_skel/bperf_cgroup.bpf.c skell, so I tried using b4 on this Namhyung patch, it ended up getting a newer version, by Tejun, that mixes up kernel code and tooling, which, when I tried to apply upstream didn't work. Please try not to mix up kernel and tools/ changes in the same patch to avoid these issues. Also when changing tools/perf, please CC me. I'm now back trying to apply v2 of this patch to see if it fixes my build. Thanks, - Arnaldo ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <Y0ljzN920sWalEHR-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>]
* Re: [PATCH v2] perf stat: Support old kernels for bperf cgroup counting [not found] ` <Y0ljzN920sWalEHR-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> @ 2022-10-14 13:30 ` Arnaldo Carvalho de Melo 2022-10-14 16:40 ` Tejun Heo 1 sibling, 0 replies; 28+ messages in thread From: Arnaldo Carvalho de Melo @ 2022-10-14 13:30 UTC (permalink / raw) To: Tejun Heo Cc: Namhyung Kim, Zefan Li, Johannes Weiner, cgroups-u79uwXL29TY76Z2rM5mHXA, Jiri Olsa, LKML, linux-perf-users-u79uwXL29TY76Z2rM5mHXA, Song Liu, bpf-u79uwXL29TY76Z2rM5mHXA, Andrii Nakryiko Em Fri, Oct 14, 2022 at 10:27:40AM -0300, Arnaldo Carvalho de Melo escreveu: > Em Tue, Oct 11, 2022 at 06:53:43AM -1000, Tejun Heo escreveu: > > On Mon, Oct 10, 2022 at 10:28:08PM -0700, Namhyung Kim wrote: > > > The recent change in the cgroup will break the backward compatiblity in > > > the BPF program. It should support both old and new kernels using BPF > > > CO-RE technique. > > > > Like the task_struct->__state handling in the offcpu analysis, we can > > > check the field name in the cgroup struct. > > > > Acked-by: Jiri Olsa <jolsa-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> > > > Acked-by: Andrii Nakryiko <andrii-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> > > > Signed-off-by: Namhyung Kim <namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> > > > Applied to cgroup/for-6.1-fixes. > > Hey, I noticed that the perf build is broken for the > tools/perf/util/bpf_skel/bperf_cgroup.bpf.c skell, so I tried using b4 > on this Namhyung patch, it ended up getting a newer version, by Tejun, > that mixes up kernel code and tooling, which, when I tried to apply > upstream didn't work. > > Please try not to mix up kernel and tools/ changes in the same patch to > avoid these issues. > > Also when changing tools/perf, please CC me. > > I'm now back trying to apply v2 of this patch to see if it fixes my > build. Yeah, applying just Namhyung's v2 patch gets perf back building, I'll keep it there while processing the other patches so that I can test them all together. - Arnaldo ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2] perf stat: Support old kernels for bperf cgroup counting [not found] ` <Y0ljzN920sWalEHR-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> 2022-10-14 13:30 ` Arnaldo Carvalho de Melo @ 2022-10-14 16:40 ` Tejun Heo [not found] ` <Y0mRGJx4Mc7t7fGB-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org> 1 sibling, 1 reply; 28+ messages in thread From: Tejun Heo @ 2022-10-14 16:40 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Namhyung Kim, Zefan Li, Johannes Weiner, cgroups-u79uwXL29TY76Z2rM5mHXA, Jiri Olsa, LKML, linux-perf-users-u79uwXL29TY76Z2rM5mHXA, Song Liu, bpf-u79uwXL29TY76Z2rM5mHXA, Andrii Nakryiko On Fri, Oct 14, 2022 at 10:27:40AM -0300, Arnaldo Carvalho de Melo wrote: > Hey, I noticed that the perf build is broken for the > tools/perf/util/bpf_skel/bperf_cgroup.bpf.c skell, so I tried using b4 > on this Namhyung patch, it ended up getting a newer version, by Tejun, > that mixes up kernel code and tooling, which, when I tried to apply > upstream didn't work. > > Please try not to mix up kernel and tools/ changes in the same patch to > avoid these issues. I didn't write a newer version of this patch. What are you talking about? -- tejun ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <Y0mRGJx4Mc7t7fGB-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org>]
* Re: [PATCH v2] perf stat: Support old kernels for bperf cgroup counting [not found] ` <Y0mRGJx4Mc7t7fGB-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org> @ 2022-10-14 17:10 ` Arnaldo Carvalho de Melo 0 siblings, 0 replies; 28+ messages in thread From: Arnaldo Carvalho de Melo @ 2022-10-14 17:10 UTC (permalink / raw) To: Tejun Heo Cc: Namhyung Kim, Zefan Li, Johannes Weiner, cgroups-u79uwXL29TY76Z2rM5mHXA, Jiri Olsa, LKML, linux-perf-users-u79uwXL29TY76Z2rM5mHXA, Song Liu, bpf-u79uwXL29TY76Z2rM5mHXA, Andrii Nakryiko Em Fri, Oct 14, 2022 at 06:40:56AM -1000, Tejun Heo escreveu: > On Fri, Oct 14, 2022 at 10:27:40AM -0300, Arnaldo Carvalho de Melo wrote: > > Hey, I noticed that the perf build is broken for the > > tools/perf/util/bpf_skel/bperf_cgroup.bpf.c skell, so I tried using b4 > > on this Namhyung patch, it ended up getting a newer version, by Tejun, > > that mixes up kernel code and tooling, which, when I tried to apply > > upstream didn't work. > > Please try not to mix up kernel and tools/ changes in the same patch to > > avoid these issues. > I didn't write a newer version of this patch. What are you talking about? So, I saw this message from you in reply to Namhyung's v2 patch: -------------------------- Date: Tue, 11 Oct 2022 06:53:43 -1000 From: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> Subject: Re: [PATCH v2] perf stat: Support old kernels for bperf cgroup counting To: Namhyung Kim <namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> Cc: Arnaldo Carvalho de Melo <acme-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>, Zefan Li <lizefan.x-EC8Uxl6Npydl57MIdRCFDg@public.gmane.org>, Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>, cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Jiri Olsa <jolsa-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>, LKML <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>, linux-perf-users-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Song Liu <songliubraving-b10kYP2dOMg@public.gmane.org>, bpf-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Andrii Nakryiko <andrii-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> Sender: Tejun Heo <htejun-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Message-ID: <Y0Wfl88objrECjSo-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org> On Mon, Oct 10, 2022 at 10:28:08PM -0700, Namhyung Kim wrote: > The recent change in the cgroup will break the backward compatiblity in > the BPF program. It should support both old and new kernels using BPF > CO-RE technique. > Like the task_struct->__state handling in the offcpu analysis, we can > check the field name in the cgroup struct. > Acked-by: Jiri Olsa <jolsa-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> > Acked-by: Andrii Nakryiko <andrii-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> > Signed-off-by: Namhyung Kim <namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> Applied to cgroup/for-6.1-fixes. Thanks. -- tejun -------------------------- So, I picked the message id, Y0Wfl88objrECjSo-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org, and asked b4 to pick the patch: ⬢[acme@toolbox perf]$ b4 am --help | grep -A1 -- -c, -c, --check-newer-revisions Check if newer patch revisions exist ⬢[acme@toolbox perf]$ ⬢[acme@toolbox perf]$ b4 am -ctsl --cc-trailers Y0Wfl88objrECjSo-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org Grabbing thread from lore.kernel.org/all/Y0Wfl88objrECjSo%40slm.duckdns.org/t.mbox.gz Checking for newer revisions on https://lore.kernel.org/all/ Analyzing 27 messages in the thread ('Acked-by', 'Andrii Nakryiko <andrii-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>', None) Will use the latest revision: v3 You can pick other revisions using the -vN flag Checking attestation on all messages, may take a moment... --- ✓ [PATCH v3] cgroup: Replace cgroup->ancestor_ids[] with ->ancestors[] --- ✓ Signed: DKIM/gmail.com (From: tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org) --- Total patches: 1 --- Link: https://lore.kernel.org/r/YuRo2PLFH6wLgEkm-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org Base: not specified git am ./v3_20220729_tj_cgroup_replace_cgroup_ancestor_ids_with_ancestors.mbx ⬢[acme@toolbox perf]$ Which got me this: ⬢[acme@toolbox perf]$ diffstat ./v3_20220729_tj_cgroup_replace_cgroup_ancestor_ids_with_ancestors.mbx include/linux/cgroup-defs.h | 16 ++++++++++------ include/linux/cgroup.h | 8 +++----- kernel/cgroup/cgroup.c | 7 +++---- net/netfilter/nft_socket.c | 9 +++++---- tools/perf/util/bpf_skel/bperf_cgroup.bpf.c | 2 +- 5 files changed, 22 insertions(+), 20 deletions(-) ⬢[acme@toolbox perf]$ ⬢[acme@toolbox perf]$ grep From: ./v3_20220729_tj_cgroup_replace_cgroup_ancestor_ids_with_ancestors.mbx From: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> ⬢[acme@toolbox perf]$ That mixes kernel and tools bits and touches tools/perf/util/bpf_skel/bperf_cgroup.bpf.c, hence my request to add me to the CC list for patches touching tools/perf/. My assumption that it was a new patch was because b4 somehow got to v3_20220729_tj_cgroup_replace_cgroup_ancestor_ids_with_ancestors, which has v3 and touches the tools cgroup bpf skel. So it seems b4 is confused somehow. Hope this clarifies. - Arnaldo ^ permalink raw reply [flat|nested] 28+ messages in thread
end of thread, other threads:[~2022-10-14 17:10 UTC | newest]
Thread overview: 28+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-29 19:05 [PATCH cgroup/for-5.20] cgroup: Replace cgroup->ancestor_ids[] with ->ancestors[] Tejun Heo
[not found] ` <YuQvcCrcgNWbtndU-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org>
2022-07-29 20:30 ` Namhyung Kim
2022-07-29 20:58 ` [PATCH v2 " Tejun Heo
[not found] ` <YuRJ7uzKY5/fokH5-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org>
2022-07-29 22:42 ` Michal Koutný
2022-07-29 23:02 ` Tejun Heo
2022-07-29 23:10 ` [PATCH v3 " Tejun Heo
2022-08-15 21:17 ` Tejun Heo
[not found] ` <Yvq33G14AU0cuswB-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org>
2022-09-22 4:05 ` Namhyung Kim
[not found] ` <CAM9d7cjQ20a01YoZi=o-_7HT6TzR0TZgtpscKNvRrMq2yqV1Og-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2022-09-22 4:14 ` [PATCH] perf stat: Support old kernels for bperf cgroup counting Namhyung Kim
2022-09-24 3:22 ` Tejun Heo
[not found] ` <Yy54CwK84JY/o+Ci-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org>
2022-09-30 20:30 ` Namhyung Kim
2022-09-30 21:43 ` Jiri Olsa
2022-09-30 21:56 ` Namhyung Kim
[not found] ` <CAM9d7cjKaZvWQUwGwoTLNzAgHS7ndL_V_5+O+WqMUvuHJ7cWNg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2022-09-30 22:00 ` Arnaldo Carvalho de Melo
[not found] ` <88915C51-33CD-49A4-A9E0-F5F5ECDEA0C7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2022-09-30 22:11 ` Namhyung Kim
2022-10-01 13:57 ` Jiri Olsa
2022-09-30 22:48 ` Andrii Nakryiko
2022-10-01 2:31 ` Namhyung Kim
[not found] ` <CAM9d7ch8RUgf8V1hi=ccgV84XSfujuWtUKKgre8eQdGmtdiFLA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2022-10-05 22:36 ` Andrii Nakryiko
[not found] ` <20220922041435.709119-1-namhyung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2022-10-01 13:58 ` Jiri Olsa
2022-10-10 23:59 ` Tejun Heo
[not found] ` <Y0Sx2KWX4gPlLytq-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org>
2022-10-11 5:24 ` Namhyung Kim
2022-10-11 5:28 ` [PATCH v2] " Namhyung Kim
2022-10-11 16:53 ` Tejun Heo
2022-10-14 13:27 ` Arnaldo Carvalho de Melo
[not found] ` <Y0ljzN920sWalEHR-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2022-10-14 13:30 ` Arnaldo Carvalho de Melo
2022-10-14 16:40 ` Tejun Heo
[not found] ` <Y0mRGJx4Mc7t7fGB-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org>
2022-10-14 17:10 ` Arnaldo Carvalho de Melo
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).