From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id B7980C64EC4 for ; Fri, 10 Mar 2023 02:56:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 32905280001; Thu, 9 Mar 2023 21:56:30 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 2B3036B0074; Thu, 9 Mar 2023 21:56:30 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 17A08280001; Thu, 9 Mar 2023 21:56:30 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 04B576B0072 for ; Thu, 9 Mar 2023 21:56:30 -0500 (EST) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id C9FD51A13EA for ; Fri, 10 Mar 2023 02:56:29 +0000 (UTC) X-FDA: 80551475298.13.07C894A Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by imf12.hostedemail.com (Postfix) with ESMTP id 1445440004 for ; Fri, 10 Mar 2023 02:56:25 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=none; spf=pass (imf12.hostedemail.com: domain of wangkefeng.wang@huawei.com designates 45.249.212.187 as permitted sender) smtp.mailfrom=wangkefeng.wang@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1678416987; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=vT87YGgktJdj9T+D8+KT85q6n2CZqLFXzkUqqaM6JGU=; b=M+0T7sw2hjsJ8sy7XW0LzF+PqF+hhZDYxF6T9e/G+SbGjAA1q6WAg2VNpeOpAnGfwm/J3z SCL8iWthwP6xWeqCb1twZEuRYmExk+QwXSUxB0q50VZ7UXfZk6pnc2w58Kyf79eHrtS3cP McOY8lnP1f4xbcOOvHZ1pxz5rMzSb/E= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=none; spf=pass (imf12.hostedemail.com: domain of wangkefeng.wang@huawei.com designates 45.249.212.187 as permitted sender) smtp.mailfrom=wangkefeng.wang@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1678416987; a=rsa-sha256; cv=none; b=U8p/AwN6+zS1DCrBolEk5KTg7TVMF55mnxDU8bLMFSvpw03s1YuM8o+/QJ8Vv3rHRrTL9D ey+9UPNjbK8s2cvBfvsXrjqUtTDi358FdweGiDrjK/GLUIOI5c+/hOzAW4gBWetYEL4WG5 eYKKUZEmL4wfGBdVNmaSU98nG8oBCLQ= Received: from dggpemm500001.china.huawei.com (unknown [172.30.72.57]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4PXrJd6bVgzrS7W; Fri, 10 Mar 2023 10:55:29 +0800 (CST) Received: from [10.174.177.243] (10.174.177.243) by dggpemm500001.china.huawei.com (7.185.36.107) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.21; Fri, 10 Mar 2023 10:56:17 +0800 Message-ID: <5251f2a0-95bf-3330-6524-ec5716cc3d29@huawei.com> Date: Fri, 10 Mar 2023 10:56:16 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.5.1 Subject: Re: [PATCH v3] mm,kfence: decouple kfence from page granularity mapping judgement Content-Language: en-US To: Zhenhua Huang , , , , , , , , , , CC: , , , , , References: <1678413750-6329-1-git-send-email-quic_zhenhuah@quicinc.com> From: Kefeng Wang In-Reply-To: <1678413750-6329-1-git-send-email-quic_zhenhuah@quicinc.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.174.177.243] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpemm500001.china.huawei.com (7.185.36.107) X-CFilter-Loop: Reflected X-Rspam-User: X-Rspamd-Server: rspam03 X-Stat-Signature: 8bddojk646dhdmmyimrcrhukxnqtkgjt X-Rspamd-Queue-Id: 1445440004 X-HE-Tag: 1678416985-677829 X-HE-Meta: U2FsdGVkX19e368YIwQ845dFWfuMD9hfFg/Un2te1F4pQvr21IX7B0AYhOvomsK47Uiz5ktlK3DqC9TWocF7VTBEVEMDYPZ9ppFZgtawiX/2bYnhGo92ZG3paKfsfBN1p2fBcowXTcuQMSKBFULoeC6elIUSYj+mZ9YV/h9DxyrbRA5r6mSXEQWzy3cJBua+wqc2T2Pgizx4G1LcnDWr/+wHqnF1j4P2tUds6Vsf+AlS690rwVvRETcZ0pvEfCRtuw3W+6TUB/8hAOUQb+L8DTOmNHnTnqDRLNr9ugbVBGb9r/otCON6jBsoih8c5gPrHn86jivPQRyXs+fIDZjGrYz1moZZO/XKYYEfW1SDoHcncqV89u/4HqBOs2+cOPvKpuiACOrt7vHQgxK8E+xf7cH30BedkrOtD6d8y2BeormPi2XX37fpphYZC6nGyL4fmO0DQNK0Mi+/po69LeTIaNzhgqWpf8yCQeZTGtMjLtg6NQo/AG0VYaWKIZhO+lYqdZoInofHdHNNtm/A56tRGiJa4e5bVeMmzWYAdd8+s2g3zDrAeHZJu7ZrzjU3iurcKCgZW4bnqeV9OqDPkKIYiAjkRlHhCYoMXjzQBmLxTqmQX/9YLbNs7uCWpIvjWsILy4cfqSxRFIv/83neU+i42wU/91HNNGqU7VHo6JmRm36fZEkDt3T01oRCVsuaPnzvkb5Rzw7XU9EooID/r+ZFQU/vpTnhsOeM+J6RAHtTk/HxHSl66nLATWTPumqgJB+Wm043Q4pypC4Hdx1Ze2caz4ZJGOf3GqhWhxcZUQeFIih3TM5EG5KuITvC60H3psuL7JDxNiEpf+FbrYybT1NQ2mvaZQIetg6ad02NhECWTNogPGVy6cHg7EajKeSAM5fe9TEix5w6hlQB05XyZY2NzlaWsnEzaF+ciNJ3nv+soeuEjhGuF4Y7B2IIv+k8wIfGVsgr2fn3dGmyYKgoSRu J+24TELI djuDGy8238IDy9D2emg94R4aGL+jS5zl3tVK+QpjRlZHwi9KboXA7C6a9Gi6YIP6i0po8QAItLKWqATIasWy12XCnXByvN9d6pZ4ikzQ0L+gyU+mFRh+qN/LHbInpbzeWY5OUMjghlCeOtrl2s49PuRlFepWWaxg+0KQnjzsBveZ+7m7adZgmqgLMrrbc3O1qdQ5nM2E/E5BaJUBErY1YAQdN/D6kW9rvEBu6r6+GFXa4x8OUyW804NVgUwTx9I8rxfC0ozLglwg4sW2MgJGTI52xuEYo+JQ4LGpFVo7qhICgE8vHLNwssh265ZQPW+PyECDP4Rq7iMR9oZ0= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Hi Zhenhua, On 2023/3/10 10:02, Zhenhua Huang wrote: > Kfence only needs its pool to be mapped as page granularity, previous > judgement was a bit over protected. Decouple it from judgement and do > page granularity mapping for kfence pool only [1]. > > To implement this, also relocate the kfence pool allocation before the > linear mapping setting up, arm64_kfence_alloc_pool is to allocate phys > addr, __kfence_pool is to be set after linear mapping set up. > We do the same way in our 5.10 kernel, a minor comment below, > LINK: [1] https://lore.kernel.org/linux-arm-kernel/1675750519-1064-1-git-send-email-quic_zhenhuah@quicinc.com/T/ > Suggested-by: Mark Rutland > Signed-off-by: Zhenhua Huang > --- > arch/arm64/mm/mmu.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ > arch/arm64/mm/pageattr.c | 5 ++--- > include/linux/kfence.h | 8 ++++++++ > mm/kfence/core.c | 9 +++++++++ > 4 files changed, 63 insertions(+), 3 deletions(-) > > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c > index 6f9d889..9f06a29e 100644 > --- a/arch/arm64/mm/mmu.c > +++ b/arch/arm64/mm/mmu.c > @@ -24,6 +24,7 @@ > #include > #include > #include > +#include > > #include > #include > @@ -525,6 +526,33 @@ static int __init enable_crash_mem_map(char *arg) > } > early_param("crashkernel", enable_crash_mem_map); > > +#ifdef CONFIG_KFENCE > + > +static phys_addr_t arm64_kfence_alloc_pool(void) > +{ > + phys_addr_t kfence_pool = 0; The kfence_pool is no need to be initialized. > + > + if (!kfence_sample_interval) > + return (phys_addr_t)NULL; And one more missing case, kfence support late int, see commit b33f778bba5e ("kfence: alloc kfence_pool after system startup"), this changes will break this feature, we add a new cmdline to alloc kfence_pool regardless of kfence_sample_interval value, maybe there some other way to deal with this issue. > + > + kfence_pool = memblock_phys_alloc(KFENCE_POOL_SIZE, PAGE_SIZE); > + if (!kfence_pool) { > + pr_err("failed to allocate kfence pool\n"); > + return (phys_addr_t)NULL; no need this return; > + } > + > + return kfence_pool; > +} > + > +#else > + > +static phys_addr_t arm64_kfence_alloc_pool(void) > +{ > + return (phys_addr_t)NULL; > +} > + > +#endif > + I like all of '(phys_addr_t)NULL' to 0 > static void __init map_mem(pgd_t *pgdp) > { > static const u64 direct_map_end = _PAGE_END(VA_BITS_MIN); > @@ -532,6 +560,7 @@ static void __init map_mem(pgd_t *pgdp) > phys_addr_t kernel_end = __pa_symbol(__init_begin); > phys_addr_t start, end; > int flags = NO_EXEC_MAPPINGS; > + phys_addr_t kfence_pool = 0; it's no need to be initialized too. > u64 i; > > /* > @@ -564,6 +593,10 @@ static void __init map_mem(pgd_t *pgdp) > } > #endif > > + kfence_pool = arm64_kfence_alloc_pool(); > + if (kfence_pool) > + memblock_mark_nomap(kfence_pool, KFENCE_POOL_SIZE); > + > /* map all the memory banks */ > for_each_mem_range(i, &start, &end) { > if (start >= end) > @@ -608,6 +641,17 @@ static void __init map_mem(pgd_t *pgdp) > } > } > #endif > + > + /* Kfence pool needs page-level mapping */ > + if (kfence_pool) { > + __map_memblock(pgdp, kfence_pool, > + kfence_pool + KFENCE_POOL_SIZE, > + pgprot_tagged(PAGE_KERNEL), > + NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS); > + memblock_clear_nomap(kfence_pool, KFENCE_POOL_SIZE); > + /* kfence_pool really mapped now */ > + kfence_set_pool(kfence_pool); > + } > } >