From c3918e84f7b7e04a512b45127312f8f59f0fe243 Mon Sep 17 00:00:00 2001 From: "iap10@freefall.cl.cam.ac.uk" Date: Thu, 10 Mar 2005 14:27:50 +0000 Subject: [PATCH 1/2] bitkeeper revision 1.1159.258.35 (42305966D0gCjlR6KGQJ4LZR2FIX3g) Fix to xfrd stream handling which was messing up save/restore/migrate on some systems. Signed-off-by: ian@xensource.com --- tools/libxutil/file_stream.c | 26 ++++++++++++++++++-------- tools/xfrd/xfrd.c | 2 ++ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/tools/libxutil/file_stream.c b/tools/libxutil/file_stream.c index 40391f7fa6..b5526d84a1 100644 --- a/tools/libxutil/file_stream.c +++ b/tools/libxutil/file_stream.c @@ -69,18 +69,28 @@ IOStream *iostdout = &_iostdout; /** IOStream for stderr. */ IOStream *iostderr = &_iostderr; -/** Get the underlying FILE*. - * +/* Get the underlying FILE*. + * * @param s file stream * @return the stream s wraps */ static inline FILE *get_file(IOStream *s){ - switch((long)s->data){ - case 1: s->data = stdin; break; - case 2: s->data = stdout; break; - case 3: s->data = stderr; break; - } - return (FILE*)s->data; + FILE *data = NULL; + switch((long)s->data){ + case 1: + data = stdin; + break; + case 2: + data = stdout; + break; + case 3: + data = stderr; + break; + default: + data = (FILE*)s->data; + break; + } + return data; } /** Control buffering on the underlying stream, like setvbuf(). diff --git a/tools/xfrd/xfrd.c b/tools/xfrd/xfrd.c index 656abc0bc4..bd25ad8cd2 100644 --- a/tools/xfrd/xfrd.c +++ b/tools/xfrd/xfrd.c @@ -1007,6 +1007,8 @@ int xfrd_accept(Args *args, int sock){ } iprintf("> Accepted connection from %s:%d on %d\n", inet_ntoa(peer_in.sin_addr), htons(peer_in.sin_port), sock); + fflush(stdout); + fflush(stderr); pid = fork(); if(pid > 0){ // Parent, fork succeeded. From 15f6b230e351fa64b380ca1986724812c5b70a0f Mon Sep 17 00:00:00 2001 From: "iap10@freefall.cl.cam.ac.uk" Date: Thu, 10 Mar 2005 14:35:37 +0000 Subject: [PATCH 2/2] bitkeeper revision 1.1159.258.36 (42305b3948mU75urrgzQftpV3eNPbg) Tidy up ugly warning in debug builds from xc_linux_restore. Signed-off-by: ian@xensource.com --- tools/libxc/xc_linux_restore.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/libxc/xc_linux_restore.c b/tools/libxc/xc_linux_restore.c index 1db39317de..46373a2806 100644 --- a/tools/libxc/xc_linux_restore.c +++ b/tools/libxc/xc_linux_restore.c @@ -123,7 +123,7 @@ int xc_linux_restore(int xc_handle, XcIOContext *ioctxt) /* A temporary mapping of the guest's suspend record. */ suspend_record_t *p_srec; - char *region_base; + char *region_base, *p_gdt; mmu_t *mmu = NULL; @@ -565,6 +565,13 @@ int xc_linux_restore(int xc_handle, XcIOContext *ioctxt) ctxt.gdt_frames[i] = pfn_to_mfn_table[pfn]; } + /* Zero hypervisor GDT entries (supresses ugly warning) */ + p_gdt = xc_map_foreign_range( + xc_handle, dom, PAGE_SIZE, PROT_WRITE, ctxt.gdt_frames[0]); + memset( p_gdt + FIRST_RESERVED_GDT_ENTRY*8, 0, + NR_RESERVED_GDT_ENTRIES*8 ); + munmap( p_gdt, PAGE_SIZE ); + /* Uncanonicalise the page table base pointer. */ pfn = ctxt.pt_base >> PAGE_SHIFT; if ( (pfn >= nr_pfns) || ((pfn_type[pfn]<ABTYPE_MASK) != L2TAB) )