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.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT 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 86EADCA9EB6 for ; Wed, 23 Oct 2019 15:45:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5B1652086D for ; Wed, 23 Oct 2019 15:45:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2436467AbfJWPp2 (ORCPT ); Wed, 23 Oct 2019 11:45:28 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:37738 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2436464AbfJWPp2 (ORCPT ); Wed, 23 Oct 2019 11:45:28 -0400 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:5cf4:84a1:2763:fe0d]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 22D9828F932; Wed, 23 Oct 2019 16:45:27 +0100 (BST) From: Boris Brezillon To: dri-devel@lists.freedesktop.org Cc: Lucas Stach , Chris Healy , Andrey Smirnov , Nikita Yushchenko , kernel@collabora.com, Daniel Vetter , Inki Dae , Joonyoung Shim , Seung-Woo Kim , Kyungmin Park , Thierry Reding , Sam Ravnborg , Philipp Zabel , Rob Clark , Andrzej Hajda , Neil Armstrong , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Rob Herring , Mark Rutland , devicetree@vger.kernel.org, Boris Brezillon Subject: [PATCH v3 11/21] drm/bridge: Patch atomic hooks to take a drm_bridge_state Date: Wed, 23 Oct 2019 17:45:02 +0200 Message-Id: <20191023154512.9762-12-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191023154512.9762-1-boris.brezillon@collabora.com> References: <20191023154512.9762-1-boris.brezillon@collabora.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org This way the drm_bridge_funcs interface is consistent with the rest of the subsystem. The only driver implementing those hooks (analogix DP) is patched too. Signed-off-by: Boris Brezillon --- Changes in v3: * Old state clarification moved to a separate patch Changes in v2: * Pass the old bridge state --- .../drm/bridge/analogix/analogix_dp_core.c | 12 ++-- drivers/gpu/drm/drm_bridge.c | 61 +++++++++++++++---- include/drm/drm_bridge.h | 24 ++++---- 3 files changed, 69 insertions(+), 28 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c index bb411fe52ae8..e438e757f2ce 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -1290,8 +1290,9 @@ struct drm_crtc *analogix_dp_get_new_crtc(struct analogix_dp_device *dp, } static void analogix_dp_bridge_atomic_pre_enable(struct drm_bridge *bridge, - struct drm_atomic_state *state) + struct drm_bridge_state *bstate) { + struct drm_atomic_state *state = bstate->base.state; struct analogix_dp_device *dp = bridge->driver_private; struct drm_crtc *crtc; struct drm_crtc_state *old_crtc_state; @@ -1367,8 +1368,9 @@ static int analogix_dp_set_bridge(struct analogix_dp_device *dp) } static void analogix_dp_bridge_atomic_enable(struct drm_bridge *bridge, - struct drm_atomic_state *state) + struct drm_bridge_state *bstate) { + struct drm_atomic_state *state = bstate->base.state; struct analogix_dp_device *dp = bridge->driver_private; struct drm_crtc *crtc; struct drm_crtc_state *old_crtc_state; @@ -1441,8 +1443,9 @@ static void analogix_dp_bridge_disable(struct drm_bridge *bridge) } static void analogix_dp_bridge_atomic_disable(struct drm_bridge *bridge, - struct drm_atomic_state *state) + struct drm_bridge_state *bstate) { + struct drm_atomic_state *state = bstate->base.state; struct analogix_dp_device *dp = bridge->driver_private; struct drm_crtc *crtc; struct drm_crtc_state *new_crtc_state = NULL; @@ -1465,8 +1468,9 @@ static void analogix_dp_bridge_atomic_disable(struct drm_bridge *bridge, static void analogix_dp_bridge_atomic_post_disable(struct drm_bridge *bridge, - struct drm_atomic_state *state) + struct drm_bridge_state *bstate) { + struct drm_atomic_state *state = bstate->base.state; struct analogix_dp_device *dp = bridge->driver_private; struct drm_crtc *crtc; struct drm_crtc_state *new_crtc_state; diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index ca74bfe028c9..377866e3214f 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -468,10 +468,19 @@ void drm_atomic_bridge_chain_disable(struct drm_bridge *bridge, encoder = bridge->encoder; list_for_each_entry_reverse(iter, &encoder->bridge_chain, chain_node) { - if (iter->funcs->atomic_disable) - iter->funcs->atomic_disable(iter, old_state); - else if (iter->funcs->disable) + if (iter->funcs->atomic_disable) { + struct drm_bridge_state *old_bridge_state; + + old_bridge_state = + drm_atomic_get_old_bridge_state(old_state, + iter); + if (WARN_ON(!old_bridge_state)) + return; + + iter->funcs->atomic_disable(iter, old_bridge_state); + } else if (iter->funcs->disable) { iter->funcs->disable(iter); + } if (iter == bridge) break; @@ -503,10 +512,20 @@ void drm_atomic_bridge_chain_post_disable(struct drm_bridge *bridge, encoder = bridge->encoder; list_for_each_entry_from(bridge, &encoder->bridge_chain, chain_node) { - if (bridge->funcs->atomic_post_disable) - bridge->funcs->atomic_post_disable(bridge, old_state); - else if (bridge->funcs->post_disable) + if (bridge->funcs->atomic_post_disable) { + struct drm_bridge_state *old_bridge_state; + + old_bridge_state = + drm_atomic_get_old_bridge_state(old_state, + bridge); + if (WARN_ON(!old_bridge_state)) + return; + + bridge->funcs->atomic_post_disable(bridge, + old_bridge_state); + } else if (bridge->funcs->post_disable) { bridge->funcs->post_disable(bridge); + } } } EXPORT_SYMBOL(drm_atomic_bridge_chain_post_disable); @@ -536,10 +555,19 @@ void drm_atomic_bridge_chain_pre_enable(struct drm_bridge *bridge, encoder = bridge->encoder; list_for_each_entry_reverse(iter, &bridge->encoder->bridge_chain, chain_node) { - if (iter->funcs->atomic_pre_enable) - iter->funcs->atomic_pre_enable(iter, old_state); - else if (iter->funcs->pre_enable) + if (iter->funcs->atomic_pre_enable) { + struct drm_bridge_state *old_bridge_state; + + old_bridge_state = + drm_atomic_get_old_bridge_state(old_state, + iter); + if (WARN_ON(!old_bridge_state)) + return; + + iter->funcs->atomic_pre_enable(iter, old_bridge_state); + } else if (iter->funcs->pre_enable) { iter->funcs->pre_enable(iter); + } if (iter == bridge) break; @@ -570,10 +598,19 @@ void drm_atomic_bridge_chain_enable(struct drm_bridge *bridge, encoder = bridge->encoder; list_for_each_entry_from(bridge, &bridge->encoder->bridge_chain, chain_node) { - if (bridge->funcs->atomic_enable) - bridge->funcs->atomic_enable(bridge, old_state); - else if (bridge->funcs->enable) + if (bridge->funcs->atomic_enable) { + struct drm_bridge_state *old_bridge_state; + + old_bridge_state = + drm_atomic_get_old_bridge_state(old_state, + bridge); + if (WARN_ON(!old_bridge_state)) + return; + + bridge->funcs->atomic_enable(bridge, old_bridge_state); + } else if (bridge->funcs->enable) { bridge->funcs->enable(bridge); + } } } EXPORT_SYMBOL(drm_atomic_bridge_chain_enable); diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index e814e6d6e7c2..b1f557d8dba9 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -266,8 +266,8 @@ struct drm_bridge_funcs { * bridge's @atomic_pre_enable or @pre_enable function. If the preceding * element is a &drm_encoder it's called right before the encoder's * &drm_encoder_helper_funcs.atomic_enable hook. - * This hook is passed the old atomic state (atomic state after new/old - * states have been swapped). + * This hook is passed the old bridge state (the new one can be + * retrieved from bridge->state). * * The display pipe (i.e. clocks and timing signals) feeding this bridge * will not yet be running when this callback is called. The bridge must @@ -283,7 +283,7 @@ struct drm_bridge_funcs { * The @atomic_pre_enable callback is optional. */ void (*atomic_pre_enable)(struct drm_bridge *bridge, - struct drm_atomic_state *old_state); + struct drm_bridge_state *old_bridge_state); /** * @atomic_enable: @@ -294,8 +294,8 @@ struct drm_bridge_funcs { * bridge's @atomic_enable or @enable function. If the preceding element * is a &drm_encoder it's called right after the encoder's * &drm_encoder_helper_funcs.atomic_enable hook. - * This hook is passed the old atomic state (atomic state after new/old - * states have been swapped). + * This hook is passed the old bridge state (the new one can be + * retrieved from bridge->state). * * The bridge can assume that the display pipe (i.e. clocks and timing * signals) feeding it is running when this callback is called. This @@ -310,7 +310,7 @@ struct drm_bridge_funcs { * The @atomic_enable callback is optional. */ void (*atomic_enable)(struct drm_bridge *bridge, - struct drm_atomic_state *old_state); + struct drm_bridge_state *old_bridge_state); /** * @atomic_disable: * @@ -320,8 +320,8 @@ struct drm_bridge_funcs { * bridge's @atomic_disable or @disable vfunc. If the preceding element * is a &drm_encoder it's called right before the * &drm_encoder_helper_funcs.atomic_disable hook. - * This hook is passed the old atomic state (atomic state after new/old - * states have been swapped). + * This hook is passed the old bridge state (the new one can be + * retrieved from bridge->state). * * The bridge can assume that the display pipe (i.e. clocks and timing * signals) feeding it is still running when this callback is called. @@ -335,7 +335,7 @@ struct drm_bridge_funcs { * The @atomic_disable callback is optional. */ void (*atomic_disable)(struct drm_bridge *bridge, - struct drm_atomic_state *old_state); + struct drm_bridge_state *old_bridge_state); /** * @atomic_post_disable: @@ -346,8 +346,8 @@ struct drm_bridge_funcs { * @atomic_post_disable or @post_disable function. If the preceding * element is a &drm_encoder it's called right after the encoder's * &drm_encoder_helper_funcs.atomic_disable hook. - * This hook is passed the old atomic state (atomic state after new/old - * states have been swapped). + * This hook is passed the old bridge state (the new one can be + * retrieved from bridge->state). * * The bridge must assume that the display pipe (i.e. clocks and timing * signals) feeding it is no longer running when this callback is @@ -363,7 +363,7 @@ struct drm_bridge_funcs { * The @atomic_post_disable callback is optional. */ void (*atomic_post_disable)(struct drm_bridge *bridge, - struct drm_atomic_state *old_state); + struct drm_bridge_state *old_bridge_state); /** * @atomic_duplicate_state: -- 2.21.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: [PATCH v3 11/21] drm/bridge: Patch atomic hooks to take a drm_bridge_state Date: Wed, 23 Oct 2019 17:45:02 +0200 Message-ID: <20191023154512.9762-12-boris.brezillon@collabora.com> References: <20191023154512.9762-1-boris.brezillon@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3]) by gabe.freedesktop.org (Postfix) with ESMTPS id E9FCD6EB1E for ; Wed, 23 Oct 2019 15:45:28 +0000 (UTC) In-Reply-To: <20191023154512.9762-1-boris.brezillon@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Mark Rutland , Neil Armstrong , Thierry Reding , Laurent Pinchart , kernel@collabora.com, Sam Ravnborg , Nikita Yushchenko , Andrey Smirnov , Kyungmin Park , Chris Healy , devicetree@vger.kernel.org, Jonas Karlman , Rob Herring , Jernej Skrabec , Seung-Woo Kim , Boris Brezillon List-Id: dri-devel@lists.freedesktop.org VGhpcyB3YXkgdGhlIGRybV9icmlkZ2VfZnVuY3MgaW50ZXJmYWNlIGlzIGNvbnNpc3RlbnQgd2l0 aCB0aGUgcmVzdCBvZgp0aGUgc3Vic3lzdGVtLgoKVGhlIG9ubHkgZHJpdmVyIGltcGxlbWVudGlu ZyB0aG9zZSBob29rcyAoYW5hbG9naXggRFApIGlzIHBhdGNoZWQgdG9vLgoKU2lnbmVkLW9mZi1i eTogQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AY29sbGFib3JhLmNvbT4KLS0tCkNo YW5nZXMgaW4gdjM6CiogT2xkIHN0YXRlIGNsYXJpZmljYXRpb24gbW92ZWQgdG8gYSBzZXBhcmF0 ZSBwYXRjaAoKQ2hhbmdlcyBpbiB2MjoKKiBQYXNzIHRoZSBvbGQgYnJpZGdlIHN0YXRlCi0tLQog Li4uL2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfY29yZS5jICAgIHwgMTIgKystLQog ZHJpdmVycy9ncHUvZHJtL2RybV9icmlkZ2UuYyAgICAgICAgICAgICAgICAgIHwgNjEgKysrKysr KysrKysrKysrLS0tLQogaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oICAgICAgICAgICAgICAgICAg ICAgIHwgMjQgKysrKy0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgNjkgaW5zZXJ0aW9ucygrKSwgMjgg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dp eC9hbmFsb2dpeF9kcF9jb3JlLmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2Fu YWxvZ2l4X2RwX2NvcmUuYwppbmRleCBiYjQxMWZlNTJhZTguLmU0MzhlNzU3ZjJjZSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9kcF9jb3JlLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9kcF9jb3JlLmMK QEAgLTEyOTAsOCArMTI5MCw5IEBAIHN0cnVjdCBkcm1fY3J0YyAqYW5hbG9naXhfZHBfZ2V0X25l d19jcnRjKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwLAogfQogCiBzdGF0aWMgdm9pZCBh bmFsb2dpeF9kcF9icmlkZ2VfYXRvbWljX3ByZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJy aWRnZSwKLQkJCQkJCSBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCisJCQkJCQkgc3Ry dWN0IGRybV9icmlkZ2Vfc3RhdGUgKmJzdGF0ZSkKIHsKKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUgPSBic3RhdGUtPmJhc2Uuc3RhdGU7CiAJc3RydWN0IGFuYWxvZ2l4X2RwX2Rldmlj ZSAqZHAgPSBicmlkZ2UtPmRyaXZlcl9wcml2YXRlOwogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsK IAlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlOwpAQCAtMTM2Nyw4ICsxMzY4 LDkgQEAgc3RhdGljIGludCBhbmFsb2dpeF9kcF9zZXRfYnJpZGdlKHN0cnVjdCBhbmFsb2dpeF9k cF9kZXZpY2UgKmRwKQogfQogCiBzdGF0aWMgdm9pZCBhbmFsb2dpeF9kcF9icmlkZ2VfYXRvbWlj X2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAotCQkJCQkgICAgIHN0cnVjdCBkcm1f YXRvbWljX3N0YXRlICpzdGF0ZSkKKwkJCQkJICAgICBzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAq YnN0YXRlKQogeworCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IGJzdGF0ZS0+YmFz ZS5zdGF0ZTsKIAlzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCA9IGJyaWRnZS0+ZHJpdmVy X3ByaXZhdGU7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCXN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqb2xkX2NydGNfc3RhdGU7CkBAIC0xNDQxLDggKzE0NDMsOSBAQCBzdGF0aWMgdm9pZCBhbmFs b2dpeF9kcF9icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQogfQogCiBz dGF0aWMgdm9pZCBhbmFsb2dpeF9kcF9icmlkZ2VfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9i cmlkZ2UgKmJyaWRnZSwKLQkJCQkJICAgICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl KQorCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAqYnN0YXRlKQogeworCXN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IGJzdGF0ZS0+YmFzZS5zdGF0ZTsKIAlzdHJ1Y3Qg YW5hbG9naXhfZHBfZGV2aWNlICpkcCA9IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7CiAJc3RydWN0 IGRybV9jcnRjICpjcnRjOwogCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGUg PSBOVUxMOwpAQCAtMTQ2NSw4ICsxNDY4LDkgQEAgc3RhdGljIHZvaWQgYW5hbG9naXhfZHBfYnJp ZGdlX2F0b21pY19kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCiAKIHN0YXRpYwog dm9pZCBhbmFsb2dpeF9kcF9icmlkZ2VfYXRvbWljX3Bvc3RfZGlzYWJsZShzdHJ1Y3QgZHJtX2Jy aWRnZSAqYnJpZGdlLAotCQkJCQkgICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQor CQkJCQkgICAgc3RydWN0IGRybV9icmlkZ2Vfc3RhdGUgKmJzdGF0ZSkKIHsKKwlzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUgPSBic3RhdGUtPmJhc2Uuc3RhdGU7CiAJc3RydWN0IGFuYWxv Z2l4X2RwX2RldmljZSAqZHAgPSBicmlkZ2UtPmRyaXZlcl9wcml2YXRlOwogCXN0cnVjdCBkcm1f Y3J0YyAqY3J0YzsKIAlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlOwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9icmlkZ2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fYnJpZGdlLmMKaW5kZXggY2E3NGJmZTAyOGM5Li4zNzc4NjZlMzIxNGYgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9i cmlkZ2UuYwpAQCAtNDY4LDEwICs0NjgsMTkgQEAgdm9pZCBkcm1fYXRvbWljX2JyaWRnZV9jaGFp bl9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCiAJZW5jb2RlciA9IGJyaWRnZS0+ ZW5jb2RlcjsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoaXRlciwgJmVuY29kZXItPmJy aWRnZV9jaGFpbiwKIAkJCQkgICAgY2hhaW5fbm9kZSkgewotCQlpZiAoaXRlci0+ZnVuY3MtPmF0 b21pY19kaXNhYmxlKQotCQkJaXRlci0+ZnVuY3MtPmF0b21pY19kaXNhYmxlKGl0ZXIsIG9sZF9z dGF0ZSk7Ci0JCWVsc2UgaWYgKGl0ZXItPmZ1bmNzLT5kaXNhYmxlKQorCQlpZiAoaXRlci0+ZnVu Y3MtPmF0b21pY19kaXNhYmxlKSB7CisJCQlzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAqb2xkX2Jy aWRnZV9zdGF0ZTsKKworCQkJb2xkX2JyaWRnZV9zdGF0ZSA9CisJCQkJZHJtX2F0b21pY19nZXRf b2xkX2JyaWRnZV9zdGF0ZShvbGRfc3RhdGUsCisJCQkJCQkJCWl0ZXIpOworCQkJaWYgKFdBUk5f T04oIW9sZF9icmlkZ2Vfc3RhdGUpKQorCQkJCXJldHVybjsKKworCQkJaXRlci0+ZnVuY3MtPmF0 b21pY19kaXNhYmxlKGl0ZXIsIG9sZF9icmlkZ2Vfc3RhdGUpOworCQl9IGVsc2UgaWYgKGl0ZXIt PmZ1bmNzLT5kaXNhYmxlKSB7CiAJCQlpdGVyLT5mdW5jcy0+ZGlzYWJsZShpdGVyKTsKKwkJfQog CiAJCWlmIChpdGVyID09IGJyaWRnZSkKIAkJCWJyZWFrOwpAQCAtNTAzLDEwICs1MTIsMjAgQEAg dm9pZCBkcm1fYXRvbWljX2JyaWRnZV9jaGFpbl9wb3N0X2Rpc2FibGUoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSwKIAllbmNvZGVyID0gYnJpZGdlLT5lbmNvZGVyOwogCWxpc3RfZm9yX2VhY2hf ZW50cnlfZnJvbShicmlkZ2UsICZlbmNvZGVyLT5icmlkZ2VfY2hhaW4sCiAJCQkJIGNoYWluX25v ZGUpIHsKLQkJaWYgKGJyaWRnZS0+ZnVuY3MtPmF0b21pY19wb3N0X2Rpc2FibGUpCi0JCQlicmlk Z2UtPmZ1bmNzLT5hdG9taWNfcG9zdF9kaXNhYmxlKGJyaWRnZSwgb2xkX3N0YXRlKTsKLQkJZWxz ZSBpZiAoYnJpZGdlLT5mdW5jcy0+cG9zdF9kaXNhYmxlKQorCQlpZiAoYnJpZGdlLT5mdW5jcy0+ YXRvbWljX3Bvc3RfZGlzYWJsZSkgeworCQkJc3RydWN0IGRybV9icmlkZ2Vfc3RhdGUgKm9sZF9i cmlkZ2Vfc3RhdGU7CisKKwkJCW9sZF9icmlkZ2Vfc3RhdGUgPQorCQkJCWRybV9hdG9taWNfZ2V0 X29sZF9icmlkZ2Vfc3RhdGUob2xkX3N0YXRlLAorCQkJCQkJCQlicmlkZ2UpOworCQkJaWYgKFdB Uk5fT04oIW9sZF9icmlkZ2Vfc3RhdGUpKQorCQkJCXJldHVybjsKKworCQkJYnJpZGdlLT5mdW5j cy0+YXRvbWljX3Bvc3RfZGlzYWJsZShicmlkZ2UsCisJCQkJCQkJICAgb2xkX2JyaWRnZV9zdGF0 ZSk7CisJCX0gZWxzZSBpZiAoYnJpZGdlLT5mdW5jcy0+cG9zdF9kaXNhYmxlKSB7CiAJCQlicmlk Z2UtPmZ1bmNzLT5wb3N0X2Rpc2FibGUoYnJpZGdlKTsKKwkJfQogCX0KIH0KIEVYUE9SVF9TWU1C T0woZHJtX2F0b21pY19icmlkZ2VfY2hhaW5fcG9zdF9kaXNhYmxlKTsKQEAgLTUzNiwxMCArNTU1 LDE5IEBAIHZvaWQgZHJtX2F0b21pY19icmlkZ2VfY2hhaW5fcHJlX2VuYWJsZShzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlLAogCWVuY29kZXIgPSBicmlkZ2UtPmVuY29kZXI7CiAJbGlzdF9mb3Jf ZWFjaF9lbnRyeV9yZXZlcnNlKGl0ZXIsICZicmlkZ2UtPmVuY29kZXItPmJyaWRnZV9jaGFpbiwK IAkJCQkgICAgY2hhaW5fbm9kZSkgewotCQlpZiAoaXRlci0+ZnVuY3MtPmF0b21pY19wcmVfZW5h YmxlKQotCQkJaXRlci0+ZnVuY3MtPmF0b21pY19wcmVfZW5hYmxlKGl0ZXIsIG9sZF9zdGF0ZSk7 Ci0JCWVsc2UgaWYgKGl0ZXItPmZ1bmNzLT5wcmVfZW5hYmxlKQorCQlpZiAoaXRlci0+ZnVuY3Mt PmF0b21pY19wcmVfZW5hYmxlKSB7CisJCQlzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAqb2xkX2Jy aWRnZV9zdGF0ZTsKKworCQkJb2xkX2JyaWRnZV9zdGF0ZSA9CisJCQkJZHJtX2F0b21pY19nZXRf b2xkX2JyaWRnZV9zdGF0ZShvbGRfc3RhdGUsCisJCQkJCQkJCWl0ZXIpOworCQkJaWYgKFdBUk5f T04oIW9sZF9icmlkZ2Vfc3RhdGUpKQorCQkJCXJldHVybjsKKworCQkJaXRlci0+ZnVuY3MtPmF0 b21pY19wcmVfZW5hYmxlKGl0ZXIsIG9sZF9icmlkZ2Vfc3RhdGUpOworCQl9IGVsc2UgaWYgKGl0 ZXItPmZ1bmNzLT5wcmVfZW5hYmxlKSB7CiAJCQlpdGVyLT5mdW5jcy0+cHJlX2VuYWJsZShpdGVy KTsKKwkJfQogCiAJCWlmIChpdGVyID09IGJyaWRnZSkKIAkJCWJyZWFrOwpAQCAtNTcwLDEwICs1 OTgsMTkgQEAgdm9pZCBkcm1fYXRvbWljX2JyaWRnZV9jaGFpbl9lbmFibGUoc3RydWN0IGRybV9i cmlkZ2UgKmJyaWRnZSwKIAllbmNvZGVyID0gYnJpZGdlLT5lbmNvZGVyOwogCWxpc3RfZm9yX2Vh Y2hfZW50cnlfZnJvbShicmlkZ2UsICZicmlkZ2UtPmVuY29kZXItPmJyaWRnZV9jaGFpbiwKIAkJ CQkgY2hhaW5fbm9kZSkgewotCQlpZiAoYnJpZGdlLT5mdW5jcy0+YXRvbWljX2VuYWJsZSkKLQkJ CWJyaWRnZS0+ZnVuY3MtPmF0b21pY19lbmFibGUoYnJpZGdlLCBvbGRfc3RhdGUpOwotCQllbHNl IGlmIChicmlkZ2UtPmZ1bmNzLT5lbmFibGUpCisJCWlmIChicmlkZ2UtPmZ1bmNzLT5hdG9taWNf ZW5hYmxlKSB7CisJCQlzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAqb2xkX2JyaWRnZV9zdGF0ZTsK KworCQkJb2xkX2JyaWRnZV9zdGF0ZSA9CisJCQkJZHJtX2F0b21pY19nZXRfb2xkX2JyaWRnZV9z dGF0ZShvbGRfc3RhdGUsCisJCQkJCQkJCWJyaWRnZSk7CisJCQlpZiAoV0FSTl9PTighb2xkX2Jy aWRnZV9zdGF0ZSkpCisJCQkJcmV0dXJuOworCisJCQlicmlkZ2UtPmZ1bmNzLT5hdG9taWNfZW5h YmxlKGJyaWRnZSwgb2xkX2JyaWRnZV9zdGF0ZSk7CisJCX0gZWxzZSBpZiAoYnJpZGdlLT5mdW5j cy0+ZW5hYmxlKSB7CiAJCQlicmlkZ2UtPmZ1bmNzLT5lbmFibGUoYnJpZGdlKTsKKwkJfQogCX0K IH0KIEVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19icmlkZ2VfY2hhaW5fZW5hYmxlKTsKZGlmZiAt LWdpdCBhL2luY2x1ZGUvZHJtL2RybV9icmlkZ2UuaCBiL2luY2x1ZGUvZHJtL2RybV9icmlkZ2Uu aAppbmRleCBlODE0ZTZkNmU3YzIuLmIxZjU1N2Q4ZGJhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9k cm0vZHJtX2JyaWRnZS5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9icmlkZ2UuaApAQCAtMjY2LDgg KzI2Niw4IEBAIHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIHsKIAkgKiBicmlkZ2UncyBAYXRvbWlj X3ByZV9lbmFibGUgb3IgQHByZV9lbmFibGUgZnVuY3Rpb24uIElmIHRoZSBwcmVjZWRpbmcKIAkg KiBlbGVtZW50IGlzIGEgJmRybV9lbmNvZGVyIGl0J3MgY2FsbGVkIHJpZ2h0IGJlZm9yZSB0aGUg ZW5jb2RlcidzCiAJICogJmRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcy5hdG9taWNfZW5hYmxlIGhv b2suCi0JICogVGhpcyBob29rIGlzIHBhc3NlZCB0aGUgb2xkIGF0b21pYyBzdGF0ZSAoYXRvbWlj IHN0YXRlIGFmdGVyIG5ldy9vbGQKLQkgKiBzdGF0ZXMgaGF2ZSBiZWVuIHN3YXBwZWQpLgorCSAq IFRoaXMgaG9vayBpcyBwYXNzZWQgdGhlIG9sZCBicmlkZ2Ugc3RhdGUgKHRoZSBuZXcgb25lIGNh biBiZQorCSAqIHJldHJpZXZlZCBmcm9tIGJyaWRnZS0+c3RhdGUpLgogCSAqCiAJICogVGhlIGRp c3BsYXkgcGlwZSAoaS5lLiBjbG9ja3MgYW5kIHRpbWluZyBzaWduYWxzKSBmZWVkaW5nIHRoaXMg YnJpZGdlCiAJICogd2lsbCBub3QgeWV0IGJlIHJ1bm5pbmcgd2hlbiB0aGlzIGNhbGxiYWNrIGlz IGNhbGxlZC4gVGhlIGJyaWRnZSBtdXN0CkBAIC0yODMsNyArMjgzLDcgQEAgc3RydWN0IGRybV9i cmlkZ2VfZnVuY3MgewogCSAqIFRoZSBAYXRvbWljX3ByZV9lbmFibGUgY2FsbGJhY2sgaXMgb3B0 aW9uYWwuCiAJICovCiAJdm9pZCAoKmF0b21pY19wcmVfZW5hYmxlKShzdHJ1Y3QgZHJtX2JyaWRn ZSAqYnJpZGdlLAotCQkJCSAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSk7CisJ CQkJICBzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAqb2xkX2JyaWRnZV9zdGF0ZSk7CiAKIAkvKioK IAkgKiBAYXRvbWljX2VuYWJsZToKQEAgLTI5NCw4ICsyOTQsOCBAQCBzdHJ1Y3QgZHJtX2JyaWRn ZV9mdW5jcyB7CiAJICogYnJpZGdlJ3MgQGF0b21pY19lbmFibGUgb3IgQGVuYWJsZSBmdW5jdGlv bi4gSWYgdGhlIHByZWNlZGluZyBlbGVtZW50CiAJICogaXMgYSAmZHJtX2VuY29kZXIgaXQncyBj YWxsZWQgcmlnaHQgYWZ0ZXIgdGhlIGVuY29kZXIncwogCSAqICZkcm1fZW5jb2Rlcl9oZWxwZXJf ZnVuY3MuYXRvbWljX2VuYWJsZSBob29rLgotCSAqIFRoaXMgaG9vayBpcyBwYXNzZWQgdGhlIG9s ZCBhdG9taWMgc3RhdGUgKGF0b21pYyBzdGF0ZSBhZnRlciBuZXcvb2xkCi0JICogc3RhdGVzIGhh dmUgYmVlbiBzd2FwcGVkKS4KKwkgKiBUaGlzIGhvb2sgaXMgcGFzc2VkIHRoZSBvbGQgYnJpZGdl IHN0YXRlICh0aGUgbmV3IG9uZSBjYW4gYmUKKwkgKiByZXRyaWV2ZWQgZnJvbSBicmlkZ2UtPnN0 YXRlKS4KIAkgKgogCSAqIFRoZSBicmlkZ2UgY2FuIGFzc3VtZSB0aGF0IHRoZSBkaXNwbGF5IHBp cGUgKGkuZS4gY2xvY2tzIGFuZCB0aW1pbmcKIAkgKiBzaWduYWxzKSBmZWVkaW5nIGl0IGlzIHJ1 bm5pbmcgd2hlbiB0aGlzIGNhbGxiYWNrIGlzIGNhbGxlZC4gVGhpcwpAQCAtMzEwLDcgKzMxMCw3 IEBAIHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIHsKIAkgKiBUaGUgQGF0b21pY19lbmFibGUgY2Fs bGJhY2sgaXMgb3B0aW9uYWwuCiAJICovCiAJdm9pZCAoKmF0b21pY19lbmFibGUpKHN0cnVjdCBk cm1fYnJpZGdlICpicmlkZ2UsCi0JCQkgICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqb2xk X3N0YXRlKTsKKwkJCSAgICAgIHN0cnVjdCBkcm1fYnJpZGdlX3N0YXRlICpvbGRfYnJpZGdlX3N0 YXRlKTsKIAkvKioKIAkgKiBAYXRvbWljX2Rpc2FibGU6CiAJICoKQEAgLTMyMCw4ICszMjAsOCBA QCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyB7CiAJICogYnJpZGdlJ3MgQGF0b21pY19kaXNhYmxl IG9yIEBkaXNhYmxlIHZmdW5jLiBJZiB0aGUgcHJlY2VkaW5nIGVsZW1lbnQKIAkgKiBpcyBhICZk cm1fZW5jb2RlciBpdCdzIGNhbGxlZCByaWdodCBiZWZvcmUgdGhlCiAJICogJmRybV9lbmNvZGVy X2hlbHBlcl9mdW5jcy5hdG9taWNfZGlzYWJsZSBob29rLgotCSAqIFRoaXMgaG9vayBpcyBwYXNz ZWQgdGhlIG9sZCBhdG9taWMgc3RhdGUgKGF0b21pYyBzdGF0ZSBhZnRlciBuZXcvb2xkCi0JICog c3RhdGVzIGhhdmUgYmVlbiBzd2FwcGVkKS4KKwkgKiBUaGlzIGhvb2sgaXMgcGFzc2VkIHRoZSBv bGQgYnJpZGdlIHN0YXRlICh0aGUgbmV3IG9uZSBjYW4gYmUKKwkgKiByZXRyaWV2ZWQgZnJvbSBi cmlkZ2UtPnN0YXRlKS4KIAkgKgogCSAqIFRoZSBicmlkZ2UgY2FuIGFzc3VtZSB0aGF0IHRoZSBk aXNwbGF5IHBpcGUgKGkuZS4gY2xvY2tzIGFuZCB0aW1pbmcKIAkgKiBzaWduYWxzKSBmZWVkaW5n IGl0IGlzIHN0aWxsIHJ1bm5pbmcgd2hlbiB0aGlzIGNhbGxiYWNrIGlzIGNhbGxlZC4KQEAgLTMz NSw3ICszMzUsNyBAQCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyB7CiAJICogVGhlIEBhdG9taWNf ZGlzYWJsZSBjYWxsYmFjayBpcyBvcHRpb25hbC4KIAkgKi8KIAl2b2lkICgqYXRvbWljX2Rpc2Fi bGUpKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCi0JCQkgICAgICAgc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKm9sZF9zdGF0ZSk7CisJCQkgICAgICAgc3RydWN0IGRybV9icmlkZ2Vfc3RhdGUg Km9sZF9icmlkZ2Vfc3RhdGUpOwogCiAJLyoqCiAJICogQGF0b21pY19wb3N0X2Rpc2FibGU6CkBA IC0zNDYsOCArMzQ2LDggQEAgc3RydWN0IGRybV9icmlkZ2VfZnVuY3MgewogCSAqIEBhdG9taWNf cG9zdF9kaXNhYmxlIG9yIEBwb3N0X2Rpc2FibGUgZnVuY3Rpb24uIElmIHRoZSBwcmVjZWRpbmcK IAkgKiBlbGVtZW50IGlzIGEgJmRybV9lbmNvZGVyIGl0J3MgY2FsbGVkIHJpZ2h0IGFmdGVyIHRo ZSBlbmNvZGVyJ3MKIAkgKiAmZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzLmF0b21pY19kaXNhYmxl IGhvb2suCi0JICogVGhpcyBob29rIGlzIHBhc3NlZCB0aGUgb2xkIGF0b21pYyBzdGF0ZSAoYXRv bWljIHN0YXRlIGFmdGVyIG5ldy9vbGQKLQkgKiBzdGF0ZXMgaGF2ZSBiZWVuIHN3YXBwZWQpLgor CSAqIFRoaXMgaG9vayBpcyBwYXNzZWQgdGhlIG9sZCBicmlkZ2Ugc3RhdGUgKHRoZSBuZXcgb25l IGNhbiBiZQorCSAqIHJldHJpZXZlZCBmcm9tIGJyaWRnZS0+c3RhdGUpLgogCSAqCiAJICogVGhl IGJyaWRnZSBtdXN0IGFzc3VtZSB0aGF0IHRoZSBkaXNwbGF5IHBpcGUgKGkuZS4gY2xvY2tzIGFu ZCB0aW1pbmcKIAkgKiBzaWduYWxzKSBmZWVkaW5nIGl0IGlzIG5vIGxvbmdlciBydW5uaW5nIHdo ZW4gdGhpcyBjYWxsYmFjayBpcwpAQCAtMzYzLDcgKzM2Myw3IEBAIHN0cnVjdCBkcm1fYnJpZGdl X2Z1bmNzIHsKIAkgKiBUaGUgQGF0b21pY19wb3N0X2Rpc2FibGUgY2FsbGJhY2sgaXMgb3B0aW9u YWwuCiAJICovCiAJdm9pZCAoKmF0b21pY19wb3N0X2Rpc2FibGUpKHN0cnVjdCBkcm1fYnJpZGdl ICpicmlkZ2UsCi0JCQkJICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpvbGRfc3RhdGUpOwor CQkJCSAgICBzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAqb2xkX2JyaWRnZV9zdGF0ZSk7CiAKIAkv KioKIAkgKiBAYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZToKLS0gCjIuMjEuMAoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlz dApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs