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.0 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS 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 22C52C433E1 for ; Sun, 2 Aug 2020 16:44:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E471220738 for ; Sun, 2 Aug 2020 16:44:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726988AbgHBQoG (ORCPT ); Sun, 2 Aug 2020 12:44:06 -0400 Received: from smtprelay0212.hostedemail.com ([216.40.44.212]:41930 "EHLO smtprelay.hostedemail.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725877AbgHBQoG (ORCPT ); Sun, 2 Aug 2020 12:44:06 -0400 Received: from filter.hostedemail.com (clb03-v110.bra.tucows.net [216.40.38.60]) by smtprelay07.hostedemail.com (Postfix) with ESMTP id DE99B181D341E; Sun, 2 Aug 2020 16:44:03 +0000 (UTC) X-Session-Marker: 6A6F6540706572636865732E636F6D X-HE-Tag: chin04_0d079c426f96 X-Filterd-Recvd-Size: 25490 Received: from XPS-9350.home (unknown [47.151.133.149]) (Authenticated sender: joe@perches.com) by omf05.hostedemail.com (Postfix) with ESMTPA; Sun, 2 Aug 2020 16:44:00 +0000 (UTC) Message-ID: <9e13761020750b1ce2f1fabee23ef6e2a2942882.camel@perches.com> Subject: [PATCH V2] drm: Remove unnecessary drm_panel_attach and drm_panel_detach From: Joe Perches To: Sam Ravnborg Cc: Bernard Zhao , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Thierry Reding , David Airlie , Daniel Vetter , Linus Walleij , Jerry Han , Icenowy Zheng , Jagan Teki , Laurent Pinchart , Stefan Mavrodiev , Robert Chiras , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, opensource.kernel@vivo.com Date: Sun, 02 Aug 2020 09:43:59 -0700 In-Reply-To: <20200802084411.GA908790@ravnborg.org> References: <20200801120216.8488-1-bernard@vivo.com> <20200802070743.GA822300@ravnborg.org> <20200802084411.GA908790@ravnborg.org> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3-0ubuntu1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org These functions are now empty and no longer useful so remove the functions and their uses. Signed-off-by: Joe Perches --- > > It's too tedious to break apart into multiple patches. > > Done with coccinelle and typing. > > > > Compiled allyesconfig x86-64 only. V2: Removed 3 additional lines drivers/gpu/drm/omapdrm/omap_drv.c:390:27: warning: unused variable ‘priv’ [-Wunused-variable] drivers/gpu/drm/exynos/exynos_drm_dpi.c:45:21: warning: unused variable ‘ctx’ [-Wunused-variable] drivers/gpu/drm/sun4i/sun4i_lvds.c:57:21: warning: unused variable ‘lvds’ [-Wunused-variable] drivers/gpu/drm/bridge/analogix/analogix-anx6345.c | 12 -------- drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 9 ------ drivers/gpu/drm/bridge/nxp-ptn3460.c | 3 -- drivers/gpu/drm/bridge/panel.c | 7 ----- drivers/gpu/drm/bridge/parade-ps8622.c | 3 -- drivers/gpu/drm/bridge/tc358764.c | 2 -- drivers/gpu/drm/bridge/tc358767.c | 3 -- drivers/gpu/drm/bridge/ti-sn65dsi86.c | 3 -- drivers/gpu/drm/drm_panel.c | 36 ---------------------- drivers/gpu/drm/exynos/exynos_drm_dpi.c | 8 ----- drivers/gpu/drm/exynos/exynos_drm_dsi.c | 7 ++--- drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c | 7 ----- drivers/gpu/drm/imx/imx-ldb.c | 10 ------ drivers/gpu/drm/imx/parallel-display.c | 6 ---- .../gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c | 7 +---- drivers/gpu/drm/msm/dsi/dsi_manager.c | 1 - drivers/gpu/drm/mxsfb/mxsfb_drv.c | 7 +---- drivers/gpu/drm/mxsfb/mxsfb_out.c | 6 ---- drivers/gpu/drm/omapdrm/omap_drv.c | 17 ---------- drivers/gpu/drm/rcar-du/rcar_lvds.c | 6 +--- drivers/gpu/drm/rockchip/rockchip_lvds.c | 9 ------ drivers/gpu/drm/sti/sti_dvo.c | 2 -- drivers/gpu/drm/sun4i/sun4i_lvds.c | 9 ------ drivers/gpu/drm/sun4i/sun4i_rgb.c | 7 ----- drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 2 -- drivers/gpu/drm/tegra/dsi.c | 4 +-- drivers/gpu/drm/tegra/output.c | 10 ------ include/drm/drm_panel.h | 3 -- 28 files changed, 6 insertions(+), 200 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c index f082b4ed4878..d9164fab044d 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c +++ b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c @@ -507,10 +507,6 @@ static const struct drm_connector_helper_funcs anx6345_connector_helper_funcs = static void anx6345_connector_destroy(struct drm_connector *connector) { - struct anx6345 *anx6345 = connector_to_anx6345(connector); - - if (anx6345->panel) - drm_panel_detach(anx6345->panel); drm_connector_cleanup(connector); } @@ -575,14 +571,6 @@ static int anx6345_bridge_attach(struct drm_bridge *bridge, return err; } - if (anx6345->panel) { - err = drm_panel_attach(anx6345->panel, &anx6345->connector); - if (err) { - DRM_ERROR("Failed to attach panel: %d\n", err); - return err; - } - } - return 0; } diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c index 76736fb8ed94..aa1bb86293fd 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -1265,14 +1265,6 @@ static int analogix_dp_bridge_attach(struct drm_bridge *bridge, } } - if (dp->plat_data->panel) { - ret = drm_panel_attach(dp->plat_data->panel, &dp->connector); - if (ret) { - DRM_ERROR("Failed to attach panel\n"); - return ret; - } - } - return 0; } @@ -1803,7 +1795,6 @@ void analogix_dp_unbind(struct analogix_dp_device *dp) if (dp->plat_data->panel) { if (drm_panel_unprepare(dp->plat_data->panel)) DRM_ERROR("failed to turnoff the panel\n"); - drm_panel_detach(dp->plat_data->panel); } drm_dp_aux_unregister(&dp->aux); diff --git a/drivers/gpu/drm/bridge/nxp-ptn3460.c b/drivers/gpu/drm/bridge/nxp-ptn3460.c index 438e566ce0a4..d433902d97e5 100644 --- a/drivers/gpu/drm/bridge/nxp-ptn3460.c +++ b/drivers/gpu/drm/bridge/nxp-ptn3460.c @@ -265,9 +265,6 @@ static int ptn3460_bridge_attach(struct drm_bridge *bridge, drm_connector_attach_encoder(&ptn_bridge->connector, bridge->encoder); - if (ptn_bridge->panel) - drm_panel_attach(ptn_bridge->panel, &ptn_bridge->connector); - drm_helper_hpd_irq_event(ptn_bridge->connector.dev); return ret; diff --git a/drivers/gpu/drm/bridge/panel.c b/drivers/gpu/drm/bridge/panel.c index 1e63ed6b18aa..0ddc37551194 100644 --- a/drivers/gpu/drm/bridge/panel.c +++ b/drivers/gpu/drm/bridge/panel.c @@ -82,18 +82,11 @@ static int panel_bridge_attach(struct drm_bridge *bridge, drm_connector_attach_encoder(&panel_bridge->connector, bridge->encoder); - ret = drm_panel_attach(panel_bridge->panel, &panel_bridge->connector); - if (ret < 0) - return ret; - return 0; } static void panel_bridge_detach(struct drm_bridge *bridge) { - struct panel_bridge *panel_bridge = drm_bridge_to_panel_bridge(bridge); - - drm_panel_detach(panel_bridge->panel); } static void panel_bridge_pre_enable(struct drm_bridge *bridge) diff --git a/drivers/gpu/drm/bridge/parade-ps8622.c b/drivers/gpu/drm/bridge/parade-ps8622.c index d789ea2a7fb9..c13ec77d858b 100644 --- a/drivers/gpu/drm/bridge/parade-ps8622.c +++ b/drivers/gpu/drm/bridge/parade-ps8622.c @@ -505,9 +505,6 @@ static int ps8622_attach(struct drm_bridge *bridge, drm_connector_attach_encoder(&ps8622->connector, bridge->encoder); - if (ps8622->panel) - drm_panel_attach(ps8622->panel, &ps8622->connector); - drm_helper_hpd_irq_event(ps8622->connector.dev); return ret; diff --git a/drivers/gpu/drm/bridge/tc358764.c b/drivers/gpu/drm/bridge/tc358764.c index 5ac1430fab04..c1e35bdf9232 100644 --- a/drivers/gpu/drm/bridge/tc358764.c +++ b/drivers/gpu/drm/bridge/tc358764.c @@ -373,7 +373,6 @@ static int tc358764_attach(struct drm_bridge *bridge, drm_connector_helper_add(&ctx->connector, &tc358764_connector_helper_funcs); drm_connector_attach_encoder(&ctx->connector, bridge->encoder); - drm_panel_attach(ctx->panel, &ctx->connector); ctx->connector.funcs->reset(&ctx->connector); drm_connector_register(&ctx->connector); @@ -385,7 +384,6 @@ static void tc358764_detach(struct drm_bridge *bridge) struct tc358764 *ctx = bridge_to_tc358764(bridge); drm_connector_unregister(&ctx->connector); - drm_panel_detach(ctx->panel); ctx->panel = NULL; drm_connector_put(&ctx->connector); } diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c index c2777b226c75..0746462ba0f6 100644 --- a/drivers/gpu/drm/bridge/tc358767.c +++ b/drivers/gpu/drm/bridge/tc358767.c @@ -1435,9 +1435,6 @@ static int tc_bridge_attach(struct drm_bridge *bridge, DRM_CONNECTOR_POLL_DISCONNECT; } - if (tc->panel) - drm_panel_attach(tc->panel, &tc->connector); - drm_display_info_set_bus_formats(&tc->connector.display_info, &bus_format, 1); tc->connector.display_info.bus_flags = diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c index 86b9f0f87a14..454544e0da7d 100644 --- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c +++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c @@ -394,9 +394,6 @@ static int ti_sn_bridge_attach(struct drm_bridge *bridge, } pdata->dsi = dsi; - /* attach panel to bridge */ - drm_panel_attach(pdata->panel, &pdata->connector); - return 0; err_dsi_attach: diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c index 8c7bac85a793..7804b9947fe8 100644 --- a/drivers/gpu/drm/drm_panel.c +++ b/drivers/gpu/drm/drm_panel.c @@ -97,42 +97,6 @@ void drm_panel_remove(struct drm_panel *panel) } EXPORT_SYMBOL(drm_panel_remove); -/** - * drm_panel_attach - attach a panel to a connector - * @panel: DRM panel - * @connector: DRM connector - * - * After obtaining a pointer to a DRM panel a display driver calls this - * function to attach a panel to a connector. - * - * An error is returned if the panel is already attached to another connector. - * - * When unloading, the driver should detach from the panel by calling - * drm_panel_detach(). - * - * Return: 0 on success or a negative error code on failure. - */ -int drm_panel_attach(struct drm_panel *panel, struct drm_connector *connector) -{ - return 0; -} -EXPORT_SYMBOL(drm_panel_attach); - -/** - * drm_panel_detach - detach a panel from a connector - * @panel: DRM panel - * - * Detaches a panel from the connector it is attached to. If a panel is not - * attached to any connector this is effectively a no-op. - * - * This function should not be called by the panel device itself. It - * is only for the drm device that called drm_panel_attach(). - */ -void drm_panel_detach(struct drm_panel *panel) -{ -} -EXPORT_SYMBOL(drm_panel_detach); - /** * drm_panel_prepare - power on a panel * @panel: DRM panel diff --git a/drivers/gpu/drm/exynos/exynos_drm_dpi.c b/drivers/gpu/drm/exynos/exynos_drm_dpi.c index 7ba5354e7d94..741323a2e6c3 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_dpi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_dpi.c @@ -42,11 +42,6 @@ static inline struct exynos_dpi *encoder_to_dpi(struct drm_encoder *e) static enum drm_connector_status exynos_dpi_detect(struct drm_connector *connector, bool force) { - struct exynos_dpi *ctx = connector_to_dpi(connector); - - if (ctx->panel) - drm_panel_attach(ctx->panel, &ctx->connector); - return connector_status_connected; } @@ -249,8 +244,5 @@ int exynos_dpi_remove(struct drm_encoder *encoder) exynos_dpi_disable(&ctx->encoder); - if (ctx->panel) - drm_panel_detach(ctx->panel); - return 0; } diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c index 7a6f6df5e954..843dfcefc46a 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c @@ -1551,12 +1551,10 @@ static int exynos_dsi_host_attach(struct mipi_dsi_host *host, } dsi->panel = of_drm_find_panel(device->dev.of_node); - if (IS_ERR(dsi->panel)) { + if (IS_ERR(dsi->panel)) dsi->panel = NULL; - } else { - drm_panel_attach(dsi->panel, &dsi->connector); + else dsi->connector.status = connector_status_connected; - } } /* @@ -1596,7 +1594,6 @@ static int exynos_dsi_host_detach(struct mipi_dsi_host *host, if (dsi->panel) { mutex_lock(&drm->mode_config.mutex); exynos_dsi_disable(&dsi->encoder); - drm_panel_detach(dsi->panel); dsi->panel = NULL; dsi->connector.status = connector_status_disconnected; mutex_unlock(&drm->mode_config.mutex); diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c index 9b0c4736c21a..0a7071827533 100644 --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c @@ -43,7 +43,6 @@ static void fsl_dcu_drm_connector_destroy(struct drm_connector *connector) struct fsl_dcu_drm_connector *fsl_con = to_fsl_dcu_connector(connector); drm_connector_unregister(connector); - drm_panel_detach(fsl_con->panel); drm_connector_cleanup(connector); } @@ -101,12 +100,6 @@ static int fsl_dcu_attach_panel(struct fsl_dcu_drm_device *fsl_dev, if (ret < 0) goto err_sysfs; - ret = drm_panel_attach(panel, connector); - if (ret) { - dev_err(fsl_dev->dev, "failed to attach panel\n"); - goto err_sysfs; - } - return 0; err_sysfs: diff --git a/drivers/gpu/drm/imx/imx-ldb.c b/drivers/gpu/drm/imx/imx-ldb.c index 8791d60be92e..af757d1e21fe 100644 --- a/drivers/gpu/drm/imx/imx-ldb.c +++ b/drivers/gpu/drm/imx/imx-ldb.c @@ -455,13 +455,6 @@ static int imx_ldb_register(struct drm_device *drm, drm_connector_attach_encoder(&imx_ldb_ch->connector, encoder); } - if (imx_ldb_ch->panel) { - ret = drm_panel_attach(imx_ldb_ch->panel, - &imx_ldb_ch->connector); - if (ret) - return ret; - } - return 0; } @@ -702,9 +695,6 @@ static void imx_ldb_unbind(struct device *dev, struct device *master, for (i = 0; i < 2; i++) { struct imx_ldb_channel *channel = &imx_ldb->channel[i]; - if (channel->panel) - drm_panel_detach(channel->panel); - kfree(channel->edid); i2c_put_adapter(channel->ddc); } diff --git a/drivers/gpu/drm/imx/parallel-display.c b/drivers/gpu/drm/imx/parallel-display.c index a831b5bd1613..8232f512b9ed 100644 --- a/drivers/gpu/drm/imx/parallel-display.c +++ b/drivers/gpu/drm/imx/parallel-display.c @@ -289,9 +289,6 @@ static int imx_pd_register(struct drm_device *drm, DRM_MODE_CONNECTOR_DPI); } - if (imxpd->panel) - drm_panel_attach(imxpd->panel, &imxpd->connector); - if (imxpd->next_bridge) { ret = drm_bridge_attach(encoder, imxpd->next_bridge, &imxpd->bridge, 0); @@ -357,9 +354,6 @@ static void imx_pd_unbind(struct device *dev, struct device *master, { struct imx_parallel_display *imxpd = dev_get_drvdata(dev); - if (imxpd->panel) - drm_panel_detach(imxpd->panel); - kfree(imxpd->edid); } diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c index c7df71e2fafc..7288041dd86a 100644 --- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c +++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c @@ -50,14 +50,9 @@ static int mdp4_lvds_connector_get_modes(struct drm_connector *connector) struct drm_panel *panel = mdp4_lvds_connector->panel; int ret = 0; - if (panel) { - drm_panel_attach(panel, connector); - + if (panel) ret = drm_panel_get_modes(panel, connector); - drm_panel_detach(panel); - } - return ret; } diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c index 4b363bd7ddff..1d28dfba2c9b 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c @@ -328,7 +328,6 @@ static int dsi_mgr_connector_get_modes(struct drm_connector *connector) * In dual DSI mode, we have one connector that can be * attached to the drm_panel. */ - drm_panel_attach(panel, connector); num = drm_panel_get_modes(panel, connector); if (!num) return 0; diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.c b/drivers/gpu/drm/mxsfb/mxsfb_drv.c index 508764fccd27..51da0e3de587 100644 --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.c +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.c @@ -265,11 +265,7 @@ static int mxsfb_load(struct drm_device *drm) */ if (mxsfb->panel) { - ret = drm_panel_attach(mxsfb->panel, mxsfb->connector); - if (ret) { - dev_err(drm->dev, "Cannot connect panel: %d\n", ret); - goto err_vblank; - } + ; } else if (mxsfb->bridge) { ret = drm_simple_display_pipe_attach_bridge(&mxsfb->pipe, mxsfb->bridge); @@ -306,7 +302,6 @@ static int mxsfb_load(struct drm_device *drm) return 0; err_irq: - drm_panel_detach(mxsfb->panel); err_vblank: pm_runtime_disable(drm->dev); diff --git a/drivers/gpu/drm/mxsfb/mxsfb_out.c b/drivers/gpu/drm/mxsfb/mxsfb_out.c index 9eca1605d11d..f93e7a4d4c15 100644 --- a/drivers/gpu/drm/mxsfb/mxsfb_out.c +++ b/drivers/gpu/drm/mxsfb/mxsfb_out.c @@ -55,12 +55,6 @@ mxsfb_panel_connector_detect(struct drm_connector *connector, bool force) static void mxsfb_panel_connector_destroy(struct drm_connector *connector) { - struct mxsfb_drm_private *mxsfb = - drm_connector_to_mxsfb_drm_private(connector); - - if (mxsfb->panel) - drm_panel_detach(mxsfb->panel); - drm_connector_unregister(connector); drm_connector_cleanup(connector); } diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c index 4526967978b7..53d5e184ee77 100644 --- a/drivers/gpu/drm/omapdrm/omap_drv.c +++ b/drivers/gpu/drm/omapdrm/omap_drv.c @@ -349,13 +349,6 @@ static int omap_modeset_init(struct drm_device *dev) drm_connector_attach_encoder(pipe->connector, encoder); - if (pipe->output->panel) { - ret = drm_panel_attach(pipe->output->panel, - pipe->connector); - if (ret < 0) - return ret; - } - crtc = omap_crtc_init(dev, pipe, priv->planes[i]); if (IS_ERR(crtc)) return PTR_ERR(crtc); @@ -394,18 +387,8 @@ static int omap_modeset_init(struct drm_device *dev) static void omap_modeset_fini(struct drm_device *ddev) { - struct omap_drm_private *priv = ddev->dev_private; - unsigned int i; - omap_drm_irq_uninstall(ddev); - for (i = 0; i < priv->num_pipes; i++) { - struct omap_drm_pipeline *pipe = &priv->pipes[i]; - - if (pipe->output->panel) - drm_panel_detach(pipe->output->panel); - } - drm_mode_config_cleanup(ddev); } diff --git a/drivers/gpu/drm/rcar-du/rcar_lvds.c b/drivers/gpu/drm/rcar-du/rcar_lvds.c index ab0d49618cf9..bced729a96fe 100644 --- a/drivers/gpu/drm/rcar-du/rcar_lvds.c +++ b/drivers/gpu/drm/rcar-du/rcar_lvds.c @@ -677,15 +677,11 @@ static int rcar_lvds_attach(struct drm_bridge *bridge, if (ret < 0) return ret; - return drm_panel_attach(lvds->panel, connector); + return 0; } static void rcar_lvds_detach(struct drm_bridge *bridge) { - struct rcar_lvds *lvds = bridge_to_rcar_lvds(bridge); - - if (lvds->panel) - drm_panel_detach(lvds->panel); } static const struct drm_bridge_funcs rcar_lvds_bridge_ops = { diff --git a/drivers/gpu/drm/rockchip/rockchip_lvds.c b/drivers/gpu/drm/rockchip/rockchip_lvds.c index 63f967902c2d..f292c6a6e20f 100644 --- a/drivers/gpu/drm/rockchip/rockchip_lvds.c +++ b/drivers/gpu/drm/rockchip/rockchip_lvds.c @@ -634,13 +634,6 @@ static int rockchip_lvds_bind(struct device *dev, struct device *master, "failed to attach encoder: %d\n", ret); goto err_free_connector; } - - ret = drm_panel_attach(lvds->panel, connector); - if (ret < 0) { - DRM_DEV_ERROR(drm_dev->dev, - "failed to attach panel: %d\n", ret); - goto err_free_connector; - } } else { ret = drm_bridge_attach(encoder, lvds->bridge, NULL, 0); if (ret) { @@ -676,8 +669,6 @@ static void rockchip_lvds_unbind(struct device *dev, struct device *master, encoder_funcs = lvds->soc_data->helper_funcs; encoder_funcs->disable(&lvds->encoder); - if (lvds->panel) - drm_panel_detach(lvds->panel); pm_runtime_disable(dev); drm_connector_cleanup(&lvds->connector); drm_encoder_cleanup(&lvds->encoder); diff --git a/drivers/gpu/drm/sti/sti_dvo.c b/drivers/gpu/drm/sti/sti_dvo.c index de4af7735c46..ddb4184f0726 100644 --- a/drivers/gpu/drm/sti/sti_dvo.c +++ b/drivers/gpu/drm/sti/sti_dvo.c @@ -389,8 +389,6 @@ sti_dvo_connector_detect(struct drm_connector *connector, bool force) dvo->panel = of_drm_find_panel(dvo->panel_node); if (IS_ERR(dvo->panel)) dvo->panel = NULL; - else - drm_panel_attach(dvo->panel, connector); } if (dvo->panel) diff --git a/drivers/gpu/drm/sun4i/sun4i_lvds.c b/drivers/gpu/drm/sun4i/sun4i_lvds.c index ffda3184aa12..d06dd313d3c0 100644 --- a/drivers/gpu/drm/sun4i/sun4i_lvds.c +++ b/drivers/gpu/drm/sun4i/sun4i_lvds.c @@ -54,9 +54,6 @@ static struct drm_connector_helper_funcs sun4i_lvds_con_helper_funcs = { static void sun4i_lvds_connector_destroy(struct drm_connector *connector) { - struct sun4i_lvds *lvds = drm_connector_to_sun4i_lvds(connector); - - drm_panel_detach(lvds->panel); drm_connector_cleanup(connector); } @@ -141,12 +138,6 @@ int sun4i_lvds_init(struct drm_device *drm, struct sun4i_tcon *tcon) drm_connector_attach_encoder(&lvds->connector, &lvds->encoder); - - ret = drm_panel_attach(lvds->panel, &lvds->connector); - if (ret) { - dev_err(drm->dev, "Couldn't attach our panel\n"); - goto err_cleanup_connector; - } } if (bridge) { diff --git a/drivers/gpu/drm/sun4i/sun4i_rgb.c b/drivers/gpu/drm/sun4i/sun4i_rgb.c index 5a7d43939ae6..e08afdffef50 100644 --- a/drivers/gpu/drm/sun4i/sun4i_rgb.c +++ b/drivers/gpu/drm/sun4i/sun4i_rgb.c @@ -147,7 +147,6 @@ sun4i_rgb_connector_destroy(struct drm_connector *connector) { struct sun4i_rgb *rgb = drm_connector_to_sun4i_rgb(connector); - drm_panel_detach(rgb->panel); drm_connector_cleanup(connector); } @@ -233,12 +232,6 @@ int sun4i_rgb_init(struct drm_device *drm, struct sun4i_tcon *tcon) drm_connector_attach_encoder(&rgb->connector, &rgb->encoder); - - ret = drm_panel_attach(rgb->panel, &rgb->connector); - if (ret) { - dev_err(drm->dev, "Couldn't attach our panel\n"); - goto err_cleanup_connector; - } } if (rgb->bridge) { diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c index aa67cb037e9d..128471b65f64 100644 --- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c +++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c @@ -973,7 +973,6 @@ static int sun6i_dsi_attach(struct mipi_dsi_host *host, dsi->panel = panel; dsi->device = device; - drm_panel_attach(dsi->panel, &dsi->connector); drm_kms_helper_hotplug_event(dsi->drm); dev_info(host->dev, "Attached device %s\n", device->name); @@ -990,7 +989,6 @@ static int sun6i_dsi_detach(struct mipi_dsi_host *host, dsi->panel = NULL; dsi->device = NULL; - drm_panel_detach(panel); drm_kms_helper_hotplug_event(dsi->drm); return 0; diff --git a/drivers/gpu/drm/tegra/dsi.c b/drivers/gpu/drm/tegra/dsi.c index 3820e8dff14b..3387de79718b 100644 --- a/drivers/gpu/drm/tegra/dsi.c +++ b/drivers/gpu/drm/tegra/dsi.c @@ -1498,10 +1498,8 @@ static int tegra_dsi_host_attach(struct mipi_dsi_host *host, if (IS_ERR(output->panel)) output->panel = NULL; - if (output->panel && output->connector.dev) { - drm_panel_attach(output->panel, &output->connector); + if (output->panel && output->connector.dev) drm_helper_hpd_irq_event(output->connector.dev); - } } return 0; diff --git a/drivers/gpu/drm/tegra/output.c b/drivers/gpu/drm/tegra/output.c index e36e5e7c2f69..a3adb9e4debf 100644 --- a/drivers/gpu/drm/tegra/output.c +++ b/drivers/gpu/drm/tegra/output.c @@ -179,13 +179,6 @@ void tegra_output_remove(struct tegra_output *output) int tegra_output_init(struct drm_device *drm, struct tegra_output *output) { int connector_type; - int err; - - if (output->panel) { - err = drm_panel_attach(output->panel, &output->connector); - if (err < 0) - return err; - } /* * The connector is now registered and ready to receive hotplug events @@ -220,9 +213,6 @@ void tegra_output_exit(struct tegra_output *output) */ if (output->hpd_gpio) disable_irq(output->hpd_irq); - - if (output->panel) - drm_panel_detach(output->panel); } void tegra_output_find_possible_crtcs(struct tegra_output *output, diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h index 6193cb555acc..9b374f88fb76 100644 --- a/include/drm/drm_panel.h +++ b/include/drm/drm_panel.h @@ -178,9 +178,6 @@ void drm_panel_init(struct drm_panel *panel, struct device *dev, int drm_panel_add(struct drm_panel *panel); void drm_panel_remove(struct drm_panel *panel); -int drm_panel_attach(struct drm_panel *panel, struct drm_connector *connector); -void drm_panel_detach(struct drm_panel *panel); - int drm_panel_prepare(struct drm_panel *panel); int drm_panel_unprepare(struct drm_panel *panel); 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.0 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS 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 86853C433E0 for ; Sun, 2 Aug 2020 16:44:07 +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 633EA20738 for ; Sun, 2 Aug 2020 16:44:07 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 633EA20738 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=perches.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 4BCC96E12D; Sun, 2 Aug 2020 16:44:06 +0000 (UTC) Received: from smtprelay.hostedemail.com (smtprelay0159.hostedemail.com [216.40.44.159]) by gabe.freedesktop.org (Postfix) with ESMTPS id DEAE46E158 for ; Sun, 2 Aug 2020 16:44:04 +0000 (UTC) Received: from filter.hostedemail.com (clb03-v110.bra.tucows.net [216.40.38.60]) by smtprelay07.hostedemail.com (Postfix) with ESMTP id DE99B181D341E; Sun, 2 Aug 2020 16:44:03 +0000 (UTC) X-Session-Marker: 6A6F6540706572636865732E636F6D X-HE-Tag: chin04_0d079c426f96 X-Filterd-Recvd-Size: 25490 Received: from XPS-9350.home (unknown [47.151.133.149]) (Authenticated sender: joe@perches.com) by omf05.hostedemail.com (Postfix) with ESMTPA; Sun, 2 Aug 2020 16:44:00 +0000 (UTC) Message-ID: <9e13761020750b1ce2f1fabee23ef6e2a2942882.camel@perches.com> Subject: [PATCH V2] drm: Remove unnecessary drm_panel_attach and drm_panel_detach From: Joe Perches To: Sam Ravnborg Date: Sun, 02 Aug 2020 09:43:59 -0700 In-Reply-To: <20200802084411.GA908790@ravnborg.org> References: <20200801120216.8488-1-bernard@vivo.com> <20200802070743.GA822300@ravnborg.org> <20200802084411.GA908790@ravnborg.org> User-Agent: Evolution 3.36.3-0ubuntu1 MIME-Version: 1.0 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: dri-devel@lists.freedesktop.org, opensource.kernel@vivo.com, Laurent Pinchart , Stefan Mavrodiev , David Airlie , Bernard Zhao , Jerry Han , linux-kernel@vger.kernel.org, Thierry Reding , Jagan Teki , Thomas Zimmermann , Robert Chiras , Icenowy Zheng Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" VGhlc2UgZnVuY3Rpb25zIGFyZSBub3cgZW1wdHkgYW5kIG5vIGxvbmdlcgp1c2VmdWwgc28gcmVt b3ZlIHRoZSBmdW5jdGlvbnMgYW5kIHRoZWlyIHVzZXMuCgpTaWduZWQtb2ZmLWJ5OiBKb2UgUGVy Y2hlcyA8am9lQHBlcmNoZXMuY29tPgotLS0KCj4gPiBJdCdzIHRvbyB0ZWRpb3VzIHRvIGJyZWFr IGFwYXJ0IGludG8gbXVsdGlwbGUgcGF0Y2hlcy4KPiA+IERvbmUgd2l0aCBjb2NjaW5lbGxlIGFu ZCB0eXBpbmcuCj4gPiAKPiA+IENvbXBpbGVkIGFsbHllc2NvbmZpZyB4ODYtNjQgb25seS4KClYy OiBSZW1vdmVkIDMgYWRkaXRpb25hbCBsaW5lcwoKZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21h cF9kcnYuYzozOTA6Mjc6IHdhcm5pbmc6IHVudXNlZCB2YXJpYWJsZSDigJhwcml24oCZIFstV3Vu dXNlZC12YXJpYWJsZV0KZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2RwaS5jOjQ1 OjIxOiB3YXJuaW5nOiB1bnVzZWQgdmFyaWFibGUg4oCYY3R44oCZIFstV3VudXNlZC12YXJpYWJs ZV0KZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX2x2ZHMuYzo1NzoyMTogd2FybmluZzogdW51 c2VkIHZhcmlhYmxlIOKAmGx2ZHPigJkgWy1XdW51c2VkLXZhcmlhYmxlXQoKIGRyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXgtYW54NjM0NS5jIHwgMTIgLS0tLS0tLS0KIGRy aXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfY29yZS5jIHwgIDkgLS0t LS0tCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL254cC1wdG4zNDYwLmMgICAgICAgICAgICAgICB8 ICAzIC0tCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhbmVsLmMgICAgICAgICAgICAgICAgICAg ICB8ICA3IC0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFkZS1wczg2MjIuYyAgICAg ICAgICAgICB8ICAzIC0tCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY0LmMgICAgICAg ICAgICAgICAgICB8ICAyIC0tCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY3LmMgICAg ICAgICAgICAgICAgICB8ICAzIC0tCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4 Ni5jICAgICAgICAgICAgICB8ICAzIC0tCiBkcml2ZXJzL2dwdS9kcm0vZHJtX3BhbmVsLmMgICAg ICAgICAgICAgICAgICAgICAgICB8IDM2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMv Z3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kcGkuYyAgICAgICAgICAgIHwgIDggLS0tLS0KIGRy aXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kc2kuYyAgICAgICAgICAgIHwgIDcgKyst LS0KIGRyaXZlcnMvZ3B1L2RybS9mc2wtZGN1L2ZzbF9kY3VfZHJtX3JnYi5jICAgICAgICAgIHwg IDcgLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pbXgvaW14LWxkYi5jICAgICAgICAgICAgICAgICAg ICAgIHwgMTAgLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaW14L3BhcmFsbGVsLWRpc3BsYXkuYyAg ICAgICAgICAgICB8ICA2IC0tLS0KIC4uLi9ncHUvZHJtL21zbS9kaXNwL21kcDQvbWRwNF9sdmRz X2Nvbm5lY3Rvci5jICAgIHwgIDcgKy0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpL2RzaV9t YW5hZ2VyLmMgICAgICAgICAgICAgIHwgIDEgLQogZHJpdmVycy9ncHUvZHJtL214c2ZiL214c2Zi X2Rydi5jICAgICAgICAgICAgICAgICAgfCAgNyArLS0tLQogZHJpdmVycy9ncHUvZHJtL214c2Zi L214c2ZiX291dC5jICAgICAgICAgICAgICAgICAgfCAgNiAtLS0tCiBkcml2ZXJzL2dwdS9kcm0v b21hcGRybS9vbWFwX2Rydi5jICAgICAgICAgICAgICAgICB8IDE3IC0tLS0tLS0tLS0KIGRyaXZl cnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfbHZkcy5jICAgICAgICAgICAgICAgIHwgIDYgKy0tLQog ZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2x2ZHMuYyAgICAgICAgICAgfCAgOSAt LS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9zdGkvc3RpX2R2by5jICAgICAgICAgICAgICAgICAgICAg IHwgIDIgLS0KIGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9sdmRzLmMgICAgICAgICAgICAg ICAgIHwgIDkgLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfcmdiLmMgICAgICAg ICAgICAgICAgICB8ICA3IC0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNmlfbWlwaV9k c2kuYyAgICAgICAgICAgICB8ICAyIC0tCiBkcml2ZXJzL2dwdS9kcm0vdGVncmEvZHNpLmMgICAg ICAgICAgICAgICAgICAgICAgICB8ICA0ICstLQogZHJpdmVycy9ncHUvZHJtL3RlZ3JhL291dHB1 dC5jICAgICAgICAgICAgICAgICAgICAgfCAxMCAtLS0tLS0KIGluY2x1ZGUvZHJtL2RybV9wYW5l bC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMgLS0KIDI4IGZpbGVzIGNoYW5nZWQs IDYgaW5zZXJ0aW9ucygrKSwgMjAwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXgtYW54NjM0NS5jIGIvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeC1hbng2MzQ1LmMKaW5kZXggZjA4MmI0ZWQ0ODc4 Li5kOTE2NGZhYjA0NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9n aXgvYW5hbG9naXgtYW54NjM0NS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9n aXgvYW5hbG9naXgtYW54NjM0NS5jCkBAIC01MDcsMTAgKzUwNyw2IEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgYW54NjM0NV9jb25uZWN0b3JfaGVscGVy X2Z1bmNzID0KIHN0YXRpYyB2b2lkCiBhbng2MzQ1X2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7Ci0Jc3RydWN0IGFueDYzNDUgKmFueDYzNDUgPSBj b25uZWN0b3JfdG9fYW54NjM0NShjb25uZWN0b3IpOwotCi0JaWYgKGFueDYzNDUtPnBhbmVsKQot CQlkcm1fcGFuZWxfZGV0YWNoKGFueDYzNDUtPnBhbmVsKTsKIAlkcm1fY29ubmVjdG9yX2NsZWFu dXAoY29ubmVjdG9yKTsKIH0KIApAQCAtNTc1LDE0ICs1NzEsNiBAQCBzdGF0aWMgaW50IGFueDYz NDVfYnJpZGdlX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAogCQlyZXR1cm4gZXJy OwogCX0KIAotCWlmIChhbng2MzQ1LT5wYW5lbCkgewotCQllcnIgPSBkcm1fcGFuZWxfYXR0YWNo KGFueDYzNDUtPnBhbmVsLCAmYW54NjM0NS0+Y29ubmVjdG9yKTsKLQkJaWYgKGVycikgewotCQkJ RFJNX0VSUk9SKCJGYWlsZWQgdG8gYXR0YWNoIHBhbmVsOiAlZFxuIiwgZXJyKTsKLQkJCXJldHVy biBlcnI7Ci0JCX0KLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9kcF9jb3JlLmMgYi9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX2NvcmUuYwppbmRleCA3NjczNmZiOGVkOTQu LmFhMWJiODYyOTNmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dp eC9hbmFsb2dpeF9kcF9jb3JlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dp eC9hbmFsb2dpeF9kcF9jb3JlLmMKQEAgLTEyNjUsMTQgKzEyNjUsNiBAQCBzdGF0aWMgaW50IGFu YWxvZ2l4X2RwX2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKIAkJfQog CX0KIAotCWlmIChkcC0+cGxhdF9kYXRhLT5wYW5lbCkgewotCQlyZXQgPSBkcm1fcGFuZWxfYXR0 YWNoKGRwLT5wbGF0X2RhdGEtPnBhbmVsLCAmZHAtPmNvbm5lY3Rvcik7Ci0JCWlmIChyZXQpIHsK LQkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGF0dGFjaCBwYW5lbFxuIik7Ci0JCQlyZXR1cm4gcmV0 OwotCQl9Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4MDMsNyArMTc5NSw2IEBAIHZvaWQg YW5hbG9naXhfZHBfdW5iaW5kKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKQogCWlmIChk cC0+cGxhdF9kYXRhLT5wYW5lbCkgewogCQlpZiAoZHJtX3BhbmVsX3VucHJlcGFyZShkcC0+cGxh dF9kYXRhLT5wYW5lbCkpCiAJCQlEUk1fRVJST1IoImZhaWxlZCB0byB0dXJub2ZmIHRoZSBwYW5l bFxuIik7Ci0JCWRybV9wYW5lbF9kZXRhY2goZHAtPnBsYXRfZGF0YS0+cGFuZWwpOwogCX0KIAog CWRybV9kcF9hdXhfdW5yZWdpc3RlcigmZHAtPmF1eCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL254cC1wdG4zNDYwLmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL254cC1w dG4zNDYwLmMKaW5kZXggNDM4ZTU2NmNlMGE0Li5kNDMzOTAyZDk3ZTUgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvbnhwLXB0bjM0NjAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL254cC1wdG4zNDYwLmMKQEAgLTI2NSw5ICsyNjUsNiBAQCBzdGF0aWMgaW50IHB0bjM0 NjBfYnJpZGdlX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAogCWRybV9jb25uZWN0 b3JfYXR0YWNoX2VuY29kZXIoJnB0bl9icmlkZ2UtPmNvbm5lY3RvciwKIAkJCQkJCQlicmlkZ2Ut PmVuY29kZXIpOwogCi0JaWYgKHB0bl9icmlkZ2UtPnBhbmVsKQotCQlkcm1fcGFuZWxfYXR0YWNo KHB0bl9icmlkZ2UtPnBhbmVsLCAmcHRuX2JyaWRnZS0+Y29ubmVjdG9yKTsKLQogCWRybV9oZWxw ZXJfaHBkX2lycV9ldmVudChwdG5fYnJpZGdlLT5jb25uZWN0b3IuZGV2KTsKIAogCXJldHVybiBy ZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhbmVsLmMgYi9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL3BhbmVsLmMKaW5kZXggMWU2M2VkNmIxOGFhLi4wZGRjMzc1NTExOTQg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvcGFuZWwuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL3BhbmVsLmMKQEAgLTgyLDE4ICs4MiwxMSBAQCBzdGF0aWMgaW50IHBh bmVsX2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKIAlkcm1fY29ubmVj dG9yX2F0dGFjaF9lbmNvZGVyKCZwYW5lbF9icmlkZ2UtPmNvbm5lY3RvciwKIAkJCQkJICBicmlk Z2UtPmVuY29kZXIpOwogCi0JcmV0ID0gZHJtX3BhbmVsX2F0dGFjaChwYW5lbF9icmlkZ2UtPnBh bmVsLCAmcGFuZWxfYnJpZGdlLT5jb25uZWN0b3IpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4g cmV0OwotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHBhbmVsX2JyaWRnZV9kZXRhY2go c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKIHsKLQlzdHJ1Y3QgcGFuZWxfYnJpZGdlICpwYW5l bF9icmlkZ2UgPSBkcm1fYnJpZGdlX3RvX3BhbmVsX2JyaWRnZShicmlkZ2UpOwotCi0JZHJtX3Bh bmVsX2RldGFjaChwYW5lbF9icmlkZ2UtPnBhbmVsKTsKIH0KIAogc3RhdGljIHZvaWQgcGFuZWxf YnJpZGdlX3ByZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvcGFyYWRlLXBzODYyMi5jIGIvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9wYXJhZGUtcHM4NjIyLmMKaW5kZXggZDc4OWVhMmE3ZmI5Li5jMTNlYzc3ZDg1OGIg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvcGFyYWRlLXBzODYyMi5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvcGFyYWRlLXBzODYyMi5jCkBAIC01MDUsOSArNTA1LDYg QEAgc3RhdGljIGludCBwczg2MjJfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCiAJ ZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmcHM4NjIyLT5jb25uZWN0b3IsCiAJCQkJCQkJ YnJpZGdlLT5lbmNvZGVyKTsKIAotCWlmIChwczg2MjItPnBhbmVsKQotCQlkcm1fcGFuZWxfYXR0 YWNoKHBzODYyMi0+cGFuZWwsICZwczg2MjItPmNvbm5lY3Rvcik7Ci0KIAlkcm1faGVscGVyX2hw ZF9pcnFfZXZlbnQocHM4NjIyLT5jb25uZWN0b3IuZGV2KTsKIAogCXJldHVybiByZXQ7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY0LmMgYi9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL3RjMzU4NzY0LmMKaW5kZXggNWFjMTQzMGZhYjA0Li5jMWUzNWJkZjkyMzIgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NjQuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY0LmMKQEAgLTM3Myw3ICszNzMsNiBAQCBzdGF0aWMgaW50 IHRjMzU4NzY0X2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAogCWRybV9jb25uZWN0 b3JfaGVscGVyX2FkZCgmY3R4LT5jb25uZWN0b3IsCiAJCQkJICZ0YzM1ODc2NF9jb25uZWN0b3Jf aGVscGVyX2Z1bmNzKTsKIAlkcm1fY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZjdHgtPmNvbm5l Y3RvciwgYnJpZGdlLT5lbmNvZGVyKTsKLQlkcm1fcGFuZWxfYXR0YWNoKGN0eC0+cGFuZWwsICZj dHgtPmNvbm5lY3Rvcik7CiAJY3R4LT5jb25uZWN0b3IuZnVuY3MtPnJlc2V0KCZjdHgtPmNvbm5l Y3Rvcik7CiAJZHJtX2Nvbm5lY3Rvcl9yZWdpc3RlcigmY3R4LT5jb25uZWN0b3IpOwogCkBAIC0z ODUsNyArMzg0LDYgQEAgc3RhdGljIHZvaWQgdGMzNTg3NjRfZGV0YWNoKHN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2UpCiAJc3RydWN0IHRjMzU4NzY0ICpjdHggPSBicmlkZ2VfdG9fdGMzNTg3NjQo YnJpZGdlKTsKIAogCWRybV9jb25uZWN0b3JfdW5yZWdpc3RlcigmY3R4LT5jb25uZWN0b3IpOwot CWRybV9wYW5lbF9kZXRhY2goY3R4LT5wYW5lbCk7CiAJY3R4LT5wYW5lbCA9IE5VTEw7CiAJZHJt X2Nvbm5lY3Rvcl9wdXQoJmN0eC0+Y29ubmVjdG9yKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvdGMzNTg3NjcuYyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3 NjcuYwppbmRleCBjMjc3N2IyMjZjNzUuLjA3NDY0NjJiYTBmNiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2Ny5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv dGMzNTg3NjcuYwpAQCAtMTQzNSw5ICsxNDM1LDYgQEAgc3RhdGljIGludCB0Y19icmlkZ2VfYXR0 YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCiAJCQkJCSAgICAgICBEUk1fQ09OTkVDVE9S X1BPTExfRElTQ09OTkVDVDsKIAl9CiAKLQlpZiAodGMtPnBhbmVsKQotCQlkcm1fcGFuZWxfYXR0 YWNoKHRjLT5wYW5lbCwgJnRjLT5jb25uZWN0b3IpOwotCiAJZHJtX2Rpc3BsYXlfaW5mb19zZXRf YnVzX2Zvcm1hdHMoJnRjLT5jb25uZWN0b3IuZGlzcGxheV9pbmZvLAogCQkJCQkgJmJ1c19mb3Jt YXQsIDEpOwogCXRjLT5jb25uZWN0b3IuZGlzcGxheV9pbmZvLmJ1c19mbGFncyA9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jIGIvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYwppbmRleCA4NmI5ZjBmODdhMTQuLjQ1NDU0NGUwZGE3 ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jCkBAIC0zOTQsOSArMzk0LDYg QEAgc3RhdGljIGludCB0aV9zbl9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UsCiAJfQogCXBkYXRhLT5kc2kgPSBkc2k7CiAKLQkvKiBhdHRhY2ggcGFuZWwgdG8gYnJpZGdl ICovCi0JZHJtX3BhbmVsX2F0dGFjaChwZGF0YS0+cGFuZWwsICZwZGF0YS0+Y29ubmVjdG9yKTsK LQogCXJldHVybiAwOwogCiBlcnJfZHNpX2F0dGFjaDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9kcm1fcGFuZWwuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFuZWwuYwppbmRleCA4Yzdi YWM4NWE3OTMuLjc4MDRiOTk0N2ZlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9w YW5lbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFuZWwuYwpAQCAtOTcsNDIgKzk3LDYg QEAgdm9pZCBkcm1fcGFuZWxfcmVtb3ZlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQogfQogRVhQ T1JUX1NZTUJPTChkcm1fcGFuZWxfcmVtb3ZlKTsKIAotLyoqCi0gKiBkcm1fcGFuZWxfYXR0YWNo IC0gYXR0YWNoIGEgcGFuZWwgdG8gYSBjb25uZWN0b3IKLSAqIEBwYW5lbDogRFJNIHBhbmVsCi0g KiBAY29ubmVjdG9yOiBEUk0gY29ubmVjdG9yCi0gKgotICogQWZ0ZXIgb2J0YWluaW5nIGEgcG9p bnRlciB0byBhIERSTSBwYW5lbCBhIGRpc3BsYXkgZHJpdmVyIGNhbGxzIHRoaXMKLSAqIGZ1bmN0 aW9uIHRvIGF0dGFjaCBhIHBhbmVsIHRvIGEgY29ubmVjdG9yLgotICoKLSAqIEFuIGVycm9yIGlz IHJldHVybmVkIGlmIHRoZSBwYW5lbCBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIGFub3RoZXIgY29u bmVjdG9yLgotICoKLSAqIFdoZW4gdW5sb2FkaW5nLCB0aGUgZHJpdmVyIHNob3VsZCBkZXRhY2gg ZnJvbSB0aGUgcGFuZWwgYnkgY2FsbGluZwotICogZHJtX3BhbmVsX2RldGFjaCgpLgotICoKLSAq IFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJl LgotICovCi1pbnQgZHJtX3BhbmVsX2F0dGFjaChzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCwgc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9T WU1CT0woZHJtX3BhbmVsX2F0dGFjaCk7Ci0KLS8qKgotICogZHJtX3BhbmVsX2RldGFjaCAtIGRl dGFjaCBhIHBhbmVsIGZyb20gYSBjb25uZWN0b3IKLSAqIEBwYW5lbDogRFJNIHBhbmVsCi0gKgot ICogRGV0YWNoZXMgYSBwYW5lbCBmcm9tIHRoZSBjb25uZWN0b3IgaXQgaXMgYXR0YWNoZWQgdG8u IElmIGEgcGFuZWwgaXMgbm90Ci0gKiBhdHRhY2hlZCB0byBhbnkgY29ubmVjdG9yIHRoaXMgaXMg ZWZmZWN0aXZlbHkgYSBuby1vcC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUg Y2FsbGVkIGJ5IHRoZSBwYW5lbCBkZXZpY2UgaXRzZWxmLiBJdAotICogaXMgb25seSBmb3IgdGhl IGRybSBkZXZpY2UgdGhhdCBjYWxsZWQgZHJtX3BhbmVsX2F0dGFjaCgpLgotICovCi12b2lkIGRy bV9wYW5lbF9kZXRhY2goc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCi17Ci19Ci1FWFBPUlRfU1lN Qk9MKGRybV9wYW5lbF9kZXRhY2gpOwotCiAvKioKICAqIGRybV9wYW5lbF9wcmVwYXJlIC0gcG93 ZXIgb24gYSBwYW5lbAogICogQHBhbmVsOiBEUk0gcGFuZWwKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kcGkuYyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3Mv ZXh5bm9zX2RybV9kcGkuYwppbmRleCA3YmE1MzU0ZTdkOTQuLjc0MTMyM2EyZTZjMyAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2RwaS5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kcGkuYwpAQCAtNDIsMTEgKzQyLDYgQEAgc3Rh dGljIGlubGluZSBzdHJ1Y3QgZXh5bm9zX2RwaSAqZW5jb2Rlcl90b19kcGkoc3RydWN0IGRybV9l bmNvZGVyICplKQogc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKIGV4eW5vc19kcGlf ZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCiB7Ci0J c3RydWN0IGV4eW5vc19kcGkgKmN0eCA9IGNvbm5lY3Rvcl90b19kcGkoY29ubmVjdG9yKTsKLQot CWlmIChjdHgtPnBhbmVsKQotCQlkcm1fcGFuZWxfYXR0YWNoKGN0eC0+cGFuZWwsICZjdHgtPmNv bm5lY3Rvcik7Ci0KIAlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiB9CiAKQEAg LTI0OSw4ICsyNDQsNSBAQCBpbnQgZXh5bm9zX2RwaV9yZW1vdmUoc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyKQogCiAJZXh5bm9zX2RwaV9kaXNhYmxlKCZjdHgtPmVuY29kZXIpOwogCi0JaWYg KGN0eC0+cGFuZWwpCi0JCWRybV9wYW5lbF9kZXRhY2goY3R4LT5wYW5lbCk7Ci0KIAlyZXR1cm4g MDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kc2ku YyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kc2kuYwppbmRleCA3YTZmNmRm NWU5NTQuLjg0M2RmY2VmYzQ2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9l eHlub3NfZHJtX2RzaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9k c2kuYwpAQCAtMTU1MSwxMiArMTU1MSwxMCBAQCBzdGF0aWMgaW50IGV4eW5vc19kc2lfaG9zdF9h dHRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCiAJCX0KIAogCQlkc2ktPnBhbmVsID0g b2ZfZHJtX2ZpbmRfcGFuZWwoZGV2aWNlLT5kZXYub2Zfbm9kZSk7Ci0JCWlmIChJU19FUlIoZHNp LT5wYW5lbCkpIHsKKwkJaWYgKElTX0VSUihkc2ktPnBhbmVsKSkKIAkJCWRzaS0+cGFuZWwgPSBO VUxMOwotCQl9IGVsc2UgewotCQkJZHJtX3BhbmVsX2F0dGFjaChkc2ktPnBhbmVsLCAmZHNpLT5j b25uZWN0b3IpOworCQllbHNlCiAJCQlkc2ktPmNvbm5lY3Rvci5zdGF0dXMgPSBjb25uZWN0b3Jf c3RhdHVzX2Nvbm5lY3RlZDsKLQkJfQogCX0KIAogCS8qCkBAIC0xNTk2LDcgKzE1OTQsNiBAQCBz dGF0aWMgaW50IGV4eW5vc19kc2lfaG9zdF9kZXRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhv c3QsCiAJaWYgKGRzaS0+cGFuZWwpIHsKIAkJbXV0ZXhfbG9jaygmZHJtLT5tb2RlX2NvbmZpZy5t dXRleCk7CiAJCWV4eW5vc19kc2lfZGlzYWJsZSgmZHNpLT5lbmNvZGVyKTsKLQkJZHJtX3BhbmVs X2RldGFjaChkc2ktPnBhbmVsKTsKIAkJZHNpLT5wYW5lbCA9IE5VTEw7CiAJCWRzaS0+Y29ubmVj dG9yLnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwogCQltdXRleF91bmxv Y2soJmRybS0+bW9kZV9jb25maWcubXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2ZzbC1kY3UvZnNsX2RjdV9kcm1fcmdiLmMgYi9kcml2ZXJzL2dwdS9kcm0vZnNsLWRjdS9mc2xf ZGN1X2RybV9yZ2IuYwppbmRleCA5YjBjNDczNmMyMWEuLjBhNzA3MTgyNzUzMyAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2ZzbC1kY3UvZnNsX2RjdV9kcm1fcmdiLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2ZzbC1kY3UvZnNsX2RjdV9kcm1fcmdiLmMKQEAgLTQzLDcgKzQzLDYgQEAgc3Rh dGljIHZvaWQgZnNsX2RjdV9kcm1fY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvcikKIAlzdHJ1Y3QgZnNsX2RjdV9kcm1fY29ubmVjdG9yICpmc2xfY29uID0g dG9fZnNsX2RjdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKIAogCWRybV9jb25uZWN0b3JfdW5yZWdp c3Rlcihjb25uZWN0b3IpOwotCWRybV9wYW5lbF9kZXRhY2goZnNsX2Nvbi0+cGFuZWwpOwogCWRy bV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwogfQogCkBAIC0xMDEsMTIgKzEwMCw2IEBA IHN0YXRpYyBpbnQgZnNsX2RjdV9hdHRhY2hfcGFuZWwoc3RydWN0IGZzbF9kY3VfZHJtX2Rldmlj ZSAqZnNsX2RldiwKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfc3lzZnM7CiAKLQlyZXQgPSBk cm1fcGFuZWxfYXR0YWNoKHBhbmVsLCBjb25uZWN0b3IpOwotCWlmIChyZXQpIHsKLQkJZGV2X2Vy cihmc2xfZGV2LT5kZXYsICJmYWlsZWQgdG8gYXR0YWNoIHBhbmVsXG4iKTsKLQkJZ290byBlcnJf c3lzZnM7Ci0JfQotCiAJcmV0dXJuIDA7CiAKIGVycl9zeXNmczoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pbXgvaW14LWxkYi5jIGIvZHJpdmVycy9ncHUvZHJtL2lteC9pbXgtbGRiLmMK aW5kZXggODc5MWQ2MGJlOTJlLi5hZjc1N2QxZTIxZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pbXgvaW14LWxkYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvaW14LWxkYi5jCkBA IC00NTUsMTMgKzQ1NSw2IEBAIHN0YXRpYyBpbnQgaW14X2xkYl9yZWdpc3RlcihzdHJ1Y3QgZHJt X2RldmljZSAqZHJtLAogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZpbXhfbGRiX2No LT5jb25uZWN0b3IsIGVuY29kZXIpOwogCX0KIAotCWlmIChpbXhfbGRiX2NoLT5wYW5lbCkgewot CQlyZXQgPSBkcm1fcGFuZWxfYXR0YWNoKGlteF9sZGJfY2gtPnBhbmVsLAotCQkJCSAgICAgICAm aW14X2xkYl9jaC0+Y29ubmVjdG9yKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQot CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcwMiw5ICs2OTUsNiBAQCBzdGF0aWMgdm9pZCBpbXhfbGRi X3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKIAlmb3Ig KGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCXN0cnVjdCBpbXhfbGRiX2NoYW5uZWwgKmNoYW5uZWwg PSAmaW14X2xkYi0+Y2hhbm5lbFtpXTsKIAotCQlpZiAoY2hhbm5lbC0+cGFuZWwpCi0JCQlkcm1f cGFuZWxfZGV0YWNoKGNoYW5uZWwtPnBhbmVsKTsKLQogCQlrZnJlZShjaGFubmVsLT5lZGlkKTsK IAkJaTJjX3B1dF9hZGFwdGVyKGNoYW5uZWwtPmRkYyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2lteC9wYXJhbGxlbC1kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaW14L3Bh cmFsbGVsLWRpc3BsYXkuYwppbmRleCBhODMxYjViZDE2MTMuLjgyMzJmNTEyYjllZCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2lteC9wYXJhbGxlbC1kaXNwbGF5LmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2lteC9wYXJhbGxlbC1kaXNwbGF5LmMKQEAgLTI4OSw5ICsyODksNiBAQCBzdGF0 aWMgaW50IGlteF9wZF9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAogCQkJCSAgIERS TV9NT0RFX0NPTk5FQ1RPUl9EUEkpOwogCX0KIAotCWlmIChpbXhwZC0+cGFuZWwpCi0JCWRybV9w YW5lbF9hdHRhY2goaW14cGQtPnBhbmVsLCAmaW14cGQtPmNvbm5lY3Rvcik7Ci0KIAlpZiAoaW14 cGQtPm5leHRfYnJpZGdlKSB7CiAJCXJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXIsIGlt eHBkLT5uZXh0X2JyaWRnZSwKIAkJCQkJJmlteHBkLT5icmlkZ2UsIDApOwpAQCAtMzU3LDkgKzM1 NCw2IEBAIHN0YXRpYyB2b2lkIGlteF9wZF91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QgZGV2aWNlICptYXN0ZXIsCiB7CiAJc3RydWN0IGlteF9wYXJhbGxlbF9kaXNwbGF5ICppbXhw ZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JaWYgKGlteHBkLT5wYW5lbCkKLQkJZHJtX3Bh bmVsX2RldGFjaChpbXhwZC0+cGFuZWwpOwotCiAJa2ZyZWUoaW14cGQtPmVkaWQpOwogfQogCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRwNC9tZHA0X2x2ZHNfY29ubmVj dG9yLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRwNC9tZHA0X2x2ZHNfY29ubmVjdG9y LmMKaW5kZXggYzdkZjcxZTJmYWZjLi43Mjg4MDQxZGQ4NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9tZHA0L21kcDRfbHZkc19jb25uZWN0b3IuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvbWRwNC9tZHA0X2x2ZHNfY29ubmVjdG9yLmMKQEAgLTUwLDE0ICs1 MCw5IEBAIHN0YXRpYyBpbnQgbWRwNF9sdmRzX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIAlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCA9IG1kcDRf bHZkc19jb25uZWN0b3ItPnBhbmVsOwogCWludCByZXQgPSAwOwogCi0JaWYgKHBhbmVsKSB7Ci0J CWRybV9wYW5lbF9hdHRhY2gocGFuZWwsIGNvbm5lY3Rvcik7Ci0KKwlpZiAocGFuZWwpCiAJCXJl dCA9IGRybV9wYW5lbF9nZXRfbW9kZXMocGFuZWwsIGNvbm5lY3Rvcik7CiAKLQkJZHJtX3BhbmVs X2RldGFjaChwYW5lbCk7Ci0JfQotCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21zbS9kc2kvZHNpX21hbmFnZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHNpL2RzaV9tYW5hZ2VyLmMKaW5kZXggNGIzNjNiZDdkZGZmLi4xZDI4ZGZiYTJjOWIgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL2RzaV9tYW5hZ2VyLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kc2kvZHNpX21hbmFnZXIuYwpAQCAtMzI4LDcgKzMyOCw2IEBAIHN0YXRp YyBpbnQgZHNpX21ncl9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpCiAJICogSW4gZHVhbCBEU0kgbW9kZSwgd2UgaGF2ZSBvbmUgY29ubmVjdG9yIHRo YXQgY2FuIGJlCiAJICogYXR0YWNoZWQgdG8gdGhlIGRybV9wYW5lbC4KIAkgKi8KLQlkcm1fcGFu ZWxfYXR0YWNoKHBhbmVsLCBjb25uZWN0b3IpOwogCW51bSA9IGRybV9wYW5lbF9nZXRfbW9kZXMo cGFuZWwsIGNvbm5lY3Rvcik7CiAJaWYgKCFudW0pCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL214c2ZiL214c2ZiX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL214c2Zi L214c2ZiX2Rydi5jCmluZGV4IDUwODc2NGZjY2QyNy4uNTFkYTBlM2RlNTg3IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vbXhzZmIvbXhzZmJfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L214c2ZiL214c2ZiX2Rydi5jCkBAIC0yNjUsMTEgKzI2NSw3IEBAIHN0YXRpYyBpbnQgbXhzZmJf bG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQogCSAqLwogCiAJaWYgKG14c2ZiLT5wYW5lbCkg ewotCQlyZXQgPSBkcm1fcGFuZWxfYXR0YWNoKG14c2ZiLT5wYW5lbCwgbXhzZmItPmNvbm5lY3Rv cik7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIoZHJtLT5kZXYsICJDYW5ub3QgY29ubmVjdCBw YW5lbDogJWRcbiIsIHJldCk7Ci0JCQlnb3RvIGVycl92Ymxhbms7Ci0JCX0KKwkJOwogCX0gZWxz ZSBpZiAobXhzZmItPmJyaWRnZSkgewogCQlyZXQgPSBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9h dHRhY2hfYnJpZGdlKCZteHNmYi0+cGlwZSwKIAkJCQkJCQkgICAgbXhzZmItPmJyaWRnZSk7CkBA IC0zMDYsNyArMzAyLDYgQEAgc3RhdGljIGludCBteHNmYl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNl ICpkcm0pCiAJcmV0dXJuIDA7CiAKIGVycl9pcnE6Ci0JZHJtX3BhbmVsX2RldGFjaChteHNmYi0+ cGFuZWwpOwogZXJyX3ZibGFuazoKIAlwbV9ydW50aW1lX2Rpc2FibGUoZHJtLT5kZXYpOwogCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXhzZmIvbXhzZmJfb3V0LmMgYi9kcml2ZXJzL2dw dS9kcm0vbXhzZmIvbXhzZmJfb3V0LmMKaW5kZXggOWVjYTE2MDVkMTFkLi5mOTNlN2E0ZDRjMTUg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9teHNmYi9teHNmYl9vdXQuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vbXhzZmIvbXhzZmJfb3V0LmMKQEAgLTU1LDEyICs1NSw2IEBAIG14c2ZiX3Bh bmVsX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9v bCBmb3JjZSkKIAogc3RhdGljIHZvaWQgbXhzZmJfcGFuZWxfY29ubmVjdG9yX2Rlc3Ryb3koc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKLQlzdHJ1Y3QgbXhzZmJfZHJtX3ByaXZh dGUgKm14c2ZiID0KLQkJCWRybV9jb25uZWN0b3JfdG9fbXhzZmJfZHJtX3ByaXZhdGUoY29ubmVj dG9yKTsKLQotCWlmIChteHNmYi0+cGFuZWwpCi0JCWRybV9wYW5lbF9kZXRhY2gobXhzZmItPnBh bmVsKTsKLQogCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOwogCWRybV9jb25u ZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L29tYXBkcm0vb21hcF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZHJ2LmMK aW5kZXggNDUyNjk2Nzk3OGI3Li41M2Q1ZTE4NGVlNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9vbWFwZHJtL29tYXBfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21h cF9kcnYuYwpAQCAtMzQ5LDEzICszNDksNiBAQCBzdGF0aWMgaW50IG9tYXBfbW9kZXNldF9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rl cihwaXBlLT5jb25uZWN0b3IsIGVuY29kZXIpOwogCi0JCWlmIChwaXBlLT5vdXRwdXQtPnBhbmVs KSB7Ci0JCQlyZXQgPSBkcm1fcGFuZWxfYXR0YWNoKHBpcGUtPm91dHB1dC0+cGFuZWwsCi0JCQkJ CSAgICAgICBwaXBlLT5jb25uZWN0b3IpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJcmV0dXJuIHJl dDsKLQkJfQotCiAJCWNydGMgPSBvbWFwX2NydGNfaW5pdChkZXYsIHBpcGUsIHByaXYtPnBsYW5l c1tpXSk7CiAJCWlmIChJU19FUlIoY3J0YykpCiAJCQlyZXR1cm4gUFRSX0VSUihjcnRjKTsKQEAg LTM5NCwxOCArMzg3LDggQEAgc3RhdGljIGludCBvbWFwX21vZGVzZXRfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQogCiBzdGF0aWMgdm9pZCBvbWFwX21vZGVzZXRfZmluaShzdHJ1Y3QgZHJt X2RldmljZSAqZGRldikKIHsKLQlzdHJ1Y3Qgb21hcF9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRkZXYt PmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGludCBpOwotCiAJb21hcF9kcm1faXJxX3VuaW5zdGFs bChkZGV2KTsKIAotCWZvciAoaSA9IDA7IGkgPCBwcml2LT5udW1fcGlwZXM7IGkrKykgewotCQlz dHJ1Y3Qgb21hcF9kcm1fcGlwZWxpbmUgKnBpcGUgPSAmcHJpdi0+cGlwZXNbaV07Ci0KLQkJaWYg KHBpcGUtPm91dHB1dC0+cGFuZWwpCi0JCQlkcm1fcGFuZWxfZGV0YWNoKHBpcGUtPm91dHB1dC0+ cGFuZWwpOwotCX0KLQogCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRkZXYpOwogfQogCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2x2ZHMuYyBiL2RyaXZlcnMvZ3B1 L2RybS9yY2FyLWR1L3JjYXJfbHZkcy5jCmluZGV4IGFiMGQ0OTYxOGNmOS4uYmNlZDcyOWE5NmZl IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2x2ZHMuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2x2ZHMuYwpAQCAtNjc3LDE1ICs2NzcsMTEgQEAg c3RhdGljIGludCByY2FyX2x2ZHNfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCiAJ aWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXR1cm4gZHJtX3BhbmVsX2F0dGFjaChs dmRzLT5wYW5lbCwgY29ubmVjdG9yKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcmNh cl9sdmRzX2RldGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQogewotCXN0cnVjdCByY2Fy X2x2ZHMgKmx2ZHMgPSBicmlkZ2VfdG9fcmNhcl9sdmRzKGJyaWRnZSk7Ci0KLQlpZiAobHZkcy0+ cGFuZWwpCi0JCWRybV9wYW5lbF9kZXRhY2gobHZkcy0+cGFuZWwpOwogfQogCiBzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3MgcmNhcl9sdmRzX2JyaWRnZV9vcHMgPSB7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfbHZkcy5jIGIvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2x2ZHMuYwppbmRleCA2M2Y5Njc5MDJjMmQuLmYy OTJjNmE2ZTIwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlw X2x2ZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfbHZkcy5jCkBA IC02MzQsMTMgKzYzNCw2IEBAIHN0YXRpYyBpbnQgcm9ja2NoaXBfbHZkc19iaW5kKHN0cnVjdCBk ZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAogCQkJCSAgICAgICJmYWlsZWQgdG8g YXR0YWNoIGVuY29kZXI6ICVkXG4iLCByZXQpOwogCQkJZ290byBlcnJfZnJlZV9jb25uZWN0b3I7 CiAJCX0KLQotCQlyZXQgPSBkcm1fcGFuZWxfYXR0YWNoKGx2ZHMtPnBhbmVsLCBjb25uZWN0b3Ip OwotCQlpZiAocmV0IDwgMCkgewotCQkJRFJNX0RFVl9FUlJPUihkcm1fZGV2LT5kZXYsCi0JCQkJ ICAgICAgImZhaWxlZCB0byBhdHRhY2ggcGFuZWw6ICVkXG4iLCByZXQpOwotCQkJZ290byBlcnJf ZnJlZV9jb25uZWN0b3I7Ci0JCX0KIAl9IGVsc2UgewogCQlyZXQgPSBkcm1fYnJpZGdlX2F0dGFj aChlbmNvZGVyLCBsdmRzLT5icmlkZ2UsIE5VTEwsIDApOwogCQlpZiAocmV0KSB7CkBAIC02NzYs OCArNjY5LDYgQEAgc3RhdGljIHZvaWQgcm9ja2NoaXBfbHZkc191bmJpbmQoc3RydWN0IGRldmlj ZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCiAKIAllbmNvZGVyX2Z1bmNzID0gbHZkcy0+ c29jX2RhdGEtPmhlbHBlcl9mdW5jczsKIAllbmNvZGVyX2Z1bmNzLT5kaXNhYmxlKCZsdmRzLT5l bmNvZGVyKTsKLQlpZiAobHZkcy0+cGFuZWwpCi0JCWRybV9wYW5lbF9kZXRhY2gobHZkcy0+cGFu ZWwpOwogCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOwogCWRybV9jb25uZWN0b3JfY2xlYW51cCgm bHZkcy0+Y29ubmVjdG9yKTsKIAlkcm1fZW5jb2Rlcl9jbGVhbnVwKCZsdmRzLT5lbmNvZGVyKTsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zdGkvc3RpX2R2by5jIGIvZHJpdmVycy9ncHUv ZHJtL3N0aS9zdGlfZHZvLmMKaW5kZXggZGU0YWY3NzM1YzQ2Li5kZGI0MTg0ZjA3MjYgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zdGkvc3RpX2R2by5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9zdGkvc3RpX2R2by5jCkBAIC0zODksOCArMzg5LDYgQEAgc3RpX2R2b19jb25uZWN0b3JfZGV0 ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCiAJCWR2by0+ cGFuZWwgPSBvZl9kcm1fZmluZF9wYW5lbChkdm8tPnBhbmVsX25vZGUpOwogCQlpZiAoSVNfRVJS KGR2by0+cGFuZWwpKQogCQkJZHZvLT5wYW5lbCA9IE5VTEw7Ci0JCWVsc2UKLQkJCWRybV9wYW5l bF9hdHRhY2goZHZvLT5wYW5lbCwgY29ubmVjdG9yKTsKIAl9CiAKIAlpZiAoZHZvLT5wYW5lbCkK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9sdmRzLmMgYi9kcml2ZXJz L2dwdS9kcm0vc3VuNGkvc3VuNGlfbHZkcy5jCmluZGV4IGZmZGEzMTg0YWExMi4uZDA2ZGQzMTNk M2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfbHZkcy5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9sdmRzLmMKQEAgLTU0LDkgKzU0LDYgQEAgc3Rh dGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBzdW40aV9sdmRzX2Nvbl9oZWxw ZXJfZnVuY3MgPSB7CiBzdGF0aWMgdm9pZAogc3VuNGlfbHZkc19jb25uZWN0b3JfZGVzdHJveShz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewotCXN0cnVjdCBzdW40aV9sdmRzICps dmRzID0gZHJtX2Nvbm5lY3Rvcl90b19zdW40aV9sdmRzKGNvbm5lY3Rvcik7Ci0KLQlkcm1fcGFu ZWxfZGV0YWNoKGx2ZHMtPnBhbmVsKTsKIAlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9y KTsKIH0KIApAQCAtMTQxLDEyICsxMzgsNiBAQCBpbnQgc3VuNGlfbHZkc19pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkcm0sIHN0cnVjdCBzdW40aV90Y29uICp0Y29uKQogCiAJCWRybV9jb25uZWN0 b3JfYXR0YWNoX2VuY29kZXIoJmx2ZHMtPmNvbm5lY3RvciwKIAkJCQkJCSAgJmx2ZHMtPmVuY29k ZXIpOwotCi0JCXJldCA9IGRybV9wYW5lbF9hdHRhY2gobHZkcy0+cGFuZWwsICZsdmRzLT5jb25u ZWN0b3IpOwotCQlpZiAocmV0KSB7Ci0JCQlkZXZfZXJyKGRybS0+ZGV2LCAiQ291bGRuJ3QgYXR0 YWNoIG91ciBwYW5lbFxuIik7Ci0JCQlnb3RvIGVycl9jbGVhbnVwX2Nvbm5lY3RvcjsKLQkJfQog CX0KIAogCWlmIChicmlkZ2UpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9z dW40aV9yZ2IuYyBiL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9yZ2IuYwppbmRleCA1YTdk NDM5MzlhZTYuLmUwOGFmZGZmZWY1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3N1bjRp L3N1bjRpX3JnYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9yZ2IuYwpAQCAt MTQ3LDcgKzE0Nyw2IEBAIHN1bjRpX3JnYl9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yKQogewogCXN0cnVjdCBzdW40aV9yZ2IgKnJnYiA9IGRybV9jb25u ZWN0b3JfdG9fc3VuNGlfcmdiKGNvbm5lY3Rvcik7CiAKLQlkcm1fcGFuZWxfZGV0YWNoKHJnYi0+ cGFuZWwpOwogCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwogfQogCkBAIC0yMzMs MTIgKzIzMiw2IEBAIGludCBzdW40aV9yZ2JfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBz dHJ1Y3Qgc3VuNGlfdGNvbiAqdGNvbikKIAogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVy KCZyZ2ItPmNvbm5lY3RvciwKIAkJCQkJCSAgJnJnYi0+ZW5jb2Rlcik7Ci0KLQkJcmV0ID0gZHJt X3BhbmVsX2F0dGFjaChyZ2ItPnBhbmVsLCAmcmdiLT5jb25uZWN0b3IpOwotCQlpZiAocmV0KSB7 Ci0JCQlkZXZfZXJyKGRybS0+ZGV2LCAiQ291bGRuJ3QgYXR0YWNoIG91ciBwYW5lbFxuIik7Ci0J CQlnb3RvIGVycl9jbGVhbnVwX2Nvbm5lY3RvcjsKLQkJfQogCX0KIAogCWlmIChyZ2ItPmJyaWRn ZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjZpX21pcGlfZHNpLmMg Yi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNmlfbWlwaV9kc2kuYwppbmRleCBhYTY3Y2IwMzdl OWQuLjEyODQ3MWI2NWY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjZp X21pcGlfZHNpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjZpX21pcGlfZHNpLmMK QEAgLTk3Myw3ICs5NzMsNiBAQCBzdGF0aWMgaW50IHN1bjZpX2RzaV9hdHRhY2goc3RydWN0IG1p cGlfZHNpX2hvc3QgKmhvc3QsCiAJZHNpLT5wYW5lbCA9IHBhbmVsOwogCWRzaS0+ZGV2aWNlID0g ZGV2aWNlOwogCi0JZHJtX3BhbmVsX2F0dGFjaChkc2ktPnBhbmVsLCAmZHNpLT5jb25uZWN0b3Ip OwogCWRybV9rbXNfaGVscGVyX2hvdHBsdWdfZXZlbnQoZHNpLT5kcm0pOwogCiAJZGV2X2luZm8o aG9zdC0+ZGV2LCAiQXR0YWNoZWQgZGV2aWNlICVzXG4iLCBkZXZpY2UtPm5hbWUpOwpAQCAtOTkw LDcgKzk4OSw2IEBAIHN0YXRpYyBpbnQgc3VuNmlfZHNpX2RldGFjaChzdHJ1Y3QgbWlwaV9kc2lf aG9zdCAqaG9zdCwKIAlkc2ktPnBhbmVsID0gTlVMTDsKIAlkc2ktPmRldmljZSA9IE5VTEw7CiAK LQlkcm1fcGFuZWxfZGV0YWNoKHBhbmVsKTsKIAlkcm1fa21zX2hlbHBlcl9ob3RwbHVnX2V2ZW50 KGRzaS0+ZHJtKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Rl Z3JhL2RzaS5jIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RzaS5jCmluZGV4IDM4MjBlOGRmZjE0 Yi4uMzM4N2RlNzk3MThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHNpLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RzaS5jCkBAIC0xNDk4LDEwICsxNDk4LDggQEAg c3RhdGljIGludCB0ZWdyYV9kc2lfaG9zdF9hdHRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhv c3QsCiAJCWlmIChJU19FUlIob3V0cHV0LT5wYW5lbCkpCiAJCQlvdXRwdXQtPnBhbmVsID0gTlVM TDsKIAotCQlpZiAob3V0cHV0LT5wYW5lbCAmJiBvdXRwdXQtPmNvbm5lY3Rvci5kZXYpIHsKLQkJ CWRybV9wYW5lbF9hdHRhY2gob3V0cHV0LT5wYW5lbCwgJm91dHB1dC0+Y29ubmVjdG9yKTsKKwkJ aWYgKG91dHB1dC0+cGFuZWwgJiYgb3V0cHV0LT5jb25uZWN0b3IuZGV2KQogCQkJZHJtX2hlbHBl cl9ocGRfaXJxX2V2ZW50KG91dHB1dC0+Y29ubmVjdG9yLmRldik7Ci0JCX0KIAl9CiAKIAlyZXR1 cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9vdXRwdXQuYyBiL2RyaXZl cnMvZ3B1L2RybS90ZWdyYS9vdXRwdXQuYwppbmRleCBlMzZlNWU3YzJmNjkuLmEzYWRiOWU0ZGVi ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL291dHB1dC5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS90ZWdyYS9vdXRwdXQuYwpAQCAtMTc5LDEzICsxNzksNiBAQCB2b2lkIHRlZ3Jh X291dHB1dF9yZW1vdmUoc3RydWN0IHRlZ3JhX291dHB1dCAqb3V0cHV0KQogaW50IHRlZ3JhX291 dHB1dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCB0ZWdyYV9vdXRwdXQgKm91 dHB1dCkKIHsKIAlpbnQgY29ubmVjdG9yX3R5cGU7Ci0JaW50IGVycjsKLQotCWlmIChvdXRwdXQt PnBhbmVsKSB7Ci0JCWVyciA9IGRybV9wYW5lbF9hdHRhY2gob3V0cHV0LT5wYW5lbCwgJm91dHB1 dC0+Y29ubmVjdG9yKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KIAogCS8q CiAJICogVGhlIGNvbm5lY3RvciBpcyBub3cgcmVnaXN0ZXJlZCBhbmQgcmVhZHkgdG8gcmVjZWl2 ZSBob3RwbHVnIGV2ZW50cwpAQCAtMjIwLDkgKzIxMyw2IEBAIHZvaWQgdGVncmFfb3V0cHV0X2V4 aXQoc3RydWN0IHRlZ3JhX291dHB1dCAqb3V0cHV0KQogCSAqLwogCWlmIChvdXRwdXQtPmhwZF9n cGlvKQogCQlkaXNhYmxlX2lycShvdXRwdXQtPmhwZF9pcnEpOwotCi0JaWYgKG91dHB1dC0+cGFu ZWwpCi0JCWRybV9wYW5lbF9kZXRhY2gob3V0cHV0LT5wYW5lbCk7CiB9CiAKIHZvaWQgdGVncmFf b3V0cHV0X2ZpbmRfcG9zc2libGVfY3J0Y3Moc3RydWN0IHRlZ3JhX291dHB1dCAqb3V0cHV0LApk aWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3BhbmVsLmggYi9pbmNsdWRlL2RybS9kcm1fcGFu ZWwuaAppbmRleCA2MTkzY2I1NTVhY2MuLjliMzc0Zjg4ZmI3NiAxMDA2NDQKLS0tIGEvaW5jbHVk ZS9kcm0vZHJtX3BhbmVsLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX3BhbmVsLmgKQEAgLTE3OCw5 ICsxNzgsNiBAQCB2b2lkIGRybV9wYW5lbF9pbml0KHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsLCBz dHJ1Y3QgZGV2aWNlICpkZXYsCiBpbnQgZHJtX3BhbmVsX2FkZChzdHJ1Y3QgZHJtX3BhbmVsICpw YW5lbCk7CiB2b2lkIGRybV9wYW5lbF9yZW1vdmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpOwog Ci1pbnQgZHJtX3BhbmVsX2F0dGFjaChzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCwgc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7Ci12b2lkIGRybV9wYW5lbF9kZXRhY2goc3RydWN0IGRy bV9wYW5lbCAqcGFuZWwpOwotCiBpbnQgZHJtX3BhbmVsX3ByZXBhcmUoc3RydWN0IGRybV9wYW5l bCAqcGFuZWwpOwogaW50IGRybV9wYW5lbF91bnByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFu ZWwpOwogCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK