From patchwork Tue Jul 25 09:40:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cornelia Huck X-Patchwork-Id: 9861567 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 578B66038C for ; Tue, 25 Jul 2017 09:45:03 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 405792860E for ; Tue, 25 Jul 2017 09:45:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3500E28614; Tue, 25 Jul 2017 09:45:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id E9C4728628 for ; Tue, 25 Jul 2017 09:45:01 +0000 (UTC) Received: from localhost ([::1]:59491 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dZwO9-0003pV-0k for patchwork-qemu-devel@patchwork.kernel.org; Tue, 25 Jul 2017 05:44:25 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44191) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dZwKo-0001xX-PF for qemu-devel@nongnu.org; Tue, 25 Jul 2017 05:40:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dZwKn-0003er-Nq for qemu-devel@nongnu.org; Tue, 25 Jul 2017 05:40:58 -0400 Received: from mx1.redhat.com ([209.132.183.28]:51618) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dZwKn-0003dD-F1 for qemu-devel@nongnu.org; Tue, 25 Jul 2017 05:40:57 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 70EB6356F2; Tue, 25 Jul 2017 09:40:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 70EB6356F2 Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=cohuck@redhat.com Received: from localhost (ovpn-116-214.ams2.redhat.com [10.36.116.214]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E663D171E5; Tue, 25 Jul 2017 09:40:53 +0000 (UTC) From: Cornelia Huck To: peter.maydell@linaro.org Date: Tue, 25 Jul 2017 11:40:18 +0200 Message-Id: <20170725094026.5376-7-cohuck@redhat.com> In-Reply-To: <20170725094026.5376-1-cohuck@redhat.com> References: <20170725094026.5376-1-cohuck@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Tue, 25 Jul 2017 09:40:56 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL for-2.10 06/14] target/s390x: introduce (test|set)_be_bit X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: thuth@redhat.com, david@redhat.com, Cornelia Huck , qemu-devel@nongnu.org, agraf@suse.de, borntraeger@de.ibm.com, rth@twiddle.net Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: David Hildenbrand Using ordinary bitmap operations to set/test bits does not work properly on architectures !s390x. Let's drop (test|set)_bit_inv and introduce (test|set)_be_bit instead. These functions work on uint8_t array, not on unsigned longs arrays and are for now only used in the context of CPU features. Signed-off-by: David Hildenbrand Message-Id: <20170720123721.12366-4-david@redhat.com> Signed-off-by: Cornelia Huck --- target/s390x/cpu_features.c | 8 ++++---- target/s390x/cpu_features.h | 8 ++++++++ target/s390x/kvm.c | 14 ++------------ 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/target/s390x/cpu_features.c b/target/s390x/cpu_features.c index 8b1491734f..1d3a036393 100644 --- a/target/s390x/cpu_features.c +++ b/target/s390x/cpu_features.c @@ -340,8 +340,8 @@ void s390_fill_feat_block(const S390FeatBitmap features, S390FeatType type, case S390_FEAT_TYPE_STFL: if (test_bit(S390_FEAT_ZARCH, features)) { /* Features that are always active */ - data[0] |= 0x20; /* z/Architecture */ - data[17] |= 0x20; /* Configuration-z-architectural-mode */ + set_be_bit(2, data); /* z/Architecture */ + set_be_bit(138, data); /* Configuration-z-architectural-mode */ } break; case S390_FEAT_TYPE_PTFF: @@ -357,7 +357,7 @@ void s390_fill_feat_block(const S390FeatBitmap features, S390FeatType type, case S390_FEAT_TYPE_PCC: case S390_FEAT_TYPE_PPNO: case S390_FEAT_TYPE_KMA: - data[0] |= 0x80; /* query is always available */ + set_be_bit(0, data); /* query is always available */ break; default: break; @@ -368,7 +368,7 @@ void s390_fill_feat_block(const S390FeatBitmap features, S390FeatType type, if (s390_features[feat].type == type) { bit_nr = s390_features[feat].bit; /* big endian on uint8_t array */ - data[bit_nr / 8] |= 0x80 >> (bit_nr % 8); + set_be_bit(bit_nr, data); } feat = find_next_bit(features, S390_FEAT_MAX, feat + 1); } diff --git a/target/s390x/cpu_features.h b/target/s390x/cpu_features.h index 770435e0cc..e306aa7ab2 100644 --- a/target/s390x/cpu_features.h +++ b/target/s390x/cpu_features.h @@ -93,4 +93,12 @@ const S390FeatGroupDef *s390_feat_group_def(S390FeatGroup group); #define BE_BIT_NR(BIT) (BIT ^ (BITS_PER_LONG - 1)) +static inline void set_be_bit(unsigned int bit_nr, uint8_t *array) +{ + array[bit_nr / 8] |= 0x80 >> (bit_nr % 8); +} +static inline bool test_be_bit(unsigned int bit_nr, const uint8_t *array) +{ + return array[bit_nr / 8] & (0x80 >> (bit_nr % 8)); +} #endif /* TARGET_S390X_CPU_FEATURES_H */ diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c index 999ea570c3..9bec48152f 100644 --- a/target/s390x/kvm.c +++ b/target/s390x/kvm.c @@ -2430,16 +2430,6 @@ int kvm_arch_msi_data_to_gsi(uint32_t data) abort(); } -static inline int test_bit_inv(long nr, const unsigned long *addr) -{ - return test_bit(BE_BIT_NR(nr), addr); -} - -static inline void set_bit_inv(long nr, unsigned long *addr) -{ - set_bit(BE_BIT_NR(nr), addr); -} - static int query_cpu_subfunc(S390FeatBitmap features) { struct kvm_s390_vm_cpu_subfunc prop; @@ -2566,7 +2556,7 @@ static int query_cpu_feat(S390FeatBitmap features) } for (i = 0; i < ARRAY_SIZE(kvm_to_feat); i++) { - if (test_bit_inv(kvm_to_feat[i][0], (unsigned long *)prop.feat)) { + if (test_be_bit(kvm_to_feat[i][0], (uint8_t *) prop.feat)) { set_bit(kvm_to_feat[i][1], features); } } @@ -2585,7 +2575,7 @@ static int configure_cpu_feat(const S390FeatBitmap features) for (i = 0; i < ARRAY_SIZE(kvm_to_feat); i++) { if (test_bit(kvm_to_feat[i][1], features)) { - set_bit_inv(kvm_to_feat[i][0], (unsigned long *)prop.feat); + set_be_bit(kvm_to_feat[i][0], (uint8_t *) prop.feat); } } return kvm_vm_ioctl(kvm_state, KVM_SET_DEVICE_ATTR, &attr);