* Bo locked.
*/
-static void drm_bo_fill_rep_arg(struct drm_buffer_object *bo,
- struct drm_bo_info_rep *rep)
+void drm_bo_fill_rep_arg(struct drm_buffer_object *bo,
+ struct drm_bo_info_rep *rep)
{
if (!rep)
return;
DRM_BO_REP_BUSY);
}
}
+EXPORT_SYMBOL(drm_bo_fill_rep_arg);
/*
* Wait for buffer idle and register that we've mapped the buffer.
unsigned long dst_offset,
unsigned long *pfn,
pgprot_t *prot);
+extern void drm_bo_fill_rep_arg(struct drm_buffer_object *bo,
+ struct drm_bo_info_rep *rep);
/*
struct drm_i915_validate_buffer {
struct drm_buffer_object *buffer;
- struct drm_bo_info_rep rep;
int presumed_offset_correct;
void __user *data;
int ret;
req->bo_req.flags,
req->bo_req.mask, req->bo_req.hint,
req->bo_req.fence_class, 0,
- &item->rep, &item->buffer);
+ NULL, &item->buffer);
if (ret) {
DRM_ERROR("error on handle validate %d\n", ret);
goto out_err;
int err = ret;
int i;
struct drm_i915_op_arg arg;
+ struct drm_buffer_object *bo;
if (ret)
drm_putback_buffer_objects(dev);
for (i = 0; i < num_buffers; ++i) {
arg.handled = 1;
arg.d.rep.ret = buffers->ret;
- arg.d.rep.bo_info = buffers->rep;
+ bo = buffers->buffer;
+ mutex_lock(&bo->mutex);
+ drm_bo_fill_rep_arg(bo, &arg.d.rep.bo_info);
+ mutex_unlock(&bo->mutex);
if (__copy_to_user(buffers->data, &arg, sizeof(arg)))
err = -EFAULT;
buffers++;
fence_arg->handle = ~0;
fence_arg->error = ret;
}
-
drm_putback_buffer_objects(dev);
if (fence_p)
*fence_p = NULL;