ENODATA doesn't exist on FreeBSD, so ENODATA errors returned by the hypervisor are translated to ENOENT.
Also, the error code is returned in errno if the call returns -1, so compare the error code with the value in errno instead of the value returned by the function. Signed-off-by: Roger Pau Monné <roger....@citrix.com> Cc: xen-de...@lists.xenproject.org Cc: Stefano Stabellini <stefano.stabell...@eu.citrix.com> Cc: Anthony Perard <anthony.per...@citrix.com> --- xen-all.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff --git a/xen-all.c b/xen-all.c index 0b4d934..4026b7b 100644 --- a/xen-all.c +++ b/xen-all.c @@ -499,11 +499,15 @@ static void xen_sync_dirty_bitmap(XenIOState *state, start_addr >> TARGET_PAGE_BITS, npages, bitmap); if (rc < 0) { - if (rc != -ENODATA) { +#ifdef ENODATA + if (errno == ENODATA) { +#else + if (errno == ENOENT) { +#endif memory_region_set_dirty(framebuffer, 0, size); DPRINTF("xen: track_dirty_vram failed (0x" TARGET_FMT_plx ", 0x" TARGET_FMT_plx "): %s\n", - start_addr, start_addr + size, strerror(-rc)); + start_addr, start_addr + size, strerror(errno)); } return; } -- 1.7.7.5 (Apple Git-26)