diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-07-24 17:34:50 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-07-24 17:34:50 +0100 |
commit | ae41a026ab89f2c8484851d341924e41a0106764 (patch) | |
tree | 2ba6d226a6b92855a8fb0f5e6f1a7b492b4cddc1 /extras/mini-os/gntmap.c | |
parent | b45184b0fc91b9acd1a6683851cefcfce081d93e (diff) | |
download | xen-ae41a026ab89f2c8484851d341924e41a0106764.tar.gz xen-ae41a026ab89f2c8484851d341924e41a0106764.tar.bz2 xen-ae41a026ab89f2c8484851d341924e41a0106764.zip |
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@citrix.com>
Diffstat (limited to 'extras/mini-os/gntmap.c')
-rw-r--r-- | extras/mini-os/gntmap.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/extras/mini-os/gntmap.c b/extras/mini-os/gntmap.c index babb96329e..abbd91ab33 100644 --- a/extras/mini-os/gntmap.c +++ b/extras/mini-os/gntmap.c @@ -118,7 +118,7 @@ _gntmap_map_grant_ref(struct gntmap_entry *entry, 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_entry *entry) 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); |