From: Waiman Long <longman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>,
Michal Hocko <mhocko-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Vladimir Davydov
<vdavydov.dev-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Andrew Morton
<akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>,
Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Christoph Lameter <cl-vYTEC60ixJUAvxtiuMwx3w@public.gmane.org>,
Pekka Enberg <penberg-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
David Rientjes <rientjes-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
Joonsoo Kim <iamjoonsoo.kim-Hm3cg6mZ9cc@public.gmane.org>,
Vlastimil Babka <vbabka-AlSwsSmVLrQ@public.gmane.org>,
Roman Gushchin <guro-b10kYP2dOMg@public.gmane.org>
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org,
Shakeel Butt <shakeelb-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
Muchun Song <songmuchun-EC8Uxl6Npydl57MIdRCFDg@public.gmane.org>,
Alex Shi
<alex.shi-KPsoFbNs7GizrGE5bRqYAgC/G2K4zDHf@public.gmane.org>,
Chris Down <chris-6Bi1550iOqEnzZ6mRAm98g@public.gmane.org>,
Yafang Shao <laoar.shao-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Wei Yang
<richard.weiyang-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Masayoshi Mizuma
<msys.mizuma-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Xing Zhengjun
<zhengjun.xing-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
Waiman Long <longman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Subject: [PATCH v3 1/5] mm/memcg: Pass both memcg and lruvec to mod_memcg_lruvec_state()
Date: Tue, 13 Apr 2021 21:20:23 -0400 [thread overview]
Message-ID: <20210414012027.5352-2-longman@redhat.com> (raw)
In-Reply-To: <20210414012027.5352-1-longman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
The caller of mod_memcg_lruvec_state() has both memcg and lruvec readily
available. So both of them are now passed to mod_memcg_lruvec_state()
and __mod_memcg_lruvec_state(). The __mod_memcg_lruvec_state() is
updated to allow either of the two parameters to be set to null. This
makes mod_memcg_lruvec_state() equivalent to mod_memcg_state() if lruvec
is null.
The new __mod_memcg_lruvec_state() function will be used in the next
patch as a replacement of mod_memcg_state() in mm/percpu.c for the
consolidation of the memory uncharge and vmstat update functions in
the kmem_cache_free() path.
Signed-off-by: Waiman Long <longman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Acked-by: Roman Gushchin <guro-b10kYP2dOMg@public.gmane.org>
Reviewed-by: Shakeel Butt <shakeelb-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
---
include/linux/memcontrol.h | 12 +++++++-----
mm/memcontrol.c | 19 +++++++++++++------
mm/slab.h | 2 +-
3 files changed, 21 insertions(+), 12 deletions(-)
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
index 0c04d39a7967..95f12996e66c 100644
--- a/include/linux/memcontrol.h
+++ b/include/linux/memcontrol.h
@@ -955,8 +955,8 @@ static inline unsigned long lruvec_page_state_local(struct lruvec *lruvec,
return x;
}
-void __mod_memcg_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx,
- int val);
+void __mod_memcg_lruvec_state(struct mem_cgroup *memcg, struct lruvec *lruvec,
+ enum node_stat_item idx, int val);
void __mod_lruvec_kmem_state(void *p, enum node_stat_item idx, int val);
static inline void mod_lruvec_kmem_state(void *p, enum node_stat_item idx,
@@ -969,13 +969,14 @@ static inline void mod_lruvec_kmem_state(void *p, enum node_stat_item idx,
local_irq_restore(flags);
}
-static inline void mod_memcg_lruvec_state(struct lruvec *lruvec,
+static inline void mod_memcg_lruvec_state(struct mem_cgroup *memcg,
+ struct lruvec *lruvec,
enum node_stat_item idx, int val)
{
unsigned long flags;
local_irq_save(flags);
- __mod_memcg_lruvec_state(lruvec, idx, val);
+ __mod_memcg_lruvec_state(memcg, lruvec, idx, val);
local_irq_restore(flags);
}
@@ -1369,7 +1370,8 @@ static inline unsigned long lruvec_page_state_local(struct lruvec *lruvec,
return node_page_state(lruvec_pgdat(lruvec), idx);
}
-static inline void __mod_memcg_lruvec_state(struct lruvec *lruvec,
+static inline void __mod_memcg_lruvec_state(struct mem_cgroup *memcg,
+ struct lruvec *lruvec,
enum node_stat_item idx, int val)
{
}
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index e064ac0d850a..d66e1e38f8ac 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -799,20 +799,27 @@ parent_nodeinfo(struct mem_cgroup_per_node *pn, int nid)
return mem_cgroup_nodeinfo(parent, nid);
}
-void __mod_memcg_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx,
- int val)
+/*
+ * Either one of memcg or lruvec can be NULL, but not both.
+ */
+void __mod_memcg_lruvec_state(struct mem_cgroup *memcg, struct lruvec *lruvec,
+ enum node_stat_item idx, int val)
{
struct mem_cgroup_per_node *pn;
- struct mem_cgroup *memcg;
long x, threshold = MEMCG_CHARGE_BATCH;
+ /* Update lruvec */
pn = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
- memcg = pn->memcg;
+
+ if (!memcg)
+ memcg = pn->memcg;
/* Update memcg */
__mod_memcg_state(memcg, idx, val);
- /* Update lruvec */
+ if (!lruvec)
+ return;
+
__this_cpu_add(pn->lruvec_stat_local->count[idx], val);
if (vmstat_item_in_bytes(idx))
@@ -848,7 +855,7 @@ void __mod_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx,
/* Update memcg and lruvec */
if (!mem_cgroup_disabled())
- __mod_memcg_lruvec_state(lruvec, idx, val);
+ __mod_memcg_lruvec_state(NULL, lruvec, idx, val);
}
void __mod_lruvec_page_state(struct page *page, enum node_stat_item idx,
diff --git a/mm/slab.h b/mm/slab.h
index 076582f58f68..bc6c7545e487 100644
--- a/mm/slab.h
+++ b/mm/slab.h
@@ -293,7 +293,7 @@ static inline void mod_objcg_state(struct obj_cgroup *objcg,
rcu_read_lock();
memcg = obj_cgroup_memcg(objcg);
lruvec = mem_cgroup_lruvec(memcg, pgdat);
- mod_memcg_lruvec_state(lruvec, idx, nr);
+ mod_memcg_lruvec_state(memcg, lruvec, idx, nr);
rcu_read_unlock();
}
--
2.18.1
WARNING: multiple messages have this Message-ID (diff)
From: Waiman Long <longman@redhat.com>
To: Johannes Weiner <hannes@cmpxchg.org>,
Michal Hocko <mhocko@kernel.org>,
Vladimir Davydov <vdavydov.dev@gmail.com>,
Andrew Morton <akpm@linux-foundation.org>,
Tejun Heo <tj@kernel.org>, Christoph Lameter <cl@linux.com>,
Pekka Enberg <penberg@kernel.org>,
David Rientjes <rientjes@google.com>,
Joonsoo Kim <iamjoonsoo.kim@lge.com>,
Vlastimil Babka <vbabka@suse.cz>, Roman Gushchin <guro@fb.com>
Cc: linux-kernel@vger.kernel.org, cgroups@vger.kernel.org,
linux-mm@kvack.org, Shakeel Butt <shakeelb@google.com>,
Muchun Song <songmuchun@bytedance.com>,
Alex Shi <alex.shi@linux.alibaba.com>,
Chris Down <chris@chrisdown.name>,
Yafang Shao <laoar.shao@gmail.com>,
Wei Yang <richard.weiyang@gmail.com>,
Masayoshi Mizuma <msys.mizuma@gmail.com>,
Xing Zhengjun <zhengjun.xing@linux.intel.com>,
Waiman Long <longman@redhat.com>
Subject: [PATCH v3 1/5] mm/memcg: Pass both memcg and lruvec to mod_memcg_lruvec_state()
Date: Tue, 13 Apr 2021 21:20:23 -0400 [thread overview]
Message-ID: <20210414012027.5352-2-longman@redhat.com> (raw)
In-Reply-To: <20210414012027.5352-1-longman@redhat.com>
The caller of mod_memcg_lruvec_state() has both memcg and lruvec readily
available. So both of them are now passed to mod_memcg_lruvec_state()
and __mod_memcg_lruvec_state(). The __mod_memcg_lruvec_state() is
updated to allow either of the two parameters to be set to null. This
makes mod_memcg_lruvec_state() equivalent to mod_memcg_state() if lruvec
is null.
The new __mod_memcg_lruvec_state() function will be used in the next
patch as a replacement of mod_memcg_state() in mm/percpu.c for the
consolidation of the memory uncharge and vmstat update functions in
the kmem_cache_free() path.
Signed-off-by: Waiman Long <longman@redhat.com>
Acked-by: Roman Gushchin <guro@fb.com>
Reviewed-by: Shakeel Butt <shakeelb@google.com>
---
include/linux/memcontrol.h | 12 +++++++-----
mm/memcontrol.c | 19 +++++++++++++------
mm/slab.h | 2 +-
3 files changed, 21 insertions(+), 12 deletions(-)
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
index 0c04d39a7967..95f12996e66c 100644
--- a/include/linux/memcontrol.h
+++ b/include/linux/memcontrol.h
@@ -955,8 +955,8 @@ static inline unsigned long lruvec_page_state_local(struct lruvec *lruvec,
return x;
}
-void __mod_memcg_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx,
- int val);
+void __mod_memcg_lruvec_state(struct mem_cgroup *memcg, struct lruvec *lruvec,
+ enum node_stat_item idx, int val);
void __mod_lruvec_kmem_state(void *p, enum node_stat_item idx, int val);
static inline void mod_lruvec_kmem_state(void *p, enum node_stat_item idx,
@@ -969,13 +969,14 @@ static inline void mod_lruvec_kmem_state(void *p, enum node_stat_item idx,
local_irq_restore(flags);
}
-static inline void mod_memcg_lruvec_state(struct lruvec *lruvec,
+static inline void mod_memcg_lruvec_state(struct mem_cgroup *memcg,
+ struct lruvec *lruvec,
enum node_stat_item idx, int val)
{
unsigned long flags;
local_irq_save(flags);
- __mod_memcg_lruvec_state(lruvec, idx, val);
+ __mod_memcg_lruvec_state(memcg, lruvec, idx, val);
local_irq_restore(flags);
}
@@ -1369,7 +1370,8 @@ static inline unsigned long lruvec_page_state_local(struct lruvec *lruvec,
return node_page_state(lruvec_pgdat(lruvec), idx);
}
-static inline void __mod_memcg_lruvec_state(struct lruvec *lruvec,
+static inline void __mod_memcg_lruvec_state(struct mem_cgroup *memcg,
+ struct lruvec *lruvec,
enum node_stat_item idx, int val)
{
}
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index e064ac0d850a..d66e1e38f8ac 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -799,20 +799,27 @@ parent_nodeinfo(struct mem_cgroup_per_node *pn, int nid)
return mem_cgroup_nodeinfo(parent, nid);
}
-void __mod_memcg_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx,
- int val)
+/*
+ * Either one of memcg or lruvec can be NULL, but not both.
+ */
+void __mod_memcg_lruvec_state(struct mem_cgroup *memcg, struct lruvec *lruvec,
+ enum node_stat_item idx, int val)
{
struct mem_cgroup_per_node *pn;
- struct mem_cgroup *memcg;
long x, threshold = MEMCG_CHARGE_BATCH;
+ /* Update lruvec */
pn = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
- memcg = pn->memcg;
+
+ if (!memcg)
+ memcg = pn->memcg;
/* Update memcg */
__mod_memcg_state(memcg, idx, val);
- /* Update lruvec */
+ if (!lruvec)
+ return;
+
__this_cpu_add(pn->lruvec_stat_local->count[idx], val);
if (vmstat_item_in_bytes(idx))
@@ -848,7 +855,7 @@ void __mod_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx,
/* Update memcg and lruvec */
if (!mem_cgroup_disabled())
- __mod_memcg_lruvec_state(lruvec, idx, val);
+ __mod_memcg_lruvec_state(NULL, lruvec, idx, val);
}
void __mod_lruvec_page_state(struct page *page, enum node_stat_item idx,
diff --git a/mm/slab.h b/mm/slab.h
index 076582f58f68..bc6c7545e487 100644
--- a/mm/slab.h
+++ b/mm/slab.h
@@ -293,7 +293,7 @@ static inline void mod_objcg_state(struct obj_cgroup *objcg,
rcu_read_lock();
memcg = obj_cgroup_memcg(objcg);
lruvec = mem_cgroup_lruvec(memcg, pgdat);
- mod_memcg_lruvec_state(lruvec, idx, nr);
+ mod_memcg_lruvec_state(memcg, lruvec, idx, nr);
rcu_read_unlock();
}
--
2.18.1
next prev parent reply other threads:[~2021-04-14 1:20 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-14 1:20 [PATCH v3 0/5] mm/memcg: Reduce kmemcache memory accounting overhead Waiman Long
2021-04-14 1:20 ` Waiman Long
[not found] ` <20210414012027.5352-1-longman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-14 1:20 ` Waiman Long [this message]
2021-04-14 1:20 ` [PATCH v3 1/5] mm/memcg: Pass both memcg and lruvec to mod_memcg_lruvec_state() Waiman Long
[not found] ` <20210414012027.5352-2-longman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15 3:27 ` Masayoshi Mizuma
2021-04-15 3:27 ` Masayoshi Mizuma
2021-04-15 16:40 ` Johannes Weiner
2021-04-15 16:40 ` Johannes Weiner
[not found] ` <YHhsapGx3vTlyZvF-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2021-04-15 16:59 ` Waiman Long
2021-04-15 16:59 ` Waiman Long
[not found] ` <59a85df9-3e77-1d43-8673-2ff50a741130-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-16 15:48 ` Johannes Weiner
2021-04-16 15:48 ` Johannes Weiner
2021-04-14 1:20 ` [PATCH v3 2/5] mm/memcg: Introduce obj_cgroup_uncharge_mod_state() Waiman Long
2021-04-14 1:20 ` Waiman Long
[not found] ` <20210414012027.5352-3-longman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15 3:27 ` Masayoshi Mizuma
2021-04-15 3:27 ` Masayoshi Mizuma
2021-04-15 16:30 ` Johannes Weiner
2021-04-15 16:30 ` Johannes Weiner
2021-04-15 16:35 ` Waiman Long
2021-04-15 16:35 ` Waiman Long
[not found] ` <1c85e8f6-e8b9-33e1-e29b-81fbadff959f-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15 18:10 ` Johannes Weiner
2021-04-15 18:10 ` Johannes Weiner
[not found] ` <YHiBlhUWoCKqQgM7-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2021-04-15 18:47 ` Waiman Long
2021-04-15 18:47 ` Waiman Long
[not found] ` <8a104fd5-64c7-3f41-981c-9cfa977c78a6-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15 19:40 ` Johannes Weiner
2021-04-15 19:40 ` Johannes Weiner
2021-04-15 19:44 ` Waiman Long
[not found] ` <cba964b6-d2b6-9a74-f556-e2733b65dd81-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15 20:19 ` Johannes Weiner
2021-04-15 20:19 ` Johannes Weiner
2021-04-14 1:20 ` [PATCH v3 3/5] mm/memcg: Cache vmstat data in percpu memcg_stock_pcp Waiman Long
2021-04-14 1:20 ` Waiman Long
[not found] ` <20210414012027.5352-4-longman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15 3:28 ` Masayoshi Mizuma
2021-04-15 3:28 ` Masayoshi Mizuma
2021-04-15 16:50 ` Johannes Weiner
[not found] ` <YHhu1BOMj1Ip+sb3-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2021-04-15 17:08 ` Waiman Long
2021-04-15 17:08 ` Waiman Long
[not found] ` <5abe499a-b1ad-fa22-3487-1a6e00e30e17-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15 18:13 ` Johannes Weiner
2021-04-15 18:13 ` Johannes Weiner
2021-04-14 1:20 ` [PATCH v3 5/5] mm/memcg: Optimize user context object stock access Waiman Long
2021-04-14 1:20 ` Waiman Long
[not found] ` <20210414012027.5352-6-longman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15 3:28 ` Masayoshi Mizuma
2021-04-15 3:28 ` Masayoshi Mizuma
2021-04-15 9:44 ` Christoph Lameter
[not found] ` <alpine.DEB.2.22.394.2104151143080.632904-LoxgEY9JZOazQB+pC5nmwQ@public.gmane.org>
2021-04-15 12:16 ` Masayoshi Mizuma
2021-04-15 12:16 ` Masayoshi Mizuma
2021-04-15 17:53 ` Johannes Weiner
[not found] ` <YHh9l1+TUIzzFBtO-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2021-04-15 18:16 ` Waiman Long
2021-04-15 18:16 ` Waiman Long
[not found] ` <8dbd3505-9c51-362f-82d8-5efa5773e020-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15 18:53 ` Johannes Weiner
2021-04-15 18:53 ` Johannes Weiner
[not found] ` <YHiLmxE9oCOfmbS3-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2021-04-15 19:06 ` Waiman Long
2021-04-15 19:06 ` Waiman Long
2021-04-15 3:26 ` [PATCH v3 0/5] mm/memcg: Reduce kmemcache memory accounting overhead Masayoshi Mizuma
2021-04-15 3:26 ` Masayoshi Mizuma
2021-04-15 13:17 ` Waiman Long
2021-04-15 13:17 ` Waiman Long
[not found] ` <12cba05a-e268-3a5d-69d7-feb00e36ef40-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15 15:47 ` Masayoshi Mizuma
2021-04-15 15:47 ` Masayoshi Mizuma
2021-04-15 17:10 ` Matthew Wilcox
2021-04-15 17:10 ` Matthew Wilcox
[not found] ` <20210415171035.GB2531743-FZi0V3Vbi30CUdFEqe4BF2D2FQJk+8+b@public.gmane.org>
2021-04-15 17:41 ` Waiman Long
2021-04-15 17:41 ` Waiman Long
2021-04-14 1:20 ` [PATCH v3 4/5] mm/memcg: Separate out object stock data into its own struct Waiman Long
[not found] ` <20210414012027.5352-5-longman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15 3:28 ` Masayoshi Mizuma
2021-04-15 3:28 ` Masayoshi Mizuma
2021-04-15 16:57 ` Johannes Weiner
2021-04-15 16:57 ` Johannes Weiner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210414012027.5352-2-longman@redhat.com \
--to=longman-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
--cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
--cc=alex.shi-KPsoFbNs7GizrGE5bRqYAgC/G2K4zDHf@public.gmane.org \
--cc=cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=chris-6Bi1550iOqEnzZ6mRAm98g@public.gmane.org \
--cc=cl-vYTEC60ixJUAvxtiuMwx3w@public.gmane.org \
--cc=guro-b10kYP2dOMg@public.gmane.org \
--cc=hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org \
--cc=iamjoonsoo.kim-Hm3cg6mZ9cc@public.gmane.org \
--cc=laoar.shao-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org \
--cc=mhocko-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=msys.mizuma-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=penberg-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=richard.weiyang-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=rientjes-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=shakeelb-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=songmuchun-EC8Uxl6Npydl57MIdRCFDg@public.gmane.org \
--cc=tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=vbabka-AlSwsSmVLrQ@public.gmane.org \
--cc=vdavydov.dev-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=zhengjun.xing-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.