/* Limit to single framebuffer for now */
if (dev->mode_config.num_fb > 1) {
- spin_unlock(&dev->mode_config.config_lock);
+ mutex_unlock(&dev->mode_config.mutex);
DRM_ERROR("Attempt to add multiple framebuffers failed\n");
return NULL;
}
/* output_set_monitor(output)? */
/* check for output_ignored(output)? */
- spin_lock(&dev->mode_config.config_lock);
+ mutex_lock(&dev->mode_config.mutex);
list_add_tail(&output->head, &dev->mode_config.output_list);
dev->mode_config.num_output++;
- spin_unlock(&dev->mode_config.config_lock);
+ mutex_unlock(&dev->mode_config.mutex);
return output;
list_for_each_entry_safe(mode, t, &output->modes, head)
drm_mode_remove(output, mode);
- spin_lock(&dev->mode_config.config_lock);
+ mutex_lock(&dev->mode_config.mutex);
drm_idr_put(dev, output->id);
list_del(&output->head);
- spin_unlock(&dev->mode_config.config_lock);
+ mutex_unlock(&dev->mode_config.mutex);
kfree(output);
}
EXPORT_SYMBOL(drm_output_destroy);
*/
void drm_mode_config_init(drm_device_t *dev)
{
- spin_lock_init(&dev->mode_config.config_lock);
+ mutex_init(&dev->mode_config.mutex);
INIT_LIST_HEAD(&dev->mode_config.fb_list);
INIT_LIST_HEAD(&dev->mode_config.crtc_list);
INIT_LIST_HEAD(&dev->mode_config.output_list);
struct drm_output *output;
int ret = false;
- spin_lock(&dev->mode_config.config_lock);
+ mutex_lock(&dev->mode_config.mutex);
drm_crtc_probe_output_modes(dev, 2048, 2048);
}
drm_disable_unused_functions(dev);
- spin_unlock(&dev->mode_config.config_lock);
+ mutex_unlock(&dev->mode_config.mutex);
return ret;
}
EXPORT_SYMBOL(drm_initial_config);
memset(&u_mode, 0, sizeof(struct drm_mode_modeinfo));
- spin_lock(&dev->mode_config.config_lock);
+ mutex_lock(&dev->mode_config.mutex);
list_for_each(lh, &dev->mode_config.fb_list)
fb_count++;
ret = -EFAULT;
out_unlock:
- spin_unlock(&dev->mode_config.config_lock);
+ mutex_unlock(&dev->mode_config.mutex);
return ret;
}
if (copy_from_user(&crtc_resp, argp, sizeof(crtc_resp)))
return -EFAULT;
- spin_lock(&dev->mode_config.config_lock);
+ mutex_lock(&dev->mode_config.mutex);
crtc = idr_find(&dev->mode_config.crtc_idr, crtc_resp.crtc_id);
if (!crtc || (crtc->id != crtc_resp.crtc_id)) {
ret = -EINVAL;
ret = -EFAULT;
out:
- spin_unlock(&dev->mode_config.config_lock);
+ mutex_unlock(&dev->mode_config.mutex);
return ret;
}
DRM_DEBUG("output id %d:\n", out_resp.output);
- spin_lock(&dev->mode_config.config_lock);
+ mutex_lock(&dev->mode_config.mutex);
output= idr_find(&dev->mode_config.crtc_idr, out_resp.output);
if (!output || (output->id != out_resp.output)) {
ret = -EINVAL;
ret = -EFAULT;
out_unlock:
- spin_unlock(&dev->mode_config.config_lock);
+ mutex_unlock(&dev->mode_config.mutex);
return ret;
}
if (copy_from_user(&crtc_req, argp, sizeof(crtc_req)))
return -EFAULT;
- spin_lock(&dev->mode_config.config_lock);
+ mutex_lock(&dev->mode_config.mutex);
crtc = idr_find(&dev->mode_config.crtc_idr, crtc_req.crtc_id);
if (!crtc || (crtc->id != crtc_req.crtc_id)) {
DRM_DEBUG("Unknown CRTC ID %d\n", crtc_req.crtc_id);
ret = drm_crtc_set_config(crtc, &crtc_req, mode, output_set, fb);
out:
- spin_unlock(&dev->mode_config.config_lock);
+ mutex_unlock(&dev->mode_config.mutex);
return ret;
}
return -EINVAL;
}
- spin_lock(&dev->mode_config.config_lock);
+ mutex_lock(&dev->mode_config.mutex);
/* TODO check limits are okay */
ret = drm_get_buffer_object(dev, &bo, r.handle);
if (ret || !bo) {
}
out:
- spin_unlock(&dev->mode_config.config_lock);
+ mutex_unlock(&dev->mode_config.mutex);
return ret;
}
uint32_t id = arg;
int ret = 0;
- spin_lock(&dev->mode_config.config_lock);
+ mutex_lock(&dev->mode_config.mutex);
fb = idr_find(&dev->mode_config.crtc_idr, id);
/* TODO check that we realy get a framebuffer back. */
if (!fb || (id != fb->id)) {
drm_framebuffer_destroy(fb);
out:
- spin_unlock(&dev->mode_config.config_lock);
+ mutex_unlock(&dev->mode_config.mutex);
return ret;
}
if (copy_from_user(&r, argp, sizeof(r)))
return -EFAULT;
- spin_lock(&dev->mode_config.config_lock);
+ mutex_lock(&dev->mode_config.mutex);
fb = idr_find(&dev->mode_config.crtc_idr, r.buffer_id);
if (!fb || (r.buffer_id != fb->id)) {
DRM_ERROR("invalid framebuffer id\n");
ret = -EFAULT;
out:
- spin_unlock(&dev->mode_config.config_lock);
+ mutex_unlock(&dev->mode_config.mutex);
return ret;
}
drm_device_t *dev = priv->head->dev;
struct drm_framebuffer *fb, *tfb;
- spin_lock(&dev->mode_config.config_lock);
+ mutex_lock(&dev->mode_config.mutex);
list_for_each_entry_safe(fb, tfb, &priv->fbs, filp_head) {
list_del(&fb->filp_head);
dev->driver->fb_remove(dev, drm_crtc_from_fb(dev, fb));
drm_framebuffer_destroy(fb);
}
- spin_unlock(&dev->mode_config.config_lock);
+ mutex_unlock(&dev->mode_config.mutex);
}
/**
if (copy_from_user(&new_mode, argp, sizeof(new_mode)))
return -EFAULT;
- spin_lock(&dev->mode_config.config_lock);
+ mutex_lock(&dev->mode_config.mutex);
user_mode = drm_mode_create(dev);
if (!user_mode) {
ret = -ENOMEM;
ret = -EFAULT;
out:
- spin_unlock(&dev->mode_config.config_lock);
+ mutex_unlock(&dev->mode_config.mutex);
return ret;
}
struct drm_display_mode *mode, *t;
int ret = -EINVAL;
- spin_lock(&dev->mode_config.config_lock);
+ mutex_lock(&dev->mode_config.mutex);
mode = idr_find(&dev->mode_config.crtc_idr, id);
if (!mode || (id != mode->mode_id)) {
ret = -EINVAL;
}
out:
- spin_unlock(&dev->mode_config.config_lock);
+ mutex_unlock(&dev->mode_config.mutex);
return ret;
}
if (copy_from_user(&mode_cmd, argp, sizeof(mode_cmd)))
return -EFAULT;
- spin_lock(&dev->mode_config.config_lock);
+ mutex_lock(&dev->mode_config.mutex);
mode = idr_find(&dev->mode_config.crtc_idr, mode_cmd.mode_id);
if (!mode || (mode->mode_id != mode_cmd.mode_id)) {
ret = -ENOSPC;
out:
- spin_unlock(&dev->mode_config.config_lock);
+ mutex_unlock(&dev->mode_config.mutex);
return ret;
}
if (copy_from_user(&mode_cmd, argp, sizeof(mode_cmd)))
return -EFAULT;
- spin_lock(&dev->mode_config.config_lock);
+ mutex_lock(&dev->mode_config.mutex);
mode = idr_find(&dev->mode_config.crtc_idr, mode_cmd.mode_id);
if (!mode || (mode->mode_id != mode_cmd.mode_id)) {
ret = -EINVAL;
out:
- spin_unlock(&dev->mode_config.config_lock);
+ mutex_unlock(&dev->mode_config.mutex);
return ret;
}