Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp19791053rwd; Wed, 28 Jun 2023 14:29:22 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6oadSWghH3fPQOzXbejuFksNXUAWBfycyfAMVmNVDb581frjy9gUvCYlh7QF+dKsHlF+1p X-Received: by 2002:a05:6a20:8e15:b0:12c:518:b8da with SMTP id y21-20020a056a208e1500b0012c0518b8damr4264557pzj.35.1687987762255; Wed, 28 Jun 2023 14:29:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687987762; cv=none; d=google.com; s=arc-20160816; b=OHvaGbRfpIf812++NkEYe8X48/o1wFIW1WLJnOx1SFqsidvIWKHqXgajIkix0eqnG8 Fn2dIiRY5SOGzarV5n3Kl0r3vAItvbrlIdTJkIX/UG7bGymzOkw8fnWu1df3NSeguLxr szGvPZ6TBZHoWUyCUiQK2jGfOaCko4mjfUMaL2rtCBGqGFvXFAnjg7dqOxoyLu/7/sP5 2dXMqdGQpC55Rayo6wQil8icqHaim3AOrjeNhyXuOXvcKiNfXmYH7SWjrdPtHLuR1c10 YVyYhwz2GTp/PIoD3FGk/OO6jVPrlX4csh1XrosfJwyhzbI3mZQIIjfZnLB4qWE+K4M/ Y6ow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=fP84djK5erd2GrrGFYuKnbHCuXvHXjeqzaJ4gXaZwiY=; fh=l1Hz9mB6qKVaD/gQguicO3mULz8n4P5DmFOI2W/LGMw=; b=XYCGyqSXOkXkdRRlJNEwImAaryx+FTeEes+mcdjjfRHuQUfrKNTN6n5GZHfTiY+mHN gb5gACTSPUVUcBEumN+lYT8F7TD3BoKMuXnxB5o9m6+3S7ouJhuFnDid1Z5wn9Isw7L+ aOVmH6m9sZWfluH2tEFHrmz25b1cg97A8YgWKkX+wydggMmyRCtgBxpaO8xeoF9RZtsS pvAfW4C26qo44o0hZYlGyFKYcWz+Mm3ODpIWGb2/IDk8O/pZByA6M+aRBI1p8eVKI9/I McKyAFZ+iOFs/bkAsrW0DEkTK8b8hoKyQRA84G7M1Wzt6NJAlwHazzfErlG+DjbZ04Jp 6VoQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=RfW679b+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c5-20020a6566c5000000b0055afc8a301asi4685297pgw.177.2023.06.28.14.29.07; Wed, 28 Jun 2023 14:29:22 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=RfW679b+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231681AbjF1V0B (ORCPT + 99 others); Wed, 28 Jun 2023 17:26:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58132 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232117AbjF1VZa (ORCPT ); Wed, 28 Jun 2023 17:25:30 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7DE21359D for ; Wed, 28 Jun 2023 14:22:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1687987376; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fP84djK5erd2GrrGFYuKnbHCuXvHXjeqzaJ4gXaZwiY=; b=RfW679b+zBmntmSbQc29Eq0WngafEXD0JXEmfdq+i7cjp/l48aDU8tkfFhAJprZ8rz80AB zoYjmh45DlmkLHdbpVI6CDdkQNZmEsJ3d5f2IkORKSA5tLhLPJZh/2Ukkn8F5kGDnEaUuo Ez1D0vt+w5pg/xhRFF6+50qVF3OnQoM= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-636-BpF5h5eTM3mxXDPRVYBL8A-1; Wed, 28 Jun 2023 17:22:55 -0400 X-MC-Unique: BpF5h5eTM3mxXDPRVYBL8A-1 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-313ecc94e23so718f8f.0 for ; Wed, 28 Jun 2023 14:22:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687987374; x=1690579374; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fP84djK5erd2GrrGFYuKnbHCuXvHXjeqzaJ4gXaZwiY=; b=JbUnBT4fFjbCA2qtsu/LoeDZ16w6JETI9r+cMjVYg0Fe7tNUqBUw68KlgjgDqkYpBB 09O/88ju9CaXUSr2+w0n3DVzgnQOiTr4QIACAzrJipkw8rAma3Mf7dH1b5cqV12bNLGm UzWOwuqu/4tVQkgXQLtNmgr+9k/dItoR+tU9jfpiE7YcgAZ7CPmM8OK3B9s55VMkx0Ea 3VHIcAxzSGISZaounZC5CAI06p5t8BtFxE7Nvbs1XzL2DA2tk/k2SWT3Si2LHucw4H+k 7wwAFNingTqMCqPDQ1Z3+ImBN4KPUvYBEN3Y+U/RpN5f2I3/rtKzg2WM/BXWOsc5uxDg Q41g== X-Gm-Message-State: AC+VfDw89DwSIMkm5qZudHFJoeyYn47UjNpdaA4Q+Cn8x8Xn3kxiccMX t6xI/i/bEAZrdO7ZltKhspcPcpSYWQrWPWKYjm8NO1qEbBBD22Ft+9YnPQPM68qi6rmRzIZDseu PZ+X+3U8nwVoZvIFbc3U6CJuQCaXVlx5icDpDb2WD5ZM71wvZ98X8/g5dZU+XCgftt0a9rKz87a M7bQc5avM= X-Received: by 2002:a05:6000:151:b0:314:a77:b6c0 with SMTP id r17-20020a056000015100b003140a77b6c0mr2925790wrx.1.1687987373922; Wed, 28 Jun 2023 14:22:53 -0700 (PDT) X-Received: by 2002:a05:6000:151:b0:314:a77:b6c0 with SMTP id r17-20020a056000015100b003140a77b6c0mr2925773wrx.1.1687987373643; Wed, 28 Jun 2023 14:22:53 -0700 (PDT) Received: from kherbst.pingu ([95.90.48.30]) by smtp.gmail.com with ESMTPSA id r3-20020adfda43000000b0030ae3a6be4asm14294323wrl.72.2023.06.28.14.22.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 Jun 2023 14:22:52 -0700 (PDT) From: Karol Herbst To: linux-kernel@vger.kernel.org Cc: nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Karol Herbst , Ben Skeggs , Lyude Paul , stable@vger.kernel.org Subject: [PATCH 3/3] drm/nouveau/disp: verify mode on atomic_check Date: Wed, 28 Jun 2023 23:22:48 +0200 Message-ID: <20230628212248.3798605-3-kherbst@redhat.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230628212248.3798605-1-kherbst@redhat.com> References: <20230628212248.3798605-1-kherbst@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We have to verify the selected mode as Userspace might request one which we can't configure the GPU for. X with the modesetting DDX is adding a bunch of modes, some so far outside of hardware limits that things simply break. Sadly we can't fix X this way as on start it sticks to one mode and ignores any error and there is really nothing we can do about this, but at least this way we won't let the GPU run into any errors caused by a non supported display mode. However this does prevent X from switching to such a mode, which to be fair is an improvement as well. Seen on one of my Tesla GPUs with a connected 4K display. Link: https://gitlab.freedesktop.org/drm/nouveau/-/issues/199 Cc: Ben Skeggs Cc: Lyude Paul Cc: stable@vger.kernel.org # v6.1+ Signed-off-by: Karol Herbst --- drivers/gpu/drm/nouveau/nouveau_connector.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c index 22c42a5e184d..edf490c1490c 100644 --- a/drivers/gpu/drm/nouveau/nouveau_connector.c +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c @@ -1114,6 +1114,25 @@ nouveau_connector_atomic_check(struct drm_connector *connector, struct drm_atomi struct drm_connector_state *conn_state = drm_atomic_get_new_connector_state(state, connector); + /* As we can get any random mode from Userspace, we have to make sure the to be set mode + * is valid and does not violate hardware constraints as we rely on it being sane. + */ + if (conn_state->crtc) { + struct drm_crtc_state *crtc_state = + drm_atomic_get_crtc_state(state, conn_state->crtc); + + if (IS_ERR(crtc_state)) + return PTR_ERR(crtc_state); + + if (crtc_state->enable && (crtc_state->mode_changed || + crtc_state->connectors_changed)) { + struct drm_display_mode *mode = &crtc_state->mode; + + if (connector->helper_private->mode_valid(connector, mode) != MODE_OK) + return -EINVAL; + } + } + if (!nv_conn->dp_encoder || !nv50_has_mst(nouveau_drm(connector->dev))) return 0; -- 2.41.0