Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp13333820ybl; Sun, 29 Dec 2019 09:31:21 -0800 (PST) X-Google-Smtp-Source: APXvYqzOocRtz304QRMR+/Nlu2ZKnpsPa/0FKWRe4y4atjPwZ7yiboE3ecLDM9lRFzyo3VJpXNPP X-Received: by 2002:a9d:674f:: with SMTP id w15mr70890843otm.243.1577640681282; Sun, 29 Dec 2019 09:31:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1577640681; cv=none; d=google.com; s=arc-20160816; b=fFFZK1DVCK2GdUh/2OFcz4WJos3edIlq7x0SMe9dfsKTFJs+uGBfvPV1HvPPkr/Mq8 uGfoE9ss5E6iG/6+4Qe6d0XoElt1432avxMETBkNt90CB90D61rCfYuk2GcktwIOBG6Q e21mP0C/EZSSUyVzsVQEHF/Ha6ZYVKSGB9f9Vjt5XIL2FdVIYG9as6BE2L637kJKMUw4 Z2o3Pf7MriuJNjOHCxUaF5A/xvY0dzyB25RcFhQoWMVs+uOVAe+SBenxwvA+Lvk+UJTq PRn91yS3LE+qZP1qgUt3tAOa51ZCIy8KD1ncZnluHtr6sXIXVcDADdVcOB0gV0lmLbwF Rhpg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=/McXf94JADiXXHglWbX4V0T0KQqiDD1wUrsw3yetk1s=; b=ev8pMbG7yCJHFPLeE4BuWfth7IIhmiphLoT24R3xX5sc9629tllbXA3q/xwrCjjJLp kH+6NMn9M+qW0CPzeFYMKD9fxPKwi7QkWeo9LpxDnL2TUF/+u1M3kvxsv6GwpNn84z3C IsYqgmb8kuXvLUe2LVqIfvZEwJMEFqsmcqy3cUQK1+8tq9iefOpEK4u2OQ3HpvRnCkLs GZGJVqvaZ7AVeHicdST1ls49rmNv5N3zpD+r3i8bnf3ZNWnsaYSuq/+SR2X26aM8+YCI bb31li4XA4Pif+03KawJeb9Omc5XWKtSxNk9BB4gnXz/QfWya4w/JUxZfgyks4w8Og/y ekoQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=iM1O48kI; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h138si19578996oib.6.2019.12.29.09.31.09; Sun, 29 Dec 2019 09:31:21 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=iM1O48kI; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728860AbfL2RaB (ORCPT + 99 others); Sun, 29 Dec 2019 12:30:01 -0500 Received: from mail.kernel.org ([198.145.29.99]:55316 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728843AbfL2R37 (ORCPT ); Sun, 29 Dec 2019 12:29:59 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id C973220722; Sun, 29 Dec 2019 17:29:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1577640598; bh=pU+dIp+cWQB11klvIzCRx2G3V1LA58JKXI5chNPI4M4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iM1O48kI1zVNCxJdsfLW9UaDcAfVvYEeBAYi2m8OghfEFC6CaEzkjQksW+TpDOmzJ DcZhy0Ds5MA0t9Y0QjtP/QoAdBgD4bdxdnSMO1NCHEL64EfEIX7lRJ5slsoADvRQiV UvT04lvd8dn9QqtEDyH7FH4nBid22L1cCM7L0RSE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Keith Packard , Maarten Lankhorst , =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Chris Wilson , Daniel Vetter , Pekka Paalanen , Rodrigo Siqueira , Sasha Levin Subject: [PATCH 4.19 062/219] drm/drm_vblank: Change EINVAL by the correct errno Date: Sun, 29 Dec 2019 18:17:44 +0100 Message-Id: <20191229162516.067347557@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191229162508.458551679@linuxfoundation.org> References: <20191229162508.458551679@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Rodrigo Siqueira [ Upstream commit aed6105b28b10613f16c0bfe97525fe5a23338df ] For historical reasons, the function drm_wait_vblank_ioctl always return -EINVAL if something gets wrong. This scenario limits the flexibility for the userspace to make detailed verification of any problem and take some action. In particular, the validation of “if (!dev->irq_enabled)” in the drm_wait_vblank_ioctl is responsible for checking if the driver support vblank or not. If the driver does not support VBlank, the function drm_wait_vblank_ioctl returns EINVAL, which does not represent the real issue; this patch changes this behavior by return EOPNOTSUPP. Additionally, drm_crtc_get_sequence_ioctl and drm_crtc_queue_sequence_ioctl, also returns EINVAL if vblank is not supported; this patch also changes the return value to EOPNOTSUPP in these functions. Lastly, these functions are invoked by libdrm, which is used by many compositors; because of this, it is important to check if this change breaks any compositor. In this sense, the following projects were examined: * Drm-hwcomposer * Kwin * Sway * Wlroots * Wayland * Weston * Mutter * Xorg (67 different drivers) For each repository the verification happened in three steps: * Update the main branch * Look for any occurrence of "drmCrtcQueueSequence", "drmCrtcGetSequence", and "drmWaitVBlank" with the command git grep -n "STRING". * Look in the git history of the project with the command git log -S None of the above projects validate the use of EINVAL when using drmWaitVBlank(), which make safe, at least for these projects, to change the return values. On the other hand, mesa and xserver project uses drmCrtcQueueSequence() and drmCrtcGetSequence(); this change is harmless for both projects. Change since V5 (Pekka Paalanen): - Check if the change also affects Mutter Change since V4 (Daniel): - Also return EOPNOTSUPP in drm_crtc_[get|queue]_sequence_ioctl Change since V3: - Return EINVAL for _DRM_VBLANK_SIGNAL (Daniel) Change since V2: Daniel Vetter and Chris Wilson - Replace ENOTTY by EOPNOTSUPP - Return EINVAL if the parameters are wrong Cc: Keith Packard Cc: Maarten Lankhorst Cc: Ville Syrjälä Cc: Chris Wilson Cc: Daniel Vetter Cc: Pekka Paalanen Signed-off-by: Rodrigo Siqueira Reviewed-by: Daniel Vetter Acked-by: Pekka Paalanen Link: https://patchwork.freedesktop.org/patch/msgid/20191002140516.adeyj3htylimmlmg@smtp.gmail.com Signed-off-by: Sasha Levin --- drivers/gpu/drm/drm_vblank.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c index d1859bcc7ccb..33a72a84361e 100644 --- a/drivers/gpu/drm/drm_vblank.c +++ b/drivers/gpu/drm/drm_vblank.c @@ -1572,7 +1572,7 @@ int drm_wait_vblank_ioctl(struct drm_device *dev, void *data, unsigned int flags, pipe, high_pipe; if (!dev->irq_enabled) - return -EINVAL; + return -EOPNOTSUPP; if (vblwait->request.type & _DRM_VBLANK_SIGNAL) return -EINVAL; @@ -1813,7 +1813,7 @@ int drm_crtc_get_sequence_ioctl(struct drm_device *dev, void *data, return -EINVAL; if (!dev->irq_enabled) - return -EINVAL; + return -EOPNOTSUPP; crtc = drm_crtc_find(dev, file_priv, get_seq->crtc_id); if (!crtc) @@ -1871,7 +1871,7 @@ int drm_crtc_queue_sequence_ioctl(struct drm_device *dev, void *data, return -EINVAL; if (!dev->irq_enabled) - return -EINVAL; + return -EOPNOTSUPP; crtc = drm_crtc_find(dev, file_priv, queue_seq->crtc_id); if (!crtc) -- 2.20.1