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); } }