linux-mips
[Top] [All Lists]

Re: [PATCH 02/20] KVM/MIPS32: Arch specific KVM data structures.

To: Avi Kivity <avi@redhat.com>, Sanjay Lal <sanjayl@kymasys.com>
Subject: Re: [PATCH 02/20] KVM/MIPS32: Arch specific KVM data structures.
From: David Daney <ddaney.cavm@gmail.com>
Date: Thu, 01 Nov 2012 09:51:10 -0700
Cc: kvm@vger.kernel.org, linux-mips@linux-mips.org
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=QQ22acoo2fc6grFQ98slHv3Wr4wH2Lqg70rd5umPm5Y=; b=pGshCvQMZ8Zdv/yDxAwqItCPJi+2dLWiyTriIyS2rxO0aG70peVPKWeizBC3Gpslt8 zqnR6pQJduiRe/YKH9TRM+nTjMRQu30+e42R3VSNdRs8PEIyX1UZTh8ODVHYMnOeaPUl sm5w2lg/2xsihbnk1DDXs0HOL/47zAHmBE2OivVedbnaQbU6jpJ2M//xJMcniY0nqD3w PlPG/bhopio0U0bePBBK7jRG9ID/9VkDlbqwLa9V5/b5j6PX8Sbl/khNSorHqlsmWgyq VqukBadKbqwIFKYRTSUgZ0ROcTLX2JO+TJV7kvU1nhNACa4QhgrzFyD4i8SaKBGjkel7 yXvg==
In-reply-to: <50928F87.4060309@redhat.com>
List-archive: <http://www.linux-mips.org/archives/linux-mips/>
List-help: <mailto:ecartis@linux-mips.org?Subject=help>
List-id: linux-mips <linux-mips.eddie.linux-mips.org>
List-owner: <mailto:ralf@linux-mips.org>
List-post: <mailto:linux-mips@linux-mips.org>
List-software: Ecartis version 1.0.0
List-subscribe: <mailto:ecartis@linux-mips.org?subject=subscribe%20linux-mips>
List-unsubscribe: <mailto:ecartis@linux-mips.org?subject=unsubscribe%20linux-mips>
References: <54507365-0EF7-480A-8A54-75E12B3677D9@kymasys.com> <50928F87.4060309@redhat.com>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121016 Thunderbird/16.0.1
On 11/01/2012 08:04 AM, Avi Kivity wrote:
On 10/31/2012 05:18 PM, Sanjay Lal wrote:

Signed-off-by: Sanjay Lal <sanjayl@kymasys.com>
---
  arch/mips/include/asm/kvm.h      |  58 ++++
  arch/mips/include/asm/kvm_host.h | 672 +++++++++++++++++++++++++++++++++++++++
  2 files changed, 730 insertions(+)
  create mode 100644 arch/mips/include/asm/kvm.h
  create mode 100644 arch/mips/include/asm/kvm_host.h

diff --git a/arch/mips/include/asm/kvm.h b/arch/mips/include/asm/kvm.h
new file mode 100644
index 0000000..39bb715
--- /dev/null
+++ b/arch/mips/include/asm/kvm.h
@@ -0,0 +1,58 @@
+/*
+* This file is subject to the terms and conditions of the GNU General Public
+* License.  See the file "COPYING" in the main directory of this archive
+* for more details.
+*
+*
+* Copyright (C) 2012  MIPS Technologies, Inc.  All rights reserved.
+* Authors: Sanjay Lal <sanjayl@kymasys.com>
+*/
+
+
+#ifndef __LINUX_KVM_MIPS_H
+#define __LINUX_KVM_MIPS_H
+
+#include <linux/types.h>
+
+#define __KVM_MIPS
+
+#define N_MIPS_COPROC_REGS      32
+#define N_MIPS_COPROC_SEL      8
+
+/* for KVM_GET_REGS and KVM_SET_REGS */
+struct kvm_regs {
+    __u32 gprs[32];
+    __u32 hi;
+    __u32 lo;
+    __u32 pc;
+
+    ulong cp0reg[N_MIPS_COPROC_REGS][N_MIPS_COPROC_SEL];
+};

ulong changes size in 64-bit archs, requiring compat translations when
issuing 32-bit syscalls on a 64-bit kernel.  I don't know MIPS enough to
know whether that's a useful scenario.

For a 32-bit machine all the registers are 32-bits wide.

For a 64-bit machine, they are ... yes 64-bits wide.

Since this entire structure seems to be useless for a 64-bit implementation just use __u32 for everything.

This does beg the question though, how will you handle 64-bit machines?

Why not name the entire structure something like struct kvm_regs_mips32? Then for the 64-bit implementation use struct kvm_regs_mips64.

I haven't studied it enough to know if you can do this. if it needs to be called exactly 'struct kvm_regs', then you have to make everything __u64 and only populate the lower halves of the fields for mips32. Watch out for endian issues in this case.

David Daney

<Prev in Thread] Current Thread [Next in Thread>