drm/i915: check for kms in dri1 ioctls
Calling these when gem assumes full control of the hw won't end in anything else than tears. So be a bit more paranoid here. Just serves as documentation. v2: Bail out with ENODEV as suggested by Chris Wilson. Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
2e895b17d7
commit
cd9d4e9f9f
@ -239,6 +239,9 @@ static int i915_dma_init(struct drm_device *dev, void *data,
|
|||||||
drm_i915_init_t *init = data;
|
drm_i915_init_t *init = data;
|
||||||
int retcode = 0;
|
int retcode = 0;
|
||||||
|
|
||||||
|
if (drm_core_check_feature(dev, DRIVER_MODESET))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
switch (init->func) {
|
switch (init->func) {
|
||||||
case I915_INIT_DMA:
|
case I915_INIT_DMA:
|
||||||
retcode = i915_initialize(dev, init);
|
retcode = i915_initialize(dev, init);
|
||||||
@ -581,6 +584,9 @@ static int i915_flush_ioctl(struct drm_device *dev, void *data,
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (drm_core_check_feature(dev, DRIVER_MODESET))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
|
RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||||
|
|
||||||
mutex_lock(&dev->struct_mutex);
|
mutex_lock(&dev->struct_mutex);
|
||||||
@ -601,6 +607,9 @@ static int i915_batchbuffer(struct drm_device *dev, void *data,
|
|||||||
int ret;
|
int ret;
|
||||||
struct drm_clip_rect *cliprects = NULL;
|
struct drm_clip_rect *cliprects = NULL;
|
||||||
|
|
||||||
|
if (drm_core_check_feature(dev, DRIVER_MODESET))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
if (!dev_priv->allow_batchbuffer) {
|
if (!dev_priv->allow_batchbuffer) {
|
||||||
DRM_ERROR("Batchbuffer ioctl disabled\n");
|
DRM_ERROR("Batchbuffer ioctl disabled\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -658,6 +667,9 @@ static int i915_cmdbuffer(struct drm_device *dev, void *data,
|
|||||||
DRM_DEBUG_DRIVER("i915 cmdbuffer, buf %p sz %d cliprects %d\n",
|
DRM_DEBUG_DRIVER("i915 cmdbuffer, buf %p sz %d cliprects %d\n",
|
||||||
cmdbuf->buf, cmdbuf->sz, cmdbuf->num_cliprects);
|
cmdbuf->buf, cmdbuf->sz, cmdbuf->num_cliprects);
|
||||||
|
|
||||||
|
if (drm_core_check_feature(dev, DRIVER_MODESET))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
|
RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||||
|
|
||||||
if (cmdbuf->num_cliprects < 0)
|
if (cmdbuf->num_cliprects < 0)
|
||||||
@ -714,6 +726,9 @@ static int i915_flip_bufs(struct drm_device *dev, void *data,
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (drm_core_check_feature(dev, DRIVER_MODESET))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
DRM_DEBUG_DRIVER("%s\n", __func__);
|
DRM_DEBUG_DRIVER("%s\n", __func__);
|
||||||
|
|
||||||
RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
|
RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||||
@ -850,6 +865,9 @@ static int i915_set_status_page(struct drm_device *dev, void *data,
|
|||||||
drm_i915_hws_addr_t *hws = data;
|
drm_i915_hws_addr_t *hws = data;
|
||||||
struct intel_ring_buffer *ring = LP_RING(dev_priv);
|
struct intel_ring_buffer *ring = LP_RING(dev_priv);
|
||||||
|
|
||||||
|
if (drm_core_check_feature(dev, DRIVER_MODESET))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
if (!I915_NEED_GFX_HWS(dev))
|
if (!I915_NEED_GFX_HWS(dev))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
@ -1612,6 +1612,9 @@ int i915_irq_emit(struct drm_device *dev, void *data,
|
|||||||
drm_i915_irq_emit_t *emit = data;
|
drm_i915_irq_emit_t *emit = data;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
|
if (drm_core_check_feature(dev, DRIVER_MODESET))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
if (!dev_priv || !LP_RING(dev_priv)->virtual_start) {
|
if (!dev_priv || !LP_RING(dev_priv)->virtual_start) {
|
||||||
DRM_ERROR("called with no initialization\n");
|
DRM_ERROR("called with no initialization\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -1639,6 +1642,9 @@ int i915_irq_wait(struct drm_device *dev, void *data,
|
|||||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||||
drm_i915_irq_wait_t *irqwait = data;
|
drm_i915_irq_wait_t *irqwait = data;
|
||||||
|
|
||||||
|
if (drm_core_check_feature(dev, DRIVER_MODESET))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
if (!dev_priv) {
|
if (!dev_priv) {
|
||||||
DRM_ERROR("called with no initialization\n");
|
DRM_ERROR("called with no initialization\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -1801,6 +1807,9 @@ int i915_vblank_pipe_set(struct drm_device *dev, void *data,
|
|||||||
{
|
{
|
||||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||||
|
|
||||||
|
if (drm_core_check_feature(dev, DRIVER_MODESET))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
if (!dev_priv) {
|
if (!dev_priv) {
|
||||||
DRM_ERROR("called with no initialization\n");
|
DRM_ERROR("called with no initialization\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -1815,6 +1824,9 @@ int i915_vblank_pipe_get(struct drm_device *dev, void *data,
|
|||||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||||
drm_i915_vblank_pipe_t *pipe = data;
|
drm_i915_vblank_pipe_t *pipe = data;
|
||||||
|
|
||||||
|
if (drm_core_check_feature(dev, DRIVER_MODESET))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
if (!dev_priv) {
|
if (!dev_priv) {
|
||||||
DRM_ERROR("called with no initialization\n");
|
DRM_ERROR("called with no initialization\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
Loading…
Reference in New Issue
Block a user