From patchwork Mon Dec 7 12:29:32 2015
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Pavel Fedin
X-Patchwork-Id: 7783341
Return-Path:
X-Original-To: patchwork-kvm@patchwork.kernel.org
Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org
Received: from mail.kernel.org (mail.kernel.org [198.145.29.136])
by patchwork2.web.kernel.org (Postfix) with ESMTP id ED3A6BEEE1
for ;
Mon, 7 Dec 2015 12:29:58 +0000 (UTC)
Received: from mail.kernel.org (localhost [127.0.0.1])
by mail.kernel.org (Postfix) with ESMTP id 3EEA3202FF
for ;
Mon, 7 Dec 2015 12:29:57 +0000 (UTC)
Received: from vger.kernel.org (vger.kernel.org [209.132.180.67])
by mail.kernel.org (Postfix) with ESMTP id 3D9A3202C8
for ;
Mon, 7 Dec 2015 12:29:56 +0000 (UTC)
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
id S1755280AbbLGM3q (ORCPT
);
Mon, 7 Dec 2015 07:29:46 -0500
Received: from mailout1.w1.samsung.com ([210.118.77.11]:25102 "EHLO
mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
with ESMTP id S1754562AbbLGM3n (ORCPT );
Mon, 7 Dec 2015 07:29:43 -0500
Received: from eucpsbgm2.samsung.com (unknown [203.254.199.245])
by mailout1.w1.samsung.com
(Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5
2014)) with ESMTP id <0NYZ0041EMPHALB0@mailout1.w1.samsung.com> for
kvm@vger.kernel.org; Mon, 07 Dec 2015 12:29:41 +0000 (GMT)
X-AuditID: cbfec7f5-f79b16d000005389-05-56657bb5cf41
Received: from eusync3.samsung.com ( [203.254.199.213])
by eucpsbgm2.samsung.com (EUCPMTA) with SMTP id 4D.67.21385.5BB75665;
Mon, 7 Dec 2015 12:29:41 +0000 (GMT)
Received: from fedinw7x64.rnd.samsung.ru ([106.109.131.169])
by eusync3.samsung.com
(Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5
2014)) with ESMTPA id <0NYZ005F2MPCDD20@eusync3.samsung.com>; Mon,
07 Dec 2015 12:29:41 +0000 (GMT)
From: Pavel Fedin
To: kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org
Cc: Christoffer Dall ,
Marc Zyngier ,
Andre Przywara
Subject: [PATCH v7 2/6] KVM: arm/arm64: Move endianness conversion out of
vgic_attr_regs_access()
Date: Mon, 07 Dec 2015 15:29:32 +0300
Message-id:
<4ca037cff70fa8806e021924c703aa562d8457a5.1449491035.git.p.fedin@samsung.com>
X-Mailer: git-send-email 2.4.4
In-reply-to:
References:
In-reply-to:
References:
X-Brightmail-Tracker:
H4sIAAAAAAAAA+NgFprLLMWRmVeSWpSXmKPExsVy+t/xq7pbq1PDDA7M5bZYMe8no8WL1/8Y
LeZMLbT4eOo4u8XfO//YHFg91sxbw+hx59oeNo/zm9Ywe3zeJBfAEsVlk5Kak1mWWqRvl8CV
cXLHbfaCd2IVG+4vZ2tg3C3UxcjJISFgIvFo820WCFtM4sK99WxdjFwcQgJLGSX2HzzCAuG0
MUkcnLqeFaSKTUBd4vTXD2AdIgKmEs//vWUFKWIWaGKUOHT1LxNIQlggWaLh6xewBhYBVYnz
a3rYQWxegWiJO2f/sEGsk5O4cn06mM0pYC5x/sdZsKFCAmYSba/+seMSn8DIv4CRYRWjaGpp
ckFxUnqukV5xYm5xaV66XnJ+7iZGSKB93cG49JjVIUYBDkYlHt4JmSlhQqyJZcWVuYcYJTiY
lUR4ZTNTw4R4UxIrq1KL8uOLSnNSiw8xSnOwKInzztz1PkRIID2xJDU7NbUgtQgmy8TBKdXA
qB/9esMbY4blc8qbPBoPKRxxeWq/30DGVfzIpCULf6V5JPB47crZGPTn8wpVByMJcTVHxmUd
61NN7ia/3m//eNOHGZt5mC69U+6ZElaW9mbn8jkPeyNvv3joZpZ590Vybf3Hfexvbv1Zt0G6
7NCegOo4E6tpy+ZfPRymblK2Q77Iv7qxJOxlshJLcUaioRZzUXEiABe9FEowAgAA
Sender: kvm-owner@vger.kernel.org
Precedence: bulk
List-ID:
X-Mailing-List: kvm@vger.kernel.org
X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI,
T_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
mmio_data_read() and mmio_data_write(), originally used in this function,
are limited only to 32 bits. We are going to refactor this code and
eventually let it do 64-bit I/O for vGICv3. Therefore, our first step is
to get rid of this limitation.
We open up these inlines, which consist of endianness conversion and
masking. Masking is not used here (the mask is set to ~0), so we just
move out the remaining endianness conversion.
Signed-off-by: Pavel Fedin
---
virt/kvm/arm/vgic-v2-emul.c | 20 ++++++++------------
1 file changed, 8 insertions(+), 12 deletions(-)
diff --git a/virt/kvm/arm/vgic-v2-emul.c b/virt/kvm/arm/vgic-v2-emul.c
index 1390797..959b9c6 100644
--- a/virt/kvm/arm/vgic-v2-emul.c
+++ b/virt/kvm/arm/vgic-v2-emul.c
@@ -663,7 +663,7 @@ static const struct vgic_io_range vgic_cpu_ranges[] = {
static int vgic_attr_regs_access(struct kvm_device *dev,
struct kvm_device_attr *attr,
- u32 *reg, bool is_write)
+ __le32 *data, bool is_write)
{
const struct vgic_io_range *r = NULL, *ranges;
phys_addr_t offset;
@@ -671,7 +671,6 @@ static int vgic_attr_regs_access(struct kvm_device *dev,
struct kvm_vcpu *vcpu, *tmp_vcpu;
struct vgic_dist *vgic;
struct kvm_exit_mmio mmio;
- u32 data;
offset = attr->attr & KVM_DEV_ARM_VGIC_OFFSET_MASK;
cpuid = (attr->attr & KVM_DEV_ARM_VGIC_CPUID_MASK) >>
@@ -693,9 +692,7 @@ static int vgic_attr_regs_access(struct kvm_device *dev,
mmio.len = 4;
mmio.is_write = is_write;
- mmio.data = &data;
- if (is_write)
- mmio_data_write(&mmio, ~0, *reg);
+ mmio.data = data;
switch (attr->group) {
case KVM_DEV_ARM_VGIC_GRP_DIST_REGS:
mmio.phys_addr = vgic->vgic_dist_base + offset;
@@ -743,9 +740,6 @@ static int vgic_attr_regs_access(struct kvm_device *dev,
offset -= r->base;
r->handle_mmio(vcpu, &mmio, offset);
- if (!is_write)
- *reg = mmio_data_read(&mmio, ~0);
-
ret = 0;
out_vgic_unlock:
spin_unlock(&vgic->lock);
@@ -778,11 +772,13 @@ static int vgic_v2_set_attr(struct kvm_device *dev,
case KVM_DEV_ARM_VGIC_GRP_CPU_REGS: {
u32 __user *uaddr = (u32 __user *)(long)attr->addr;
u32 reg;
+ __le32 data;
if (get_user(reg, uaddr))
return -EFAULT;
- return vgic_attr_regs_access(dev, attr, ®, true);
+ data = cpu_to_le32(reg);
+ return vgic_attr_regs_access(dev, attr, &data, true);
}
}
@@ -803,12 +799,12 @@ static int vgic_v2_get_attr(struct kvm_device *dev,
case KVM_DEV_ARM_VGIC_GRP_DIST_REGS:
case KVM_DEV_ARM_VGIC_GRP_CPU_REGS: {
u32 __user *uaddr = (u32 __user *)(long)attr->addr;
- u32 reg = 0;
+ __le32 data = 0;
- ret = vgic_attr_regs_access(dev, attr, ®, false);
+ ret = vgic_attr_regs_access(dev, attr, &data, false);
if (ret)
return ret;
- return put_user(reg, uaddr);
+ return put_user(le32_to_cpu(data), uaddr);
}
}