From patchwork Thu Feb 28 16:51:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Huth X-Patchwork-Id: 1049616 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=kvm-ppc-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 449JVz3XCkz9sDL for ; Fri, 1 Mar 2019 03:52:11 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387413AbfB1QwL (ORCPT ); Thu, 28 Feb 2019 11:52:11 -0500 Received: from mx1.redhat.com ([209.132.183.28]:38478 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1733144AbfB1QwK (ORCPT ); Thu, 28 Feb 2019 11:52:10 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A0BC7307CB38; Thu, 28 Feb 2019 16:52:10 +0000 (UTC) Received: from thuth.com (ovpn-116-149.ams2.redhat.com [10.36.116.149]) by smtp.corp.redhat.com (Postfix) with ESMTP id 157275DD74; Thu, 28 Feb 2019 16:52:08 +0000 (UTC) From: Thomas Huth To: Paolo Bonzini , =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= , kvm@vger.kernel.org Cc: kvm-ppc@vger.kernel.org, David Hildenbrand , Laurent Vivier , Janosch Frank Subject: [kvm-unit-tests PULL 2/5] s390x: Only look at relevant skey bits Date: Thu, 28 Feb 2019 17:51:57 +0100 Message-Id: <1551372720-17321-3-git-send-email-thuth@redhat.com> In-Reply-To: <1551372720-17321-1-git-send-email-thuth@redhat.com> References: <1551372720-17321-1-git-send-email-thuth@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Thu, 28 Feb 2019 16:52:10 +0000 (UTC) Sender: kvm-ppc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm-ppc@vger.kernel.org From: Janosch Frank Reference and change indication should not be consulted when checking for ACC and FP values of storage keys. Signed-off-by: Janosch Frank Reviewed-by: David Hildenbrand Reviewed-by: Thomas Huth Signed-off-by: Thomas Huth --- lib/s390x/asm/mem.h | 5 +++++ s390x/pfmf.c | 6 +++++- s390x/skey.c | 15 +++++++++++---- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/lib/s390x/asm/mem.h b/lib/s390x/asm/mem.h index 909e6d4..75bd778 100644 --- a/lib/s390x/asm/mem.h +++ b/lib/s390x/asm/mem.h @@ -10,6 +10,11 @@ #ifndef _ASM_S390_MEM_H #define _ASM_S390_MEM_H +#define SKEY_ACC 0xf0 +#define SKEY_FP 0x08 +#define SKEY_RF 0x04 +#define SKEY_CH 0x02 + union skey { struct { uint8_t acc : 4; diff --git a/s390x/pfmf.c b/s390x/pfmf.c index 5e61267..4cc6bd1 100644 --- a/s390x/pfmf.c +++ b/s390x/pfmf.c @@ -70,6 +70,7 @@ static void test_4k_key(void) r1.reg.key = 0x30; pfmf(r1.val, (unsigned long) pagebuf); skey.val = get_storage_key((unsigned long) pagebuf); + skey.val &= SKEY_ACC | SKEY_FP; report("set 4k", skey.val == 0x30); } @@ -77,6 +78,7 @@ static void test_1m_key(void) { int i; union r1 r1; + union skey skey; r1.val = 0; r1.reg.sk = 1; @@ -84,7 +86,9 @@ static void test_1m_key(void) r1.reg.key = 0x30; pfmf(r1.val, (unsigned long) pagebuf); for (i = 0; i < 256; i++) { - if (get_storage_key((unsigned long) pagebuf + i * PAGE_SIZE) != 0x30) { + skey.val = get_storage_key((unsigned long) pagebuf + i * PAGE_SIZE); + skey.val &= SKEY_ACC | SKEY_FP; + if (skey.val != 0x30) { report("set 1M", false); return; } diff --git a/s390x/skey.c b/s390x/skey.c index 1949533..f4894f1 100644 --- a/s390x/skey.c +++ b/s390x/skey.c @@ -35,9 +35,10 @@ static void test_set_mb(void) while (addr < end) addr = set_storage_key_mb(addr, skey.val); - ret1.val = get_storage_key(end - PAGE_SIZE); - ret2.val = get_storage_key(end - PAGE_SIZE * 2); - report("multi block", ret1.val == ret2.val && ret1.val == skey.val); + ret1.val = get_storage_key(end - PAGE_SIZE) & (SKEY_ACC | SKEY_FP); + ret2.val = get_storage_key(end - PAGE_SIZE * 2) & (SKEY_ACC | SKEY_FP); + report("multi block", + ret1.val == ret2.val && ret1.val == skey.val); } static void test_chg(void) @@ -60,7 +61,13 @@ static void test_set(void) ret.val = get_storage_key(page0); set_storage_key(page0, skey.val, 0); ret.val = get_storage_key(page0); - report("set key test", skey.val == ret.val); + /* + * For all set tests we only test the ACC and FP bits. RF and + * CH are set by the machine for memory references and changes + * and hence might change between a set and a get. + */ + report("set key test", + skey.str.acc == ret.str.acc && skey.str.fp == ret.str.fp); } static void test_priv(void)