From nobody Mon Feb 9 05:59:34 2026 Received: from TYDPR03CU002.outbound.protection.outlook.com (mail-japaneastazon11013018.outbound.protection.outlook.com [52.101.127.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0D8A322F743; Thu, 24 Apr 2025 12:10:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.127.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745496636; cv=fail; b=dhNvEmVUkjAka8hp4wXLYqypCZOoSZ/U+0LDnJlgqhRlIlLkXnZ/JnVU6c3ZhXgF7nv5vaQRWIx8zL6k5Vb1PM66I0Z1d2SVGpVe72cTPcJrPZT7p+oz5tFkLyTEqniLl+Bz+90+pacrrbW9RXtnkUn+9V1e8FCrC28Q2zlSWrc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745496636; c=relaxed/simple; bh=2Atqiwrk1bX4lVh8KLY8Ms964TnYvnefAK9Jw3pblCM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=f10YV8Q04asZAUMSK2n2ZmRH2KUeER7Ei1x5TFNa2k+GIn1W/6Fk7as9hFlfpo3pzeP61blklqW7wH+TOwK/MR3E9oRiJG+MsvjZcnnxM8h6LbrPHsmmz9eodxm+H4NzSUxnRTg6hBYLJLLX5IqDaepLBpkIQrDHHdf40JM03gI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=vivo.com; spf=pass smtp.mailfrom=vivo.com; dkim=pass (2048-bit key) header.d=vivo.com header.i=@vivo.com header.b=KrDa1lXh; arc=fail smtp.client-ip=52.101.127.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=vivo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=vivo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=vivo.com header.i=@vivo.com header.b="KrDa1lXh" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CPn6EJoPy9WJAJfrgKFkOo76StDBa+AG7rChTyxSn2CE/0pa2UcGEmF0tfb3x0avfFznfRgE/WzxEF63CHqF+pjuwBmfQ+dZf4qGxezX2qTs88ZI3MArSCSbpJp5yH7VA5Agl42wp3PrQsBZ7RkzInvNFzQWmr+0LdE1hJ4MkV87gd4hzF8taLll+BRdA1ezeTVvm0Bi52mkId/x1aAg3b+MQzHDU9e/nJubLylXfUfpyslJAQhqjotnQpLjLuQXP75UjRJnznDQl8SfTt69yfCxMQEAp5aZqx5nu7TvQN+pzdCTueVjzPq7Zvvy/5wtBgcSpCCEtFQWLcb5Tn2obQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=K2NULMSx/SoJwJqJ0bqSDKpg8Ei1TuQRy9P/VGZ5RyM=; b=QomC9Zom2WJdHD5zjPuImaDPSsed+GETSg7V67OYv+Fp2nDi0Y1GLA8zjrd1bfKZhyD6HWfgPUIXUZuJ1fhMB07UVOpqx5667Nu+jwtZZzhUvCEOhbFF7WKLuD1EtM0aE0P0J0WSy5rRdqcu2sdY0I1gl0Y8xB+E0E2BLxTdNwpKz1oIzOWJIwz8wF4VEYskBH+9xxDtfZZfoT8CHqGZM2PuDBL3r8DoqhZGjxZ1BXafbYM20IT6cQS0iME9lg9+yGNK0msgrW7tuaeLroiNaro9VoPTZm3YEEymF34UgO9El5Zku+9I0yVlkmd9NL4F+Z3iaAjl1tDGFqT9YNJOlA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=vivo.com; dmarc=pass action=none header.from=vivo.com; dkim=pass header.d=vivo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vivo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=K2NULMSx/SoJwJqJ0bqSDKpg8Ei1TuQRy9P/VGZ5RyM=; b=KrDa1lXhFnqMVPCigcFTw3Z4tlcxlv9tA6CrAsYYPqEeHsGRn005Mhn9d4+7hDUsXNt7Uf6eXv044OHC9VXR/jHSrfkLYdiaVICcEjoHvylnj9apSanCj1DxglrDs/+uPN2e/9acUFVkkvWXJT8HQYUG+Xf4yrG7zFzXe+wpfv+yTG9Sys/k6Dyb7P5vKnqBIhkNV8lYRFuWG5h8ZHEEeomux/tsqy7UeB9vFtRcSZ1nko5dI9i9IHkgS3AyJbJ8WVBZtHR5+TuWrsgdm0DNRiFZ6oYNxIzdBiIYl2yNtJ3rXxgiymZV4ulGIJlx8Bly2bl6kb1eRIMaPs59Fnbecw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=vivo.com; Received: from PUZPR06MB5676.apcprd06.prod.outlook.com (2603:1096:301:f8::10) by SEZPR06MB6231.apcprd06.prod.outlook.com (2603:1096:101:e8::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.25; Thu, 24 Apr 2025 12:10:32 +0000 Received: from PUZPR06MB5676.apcprd06.prod.outlook.com ([fe80::a00b:f422:ac44:636f]) by PUZPR06MB5676.apcprd06.prod.outlook.com ([fe80::a00b:f422:ac44:636f%6]) with mapi id 15.20.8632.036; Thu, 24 Apr 2025 12:10:32 +0000 From: Huan Yang To: Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Andrew Morton , Petr Mladek , Sebastian Andrzej Siewior , Huan Yang , Francesco Valla , Huang Shijie , KP Singh , "Paul E. McKenney" , Rasmus Villemoes , "Uladzislau Rezki (Sony)" , Guo Weikang , Raul E Rangel , cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Boqun Feng , Geert Uytterhoeven , Paul Moore , "Mike Rapoport (Microsoft)" Cc: opensource.kernel@vivo.com Subject: [PATCH v2 3/3] mm/memcg: introduce mem_cgroup_early_init Date: Thu, 24 Apr 2025 20:09:29 +0800 Message-ID: <20250424120937.96164-4-link@vivo.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250424120937.96164-1-link@vivo.com> References: <20250424120937.96164-1-link@vivo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SI2PR02CA0004.apcprd02.prod.outlook.com (2603:1096:4:194::14) To PUZPR06MB5676.apcprd06.prod.outlook.com (2603:1096:301:f8::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR06MB5676:EE_|SEZPR06MB6231:EE_ X-MS-Office365-Filtering-Correlation-Id: 3ad29a89-7353-4c8e-9825-08dd832902d3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|52116014|7416014|376014|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?+XIJbNXm5zweKLZJUCvT1tE6yW+k6TRH7Jrm1NUiaEFAjlOGyMc+5F5nQNRA?= =?us-ascii?Q?7g2yE0Tu6QDXnJWK5urjVmoKyhwOe0hIP2Ytnh5M2hTgaSHp3+Kbbg56qTso?= =?us-ascii?Q?sDPIyzPCBTjsS5Sg8ALncY3JnC9vm25sADDFRC90pym+Z/Hn2TBwBQnWcrgW?= =?us-ascii?Q?VT41ZDYdDQvoFpHGokQI1Gl+dJHKa9A2Kmk75n9CQnzLyEgEIR0XXSdBcgCv?= =?us-ascii?Q?DYHdMo7iGZu8Y3oMOJiduI2DVtuNK6QRjyz7SfjPsMfPLp5ziW+8sJadNaoo?= =?us-ascii?Q?7pdaaH41jdMMCzHFDbNwDRgr6iqgfbCjUq4o5WcC56vvOWykqU/SH/Lhl3th?= =?us-ascii?Q?SVbxxMKKaBUQ4oxjcsauLKDjcAK5jbGyQxLQw+MJkeDRJRmaoQTHt8sLToP5?= =?us-ascii?Q?6mWKWi2X91VxCj5Ka0AeVf899CoSA6lR9Xs4JRkf2nG4lQEe6V8jYUnOWfmW?= =?us-ascii?Q?wlqDAWA7YqRNViUA9vHMI49EIrHdDay+J5SNBSZL4qDiygDnrWkSCi11MPuX?= =?us-ascii?Q?JptGz/5sn105B+BPDZ6G9T8rWGSf5hVAK6kB9eckX6ZNHl3HRKtSZEf1Bu1v?= =?us-ascii?Q?zs0/hyInke0Q9ggOcuV/PxblyHV92+aPs76RmszyzegH1Ktmnnt60JHciyuW?= =?us-ascii?Q?3S+LzgV0qCqL0oVor7D0XOi38NcsABt1NskkUC9ZCyhoKbibHG/w/vRe54G5?= =?us-ascii?Q?F/0MCzCD3FhNUQ+skFHrKKXWrhOeKZHijwDG+7mhDZoIi108SlKtV5VhBij7?= =?us-ascii?Q?FNbuwEm57a4BtUteorbvqKa1Hw+8OCZSi4mFB6ErXWa6KSGbtUbBJ2oZNv08?= =?us-ascii?Q?fdfj7sS7FJvemS0ISnXNV5UkNRdBJ1j60/B8YygHkdjHiU4ySsCtKEt87TH/?= =?us-ascii?Q?KH891wF94Qi5vidHURJEqKx2AKp4bZAA2t3y6AImsvlRKA91NXGCsMT1JqHR?= =?us-ascii?Q?0qZd7FUCa4XagjsjMVtECCEeTHSu7u6KAm+BIEFcEGPaZDrnI4xKGC8cfP7r?= =?us-ascii?Q?4D0pZrJIhHnOp5iwx9p27IpS41LbFtcZBq0M8BFfzhWk4wRTFHX+vibPAvyD?= =?us-ascii?Q?nBONoCCZJ4Wj2Vq+tAblsm276IWXhcjVB7GSaGh517tqlfoe4JbYc05MUdoZ?= =?us-ascii?Q?x5GLG2+kKjZYW8jNXfhCEWnDdAOmmAKtK6g0ZqyyJvQsoL//d2nG5WUFb0jJ?= =?us-ascii?Q?1hwAe13u53vwra+s7JoWYnnArDfYkbSx4dBHke3eYdJOc1uq3y4kdwe7XI33?= =?us-ascii?Q?gRkZDxd5aJpXBuM4xoY4f9QNsoLJaXZeZvzygeeYJllr6F5zJIzrAWM1TS1H?= =?us-ascii?Q?WioQ8cQ7/fFvULrHnrPvW2WcyiLMPleP0eQz1WAy+vcWN27uvXJrPATlbt9m?= =?us-ascii?Q?p5Yr+UtMzanj4pdHwYRoYPkJSgMuWAn8KwMvTgopwVWax71Im1f7ng9zvg5O?= =?us-ascii?Q?tRYFxdWoNagI7oXfYuYURJp0VhwJFbkbdRS9cr82iWTFBZSuGW+ovbw88072?= =?us-ascii?Q?cA/R045PnWbu6+A=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR06MB5676.apcprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(52116014)(7416014)(376014)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zAc5p1TMNEe6/RFe3U/The5Ny2fhDpPqDHc3q1e1DaemdcqN1tzyaWCA8x3i?= =?us-ascii?Q?FVchCCTonk+irmxOUbv1cmAKZ7IWemfoME3tlD9/bEoYAxf+eVyMECP80SNg?= =?us-ascii?Q?qUsnBIWJcMkYSziNcZQ1siG+T5FYGoc/7QfxJMG533T28CePknJj6zjYz7gy?= =?us-ascii?Q?3S575rQjMKfo7T9ZgWW+4WDRQgjA7BA8lobfytV5kkvs7gHK35QCob//mKJT?= =?us-ascii?Q?Pv49lu5YY4GoeiP/6A/cijfkNhqZj5EDaKMN6kRMKSLsiZ7LXC8Yx1/827zY?= =?us-ascii?Q?CAxKiNQC/2wPB+qcl0jtqXdC6/MEk+s7q25Na6nxuJv515Yhjg02LpWw5/gy?= =?us-ascii?Q?dJTdFllEGRwrfOl/UmBYiIjW+uMwADoCY4YdWP7DIhmmxRR0FF7i7qug4kPa?= =?us-ascii?Q?Zm+p7j29gB4j65clT4Nv+EfquOd2oIYmyW+3sSlhuI0LMw5ki10ZsvIYZ0Kl?= =?us-ascii?Q?TwLuzt8JQJT/L/EjWExKhTehXYl8DpI4eDOHbvuw9HhBRB96WCfeUw9uTe4+?= =?us-ascii?Q?lOUtAYAOXdqgMBSQ/+X6VPTVCpGI5rHTO6MphnyOo4GuM3RdJ70hflffrPSH?= =?us-ascii?Q?HYE83gAq9kB+ykcpmgpTzRIs8JTNtxdgPTpk+Mo7q0BCkTJlfUF24cTvI/xp?= =?us-ascii?Q?OwmxunTUO24BqY9FpZmuHfVepw+z+VD2z/I96/EKgA9l68dssMJPBtit5xvK?= =?us-ascii?Q?wIIaV2MolOkx2Al+f5cq0U3MMx2jWxX3P6XOWeuRUOT2p9biPpnXd5HX5F1o?= =?us-ascii?Q?spcEnRmWusZHgBmboLtDY5SJTc/CYO2ypNq/aVhfZEeo6LuwbFD//IF7/ZID?= =?us-ascii?Q?a3uYMtUekITFo89SYCA67E6R/gV84h2KshgVYw2jJxW/4rSPAzOxMldO7+gr?= =?us-ascii?Q?XZxEjPnJUV3dxrne8FP++rcFDwltMK5F/lo/998zWs66pFATPEhIrWUqaZuQ?= =?us-ascii?Q?qQCfDoDQnLwkp9I7WLIjYTtN6fy8OqigvdH5ynnJM6ryZmuexj73LXOQ8rhF?= =?us-ascii?Q?friq80Un4l2XzPz9MN2YRKKEwhsNis2p9MEIGSs1fzoRTn9O4MIzFaRboUmK?= =?us-ascii?Q?TfReeEyTXYRAiztmnHBjvJIRCQcUV+cTjMSUECIUxZvfXstCJfzaUeQhJ7hW?= =?us-ascii?Q?UywlvyhMMZzMPMeQ2r2S3xZwB7tZVLWEYX4eN0Aq+5XJ6Fw/i3konKNdUwph?= =?us-ascii?Q?iWtllCCXaomATFWaOJT7o9r4EPbHlmv/KOnJjcUo7U0cfh+GUXY4bq6Z5wav?= =?us-ascii?Q?pfcTMyoEOU+34LQRCRp78AbSReMzKHrXji0Mhsa/mBVuDKa0EBf+Btf50eBN?= =?us-ascii?Q?7KIkFB7KB2V4p+8D9EflfS5ytxX+JGzc4yKa6eqpGL0s50fOCIKjeivFbNU7?= =?us-ascii?Q?tirVoHAw6kdldOxKSsrypGaNLQK9qhpKPLNRSWW76Czvcy8AN024FOa69WF2?= =?us-ascii?Q?fNbM34iBHtg2LmQ9szRzBtQvzLIOrbmb82HscqSKJ2fUI8Y3oRT0HwkNmInA?= =?us-ascii?Q?gppDeABy/3hLhUX6sZFBVs5R8U2zmBipDkl2/+wFBa+7w7P2WNULtjis7xmF?= =?us-ascii?Q?pkxaKEzNNa5xItLT24NDf0bpdHooF8uWNXV8GZzQ?= X-OriginatorOrg: vivo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3ad29a89-7353-4c8e-9825-08dd832902d3 X-MS-Exchange-CrossTenant-AuthSource: PUZPR06MB5676.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Apr 2025 12:10:32.2786 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 923e42dc-48d5-4cbe-b582-1a797a6412ed X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: vxLRpAxweoBQXOjqvcQnFBgKTugr15P7Jz6WdT5xJ/00b5CNKeo0s4nfwC4/gSmnyZzFmCWf4OMzGf3/CmN0NA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR06MB6231 Content-Type: text/plain; charset="utf-8" When cgroup_init() creates root_mem_cgroup through css_online callback, some critical resources might not be fully initialized, forcing later operations to perform conditional checks for resource availability. This patch introduces mem_cgroup_early_init() to address the init order, it invoke before cgroup_init, so, compare mem_cgroup_init which invoked by initcall, mem_cgroup_early_init can use to prepare some key resources before root_mem_cgroup alloc. Signed-off-by: Huan Yang Suggested-by: Shakeel Butt --- include/linux/memcontrol.h | 5 +++++ init/main.c | 2 ++ mm/memcontrol.c | 40 +++++++++++++++++++++++--------------- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 5264d148bdd9..231f3c577294 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -1057,6 +1057,7 @@ static inline u64 cgroup_id_from_mm(struct mm_struct = *mm) return id; } =20 +extern void mem_cgroup_early_init(void); #else /* CONFIG_MEMCG */ =20 #define MEM_CGROUP_ID_SHIFT 0 @@ -1472,6 +1473,10 @@ static inline u64 cgroup_id_from_mm(struct mm_struct= *mm) { return 0; } + +static inline void mem_cgroup_early_init(void) +{ +} #endif /* CONFIG_MEMCG */ =20 /* diff --git a/init/main.c b/init/main.c index 6b14e6116a1f..fd59d5ba2dc7 100644 --- a/init/main.c +++ b/init/main.c @@ -50,6 +50,7 @@ #include #include #include +#include #include #include #include @@ -1087,6 +1088,7 @@ void start_kernel(void) nsfs_init(); pidfs_init(); cpuset_init(); + mem_cgroup_early_init(); cgroup_init(); taskstats_init_early(); delayacct_init(); diff --git a/mm/memcontrol.c b/mm/memcontrol.c index e8797382aeb4..bef1be3aad6f 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3602,10 +3602,8 @@ static bool alloc_mem_cgroup_per_node_info(struct me= m_cgroup *memcg, int node) { struct mem_cgroup_per_node *pn; =20 - pn =3D likely(memcg_pn_cachep) ? - kmem_cache_alloc_node(memcg_pn_cachep, - GFP_KERNEL | __GFP_ZERO, node) : - kzalloc_node(sizeof(*pn), GFP_KERNEL, node); + pn =3D kmem_cache_alloc_node(memcg_pn_cachep, GFP_KERNEL | __GFP_ZERO, + node); if (!pn) return false; =20 @@ -3658,10 +3656,7 @@ static struct mem_cgroup *mem_cgroup_alloc(struct me= m_cgroup *parent) int __maybe_unused i; long error; =20 - memcg =3D likely(memcg_cachep) ? - kmem_cache_zalloc(memcg_cachep, GFP_KERNEL) : - kzalloc(struct_size(memcg, nodeinfo, nr_node_ids), - GFP_KERNEL); + memcg =3D kmem_cache_zalloc(memcg_cachep, GFP_KERNEL); if (!memcg) return ERR_PTR(-ENOMEM); =20 @@ -5037,6 +5032,27 @@ static int __init cgroup_memory(char *s) } __setup("cgroup.memory=3D", cgroup_memory); =20 +/** + * Before cgroup_init() create root_mem_cgroup, we can prepare + * something in here which root_mem_cgroup may need. + * This currently initializes: + * 1) memcg_cachep - kmem_cache for mem_cgroup struct allocations + * 2) memcg_pn_cachep - kmem_cache for mem_cgroup_per_node structs + * (one per NUMA node) + */ +void __init mem_cgroup_early_init(void) +{ + struct mem_cgroup *memcg; + unsigned int memcg_size; + + memcg_size =3D struct_size(memcg, nodeinfo, nr_node_ids); + memcg_cachep =3D kmem_cache_create("mem_cgroup", memcg_size, 0, + SLAB_PANIC | SLAB_HWCACHE_ALIGN, NULL); + + memcg_pn_cachep =3D KMEM_CACHE(mem_cgroup_per_node, + SLAB_PANIC | SLAB_HWCACHE_ALIGN); +} + /* * subsys_initcall() for memory controller. * @@ -5048,7 +5064,6 @@ __setup("cgroup.memory=3D", cgroup_memory); static int __init mem_cgroup_init(void) { int cpu; - unsigned int memcg_size; =20 /* * Currently s32 type (can refer to struct batched_lruvec_stat) is @@ -5065,13 +5080,6 @@ static int __init mem_cgroup_init(void) INIT_WORK(&per_cpu_ptr(&memcg_stock, cpu)->work, drain_local_stock); =20 - memcg_size =3D struct_size_t(struct mem_cgroup, nodeinfo, nr_node_ids); - memcg_cachep =3D kmem_cache_create("mem_cgroup", memcg_size, 0, - SLAB_PANIC | SLAB_HWCACHE_ALIGN, NULL); - - memcg_pn_cachep =3D KMEM_CACHE(mem_cgroup_per_node, - SLAB_PANIC | SLAB_HWCACHE_ALIGN); - return 0; } subsys_initcall(mem_cgroup_init); --=20 2.48.1