WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [qemu-xen-unstable] Extend max vcpu number for HVM guest

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [qemu-xen-unstable] Extend max vcpu number for HVM guest
From: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
Date: Thu, 29 Oct 2009 06:05:24 -0700
Delivery-date: Thu, 29 Oct 2009 06:05:23 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
commit 3140780e451d3919ef2c81f91ae0ebe3f286eb06
Author: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Date:   Thu Oct 29 13:00:31 2009 +0000

    Extend max vcpu number for HVM guest
    
    Reduce size of Xen-qemu shared ioreq structure to 32 bytes. This has two
    advantages:
     1. We can support up to 128 VCPUs with a single shared page
     2. If/when we want to go beyond 128 VCPUs, a whole number of ioreq_t
    structures will pack into a single shared page, so a multi-page array will
    have no ioreq_t straddling a page boundary
    
    Also, while modifying qemu, replace a 32-entry vcpu-indexed array with a
    dynamically-allocated array.
    
    Signed-off-by: Dongxiao Xu <dongxiao.xu@xxxxxxxxx>
    Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 i386-dm/helper2.c |   25 +++++++++++++------------
 1 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/i386-dm/helper2.c b/i386-dm/helper2.c
index 969241f..7fe03b0 100644
--- a/i386-dm/helper2.c
+++ b/i386-dm/helper2.c
@@ -106,8 +106,7 @@ int xce_handle = -1;
 int send_vcpu = 0;
 
 //the evtchn port for polling the notification,
-#define NR_CPUS 32
-evtchn_port_t ioreq_local_port[NR_CPUS];
+evtchn_port_t *ioreq_local_port;
 
 CPUX86State *cpu_x86_init(const char *cpu_model)
 {
@@ -124,6 +123,11 @@ CPUX86State *cpu_x86_init(const char *cpu_model)
     if (shared_page == NULL)
         return env;
 
+    ioreq_local_port = 
+        (evtchn_port_t *)qemu_mallocz(vcpus * sizeof(evtchn_port_t));
+    if (!ioreq_local_port)
+        return NULL;
+
     /* init various static tables */
     if (!inited) {
         inited = 1;
@@ -139,7 +143,7 @@ CPUX86State *cpu_x86_init(const char *cpu_model)
         /* FIXME: how about if we overflow the page here? */
         for (i = 0; i < vcpus; i++) {
             rc = xc_evtchn_bind_interdomain(
-                xce_handle, domid, shared_page->vcpu_iodata[i].vp_eport);
+                xce_handle, domid, shared_page->vcpu_ioreq[i].vp_eport);
             if (rc == -1) {
                 fprintf(logfile, "bind interdomain ioctl error %d\n", errno);
                 return NULL;
@@ -180,6 +184,7 @@ void cpu_reset(CPUX86State *env)
 void cpu_x86_close(CPUX86State *env)
 {
     free(env);
+    free(ioreq_local_port);
 }
 
 
@@ -216,28 +221,24 @@ static void sp_info(void)
     int i;
 
     for (i = 0; i < vcpus; i++) {
-        req = &(shared_page->vcpu_iodata[i].vp_ioreq);
+        req = &shared_page->vcpu_ioreq[i];
         term_printf("vcpu %d: event port %d\n", i, ioreq_local_port[i]);
         term_printf("  req state: %x, ptr: %x, addr: %"PRIx64", "
-                    "data: %"PRIx64", count: %"PRIx64", size: %"PRIx64"\n",
+                    "data: %"PRIx64", count: %u, size: %u\n",
                     req->state, req->data_is_ptr, req->addr,
                     req->data, req->count, req->size);
-        term_printf("  IO totally occurred on this vcpu: %"PRIx64"\n",
-                    req->io_count);
     }
 }
 
 //get the ioreq packets from share mem
 static ioreq_t *__cpu_get_ioreq(int vcpu)
 {
-    ioreq_t *req;
-
-    req = &(shared_page->vcpu_iodata[vcpu].vp_ioreq);
+    ioreq_t *req = &shared_page->vcpu_ioreq[vcpu];
 
     if (req->state != STATE_IOREQ_READY) {
         fprintf(logfile, "I/O request not ready: "
                 "%x, ptr: %x, port: %"PRIx64", "
-                "data: %"PRIx64", count: %"PRIx64", size: %"PRIx64"\n",
+                "data: %"PRIx64", count: %u, size: %u\n",
                 req->state, req->data_is_ptr, req->addr,
                 req->data, req->count, req->size);
         return NULL;
@@ -512,7 +513,7 @@ static void cpu_handle_ioreq(void *opaque)
         if (req->state != STATE_IOREQ_INPROCESS) {
             fprintf(logfile, "Badness in I/O request ... not in service?!: "
                     "%x, ptr: %x, port: %"PRIx64", "
-                    "data: %"PRIx64", count: %"PRIx64", size: %"PRIx64"\n",
+                    "data: %"PRIx64", count: %u, size: %u\n",
                     req->state, req->data_is_ptr, req->addr,
                     req->data, req->count, req->size);
             destroy_hvm_domain();
--
generated by git-patchbot for /home/xen/git/qemu-xen-unstable.git

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [qemu-xen-unstable] Extend max vcpu number for HVM guest, Ian Jackson <=