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=unavailable 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 274CFC47420 for ; Tue, 29 Sep 2020 22:31:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BD85B206CA for ; Tue, 29 Sep 2020 22:31:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="HSVGdASk" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728679AbgI2Wbv (ORCPT ); Tue, 29 Sep 2020 18:31:51 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:39637 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728505AbgI2Wbu (ORCPT ); Tue, 29 Sep 2020 18:31:50 -0400 Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1601418708; 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; bh=YkwAgkWJX6QtzYei4hnlo1IwT6pmSKXCDsQMxV6UrsY=; b=HSVGdASkINHCgITuqAFMQ8CmahMd9uNzK28zQETI2FqHfDb4wWWSW49Oj50kex0vmXEaJO VqLM6yOHrpNH0Pt5saabJlGVDZ+QlO7m5Af0YsNrJnI+7HCAVPnDsds6M9DLTqxflomznK HZzhEkpb6CXKiwFeoMe8mEQM/nBhWvg= 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-377-KEqnqiKPMZi0DBO_wJHiSA-1; Tue, 29 Sep 2020 18:31:44 -0400 X-MC-Unique: KEqnqiKPMZi0DBO_wJHiSA-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 144AE1018F63; Tue, 29 Sep 2020 22:31:43 +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 60BD355775; Tue, 29 Sep 2020 22:31:41 +0000 (UTC) From: Lyude Paul To: nouveau@lists.freedesktop.org Cc: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , stable@vger.kernel.org, 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 1/2] drm/nouveau/kms/nv50-: Get rid of bogus nouveau_conn_mode_valid() Date: Tue, 29 Sep 2020 18:31:31 -0400 Message-Id: <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 Ville also pointed out that I got a lot of the logic here wrong as well, whoops. While I don't think anyone's likely using 3D output with nouveau, the next patch will make nouveau_conn_mode_valid() make a lot less sense. So, let's just get rid of it and open-code it like before, while taking care to move the 3D frame packing calculations on the dot clock into the right place. Signed-off-by: Lyude Paul Fixes: d6a9efece724 ("drm/nouveau/kms/nv50-: Share DP SST mode_valid() handling with MST") Cc: Ville Syrjälä Cc: # v5.8+ --- drivers/gpu/drm/nouveau/nouveau_connector.c | 36 ++++++--------------- drivers/gpu/drm/nouveau/nouveau_dp.c | 16 ++++++--- 2 files changed, 21 insertions(+), 31 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c index 49dd0cbc332f..6f21f36719fc 100644 --- a/drivers/gpu/drm/nouveau/nouveau_connector.c +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c @@ -1023,29 +1023,6 @@ get_tmds_link_bandwidth(struct drm_connector *connector) return 112000 * duallink_scale; } -enum drm_mode_status -nouveau_conn_mode_clock_valid(const struct drm_display_mode *mode, - const unsigned min_clock, - const unsigned max_clock, - unsigned int *clock_out) -{ - unsigned int clock = mode->clock; - - if ((mode->flags & DRM_MODE_FLAG_3D_MASK) == - DRM_MODE_FLAG_3D_FRAME_PACKING) - clock *= 2; - - if (clock < min_clock) - return MODE_CLOCK_LOW; - if (clock > max_clock) - return MODE_CLOCK_HIGH; - - if (clock_out) - *clock_out = clock; - - return MODE_OK; -} - static enum drm_mode_status nouveau_connector_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode) @@ -1053,7 +1030,7 @@ nouveau_connector_mode_valid(struct drm_connector *connector, struct nouveau_connector *nv_connector = nouveau_connector(connector); struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder; struct drm_encoder *encoder = to_drm_encoder(nv_encoder); - unsigned min_clock = 25000, max_clock = min_clock; + unsigned int min_clock = 25000, max_clock = min_clock, clock = mode->clock; switch (nv_encoder->dcb->type) { case DCB_OUTPUT_LVDS: @@ -1082,8 +1059,15 @@ nouveau_connector_mode_valid(struct drm_connector *connector, return MODE_BAD; } - return nouveau_conn_mode_clock_valid(mode, min_clock, max_clock, - NULL); + if ((mode->flags & DRM_MODE_FLAG_3D_MASK) == DRM_MODE_FLAG_3D_FRAME_PACKING) + clock *= 2; + + if (clock < min_clock) + return MODE_CLOCK_LOW; + if (clock > max_clock) + return MODE_CLOCK_HIGH; + + return MODE_OK; } static struct drm_encoder * diff --git a/drivers/gpu/drm/nouveau/nouveau_dp.c b/drivers/gpu/drm/nouveau/nouveau_dp.c index 7b640e05bd4c..93e3751ad7f1 100644 --- a/drivers/gpu/drm/nouveau/nouveau_dp.c +++ b/drivers/gpu/drm/nouveau/nouveau_dp.c @@ -232,12 +232,14 @@ nv50_dp_mode_valid(struct drm_connector *connector, unsigned *out_clock) { const unsigned min_clock = 25000; - unsigned max_clock, ds_clock, clock; - enum drm_mode_status ret; + unsigned max_clock, ds_clock, clock = mode->clock; if (mode->flags & DRM_MODE_FLAG_INTERLACE && !outp->caps.dp_interlace) return MODE_NO_INTERLACE; + 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); @@ -245,9 +247,13 @@ nv50_dp_mode_valid(struct drm_connector *connector, max_clock = min(max_clock, ds_clock); clock = mode->clock * (connector->display_info.bpc * 3) / 10; - ret = nouveau_conn_mode_clock_valid(mode, min_clock, max_clock, - &clock); + if (clock < min_clock) + return MODE_CLOCK_LOW; + if (clock > max_clock) + return MODE_CLOCK_HIGH; + if (out_clock) *out_clock = clock; - return ret; + + return MODE_OK; } -- 2.26.2 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: [PATCH v2 1/2] drm/nouveau/kms/nv50-: Get rid of bogus nouveau_conn_mode_valid() Date: Tue, 29 Sep 2020 18:31:31 -0400 Message-ID: <20200929223132.333453-1-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Return-path: To: nouveau@lists.freedesktop.org Cc: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , stable@vger.kernel.org, Ben Skeggs , David Airlie , Daniel Vetter , "open list:DRM DRIVER FOR NVIDIA GEFORCE/QUADRO GPUS" , open list List-Id: nouveau.vger.kernel.org Ville also pointed out that I got a lot of the logic here wrong as well, whoops. While I don't think anyone's likely using 3D output with nouveau, the next patch will make nouveau_conn_mode_valid() make a lot less sense. So, let's just get rid of it and open-code it like before, while taking care to move the 3D frame packing calculations on the dot clock into the right place. Signed-off-by: Lyude Paul Fixes: d6a9efece724 ("drm/nouveau/kms/nv50-: Share DP SST mode_valid() handling with MST") Cc: Ville Syrjälä Cc: # v5.8+ --- drivers/gpu/drm/nouveau/nouveau_connector.c | 36 ++++++--------------- drivers/gpu/drm/nouveau/nouveau_dp.c | 16 ++++++--- 2 files changed, 21 insertions(+), 31 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c index 49dd0cbc332f..6f21f36719fc 100644 --- a/drivers/gpu/drm/nouveau/nouveau_connector.c +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c @@ -1023,29 +1023,6 @@ get_tmds_link_bandwidth(struct drm_connector *connector) return 112000 * duallink_scale; } -enum drm_mode_status -nouveau_conn_mode_clock_valid(const struct drm_display_mode *mode, - const unsigned min_clock, - const unsigned max_clock, - unsigned int *clock_out) -{ - unsigned int clock = mode->clock; - - if ((mode->flags & DRM_MODE_FLAG_3D_MASK) == - DRM_MODE_FLAG_3D_FRAME_PACKING) - clock *= 2; - - if (clock < min_clock) - return MODE_CLOCK_LOW; - if (clock > max_clock) - return MODE_CLOCK_HIGH; - - if (clock_out) - *clock_out = clock; - - return MODE_OK; -} - static enum drm_mode_status nouveau_connector_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode) @@ -1053,7 +1030,7 @@ nouveau_connector_mode_valid(struct drm_connector *connector, struct nouveau_connector *nv_connector = nouveau_connector(connector); struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder; struct drm_encoder *encoder = to_drm_encoder(nv_encoder); - unsigned min_clock = 25000, max_clock = min_clock; + unsigned int min_clock = 25000, max_clock = min_clock, clock = mode->clock; switch (nv_encoder->dcb->type) { case DCB_OUTPUT_LVDS: @@ -1082,8 +1059,15 @@ nouveau_connector_mode_valid(struct drm_connector *connector, return MODE_BAD; } - return nouveau_conn_mode_clock_valid(mode, min_clock, max_clock, - NULL); + if ((mode->flags & DRM_MODE_FLAG_3D_MASK) == DRM_MODE_FLAG_3D_FRAME_PACKING) + clock *= 2; + + if (clock < min_clock) + return MODE_CLOCK_LOW; + if (clock > max_clock) + return MODE_CLOCK_HIGH; + + return MODE_OK; } static struct drm_encoder * diff --git a/drivers/gpu/drm/nouveau/nouveau_dp.c b/drivers/gpu/drm/nouveau/nouveau_dp.c index 7b640e05bd4c..93e3751ad7f1 100644 --- a/drivers/gpu/drm/nouveau/nouveau_dp.c +++ b/drivers/gpu/drm/nouveau/nouveau_dp.c @@ -232,12 +232,14 @@ nv50_dp_mode_valid(struct drm_connector *connector, unsigned *out_clock) { const unsigned min_clock = 25000; - unsigned max_clock, ds_clock, clock; - enum drm_mode_status ret; + unsigned max_clock, ds_clock, clock = mode->clock; if (mode->flags & DRM_MODE_FLAG_INTERLACE && !outp->caps.dp_interlace) return MODE_NO_INTERLACE; + 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); @@ -245,9 +247,13 @@ nv50_dp_mode_valid(struct drm_connector *connector, max_clock = min(max_clock, ds_clock); clock = mode->clock * (connector->display_info.bpc * 3) / 10; - ret = nouveau_conn_mode_clock_valid(mode, min_clock, max_clock, - &clock); + if (clock < min_clock) + return MODE_CLOCK_LOW; + if (clock > max_clock) + return MODE_CLOCK_HIGH; + if (out_clock) *out_clock = clock; - return ret; + + return MODE_OK; } -- 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 0FED6C4727C for ; Tue, 29 Sep 2020 22:31:50 +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 905DF20756 for ; Tue, 29 Sep 2020 22:31:49 +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="BoCQkDbs" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 905DF20756 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 C961C89708; Tue, 29 Sep 2020 22:31:48 +0000 (UTC) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 85A4889708 for ; Tue, 29 Sep 2020 22:31:47 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1601418706; 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; bh=YkwAgkWJX6QtzYei4hnlo1IwT6pmSKXCDsQMxV6UrsY=; b=BoCQkDbsIos6Afxx+8ByVDMio5ZfFUrCWQc4/MpxUpHcQZBiYh6zTSHuS2ScNfisOrfVV4 /6BRcd6T6EAUpDEhru2UGfnhW3VQG37ydvP3FFylfT/f+pmZx5wwlGH3adaKPUtS+MoHxn HQgUo1NYWSn18lLbhvc6yOeIyM1jGr4= 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-377-KEqnqiKPMZi0DBO_wJHiSA-1; Tue, 29 Sep 2020 18:31:44 -0400 X-MC-Unique: KEqnqiKPMZi0DBO_wJHiSA-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 144AE1018F63; Tue, 29 Sep 2020 22:31:43 +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 60BD355775; Tue, 29 Sep 2020 22:31:41 +0000 (UTC) From: Lyude Paul To: nouveau@lists.freedesktop.org Subject: [PATCH v2 1/2] drm/nouveau/kms/nv50-: Get rid of bogus nouveau_conn_mode_valid() Date: Tue, 29 Sep 2020 18:31:31 -0400 Message-Id: <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" , stable@vger.kernel.org, Ben Skeggs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" VmlsbGUgYWxzbyBwb2ludGVkIG91dCB0aGF0IEkgZ290IGEgbG90IG9mIHRoZSBsb2dpYyBoZXJl IHdyb25nIGFzIHdlbGwsIHdob29wcy4KV2hpbGUgSSBkb24ndCB0aGluayBhbnlvbmUncyBsaWtl bHkgdXNpbmcgM0Qgb3V0cHV0IHdpdGggbm91dmVhdSwgdGhlIG5leHQgcGF0Y2gKd2lsbCBtYWtl IG5vdXZlYXVfY29ubl9tb2RlX3ZhbGlkKCkgbWFrZSBhIGxvdCBsZXNzIHNlbnNlLiBTbywgbGV0 J3MganVzdCBnZXQKcmlkIG9mIGl0IGFuZCBvcGVuLWNvZGUgaXQgbGlrZSBiZWZvcmUsIHdoaWxl IHRha2luZyBjYXJlIHRvIG1vdmUgdGhlIDNEIGZyYW1lCnBhY2tpbmcgY2FsY3VsYXRpb25zIG9u IHRoZSBkb3QgY2xvY2sgaW50byB0aGUgcmlnaHQgcGxhY2UuCgpTaWduZWQtb2ZmLWJ5OiBMeXVk ZSBQYXVsIDxseXVkZUByZWRoYXQuY29tPgpGaXhlczogZDZhOWVmZWNlNzI0ICgiZHJtL25vdXZl YXUva21zL252NTAtOiBTaGFyZSBEUCBTU1QgbW9kZV92YWxpZCgpIGhhbmRsaW5nIHdpdGggTVNU IikKQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+CkNj OiA8c3RhYmxlQHZnZXIua2VybmVsLm9yZz4gIyB2NS44KwotLS0KIGRyaXZlcnMvZ3B1L2RybS9u b3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMgfCAzNiArKysrKystLS0tLS0tLS0tLS0tLS0KIGRy aXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHAuYyAgICAgICAgfCAxNiArKysrKystLS0K IDIgZmlsZXMgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKSwgMzEgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYyBiL2Ry aXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMKaW5kZXggNDlkZDBjYmMz MzJmLi42ZjIxZjM2NzE5ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25v dXZlYXVfY29ubmVjdG9yLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9j b25uZWN0b3IuYwpAQCAtMTAyMywyOSArMTAyMyw2IEBAIGdldF90bWRzX2xpbmtfYmFuZHdpZHRo KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiAJCXJldHVybiAxMTIwMDAgKiBkdWFs bGlua19zY2FsZTsKIH0KIAotZW51bSBkcm1fbW9kZV9zdGF0dXMKLW5vdXZlYXVfY29ubl9tb2Rl X2Nsb2NrX3ZhbGlkKGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQkJICAg ICAgY29uc3QgdW5zaWduZWQgbWluX2Nsb2NrLAotCQkJICAgICAgY29uc3QgdW5zaWduZWQgbWF4 X2Nsb2NrLAotCQkJICAgICAgdW5zaWduZWQgaW50ICpjbG9ja19vdXQpCi17Ci0JdW5zaWduZWQg aW50IGNsb2NrID0gbW9kZS0+Y2xvY2s7Ci0KLQlpZiAoKG1vZGUtPmZsYWdzICYgRFJNX01PREVf RkxBR18zRF9NQVNLKSA9PQotCSAgICBEUk1fTU9ERV9GTEFHXzNEX0ZSQU1FX1BBQ0tJTkcpCi0J CWNsb2NrICo9IDI7Ci0KLQlpZiAoY2xvY2sgPCBtaW5fY2xvY2spCi0JCXJldHVybiBNT0RFX0NM T0NLX0xPVzsKLQlpZiAoY2xvY2sgPiBtYXhfY2xvY2spCi0JCXJldHVybiBNT0RFX0NMT0NLX0hJ R0g7Ci0KLQlpZiAoY2xvY2tfb3V0KQotCQkqY2xvY2tfb3V0ID0gY2xvY2s7Ci0KLQlyZXR1cm4g TU9ERV9PSzsKLX0KLQogc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzCiBub3V2ZWF1X2Nvbm5l Y3Rvcl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCQkgICAg IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQpAQCAtMTA1Myw3ICsxMDMwLDcgQEAgbm91 dmVhdV9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y LAogCXN0cnVjdCBub3V2ZWF1X2Nvbm5lY3RvciAqbnZfY29ubmVjdG9yID0gbm91dmVhdV9jb25u ZWN0b3IoY29ubmVjdG9yKTsKIAlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0g bnZfY29ubmVjdG9yLT5kZXRlY3RlZF9lbmNvZGVyOwogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2RlciA9IHRvX2RybV9lbmNvZGVyKG52X2VuY29kZXIpOwotCXVuc2lnbmVkIG1pbl9jbG9jayA9 IDI1MDAwLCBtYXhfY2xvY2sgPSBtaW5fY2xvY2s7CisJdW5zaWduZWQgaW50IG1pbl9jbG9jayA9 IDI1MDAwLCBtYXhfY2xvY2sgPSBtaW5fY2xvY2ssIGNsb2NrID0gbW9kZS0+Y2xvY2s7CiAKIAlz d2l0Y2ggKG52X2VuY29kZXItPmRjYi0+dHlwZSkgewogCWNhc2UgRENCX09VVFBVVF9MVkRTOgpA QCAtMTA4Miw4ICsxMDU5LDE1IEBAIG5vdXZlYXVfY29ubmVjdG9yX21vZGVfdmFsaWQoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJcmV0dXJuIE1PREVfQkFEOwogCX0KIAotCXJl dHVybiBub3V2ZWF1X2Nvbm5fbW9kZV9jbG9ja192YWxpZChtb2RlLCBtaW5fY2xvY2ssIG1heF9j bG9jaywKLQkJCQkJICAgICBOVUxMKTsKKwlpZiAoKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxB R18zRF9NQVNLKSA9PSBEUk1fTU9ERV9GTEFHXzNEX0ZSQU1FX1BBQ0tJTkcpCisJCWNsb2NrICo9 IDI7CisKKwlpZiAoY2xvY2sgPCBtaW5fY2xvY2spCisJCXJldHVybiBNT0RFX0NMT0NLX0xPVzsK KwlpZiAoY2xvY2sgPiBtYXhfY2xvY2spCisJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CisKKwly ZXR1cm4gTU9ERV9PSzsKIH0KIAogc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAqCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RwLmMgYi9kcml2ZXJzL2dwdS9k cm0vbm91dmVhdS9ub3V2ZWF1X2RwLmMKaW5kZXggN2I2NDBlMDViZDRjLi45M2UzNzUxYWQ3ZjEg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHAuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RwLmMKQEAgLTIzMiwxMiArMjMyLDE0IEBA IG52NTBfZHBfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkg ICB1bnNpZ25lZCAqb3V0X2Nsb2NrKQogewogCWNvbnN0IHVuc2lnbmVkIG1pbl9jbG9jayA9IDI1 MDAwOwotCXVuc2lnbmVkIG1heF9jbG9jaywgZHNfY2xvY2ssIGNsb2NrOwotCWVudW0gZHJtX21v ZGVfc3RhdHVzIHJldDsKKwl1bnNpZ25lZCBtYXhfY2xvY2ssIGRzX2Nsb2NrLCBjbG9jayA9IG1v ZGUtPmNsb2NrOwogCiAJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0Ug JiYgIW91dHAtPmNhcHMuZHBfaW50ZXJsYWNlKQogCQlyZXR1cm4gTU9ERV9OT19JTlRFUkxBQ0U7 CiAKKwlpZiAoKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR18zRF9NQVNLKSA9PSBEUk1fTU9E RV9GTEFHXzNEX0ZSQU1FX1BBQ0tJTkcpCisJCWNsb2NrICo9IDI7CisKIAltYXhfY2xvY2sgPSBv dXRwLT5kcC5saW5rX25yICogb3V0cC0+ZHAubGlua19idzsKIAlkc19jbG9jayA9IGRybV9kcF9k b3duc3RyZWFtX21heF9kb3RjbG9jayhvdXRwLT5kcC5kcGNkLAogCQkJCQkJICBvdXRwLT5kcC5k b3duc3RyZWFtX3BvcnRzKTsKQEAgLTI0NSw5ICsyNDcsMTMgQEAgbnY1MF9kcF9tb2RlX3ZhbGlk KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCW1heF9jbG9jayA9IG1pbihtYXhf Y2xvY2ssIGRzX2Nsb2NrKTsKIAogCWNsb2NrID0gbW9kZS0+Y2xvY2sgKiAoY29ubmVjdG9yLT5k aXNwbGF5X2luZm8uYnBjICogMykgLyAxMDsKLQlyZXQgPSBub3V2ZWF1X2Nvbm5fbW9kZV9jbG9j a192YWxpZChtb2RlLCBtaW5fY2xvY2ssIG1heF9jbG9jaywKLQkJCQkJICAgICZjbG9jayk7CisJ aWYgKGNsb2NrIDwgbWluX2Nsb2NrKQorCQlyZXR1cm4gTU9ERV9DTE9DS19MT1c7CisJaWYgKGNs b2NrID4gbWF4X2Nsb2NrKQorCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOworCiAJaWYgKG91dF9j bG9jaykKIAkJKm91dF9jbG9jayA9IGNsb2NrOwotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gTU9E RV9PSzsKIH0KLS0gCjIuMjYuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v ZHJpLWRldmVsCg==