[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] minios: grant table map (gntdev) bug fixes
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1216917290 -3600 # Node ID a47b54fadce49abd773662380f26457ae4b4e7db # Parent fe3db971bfd0638f667d8f5309403205579f28ed minios: grant table map (gntdev) bug fixes * Uninitialized dev_bus_addr argument to GNTTABOP_unmap_grant_ref results in an angry hypervisor. * Set errno in libxc and return -1 on error. * op.status is a int16_t, so it should be printed with PRId16. * Don't print domids[0] or refs[0] if the ptr is NULL. It's more polite to crash later, after the message has been printed. Signed-off-by: Diego Ongaro <diego.ongaro@xxxxxxxxxx> --- extras/mini-os/gntmap.c | 10 ++++++---- tools/libxc/xc_minios.c | 22 +++++++++++++++++----- 2 files changed, 23 insertions(+), 9 deletions(-) diff -r fe3db971bfd0 -r a47b54fadce4 extras/mini-os/gntmap.c --- a/extras/mini-os/gntmap.c Thu Jul 24 17:33:40 2008 +0100 +++ b/extras/mini-os/gntmap.c Thu Jul 24 17:34:50 2008 +0100 @@ -118,7 +118,7 @@ _gntmap_map_grant_ref(struct gntmap_entr rc = HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref, &op, 1); if (rc != 0 || op.status != GNTST_okay) { printk("GNTTABOP_map_grant_ref failed: " - "returned %d, status %d\n", + "returned %d, status %" PRId16 "\n", rc, op.status); return rc != 0 ? rc : op.status; } @@ -135,12 +135,13 @@ _gntmap_unmap_grant_ref(struct gntmap_en int rc; op.host_addr = (uint64_t) entry->host_addr; + op.dev_bus_addr = 0; op.handle = entry->handle; rc = HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, &op, 1); if (rc != 0 || op.status != GNTST_okay) { printk("GNTTABOP_unmap_grant_ref failed: " - "returned %d, status %d\n", + "returned %d, status %" PRId16 "\n", rc, op.status); return rc != 0 ? rc : op.status; } @@ -191,8 +192,9 @@ gntmap_map_grant_refs(struct gntmap *map printk("gntmap_map_grant_refs(map=%p, count=%" PRIu32 ", " "domids=%p [%" PRIu32 "...], domids_stride=%d, " "refs=%p [%" PRIu32 "...], writable=%d)\n", - map, count, domids, domids[0], domids_stride, - refs, refs[0], writable); + map, count, + domids, domids == NULL ? 0 : domids[0], domids_stride, + refs, refs == NULL ? 0 : refs[0], writable); #endif (void) gntmap_set_max_grants(map, DEFAULT_MAX_GRANTS); diff -r fe3db971bfd0 -r a47b54fadce4 tools/libxc/xc_minios.c --- a/tools/libxc/xc_minios.c Thu Jul 24 17:33:40 2008 +0100 +++ b/tools/libxc/xc_minios.c Thu Jul 24 17:34:50 2008 +0100 @@ -383,16 +383,28 @@ int xc_gnttab_munmap(int xcg_handle, void *start_address, uint32_t count) { - return gntmap_munmap(&files[xcg_handle].gntmap, - (unsigned long) start_address, - count); + int ret; + ret = gntmap_munmap(&files[xcg_handle].gntmap, + (unsigned long) start_address, + count); + if (ret < 0) { + errno = -ret; + return -1; + } + return ret; } int xc_gnttab_set_max_grants(int xcg_handle, uint32_t count) { - return gntmap_set_max_grants(&files[xcg_handle].gntmap, - count); + int ret; + ret = gntmap_set_max_grants(&files[xcg_handle].gntmap, + count); + if (ret < 0) { + errno = -ret; + return -1; + } + return ret; } /* _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |