Received: by 10.223.176.46 with SMTP id f43csp3261287wra; Mon, 22 Jan 2018 11:00:48 -0800 (PST) X-Google-Smtp-Source: AH8x224zYfXTHEuwQ3DMpS2zcNTmkm9pcZZjer3tF+fXyh5Uvo1cFWhw1q3/Y2qJGDIQ6As5doL2 X-Received: by 10.107.129.224 with SMTP id l93mr9585669ioi.140.1516647648172; Mon, 22 Jan 2018 11:00:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516647647; cv=none; d=google.com; s=arc-20160816; b=KimuwdUcXDHy2xn5wuhzClyZP1/4Ahw2xaEaXg08zE9es4frtshHVl/icg+GR+so0e Z2q8N+sMW6lnYafHoWu/tg0BMdcgktD5sCPaW93nOKgOkfdeIjrFCrdsaWrkmjGpce/W HqCBbedW0N/O4w9DBEFD6IZ+HyN9v0rU7cilvHAZzfBHNNOXwgkFjp2FQcZMc6BCEyhx kxMcKNea/k9wJ+Jqguyu3E4qaCOdID/kPiLtgC4q5GfITkqVF2M4zG8UfN99eu54ZmWG LX6YMKfG7DLPoyChNtwtG5NmtWxFFHrZse6FMC/Q8sLSZuVKOiw+Lj6BsZxfyuu0EMYl 9lsQ== 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=S1dQbtxrtDLxRS8gvR0a2ad+TNKEGv73tGRmGiPDfZc=; b=kJLgrOpQEtjeHsKhYmiSVGfpiz1G9xXYx3eZiXC5gh3Hye4E3nUxTQ1LJKqavlzNw2 vYqM4D3zfyandCAr7bGQJVVswuMHW54dIeuO864ZEmd2QWGWWejpceHKuNm+TuoHfsy/ cqI9PxJyfqRI73MM8lNu6fzH2ZaX8hJRupdqKaKJGUHm4Q5zoaY3FgZpkXsYRtLJ9oxB Yny1CMMV1We80v13KE+7oPF6bgF7gAvUbQhJ1LNsrzpieusreuVCImQx/tcVEbSewUJR NHdnWAdo+JXtXYUC1b/TBwQOoQKGKVXLYZvvpgRWg+JkkBBXxEPRqe2S25FrebHZOoh9 4gWw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=q0/1TCTd; 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=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w194si12609004iof.269.2018.01.22.11.00.31; Mon, 22 Jan 2018 11:00:47 -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=fail header.i=@gmail.com header.s=20161025 header.b=q0/1TCTd; 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=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751356AbeAVSxM (ORCPT + 99 others); Mon, 22 Jan 2018 13:53:12 -0500 Received: from mail-qt0-f196.google.com ([209.85.216.196]:40369 "EHLO mail-qt0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751125AbeAVSxC (ORCPT ); Mon, 22 Jan 2018 13:53:02 -0500 Received: by mail-qt0-f196.google.com with SMTP id s39so23477874qth.7; Mon, 22 Jan 2018 10:53:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=S1dQbtxrtDLxRS8gvR0a2ad+TNKEGv73tGRmGiPDfZc=; b=q0/1TCTdFFwd2eM4eHOmz14gubH1FsnlfcqlpQKHJWeGhutXApq3LIrMF7vIQnUplW nwIDwpyc527r+diijfSwBjItWzl1tcBHIVll8QNyR2iIs4j2rmiAJxEXTJOR6I5/ztqP owvZv211Yn23UTKx7YfVPtk6QsX+CrEYCjUQ/LOB2LrgOzDPjjO4fBXHOncHTglWXAsN i4RbGkSJrMzrIDNoGIhJYFUQdXjr3vXHngZoUmwomNu2HeeVGbpZtFmPIm8XQK76nRtI qymBsbBjGqgx3qdZw3NVNyQmPysWCx9nCVpS4iXe9foYYl6icd3yJB6DB6+nnPt/i1A9 YR3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=S1dQbtxrtDLxRS8gvR0a2ad+TNKEGv73tGRmGiPDfZc=; b=rgdFU2HKIopPtIEk6B8m4xUvAG6TI6XPuzlcRKVYG17V5h+QfuEsnvu4hceh827Aab qy0bEfIpJ8fLKSSIDLfP2aTktVBD0Hb9z1JT3iJ8uYVlE6lY10j8uRjwwtb3pImwRc9v MEkAGoZOd8HSCvz2c/GJgy12wOx9SOitAxIKxSjdEy309RuOT97ZyD0Fv3js34XZMD83 aQyHTjYK1pi6s1TbythW+Gljf2fMvKsig0DRTTu6Zr+7KHG4kBpi56btLfikHBPBSfHb xldMIKhpsXfGPzB1GNKIh85huSCHp63A313sCXkf37NVHn254BYJBsttC9ESS+7ZCgMN Sq/g== X-Gm-Message-State: AKwxytcPMHXq2xN/RoVj5e5U/3HdX2CSvixz662nHonMxOj5Yq4dwMCf vHJjYA+7Z7JPaBcqATZbObA= X-Received: by 10.200.50.176 with SMTP id z45mr12521007qta.140.1516647181713; Mon, 22 Jan 2018 10:53:01 -0800 (PST) Received: from localhost.localdomain (50-39-100-161.bvtn.or.frontiernet.net. [50.39.100.161]) by smtp.gmail.com with ESMTPSA id o20sm10790061qkl.14.2018.01.22.10.52.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 22 Jan 2018 10:53:01 -0800 (PST) From: Ram Pai To: shuahkh@osg.samsung.com, linux-kselftest@vger.kernel.org Cc: mpe@ellerman.id.au, linuxppc-dev@lists.ozlabs.org, linux-mm@kvack.org, x86@kernel.org, linux-arch@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, mingo@redhat.com, akpm@linux-foundation.org, dave.hansen@intel.com, benh@kernel.crashing.org, paulus@samba.org, khandual@linux.vnet.ibm.com, aneesh.kumar@linux.vnet.ibm.com, bsingharora@gmail.com, hbabu@us.ibm.com, mhocko@kernel.org, bauerman@linux.vnet.ibm.com, ebiederm@xmission.com, linuxram@us.ibm.com, arnd@arndb.de Subject: [PATCH v10 05/24] selftests/vm: generic function to handle shadow key register Date: Mon, 22 Jan 2018 10:51:58 -0800 Message-Id: <1516647137-11174-6-git-send-email-linuxram@us.ibm.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1516647137-11174-1-git-send-email-linuxram@us.ibm.com> References: <1516647137-11174-1-git-send-email-linuxram@us.ibm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org helper functions to handler shadow pkey register Signed-off-by: Ram Pai --- tools/testing/selftests/vm/pkey-helpers.h | 27 ++++++++++++++++++++ tools/testing/selftests/vm/protection_keys.c | 34 ++++++++++++++++--------- 2 files changed, 49 insertions(+), 12 deletions(-) diff --git a/tools/testing/selftests/vm/pkey-helpers.h b/tools/testing/selftests/vm/pkey-helpers.h index b6c2133..7c979ad 100644 --- a/tools/testing/selftests/vm/pkey-helpers.h +++ b/tools/testing/selftests/vm/pkey-helpers.h @@ -44,6 +44,33 @@ #define DEBUG_LEVEL 0 #endif #define DPRINT_IN_SIGNAL_BUF_SIZE 4096 + +static inline u32 pkey_to_shift(int pkey) +{ + return pkey * PKEY_BITS_PER_PKEY; +} + +static inline pkey_reg_t reset_bits(int pkey, pkey_reg_t bits) +{ + u32 shift = pkey_to_shift(pkey); + + return ~(bits << shift); +} + +static inline pkey_reg_t left_shift_bits(int pkey, pkey_reg_t bits) +{ + u32 shift = pkey_to_shift(pkey); + + return (bits << shift); +} + +static inline pkey_reg_t right_shift_bits(int pkey, pkey_reg_t bits) +{ + u32 shift = pkey_to_shift(pkey); + + return (bits >> shift); +} + extern int dprint_in_signal; extern char dprint_in_signal_buffer[DPRINT_IN_SIGNAL_BUF_SIZE]; static inline void sigsafe_printf(const char *format, ...) diff --git a/tools/testing/selftests/vm/protection_keys.c b/tools/testing/selftests/vm/protection_keys.c index 3ef2569..83216c5 100644 --- a/tools/testing/selftests/vm/protection_keys.c +++ b/tools/testing/selftests/vm/protection_keys.c @@ -374,7 +374,7 @@ u32 pkey_get(int pkey, unsigned long flags) __func__, pkey, flags, 0, 0); dprintf2("%s() raw pkey_reg: %x\n", __func__, pkey_reg); - shifted_pkey_reg = (pkey_reg >> (pkey * PKEY_BITS_PER_PKEY)); + shifted_pkey_reg = right_shift_bits(pkey, pkey_reg); dprintf2("%s() shifted_pkey_reg: %x\n", __func__, shifted_pkey_reg); masked_pkey_reg = shifted_pkey_reg & mask; dprintf2("%s() masked pkey_reg: %x\n", __func__, masked_pkey_reg); @@ -397,9 +397,9 @@ int pkey_set(int pkey, unsigned long rights, unsigned long flags) /* copy old pkey_reg */ new_pkey_reg = old_pkey_reg; /* mask out bits from pkey in old value: */ - new_pkey_reg &= ~(mask << (pkey * PKEY_BITS_PER_PKEY)); + new_pkey_reg &= reset_bits(pkey, mask); /* OR in new bits for pkey: */ - new_pkey_reg |= (rights << (pkey * PKEY_BITS_PER_PKEY)); + new_pkey_reg |= left_shift_bits(pkey, rights); __wrpkey_reg(new_pkey_reg); @@ -430,7 +430,7 @@ void pkey_disable_set(int pkey, int flags) ret = pkey_set(pkey, pkey_rights, syscall_flags); assert(!ret); /*pkey_reg and flags have the same format */ - shadow_pkey_reg |= flags << (pkey * 2); + shadow_pkey_reg |= left_shift_bits(pkey, flags); dprintf1("%s(%d) shadow: 0x%016lx\n", __func__, pkey, shadow_pkey_reg); @@ -465,7 +465,7 @@ void pkey_disable_clear(int pkey, int flags) ret = pkey_set(pkey, pkey_rights, 0); /* pkey_reg and flags have the same format */ - shadow_pkey_reg &= ~(flags << (pkey * 2)); + shadow_pkey_reg &= reset_bits(pkey, flags); pkey_assert(ret >= 0); pkey_rights = pkey_get(pkey, syscall_flags); @@ -523,6 +523,21 @@ int sys_pkey_alloc(unsigned long flags, unsigned long init_val) return ret; } +void pkey_setup_shadow(void) +{ + shadow_pkey_reg = __rdpkey_reg(); +} + +void pkey_reset_shadow(u32 key) +{ + shadow_pkey_reg &= reset_bits(key, 0x3); +} + +void pkey_set_shadow(u32 key, u64 init_val) +{ + shadow_pkey_reg |= left_shift_bits(key, init_val); +} + int alloc_pkey(void) { int ret; @@ -540,7 +555,7 @@ int alloc_pkey(void) shadow_pkey_reg); if (ret) { /* clear both the bits: */ - shadow_pkey_reg &= ~(0x3 << (ret * 2)); + pkey_reset_shadow(ret); dprintf4("%s()::%d, ret: %d pkey_reg: 0x%016lx " "shadow: 0x%016lx\n", __func__, @@ -550,7 +565,7 @@ int alloc_pkey(void) * move the new state in from init_val * (remember, we cheated and init_val == pkey_reg format) */ - shadow_pkey_reg |= (init_val << (ret * 2)); + pkey_set_shadow(ret, init_val); } dprintf4("%s()::%d, ret: %d pkey_reg: 0x%016lx shadow: 0x%016lx\n", __func__, __LINE__, ret, __rdpkey_reg(), @@ -1322,11 +1337,6 @@ void run_tests_once(void) iteration_nr++; } -void pkey_setup_shadow(void) -{ - shadow_pkey_reg = __rdpkey_reg(); -} - int main(void) { int nr_iterations = 22; -- 1.7.1