[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] Revert 11475:11645dda144c3c8365dd2a6a64cb5a7d7da01170
# HG changeset patch # User kfraser@xxxxxxxxxxxxxxxxxxxxx # Node ID ef3a08ab559fe385305b4dfd63122d26767ee870 # Parent dc9fa4dcd19ce206889674ab4d7d62190d4fe216 Revert 11475:11645dda144c3c8365dd2a6a64cb5a7d7da01170 Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> --- tools/libxc/xc_core.c | 71 +++++++++++--------------------------------------- tools/libxc/xenctrl.h | 2 - 2 files changed, 18 insertions(+), 55 deletions(-) diff -r dc9fa4dcd19c -r ef3a08ab559f tools/libxc/xc_core.c --- a/tools/libxc/xc_core.c Mon Sep 18 14:15:03 2006 +0100 +++ b/tools/libxc/xc_core.c Mon Sep 18 14:25:26 2006 +0100 @@ -5,12 +5,6 @@ /* number of pages to write at a time */ #define DUMP_INCREMENT (4 * 1024) #define round_pgup(_p) (((_p)+(PAGE_SIZE-1))&PAGE_MASK) - -/* Callback args for writing to a local dump file. */ -struct dump_args { - int fd; - int incomp_fd; -}; static int copy_from_domain_page(int xc_handle, @@ -33,7 +27,7 @@ xc_domain_dumpcore_via_callback(int xc_h void *args, dumpcore_rtn_t dump_rtn) { - unsigned long n, nr_pages; + unsigned long nr_pages; xen_pfn_t *page_array = NULL; xc_dominfo_t info; int i, nr_vcpus = 0; @@ -43,12 +37,6 @@ xc_domain_dumpcore_via_callback(int xc_h char dummy[PAGE_SIZE]; int dummy_len; int sts; - unsigned int cpy_err_cnt = 0; - struct dump_args *da = args; - int fd = da->fd; - int incomp_fd = da->incomp_fd; - char cpy_err_mesg[64]; - int mesg_bytes; if ( (dump_mem_start = malloc(DUMP_INCREMENT*PAGE_SIZE)) == NULL ) { @@ -85,11 +73,11 @@ xc_domain_dumpcore_via_callback(int xc_h (nr_pages * sizeof(xen_pfn_t))); header.xch_pages_offset = round_pgup(dummy_len); - sts = dump_rtn(fd, (char *)&header, sizeof(struct xc_core_header)); + sts = dump_rtn(args, (char *)&header, sizeof(struct xc_core_header)); if ( sts != 0 ) goto error_out; - sts = dump_rtn(fd, (char *)&ctxt, sizeof(ctxt[0]) * nr_vcpus); + sts = dump_rtn(args, (char *)&ctxt, sizeof(ctxt[0]) * nr_vcpus); if ( sts != 0 ) goto error_out; @@ -103,39 +91,27 @@ xc_domain_dumpcore_via_callback(int xc_h IPRINTF("Could not get the page frame list\n"); goto error_out; } - sts = dump_rtn(fd, (char *)page_array, nr_pages * sizeof(xen_pfn_t)); + sts = dump_rtn(args, (char *)page_array, nr_pages * sizeof(xen_pfn_t)); if ( sts != 0 ) goto error_out; /* Pad the output data to page alignment. */ memset(dummy, 0, PAGE_SIZE); - sts = dump_rtn(fd, dummy, header.xch_pages_offset - dummy_len); + sts = dump_rtn(args, dummy, header.xch_pages_offset - dummy_len); if ( sts != 0 ) goto error_out; - for ( dump_mem = dump_mem_start, n = 0; n < nr_pages; n++ ) + for ( dump_mem = dump_mem_start, i = 0; i < nr_pages; i++ ) { - sts = copy_from_domain_page(xc_handle, domid, page_array[i], dump_mem); - if( sts != 0 ){ - memset(dump_mem, 0, PAGE_SIZE); - cpy_err_cnt++; - memset(cpy_err_mesg, 0, sizeof(cpy_err_mesg)); - mesg_bytes = sprintf(cpy_err_mesg, "Cannot copy_from_domain_page (%lu)\n", n); - dump_rtn(incomp_fd, (char *)cpy_err_mesg, mesg_bytes); - } - + copy_from_domain_page(xc_handle, domid, page_array[i], dump_mem); dump_mem += PAGE_SIZE; - if ( ((n + 1) % DUMP_INCREMENT == 0) || ((n + 1) == nr_pages) ) + if ( ((i + 1) % DUMP_INCREMENT == 0) || ((i + 1) == nr_pages) ) { - sts = dump_rtn(fd, dump_mem_start, dump_mem - dump_mem_start); + sts = dump_rtn(args, dump_mem_start, dump_mem - dump_mem_start); if ( sts != 0 ) goto error_out; dump_mem = dump_mem_start; } - } - if( cpy_err_cnt != 0 ){ - IPRINTF("Could not copy from domid=%d (%d)pages\n", domid, cpy_err_cnt); - goto error_out; } free(dump_mem_start); @@ -148,14 +124,20 @@ xc_domain_dumpcore_via_callback(int xc_h return -1; } +/* Callback args for writing to a local dump file. */ +struct dump_args { + int fd; +}; + /* Callback routine for writing to a local dump file. */ -static int local_file_dump(int fd, char *buffer, unsigned int length) +static int local_file_dump(void *args, char *buffer, unsigned int length) { + struct dump_args *da = args; int bytes, offset; for ( offset = 0; offset < length; offset += bytes ) { - bytes = write(fd, &buffer[offset], length-offset); + bytes = write(da->fd, &buffer[offset], length-offset); if ( bytes <= 0 ) { PERROR("Failed to write buffer: %s", strerror(errno)); @@ -172,7 +154,6 @@ xc_domain_dumpcore(int xc_handle, const char *corename) { struct dump_args da; - char *incomp_file; int sts; if ( (da.fd = open(corename, O_CREAT|O_RDWR, S_IWUSR|S_IRUSR)) < 0 ) @@ -181,28 +162,10 @@ xc_domain_dumpcore(int xc_handle, return -errno; } - - if ( (incomp_file = (char *)malloc(sizeof(corename) + 12)) == NULL ) - { - PERROR("Could not allocate incomp_file"); - return -errno; - } - - sprintf(incomp_file, "%s-incomp.list", corename); - if ( (da.incomp_fd = open(incomp_file, O_CREAT|O_RDWR, S_IWUSR|S_IRUSR)) < 0 ) - { - PERROR("Could not open corefile %s: %s", incomp_file, strerror(errno)); - return -errno; - } - sts = xc_domain_dumpcore_via_callback( xc_handle, domid, &da, &local_file_dump); close(da.fd); - close(da.incomp_fd); - - if( sts == 0) - unlink(incomp_file); return sts; } diff -r dc9fa4dcd19c -r ef3a08ab559f tools/libxc/xenctrl.h --- a/tools/libxc/xenctrl.h Mon Sep 18 14:15:03 2006 +0100 +++ b/tools/libxc/xenctrl.h Mon Sep 18 14:25:26 2006 +0100 @@ -166,7 +166,7 @@ int xc_domain_dumpcore(int xc_handle, * and passes an opaque object for the use of the function and * created by the caller of xc_domain_dumpcore_via_callback. */ -typedef int (dumpcore_rtn_t)(int fd, char *buffer, unsigned int length); +typedef int (dumpcore_rtn_t)(void *arg, char *buffer, unsigned int length); int xc_domain_dumpcore_via_callback(int xc_handle, uint32_t domid, _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |