All of lore.kernel.org
 help / color / mirror / Atom feed
From: Amit Shah <amit.shah@redhat.com>
To: avi@redhat.com
Cc: kvm@vger.kernel.org, Amit Shah <amit.shah@redhat.com>
Subject: [PATCH] kvm: libkvm: Add a wrapper for an ioctl for the KVM_SET_CPUID2 interface
Date: Wed, 14 Jan 2009 16:51:45 +0000	[thread overview]
Message-ID: <1231951906-28145-2-git-send-email-amit.shah@redhat.com> (raw)
In-Reply-To: <1231951906-28145-1-git-send-email-amit.shah@redhat.com>

kvm_set_cpuid2() builds on top of kvm_set_cpuid() and correctly populates
cpuid functions that have sub-leaves.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
---
 libkvm/libkvm-x86.c |   21 +++++++++++++++++++++
 libkvm/libkvm.h     |   16 ++++++++++++++++
 2 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/libkvm/libkvm-x86.c b/libkvm/libkvm-x86.c
index a8cca15..dcef548 100644
--- a/libkvm/libkvm-x86.c
+++ b/libkvm/libkvm-x86.c
@@ -475,6 +475,27 @@ int kvm_setup_cpuid(kvm_context_t kvm, int vcpu, int nent,
 	return r;
 }
 
+int kvm_setup_cpuid2(kvm_context_t kvm, int vcpu, int nent,
+		     struct kvm_cpuid_entry2 *entries)
+{
+	struct kvm_cpuid2 *cpuid;
+	int r;
+
+	cpuid = malloc(sizeof(*cpuid) + nent * sizeof(*entries));
+	if (!cpuid)
+		return -ENOMEM;
+
+	cpuid->nent = nent;
+	memcpy(cpuid->entries, entries, nent * sizeof(*entries));
+	r = ioctl(kvm->vcpu_fd[vcpu], KVM_SET_CPUID2, cpuid);
+	if (r == -1) {
+		fprintf(stderr, "kvm_setup_cpuid2: %m\n");
+		return -errno;
+	}
+	free(cpuid);
+	return r;
+}
+
 int kvm_set_shadow_pages(kvm_context_t kvm, unsigned int nrshadow_pages)
 {
 #ifdef KVM_CAP_MMU_SHADOW_CACHE_CONTROL
diff --git a/libkvm/libkvm.h b/libkvm/libkvm.h
index ee1ba68..5728b1c 100644
--- a/libkvm/libkvm.h
+++ b/libkvm/libkvm.h
@@ -373,6 +373,22 @@ int kvm_setup_cpuid(kvm_context_t kvm, int vcpu, int nent,
 		    struct kvm_cpuid_entry *entries);
 
 /*!
+ * \brief Setup a vcpu's cpuid instruction emulation
+ *
+ * Set up a table of cpuid function to cpuid outputs.
+ * This call replaces the older kvm_setup_cpuid interface by adding a few
+ * parameters to support cpuid functions that have sub-leaf values.
+ *
+ * \param kvm Pointer to the current kvm_context
+ * \param vcpu Which virtual CPU should be initialized
+ * \param nent number of entries to be installed
+ * \param entries cpuid function entries table
+ * \return 0 on success, or -errno on error
+ */
+int kvm_setup_cpuid2(kvm_context_t kvm, int vcpu, int nent,
+		     struct kvm_cpuid_entry2 *entries);
+
+/*!
  * \brief Setting the number of shadow pages to be allocated to the vm
  *
  * \param kvm pointer to kvm_context
-- 
1.6.0.6


  reply	other threads:[~2009-01-14 16:51 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-14 16:51 Support for cpuid functions with subleaves Amit Shah
2009-01-14 16:51 ` Amit Shah [this message]
2009-01-14 16:51   ` [PATCH] kvm: userspace: Fetch sub-leaf cpuid values for functions 4, 0xb, 0xd Amit Shah
2009-01-15  9:39 ` Support for cpuid functions with subleaves Avi Kivity

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1231951906-28145-2-git-send-email-amit.shah@redhat.com \
    --to=amit.shah@redhat.com \
    --cc=avi@redhat.com \
    --cc=kvm@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.