int radeon_gem_set_domain_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) { /* transition the BO to a domain - * just validate the BO into a certain domain */ struct radeon_device *rdev = dev->dev_private; struct drm_radeon_gem_set_domain *args = data; struct drm_gem_object *gobj; struct radeon_bo *robj; int r; /* for now if someone requests domain CPU - * just make sure the buffer is finished with */ sx_slock(&rdev->exclusive_lock); /* just do a BO wait for now */ gobj = drm_gem_object_lookup(dev, filp, args->handle); if (gobj == NULL) { sx_sunlock(&rdev->exclusive_lock); return -ENOENT; } robj = gem_to_radeon_bo(gobj); r = radeon_gem_set_domain(gobj, args->read_domains, args->write_domain); drm_gem_object_unreference_unlocked(gobj); sx_sunlock(&rdev->exclusive_lock); r = radeon_gem_handle_lockup(robj->rdev, r); return r; }
int radeon_gem_set_domain_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) { struct drm_radeon_gem_set_domain *args = data; struct drm_gem_object *gobj; struct radeon_object *robj; int r; gobj = drm_gem_object_lookup(dev, filp, args->handle); if (gobj == NULL) { return -EINVAL; } robj = gobj->driver_private; r = radeon_gem_set_domain(gobj, args->read_domains, args->write_domain); mutex_lock(&dev->struct_mutex); drm_gem_object_unreference(gobj); mutex_unlock(&dev->struct_mutex); return r; }