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: 4227501 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id E9E3ABF90B for ; Fri, 23 May 2014 00:15:40 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 0C34E20386 for ; Fri, 23 May 2014 00:15:40 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0981020383 for ; Fri, 23 May 2014 00:15:39 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1Wnd5i-0000P3-9Z; Fri, 23 May 2014 00:12:06 +0000 Received: from mail-pa0-f52.google.com ([209.85.220.52]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1Wnd5f-0000Nv-GJ for linux-arm-kernel@lists.infradead.org; Fri, 23 May 2014 00:12:04 +0000 Received: by mail-pa0-f52.google.com with SMTP id fa1so3227907pad.39 for ; Thu, 22 May 2014 17:11:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-type; bh=Lv1dhxQuG20dAB4d8USg7T/fJXcLc4dGz3s75bm9p0Y=; b=IfAsFTfQJOxVG69INTMJN1cMjYIcGyo+A2kzv73gyqMMs0e3doM+5imMYRBi1JNNyz Lvn18b/FqLd+fkMOmCqp7Az2vDo9CWz5R6V43yOHM8oFiRAVFKhNdN0vhKOuoif103TK V7BEJ4peMNi9VE2KxeP07KU628biEEd4Tn3onKijHoLBmlLugTVTeMOMQTTmJ65Nc7Bs bBDQu4dXsSFWXs0gONmlh/wer8af7kFxQExqqRO26dfsVLfNcXTVZ52fCfKoFlsZRTKT HlXXYVARzxNfyvl8wkzxQZ8GYnrY/wFjk7q3r/CW4J/QDIB0bscxfXoOuJHk5XTI6aMa xriw== X-Gm-Message-State: ALoCoQlWGlIlZzbkigN27pfepWcNxmTwloueeNrwydmE6kPNxn6IMZwBC7blySqfu9BTz/si0puT 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 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20140522_171203_559672_DED6BAB9 X-CRM114-Status: GOOD ( 16.47 ) X-Spam-Score: -0.7 (/) Cc: mark.rutland@arm.com, linaro-kernel@lists.linaro.org, catalin.marinas@arm.com, will.deacon@arm.com, linux-kernel@vger.kernel.org, Larry Bassel , linux-arm-kernel@lists.infradead.org X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP +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