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-devel

[Xen-devel] Re: [PATCH] qemu-xen: Fix PV segfault

To: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
Subject: [Xen-devel] Re: [PATCH] qemu-xen: Fix PV segfault
From: Kevin Wolf <kwolf@xxxxxxx>
Date: Wed, 02 Jul 2008 13:30:53 +0200
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Wed, 02 Jul 2008 04:33:52 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <18539.22171.11790.948574@xxxxxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <4863E1F6.60909@xxxxxxx> <18538.27111.959001.890654@xxxxxxxxxxxxxxxxxxxxxxxx> <486B3428.5000006@xxxxxxx> <18539.22171.11790.948574@xxxxxxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 2.0.0.12 (X11/20071114)
Ian Jackson schrieb:
> Kevin Wolf writes ("Re: [PATCH] qemu-xen: Fix PV segfault"):
>> Ian Jackson schrieb:
>>> Kevin Wolf writes ("[PATCH] qemu-xen: Fix PV segfault"):
>>>> Don't access cur_cpu with CONFIG_DM, for PV machines it is NULL.
>>> I'm not sure I understand the execution context here properly.  Is
>>> this for blktap ?  It would be better to make cur_cpu be set to some
>>> sensible value.
>> No, this is completely independent of blktap. Currently, PV machines
>> just don't have a virtual cpu in qemu - in contrary to FV machines which
>> call a complete pc_machine.init() during their initialization.
> 
> Evidently this is a configuration I haven't tested.  My PV machines
> don't use a qemu-dm at all.

AFAIK, you automatically get qemu-dm as soon as you use VNC. So this is
probably the most common use case.

While I'm at it: There's another problem with qemu-xen, I can establish
a VNC connection only if I was connected via xm console before. Maybe I
can take a look at this later this week.

> I would very much prefer an answer which didn't make any additional
> changes to vl.c (or other code shared with upstream).  If such changes
> are necessary they should be textually small.  This will make keeping
> us up to date with qemu upstream much easier.

Yes, I couldn't agree more.

Attached is a new version of the patch which creates a dummy CPU for PV
machines. Now it touches no upstream code any more.

Kevin
>From acd73e1af736e0b0e6fe4af234f828b6a572a841 Mon Sep 17 00:00:00 2001
From: Kevin Wolf <kwolf@xxxxxxx>
Date: Wed, 2 Jul 2008 13:23:49 +0200
Subject: [PATCH] qemu-xen: Fix PV segfault

Create a dummy CPU during PV machine initialization. This avoids NULL pointer 
accesses.

Signed-off-by: Kevin Wolf <kwolf@xxxxxxx>
---
 hw/xen_machine_pv.c |    5 ++++-
 i386-dm/helper2.c   |    4 ++++
 2 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/hw/xen_machine_pv.c b/hw/xen_machine_pv.c
index 0fec0aa..e51addb 100644
--- a/hw/xen_machine_pv.c
+++ b/hw/xen_machine_pv.c
@@ -45,13 +45,16 @@ static void xen_init_pv(ram_addr_t ram_size, int 
vga_ram_size,
 {
     struct xenfb *xenfb;
     extern int domid;
-
+    CPUState *env;
 
 #ifndef CONFIG_STUBDOM
     /* Initialize tapdisk client */
     init_blktap();
 #endif
 
+    /* Initialize a dummy CPU */
+    env = cpu_init(NULL);
+
     /* Connect to text console */
     if (serial_hds[0]) {
         if (xencons_init(domid, serial_hds[0]) < 0) {
diff --git a/i386-dm/helper2.c b/i386-dm/helper2.c
index 44bed2b..6437c37 100644
--- a/i386-dm/helper2.c
+++ b/i386-dm/helper2.c
@@ -112,6 +112,10 @@ CPUX86State *cpu_x86_init(const char *cpu_model)
         return NULL;
     cpu_exec_init(env);
 
+    /* There is no shared_page for PV, we're done now */
+    if (shared_page == NULL)
+        return env;
+
     /* init various static tables */
     if (!inited) {
         inited = 1;
-- 
1.5.4.5

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