From patchwork Wed Feb 28 03:56:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Shi X-Patchwork-Id: 129896 Delivered-To: patch@linaro.org Received: by 10.46.66.2 with SMTP id p2csp568238lja; Tue, 27 Feb 2018 19:59:10 -0800 (PST) X-Google-Smtp-Source: AH8x224x/HSTj8bQQtU9ufwGvCMIjhWK5I0aNWIgLuUDKUJSuCWYdkSv6Ylr/uhiK9jaEWQaMlAE X-Received: by 10.98.9.5 with SMTP id e5mr16434620pfd.189.1519790350528; Tue, 27 Feb 2018 19:59:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519790350; cv=none; d=google.com; s=arc-20160816; b=VsiQSNDev5TPlV3WX4nsB9yZNVopDc7B8MxpfAPcPVB2igi6/vlAlsI+MEDXKE00Ix /g+CJeMHxU7sMOJ65QzByY31+QbAohCA6LJ4I92Y8lmJKLkNf6u+V+Z3Lja9WExoomVP Ge0VIPdshJ2wkvyBsNgDHWONMSA2BhSynZHxPKbhoZZNeyBbE6z5tbu39DZB9vU9zsj1 g+1mgNv/AU1tkFEF559rVwj4NWZ7NhpDhoCP3pRKwJTFO9TW7S4rbz6dWqTcCh3jrh/1 9n1oOmQusANsokWP/mhbGfFNUNGA3d8MauWdQNbX+lPXnKzc4cAao+6NzFreaa1vLjKp v/ng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=3EefTrlVGpCtN2KCozRnf/Q739j84WLPOQ3GnGLPWwc=; b=0SydzmFduYr7w/oZ0MyASdxwKJScihoR6/q1q+2xaikWKetHN9Fw7chfb8hSjlZxRx ZlI97K7bAH665GJXw4WxJKNRbrhd0B2SVrL4GHxFTCW0IUJVW2vUb2LCvBVXtfqlWjet wWOeAK7j9GIZEVNdgcrZdw4wBsriDlh/RYwOZURu0d90ErfTJxY8IgmATIG/TgJLYfnd ZSvwIaUOMj2f785KpTJ5PIu91SKwp2sLg+PxirbCnHfufQkfKf2dM9lrcdNbroXG2Ut2 IDBPmxB+jua4jxsvkcM2Rrx+GYyo1fVG4S8uw6I1dK8SAs8dMx+QW7d8DU3R2B65pXTh UuGA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=I5i7fWK9; 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=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x2-v6si603010plr.334.2018.02.27.19.59.10; Tue, 27 Feb 2018 19:59:10 -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=@linaro.org header.s=google header.b=I5i7fWK9; 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=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752244AbeB1D7F (ORCPT + 28 others); Tue, 27 Feb 2018 22:59:05 -0500 Received: from mail-pl0-f67.google.com ([209.85.160.67]:38485 "EHLO mail-pl0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752219AbeB1D7C (ORCPT ); Tue, 27 Feb 2018 22:59:02 -0500 Received: by mail-pl0-f67.google.com with SMTP id d4-v6so775631pll.5 for ; Tue, 27 Feb 2018 19:59:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=3EefTrlVGpCtN2KCozRnf/Q739j84WLPOQ3GnGLPWwc=; b=I5i7fWK90jD96UsGo0uqR6y4N2ezALYxV9gmWp5olA7bwSpBVt4RywMawse2zn4sJN Q6DCBw+XtUieaL7IqLPwhQXo/YqiS4FPUXdNDq72dyogy0UVCoxnTW7P1MOmcoePAtFR Qn0/CuSnOMlaiS9l0ut+ER656ENPug5QQf1A8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=3EefTrlVGpCtN2KCozRnf/Q739j84WLPOQ3GnGLPWwc=; b=rHBUZJSzDZRgRZPSBoFp41du9IUb7KY1hiE296dnhLC527DhYmA4hSYI/WkKKl6aEa wAqVyt0Q07wpps/Th09wgSJY3rg/POVsr3fCTfr80LL0fNw4UaTMr8nqFcusu2zdrhQd RbE+3YklSGQKZ0KbdziinEFq5sbBDwaXP7WmKVIPlPxGPaWhWdLPTCKL+kOWyr2IoPvg J3gqnY8Mh1PTvtvzjWcG6sMV55UJVoYZCJEI7KKjIPA8jRag7Zz3H86jBtVoyf1bTekc 3KUs9w33GTIhOGggjJytEGmHGtvyvvtJNCgK34reDFl2kfnGOoATm0Z5rFV/1KqREB4z PWMQ== X-Gm-Message-State: APf1xPBkI0gQLwgXHR1y/VYj0AhHEksPOPvxyMSF1maQOFO+5rudxhVu fPL0GaRoX/t1dH2fwBSIUPnacHDxGfw= X-Received: by 2002:a17:902:4025:: with SMTP id b34-v6mr8396044pld.359.1519790341925; Tue, 27 Feb 2018 19:59:01 -0800 (PST) Received: from localhost.localdomain (176.122.172.82.16clouds.com. [176.122.172.82]) by smtp.gmail.com with ESMTPSA id q17sm739911pgt.7.2018.02.27.19.58.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 27 Feb 2018 19:59:01 -0800 (PST) From: Alex Shi To: Marc Zyngier , Will Deacon , Ard Biesheuvel , Catalin Marinas , stable@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Alex Shi Subject: [PATCH 12/29] arm64: entry: Hook up entry trampoline to exception vectors Date: Wed, 28 Feb 2018 11:56:34 +0800 Message-Id: <1519790211-16582-13-git-send-email-alex.shi@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1519790211-16582-1-git-send-email-alex.shi@linaro.org> References: <1519790211-16582-1-git-send-email-alex.shi@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Will Deacon commit 4bf3286d29f3 upstream. Hook up the entry trampoline to our exception vectors so that all exceptions from and returns to EL0 go via the trampoline, which swizzles the vector base register accordingly. Transitioning to and from the kernel clobbers x30, so we use tpidrro_el0 and far_el1 as scratch registers for native tasks. Reviewed-by: Mark Rutland Tested-by: Laura Abbott Tested-by: Shanker Donthineni Signed-off-by: Will Deacon Signed-off-by: Alex Shi --- arch/arm64/kernel/entry.S | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) -- 2.7.4 diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S index 7b1be51..eccb6d8 100644 --- a/arch/arm64/kernel/entry.S +++ b/arch/arm64/kernel/entry.S @@ -72,10 +72,26 @@ .macro kernel_ventry, el, label, regsize = 64 .align 7 +#ifdef CONFIG_UNMAP_KERNEL_AT_EL0 + .if \el == 0 + .if \regsize == 64 + mrs x30, tpidrro_el0 + msr tpidrro_el0, xzr + .else + mov x30, xzr + .endif + .endif +#endif + sub sp, sp, #S_FRAME_SIZE b el\()\el\()_\label .endm + .macro tramp_alias, dst, sym + mov_q \dst, TRAMP_VALIAS + add \dst, \dst, #(\sym - .entry.tramp.text) + .endm + .macro kernel_entry, el, regsize = 64 .if \regsize == 32 mov w0, w0 // zero upper 32 bits of x0 @@ -157,18 +173,20 @@ ct_user_enter ldr x23, [sp, #S_SP] // load return stack pointer msr sp_el0, x23 + tst x22, #PSR_MODE32_BIT // native task? + b.eq 3f + #ifdef CONFIG_ARM64_ERRATUM_845719 alternative_if ARM64_WORKAROUND_845719 - tbz x22, #4, 1f #ifdef CONFIG_PID_IN_CONTEXTIDR mrs x29, contextidr_el1 msr contextidr_el1, x29 #else msr contextidr_el1, xzr #endif -1: alternative_else_nop_endif #endif +3: .endif msr elr_el1, x21 // set up the return data msr spsr_el1, x22 @@ -189,7 +207,22 @@ alternative_else_nop_endif ldp x28, x29, [sp, #16 * 14] ldr lr, [sp, #S_LR] add sp, sp, #S_FRAME_SIZE // restore sp - eret // return to kernel + +#ifndef CONFIG_UNMAP_KERNEL_AT_EL0 + eret +#else + .if \el == 0 + bne 4f + msr far_el1, x30 + tramp_alias x30, tramp_exit_native + br x30 +4: + tramp_alias x30, tramp_exit_compat + br x30 + .else + eret + .endif +#endif .endm .macro get_thread_info, rd