From patchwork Mon Oct 12 08:29:33 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Fedin X-Patchwork-Id: 7373311 Return-Path: X-Original-To: patchwork-kvm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 681C19F1D5 for ; Mon, 12 Oct 2015 08:30:11 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 82CBD206D2 for ; Mon, 12 Oct 2015 08:30:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 90B9D206A4 for ; Mon, 12 Oct 2015 08:30:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751878AbbJLI35 (ORCPT ); Mon, 12 Oct 2015 04:29:57 -0400 Received: from mailout2.w1.samsung.com ([210.118.77.12]:49751 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751670AbbJLI3x (ORCPT ); Mon, 12 Oct 2015 04:29:53 -0400 Received: from eucpsbgm2.samsung.com (unknown [203.254.199.245]) by mailout2.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0NW300AWCM9OAC30@mailout2.w1.samsung.com> for kvm@vger.kernel.org; Mon, 12 Oct 2015 09:29:48 +0100 (BST) X-AuditID: cbfec7f5-f794b6d000001495-7d-561b6f7c97c0 Received: from eusync3.samsung.com ( [203.254.199.213]) by eucpsbgm2.samsung.com (EUCPMTA) with SMTP id C9.92.05269.C7F6B165; Mon, 12 Oct 2015 09:29:48 +0100 (BST) 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 <0NW300I0JM9FBO60@eusync3.samsung.com>; Mon, 12 Oct 2015 09:29:48 +0100 (BST) From: Pavel Fedin To: kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org Cc: Christoffer Dall , Marc Zyngier , Andre Przywara Subject: [PATCH v5 1/7] KVM: arm/arm64: Move endianess conversion out of vgic_attr_regs_access() Date: Mon, 12 Oct 2015 11:29:33 +0300 Message-id: X-Mailer: git-send-email 2.4.4 In-reply-to: References: In-reply-to: References: X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprNLMWRmVeSWpSXmKPExsVy+t/xq7o1+dJhBkvnmFismPeT0eLF63+M FnOmFlp8PHWc3eLvnX9sDqwea+atYfS4c20Pm8f5TWuYPT5vkgtgieKySUnNySxLLdK3S+DK aJjbzVTwRqyi+/t/tgbGnUJdjJwcEgImEifWtrND2GISF+6tZ+ti5OIQEljKKDHz0nIWCKeN SeLp2tlMIFVsAuoSp79+YAGxRQRMJZ7/e8sKUsQs0MQocejqX7AiYYEkidNH25lBbBYBVYmd 734ygti8AtESSxYvZYZYJydx5fp0oHUcHJwC5hKH51WChIUEzCT6O+ez4hCewMi/gJFhFaNo amlyQXFSeq6RXnFibnFpXrpecn7uJkZIkH3dwbj0mNUhRgEORiUeXo4tUmFCrIllxZW5hxgl OJiVRHj3BkmHCfGmJFZWpRblxxeV5qQWH2KU5mBREueduet9iJBAemJJanZqakFqEUyWiYNT qoEx7Hyc8ZaoEqkjeo7MN30KV/AwFCrq7JZp7f+YP//37O9p5t+O/FrKkZ4a52mlZHo8iePq iu9XdXQFb9+/9coiOY7l17rjWjeWquYmCT64mhY3g2ONbvBr99U/j1xQSEjoMnn/bEZNyrfL C60eeK8+GFT2Y8sjE8OXq8zP3avYwBpruiCqeYadEktxRqKhFnNRcSIAabBXmC4CAAA= 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 endianess conversion and masking. Masking is not used here (the mask is set to ~0), so we just move out the remaining endianess 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); } }