From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.6 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BBB3BC4727C for ; Tue, 29 Sep 2020 22:31:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 61DEA20756 for ; Tue, 29 Sep 2020 22:31:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="EKpHblTl" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728784AbgI2Wbz (ORCPT ); Tue, 29 Sep 2020 18:31:55 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:52906 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728206AbgI2Wby (ORCPT ); Tue, 29 Sep 2020 18:31:54 -0400 Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1601418713; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=N3EvNa7CARVdvxvcgx4Z06Gs+9k22STMCzS8+0wBp20=; b=EKpHblTleXB4ip0L+tkK/pBguSwIvOkm5TgO74rnfgZk6a7x4T5Idx99iip81wT7fM+sOU M8ROwQPikPnkuEESY5VHEjZV1AJTcggE6EajFw4G0VHrGpToWObvzX0WU8dKUH7lXqq/Ec kXoj3HrLBwsc2viRTGox3gz0PLF7I1U= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-508-wyDZfFjxNqaEGA3Qg41bcQ-1; Tue, 29 Sep 2020 18:31:45 -0400 X-MC-Unique: wyDZfFjxNqaEGA3Qg41bcQ-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 93A7A186841D; Tue, 29 Sep 2020 22:31:44 +0000 (UTC) Received: from Ruby.redhat.com (ovpn-121-117.rdu2.redhat.com [10.10.121.117]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5B75B55775; Tue, 29 Sep 2020 22:31:43 +0000 (UTC) From: Lyude Paul To: nouveau@lists.freedesktop.org Cc: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Ben Skeggs , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org (open list:DRM DRIVER FOR NVIDIA GEFORCE/QUADRO GPUS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v2 2/2] drm/nouveau/kms/nv50-: Fix clock checking algorithm in nv50_dp_mode_valid() Date: Tue, 29 Sep 2020 18:31:32 -0400 Message-Id: <20200929223132.333453-2-lyude@redhat.com> In-Reply-To: <20200929223132.333453-1-lyude@redhat.com> References: <20200929223132.333453-1-lyude@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org While I thought I had this correct (since it actually did reject modes like I expected during testing), Ville Syrjala from Intel pointed out that the logic here isn't correct. max_clock refers to the max data rate supported by the DP encoder. So, limiting it to the output of ds_clock (which refers to the maximum dotclock of the downstream DP device) doesn't make any sense. Additionally, since we're using the connector's bpc as the canonical BPC we should use this in mode_valid until we support dynamically setting the bpp based on bandwidth constraints. https://lists.freedesktop.org/archives/dri-devel/2020-September/280276.html For more info. So, let's rewrite this using Ville's advice. v2: * Ville pointed out I mixed up the dotclock and the link rate. So fix that... * ...and also rename all the variables in this function to be more appropriately labeled so I stop mixing them up. * Reuse the bpp from the connector for now until we have dynamic bpp selection. * Use use DIV_ROUND_UP for calculating the mode rate like i915 does, which we should also have been doing from the start Signed-off-by: Lyude Paul Fixes: 409d38139b42 ("drm/nouveau/kms/nv50-: Use downstream DP clock limits for mode validation") Cc: Ville Syrjälä Cc: Lyude Paul Cc: Ben Skeggs --- drivers/gpu/drm/nouveau/nouveau_dp.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_dp.c b/drivers/gpu/drm/nouveau/nouveau_dp.c index 93e3751ad7f1..040ed88d362d 100644 --- a/drivers/gpu/drm/nouveau/nouveau_dp.c +++ b/drivers/gpu/drm/nouveau/nouveau_dp.c @@ -231,8 +231,9 @@ nv50_dp_mode_valid(struct drm_connector *connector, const struct drm_display_mode *mode, unsigned *out_clock) { - const unsigned min_clock = 25000; - unsigned max_clock, ds_clock, clock = mode->clock; + const unsigned int min_clock = 25000; + unsigned int max_rate, mode_rate, ds_max_dotclock, clock = mode->clock; + const u8 bpp = connector->display_info.bpc * 3; if (mode->flags & DRM_MODE_FLAG_INTERLACE && !outp->caps.dp_interlace) return MODE_NO_INTERLACE; @@ -240,17 +241,17 @@ nv50_dp_mode_valid(struct drm_connector *connector, if ((mode->flags & DRM_MODE_FLAG_3D_MASK) == DRM_MODE_FLAG_3D_FRAME_PACKING) clock *= 2; - max_clock = outp->dp.link_nr * outp->dp.link_bw; - ds_clock = drm_dp_downstream_max_dotclock(outp->dp.dpcd, - outp->dp.downstream_ports); - if (ds_clock) - max_clock = min(max_clock, ds_clock); + max_rate = outp->dp.link_nr * outp->dp.link_bw; + mode_rate = DIV_ROUND_UP(clock * bpp, 8); + if (mode_rate > max_rate) + return MODE_CLOCK_HIGH; + + ds_max_dotclock = drm_dp_downstream_max_dotclock(outp->dp.dpcd, outp->dp.downstream_ports); + if (ds_max_dotclock && clock > ds_max_dotclock) + return MODE_CLOCK_HIGH; - clock = mode->clock * (connector->display_info.bpc * 3) / 10; if (clock < min_clock) return MODE_CLOCK_LOW; - if (clock > max_clock) - return MODE_CLOCK_HIGH; if (out_clock) *out_clock = clock; -- 2.26.2 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: [PATCH v2 2/2] drm/nouveau/kms/nv50-: Fix clock checking algorithm in nv50_dp_mode_valid() Date: Tue, 29 Sep 2020 18:31:32 -0400 Message-ID: <20200929223132.333453-2-lyude@redhat.com> References: <20200929223132.333453-1-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Return-path: In-Reply-To: <20200929223132.333453-1-lyude@redhat.com> To: nouveau@lists.freedesktop.org Cc: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Ben Skeggs , David Airlie , Daniel Vetter , "open list:DRM DRIVER FOR NVIDIA GEFORCE/QUADRO GPUS" , open list List-Id: nouveau.vger.kernel.org While I thought I had this correct (since it actually did reject modes like I expected during testing), Ville Syrjala from Intel pointed out that the logic here isn't correct. max_clock refers to the max data rate supported by the DP encoder. So, limiting it to the output of ds_clock (which refers to the maximum dotclock of the downstream DP device) doesn't make any sense. Additionally, since we're using the connector's bpc as the canonical BPC we should use this in mode_valid until we support dynamically setting the bpp based on bandwidth constraints. https://lists.freedesktop.org/archives/dri-devel/2020-September/280276.html For more info. So, let's rewrite this using Ville's advice. v2: * Ville pointed out I mixed up the dotclock and the link rate. So fix that... * ...and also rename all the variables in this function to be more appropriately labeled so I stop mixing them up. * Reuse the bpp from the connector for now until we have dynamic bpp selection. * Use use DIV_ROUND_UP for calculating the mode rate like i915 does, which we should also have been doing from the start Signed-off-by: Lyude Paul Fixes: 409d38139b42 ("drm/nouveau/kms/nv50-: Use downstream DP clock limits for mode validation") Cc: Ville Syrjälä Cc: Lyude Paul Cc: Ben Skeggs --- drivers/gpu/drm/nouveau/nouveau_dp.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_dp.c b/drivers/gpu/drm/nouveau/nouveau_dp.c index 93e3751ad7f1..040ed88d362d 100644 --- a/drivers/gpu/drm/nouveau/nouveau_dp.c +++ b/drivers/gpu/drm/nouveau/nouveau_dp.c @@ -231,8 +231,9 @@ nv50_dp_mode_valid(struct drm_connector *connector, const struct drm_display_mode *mode, unsigned *out_clock) { - const unsigned min_clock = 25000; - unsigned max_clock, ds_clock, clock = mode->clock; + const unsigned int min_clock = 25000; + unsigned int max_rate, mode_rate, ds_max_dotclock, clock = mode->clock; + const u8 bpp = connector->display_info.bpc * 3; if (mode->flags & DRM_MODE_FLAG_INTERLACE && !outp->caps.dp_interlace) return MODE_NO_INTERLACE; @@ -240,17 +241,17 @@ nv50_dp_mode_valid(struct drm_connector *connector, if ((mode->flags & DRM_MODE_FLAG_3D_MASK) == DRM_MODE_FLAG_3D_FRAME_PACKING) clock *= 2; - max_clock = outp->dp.link_nr * outp->dp.link_bw; - ds_clock = drm_dp_downstream_max_dotclock(outp->dp.dpcd, - outp->dp.downstream_ports); - if (ds_clock) - max_clock = min(max_clock, ds_clock); + max_rate = outp->dp.link_nr * outp->dp.link_bw; + mode_rate = DIV_ROUND_UP(clock * bpp, 8); + if (mode_rate > max_rate) + return MODE_CLOCK_HIGH; + + ds_max_dotclock = drm_dp_downstream_max_dotclock(outp->dp.dpcd, outp->dp.downstream_ports); + if (ds_max_dotclock && clock > ds_max_dotclock) + return MODE_CLOCK_HIGH; - clock = mode->clock * (connector->display_info.bpc * 3) / 10; if (clock < min_clock) return MODE_CLOCK_LOW; - if (clock > max_clock) - return MODE_CLOCK_HIGH; if (out_clock) *out_clock = clock; -- 2.26.2 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4F68FC47420 for ; Tue, 29 Sep 2020 22:31:57 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D3EE2206CA for ; Tue, 29 Sep 2020 22:31:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="EKpHblTl" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D3EE2206CA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E4BAB6E202; Tue, 29 Sep 2020 22:31:55 +0000 (UTC) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6C3C96E1F9 for ; Tue, 29 Sep 2020 22:31:54 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1601418713; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=N3EvNa7CARVdvxvcgx4Z06Gs+9k22STMCzS8+0wBp20=; b=EKpHblTleXB4ip0L+tkK/pBguSwIvOkm5TgO74rnfgZk6a7x4T5Idx99iip81wT7fM+sOU M8ROwQPikPnkuEESY5VHEjZV1AJTcggE6EajFw4G0VHrGpToWObvzX0WU8dKUH7lXqq/Ec kXoj3HrLBwsc2viRTGox3gz0PLF7I1U= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-508-wyDZfFjxNqaEGA3Qg41bcQ-1; Tue, 29 Sep 2020 18:31:45 -0400 X-MC-Unique: wyDZfFjxNqaEGA3Qg41bcQ-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 93A7A186841D; Tue, 29 Sep 2020 22:31:44 +0000 (UTC) Received: from Ruby.redhat.com (ovpn-121-117.rdu2.redhat.com [10.10.121.117]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5B75B55775; Tue, 29 Sep 2020 22:31:43 +0000 (UTC) From: Lyude Paul To: nouveau@lists.freedesktop.org Subject: [PATCH v2 2/2] drm/nouveau/kms/nv50-: Fix clock checking algorithm in nv50_dp_mode_valid() Date: Tue, 29 Sep 2020 18:31:32 -0400 Message-Id: <20200929223132.333453-2-lyude@redhat.com> In-Reply-To: <20200929223132.333453-1-lyude@redhat.com> References: <20200929223132.333453-1-lyude@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: David Airlie , open list , "open list:DRM DRIVER FOR NVIDIA GEFORCE/QUADRO GPUS" , Ben Skeggs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" V2hpbGUgSSB0aG91Z2h0IEkgaGFkIHRoaXMgY29ycmVjdCAoc2luY2UgaXQgYWN0dWFsbHkgZGlk IHJlamVjdCBtb2RlcwpsaWtlIEkgZXhwZWN0ZWQgZHVyaW5nIHRlc3RpbmcpLCBWaWxsZSBTeXJq YWxhIGZyb20gSW50ZWwgcG9pbnRlZCBvdXQKdGhhdCB0aGUgbG9naWMgaGVyZSBpc24ndCBjb3Jy ZWN0LiBtYXhfY2xvY2sgcmVmZXJzIHRvIHRoZSBtYXggZGF0YSByYXRlCnN1cHBvcnRlZCBieSB0 aGUgRFAgZW5jb2Rlci4gU28sIGxpbWl0aW5nIGl0IHRvIHRoZSBvdXRwdXQgb2YgZHNfY2xvY2sg KHdoaWNoCnJlZmVycyB0byB0aGUgbWF4aW11bSBkb3RjbG9jayBvZiB0aGUgZG93bnN0cmVhbSBE UCBkZXZpY2UpIGRvZXNuJ3QgbWFrZSBhbnkKc2Vuc2UuIEFkZGl0aW9uYWxseSwgc2luY2Ugd2Un cmUgdXNpbmcgdGhlIGNvbm5lY3RvcidzIGJwYyBhcyB0aGUgY2Fub25pY2FsIEJQQwp3ZSBzaG91 bGQgdXNlIHRoaXMgaW4gbW9kZV92YWxpZCB1bnRpbCB3ZSBzdXBwb3J0IGR5bmFtaWNhbGx5IHNl dHRpbmcgdGhlIGJwcApiYXNlZCBvbiBiYW5kd2lkdGggY29uc3RyYWludHMuCgpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9hcmNoaXZlcy9kcmktZGV2ZWwvMjAyMC1TZXB0ZW1iZXIvMjgw Mjc2Lmh0bWwKCkZvciBtb3JlIGluZm8uCgpTbywgbGV0J3MgcmV3cml0ZSB0aGlzIHVzaW5nIFZp bGxlJ3MgYWR2aWNlLgoKdjI6CiogVmlsbGUgcG9pbnRlZCBvdXQgSSBtaXhlZCB1cCB0aGUgZG90 Y2xvY2sgYW5kIHRoZSBsaW5rIHJhdGUuIFNvIGZpeCB0aGF0Li4uCiogLi4uYW5kIGFsc28gcmVu YW1lIGFsbCB0aGUgdmFyaWFibGVzIGluIHRoaXMgZnVuY3Rpb24gdG8gYmUgbW9yZSBhcHByb3By aWF0ZWx5CiAgbGFiZWxlZCBzbyBJIHN0b3AgbWl4aW5nIHRoZW0gdXAuCiogUmV1c2UgdGhlIGJw cCBmcm9tIHRoZSBjb25uZWN0b3IgZm9yIG5vdyB1bnRpbCB3ZSBoYXZlIGR5bmFtaWMgYnBwIHNl bGVjdGlvbi4KKiBVc2UgdXNlIERJVl9ST1VORF9VUCBmb3IgY2FsY3VsYXRpbmcgdGhlIG1vZGUg cmF0ZSBsaWtlIGk5MTUgZG9lcywgd2hpY2ggd2UKICBzaG91bGQgYWxzbyBoYXZlIGJlZW4gZG9p bmcgZnJvbSB0aGUgc3RhcnQKClNpZ25lZC1vZmYtYnk6IEx5dWRlIFBhdWwgPGx5dWRlQHJlZGhh dC5jb20+CkZpeGVzOiA0MDlkMzgxMzliNDIgKCJkcm0vbm91dmVhdS9rbXMvbnY1MC06IFVzZSBk b3duc3RyZWFtIERQIGNsb2NrIGxpbWl0cyBmb3IgbW9kZSB2YWxpZGF0aW9uIikKQ2M6IFZpbGxl IFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+CkNjOiBMeXVkZSBQYXVs IDxseXVkZUByZWRoYXQuY29tPgpDYzogQmVuIFNrZWdncyA8YnNrZWdnc0ByZWRoYXQuY29tPgot LS0KIGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHAuYyB8IDIxICsrKysrKysrKysr LS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHAuYyBi L2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHAuYwppbmRleCA5M2UzNzUxYWQ3ZjEu LjA0MGVkODhkMzYyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVh dV9kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHAuYwpAQCAtMjMx LDggKzIzMSw5IEBAIG52NTBfZHBfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLAogCQkgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKIAkJICAg dW5zaWduZWQgKm91dF9jbG9jaykKIHsKLQljb25zdCB1bnNpZ25lZCBtaW5fY2xvY2sgPSAyNTAw MDsKLQl1bnNpZ25lZCBtYXhfY2xvY2ssIGRzX2Nsb2NrLCBjbG9jayA9IG1vZGUtPmNsb2NrOwor CWNvbnN0IHVuc2lnbmVkIGludCBtaW5fY2xvY2sgPSAyNTAwMDsKKwl1bnNpZ25lZCBpbnQgbWF4 X3JhdGUsIG1vZGVfcmF0ZSwgZHNfbWF4X2RvdGNsb2NrLCBjbG9jayA9IG1vZGUtPmNsb2NrOwor CWNvbnN0IHU4IGJwcCA9IGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJwYyAqIDM7CiAKIAlpZiAo bW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSAmJiAhb3V0cC0+Y2Fwcy5kcF9p bnRlcmxhY2UpCiAJCXJldHVybiBNT0RFX05PX0lOVEVSTEFDRTsKQEAgLTI0MCwxNyArMjQxLDE3 IEBAIG52NTBfZHBfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAog CWlmICgobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHXzNEX01BU0spID09IERSTV9NT0RFX0ZM QUdfM0RfRlJBTUVfUEFDS0lORykKIAkJY2xvY2sgKj0gMjsKIAotCW1heF9jbG9jayA9IG91dHAt PmRwLmxpbmtfbnIgKiBvdXRwLT5kcC5saW5rX2J3OwotCWRzX2Nsb2NrID0gZHJtX2RwX2Rvd25z dHJlYW1fbWF4X2RvdGNsb2NrKG91dHAtPmRwLmRwY2QsCi0JCQkJCQkgIG91dHAtPmRwLmRvd25z dHJlYW1fcG9ydHMpOwotCWlmIChkc19jbG9jaykKLQkJbWF4X2Nsb2NrID0gbWluKG1heF9jbG9j aywgZHNfY2xvY2spOworCW1heF9yYXRlID0gb3V0cC0+ZHAubGlua19uciAqIG91dHAtPmRwLmxp bmtfYnc7CisJbW9kZV9yYXRlID0gRElWX1JPVU5EX1VQKGNsb2NrICogYnBwLCA4KTsKKwlpZiAo bW9kZV9yYXRlID4gbWF4X3JhdGUpCisJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CisKKwlkc19t YXhfZG90Y2xvY2sgPSBkcm1fZHBfZG93bnN0cmVhbV9tYXhfZG90Y2xvY2sob3V0cC0+ZHAuZHBj ZCwgb3V0cC0+ZHAuZG93bnN0cmVhbV9wb3J0cyk7CisJaWYgKGRzX21heF9kb3RjbG9jayAmJiBj bG9jayA+IGRzX21heF9kb3RjbG9jaykKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKIAotCWNs b2NrID0gbW9kZS0+Y2xvY2sgKiAoY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uYnBjICogMykgLyAx MDsKIAlpZiAoY2xvY2sgPCBtaW5fY2xvY2spCiAJCXJldHVybiBNT0RFX0NMT0NLX0xPVzsKLQlp ZiAoY2xvY2sgPiBtYXhfY2xvY2spCi0JCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CiAKIAlpZiAo b3V0X2Nsb2NrKQogCQkqb3V0X2Nsb2NrID0gY2xvY2s7Ci0tIAoyLjI2LjIKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=