From patchwork Fri May 23 00:11:38 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kevin Hilman X-Patchwork-Id: 30661 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-pb0-f69.google.com (mail-pb0-f69.google.com [209.85.160.69]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 0745520671 for ; Fri, 23 May 2014 00:11:54 +0000 (UTC) Received: by mail-pb0-f69.google.com with SMTP id uo5sf14625262pbc.4 for ; Thu, 22 May 2014 17:11:53 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:cc:subject:references:date :in-reply-to:message-id:user-agent:mime-version:sender:precedence :list-id:x-original-sender:x-original-authentication-results :mailing-list:list-post:list-help:list-archive:list-unsubscribe :content-type; bh=JYVPUUaOLTkGAcY7X53nZsxmD2taPVS08QEB3FOv574=; b=Rea3hCByjZBnzEJO6z1DnLukCpoeoN7L+NkD+9on1Agr6uO4eyNpgSweTXx7x4Y+6L 3I7c7Ll9cA4+UEVO9wPlxvTODX5oVBUoTMxtyvR3B7B4UJgk8p+JpTZSnDmGfvQ1jSDZ UiOjA3PBBC7D5prsi61O+r1Wm1OufUKzwHfXgctw5w1qon+TrPYQzkkgqpZ2f8zZsjGn cw0LiGfW7r4lhY2+rrdO5G+QAsR12iHEzDP5jy5C5Kbn/QZ3pNr8Iirhj5tDErtSTp2c ndQlRbejKAqO5aAGyNTsFpzM4v0Kf56k32X7vOjPeb8ykrp08K3RfNqqKtJXQd/bqy03 b8pg== X-Gm-Message-State: ALoCoQm5vRVIWcNMJs/OixAqvRx3YHLOMf9q1Md0E+/s1P8oIqIFH5NexlbIxdswBh+3EItshQh1 X-Received: by 10.66.173.75 with SMTP id bi11mr772921pac.4.1400803913810; Thu, 22 May 2014 17:11:53 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.40.74 with SMTP id w68ls1603002qgw.53.gmail; Thu, 22 May 2014 17:11:53 -0700 (PDT) X-Received: by 10.58.195.231 with SMTP id ih7mr917980vec.32.1400803913626; Thu, 22 May 2014 17:11:53 -0700 (PDT) Received: from mail-vc0-f170.google.com (mail-vc0-f170.google.com [209.85.220.170]) by mx.google.com with ESMTPS id bf20si741145vdb.47.2014.05.22.17.11.53 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 22 May 2014 17:11:53 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.170 as permitted sender) client-ip=209.85.220.170; Received: by mail-vc0-f170.google.com with SMTP id lf12so5357929vcb.15 for ; Thu, 22 May 2014 17:11:53 -0700 (PDT) X-Received: by 10.221.4.66 with SMTP id ob2mr944793vcb.28.1400803913514; Thu, 22 May 2014 17:11:53 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.220.221.72 with SMTP id ib8csp241226vcb; Thu, 22 May 2014 17:11:53 -0700 (PDT) X-Received: by 10.66.153.80 with SMTP id ve16mr1103598pab.143.1400803912452; Thu, 22 May 2014 17:11:52 -0700 (PDT) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id yf6si1567409pbc.37.2014.05.22.17.11.51 for ; Thu, 22 May 2014 17:11:51 -0700 (PDT) Received-SPF: none (google.com: linux-kernel-owner@vger.kernel.org does not designate permitted sender hosts) client-ip=209.132.180.67; Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752699AbaEWALm (ORCPT + 27 others); Thu, 22 May 2014 20:11:42 -0400 Received: from mail-pa0-f50.google.com ([209.85.220.50]:55222 "EHLO mail-pa0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751363AbaEWALl (ORCPT ); Thu, 22 May 2014 20:11:41 -0400 Received: by mail-pa0-f50.google.com with SMTP id fb1so3217499pad.37 for ; Thu, 22 May 2014 17:11:40 -0700 (PDT) X-Received: by 10.68.189.232 with SMTP id gl8mr1162348pbc.89.1400803900612; Thu, 22 May 2014 17:11:40 -0700 (PDT) Received: from localhost (c-67-183-17-239.hsd1.wa.comcast.net. [67.183.17.239]) by mx.google.com with ESMTPSA id xz7sm5659667pac.3.2014.05.22.17.11.39 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Thu, 22 May 2014 17:11:39 -0700 (PDT) From: Kevin Hilman To: Christopher Covington Cc: Larry Bassel , catalin.marinas@arm.com, will.deacon@arm.com, linaro-kernel@lists.linaro.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, mark.rutland@arm.com Subject: Re: [PATCH v4 2/2] arm64: enable context tracking References: <1400786855-32656-1-git-send-email-larry.bassel@linaro.org> <1400786855-32656-3-git-send-email-larry.bassel@linaro.org> <537E5E1F.3050605@codeaurora.org> Date: Thu, 22 May 2014 17:11:38 -0700 In-Reply-To: <537E5E1F.3050605@codeaurora.org> (Christopher Covington's message of "Thu, 22 May 2014 16:29:19 -0400") Message-ID: <7hd2f5icat.fsf@paris.lan> User-Agent: Gnus/5.130008 (Ma Gnus v0.8) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: list List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: khilman@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.170 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , +Mark Rutland Christopher Covington writes: > Hi Larry, > > On 05/22/2014 03:27 PM, Larry Bassel wrote: >> Make calls to ct_user_enter when the kernel is exited >> and ct_user_exit when the kernel is entered (in el0_da, >> el0_ia, el0_svc, el0_irq and all of the "error" paths). >> >> These macros expand to function calls which will only work >> properly if el0_sync and related code has been rearranged >> (in a previous patch of this series). >> >> The calls to ct_user_exit are made after hw debugging has been >> enabled (enable_dbg_and_irq). >> >> The call to ct_user_enter is made at the beginning of the >> kernel_exit macro. >> >> This patch is based on earlier work by Kevin Hilman. >> Save/restore optimizations were also done by Kevin. > >> --- a/arch/arm64/kernel/entry.S >> +++ b/arch/arm64/kernel/entry.S >> @@ -30,6 +30,44 @@ >> #include >> >> /* >> + * Context tracking subsystem. Used to instrument transitions >> + * between user and kernel mode. >> + */ >> + .macro ct_user_exit, restore = 0 >> +#ifdef CONFIG_CONTEXT_TRACKING >> + bl context_tracking_user_exit >> + .if \restore == 1 >> + /* >> + * Save/restore needed during syscalls. Restore syscall arguments from >> + * the values already saved on stack during kernel_entry. >> + */ >> + ldp x0, x1, [sp] >> + ldp x2, x3, [sp, #S_X2] >> + ldp x4, x5, [sp, #S_X4] >> + ldp x6, x7, [sp, #S_X6] >> + .endif >> +#endif >> + .endm >> + >> + .macro ct_user_enter, save = 0 >> +#ifdef CONFIG_CONTEXT_TRACKING >> + .if \save == 1 >> + /* >> + * Save/restore only needed on syscall fastpath, which uses >> + * x0-x2. >> + */ >> + push x2, x3 > > Why is x3 saved? I'll respond here since I worked with Larry on the context save/restore part. [insert rather embarassing disclamer of ignorance of arm64 assembly] Based on my reading of the code, I figured only x0-x2 needed to be saved. However, based on some experiments with intentionally clobbering the registers[1] (as suggested by Mark Rutland) in order to make sure we're saving/restoring the right things, I discovered x3 was needed too (I missed updating the comment to mention x0-x3.) Maybe Will/Catalin/Mark R. can shed some light here? Kevin [1] >From 8a8702b4d597d08def22221368beae5db2f4a8aa Mon Sep 17 00:00:00 2001 From: Kevin Hilman Date: Fri, 9 May 2014 13:37:43 -0700 Subject: [PATCH] KJH: test: clobber regs --- arch/arm64/kernel/entry.S | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S index 520da4c02ece..232f0200e88d 100644 --- a/arch/arm64/kernel/entry.S +++ b/arch/arm64/kernel/entry.S @@ -36,6 +36,25 @@ .macro ct_user_exit, restore = 0 #ifdef CONFIG_CONTEXT_TRACKING bl context_tracking_user_exit + movz x0, #0xff, lsl #48 + movz x1, #0xff, lsl #48 + movz x2, #0xff, lsl #48 + movz x3, #0xff, lsl #48 + movz x4, #0xff, lsl #48 + movz x5, #0xff, lsl #48 + movz x6, #0xff, lsl #48 + movz x7, #0xff, lsl #48 + movz x8, #0xff, lsl #48 + movz x9, #0xff, lsl #48 + movz x10, #0xff, lsl #48 + movz x11, #0xff, lsl #48 + movz x12, #0xff, lsl #48 + movz x13, #0xff, lsl #48 + movz x14, #0xff, lsl #48 + movz x15, #0xff, lsl #48 + movz x16, #0xff, lsl #48 + movz x17, #0xff, lsl #48 + movz x18, #0xff, lsl #48 .if \restore == 1 /* * Save/restore needed during syscalls. Restore syscall arguments from @@ -60,6 +79,25 @@ push x0, x1 .endif bl context_tracking_user_enter + movz x0, #0xff, lsl #48 + movz x1, #0xff, lsl #48 + movz x2, #0xff, lsl #48 + movz x3, #0xff, lsl #48 + movz x4, #0xff, lsl #48 + movz x5, #0xff, lsl #48 + movz x6, #0xff, lsl #48 + movz x7, #0xff, lsl #48 + movz x8, #0xff, lsl #48 + movz x9, #0xff, lsl #48 + movz x10, #0xff, lsl #48 + movz x11, #0xff, lsl #48 + movz x12, #0xff, lsl #48 + movz x13, #0xff, lsl #48 + movz x14, #0xff, lsl #48 + movz x15, #0xff, lsl #48 + movz x16, #0xff, lsl #48 + movz x17, #0xff, lsl #48 + movz x18, #0xff, lsl #48 .if \save == 1 pop x0, x1 pop x2, x3