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 9BE00CA9EB7 for ; Wed, 23 Oct 2019 15:45:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 7C65021A4C for ; Wed, 23 Oct 2019 15:45:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2406906AbfJWPpY (ORCPT ); Wed, 23 Oct 2019 11:45:24 -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 S2406858AbfJWPpX (ORCPT ); Wed, 23 Oct 2019 11:45:23 -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 8E6F528F913; Wed, 23 Oct 2019 16:45:20 +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 05/21] drm/bridge: Introduce drm_bridge_chain_get_next_bridge() Date: Wed, 23 Oct 2019 17:44:56 +0200 Message-Id: <20191023154512.9762-6-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 And use it in drivers accessing the bridge->next field directly. This is part of our attempt to make the bridge chain a double-linked list based on the generic list helpers. Signed-off-by: Boris Brezillon --- Changes in v3: * Inline drm_bridge_chain_get_next_bridge() (Suggested by Laurent) Changes in v2: * Kill the last/first helpers (they're not really needed) * Drop the !bridge || !bridge->encoder test --- drivers/gpu/drm/exynos/exynos_drm_dsi.c | 3 ++- drivers/gpu/drm/mediatek/mtk_hdmi.c | 6 ++++-- drivers/gpu/drm/omapdrm/omap_drv.c | 4 ++-- drivers/gpu/drm/omapdrm/omap_encoder.c | 3 ++- drivers/gpu/drm/vc4/vc4_dsi.c | 4 +++- include/drm/drm_bridge.h | 13 +++++++++++++ 6 files changed, 26 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c index 3915f50b005e..005c67894b78 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c @@ -1593,9 +1593,10 @@ static int exynos_dsi_host_detach(struct mipi_dsi_host *host, struct mipi_dsi_device *device) { struct exynos_dsi *dsi = host_to_dsi(host); - struct drm_bridge *out_bridge = dsi->bridge.next; struct drm_device *drm = dsi->encoder.dev; + struct drm_bridge *out_bridge; + out_bridge = drm_bridge_chain_get_next_bridge(&dsi->bridge); if (dsi->panel) { mutex_lock(&drm->mode_config.mutex); exynos_dsi_disable(&dsi->bridge); diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c index ea68b5adccbe..cfaa5aab8876 100644 --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c @@ -1238,16 +1238,18 @@ static int mtk_hdmi_conn_mode_valid(struct drm_connector *conn, struct drm_display_mode *mode) { struct mtk_hdmi *hdmi = hdmi_ctx_from_conn(conn); + struct drm_bridge *next_bridge; dev_dbg(hdmi->dev, "xres=%d, yres=%d, refresh=%d, intl=%d clock=%d\n", mode->hdisplay, mode->vdisplay, mode->vrefresh, !!(mode->flags & DRM_MODE_FLAG_INTERLACE), mode->clock * 1000); - if (hdmi->bridge.next) { + next_bridge = drm_bridge_chain_get_next_bridge(&hdmi->bridge); + if (next_bridge) { struct drm_display_mode adjusted_mode; drm_mode_copy(&adjusted_mode, mode); - if (!drm_bridge_chain_mode_fixup(hdmi->bridge.next, mode, + if (!drm_bridge_chain_mode_fixup(next_bridge, mode, &adjusted_mode)) return MODE_BAD; } diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c index b3e22c890c51..865164fe28dc 100644 --- a/drivers/gpu/drm/omapdrm/omap_drv.c +++ b/drivers/gpu/drm/omapdrm/omap_drv.c @@ -217,8 +217,8 @@ static int omap_display_id(struct omap_dss_device *output) } else if (output->bridge) { struct drm_bridge *bridge = output->bridge; - while (bridge->next) - bridge = bridge->next; + while (drm_bridge_chain_get_next_bridge(bridge)) + bridge = drm_bridge_chain_get_next_bridge(bridge); node = bridge->of_node; } else if (output->panel) { diff --git a/drivers/gpu/drm/omapdrm/omap_encoder.c b/drivers/gpu/drm/omapdrm/omap_encoder.c index 24bbe9f2a32e..8ca54081997e 100644 --- a/drivers/gpu/drm/omapdrm/omap_encoder.c +++ b/drivers/gpu/drm/omapdrm/omap_encoder.c @@ -126,7 +126,8 @@ static void omap_encoder_mode_set(struct drm_encoder *encoder, for (dssdev = output; dssdev; dssdev = dssdev->next) omap_encoder_update_videomode_flags(&vm, dssdev->bus_flags); - for (bridge = output->bridge; bridge; bridge = bridge->next) { + for (bridge = output->bridge; bridge; + bridge = drm_bridge_chain_get_next_bridge(bridge)) { if (!bridge->timings) continue; diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c index 49f8a313e759..49c47185aff0 100644 --- a/drivers/gpu/drm/vc4/vc4_dsi.c +++ b/drivers/gpu/drm/vc4/vc4_dsi.c @@ -1644,8 +1644,10 @@ static void vc4_dsi_unbind(struct device *dev, struct device *master, struct drm_device *drm = dev_get_drvdata(master); struct vc4_dev *vc4 = to_vc4_dev(drm); struct vc4_dsi *dsi = dev_get_drvdata(dev); + struct drm_bridge *bridge; - if (dsi->bridge.next) + bridge = drm_bridge_chain_get_next_bridge(&dsi->bridge); + if (bridge) pm_runtime_disable(dev); vc4_dsi_encoder_destroy(dsi->encoder); diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index 726435baf4ad..8aeba83fcf31 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -409,6 +409,19 @@ struct drm_bridge *of_drm_find_bridge(struct device_node *np); int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge, struct drm_bridge *previous); +/** + * drm_bridge_chain_get_next_bridge() - Get the next bridge in the chain + * @bridge: bridge object + * + * RETURNS: + * the next bridge in the chain, or NULL if @bridge is the last. + */ +static inline struct drm_bridge * +drm_bridge_chain_get_next_bridge(struct drm_bridge *bridge) +{ + return bridge->next; +} + bool drm_bridge_chain_mode_fixup(struct drm_bridge *bridge, const struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode); -- 2.21.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: [PATCH v3 05/21] drm/bridge: Introduce drm_bridge_chain_get_next_bridge() Date: Wed, 23 Oct 2019 17:44:56 +0200 Message-ID: <20191023154512.9762-6-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 [46.235.227.227]) by gabe.freedesktop.org (Postfix) with ESMTPS id C3FA36EB1D for ; Wed, 23 Oct 2019 15:45:23 +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 QW5kIHVzZSBpdCBpbiBkcml2ZXJzIGFjY2Vzc2luZyB0aGUgYnJpZGdlLT5uZXh0IGZpZWxkIGRp cmVjdGx5LgpUaGlzIGlzIHBhcnQgb2Ygb3VyIGF0dGVtcHQgdG8gbWFrZSB0aGUgYnJpZGdlIGNo YWluIGEgZG91YmxlLWxpbmtlZCBsaXN0CmJhc2VkIG9uIHRoZSBnZW5lcmljIGxpc3QgaGVscGVy cy4KClNpZ25lZC1vZmYtYnk6IEJvcmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGNvbGxh Ym9yYS5jb20+Ci0tLQpDaGFuZ2VzIGluIHYzOgoqIElubGluZSBkcm1fYnJpZGdlX2NoYWluX2dl dF9uZXh0X2JyaWRnZSgpIChTdWdnZXN0ZWQgYnkgTGF1cmVudCkKCkNoYW5nZXMgaW4gdjI6Ciog S2lsbCB0aGUgbGFzdC9maXJzdCBoZWxwZXJzICh0aGV5J3JlIG5vdCByZWFsbHkgbmVlZGVkKQoq IERyb3AgdGhlICFicmlkZ2UgfHwgIWJyaWRnZS0+ZW5jb2RlciB0ZXN0Ci0tLQogZHJpdmVycy9n cHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2RzaS5jIHwgIDMgKystCiBkcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2hkbWkuYyAgICAgfCAgNiArKysrLS0KIGRyaXZlcnMvZ3B1L2RybS9vbWFw ZHJtL29tYXBfZHJ2LmMgICAgICB8ICA0ICsrLS0KIGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29t YXBfZW5jb2Rlci5jICB8ICAzICsrLQogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHNpLmMgICAg ICAgICAgIHwgIDQgKysrLQogaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oICAgICAgICAgICAgICAg IHwgMTMgKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCspLCA3 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9z X2RybV9kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kc2kuYwppbmRl eCAzOTE1ZjUwYjAwNWUuLjAwNWM2Nzg5NGI3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2V4eW5vcy9leHlub3NfZHJtX2RzaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5 bm9zX2RybV9kc2kuYwpAQCAtMTU5Myw5ICsxNTkzLDEwIEBAIHN0YXRpYyBpbnQgZXh5bm9zX2Rz aV9ob3N0X2RldGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKIAkJCQkgIHN0cnVjdCBt aXBpX2RzaV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZXh5bm9zX2RzaSAqZHNpID0gaG9z dF90b19kc2koaG9zdCk7Ci0Jc3RydWN0IGRybV9icmlkZ2UgKm91dF9icmlkZ2UgPSBkc2ktPmJy aWRnZS5uZXh0OwogCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkc2ktPmVuY29kZXIuZGV2Owor CXN0cnVjdCBkcm1fYnJpZGdlICpvdXRfYnJpZGdlOwogCisJb3V0X2JyaWRnZSA9IGRybV9icmlk Z2VfY2hhaW5fZ2V0X25leHRfYnJpZGdlKCZkc2ktPmJyaWRnZSk7CiAJaWYgKGRzaS0+cGFuZWwp IHsKIAkJbXV0ZXhfbG9jaygmZHJtLT5tb2RlX2NvbmZpZy5tdXRleCk7CiAJCWV4eW5vc19kc2lf ZGlzYWJsZSgmZHNpLT5icmlkZ2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuYwppbmRl eCBlYTY4YjVhZGNjYmUuLmNmYWE1YWFiODg3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19oZG1pLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19o ZG1pLmMKQEAgLTEyMzgsMTYgKzEyMzgsMTggQEAgc3RhdGljIGludCBtdGtfaGRtaV9jb25uX21v ZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4sCiAJCQkJICAgIHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlKQogewogCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4 X2Zyb21fY29ubihjb25uKTsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqbmV4dF9icmlkZ2U7CiAKIAlk ZXZfZGJnKGhkbWktPmRldiwgInhyZXM9JWQsIHlyZXM9JWQsIHJlZnJlc2g9JWQsIGludGw9JWQg Y2xvY2s9JWRcbiIsCiAJCW1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwgbW9kZS0+dnJl ZnJlc2gsCiAJCSEhKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpLCBtb2Rl LT5jbG9jayAqIDEwMDApOwogCi0JaWYgKGhkbWktPmJyaWRnZS5uZXh0KSB7CisJbmV4dF9icmlk Z2UgPSBkcm1fYnJpZGdlX2NoYWluX2dldF9uZXh0X2JyaWRnZSgmaGRtaS0+YnJpZGdlKTsKKwlp ZiAobmV4dF9icmlkZ2UpIHsKIAkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgYWRqdXN0ZWRfbW9k ZTsKIAogCQlkcm1fbW9kZV9jb3B5KCZhZGp1c3RlZF9tb2RlLCBtb2RlKTsKLQkJaWYgKCFkcm1f YnJpZGdlX2NoYWluX21vZGVfZml4dXAoaGRtaS0+YnJpZGdlLm5leHQsIG1vZGUsCisJCWlmICgh ZHJtX2JyaWRnZV9jaGFpbl9tb2RlX2ZpeHVwKG5leHRfYnJpZGdlLCBtb2RlLAogCQkJCQkJICZh ZGp1c3RlZF9tb2RlKSkKIAkJCXJldHVybiBNT0RFX0JBRDsKIAl9CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0v b21hcF9kcnYuYwppbmRleCBiM2UyMmM4OTBjNTEuLjg2NTE2NGZlMjhkYyAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v b21hcGRybS9vbWFwX2Rydi5jCkBAIC0yMTcsOCArMjE3LDggQEAgc3RhdGljIGludCBvbWFwX2Rp c3BsYXlfaWQoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqb3V0cHV0KQogCX0gZWxzZSBpZiAob3V0 cHV0LT5icmlkZ2UpIHsKIAkJc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSA9IG91dHB1dC0+YnJp ZGdlOwogCi0JCXdoaWxlIChicmlkZ2UtPm5leHQpCi0JCQlicmlkZ2UgPSBicmlkZ2UtPm5leHQ7 CisJCXdoaWxlIChkcm1fYnJpZGdlX2NoYWluX2dldF9uZXh0X2JyaWRnZShicmlkZ2UpKQorCQkJ YnJpZGdlID0gZHJtX2JyaWRnZV9jaGFpbl9nZXRfbmV4dF9icmlkZ2UoYnJpZGdlKTsKIAogCQlu b2RlID0gYnJpZGdlLT5vZl9ub2RlOwogCX0gZWxzZSBpZiAob3V0cHV0LT5wYW5lbCkgewpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9lbmNvZGVyLmMgYi9kcml2ZXJz L2dwdS9kcm0vb21hcGRybS9vbWFwX2VuY29kZXIuYwppbmRleCAyNGJiZTlmMmEzMmUuLjhjYTU0 MDgxOTk3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9lbmNvZGVy LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9lbmNvZGVyLmMKQEAgLTEyNiw3 ICsxMjYsOCBAQCBzdGF0aWMgdm9pZCBvbWFwX2VuY29kZXJfbW9kZV9zZXQoc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyLAogCWZvciAoZHNzZGV2ID0gb3V0cHV0OyBkc3NkZXY7IGRzc2RldiA9 IGRzc2Rldi0+bmV4dCkKIAkJb21hcF9lbmNvZGVyX3VwZGF0ZV92aWRlb21vZGVfZmxhZ3MoJnZt LCBkc3NkZXYtPmJ1c19mbGFncyk7CiAKLQlmb3IgKGJyaWRnZSA9IG91dHB1dC0+YnJpZGdlOyBi cmlkZ2U7IGJyaWRnZSA9IGJyaWRnZS0+bmV4dCkgeworCWZvciAoYnJpZGdlID0gb3V0cHV0LT5i cmlkZ2U7IGJyaWRnZTsKKwkgICAgIGJyaWRnZSA9IGRybV9icmlkZ2VfY2hhaW5fZ2V0X25leHRf YnJpZGdlKGJyaWRnZSkpIHsKIAkJaWYgKCFicmlkZ2UtPnRpbWluZ3MpCiAJCQljb250aW51ZTsK IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHNpLmMgYi9kcml2ZXJzL2dw dS9kcm0vdmM0L3ZjNF9kc2kuYwppbmRleCA0OWY4YTMxM2U3NTkuLjQ5YzQ3MTg1YWZmMCAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHNpLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfZHNpLmMKQEAgLTE2NDQsOCArMTY0NCwxMCBAQCBzdGF0aWMgdm9pZCB2YzRf ZHNpX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKIAlz dHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRhKG1hc3Rlcik7CiAJc3RydWN0 IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZHJtKTsKIAlzdHJ1Y3QgdmM0X2RzaSAqZHNpID0g ZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZTsKIAotCWlm IChkc2ktPmJyaWRnZS5uZXh0KQorCWJyaWRnZSA9IGRybV9icmlkZ2VfY2hhaW5fZ2V0X25leHRf YnJpZGdlKCZkc2ktPmJyaWRnZSk7CisJaWYgKGJyaWRnZSkKIAkJcG1fcnVudGltZV9kaXNhYmxl KGRldik7CiAKIAl2YzRfZHNpX2VuY29kZXJfZGVzdHJveShkc2ktPmVuY29kZXIpOwpkaWZmIC0t Z2l0IGEvaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oIGIvaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5o CmluZGV4IDcyNjQzNWJhZjRhZC4uOGFlYmE4M2ZjZjMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2Ry bS9kcm1fYnJpZGdlLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oCkBAIC00MDksNiAr NDA5LDE5IEBAIHN0cnVjdCBkcm1fYnJpZGdlICpvZl9kcm1fZmluZF9icmlkZ2Uoc3RydWN0IGRl dmljZV9ub2RlICpucCk7CiBpbnQgZHJtX2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyLCBzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAogCQkgICAgICBzdHJ1Y3QgZHJt X2JyaWRnZSAqcHJldmlvdXMpOwogCisvKioKKyAqIGRybV9icmlkZ2VfY2hhaW5fZ2V0X25leHRf YnJpZGdlKCkgLSBHZXQgdGhlIG5leHQgYnJpZGdlIGluIHRoZSBjaGFpbgorICogQGJyaWRnZTog YnJpZGdlIG9iamVjdAorICoKKyAqIFJFVFVSTlM6CisgKiB0aGUgbmV4dCBicmlkZ2UgaW4gdGhl IGNoYWluLCBvciBOVUxMIGlmIEBicmlkZ2UgaXMgdGhlIGxhc3QuCisgKi8KK3N0YXRpYyBpbmxp bmUgc3RydWN0IGRybV9icmlkZ2UgKgorZHJtX2JyaWRnZV9jaGFpbl9nZXRfbmV4dF9icmlkZ2Uo c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlyZXR1cm4gYnJpZGdlLT5uZXh0OworfQor CiBib29sIGRybV9icmlkZ2VfY2hhaW5fbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJp ZGdlLAogCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKIAkJCQkgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpOwotLSAKMi4yMS4wCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGlu ZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=