Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp117485imj; Wed, 13 Feb 2019 05:41:16 -0800 (PST) X-Google-Smtp-Source: AHgI3IbBhsx8iRWR99xQYXp13K/rPhwRfPbFsfdUnq8XaQ90S1sSZB3nqk0RmzskhAhUQptLAv9p X-Received: by 2002:a62:5f47:: with SMTP id t68mr586858pfb.89.1550065275925; Wed, 13 Feb 2019 05:41:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1550065275; cv=none; d=google.com; s=arc-20160816; b=PxArlX6ZIt8kWEObiX7Gj6Mh9HsyeTrkeJELVC63oQXErudUc++mD141AC2modltuT 9W/o8lGpNvsI+IC7kCucX3zpiTlPOO/VtZe2TIqcKx6PgyfOIqFPbYROvuSiVH6LEevb 7ib9sQZTDSUbu/vo2DjukPfqLdaGX/Gu1GwK/h0kN2i8HvP5tPqZzepyg0zMBAIYeulS fN3Jux1ASaksb+tEnxM/9dr0jsQpz4+TWamTdQMywnmXL1jDX3+kC1OlFEJTyiqV6N44 kj/CqDZhySgIjS12oT6Wq2KlOBL6l01zK7XSm1D+Vd01LUvbBN9oDIE6xDvWypi7GOrs prXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=XeiGOFny/PvKbXqkedANt10pJAYMJYW3szL+IqAnA9o=; b=OYE1nPXYtc9SyaItibF0edycIgT8Z+GlrxjWk7n+wOPLfGTToSfRXE5xPeXVV7ZNHK dwOLVMdM7hPq3tRH+vm+nzWuQbLrYeffZomgAV2KGFidmq1X8hSObJABWgF2oW4mneOk 7izwD37RtdZYTOaf/t0P5MnEUtoOosIjP4rBrlKRnYVMudFmHvjUaUvao0mBqe3lQMru YW0gRjFBwz2+vwKm75LcuvRHL+KUEdi1gosa9UnP5Igb2VtUh1lfR1/3DC1BFKkuADkC P9/T4me+mqE6e7vmNp5XPFgwmgzSuA9vWJPaJM1WYeIbLOGpDXqSzwdyds65vCqlyQ5v 4HwA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=E65OioZs; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c125si13180440pfa.216.2019.02.13.05.40.59; Wed, 13 Feb 2019 05:41:15 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=E65OioZs; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388811AbfBMJ4u (ORCPT + 99 others); Wed, 13 Feb 2019 04:56:50 -0500 Received: from mail-qt1-f193.google.com ([209.85.160.193]:40763 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732643AbfBMJ4u (ORCPT ); Wed, 13 Feb 2019 04:56:50 -0500 Received: by mail-qt1-f193.google.com with SMTP id j36so1830988qta.7 for ; Wed, 13 Feb 2019 01:56:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=XeiGOFny/PvKbXqkedANt10pJAYMJYW3szL+IqAnA9o=; b=E65OioZsifoTJ5uaMGJzSmerPfPGfEAzIiEANzx0pDzpHGg7JfWB6o2KiqLMaJsZTE woNKE4MZ1IDA32TpC/mcFSO65FaTgwHm74PfJIEW7dLz5/OEcKlJtSQR46F6gPNe4WdH CBn7Z2AuOmnjfF5e7LPXJOEG5+fRDLsiL89t8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=XeiGOFny/PvKbXqkedANt10pJAYMJYW3szL+IqAnA9o=; b=RkJwghynAWeuuAgQjcUxin4UH4X4xhUM/WlOsT4BQnu2Fd9Imr3Ac4uNhfRY8dNYNJ MkYX5w8lHUH6cC517cOASFpF5Yx4/WI8hxGuvL9TR5PcRNZ8LLCzXcrlPvby5BO6xV+6 C2aTz8H+FwR9Sp0PE/6v3D4w7dQNshqG5GMMMTXqj+a9ZzURpalR/TrtBs3QXYUxel8h f/d6+YTnTEPZ+yuDwOOTtUYj8JUZ/v9zyKnNHZj885tEa0Vt4tTqV+63+iQ8PBfuLQ5u I4J5Wkjxwpq8R4ol3rZfMZFuw10avTF8jpE4848i2eATyRlaPi1pu4yjya5xToQhPlQY xk7A== X-Gm-Message-State: AHQUAuapkxy64SQ39mAyUdPxuAeTNVPX/Nb/7FGW21hjOjb3lAuUCday /8+lD1yeN6mhxDH8YM83hGlTmnmg/m5mCinZjNoL4Q== X-Received: by 2002:aed:2022:: with SMTP id 31mr1758875qta.368.1550051807956; Wed, 13 Feb 2019 01:56:47 -0800 (PST) MIME-Version: 1.0 References: <1541747389-28544-1-git-send-email-prpatel@nvidia.com> <39d4161b-bcc0-0f1c-e7a3-5ad552fae724@nvidia.com> In-Reply-To: <39d4161b-bcc0-0f1c-e7a3-5ad552fae724@nvidia.com> From: Nicolas Boichat Date: Wed, 13 Feb 2019 17:56:36 +0800 Message-ID: Subject: Re: [PATCH] of: reserved_mem: disable kmemleak scan on removed memory blocks To: Prateek Patel Cc: Rob Herring , Ard Biesheuvel , Will Deacon , matt@codeblueprint.co.uk, Catalin Marinas , Frank Rowand , devicetree@vger.kernel.org, "linux-kernel@vger.kernel.org" , linux-tegra@vger.kernel.org, talho@nvidia.com, Stephen Warren , vdumpa@nvidia.com, snikam@nvidia.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jan 22, 2019 at 4:46 PM Prateek Patel wrote: > > > On 11/10/2018 2:58 AM, Rob Herring wrote: > > On Fri, Nov 9, 2018 at 1:09 AM Prateek Patel wrote= : > >> From: Sri Krishna chowdary > >> > >> Memory reserved with "nomap" DT property in of_reserved_mem.c > >> removes the memory block. The removed memory blocks don't have > >> VA to PA mapping created in kernel page table. Kmemleak scan on > >> removed memory blocks is causing page faults and leading to > >> kernel panic. So, Disable kmemleak scan on the removed memory > >> blocks. > >> > >> Following is the observed crash log: > >> [ 154.846370] Unable to handle kernel paging request at virtual addre= ss ffffffc070a00000 > >> <1>[ 154.846576] Mem abort info: > >> <1>[ 154.846635] Exception class =3D DABT (current EL), IL =3D 32 b= its > >> <1>[ 154.846737] SET =3D 0, FnV =3D 0 > >> <1>[ 154.846796] EA =3D 0, S1PTW =3D 0 > >> <1>[ 154.846859] Data abort info: > >> <1>[ 154.846913] ISV =3D 0, ISS =3D 0x00000006 > >> <1>[ 154.846983] CM =3D 0, WnR =3D 0 > >> <1>[ 154.847053] swapper pgtable: 4k pages, 39-bit VAs, pgd =3D fffff= f8009df7000 > >> <1>[ 154.847228] [ffffffc070a00000] *pgd=3D000000087fff5803, *pud=3D0= 00000087fff5803, *pmd=3D0000000000000000 > >> <0>[ 154.847408] Internal error: Oops: 96000006 [#1] PREEMPT SMP > >> <4>[ 154.847511] Modules linked in: nvs_led_test nvs_bmi160 nvs_cm321= 8 nvs_bh1730fvc nvi_bmpX80 nvi_ak89xx nvi_mpu cdc_acm uas lr388k7_ts imx268= imx318 imx204 imx274 imx185 lc898212 ov23850 ov10823 ov9281 ov5693 tc35884= 0 pca9570 nvs snd_soc_tegra_machine_driver_mobile lp855x_bl spidev input_cf= boost pwm_tegra tegra_cryptodev tegra_se_nvhost tegra_se_elp tegra_se ghash= _ce sha2_ce sha1_ce aes_ce_ccm cryptd nvgpu cpufreq_userspace snd_soc_tegra= 186_alt_dspk snd_soc_tegra186_alt_asrc snd_soc_tegra186_alt_arad snd_soc_te= gra210_alt_ope snd_soc_tegra210_alt_mvc snd_soc_tegra210_alt_dmic snd_soc_t= egra210_alt_amx snd_soc_tegra210_alt_adx snd_soc_tegra210_alt_afc snd_soc_t= egra210_alt_mixer snd_soc_tegra210_alt_i2s snd_soc_tegra210_alt_sfc snd_soc= _tegra210_alt_adsp snd_soc_tegra210_alt_admaif snd_soc_tegra210_alt_xbar > >> <4>[ 154.882606] snd_soc_tegra_alt_utils snd_hda_tegra > >> <4>[ 154.888133] CPU: 2 PID: 8079 Comm: sh Not tainted 4.14.53-tegra-= 05132-g9c33465 #2 > >> <4>[ 154.895983] Hardware name: e3360_1099 (DT) > >> <4>[ 154.900447] task: ffffffc7d62dda00 task.stack: ffffff800e2b0000 > >> <4>[ 154.906502] PC is at scan_block+0x7c/0x148 > >> <4>[ 154.911234] LR is at scan_block+0x78/0x148 > >> <4>[ 154.915689] pc : [] lr : [] = pstate: 804000c9 > >> <4>[ 154.923290] sp : ffffff800e2b3b80 > >> <4>[ 154.927228] x29: ffffff800e2b3b80 x28: ffffffc7d62dda00 > >> <4>[ 154.932999] x27: ffffff8009aaa000 x26: ffffffc070c00000 > >> <4>[ 154.938769] x25: 00000000000000c0 x24: ffffff8009d90608 > >> <4>[ 154.944287] x23: ffffffc7dc6c6000 x22: ffffff8009d90000 > >> <4>[ 154.950320] x21: ffffff8009aeb320 x20: ffffffc070a00ff9 > >> <4>[ 154.955919] x19: ffffffc070a00000 x18: 00000000bec4c3f2 > >> <4>[ 154.961438] x17: 0000002224777924 x16: ffffff80080bb0e0 > >> <4>[ 154.967124] x15: 0000000000000000 x14: 0000000000000f75 > >> <4>[ 154.973069] x13: 000fffffffffffff x12: ffffffbf1e9f4240 > >> <4>[ 154.978670] x11: 0000000000000040 x10: 0000000000000ad0 > >> <4>[ 154.984107] x9 : ffffff800e2b3ab0 x8 : ffffffc7d62de530 > >> <4>[ 154.989958] x7 : 0000000780000000 x6 : 0000000000000018 > >> <4>[ 154.995645] x5 : 0000000000000000 x4 : 0000000000000000 > >> <4>[ 155.001245] x3 : ffffff8009aaa000 x2 : 00000047f6712000 > >> <4>[ 155.006846] x1 : ffffffc7d1ae6900 x0 : 0000000000000000 > >> > >> Signed-off-by: Sri Krishna chowdary > >> Signed-off-by: Prateek > >> --- > >> drivers/of/of_reserved_mem.c | 5 ++++- > >> 1 file changed, 4 insertions(+), 1 deletion(-) > >> > >> diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem= .c > >> index 1977ee0..ac8f377 100644 > >> --- a/drivers/of/of_reserved_mem.c > >> +++ b/drivers/of/of_reserved_mem.c > >> @@ -21,6 +21,7 @@ > >> #include > >> #include > >> #include > >> +#include > >> > >> #define MAX_RESERVED_REGIONS 32 > >> static struct reserved_mem reserved_mem[MAX_RESERVED_REGIONS]; > >> @@ -50,8 +51,10 @@ int __init __weak early_init_dt_alloc_reserved_memo= ry_arch(phys_addr_t size, > >> } > >> > >> *res_base =3D base; > >> - if (nomap) > >> + if (nomap) { > >> + kmemleak_no_scan(__va(base)); > >> return memblock_remove(base, size); > > I'm curious how I can't find any other similar example in the kernel. > > Please Cc some kmemleak folks. > > > > Perhaps we should be using memblock_mark_nomap() for nomap areas? > > > > Rob > > Sorry for this late reply. > > Yes, memblock_mark_nomap() can be used here but if I understand > correctly, memblock_mark_nomap() is used to indicate marked parts of > memory should not be covered by the kernel direct mapping and > memblock_remove() here is doing that by removing a given memory from the > "memblock.memory" list to prevent the memory from CPU accessing by the > linear address. I am not 100% sure what will be the side effects of > using memblock_mark_nomap(). Adding folks to help me here on > MEMBLOCK_NOMAP and kmemleak. I have no idea about your question: memblock_mark_nomap seems reasonable though, but I think this is orthogonal to this patch, whose main purpose is to add kmemleak_no_scan? In any case, I tested both the original patch, and the hunk below on a different platform (with some no-map reserved_memory as well), and they fix the issue. Tested-by: Nicolas Boichat > I checked and verified with following and I didn't find any errors on my > local setup: > > diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c > index 1977ee0..f77cde0 100644 > --- a/drivers/of/of_reserved_mem.c > +++ b/drivers/of/of_reserved_mem.c > @@ -50,8 +50,10 @@ int __init __weak > early_init_dt_alloc_reserved_memory_arch(phys_addr_t size, > } > > *res_base =3D base; > - if (nomap) > - return memblock_remove(base, size); > + if (nomap) { > + kmemleak_no_scan(__va(base)); > + return memblock_mark_nomap(base, size); > + } > return 0; > }