From faaccee01ac8de65ed25de88a63c645e4de40120 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Mon, 11 Apr 2011 10:17:15 +0100 Subject: [PATCH] drm: Add some debug messages to clarify EINVAL with vblank/flips Signed-off-by: Chris Wilson --- drivers/gpu/drm/drm_crtc.c | 19 ++++++++++++++----- drivers/gpu/drm/drm_irq.c | 16 ++++++++++++---- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 799e149..0ba2b35 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -2657,16 +2657,21 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev, struct drm_framebuffer *fb; struct drm_pending_vblank_event *e = NULL; unsigned long flags; - int ret = -EINVAL; + int ret; if (page_flip->flags & ~DRM_MODE_PAGE_FLIP_FLAGS || - page_flip->reserved != 0) + page_flip->reserved != 0) { + DRM_DEBUG_DRIVER("invalid command: flags=%x, reserved=%x\n", + page_flip->flags, page_flip->reserved); return -EINVAL; + } mutex_lock(&dev->mode_config.mutex); obj = drm_mode_object_find(dev, page_flip->crtc_id, DRM_MODE_OBJECT_CRTC); - if (!obj) + if (!obj) { + ret = -ENOENT; goto out; + } crtc = obj_to_crtc(obj); if (crtc->fb == NULL) { @@ -2678,12 +2683,16 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev, goto out; } - if (crtc->funcs->page_flip == NULL) + if (crtc->funcs->page_flip == NULL) { + ret = -ENODEV; goto out; + } obj = drm_mode_object_find(dev, page_flip->fb_id, DRM_MODE_OBJECT_FB); - if (!obj) + if (!obj) { + ret = -ENOENT; goto out; + } fb = obj_to_fb(obj); if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) { diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c index 741457b..90814d4 100644 --- a/drivers/gpu/drm/drm_irq.c +++ b/drivers/gpu/drm/drm_irq.c @@ -1127,16 +1127,20 @@ int drm_wait_vblank(struct drm_device *dev, void *data, int ret = 0; unsigned int flags, seq, crtc, high_crtc; - if ((!drm_dev_to_irq(dev)) || (!dev->irq_enabled)) + if ((!drm_dev_to_irq(dev)) || (!dev->irq_enabled)) { + DRM_DEBUG("irq not enabled'n"); return -EINVAL; + } - if (vblwait->request.type & _DRM_VBLANK_SIGNAL) + if (vblwait->request.type & _DRM_VBLANK_SIGNAL) { + DRM_DEBUG("invalid request type: signal not supported [%x]", vblwait->request.type); return -EINVAL; + } if (vblwait->request.type & ~(_DRM_VBLANK_TYPES_MASK | _DRM_VBLANK_FLAGS_MASK | _DRM_VBLANK_HIGH_CRTC_MASK)) { - DRM_ERROR("Unsupported type value 0x%x, supported mask 0x%x\n", + DRM_DEBUG("Unsupported type value 0x%x, supported mask 0x%x\n", vblwait->request.type, (_DRM_VBLANK_TYPES_MASK | _DRM_VBLANK_FLAGS_MASK | _DRM_VBLANK_HIGH_CRTC_MASK)); @@ -1149,8 +1153,11 @@ int drm_wait_vblank(struct drm_device *dev, void *data, crtc = high_crtc >> _DRM_VBLANK_HIGH_CRTC_SHIFT; else crtc = flags & _DRM_VBLANK_SECONDARY ? 1 : 0; - if (crtc >= dev->num_crtcs) + if (crtc >= dev->num_crtcs) { + DRM_DEBUG("invalid crtc/pipe selected: %d > %d\n", + crtc, dev->num_crtcs); return -EINVAL; + } ret = drm_vblank_get(dev, crtc); if (ret) { @@ -1166,6 +1173,7 @@ int drm_wait_vblank(struct drm_device *dev, void *data, case _DRM_VBLANK_ABSOLUTE: break; default: + DRM_DEBUG("invalid request type (not rel or abs): %x\n", vblwait->request.type); ret = -EINVAL; goto done; } -- 1.7.4.1