diff options
author | Alon Levy <alevy@redhat.com> | 2012-07-23 12:26:15 +0300 |
---|---|---|
committer | Alon Levy <alevy@redhat.com> | 2012-07-23 13:11:02 +0300 |
commit | 8ffb831f32ea205db6a7063a9ae2a242a8dceb96 (patch) | |
tree | 2175152a72f5c35f332a303c0f713ed3ec134445 | |
parent | ac807dc3b58905c48c457123b8df96766ce5aaa3 (diff) |
f94111d5f9538474a00694806b2490d66f2d0b3b
handles became 32 bit. added some missing includes.
-rw-r--r-- | drivers/gpu/drm/qxl/qxl_kms.c | 13 | ||||
-rw-r--r-- | include/drm/qxl_drm.h | 30 |
2 files changed, 24 insertions, 19 deletions
diff --git a/drivers/gpu/drm/qxl/qxl_kms.c b/drivers/gpu/drm/qxl/qxl_kms.c index 410fc9239e0..eb2b25dcc10 100644 --- a/drivers/gpu/drm/qxl/qxl_kms.c +++ b/drivers/gpu/drm/qxl/qxl_kms.c @@ -285,7 +285,7 @@ int qxl_incref_ioctl(struct drm_device *dev, void *data, gobj = drm_gem_object_lookup(dev, file_priv, incref->handle); /* this takes a reference */ if (!gobj) { - DRM_ERROR("%s: invalid handle %llu\n", __FUNCTION__, incref->handle); + DRM_ERROR("%s: invalid handle %u\n", __FUNCTION__, incref->handle); return -EINVAL; } return 0; @@ -299,7 +299,7 @@ int qxl_decref_ioctl(struct drm_device *dev, void *data, gobj = drm_gem_object_lookup(dev, file_priv, decref->handle); if (!gobj) { - DRM_ERROR("%s: invalid handle %llu\n", __FUNCTION__, decref->handle); + DRM_ERROR("%s: invalid handle %u\n", __FUNCTION__, decref->handle); return -EINVAL; } drm_gem_object_unreference_unlocked(gobj); /* remove reference taken by lookup */ @@ -313,7 +313,7 @@ int qxl_map_ioctl(struct drm_device *dev, void *data, struct qxl_device *qdev = dev->dev_private; struct drm_qxl_map *qxl_map = data; - DRM_INFO("%s: handle in %lld\n", __func__, qxl_map->handle); + DRM_INFO("%s: handle in %d\n", __func__, qxl_map->handle); return qxl_mode_dumb_mmap(file_priv, qdev->ddev, qxl_map->handle, &qxl_map->offset); } @@ -379,10 +379,11 @@ int qxl_execbuffer_ioctl(struct drm_device *dev, void *data, for (cmd_num = 0; cmd_num < execbuffer->commands_num; ++cmd_num) { struct drm_qxl_release *release; struct qxl_bo *cmd_bo; + struct drm_qxl_command *commands = + (struct drm_qxl_command *)execbuffer->commands; - if (DRM_COPY_FROM_USER(&user_cmd, - &execbuffer->commands[cmd_num], - sizeof(user_cmd))) + if (DRM_COPY_FROM_USER(&user_cmd, &commands[cmd_num], + sizeof(user_cmd))) return -EFAULT; if (user_cmd.type != QXL_CMD_DRAW) { // actual difference is just which ring to push it to. diff --git a/include/drm/qxl_drm.h b/include/drm/qxl_drm.h index 64673b52ffa..6a5ea3ee0e3 100644 --- a/include/drm/qxl_drm.h +++ b/include/drm/qxl_drm.h @@ -1,10 +1,14 @@ #ifndef QXL_DRM_H #define QXL_DRM_H +#include <stddef.h> #include "drm.h" /* Please note that modifications to all structs defined here are * subject to backwards-compatibility constraints. + * + * Do not use pointers, use uint64_t instead for 32 bit / 64 bit user/kernel compatibility + * Keep fields aligned to their size */ #define QXL_GEM_DOMAIN_CPU 0 @@ -26,24 +30,24 @@ enum { struct drm_qxl_alloc { uint32_t type; uint32_t size; - uint64_t handle; // 0 is an invalid handle + uint32_t handle; // 0 is an invalid handle }; struct drm_qxl_incref { - uint64_t handle; + uint32_t handle; }; struct drm_qxl_decref { - uint64_t handle; + uint32_t handle; }; struct drm_qxl_map { - uint64_t handle; uint64_t offset; // use for mmap system call + uint32_t handle; }; struct drm_qxl_unmap { - uint64_t handle; + uint32_t handle; }; /* @@ -51,26 +55,26 @@ struct drm_qxl_unmap { * dst_offset) */ struct drm_qxl_reloc { - uint64_t src_handle; // 0 if to command buffer uint64_t src_offset; // offset into src_handle or src buffer - uint64_t dst_handle; // dest handle to compute address from uint64_t dst_offset; // offset in dest handle + uint32_t src_handle; // 0 if to command buffer + uint32_t dst_handle; // dest handle to compute address from }; struct drm_qxl_command { uint32_t type; uint32_t command_size; - uint64_t __user command; /* void * */ + uint64_t __user command; /* void* */ uint32_t relocs_num; - uint64_t __user relocs; /* struct drm_qxl_reloc* */ + uint64_t __user relocs; /* struct drm_qxl_reloc* */ }; /* XXX: call it drm_qxl_commands? */ struct drm_qxl_execbuffer { - uint32_t flags; // for future - uint32_t commands_num; - struct drm_qxl_command __user* commands; - uint8_t spare[16]; // spare for future + uint32_t flags; // for future + uint32_t commands_num; + uint64_t __user commands; /* struct drm_qxl_command* */ + uint8_t spare[16]; /* spare for future */ }; // TODO: why have a seperate mmap and alloc ioctl? also, why not just unmmap on the last |