Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp773259ybt; Wed, 17 Jun 2020 13:40:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyxLvNs45LPnstpC5ah4AxmW8k6oTPTnI2/gZ6ma6UST+GcFxEcmnfsXexD55aG5GIvAP7T X-Received: by 2002:a50:a1e7:: with SMTP id 94mr908168edk.165.1592426429004; Wed, 17 Jun 2020 13:40:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592426428; cv=none; d=google.com; s=arc-20160816; b=vDwEnrh/pysWI1gsIroZeGKgg7TkmjrVOBmcGX3f6INwdwvVKrUmnVUGxKcoLaG+Cn d7RVQoYcFhnx8k0/X57ArJ80WgYZurQZcsrw4bvUAMhp45jqYepBn2YYBgHMJ3rtE2X5 YfeSWgGn/vtVqs6p7JoW1jwnsd9/KDsVINJdhC6nGwpP6/TmH5kBzR3AWRYmneTZOd3n nGeWAhCNcoRkT4v2lwHxrLgVbsHPxtYmApPF+VZALjL71PFYyDGeNAFkcx3Fjp/Ug7zX nKryh+d7Nvax9VE+Ug2DptehSuJymJmdPjywOWy5n+H3fOUtJQ8FGBrPOUxglLpJJbEe p5lw== 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:mime-version :message-id:date:subject:cc:to:from:wdcironportexception :ironport-sdr:ironport-sdr:ironport-sdr:dkim-signature; bh=Lb2EzuXHb6VzccEj1ycn7TsJzd2ezkjzV+s6RMyTS6M=; b=JALkohd6tDr9ylMY7sEpL9Gep66n0ArlgI66BkZpZbwb7AXWwKnprhQemZOQ9WWWjF cMuuOY3TBJQiFheBUD7tp4DMjhx1gCk/G6zSDlUq3cqpzfJ8bk2pYJbsjxVeTdTDCuO4 1U0VPNUQ/jGebkUQK1Jz7kyExXm3AHjmjH7knTQseW5QxNO4f/fr28AWuG4I9QHYi5Ik TB5TV9AzKLokYMXiZ/f0nvvtINq44036wxlciwNCASyG6Vl956Da74YcMJJ0lpbHiloM nadT/jEzpGowdh0dDIY02gK91TRgwLIq78nPWnmiY7j7gBdxfhJ+aFbR+k1YjiFeYEmm JOUQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b="mN/NJPwU"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=wdc.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f24si643370edr.137.2020.06.17.13.40.05; Wed, 17 Jun 2020 13:40:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b="mN/NJPwU"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=wdc.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726879AbgFQUiA (ORCPT + 99 others); Wed, 17 Jun 2020 16:38:00 -0400 Received: from esa4.hgst.iphmx.com ([216.71.154.42]:59985 "EHLO esa4.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726758AbgFQUh7 (ORCPT ); Wed, 17 Jun 2020 16:37:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1592426279; x=1623962279; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=obXSQxEjICW+Yt8ftMsGWA6aehYecXRDu+nvKJxbC/w=; b=mN/NJPwUGOGyYNpvlp5VVG9kdV8a8eQdeh1BWWsub8WiR2QIawmAzLux BMQS7G+Pu1UGOOBWPv4HZrq19qs70EU0mru7hVoyGWqcwsJPClEOj86z6 15ihlbRA2leTMAnYKQ4it91p7C7CgzhKnYk83VTSKh0DtjIjCfSdTeD7d OWvZPeg4N1VcNfpHvwO1lurJmoASeobbssyqvV9wyKaRlqjQyrXxqrk+w SWdgMEp8OxN5uY/ZNdSj9XhL0sRjvECjz3qvtAdmlhqPsFAYPqBYevdvB dmLnhBYylp0m4nGSiTQXeAgrWHlL4U5DcNZoAmSWDDbRFjH9Y5D6J6SgP g==; IronPort-SDR: Aex0+pkaLi0mrqaVfYxXlK94sepPh8W/HDhkfQ3SElshnt5OkmE2jU2xoKjgf+phBdOso7N8nd iyi2kOv8oAlyNCCYg/+ckARR6a8mR8cELoBTfscC9XzlG3qI1VUXkcnYCYLb93WV+BNn8nwqza +CkWEesTHF/JAjO6N+rcDxPYKlIR2KpMMzSg/kJFihZZOTx5FJ0wnI2acoJYnrQVOzmRKJYrG3 KNV4UxxFBC5Bu9VromB27xHeKGM3JKwpGKY+GKZ+nnpPoHBmcj9JLWfRMP4wTGDOLTPN7noqTO PVs= X-IronPort-AV: E=Sophos;i="5.73,523,1583164800"; d="scan'208";a="140260279" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 18 Jun 2020 04:37:58 +0800 IronPort-SDR: lTzWhojd+ewzzxtiLfo2OzynO2z3D1LBR/pVSrcYh/3VPb7LDmTVb01YLlAAohz3oNoU0ETBZh p7TdEtlodqQ59mpbXqwBYhAHFU+ds3Zj4= Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Jun 2020 13:27:12 -0700 IronPort-SDR: zhUy0TZrnbjXxnnsfrT0zttZ0ocHgV32WRoVPnh+Xsp3azyEDgqpotxGdu7x6cjHL7aX3S004I Fk5DgEo8B6iA== WDCIronportException: Internal Received: from usa003792.ad.shared (HELO yoda.hgst.com) ([10.86.58.133]) by uls-op-cesaip01.wdc.com with ESMTP; 17 Jun 2020 13:37:59 -0700 From: Atish Patra To: linux-kernel@vger.kernel.org Cc: Atish Patra , Albert Ou , Andrew Morton , Daniel Jordan , linux-riscv@lists.infradead.org, Michel Lespinasse , Mike Rapoport , Palmer Dabbelt , Paul Walmsley , Zong Li Subject: [PATCH] RISC-V: Acquire mmap lock before invoking walk_page_range Date: Wed, 17 Jun 2020 13:37:32 -0700 Message-Id: <20200617203732.2076611-1-atish.patra@wdc.com> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As per walk_page_range documentation, mmap lock should be acquired by the caller before invoking walk_page_range. mmap_assert_locked gets triggered without that. The details can be found here. http://lists.infradead.org/pipermail/linux-riscv/2020-June/010335.html Fixes: 395a21ff859c(riscv: add ARCH_HAS_SET_DIRECT_MAP support) Signed-off-by: Atish Patra --- arch/riscv/mm/pageattr.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/arch/riscv/mm/pageattr.c b/arch/riscv/mm/pageattr.c index ec2c70f84994..289a9a5ea5b5 100644 --- a/arch/riscv/mm/pageattr.c +++ b/arch/riscv/mm/pageattr.c @@ -151,6 +151,7 @@ int set_memory_nx(unsigned long addr, int numpages) int set_direct_map_invalid_noflush(struct page *page) { + int ret; unsigned long start = (unsigned long)page_address(page); unsigned long end = start + PAGE_SIZE; struct pageattr_masks masks = { @@ -158,11 +159,16 @@ int set_direct_map_invalid_noflush(struct page *page) .clear_mask = __pgprot(_PAGE_PRESENT) }; - return walk_page_range(&init_mm, start, end, &pageattr_ops, &masks); + mmap_read_lock(&init_mm); + ret = walk_page_range(&init_mm, start, end, &pageattr_ops, &masks); + mmap_read_unlock(&init_mm); + + return ret; } int set_direct_map_default_noflush(struct page *page) { + int ret; unsigned long start = (unsigned long)page_address(page); unsigned long end = start + PAGE_SIZE; struct pageattr_masks masks = { @@ -170,7 +176,11 @@ int set_direct_map_default_noflush(struct page *page) .clear_mask = __pgprot(0) }; - return walk_page_range(&init_mm, start, end, &pageattr_ops, &masks); + mmap_read_lock(&init_mm); + ret = walk_page_range(&init_mm, start, end, &pageattr_ops, &masks); + mmap_read_unlock(&init_mm); + + return ret; } void __kernel_map_pages(struct page *page, int numpages, int enable) -- 2.26.2