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

Re: [Xen-devel] [qemu-upstream-4.2-testing test] 16779: regressions - FAIL


--On 5 March 2013 17:10:41 +0000 Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> wrote:

I haven't yet (though possibly from failure to get hold of the relevant
OS version). I'd actually appreciate some code review with the last of
the qemu patches as I was unsure what was meant to be going on (as per
last message to Stefano).

Well, I have reproduced this.  I was hoping to actually debug it but
gdb is having no luck getting a useful stack trce out of
qemu-system-i386, even after I removed a bunch of bizarre compiler
options and rebuilt it.

I can bisect it so that's what I'll do next I guess.

We still can't reproduce this here, but I have recoded that routine to
be more obviously correct, and it also doesn't crash here. I suspect the
problem is that I can't get xc_hvm_track_dirty_vram to fail.

I think this patch makes the routine more obviously correct, and the
problem might be I was not translating through
get_physmapping()->phys_offset on the failure case. This assuming
the success case is correct).

If you can reproduce it, perhaps you'd care to try this. Otherwise,
any comments welcome.

Patch appended below in no-doubt mailer mangled form for context,
but already sent to the list with git send-email under

Message-Id: <1362579002-7981-1-git-send-email-alex@xxxxxxxxxxx>

Alex Bligh

Subject: [PATCH] xen: xen_sync_dirty_bitmap: attempt to fix SEGV
Date: Wed,  6 Mar 2013 14:10:02 +0000
Message-Id: <1362579002-7981-1-git-send-email-alex@xxxxxxxxxxx>
X-Mailer: git-send-email
In-Reply-To: <89D1720972979969F5F2FA5A@xxxxxxxxxxxxx>
References: <89D1720972979969F5F2FA5A@xxxxxxxxxxxxx>

When xc_hvm_track_dirty_vram fails, iterate through pages based on
vram_offset and npages, rather than start_addr and size. DPRINTF
before the loop in the hope of seeing output before SEGV.

Signed-off-by: Alex Bligh <alex@xxxxxxxxxxx>
xen-all.c |   15 +++++++--------
1 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/xen-all.c b/xen-all.c
index dbd759c..96a34a9 100644
--- a/xen-all.c
+++ b/xen-all.c
@@ -472,18 +472,17 @@ static int xen_sync_dirty_bitmap(XenIOState *state,
    if (rc < 0) {
        if (rc != -ENODATA) {
-            ram_addr_t addr, end;
-            xen_modified_memory(start_addr, size);
-            end = TARGET_PAGE_ALIGN(start_addr + size);
-            for (addr = start_addr & TARGET_PAGE_MASK; addr < end; addr += 
-                cpu_physical_memory_set_dirty(addr);
-            }
+            target_phys_addr_t todirty;

            DPRINTF("xen: track_dirty_vram failed (0x" TARGET_FMT_plx
                    ", 0x" TARGET_FMT_plx "): %s\n",
                    start_addr, start_addr + size, strerror(-rc));
+            xen_modified_memory(vram_offset, npages * TARGET_PAGE_SIZE);
+            for (todirty = vram_offset, i=0; i < npages; todirty += 
+                cpu_physical_memory_set_dirty(todirty);
+            }
        return rc;

Xen-devel mailing list



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