From nobody Mon May 11 04:52:07 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3890DC433EF for ; Wed, 13 Apr 2022 23:49:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236266AbiDMXwO (ORCPT ); Wed, 13 Apr 2022 19:52:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51568 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234416AbiDMXwK (ORCPT ); Wed, 13 Apr 2022 19:52:10 -0400 Received: from mail-pj1-x102e.google.com (mail-pj1-x102e.google.com [IPv6:2607:f8b0:4864:20::102e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DC1BF3DDD7 for ; Wed, 13 Apr 2022 16:49:47 -0700 (PDT) Received: by mail-pj1-x102e.google.com with SMTP id s14-20020a17090a880e00b001caaf6d3dd1so7718897pjn.3 for ; Wed, 13 Apr 2022 16:49:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=yIrx5BX8YdB8EIQrcc/E4jEhfb2e+QJVsGsaTmoT1E8=; b=ZqB+cLOzPEvlgWlWMKH4T9JNuTSu2LBIw/kFcw48Q5/rlwtanZRPBi7mntQnHchUAh OJBFpeGGBVXCkIGWBjlKLWk11KyB+eh9HLbyK7YxZPl33zN1kTcMX8Xa1O7VS5dYL17x DMh28D/iIwPSk8r7bQgv8YNqRgLBAqloAyBnz9RmxWQBvApt+z33ELdpCe73A909Vqm/ L6Q+VKoe0TJoBLwouLn3p/CiC6PJOtNpjwFxxhJ5Q0tx7+Y67fzDZVOZ/pvrs7yMx8D/ cYmDr16tnj4mbk+637tt2ncpCoRM+Oa8diIw1Vi6p7oN8o0Oub1QkJRt5xHUyGaFOi2E tdVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=yIrx5BX8YdB8EIQrcc/E4jEhfb2e+QJVsGsaTmoT1E8=; b=7WlvV28lGOKCXIfCQdjUoEdkiYhoacALy0cHCc0JVAIUaarxQpe4Jv0e3QkZ2heg/i cYqFRFRj3lNLqFNnVQXJHjROlhW6MhNDO1a8rDs9wstTq6e7jpPeCeTXekfAB++OpU6f HWd0ZxbWeLF/ATAN3QbwxAsPpAEcwem4xi8agaOOr4G2mfGAInWKyPKcdH5Z1EBc5c5O xFgJ5rzN/1S3jRfc0z3kHs/sip/ys2WRjSuN/vvKUvMlUpf6XWZIbiNIpTSKzOtZptoW +jnIigy6/7vv8/fM9DtLhqj7W9K6cmprrvm7WTexUgisipprjjLmA78WT1mm7n4fqGok Ff8A== X-Gm-Message-State: AOAM533AaS9qmE5gmHfq0xU+yVkcFpCKS79hRZYh0pzPRoisxhCu0/YH YQTDSCOdeLr36LULSh2sBFIjxq/51Zo= X-Google-Smtp-Source: ABdhPJzMM1qzarHQcw9uUUCNHGO1v1hp3hctUsRdC++zgLpbX9wFPoh6dvu8E9sxKG/GRJbBlZldbw== X-Received: by 2002:a17:90a:1c08:b0:1cd:474a:a4f8 with SMTP id s8-20020a17090a1c0800b001cd474aa4f8mr690612pjs.82.1649893787497; Wed, 13 Apr 2022 16:49:47 -0700 (PDT) Received: from octofox.hsd1.ca.comcast.net ([2601:641:400:e00:389b:6ba3:7cbd:d8d]) by smtp.gmail.com with ESMTPSA id d20-20020a056a00199400b005060849909esm197075pfl.176.2022.04.13.16.49.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 16:49:46 -0700 (PDT) From: Max Filippov To: linux-xtensa@linux-xtensa.org Cc: Chris Zankel , linux-kernel@vger.kernel.org, Max Filippov Subject: [PATCH 1/3] xtensa: move asid_cache from fault.c to mmu.c Date: Wed, 13 Apr 2022 16:49:28 -0700 Message-Id: <20220413234930.1212335-2-jcmvbkbc@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220413234930.1212335-1-jcmvbkbc@gmail.com> References: <20220413234930.1212335-1-jcmvbkbc@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" asid_cache is only useful with full MMU, but fault.c is also useful with MPU. Move asid_cache definition to MMU-specific source file. Signed-off-by: Max Filippov --- arch/xtensa/mm/fault.c | 1 - arch/xtensa/mm/mmu.c | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c index 06d0973a0d74..2a120c024334 100644 --- a/arch/xtensa/mm/fault.c +++ b/arch/xtensa/mm/fault.c @@ -21,7 +21,6 @@ #include #include =20 -DEFINE_PER_CPU(unsigned long, asid_cache) =3D ASID_USER_FIRST; void bad_page_fault(struct pt_regs*, unsigned long, int); =20 /* diff --git a/arch/xtensa/mm/mmu.c b/arch/xtensa/mm/mmu.c index 38acda4f04e8..92e158c69c10 100644 --- a/arch/xtensa/mm/mmu.c +++ b/arch/xtensa/mm/mmu.c @@ -18,6 +18,8 @@ #include #include =20 +DEFINE_PER_CPU(unsigned long, asid_cache) =3D ASID_USER_FIRST; + #if defined(CONFIG_HIGHMEM) static void * __init init_pmd(unsigned long vaddr, unsigned long n_pages) { --=20 2.30.2 From nobody Mon May 11 04:52:07 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 58E60C433EF for ; Wed, 13 Apr 2022 23:50:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239181AbiDMXwU (ORCPT ); Wed, 13 Apr 2022 19:52:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51646 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234649AbiDMXwM (ORCPT ); Wed, 13 Apr 2022 19:52:12 -0400 Received: from mail-pl1-x635.google.com (mail-pl1-x635.google.com [IPv6:2607:f8b0:4864:20::635]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5CF623E0CB for ; Wed, 13 Apr 2022 16:49:49 -0700 (PDT) Received: by mail-pl1-x635.google.com with SMTP id p10so3271188plf.9 for ; Wed, 13 Apr 2022 16:49:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Sj2r+1mAjOUKlt7+Wq917atgiw1yhu7tQvGsGnE62eE=; b=UL37UhtyLGdU/4BmV48pF7FtOHXCK4o3yxIMzuVDdoasQm4t4wYaXKt8v2EjYXTmya oN3CSaVrQiLDsgbBMb6Gw0larTB/48InB5JqBKm7OZFRVgLBPl5/e4MUk7vL2s3ihHKr yRwMFoS0ZZCPGtujKnGIZCkzg0cc6CDxKuMQzCgBeqZ5F16n3IHLnWXVP73pguxEWFWz hyVusMBzNE72ssuVaEtXJ8QBx2uJ6YSrmyIbOsQ12K/AnW4malqnUKFSid3i3kAZXWJk 2jecDTALKmEkfvhyG/Ky3cckwFYaapwYC4mvyQ78gGiEbaABsszklNIs/XHFhplrvIti EYvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Sj2r+1mAjOUKlt7+Wq917atgiw1yhu7tQvGsGnE62eE=; b=fwNxyOTNhx886fFWeJAHMrIsB5OgQuVsf/tTsTeoE6xViKpyU4Vfa3iJDr9wlqDrXx t7AMm7hJOKt7CLJO/SyUkVQgQVHoLf005OKwfBJ+f9fkWX9Sy9+kPuOqj79avF05aZeO vMZkhdGtP5U43gv1eE0tLRInDYYwgkeMlIetZQF1DmcH6gCzjfpc7oYc64wVrMd+pMGh v+rJ/+irjJLr0W0AruZuqA+J3/FtZdRNA66P7UzalOFnfXUSpRqNx8G3aEF3WFTGpROk GvSDoFbipkOI7/RmH6MbsA9iu5kIIaxDsS6urMV63Srupo3b/EDu8w/ND/TJycLYzCx6 Ahug== X-Gm-Message-State: AOAM532T/y8S5xnrHS38ThcxjL2uqfIkBGCNuCEb3BBvIl0Muycvd2Db LAV4Dc5bIYS58e99ZyOPVEk= X-Google-Smtp-Source: ABdhPJx/ylC7tdyCKXX9fALkR9q3gdZnvqaWMrtd1u6qYarVuiO3w4TCAxYASVm1gHRa4I8AZSVUsw== X-Received: by 2002:a17:90b:4a4a:b0:1c7:82e9:1014 with SMTP id lb10-20020a17090b4a4a00b001c782e91014mr1336612pjb.0.1649893788922; Wed, 13 Apr 2022 16:49:48 -0700 (PDT) Received: from octofox.hsd1.ca.comcast.net ([2601:641:400:e00:389b:6ba3:7cbd:d8d]) by smtp.gmail.com with ESMTPSA id d20-20020a056a00199400b005060849909esm197075pfl.176.2022.04.13.16.49.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 16:49:48 -0700 (PDT) From: Max Filippov To: linux-xtensa@linux-xtensa.org Cc: Chris Zankel , linux-kernel@vger.kernel.org, Max Filippov Subject: [PATCH 2/3] xtensa: extract vmalloc_fault code into a function Date: Wed, 13 Apr 2022 16:49:29 -0700 Message-Id: <20220413234930.1212335-3-jcmvbkbc@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220413234930.1212335-1-jcmvbkbc@gmail.com> References: <20220413234930.1212335-1-jcmvbkbc@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Move full MMU-specific code into a separate function to isolate it from more generic do_page_fault code. No functional changes. Signed-off-by: Max Filippov --- arch/xtensa/mm/fault.c | 107 +++++++++++++++++++++-------------------- 1 file changed, 54 insertions(+), 53 deletions(-) diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c index 2a120c024334..01e66da4a6b0 100644 --- a/arch/xtensa/mm/fault.c +++ b/arch/xtensa/mm/fault.c @@ -23,6 +23,55 @@ =20 void bad_page_fault(struct pt_regs*, unsigned long, int); =20 +static void vmalloc_fault(struct pt_regs *regs, unsigned int address) +{ + /* Synchronize this task's top level page-table + * with the 'reference' page table. + */ + struct mm_struct *act_mm =3D current->active_mm; + int index =3D pgd_index(address); + pgd_t *pgd, *pgd_k; + p4d_t *p4d, *p4d_k; + pud_t *pud, *pud_k; + pmd_t *pmd, *pmd_k; + pte_t *pte_k; + + if (act_mm =3D=3D NULL) + goto bad_page_fault; + + pgd =3D act_mm->pgd + index; + pgd_k =3D init_mm.pgd + index; + + if (!pgd_present(*pgd_k)) + goto bad_page_fault; + + pgd_val(*pgd) =3D pgd_val(*pgd_k); + + p4d =3D p4d_offset(pgd, address); + p4d_k =3D p4d_offset(pgd_k, address); + if (!p4d_present(*p4d) || !p4d_present(*p4d_k)) + goto bad_page_fault; + + pud =3D pud_offset(p4d, address); + pud_k =3D pud_offset(p4d_k, address); + if (!pud_present(*pud) || !pud_present(*pud_k)) + goto bad_page_fault; + + pmd =3D pmd_offset(pud, address); + pmd_k =3D pmd_offset(pud_k, address); + if (!pmd_present(*pmd) || !pmd_present(*pmd_k)) + goto bad_page_fault; + + pmd_val(*pmd) =3D pmd_val(*pmd_k); + pte_k =3D pte_offset_kernel(pmd_k, address); + + if (!pte_present(*pte_k)) + goto bad_page_fault; + return; + +bad_page_fault: + bad_page_fault(regs, address, SIGKILL); +} /* * This routine handles page faults. It determines the address, * and the problem, and then passes it off to one of the appropriate @@ -48,8 +97,10 @@ void do_page_fault(struct pt_regs *regs) /* We fault-in kernel-space virtual memory on-demand. The * 'reference' page table is init_mm.pgd. */ - if (address >=3D TASK_SIZE && !user_mode(regs)) - goto vmalloc_fault; + if (address >=3D TASK_SIZE && !user_mode(regs)) { + vmalloc_fault(regs, address); + return; + } =20 /* If we're in an interrupt or have no user * context, we must not take the fault.. @@ -113,7 +164,7 @@ void do_page_fault(struct pt_regs *regs) =20 if (fault_signal_pending(fault, regs)) { if (!user_mode(regs)) - goto bad_page_fault; + bad_page_fault(regs, address, SIGKILL); return; } =20 @@ -180,56 +231,6 @@ void do_page_fault(struct pt_regs *regs) if (!user_mode(regs)) bad_page_fault(regs, address, SIGBUS); return; - -vmalloc_fault: - { - /* Synchronize this task's top level page-table - * with the 'reference' page table. - */ - struct mm_struct *act_mm =3D current->active_mm; - int index =3D pgd_index(address); - pgd_t *pgd, *pgd_k; - p4d_t *p4d, *p4d_k; - pud_t *pud, *pud_k; - pmd_t *pmd, *pmd_k; - pte_t *pte_k; - - if (act_mm =3D=3D NULL) - goto bad_page_fault; - - pgd =3D act_mm->pgd + index; - pgd_k =3D init_mm.pgd + index; - - if (!pgd_present(*pgd_k)) - goto bad_page_fault; - - pgd_val(*pgd) =3D pgd_val(*pgd_k); - - p4d =3D p4d_offset(pgd, address); - p4d_k =3D p4d_offset(pgd_k, address); - if (!p4d_present(*p4d) || !p4d_present(*p4d_k)) - goto bad_page_fault; - - pud =3D pud_offset(p4d, address); - pud_k =3D pud_offset(p4d_k, address); - if (!pud_present(*pud) || !pud_present(*pud_k)) - goto bad_page_fault; - - pmd =3D pmd_offset(pud, address); - pmd_k =3D pmd_offset(pud_k, address); - if (!pmd_present(*pmd) || !pmd_present(*pmd_k)) - goto bad_page_fault; - - pmd_val(*pmd) =3D pmd_val(*pmd_k); - pte_k =3D pte_offset_kernel(pmd_k, address); - - if (!pte_present(*pte_k)) - goto bad_page_fault; - return; - } -bad_page_fault: - bad_page_fault(regs, address, SIGKILL); - return; } =20 =20 --=20 2.30.2 From nobody Mon May 11 04:52:07 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C9E76C433F5 for ; Wed, 13 Apr 2022 23:50:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239213AbiDMXwY (ORCPT ); Wed, 13 Apr 2022 19:52:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51706 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236094AbiDMXwN (ORCPT ); Wed, 13 Apr 2022 19:52:13 -0400 Received: from mail-pj1-x102c.google.com (mail-pj1-x102c.google.com [IPv6:2607:f8b0:4864:20::102c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CCD6D3E0CB for ; Wed, 13 Apr 2022 16:49:50 -0700 (PDT) Received: by mail-pj1-x102c.google.com with SMTP id z6-20020a17090a398600b001cb9fca3210so4022248pjb.1 for ; Wed, 13 Apr 2022 16:49:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Ne4qFtf3GJQipO4FTbwSt0HMIWWwnK+WNSFq5/MGiNw=; b=eUWAx4I43h3LKG4CVs0awq/ZvXdxGpOnQoYb7Jiob3NtEDVwvuzVKWXPtg52U64GeD 8Ag/ew99NyVY+qEqe21x0EyFawjZn268tpE9ddhAUFM+MjBMsOvPKukBY6EkGzB/DA7r Jb01y0XfTEg1nZnl6+N5s7jp7g14PaebsalyqID6BPamXtLsnmVxltkahMqaWEDEGrcR ByZAE7gi5bUbuWg3gCMWutFo0HNkoPh1P95ku3dVCvjhZapcbnVEzxe36Kb0fSde1PYz 1FaUtYBxHbO0xopyePD8tjhlG412Gb5KCYmpkHyigYc7sDMq7yH89bA0fAuG5eslDCSr tMBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Ne4qFtf3GJQipO4FTbwSt0HMIWWwnK+WNSFq5/MGiNw=; b=IQlmF6uhtQD4aVnxgIp67vLYpNh+LagG5+c2pUIC5+LDpA+0hYh5v0hhVVcE9bV26f PrjA3inD+mPunlCTwgfcPTZwtwXMpvtlwdYZzD+XnOzAAEvmhSGRZ0F/qf/mIRbEas58 BxsvDbBBvL3zHHf4Bpw80lujRxN7mOhcTkwNvZ+P6kTQeOaULItT+0GtiQGPQmNWmEXB LFMsWYlK/FtSD1RZUzFunUeV3JXKXiZI6zwi6BUGSUsu3vDWQhh4J8T6KCyYcpp/sThO P8ilVsebOPSttFPQ2ZumoQwL+YtumTgd2U0N9aQaiZ+oOjCCF3u5lkXmrkuZSMz2LPy5 7iLQ== X-Gm-Message-State: AOAM531udQhZ6Prj33pz9RE8Ycok+iLDxZHSx5i6r22+yCMS5eMn6CUW tRpO0wr+4CEpWsTGiVZkrHhGwNJYtFg= X-Google-Smtp-Source: ABdhPJySI1UgQSjJ9AdU1Npg9rukCpn/j8CTf+vbtoBN4O7BT2AXT/Jz0Aoh/H4004jmXb9+SfXNrA== X-Received: by 2002:a17:90b:1b44:b0:1cd:49b8:42b8 with SMTP id nv4-20020a17090b1b4400b001cd49b842b8mr683013pjb.102.1649893790370; Wed, 13 Apr 2022 16:49:50 -0700 (PDT) Received: from octofox.hsd1.ca.comcast.net ([2601:641:400:e00:389b:6ba3:7cbd:d8d]) by smtp.gmail.com with ESMTPSA id d20-20020a056a00199400b005060849909esm197075pfl.176.2022.04.13.16.49.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 16:49:49 -0700 (PDT) From: Max Filippov To: linux-xtensa@linux-xtensa.org Cc: Chris Zankel , linux-kernel@vger.kernel.org, Max Filippov Subject: [PATCH 3/3] xtensa: noMMU: allow handling protection faults Date: Wed, 13 Apr 2022 16:49:30 -0700 Message-Id: <20220413234930.1212335-4-jcmvbkbc@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220413234930.1212335-1-jcmvbkbc@gmail.com> References: <20220413234930.1212335-1-jcmvbkbc@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Many xtensa CPU cores without full MMU still have memory protection features capable of raising exceptions for invalid instruction fetches/data access. Allow handling such exceptions. This improves behavior of processes that pass invalid memory pointers to syscalls in noMMU configs: in case of exception the kernel instead of killing the process is now able to return -EINVAL from a syscall. Introduce CONFIG_PFAULT that controls whether protection fault code is enabled and register handlers for common memory protection exceptions when it is enabled. Signed-off-by: Max Filippov --- arch/xtensa/Kconfig | 11 +++++++++++ arch/xtensa/kernel/traps.c | 20 ++++++++++---------- arch/xtensa/mm/Makefile | 3 ++- arch/xtensa/mm/fault.c | 4 ++++ 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig index bd113bc6e192..bca2763495a1 100644 --- a/arch/xtensa/Kconfig +++ b/arch/xtensa/Kconfig @@ -79,6 +79,7 @@ config STACKTRACE_SUPPORT =20 config MMU def_bool n + select PFAULT =20 config HAVE_XTENSA_GPIO32 def_bool n @@ -178,6 +179,16 @@ config XTENSA_FAKE_NMI =20 If unsure, say N. =20 +config PFAULT + bool "Handle protection faults" if EXPERT && !MMU + default y + help + Handle protection faults. MMU configurations must enable it. + noMMU configurations may disable it if used memory map never + generates protection faults or faults are always fatal. + + If unsure, say Y. + config XTENSA_UNALIGNED_USER bool "Unaligned memory access in user space" help diff --git a/arch/xtensa/kernel/traps.c b/arch/xtensa/kernel/traps.c index 9345007d474d..82ced7b25b77 100644 --- a/arch/xtensa/kernel/traps.c +++ b/arch/xtensa/kernel/traps.c @@ -110,21 +110,21 @@ static dispatch_init_table_t __initdata dispatch_init= _table[] =3D { { EXCCAUSE_UNALIGNED, KRNL, fast_unaligned }, #endif #ifdef CONFIG_MMU -{ EXCCAUSE_ITLB_MISS, 0, do_page_fault }, -{ EXCCAUSE_ITLB_MISS, USER|KRNL, fast_second_level_miss}, +{ EXCCAUSE_ITLB_MISS, 0, do_page_fault }, +{ EXCCAUSE_ITLB_MISS, USER|KRNL, fast_second_level_miss}, +{ EXCCAUSE_DTLB_MISS, USER|KRNL, fast_second_level_miss}, +{ EXCCAUSE_DTLB_MISS, 0, do_page_fault }, +{ EXCCAUSE_STORE_CACHE_ATTRIBUTE, USER|KRNL, fast_store_prohibited }, +#endif /* CONFIG_MMU */ +#ifdef CONFIG_PFAULT { EXCCAUSE_ITLB_MULTIHIT, 0, do_multihit }, -{ EXCCAUSE_ITLB_PRIVILEGE, 0, do_page_fault }, -/* EXCCAUSE_SIZE_RESTRICTION unhandled */ +{ EXCCAUSE_ITLB_PRIVILEGE, 0, do_page_fault }, { EXCCAUSE_FETCH_CACHE_ATTRIBUTE, 0, do_page_fault }, -{ EXCCAUSE_DTLB_MISS, USER|KRNL, fast_second_level_miss}, -{ EXCCAUSE_DTLB_MISS, 0, do_page_fault }, { EXCCAUSE_DTLB_MULTIHIT, 0, do_multihit }, -{ EXCCAUSE_DTLB_PRIVILEGE, 0, do_page_fault }, -/* EXCCAUSE_DTLB_SIZE_RESTRICTION unhandled */ -{ EXCCAUSE_STORE_CACHE_ATTRIBUTE, USER|KRNL, fast_store_prohibited }, +{ EXCCAUSE_DTLB_PRIVILEGE, 0, do_page_fault }, { EXCCAUSE_STORE_CACHE_ATTRIBUTE, 0, do_page_fault }, { EXCCAUSE_LOAD_CACHE_ATTRIBUTE, 0, do_page_fault }, -#endif /* CONFIG_MMU */ +#endif /* XCCHAL_EXCCAUSE_FLOATING_POINT unhandled */ #if XTENSA_HAVE_COPROCESSOR(0) COPROCESSOR(0), diff --git a/arch/xtensa/mm/Makefile b/arch/xtensa/mm/Makefile index f7fb08ae768f..44153a335951 100644 --- a/arch/xtensa/mm/Makefile +++ b/arch/xtensa/mm/Makefile @@ -4,7 +4,8 @@ # =20 obj-y :=3D init.o misc.o -obj-$(CONFIG_MMU) +=3D cache.o fault.o ioremap.o mmu.o tlb.o +obj-$(CONFIG_PFAULT) +=3D fault.o +obj-$(CONFIG_MMU) +=3D cache.o ioremap.o mmu.o tlb.o obj-$(CONFIG_HIGHMEM) +=3D highmem.o obj-$(CONFIG_KASAN) +=3D kasan_init.o =20 diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c index 01e66da4a6b0..16f0a5ff5799 100644 --- a/arch/xtensa/mm/fault.c +++ b/arch/xtensa/mm/fault.c @@ -25,6 +25,7 @@ void bad_page_fault(struct pt_regs*, unsigned long, int); =20 static void vmalloc_fault(struct pt_regs *regs, unsigned int address) { +#ifdef CONFIG_MMU /* Synchronize this task's top level page-table * with the 'reference' page table. */ @@ -71,6 +72,9 @@ static void vmalloc_fault(struct pt_regs *regs, unsigned = int address) =20 bad_page_fault: bad_page_fault(regs, address, SIGKILL); +#else + WARN_ONCE(1, "%s in noMMU configuration\n", __func__); +#endif } /* * This routine handles page faults. It determines the address, --=20 2.30.2