From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f199.google.com (mail-pf0-f199.google.com [209.85.192.199]) by kanga.kvack.org (Postfix) with ESMTP id F10496B0033 for ; Mon, 16 Jan 2017 23:39:29 -0500 (EST) Received: by mail-pf0-f199.google.com with SMTP id 201so114050045pfw.5 for ; Mon, 16 Jan 2017 20:39:29 -0800 (PST) Received: from shards.monkeyblade.net (shards.monkeyblade.net. [184.105.139.130]) by mx.google.com with ESMTP id o26si23634770pli.306.2017.01.16.20.39.28 for ; Mon, 16 Jan 2017 20:39:28 -0800 (PST) Date: Mon, 16 Jan 2017 23:39:24 -0500 (EST) Message-Id: <20170116.233924.374841184595409216.davem@davemloft.net> Subject: Re: [PATCH v4 4/4] sparc64: Add support for ADI (Application Data Integrity) From: David Miller In-Reply-To: <0c08eb00e5a9735d7d0bcbeaadeacaa761011aab.1483999591.git.khalid.aziz@oracle.com> References: <0c08eb00e5a9735d7d0bcbeaadeacaa761011aab.1483999591.git.khalid.aziz@oracle.com> Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: khalid.aziz@oracle.com Cc: corbet@lwn.net, viro@zeniv.linux.org.uk, nitin.m.gupta@oracle.com, mike.kravetz@oracle.com, akpm@linux-foundation.org, mingo@kernel.org, kirill.shutemov@linux.intel.com, adam.buchbinder@gmail.com, hughd@google.com, minchan@kernel.org, keescook@chromium.org, chris.hyser@oracle.com, atish.patra@oracle.com, cmetcalf@mellanox.com, atomlin@redhat.com, jslaby@suse.cz, joe@perches.com, paul.gortmaker@windriver.com, mhocko@suse.com, lstoakes@gmail.com, jack@suse.cz, dave.hansen@linux.intel.com, vbabka@suse.cz, dan.j.williams@intel.com, iamjoonsoo.kim@lge.com, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, sparclinux@vger.kernel.org, linux-mm@kvack.org, khalid@gonehiking.org From: Khalid Aziz Date: Wed, 11 Jan 2017 09:12:54 -0700 > + __asm__ __volatile__( > + ".word 0xa1438000\n\t" /* rd %mcdper, %l0 */ Just use "rd %%asr14, %0" this way you don't have to play all of these fixed register games which kill the code generated by gcc. If you forcefully clobber a windowed register like %l0 it means the function being emitted can never be a leaf function, tail calls are no longer allowed, etc. > + ".word 0x9d800011\n\t" /* wr %g0, %l1, %mcdper */ Likewise use "wr %%g0, %0, %%asr14" > + ".word 0xaf900001\n\t" /* wrpr %g0, %g1, %pmcdper */ Hmmm, which %asr encodes %pmcdper? > diff --git a/arch/sparc/kernel/mdesc.c b/arch/sparc/kernel/mdesc.c > index 8a6982d..68b03bf 100644 > --- a/arch/sparc/kernel/mdesc.c > +++ b/arch/sparc/kernel/mdesc.c > @@ -20,6 +20,7 @@ > #include > #include > #include > +#include > > /* Unlike the OBP device tree, the machine description is a full-on > * DAG. An arbitrary number of ARCs are possible from one > @@ -1104,5 +1105,8 @@ void __init sun4v_mdesc_init(void) > > cur_mdesc = hp; > > +#ifdef CONFIG_SPARC64 mdesc.c is only built on sparc64, this ifdef is superfluous. > +/* Update the state of MCDPER register in current task's mm context before > + * dup so the dup'd task will inherit flags in this register correctly. > + * Current task may have updated flags since it started running. > + */ > +int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src) > +{ > + if (adi_capable() && src->mm) { > + register unsigned long tmp_mcdper; > + > + __asm__ __volatile__( > + ".word 0x83438000\n\t" /* rd %mcdper, %g1 */ > + "mov %%g1, %0\n\t" > + : "=r" (tmp_mcdper) > + : > + : "g1"); > + src->mm->context.mcdper = tmp_mcdper; I don't like the idea of duplicating 'mm' state using the task struct copy. Why do not the MM handling interfaces handle this properly? Maybe it means you've abstracted the ADI register handling in the wrong place. Maybe it's a thread property which is "pushed" from the MM context. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org