2022-04-22 linux内核邮件订阅方式

摘要:

记录linux内核邮件订阅方式

订阅linux内核邮件方式:

1、发送订阅邮件

注意:一定不要使用像Foxmail这样的第三方邮件客户端,因为发送的邮件会转码,导致订阅不成功,推荐使用Gmail,直接登录进去发送。

发送邮件内容:

接收人:majordomo@vger.kernel.org

主题:hello

内容:subscribe linux-kernel

2、接收到回复的邮件

收到这封邮件表示成功找到了订阅方法,还没真正订阅,接下来就要再发送一封按照上面所说的确认订阅邮件

3、确认订阅

注意:不要直接回复邮件,而是重新发送

4、得到回复的邮件通知,表示成功订阅了

最后,邮件上说了如何取消订阅的操作。

附录:

linux其它邮件列表:Majordomo Lists at VGER.KERNEL.ORG

linux内核邮件格式要求:http://www.juliantec.info/mlist/mail-lists.html

有趣的邮件记录:

一. 人生三问
 

What are you trying to do?  

What problem are you solving?

Why are you doing any of this?
 

On Fri, Apr 22, 2022 at 04:51:25AM -0700, Qing Wang wrote:
From: Wang Qing <wangqing@vivo.com>

When ACPI is not enabled, we can get cache topolopy from DT like:
*    cpu0: cpu@000 {
*      next-level-cache = <&L2_1>;
*      L2_1: l2-cache {
*         compatible = "cache";
*        next-level-cache = <&L3_1>;
*       };
*      L3_1: l3-cache {
*         compatible = "cache";
*       };
*    };
*
*    cpu1: cpu@001 {
*      next-level-cache = <&L2_1>;
*    };
*    ...
*    };
cache_topology[] hold the pointer describing by "next-level-cache", 
which can describe the cache topology of every level.

MAX_CACHE_LEVEL is strictly corresponding to the cache level from L2.

I have no idea what this changelog means at all.

What are you trying to do?  What problem are you solving?  Why are you
doing any of this?

完整邮件:

On Fri, Apr 22, 2022 at 04:51:25AM -0700, Qing Wang wrote:
From: Wang Qing <wangqing@vivo.com>

When ACPI is not enabled, we can get cache topolopy from DT like:
*    cpu0: cpu@000 {
*      next-level-cache = <&L2_1>;
*      L2_1: l2-cache {
*         compatible = "cache";
*        next-level-cache = <&L3_1>;
*       };
*      L3_1: l3-cache {
*         compatible = "cache";
*       };
*    };
*
*    cpu1: cpu@001 {
*      next-level-cache = <&L2_1>;
*    };
*    ...
*    };
cache_topology[] hold the pointer describing by "next-level-cache", 
which can describe the cache topology of every level.

MAX_CACHE_LEVEL is strictly corresponding to the cache level from L2.

I have no idea what this changelog means at all.

What are you trying to do?  What problem are you solving?  Why are you
doing any of this?



V2:
make function name more sense

As per the documentation this goes below the --- line, right?



Signed-off-by: Wang Qing <wangqing@vivo.com>
---
drivers/base/arch_topology.c  | 47 ++++++++++++++++++++++++++++++++++-
include/linux/arch_topology.h |  3 +++
2 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c
index 1d6636ebaac5..46e84ce2ec0c 100644
--- a/drivers/base/arch_topology.c
+++ b/drivers/base/arch_topology.c
@@ -480,8 +480,10 @@ static int __init get_cpu_for_node(struct device_node *node)
return -1;

cpu = of_cpu_node_to_id(cpu_node);
-  if (cpu >= 0)
+  if (cpu >= 0) {
topology_parse_cpu_capacity(cpu_node, cpu);
+    topology_parse_cpu_caches(cpu_node, cpu);
+  }
else
pr_info("CPU node for %pOF exist but the possible cpu range is :%*pbl\n",
cpu_node, cpumask_pr_args(cpu_possible_mask));
@@ -647,6 +649,49 @@ static int __init parse_dt_topology(void)
}
#endif

+/*
+ * cpu cache topology table
+ */
+#define MAX_CACHE_LEVEL 7
+static struct device_node *cache_topology[NR_CPUS][MAX_CACHE_LEVEL];

So for a normal big system of 4k cpus * 7 levels, that's a lot of
memory?  are you sure?

How big of a box did you test this on?

+
+void topology_parse_cpu_caches(struct device_node *cpu_node, int cpu)
+{
+  struct device_node *node_cache = cpu_node;
+  int level = 0;
+
+  while (level < MAX_CACHE_LEVEL) {
+    node_cache = of_parse_phandle(node_cache, "next-level-cache", 0);
+    if (!node_cache)
+      break;
+
+    cache_topology[cpu][level++] = node_cache;
+  }

No locking anywhere?  What could go wrong :(

+}
+
+/*
+ * find the largest subset of the shared cache in the range of cpu_mask
+ */
+void find_subset_of_share_cache(const struct cpumask *cpu_mask, int cpu,
+                 struct cpumask *sc_mask)

Again, horrid global function name.

And no kernel documentation for how this works?



+{
+  int cache_level, cpu_id;
+
+  for (cache_level = MAX_CACHE_LEVEL - 1; cache_level >= 0; cache_level--) {
+    if (!cache_topology[cpu][cache_level])
+      continue;

No locking???


+
+    cpumask_clear(sc_mask);
+    for (cpu_id = 0; cpu_id < NR_CPUS; cpu_id++) {
+      if (cache_topology[cpu][cache_level] == cache_topology[cpu_id][cache_level])
+        cpumask_set_cpu(cpu_id, sc_mask);
+    }
+
+    if (cpumask_subset(sc_mask, cpu_mask))
+      break;
+  }
+}
+
/*
* cpu topology table
*/
diff --git a/include/linux/arch_topology.h b/include/linux/arch_topology.h
index 58cbe18d825c..c6ed727e453c 100644
--- a/include/linux/arch_topology.h
+++ b/include/linux/arch_topology.h
@@ -93,6 +93,9 @@ void update_siblings_masks(unsigned int cpu);
void remove_cpu_topology(unsigned int cpuid);
void reset_cpu_topology(void);
int parse_acpi_topology(void);
+void topology_parse_cpu_caches(struct device_node *cpu_node, int cpu);
+void find_subset_of_share_cache(const struct cpumask *cpu_mask, int cpu,
+                 struct cpumask *sc_mask);

I still have no idea what this last function is supposed to do.

And very odd indentation, did you run checkpatch on this?

totally confused,

greg k-h

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟世者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值