[libdrm] Restart all ioctls on signal receipt
authorKeith Packard <keithp@keithp.com>
Fri, 13 Jun 2008 23:03:22 +0000 (16:03 -0700)
committerKeith Packard <keithp@keithp.com>
Fri, 13 Jun 2008 23:03:22 +0000 (16:03 -0700)
Receiving a signal should be ignored by the library, so just restart any
ioctl which returns EINTR or EAGAIN.

libdrm/xf86drm.c

index 0383b6b..edb0c90 100644 (file)
@@ -171,6 +171,19 @@ static char *drmStrdup(const char *s)
     return retval;
 }
 
+/**
+ * Call ioctl, restarting if it is interupted
+ */
+static int
+drmIoctl(int fd, int request, void *arg)
+{
+    int        ret;
+
+    do {
+       ret = ioctl(fd, request, arg);
+    } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
+    return ret;
+}
 
 static unsigned long drmGetKeyFromFd(int fd)
 {
@@ -668,7 +681,7 @@ drmVersionPtr drmGetVersion(int fd)
     version->desc_len    = 0;
     version->desc        = NULL;
 
-    if (ioctl(fd, DRM_IOCTL_VERSION, version)) {
+    if (drmIoctl(fd, DRM_IOCTL_VERSION, version)) {
        drmFreeKernelVersion(version);
        return NULL;
     }
@@ -680,7 +693,7 @@ drmVersionPtr drmGetVersion(int fd)
     if (version->desc_len)
        version->desc    = drmMalloc(version->desc_len + 1);
 
-    if (ioctl(fd, DRM_IOCTL_VERSION, version)) {
+    if (drmIoctl(fd, DRM_IOCTL_VERSION, version)) {
        drmMsg("DRM_IOCTL_VERSION: %s\n", strerror(errno));
        drmFreeKernelVersion(version);
        return NULL;
@@ -766,10 +779,10 @@ char *drmGetBusid(int fd)
     u.unique_len = 0;
     u.unique     = NULL;
 
-    if (ioctl(fd, DRM_IOCTL_GET_UNIQUE, &u))
+    if (drmIoctl(fd, DRM_IOCTL_GET_UNIQUE, &u))
        return NULL;
     u.unique = drmMalloc(u.unique_len + 1);
-    if (ioctl(fd, DRM_IOCTL_GET_UNIQUE, &u))
+    if (drmIoctl(fd, DRM_IOCTL_GET_UNIQUE, &u))
        return NULL;
     u.unique[u.unique_len] = '\0';
 
@@ -796,7 +809,7 @@ int drmSetBusid(int fd, const char *busid)
     u.unique     = (char *)busid;
     u.unique_len = strlen(busid);
 
-    if (ioctl(fd, DRM_IOCTL_SET_UNIQUE, &u)) {
+    if (drmIoctl(fd, DRM_IOCTL_SET_UNIQUE, &u)) {
        return -errno;
     }
     return 0;
@@ -807,7 +820,7 @@ int drmGetMagic(int fd, drm_magic_t * magic)
     drm_auth_t auth;
 
     *magic = 0;
-    if (ioctl(fd, DRM_IOCTL_GET_MAGIC, &auth))
+    if (drmIoctl(fd, DRM_IOCTL_GET_MAGIC, &auth))
        return -errno;
     *magic = auth.magic;
     return 0;
@@ -818,7 +831,7 @@ int drmAuthMagic(int fd, drm_magic_t magic)
     drm_auth_t auth;
 
     auth.magic = magic;
-    if (ioctl(fd, DRM_IOCTL_AUTH_MAGIC, &auth))
+    if (drmIoctl(fd, DRM_IOCTL_AUTH_MAGIC, &auth))
        return -errno;
     return 0;
 }
@@ -883,7 +896,7 @@ int drmAddMap(int fd, drm_handle_t offset, drmSize size, drmMapType type,
     map.handle  = 0;
     map.type    = type;
     map.flags   = flags;
-    if (ioctl(fd, DRM_IOCTL_ADD_MAP, &map))
+    if (drmIoctl(fd, DRM_IOCTL_ADD_MAP, &map))
        return -errno;
     if (handle)
        *handle = (drm_handle_t)map.handle;
@@ -896,7 +909,7 @@ int drmRmMap(int fd, drm_handle_t handle)
 
     map.handle = (void *)handle;
 
-    if(ioctl(fd, DRM_IOCTL_RM_MAP, &map))
+    if(drmIoctl(fd, DRM_IOCTL_RM_MAP, &map))
        return -errno;
     return 0;
 }
@@ -929,7 +942,7 @@ int drmAddBufs(int fd, int count, int size, drmBufDescFlags flags,
     request.flags     = flags;
     request.agp_start = agp_offset;
 
-    if (ioctl(fd, DRM_IOCTL_ADD_BUFS, &request))
+    if (drmIoctl(fd, DRM_IOCTL_ADD_BUFS, &request))
        return -errno;
     return request.count;
 }
@@ -942,7 +955,7 @@ int drmMarkBufs(int fd, double low, double high)
     info.count = 0;
     info.list  = NULL;
 
-    if (ioctl(fd, DRM_IOCTL_INFO_BUFS, &info))
+    if (drmIoctl(fd, DRM_IOCTL_INFO_BUFS, &info))
        return -EINVAL;
 
     if (!info.count)
@@ -951,7 +964,7 @@ int drmMarkBufs(int fd, double low, double high)
     if (!(info.list = drmMalloc(info.count * sizeof(*info.list))))
        return -ENOMEM;
 
-    if (ioctl(fd, DRM_IOCTL_INFO_BUFS, &info)) {
+    if (drmIoctl(fd, DRM_IOCTL_INFO_BUFS, &info)) {
        int retval = -errno;
        drmFree(info.list);
        return retval;
@@ -960,7 +973,7 @@ int drmMarkBufs(int fd, double low, double high)
     for (i = 0; i < info.count; i++) {
        info.list[i].low_mark  = low  * info.list[i].count;
        info.list[i].high_mark = high * info.list[i].count;
-       if (ioctl(fd, DRM_IOCTL_MARK_BUFS, &info.list[i])) {
+       if (drmIoctl(fd, DRM_IOCTL_MARK_BUFS, &info.list[i])) {
            int retval = -errno;
            drmFree(info.list);
            return retval;
@@ -992,7 +1005,7 @@ int drmFreeBufs(int fd, int count, int *list)
 
     request.count = count;
     request.list  = list;
-    if (ioctl(fd, DRM_IOCTL_FREE_BUFS, &request))
+    if (drmIoctl(fd, DRM_IOCTL_FREE_BUFS, &request))
        return -errno;
     return 0;
 }
@@ -1081,14 +1094,14 @@ drmBufInfoPtr drmGetBufInfo(int fd)
     info.count = 0;
     info.list  = NULL;
 
-    if (ioctl(fd, DRM_IOCTL_INFO_BUFS, &info))
+    if (drmIoctl(fd, DRM_IOCTL_INFO_BUFS, &info))
        return NULL;
 
     if (info.count) {
        if (!(info.list = drmMalloc(info.count * sizeof(*info.list))))
            return NULL;
 
-       if (ioctl(fd, DRM_IOCTL_INFO_BUFS, &info)) {
+       if (drmIoctl(fd, DRM_IOCTL_INFO_BUFS, &info)) {
            drmFree(info.list);
            return NULL;
        }
@@ -1132,7 +1145,7 @@ drmBufMapPtr drmMapBufs(int fd)
     bufs.count = 0;
     bufs.list  = NULL;
     bufs.virtual = NULL;
-    if (ioctl(fd, DRM_IOCTL_MAP_BUFS, &bufs))
+    if (drmIoctl(fd, DRM_IOCTL_MAP_BUFS, &bufs))
        return NULL;
 
     if (!bufs.count)
@@ -1141,7 +1154,7 @@ drmBufMapPtr drmMapBufs(int fd)
        if (!(bufs.list = drmMalloc(bufs.count * sizeof(*bufs.list))))
            return NULL;
 
-       if (ioctl(fd, DRM_IOCTL_MAP_BUFS, &bufs)) {
+       if (drmIoctl(fd, DRM_IOCTL_MAP_BUFS, &bufs)) {
            drmFree(bufs.list);
            return NULL;
        }
@@ -1256,7 +1269,7 @@ int drmGetLock(int fd, drm_context_t context, drmLockFlags flags)
     if (flags & DRM_HALT_ALL_QUEUES) lock.flags |= _DRM_HALT_ALL_QUEUES;
     if (flags & DRM_HALT_CUR_QUEUES) lock.flags |= _DRM_HALT_CUR_QUEUES;
 
-    while (ioctl(fd, DRM_IOCTL_LOCK, &lock))
+    while (drmIoctl(fd, DRM_IOCTL_LOCK, &lock))
        ;
     return 0;
 }
@@ -1279,7 +1292,7 @@ int drmUnlock(int fd, drm_context_t context)
 
     lock.context = context;
     lock.flags   = 0;
-    return ioctl(fd, DRM_IOCTL_UNLOCK, &lock);
+    return drmIoctl(fd, DRM_IOCTL_UNLOCK, &lock);
 }
 
 drm_context_t *drmGetReservedContextList(int fd, int *count)
@@ -1291,7 +1304,7 @@ drm_context_t *drmGetReservedContextList(int fd, int *count)
 
     res.count    = 0;
     res.contexts = NULL;
-    if (ioctl(fd, DRM_IOCTL_RES_CTX, &res))
+    if (drmIoctl(fd, DRM_IOCTL_RES_CTX, &res))
        return NULL;
 
     if (!res.count)
@@ -1305,7 +1318,7 @@ drm_context_t *drmGetReservedContextList(int fd, int *count)
     }
 
     res.contexts = list;
-    if (ioctl(fd, DRM_IOCTL_RES_CTX, &res))
+    if (drmIoctl(fd, DRM_IOCTL_RES_CTX, &res))
        return NULL;
 
     for (i = 0; i < res.count; i++)
@@ -1344,7 +1357,7 @@ int drmCreateContext(int fd, drm_context_t *handle)
     drm_ctx_t ctx;
 
     ctx.flags = 0;     /* Modified with functions below */
-    if (ioctl(fd, DRM_IOCTL_ADD_CTX, &ctx))
+    if (drmIoctl(fd, DRM_IOCTL_ADD_CTX, &ctx))
        return -errno;
     *handle = ctx.handle;
     return 0;
@@ -1355,7 +1368,7 @@ int drmSwitchToContext(int fd, drm_context_t context)
     drm_ctx_t ctx;
 
     ctx.handle = context;
-    if (ioctl(fd, DRM_IOCTL_SWITCH_CTX, &ctx))
+    if (drmIoctl(fd, DRM_IOCTL_SWITCH_CTX, &ctx))
        return -errno;
     return 0;
 }
@@ -1376,7 +1389,7 @@ int drmSetContextFlags(int fd, drm_context_t context, drm_context_tFlags flags)
        ctx.flags |= _DRM_CONTEXT_PRESERVED;
     if (flags & DRM_CONTEXT_2DONLY)
        ctx.flags |= _DRM_CONTEXT_2DONLY;
-    if (ioctl(fd, DRM_IOCTL_MOD_CTX, &ctx))
+    if (drmIoctl(fd, DRM_IOCTL_MOD_CTX, &ctx))
        return -errno;
     return 0;
 }
@@ -1387,7 +1400,7 @@ int drmGetContextFlags(int fd, drm_context_t context,
     drm_ctx_t ctx;
 
     ctx.handle = context;
-    if (ioctl(fd, DRM_IOCTL_GET_CTX, &ctx))
+    if (drmIoctl(fd, DRM_IOCTL_GET_CTX, &ctx))
        return -errno;
     *flags = 0;
     if (ctx.flags & _DRM_CONTEXT_PRESERVED)
@@ -1418,7 +1431,7 @@ int drmDestroyContext(int fd, drm_context_t handle)
 {
     drm_ctx_t ctx;
     ctx.handle = handle;
-    if (ioctl(fd, DRM_IOCTL_RM_CTX, &ctx))
+    if (drmIoctl(fd, DRM_IOCTL_RM_CTX, &ctx))
        return -errno;
     return 0;
 }
@@ -1426,7 +1439,7 @@ int drmDestroyContext(int fd, drm_context_t handle)
 int drmCreateDrawable(int fd, drm_drawable_t *handle)
 {
     drm_draw_t draw;
-    if (ioctl(fd, DRM_IOCTL_ADD_DRAW, &draw))
+    if (drmIoctl(fd, DRM_IOCTL_ADD_DRAW, &draw))
        return -errno;
     *handle = draw.handle;
     return 0;
@@ -1436,7 +1449,7 @@ int drmDestroyDrawable(int fd, drm_drawable_t handle)
 {
     drm_draw_t draw;
     draw.handle = handle;
-    if (ioctl(fd, DRM_IOCTL_RM_DRAW, &draw))
+    if (drmIoctl(fd, DRM_IOCTL_RM_DRAW, &draw))
        return -errno;
     return 0;
 }
@@ -1452,7 +1465,7 @@ int drmUpdateDrawableInfo(int fd, drm_drawable_t handle,
     update.num = num;
     update.data = (unsigned long long)(unsigned long)data;
 
-    if (ioctl(fd, DRM_IOCTL_UPDATE_DRAW, &update))
+    if (drmIoctl(fd, DRM_IOCTL_UPDATE_DRAW, &update))
        return -errno;
 
     return 0;
@@ -1472,7 +1485,7 @@ int drmUpdateDrawableInfo(int fd, drm_drawable_t handle,
  */
 int drmAgpAcquire(int fd)
 {
-    if (ioctl(fd, DRM_IOCTL_AGP_ACQUIRE, NULL))
+    if (drmIoctl(fd, DRM_IOCTL_AGP_ACQUIRE, NULL))
        return -errno;
     return 0;
 }
@@ -1490,7 +1503,7 @@ int drmAgpAcquire(int fd)
  */
 int drmAgpRelease(int fd)
 {
-    if (ioctl(fd, DRM_IOCTL_AGP_RELEASE, NULL))
+    if (drmIoctl(fd, DRM_IOCTL_AGP_RELEASE, NULL))
        return -errno;
     return 0;
 }
@@ -1513,7 +1526,7 @@ int drmAgpEnable(int fd, unsigned long mode)
     drm_agp_mode_t m;
 
     m.mode = mode;
-    if (ioctl(fd, DRM_IOCTL_AGP_ENABLE, &m))
+    if (drmIoctl(fd, DRM_IOCTL_AGP_ENABLE, &m))
        return -errno;
     return 0;
 }
@@ -1544,7 +1557,7 @@ int drmAgpAlloc(int fd, unsigned long size, unsigned long type,
     b.size   = size;
     b.handle = 0;
     b.type   = type;
-    if (ioctl(fd, DRM_IOCTL_AGP_ALLOC, &b))
+    if (drmIoctl(fd, DRM_IOCTL_AGP_ALLOC, &b))
        return -errno;
     if (address != 0UL)
        *address = b.physical;
@@ -1571,7 +1584,7 @@ int drmAgpFree(int fd, drm_handle_t handle)
 
     b.size   = 0;
     b.handle = handle;
-    if (ioctl(fd, DRM_IOCTL_AGP_FREE, &b))
+    if (drmIoctl(fd, DRM_IOCTL_AGP_FREE, &b))
        return -errno;
     return 0;
 }
@@ -1596,7 +1609,7 @@ int drmAgpBind(int fd, drm_handle_t handle, unsigned long offset)
 
     b.handle = handle;
     b.offset = offset;
-    if (ioctl(fd, DRM_IOCTL_AGP_BIND, &b))
+    if (drmIoctl(fd, DRM_IOCTL_AGP_BIND, &b))
        return -errno;
     return 0;
 }
@@ -1620,7 +1633,7 @@ int drmAgpUnbind(int fd, drm_handle_t handle)
 
     b.handle = handle;
     b.offset = 0;
-    if (ioctl(fd, DRM_IOCTL_AGP_UNBIND, &b))
+    if (drmIoctl(fd, DRM_IOCTL_AGP_UNBIND, &b))
        return -errno;
     return 0;
 }
@@ -1641,7 +1654,7 @@ int drmAgpVersionMajor(int fd)
 {
     drm_agp_info_t i;
 
-    if (ioctl(fd, DRM_IOCTL_AGP_INFO, &i))
+    if (drmIoctl(fd, DRM_IOCTL_AGP_INFO, &i))
        return -errno;
     return i.agp_version_major;
 }
@@ -1662,7 +1675,7 @@ int drmAgpVersionMinor(int fd)
 {
     drm_agp_info_t i;
 
-    if (ioctl(fd, DRM_IOCTL_AGP_INFO, &i))
+    if (drmIoctl(fd, DRM_IOCTL_AGP_INFO, &i))
        return -errno;
     return i.agp_version_minor;
 }
@@ -1683,7 +1696,7 @@ unsigned long drmAgpGetMode(int fd)
 {
     drm_agp_info_t i;
 
-    if (ioctl(fd, DRM_IOCTL_AGP_INFO, &i))
+    if (drmIoctl(fd, DRM_IOCTL_AGP_INFO, &i))
        return 0;
     return i.mode;
 }
@@ -1704,7 +1717,7 @@ unsigned long drmAgpBase(int fd)
 {
     drm_agp_info_t i;
 
-    if (ioctl(fd, DRM_IOCTL_AGP_INFO, &i))
+    if (drmIoctl(fd, DRM_IOCTL_AGP_INFO, &i))
        return 0;
     return i.aperture_base;
 }
@@ -1725,7 +1738,7 @@ unsigned long drmAgpSize(int fd)
 {
     drm_agp_info_t i;
 
-    if (ioctl(fd, DRM_IOCTL_AGP_INFO, &i))
+    if (drmIoctl(fd, DRM_IOCTL_AGP_INFO, &i))
        return 0;
     return i.aperture_size;
 }
@@ -1746,7 +1759,7 @@ unsigned long drmAgpMemoryUsed(int fd)
 {
     drm_agp_info_t i;
 
-    if (ioctl(fd, DRM_IOCTL_AGP_INFO, &i))
+    if (drmIoctl(fd, DRM_IOCTL_AGP_INFO, &i))
        return 0;
     return i.memory_used;
 }
@@ -1767,7 +1780,7 @@ unsigned long drmAgpMemoryAvail(int fd)
 {
     drm_agp_info_t i;
 
-    if (ioctl(fd, DRM_IOCTL_AGP_INFO, &i))
+    if (drmIoctl(fd, DRM_IOCTL_AGP_INFO, &i))
        return 0;
     return i.memory_allowed;
 }
@@ -1788,7 +1801,7 @@ unsigned int drmAgpVendorId(int fd)
 {
     drm_agp_info_t i;
 
-    if (ioctl(fd, DRM_IOCTL_AGP_INFO, &i))
+    if (drmIoctl(fd, DRM_IOCTL_AGP_INFO, &i))
        return 0;
     return i.id_vendor;
 }
@@ -1809,7 +1822,7 @@ unsigned int drmAgpDeviceId(int fd)
 {
     drm_agp_info_t i;
 
-    if (ioctl(fd, DRM_IOCTL_AGP_INFO, &i))
+    if (drmIoctl(fd, DRM_IOCTL_AGP_INFO, &i))
        return 0;
     return i.id_device;
 }
@@ -1821,7 +1834,7 @@ int drmScatterGatherAlloc(int fd, unsigned long size, drm_handle_t *handle)
     *handle = 0;
     sg.size   = size;
     sg.handle = 0;
-    if (ioctl(fd, DRM_IOCTL_SG_ALLOC, &sg))
+    if (drmIoctl(fd, DRM_IOCTL_SG_ALLOC, &sg))
        return -errno;
     *handle = sg.handle;
     return 0;
@@ -1833,7 +1846,7 @@ int drmScatterGatherFree(int fd, drm_handle_t handle)
 
     sg.size   = 0;
     sg.handle = handle;
-    if (ioctl(fd, DRM_IOCTL_SG_FREE, &sg))
+    if (drmIoctl(fd, DRM_IOCTL_SG_FREE, &sg))
        return -errno;
     return 0;
 }
@@ -1854,7 +1867,7 @@ int drmWaitVBlank(int fd, drmVBlankPtr vbl)
     int ret;
 
     do {
-       ret = ioctl(fd, DRM_IOCTL_WAIT_VBLANK, vbl);
+       ret = drmIoctl(fd, DRM_IOCTL_WAIT_VBLANK, vbl);
        vbl->request.type &= ~DRM_VBLANK_RELATIVE;
     } while (ret && errno == EINTR);
 
@@ -1904,7 +1917,7 @@ int drmCtlInstHandler(int fd, int irq)
 
     ctl.func  = DRM_INST_HANDLER;
     ctl.irq   = irq;
-    if (ioctl(fd, DRM_IOCTL_CONTROL, &ctl))
+    if (drmIoctl(fd, DRM_IOCTL_CONTROL, &ctl))
        return -errno;
     return 0;
 }
@@ -1927,7 +1940,7 @@ int drmCtlUninstHandler(int fd)
 
     ctl.func  = DRM_UNINST_HANDLER;
     ctl.irq   = 0;
-    if (ioctl(fd, DRM_IOCTL_CONTROL, &ctl))
+    if (drmIoctl(fd, DRM_IOCTL_CONTROL, &ctl))
        return -errno;
     return 0;
 }
@@ -1944,7 +1957,7 @@ int drmFinish(int fd, int context, drmLockFlags flags)
     if (flags & DRM_LOCK_FLUSH_ALL)  lock.flags |= _DRM_LOCK_FLUSH_ALL;
     if (flags & DRM_HALT_ALL_QUEUES) lock.flags |= _DRM_HALT_ALL_QUEUES;
     if (flags & DRM_HALT_CUR_QUEUES) lock.flags |= _DRM_HALT_CUR_QUEUES;
-    if (ioctl(fd, DRM_IOCTL_FINISH, &lock))
+    if (drmIoctl(fd, DRM_IOCTL_FINISH, &lock))
        return -errno;
     return 0;
 }
@@ -1970,7 +1983,7 @@ int drmGetInterruptFromBusID(int fd, int busnum, int devnum, int funcnum)
     p.busnum  = busnum;
     p.devnum  = devnum;
     p.funcnum = funcnum;
-    if (ioctl(fd, DRM_IOCTL_IRQ_BUSID, &p))
+    if (drmIoctl(fd, DRM_IOCTL_IRQ_BUSID, &p))
        return -errno;
     return p.irq;
 }
@@ -2012,7 +2025,7 @@ int drmAddContextPrivateMapping(int fd, drm_context_t ctx_id,
     map.ctx_id = ctx_id;
     map.handle = (void *)handle;
 
-    if (ioctl(fd, DRM_IOCTL_SET_SAREA_CTX, &map))
+    if (drmIoctl(fd, DRM_IOCTL_SET_SAREA_CTX, &map))
        return -errno;
     return 0;
 }
@@ -2024,7 +2037,7 @@ int drmGetContextPrivateMapping(int fd, drm_context_t ctx_id,
 
     map.ctx_id = ctx_id;
 
-    if (ioctl(fd, DRM_IOCTL_GET_SAREA_CTX, &map))
+    if (drmIoctl(fd, DRM_IOCTL_GET_SAREA_CTX, &map))
        return -errno;
     if (handle)
        *handle = (drm_handle_t)map.handle;
@@ -2039,7 +2052,7 @@ int drmGetMap(int fd, int idx, drm_handle_t *offset, drmSize *size,
     drm_map_t map;
 
     map.offset = idx;
-    if (ioctl(fd, DRM_IOCTL_GET_MAP, &map))
+    if (drmIoctl(fd, DRM_IOCTL_GET_MAP, &map))
        return -errno;
     *offset = map.offset;
     *size   = map.size;
@@ -2056,7 +2069,7 @@ int drmGetClient(int fd, int idx, int *auth, int *pid, int *uid,
     drm_client_t client;
 
     client.idx = idx;
-    if (ioctl(fd, DRM_IOCTL_GET_CLIENT, &client))
+    if (drmIoctl(fd, DRM_IOCTL_GET_CLIENT, &client))
        return -errno;
     *auth      = client.auth;
     *pid       = client.pid;
@@ -2071,7 +2084,7 @@ int drmGetStats(int fd, drmStatsT *stats)
     drm_stats_t s;
     int         i;
 
-    if (ioctl(fd, DRM_IOCTL_GET_STATS, &s))
+    if (drmIoctl(fd, DRM_IOCTL_GET_STATS, &s))
        return -errno;
 
     stats->count = 0;
@@ -2213,7 +2226,7 @@ int drmSetInterfaceVersion(int fd, drmSetVersion *version)
     sv.drm_dd_major = version->drm_dd_major;
     sv.drm_dd_minor = version->drm_dd_minor;
 
-    if (ioctl(fd, DRM_IOCTL_SET_VERSION, &sv)) {
+    if (drmIoctl(fd, DRM_IOCTL_SET_VERSION, &sv)) {
        retcode = -errno;
     }
 
@@ -2244,7 +2257,7 @@ int drmCommandNone(int fd, unsigned long drmCommandIndex)
 
     request = DRM_IO( DRM_COMMAND_BASE + drmCommandIndex);
 
-    if (ioctl(fd, request, data)) {
+    if (drmIoctl(fd, request, data)) {
        return -errno;
     }
     return 0;
@@ -2273,7 +2286,7 @@ int drmCommandRead(int fd, unsigned long drmCommandIndex, void *data,
     request = DRM_IOC( DRM_IOC_READ, DRM_IOCTL_BASE, 
        DRM_COMMAND_BASE + drmCommandIndex, size);
 
-    if (ioctl(fd, request, data)) {
+    if (drmIoctl(fd, request, data)) {
        return -errno;
     }
     return 0;
@@ -2302,7 +2315,7 @@ int drmCommandWrite(int fd, unsigned long drmCommandIndex, void *data,
     request = DRM_IOC( DRM_IOC_WRITE, DRM_IOCTL_BASE, 
        DRM_COMMAND_BASE + drmCommandIndex, size);
 
-    if (ioctl(fd, request, data)) {
+    if (drmIoctl(fd, request, data)) {
        return -errno;
     }
     return 0;
@@ -2331,9 +2344,8 @@ int drmCommandWriteRead(int fd, unsigned long drmCommandIndex, void *data,
     request = DRM_IOC( DRM_IOC_READ|DRM_IOC_WRITE, DRM_IOCTL_BASE, 
        DRM_COMMAND_BASE + drmCommandIndex, size);
 
-    if (ioctl(fd, request, data)) {
+    if (drmIoctl(fd, request, data))
        return -errno;
-    }
     return 0;
 }
 
@@ -2355,7 +2367,7 @@ int drmFenceCreate(int fd, unsigned flags, int fence_class, unsigned type,
     arg.type = type;
     arg.fence_class = fence_class;
 
-    if (ioctl(fd, DRM_IOCTL_FENCE_CREATE, &arg))
+    if (drmIoctl(fd, DRM_IOCTL_FENCE_CREATE, &arg))
        return -errno;
     fence->handle = arg.handle;
     fence->fence_class = arg.fence_class;
@@ -2379,7 +2391,7 @@ int drmFenceBuffers(int fd, unsigned flags, uint32_t fence_class, drmFence *fenc
     arg.flags = flags;
     arg.fence_class = fence_class;
 
-    if (ioctl(fd, DRM_IOCTL_FENCE_BUFFERS, &arg))
+    if (drmIoctl(fd, DRM_IOCTL_FENCE_BUFFERS, &arg))
        return -errno;
     fence->handle = arg.handle;
     fence->fence_class = arg.fence_class;
@@ -2397,7 +2409,7 @@ int drmFenceReference(int fd, unsigned handle, drmFence *fence)
     memset(&arg, 0, sizeof(arg));
     arg.handle = handle;
 
-    if (ioctl(fd, DRM_IOCTL_FENCE_REFERENCE, &arg))
+    if (drmIoctl(fd, DRM_IOCTL_FENCE_REFERENCE, &arg))
        return -errno;
     fence->handle = arg.handle;
     fence->fence_class = arg.fence_class;
@@ -2414,7 +2426,7 @@ int drmFenceUnreference(int fd, const drmFence *fence)
     memset(&arg, 0, sizeof(arg));
     arg.handle = fence->handle;
 
-    if (ioctl(fd, DRM_IOCTL_FENCE_UNREFERENCE, &arg))
+    if (drmIoctl(fd, DRM_IOCTL_FENCE_UNREFERENCE, &arg))
        return -errno;
     return 0;
 }
@@ -2427,7 +2439,7 @@ int drmFenceFlush(int fd, drmFence *fence, unsigned flush_type)
     arg.handle = fence->handle;
     arg.type = flush_type;
 
-    if (ioctl(fd, DRM_IOCTL_FENCE_FLUSH, &arg))
+    if (drmIoctl(fd, DRM_IOCTL_FENCE_FLUSH, &arg))
        return -errno;
     fence->fence_class = arg.fence_class;
     fence->type = arg.type;
@@ -2442,7 +2454,7 @@ int drmFenceUpdate(int fd, drmFence *fence)
     memset(&arg, 0, sizeof(arg));
     arg.handle = fence->handle;
 
-    if (ioctl(fd, DRM_IOCTL_FENCE_SIGNALED, &arg))
+    if (drmIoctl(fd, DRM_IOCTL_FENCE_SIGNALED, &arg))
        return -errno;
     fence->fence_class = arg.fence_class;
     fence->type = arg.type;
@@ -2482,7 +2494,7 @@ int drmFenceEmit(int fd, unsigned flags, drmFence *fence, unsigned emit_type)
     arg.handle = fence->handle;
     arg.type = emit_type;
 
-    if (ioctl(fd, DRM_IOCTL_FENCE_EMIT, &arg))
+    if (drmIoctl(fd, DRM_IOCTL_FENCE_EMIT, &arg))
        return -errno;
     fence->fence_class = arg.fence_class;
     fence->type = arg.type;
@@ -2520,7 +2532,7 @@ drmIoctlTimeout(int fd, unsigned long request, void *argp)
     int ret;
 
     do {
-       ret = ioctl(fd, request, argp);
+       ret = drmIoctl(fd, request, argp);
        if (ret != 0 && errno == EAGAIN) {
            if (!haveThen) {
                gettimeofday(&then, NULL);
@@ -2630,7 +2642,7 @@ int drmBOReference(int fd, unsigned handle, drmBO *buf)
     memset(&arg, 0, sizeof(arg));
     req->handle = handle;
     
-    if (ioctl(fd, DRM_IOCTL_BO_REFERENCE, &arg))
+    if (drmIoctl(fd, DRM_IOCTL_BO_REFERENCE, &arg))
        return -errno;
 
     drmBOCopyReply(rep, buf);
@@ -2654,7 +2666,7 @@ int drmBOUnreference(int fd, drmBO *buf)
     memset(&arg, 0, sizeof(arg));
     arg.handle = buf->handle;
 
-    if (ioctl(fd, DRM_IOCTL_BO_UNREFERENCE, &arg))
+    if (drmIoctl(fd, DRM_IOCTL_BO_UNREFERENCE, &arg))
        return -errno;
 
     buf->handle = 0;
@@ -2724,7 +2736,7 @@ int drmBOUnmap(int fd, drmBO *buf)
     memset(&arg, 0, sizeof(arg));
     arg.handle = buf->handle;
 
-    if (ioctl(fd, DRM_IOCTL_BO_UNMAP, &arg)) {
+    if (drmIoctl(fd, DRM_IOCTL_BO_UNMAP, &arg)) {
        return -errno;
     }
     buf->mapCount--;
@@ -2770,7 +2782,7 @@ int drmBOInfo(int fd, drmBO *buf)
     memset(&arg, 0, sizeof(arg));
     req->handle = buf->handle;
 
-    ret = ioctl(fd, DRM_IOCTL_BO_INFO, &arg);
+    ret = drmIoctl(fd, DRM_IOCTL_BO_INFO, &arg);
     if (ret) 
        return -errno;
 
@@ -2825,7 +2837,7 @@ int drmMMInit(int fd, unsigned long pOffset, unsigned long pSize,
     arg.p_size = pSize;
     arg.mem_type = memType;
 
-    if (ioctl(fd, DRM_IOCTL_MM_INIT, &arg))
+    if (drmIoctl(fd, DRM_IOCTL_MM_INIT, &arg))
        return -errno;
     return 0;  
 }
@@ -2837,7 +2849,7 @@ int drmMMTakedown(int fd, unsigned memType)
     memset(&arg, 0, sizeof(arg));
     arg.mem_type = memType;
 
-    if (ioctl(fd, DRM_IOCTL_MM_TAKEDOWN, &arg))
+    if (drmIoctl(fd, DRM_IOCTL_MM_TAKEDOWN, &arg))
        return -errno;
     return 0;  
 }
@@ -2879,7 +2891,7 @@ int drmMMInfo(int fd, unsigned memType, uint64_t *size)
     
     arg.mem_type = memType;
 
-    if (ioctl(fd, DRM_IOCTL_MM_INFO, &arg))
+    if (drmIoctl(fd, DRM_IOCTL_MM_INFO, &arg))
        return -errno;
 
     *size = arg.p_size;
@@ -2894,7 +2906,7 @@ int drmBOVersion(int fd, unsigned int *major,
     int ret;
 
     memset(&arg, 0, sizeof(arg));
-    ret = ioctl(fd, DRM_IOCTL_BO_VERSION, &arg);
+    ret = drmIoctl(fd, DRM_IOCTL_BO_VERSION, &arg);
     if (ret)
        return -errno;