Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp3941693pxb; Tue, 2 Mar 2021 02:31:18 -0800 (PST) X-Google-Smtp-Source: ABdhPJw0fGLWykwzgoeP6b6aN5t/wEYsR/nYWZ9IIQVesD6X3Fu9NaXoV+EnhuZpOPNedHJ5Tywj X-Received: by 2002:a50:d753:: with SMTP id i19mr19296306edj.43.1614681077859; Tue, 02 Mar 2021 02:31:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614681077; cv=none; d=google.com; s=arc-20160816; b=pe3Zpio1qCZHLG3zH5M3IAIxCQW0DNt59YIIQgZTTR33EqcBXpNYXPjaRetyL2Vn4o EcK29qlkD//Cza3UglerAt2KkhtchVO3Z4ltTiEGjAeQGh+PP2tVClQwnQ7lq7dOCzgO B95TAfS4QYb947GIJQPETvq93TsVZrpimgOrKBoEoCkBQOX/RcFCFET9hjV+SHPy2YqT l6UzUFmZlKt0Ug/gJxWlRsZK5ReGTV++0AZzcxwFpFyxd1EtETs7yRZhtPKVQZSgG7/Z SC3MTi8ABu9w3//tOVFQkgP4LYVA9krKXSNaVKbn3tHxKax8L0Rntmwooo9gqW3rUMYR Slew== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=4g/dpE1ewOLMHkR3yuWxp+ldsKGydIkbZZpZcTLISII=; b=USQE7B50QIqYv1pYqlzAN5eTdFVncQmuk8nUBLHU+tHU1QPQCFILJk8XmyTs2ZZpBw 5Kr5qHsFRT1YqnKLpwM+p4NTDIXB8beHVK3YJFyM9MAWbLTT6onYEVRlnt29Ke+bn0iP eDrXyytOn42vDPXcIboxGwxdxC8wQ7XQ6hrpx0gkyhD2XWBqIUu9F+6QNvqdlh/mcGAe K4UwNAz3yLDjJdObfmFrbyuHJZjjcEwdN/lBawRPyp51zVdflZGozYw4z4aFpU+rCeaJ +t9R8I4qJYqr1Og6nVuYWSvoB+ZCYjPS87h6i+ZIbkJPiXgJl2cwP4p4UiRL9+3mMH+K 3vNw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="EHk/Y0ve"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id lr6si7990722ejb.39.2021.03.02.02.30.54; Tue, 02 Mar 2021 02:31:17 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="EHk/Y0ve"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379829AbhCBBbq (ORCPT + 99 others); Mon, 1 Mar 2021 20:31:46 -0500 Received: from mail.kernel.org ([198.145.29.99]:43888 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235765AbhCATSx (ORCPT ); Mon, 1 Mar 2021 14:18:53 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id F199764FA3; Mon, 1 Mar 2021 17:26:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1614619601; bh=Y5B3CohJ0Xl3YkF/OrgFnybXvjnQMwMebfIgIUc7t1M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EHk/Y0veaQrPRx5zfKQ09jLbFfWvdYa0usLlSdFStqud7QnhDT3X2Oi3Rh9NsaOia LcVKPhcLfQT40mrIcqUQgCKrSkimwKwipQV+Q1wTDS6ktnA06WLqSLDJavZKN+YeQ5 eW3mP3O/xC0rNaVyRnSwOU/V6NjfU+S8TVkjiRao= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, =?UTF-8?q?Jan=20Kokem=C3=BCller?= , Alex Deucher Subject: [PATCH 5.10 513/663] drm/amd/display: Add FPU wrappers to dcn21_validate_bandwidth() Date: Mon, 1 Mar 2021 17:12:41 +0100 Message-Id: <20210301161207.233869709@linuxfoundation.org> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210301161141.760350206@linuxfoundation.org> References: <20210301161141.760350206@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jan Kokemüller commit 41401ac67791810dd880345962339aa1bedd3c0d upstream. dcn21_validate_bandwidth() calls functions that use floating point math. On my machine this sometimes results in simd exceptions when there are other FPU users such as KVM virtual machines running. The screen freezes completely in this case. Wrapping the function with DC_FP_START()/DC_FP_END() seems to solve the problem. This mirrors the approach used for dcn20_validate_bandwidth. Tested on a AMD Ryzen 7 PRO 4750U (Renoir). Bug: https://bugzilla.kernel.org/show_bug.cgi?id=206987 Signed-off-by: Jan Kokemüller Signed-off-by: Alex Deucher Cc: stable@vger.kernel.org Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c | 2 - drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c | 20 ++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) --- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c @@ -3248,7 +3248,7 @@ restore_dml_state: bool dcn20_validate_bandwidth(struct dc *dc, struct dc_state *context, bool fast_validate) { - bool voltage_supported = false; + bool voltage_supported; DC_FP_START(); voltage_supported = dcn20_validate_bandwidth_fp(dc, context, fast_validate); DC_FP_END(); --- a/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c @@ -1173,8 +1173,8 @@ void dcn21_calculate_wm( } -bool dcn21_validate_bandwidth(struct dc *dc, struct dc_state *context, - bool fast_validate) +static noinline bool dcn21_validate_bandwidth_fp(struct dc *dc, + struct dc_state *context, bool fast_validate) { bool out = false; @@ -1227,6 +1227,22 @@ validate_out: return out; } + +/* + * Some of the functions further below use the FPU, so we need to wrap this + * with DC_FP_START()/DC_FP_END(). Use the same approach as for + * dcn20_validate_bandwidth in dcn20_resource.c. + */ +bool dcn21_validate_bandwidth(struct dc *dc, struct dc_state *context, + bool fast_validate) +{ + bool voltage_supported; + DC_FP_START(); + voltage_supported = dcn21_validate_bandwidth_fp(dc, context, fast_validate); + DC_FP_END(); + return voltage_supported; +} + static void dcn21_destroy_resource_pool(struct resource_pool **pool) { struct dcn21_resource_pool *dcn21_pool = TO_DCN21_RES_POOL(*pool);