[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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



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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.