From patchwork Mon May 7 06:20:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Guo X-Patchwork-Id: 909540 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40fXn24vM3z9s27 for ; Mon, 7 May 2018 16:30:46 +1000 (AEST) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ABQnEhMZ"; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 40fXn23430zDrK4 for ; Mon, 7 May 2018 16:30:46 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ABQnEhMZ"; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:400e:c05::242; helo=mail-pg0-x242.google.com; envelope-from=wei.guo.simon@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ABQnEhMZ"; dkim-atps=neutral Received: from mail-pg0-x242.google.com (mail-pg0-x242.google.com [IPv6:2607:f8b0:400e:c05::242]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 40fXYQ38CFzF157 for ; Mon, 7 May 2018 16:20:42 +1000 (AEST) Received: by mail-pg0-x242.google.com with SMTP id n9-v6so19495547pgq.5 for ; Sun, 06 May 2018 23:20:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ZLxHMJFZfHNj4XcFmRbCa5JL/sGUvmZ9iGp3SCMW96Q=; b=ABQnEhMZ9VzE/jJqaaEiFfS97Sa96BYDtiC6Vx86jNGm/gE2wseU/AJ+5wt9ihanKX fNVrLBHMJ4p52luitnXHLxJTpzpoPanC1yRJObG/xrT7BuP5DklqQznVo9N+8BCFQFfB SUgnK845QsgJKfWNsYIs1cKPP+7M+ApMKNaTLbcwj43zIAj0Pjk+vN0A8VQ8SGHNhsrv eiMyjFNFOsIjGRAkIPFh6a7/hYof7kpgmO1vicg/phIQ7EY8CnBCriFofpuvoKmE81K/ yhQvPuE/5Gh4BJuqZhCgNZ+cx4LFVIi1mTyqDkh/sO6Nu+Lft48Fasg2DRa4M4MRKZx/ vQSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ZLxHMJFZfHNj4XcFmRbCa5JL/sGUvmZ9iGp3SCMW96Q=; b=nweZWUn0qFEO7b0hBdHpNSPcW4pXh0ucMqHQK68J/lh8ZYLowFCg2cQXAoYk8GaRNb qkjD/Eac3Ofi1XMPuKqMJAAsmLzDF+U14S9RBxu+LpxyhDO/juISI3D3/E7HUlq85//v O08s41dyw18EX717QNhnQ1hyaEeBTYlRqEreD0Jk7C9yEx+PPWvml98xpbImsUjyhhMA oYGag8TnLMnT4jS0GIq/i9N6Iq1YkSu8S5thtG0nOJoMgVMU5jDaJqOF/TAFrUJrhY2Y ug9DCvog7arMHxnZlccTgxcjxaSjCg70SH2DlvGRaEVTuHN9BpSo1aPBkTc0y0BFfzgU JfYg== X-Gm-Message-State: ALQs6tDzYTBKSf+33Fy/vsAMmW19DVPjfoE5k4WqDu9GE706V7YWSYA6 7QzdNBAsUyXb7Ufc2IuEJLk= X-Google-Smtp-Source: AB8JxZpXcSwuG3aRph0z3PqgN8gDQzcv6uDyvroHXcthGK6Gd0iVGcpizVJGD9rOk75zKH6Kxd6sqw== X-Received: by 2002:a17:902:f24:: with SMTP id 33-v6mr37899814ply.242.1525674040487; Sun, 06 May 2018 23:20:40 -0700 (PDT) Received: from simonLocalRHEL7.cn.ibm.com ([112.73.0.88]) by smtp.gmail.com with ESMTPSA id z25sm10459544pfi.171.2018.05.06.23.20.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 06 May 2018 23:20:39 -0700 (PDT) From: wei.guo.simon@gmail.com To: kvm-ppc@vger.kernel.org Subject: [PATCH v2 03/10] KVM: PPC: Fix a mmio_host_swabbed uninitialized usage issue when VMX store Date: Mon, 7 May 2018 14:20:09 +0800 Message-Id: <1525674016-6703-4-git-send-email-wei.guo.simon@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1525674016-6703-1-git-send-email-wei.guo.simon@gmail.com> References: <1525674016-6703-1-git-send-email-wei.guo.simon@gmail.com> X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Simon Guo , linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" From: Simon Guo When KVM emulates VMX store, it will invoke kvmppc_get_vmx_data() to retrieve VMX reg val. kvmppc_get_vmx_data() will check mmio_host_swabbed to decide which double word of vr[] to be used. But the mmio_host_swabbed can be uninitiazed during VMX store procedure: kvmppc_emulate_loadstore \- kvmppc_handle_store128_by2x64 \- kvmppc_get_vmx_data So vcpu->arch.mmio_host_swabbed is not meant to be used at all for emulation of store instructions, and this patch makes that true for VMX stores. This patch also initializes mmio_host_swabbed to avoid invisble trouble. Signed-off-by: Simon Guo --- arch/powerpc/kvm/emulate_loadstore.c | 1 + arch/powerpc/kvm/powerpc.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/kvm/emulate_loadstore.c b/arch/powerpc/kvm/emulate_loadstore.c index a382e15..b8a3aef 100644 --- a/arch/powerpc/kvm/emulate_loadstore.c +++ b/arch/powerpc/kvm/emulate_loadstore.c @@ -111,6 +111,7 @@ int kvmppc_emulate_loadstore(struct kvm_vcpu *vcpu) vcpu->arch.mmio_sp64_extend = 0; vcpu->arch.mmio_sign_extend = 0; vcpu->arch.mmio_vmx_copy_nums = 0; + vcpu->arch.mmio_host_swabbed = 0; switch (get_op(inst)) { case 31: diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c index 4e38764..bef27b1 100644 --- a/arch/powerpc/kvm/powerpc.c +++ b/arch/powerpc/kvm/powerpc.c @@ -1374,7 +1374,7 @@ static inline int kvmppc_get_vmx_data(struct kvm_vcpu *vcpu, int rs, u64 *val) if (di > 1) return -1; - if (vcpu->arch.mmio_host_swabbed) + if (kvmppc_need_byteswap(vcpu)) di = 1 - di; w0 = vrs.u[di * 2];