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 3BEC4C433DF for ; Sun, 2 Aug 2020 17:34:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 15A3D20738 for ; Sun, 2 Aug 2020 17:34:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727014AbgHBRe1 (ORCPT ); Sun, 2 Aug 2020 13:34:27 -0400 Received: from asavdk4.altibox.net ([109.247.116.15]:44572 "EHLO asavdk4.altibox.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726778AbgHBRe1 (ORCPT ); Sun, 2 Aug 2020 13:34:27 -0400 Received: from ravnborg.org (unknown [188.228.123.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by asavdk4.altibox.net (Postfix) with ESMTPS id 5C7C580528; Sun, 2 Aug 2020 19:34:15 +0200 (CEST) Date: Sun, 2 Aug 2020 19:34:13 +0200 From: Sam Ravnborg To: Joe Perches 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 Subject: Re: [PATCH V2] drm: Remove unnecessary drm_panel_attach and drm_panel_detach Message-ID: <20200802173413.GA343746@ravnborg.org> References: <20200801120216.8488-1-bernard@vivo.com> <20200802070743.GA822300@ravnborg.org> <20200802084411.GA908790@ravnborg.org> <9e13761020750b1ce2f1fabee23ef6e2a2942882.camel@perches.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <9e13761020750b1ce2f1fabee23ef6e2a2942882.camel@perches.com> X-CMAE-Score: 0 X-CMAE-Analysis: v=2.3 cv=aP3eV41m c=1 sm=1 tr=0 a=S6zTFyMACwkrwXSdXUNehg==:117 a=S6zTFyMACwkrwXSdXUNehg==:17 a=IkcTkHD0fZMA:10 a=IJv9LcIfAAAA:8 a=Mhz83a1I6IwH88ic8sUA:9 a=6EYVrIzUCy9Lhh76:21 a=R3KPKiFfNceoizzk:21 a=QEXdDO2ut3YA:10 a=cmr4hm9N53k6aw-X_--Q:22 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Joe. On Sun, Aug 02, 2020 at 09:43:59AM -0700, Joe Perches wrote: > 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] Thanks, better now. I had to fix a few warnings and a build error to get it going on drm-misc-next. I will keep it locally just to let anyone speak up. I you do not see any mail from me until friday that it is applied please ping me. Sam > > 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 EBCCFC433E0 for ; Sun, 2 Aug 2020 17:34:22 +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 BD50420738 for ; Sun, 2 Aug 2020 17:34:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BD50420738 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ravnborg.org 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 02CCE89F03; Sun, 2 Aug 2020 17:34:22 +0000 (UTC) Received: from asavdk4.altibox.net (asavdk4.altibox.net [109.247.116.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 23D1889F03 for ; Sun, 2 Aug 2020 17:34:21 +0000 (UTC) Received: from ravnborg.org (unknown [188.228.123.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by asavdk4.altibox.net (Postfix) with ESMTPS id 5C7C580528; Sun, 2 Aug 2020 19:34:15 +0200 (CEST) Date: Sun, 2 Aug 2020 19:34:13 +0200 From: Sam Ravnborg To: Joe Perches Subject: Re: [PATCH V2] drm: Remove unnecessary drm_panel_attach and drm_panel_detach Message-ID: <20200802173413.GA343746@ravnborg.org> References: <20200801120216.8488-1-bernard@vivo.com> <20200802070743.GA822300@ravnborg.org> <20200802084411.GA908790@ravnborg.org> <9e13761020750b1ce2f1fabee23ef6e2a2942882.camel@perches.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <9e13761020750b1ce2f1fabee23ef6e2a2942882.camel@perches.com> X-CMAE-Score: 0 X-CMAE-Analysis: v=2.3 cv=aP3eV41m c=1 sm=1 tr=0 a=S6zTFyMACwkrwXSdXUNehg==:117 a=S6zTFyMACwkrwXSdXUNehg==:17 a=IkcTkHD0fZMA:10 a=IJv9LcIfAAAA:8 a=Mhz83a1I6IwH88ic8sUA:9 a=6EYVrIzUCy9Lhh76:21 a=R3KPKiFfNceoizzk:21 a=QEXdDO2ut3YA:10 a=cmr4hm9N53k6aw-X_--Q:22 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" SGkgSm9lLgoKT24gU3VuLCBBdWcgMDIsIDIwMjAgYXQgMDk6NDM6NTlBTSAtMDcwMCwgSm9lIFBl cmNoZXMgd3JvdGU6Cj4gVGhlc2UgZnVuY3Rpb25zIGFyZSBub3cgZW1wdHkgYW5kIG5vIGxvbmdl cgo+IHVzZWZ1bCBzbyByZW1vdmUgdGhlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgdXNlcy4KPiAKPiBT aWduZWQtb2ZmLWJ5OiBKb2UgUGVyY2hlcyA8am9lQHBlcmNoZXMuY29tPgo+IC0tLQo+IAo+ID4g PiBJdCdzIHRvbyB0ZWRpb3VzIHRvIGJyZWFrIGFwYXJ0IGludG8gbXVsdGlwbGUgcGF0Y2hlcy4K PiA+ID4gRG9uZSB3aXRoIGNvY2NpbmVsbGUgYW5kIHR5cGluZy4KPiA+ID4gCj4gPiA+IENvbXBp bGVkIGFsbHllc2NvbmZpZyB4ODYtNjQgb25seS4KPiAKPiBWMjogUmVtb3ZlZCAzIGFkZGl0aW9u YWwgbGluZXMKPiAKPiBkcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2Rydi5jOjM5MDoyNzog d2FybmluZzogdW51c2VkIHZhcmlhYmxlIOKAmHByaXbigJkgWy1XdW51c2VkLXZhcmlhYmxlXQo+ IGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kcGkuYzo0NToyMTogd2FybmluZzog dW51c2VkIHZhcmlhYmxlIOKAmGN0eOKAmSBbLVd1bnVzZWQtdmFyaWFibGVdCj4gZHJpdmVycy9n cHUvZHJtL3N1bjRpL3N1bjRpX2x2ZHMuYzo1NzoyMTogd2FybmluZzogdW51c2VkIHZhcmlhYmxl IOKAmGx2ZHPigJkgWy1XdW51c2VkLXZhcmlhYmxlXQoKVGhhbmtzLCBiZXR0ZXIgbm93LgoKSSBo YWQgdG8gZml4IGEgZmV3IHdhcm5pbmdzIGFuZCBhIGJ1aWxkIGVycm9yIHRvIGdldCBpdCBnb2lu ZyBvbgpkcm0tbWlzYy1uZXh0LiBJIHdpbGwga2VlcCBpdCBsb2NhbGx5IGp1c3QgdG8gbGV0IGFu eW9uZSBzcGVhayB1cC4KSSB5b3UgZG8gbm90IHNlZSBhbnkgbWFpbCBmcm9tIG1lIHVudGlsIGZy aWRheSB0aGF0IGl0IGlzIGFwcGxpZWQgcGxlYXNlCnBpbmcgbWUuCgoJU2FtCgo+IAo+ICBkcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4LWFueDYzNDUuYyB8IDEyIC0tLS0t LS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfY29yZS5j IHwgIDkgLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbnhwLXB0bjM0NjAuYyAgICAg ICAgICAgICAgIHwgIDMgLS0KPiAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYW5lbC5jICAgICAg ICAgICAgICAgICAgICAgfCAgNyAtLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFk ZS1wczg2MjIuYyAgICAgICAgICAgICB8ICAzIC0tCj4gIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv dGMzNTg3NjQuYyAgICAgICAgICAgICAgICAgIHwgIDIgLS0KPiAgZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS90YzM1ODc2Ny5jICAgICAgICAgICAgICAgICAgfCAgMyAtLQo+ICBkcml2ZXJzL2dwdS9k cm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jICAgICAgICAgICAgICB8ICAzIC0tCj4gIGRyaXZlcnMv Z3B1L2RybS9kcm1fcGFuZWwuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgMzYgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHBpLmMg ICAgICAgICAgICB8ICA4IC0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2Ry bV9kc2kuYyAgICAgICAgICAgIHwgIDcgKystLS0KPiAgZHJpdmVycy9ncHUvZHJtL2ZzbC1kY3Uv ZnNsX2RjdV9kcm1fcmdiLmMgICAgICAgICAgfCAgNyAtLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0v aW14L2lteC1sZGIuYyAgICAgICAgICAgICAgICAgICAgICB8IDEwIC0tLS0tLQo+ICBkcml2ZXJz L2dwdS9kcm0vaW14L3BhcmFsbGVsLWRpc3BsYXkuYyAgICAgICAgICAgICB8ICA2IC0tLS0KPiAg Li4uL2dwdS9kcm0vbXNtL2Rpc3AvbWRwNC9tZHA0X2x2ZHNfY29ubmVjdG9yLmMgICAgfCAgNyAr LS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9kc2lfbWFuYWdlci5jICAgICAgICAgICAg ICB8ICAxIC0KPiAgZHJpdmVycy9ncHUvZHJtL214c2ZiL214c2ZiX2Rydi5jICAgICAgICAgICAg ICAgICAgfCAgNyArLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXhzZmIvbXhzZmJfb3V0LmMgICAg ICAgICAgICAgICAgICB8ICA2IC0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9k cnYuYyAgICAgICAgICAgICAgICAgfCAxNyAtLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9y Y2FyLWR1L3JjYXJfbHZkcy5jICAgICAgICAgICAgICAgIHwgIDYgKy0tLQo+ICBkcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfbHZkcy5jICAgICAgICAgICB8ICA5IC0tLS0tLQo+ICBk cml2ZXJzL2dwdS9kcm0vc3RpL3N0aV9kdm8uYyAgICAgICAgICAgICAgICAgICAgICB8ICAyIC0t Cj4gIGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9sdmRzLmMgICAgICAgICAgICAgICAgIHwg IDkgLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9yZ2IuYyAgICAgICAgICAg ICAgICAgIHwgIDcgLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjZpX21pcGlfZHNp LmMgICAgICAgICAgICAgfCAgMiAtLQo+ICBkcml2ZXJzL2dwdS9kcm0vdGVncmEvZHNpLmMgICAg ICAgICAgICAgICAgICAgICAgICB8ICA0ICstLQo+ICBkcml2ZXJzL2dwdS9kcm0vdGVncmEvb3V0 cHV0LmMgICAgICAgICAgICAgICAgICAgICB8IDEwIC0tLS0tLQo+ICBpbmNsdWRlL2RybS9kcm1f cGFuZWwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzIC0tCj4gIDI4IGZpbGVzIGNo YW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMjAwIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4LWFueDYzNDUuYyBiL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXgtYW54NjM0NS5jCj4gaW5kZXgg ZjA4MmI0ZWQ0ODc4Li5kOTE2NGZhYjA0NGQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeC1hbng2MzQ1LmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4LWFueDYzNDUuYwo+IEBAIC01MDcsMTAgKzUwNyw2 IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgYW54NjM0 NV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0KPiAgc3RhdGljIHZvaWQKPiAgYW54NjM0NV9jb25u ZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICB7Cj4gLQlz dHJ1Y3QgYW54NjM0NSAqYW54NjM0NSA9IGNvbm5lY3Rvcl90b19hbng2MzQ1KGNvbm5lY3Rvcik7 Cj4gLQo+IC0JaWYgKGFueDYzNDUtPnBhbmVsKQo+IC0JCWRybV9wYW5lbF9kZXRhY2goYW54NjM0 NS0+cGFuZWwpOwo+ICAJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cj4gIH0KPiAg Cj4gQEAgLTU3NSwxNCArNTcxLDYgQEAgc3RhdGljIGludCBhbng2MzQ1X2JyaWRnZV9hdHRhY2go c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiAgCQlyZXR1cm4gZXJyOwo+ICAJfQo+ICAKPiAt CWlmIChhbng2MzQ1LT5wYW5lbCkgewo+IC0JCWVyciA9IGRybV9wYW5lbF9hdHRhY2goYW54NjM0 NS0+cGFuZWwsICZhbng2MzQ1LT5jb25uZWN0b3IpOwo+IC0JCWlmIChlcnIpIHsKPiAtCQkJRFJN X0VSUk9SKCJGYWlsZWQgdG8gYXR0YWNoIHBhbmVsOiAlZFxuIiwgZXJyKTsKPiAtCQkJcmV0dXJu IGVycjsKPiAtCQl9Cj4gLQl9Cj4gLQo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfY29yZS5jIGIv ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9kcF9jb3JlLmMKPiBpbmRl eCA3NjczNmZiOGVkOTQuLmFhMWJiODYyOTNmZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX2NvcmUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfY29yZS5jCj4gQEAgLTEyNjUsMTQgKzEy NjUsNiBAQCBzdGF0aWMgaW50IGFuYWxvZ2l4X2RwX2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9i cmlkZ2UgKmJyaWRnZSwKPiAgCQl9Cj4gIAl9Cj4gIAo+IC0JaWYgKGRwLT5wbGF0X2RhdGEtPnBh bmVsKSB7Cj4gLQkJcmV0ID0gZHJtX3BhbmVsX2F0dGFjaChkcC0+cGxhdF9kYXRhLT5wYW5lbCwg JmRwLT5jb25uZWN0b3IpOwo+IC0JCWlmIChyZXQpIHsKPiAtCQkJRFJNX0VSUk9SKCJGYWlsZWQg dG8gYXR0YWNoIHBhbmVsXG4iKTsKPiAtCQkJcmV0dXJuIHJldDsKPiAtCQl9Cj4gLQl9Cj4gLQo+ ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gQEAgLTE4MDMsNyArMTc5NSw2IEBAIHZvaWQgYW5hbG9n aXhfZHBfdW5iaW5kKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKQo+ICAJaWYgKGRwLT5w bGF0X2RhdGEtPnBhbmVsKSB7Cj4gIAkJaWYgKGRybV9wYW5lbF91bnByZXBhcmUoZHAtPnBsYXRf ZGF0YS0+cGFuZWwpKQo+ICAJCQlEUk1fRVJST1IoImZhaWxlZCB0byB0dXJub2ZmIHRoZSBwYW5l bFxuIik7Cj4gLQkJZHJtX3BhbmVsX2RldGFjaChkcC0+cGxhdF9kYXRhLT5wYW5lbCk7Cj4gIAl9 Cj4gIAo+ICAJZHJtX2RwX2F1eF91bnJlZ2lzdGVyKCZkcC0+YXV4KTsKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ueHAtcHRuMzQ2MC5jIGIvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9ueHAtcHRuMzQ2MC5jCj4gaW5kZXggNDM4ZTU2NmNlMGE0Li5kNDMzOTAyZDk3ZTUgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ueHAtcHRuMzQ2MC5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ueHAtcHRuMzQ2MC5jCj4gQEAgLTI2NSw5ICsyNjUsNiBA QCBzdGF0aWMgaW50IHB0bjM0NjBfYnJpZGdlX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJp ZGdlLAo+ICAJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmcHRuX2JyaWRnZS0+Y29ubmVj dG9yLAo+ICAJCQkJCQkJYnJpZGdlLT5lbmNvZGVyKTsKPiAgCj4gLQlpZiAocHRuX2JyaWRnZS0+ cGFuZWwpCj4gLQkJZHJtX3BhbmVsX2F0dGFjaChwdG5fYnJpZGdlLT5wYW5lbCwgJnB0bl9icmlk Z2UtPmNvbm5lY3Rvcik7Cj4gLQo+ICAJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KHB0bl9icmlk Z2UtPmNvbm5lY3Rvci5kZXYpOwo+ICAKPiAgCXJldHVybiByZXQ7Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvcGFuZWwuYyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvcGFu ZWwuYwo+IGluZGV4IDFlNjNlZDZiMThhYS4uMGRkYzM3NTUxMTk0IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvcGFuZWwuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvcGFuZWwuYwo+IEBAIC04MiwxOCArODIsMTEgQEAgc3RhdGljIGludCBwYW5lbF9icmlkZ2Vf YXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gIAlkcm1fY29ubmVjdG9yX2F0dGFj aF9lbmNvZGVyKCZwYW5lbF9icmlkZ2UtPmNvbm5lY3RvciwKPiAgCQkJCQkgIGJyaWRnZS0+ZW5j b2Rlcik7Cj4gIAo+IC0JcmV0ID0gZHJtX3BhbmVsX2F0dGFjaChwYW5lbF9icmlkZ2UtPnBhbmVs LCAmcGFuZWxfYnJpZGdlLT5jb25uZWN0b3IpOwo+IC0JaWYgKHJldCA8IDApCj4gLQkJcmV0dXJu IHJldDsKPiAtCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgcGFuZWxfYnJp ZGdlX2RldGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICB7Cj4gLQlzdHJ1Y3QgcGFu ZWxfYnJpZGdlICpwYW5lbF9icmlkZ2UgPSBkcm1fYnJpZGdlX3RvX3BhbmVsX2JyaWRnZShicmlk Z2UpOwo+IC0KPiAtCWRybV9wYW5lbF9kZXRhY2gocGFuZWxfYnJpZGdlLT5wYW5lbCk7Cj4gIH0K PiAgCj4gIHN0YXRpYyB2b2lkIHBhbmVsX2JyaWRnZV9wcmVfZW5hYmxlKHN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2UpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvcGFyYWRl LXBzODYyMi5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjIyLmMKPiBpbmRl eCBkNzg5ZWEyYTdmYjkuLmMxM2VjNzdkODU4YiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL3BhcmFkZS1wczg2MjIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv cGFyYWRlLXBzODYyMi5jCj4gQEAgLTUwNSw5ICs1MDUsNiBAQCBzdGF0aWMgaW50IHBzODYyMl9h dHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiAgCWRybV9jb25uZWN0b3JfYXR0YWNo X2VuY29kZXIoJnBzODYyMi0+Y29ubmVjdG9yLAo+ICAJCQkJCQkJYnJpZGdlLT5lbmNvZGVyKTsK PiAgCj4gLQlpZiAocHM4NjIyLT5wYW5lbCkKPiAtCQlkcm1fcGFuZWxfYXR0YWNoKHBzODYyMi0+ cGFuZWwsICZwczg2MjItPmNvbm5lY3Rvcik7Cj4gLQo+ICAJZHJtX2hlbHBlcl9ocGRfaXJxX2V2 ZW50KHBzODYyMi0+Y29ubmVjdG9yLmRldik7Cj4gIAo+ICAJcmV0dXJuIHJldDsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2NC5jIGIvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS90YzM1ODc2NC5jCj4gaW5kZXggNWFjMTQzMGZhYjA0Li5jMWUzNWJkZjkyMzIgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2NC5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2NC5jCj4gQEAgLTM3Myw3ICszNzMsNiBAQCBzdGF0 aWMgaW50IHRjMzU4NzY0X2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICAJZHJt X2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZjdHgtPmNvbm5lY3RvciwKPiAgCQkJCSAmdGMzNTg3NjRf Y29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7Cj4gIAlkcm1fY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVy KCZjdHgtPmNvbm5lY3RvciwgYnJpZGdlLT5lbmNvZGVyKTsKPiAtCWRybV9wYW5lbF9hdHRhY2go Y3R4LT5wYW5lbCwgJmN0eC0+Y29ubmVjdG9yKTsKPiAgCWN0eC0+Y29ubmVjdG9yLmZ1bmNzLT5y ZXNldCgmY3R4LT5jb25uZWN0b3IpOwo+ICAJZHJtX2Nvbm5lY3Rvcl9yZWdpc3RlcigmY3R4LT5j b25uZWN0b3IpOwo+ICAKPiBAQCAtMzg1LDcgKzM4NCw2IEBAIHN0YXRpYyB2b2lkIHRjMzU4NzY0 X2RldGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICAJc3RydWN0IHRjMzU4NzY0ICpj dHggPSBicmlkZ2VfdG9fdGMzNTg3NjQoYnJpZGdlKTsKPiAgCj4gIAlkcm1fY29ubmVjdG9yX3Vu cmVnaXN0ZXIoJmN0eC0+Y29ubmVjdG9yKTsKPiAtCWRybV9wYW5lbF9kZXRhY2goY3R4LT5wYW5l bCk7Cj4gIAljdHgtPnBhbmVsID0gTlVMTDsKPiAgCWRybV9jb25uZWN0b3JfcHV0KCZjdHgtPmNv bm5lY3Rvcik7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1 ODc2Ny5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2Ny5jCj4gaW5kZXggYzI3Nzdi MjI2Yzc1Li4wNzQ2NDYyYmEwZjYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS90YzM1ODc2Ny5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2Ny5jCj4g QEAgLTE0MzUsOSArMTQzNSw2IEBAIHN0YXRpYyBpbnQgdGNfYnJpZGdlX2F0dGFjaChzdHJ1Y3Qg ZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICAJCQkJCSAgICAgICBEUk1fQ09OTkVDVE9SX1BPTExfRElT Q09OTkVDVDsKPiAgCX0KPiAgCj4gLQlpZiAodGMtPnBhbmVsKQo+IC0JCWRybV9wYW5lbF9hdHRh Y2godGMtPnBhbmVsLCAmdGMtPmNvbm5lY3Rvcik7Cj4gLQo+ICAJZHJtX2Rpc3BsYXlfaW5mb19z ZXRfYnVzX2Zvcm1hdHMoJnRjLT5jb25uZWN0b3IuZGlzcGxheV9pbmZvLAo+ICAJCQkJCSAmYnVz X2Zvcm1hdCwgMSk7Cj4gIAl0Yy0+Y29ubmVjdG9yLmRpc3BsYXlfaW5mby5idXNfZmxhZ3MgPQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jIGIvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYwo+IGluZGV4IDg2YjlmMGY4N2ExNC4u NDU0NTQ0ZTBkYTdkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242 NWRzaTg2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jCj4g QEAgLTM5NCw5ICszOTQsNiBAQCBzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9hdHRhY2goc3RydWN0 IGRybV9icmlkZ2UgKmJyaWRnZSwKPiAgCX0KPiAgCXBkYXRhLT5kc2kgPSBkc2k7Cj4gIAo+IC0J LyogYXR0YWNoIHBhbmVsIHRvIGJyaWRnZSAqLwo+IC0JZHJtX3BhbmVsX2F0dGFjaChwZGF0YS0+ cGFuZWwsICZwZGF0YS0+Y29ubmVjdG9yKTsKPiAtCj4gIAlyZXR1cm4gMDsKPiAgCj4gIGVycl9k c2lfYXR0YWNoOgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhbmVsLmMgYi9k cml2ZXJzL2dwdS9kcm0vZHJtX3BhbmVsLmMKPiBpbmRleCA4YzdiYWM4NWE3OTMuLjc4MDRiOTk0 N2ZlOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhbmVsLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vZHJtX3BhbmVsLmMKPiBAQCAtOTcsNDIgKzk3LDYgQEAgdm9pZCBkcm1f cGFuZWxfcmVtb3ZlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICB9Cj4gIEVYUE9SVF9TWU1C T0woZHJtX3BhbmVsX3JlbW92ZSk7Cj4gIAo+IC0vKioKPiAtICogZHJtX3BhbmVsX2F0dGFjaCAt IGF0dGFjaCBhIHBhbmVsIHRvIGEgY29ubmVjdG9yCj4gLSAqIEBwYW5lbDogRFJNIHBhbmVsCj4g LSAqIEBjb25uZWN0b3I6IERSTSBjb25uZWN0b3IKPiAtICoKPiAtICogQWZ0ZXIgb2J0YWluaW5n IGEgcG9pbnRlciB0byBhIERSTSBwYW5lbCBhIGRpc3BsYXkgZHJpdmVyIGNhbGxzIHRoaXMKPiAt ICogZnVuY3Rpb24gdG8gYXR0YWNoIGEgcGFuZWwgdG8gYSBjb25uZWN0b3IuCj4gLSAqCj4gLSAq IEFuIGVycm9yIGlzIHJldHVybmVkIGlmIHRoZSBwYW5lbCBpcyBhbHJlYWR5IGF0dGFjaGVkIHRv IGFub3RoZXIgY29ubmVjdG9yLgo+IC0gKgo+IC0gKiBXaGVuIHVubG9hZGluZywgdGhlIGRyaXZl ciBzaG91bGQgZGV0YWNoIGZyb20gdGhlIHBhbmVsIGJ5IGNhbGxpbmcKPiAtICogZHJtX3BhbmVs X2RldGFjaCgpLgo+IC0gKgo+IC0gKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZl IGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiAtICovCj4gLWludCBkcm1fcGFuZWxfYXR0YWNoKHN0 cnVjdCBkcm1fcGFuZWwgKnBhbmVsLCBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ IC17Cj4gLQlyZXR1cm4gMDsKPiAtfQo+IC1FWFBPUlRfU1lNQk9MKGRybV9wYW5lbF9hdHRhY2gp Owo+IC0KPiAtLyoqCj4gLSAqIGRybV9wYW5lbF9kZXRhY2ggLSBkZXRhY2ggYSBwYW5lbCBmcm9t IGEgY29ubmVjdG9yCj4gLSAqIEBwYW5lbDogRFJNIHBhbmVsCj4gLSAqCj4gLSAqIERldGFjaGVz IGEgcGFuZWwgZnJvbSB0aGUgY29ubmVjdG9yIGl0IGlzIGF0dGFjaGVkIHRvLiBJZiBhIHBhbmVs IGlzIG5vdAo+IC0gKiBhdHRhY2hlZCB0byBhbnkgY29ubmVjdG9yIHRoaXMgaXMgZWZmZWN0aXZl bHkgYSBuby1vcC4KPiAtICoKPiAtICogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxl ZCBieSB0aGUgcGFuZWwgZGV2aWNlIGl0c2VsZi4gSXQKPiAtICogaXMgb25seSBmb3IgdGhlIGRy bSBkZXZpY2UgdGhhdCBjYWxsZWQgZHJtX3BhbmVsX2F0dGFjaCgpLgo+IC0gKi8KPiAtdm9pZCBk cm1fcGFuZWxfZGV0YWNoKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+IC17Cj4gLX0KPiAtRVhQ T1JUX1NZTUJPTChkcm1fcGFuZWxfZGV0YWNoKTsKPiAtCj4gIC8qKgo+ICAgKiBkcm1fcGFuZWxf cHJlcGFyZSAtIHBvd2VyIG9uIGEgcGFuZWwKPiAgICogQHBhbmVsOiBEUk0gcGFuZWwKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2RwaS5jIGIvZHJpdmVy cy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2RwaS5jCj4gaW5kZXggN2JhNTM1NGU3ZDk0Li43 NDEzMjNhMmU2YzMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3Nf ZHJtX2RwaS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2RwaS5j Cj4gQEAgLTQyLDExICs0Miw2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGV4eW5vc19kcGkgKmVu Y29kZXJfdG9fZHBpKHN0cnVjdCBkcm1fZW5jb2RlciAqZSkKPiAgc3RhdGljIGVudW0gZHJtX2Nv bm5lY3Rvcl9zdGF0dXMKPiAgZXh5bm9zX2RwaV9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKPiAgewo+IC0Jc3RydWN0IGV4eW5vc19kcGkgKmN0eCA9 IGNvbm5lY3Rvcl90b19kcGkoY29ubmVjdG9yKTsKPiAtCj4gLQlpZiAoY3R4LT5wYW5lbCkKPiAt CQlkcm1fcGFuZWxfYXR0YWNoKGN0eC0+cGFuZWwsICZjdHgtPmNvbm5lY3Rvcik7Cj4gLQo+ICAJ cmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwo+ICB9Cj4gIAo+IEBAIC0yNDksOCAr MjQ0LDUgQEAgaW50IGV4eW5vc19kcGlfcmVtb3ZlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikKPiAgCj4gIAlleHlub3NfZHBpX2Rpc2FibGUoJmN0eC0+ZW5jb2Rlcik7Cj4gIAo+IC0JaWYg KGN0eC0+cGFuZWwpCj4gLQkJZHJtX3BhbmVsX2RldGFjaChjdHgtPnBhbmVsKTsKPiAtCj4gIAly ZXR1cm4gMDsKPiAgfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5v c19kcm1fZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHNpLmMKPiBp bmRleCA3YTZmNmRmNWU5NTQuLjg0M2RmY2VmYzQ2YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHNpLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZXh5 bm9zL2V4eW5vc19kcm1fZHNpLmMKPiBAQCAtMTU1MSwxMiArMTU1MSwxMCBAQCBzdGF0aWMgaW50 IGV4eW5vc19kc2lfaG9zdF9hdHRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCj4gIAkJ fQo+ICAKPiAgCQlkc2ktPnBhbmVsID0gb2ZfZHJtX2ZpbmRfcGFuZWwoZGV2aWNlLT5kZXYub2Zf bm9kZSk7Cj4gLQkJaWYgKElTX0VSUihkc2ktPnBhbmVsKSkgewo+ICsJCWlmIChJU19FUlIoZHNp LT5wYW5lbCkpCj4gIAkJCWRzaS0+cGFuZWwgPSBOVUxMOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCWRy bV9wYW5lbF9hdHRhY2goZHNpLT5wYW5lbCwgJmRzaS0+Y29ubmVjdG9yKTsKPiArCQllbHNlCj4g IAkJCWRzaS0+Y29ubmVjdG9yLnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwo+ IC0JCX0KPiAgCX0KPiAgCj4gIAkvKgo+IEBAIC0xNTk2LDcgKzE1OTQsNiBAQCBzdGF0aWMgaW50 IGV4eW5vc19kc2lfaG9zdF9kZXRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCj4gIAlp ZiAoZHNpLT5wYW5lbCkgewo+ICAJCW11dGV4X2xvY2soJmRybS0+bW9kZV9jb25maWcubXV0ZXgp Owo+ICAJCWV4eW5vc19kc2lfZGlzYWJsZSgmZHNpLT5lbmNvZGVyKTsKPiAtCQlkcm1fcGFuZWxf ZGV0YWNoKGRzaS0+cGFuZWwpOwo+ICAJCWRzaS0+cGFuZWwgPSBOVUxMOwo+ICAJCWRzaS0+Y29u bmVjdG9yLnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwo+ICAJCW11dGV4 X3VubG9jaygmZHJtLT5tb2RlX2NvbmZpZy5tdXRleCk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9mc2wtZGN1L2ZzbF9kY3VfZHJtX3JnYi5jIGIvZHJpdmVycy9ncHUvZHJtL2ZzbC1k Y3UvZnNsX2RjdV9kcm1fcmdiLmMKPiBpbmRleCA5YjBjNDczNmMyMWEuLjBhNzA3MTgyNzUzMyAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZnNsLWRjdS9mc2xfZGN1X2RybV9yZ2IuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9mc2wtZGN1L2ZzbF9kY3VfZHJtX3JnYi5jCj4gQEAgLTQz LDcgKzQzLDYgQEAgc3RhdGljIHZvaWQgZnNsX2RjdV9kcm1fY29ubmVjdG9yX2Rlc3Ryb3koc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiAgCXN0cnVjdCBmc2xfZGN1X2RybV9jb25u ZWN0b3IgKmZzbF9jb24gPSB0b19mc2xfZGN1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwo+ICAKPiAg CWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOwo+IC0JZHJtX3BhbmVsX2RldGFj aChmc2xfY29uLT5wYW5lbCk7Cj4gIAlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsK PiAgfQo+ICAKPiBAQCAtMTAxLDEyICsxMDAsNiBAQCBzdGF0aWMgaW50IGZzbF9kY3VfYXR0YWNo X3BhbmVsKHN0cnVjdCBmc2xfZGN1X2RybV9kZXZpY2UgKmZzbF9kZXYsCj4gIAlpZiAocmV0IDwg MCkKPiAgCQlnb3RvIGVycl9zeXNmczsKPiAgCj4gLQlyZXQgPSBkcm1fcGFuZWxfYXR0YWNoKHBh bmVsLCBjb25uZWN0b3IpOwo+IC0JaWYgKHJldCkgewo+IC0JCWRldl9lcnIoZnNsX2Rldi0+ZGV2 LCAiZmFpbGVkIHRvIGF0dGFjaCBwYW5lbFxuIik7Cj4gLQkJZ290byBlcnJfc3lzZnM7Cj4gLQl9 Cj4gLQo+ICAJcmV0dXJuIDA7Cj4gIAo+ICBlcnJfc3lzZnM6Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pbXgvaW14LWxkYi5jIGIvZHJpdmVycy9ncHUvZHJtL2lteC9pbXgtbGRiLmMK PiBpbmRleCA4NzkxZDYwYmU5MmUuLmFmNzU3ZDFlMjFmZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaW14L2lteC1sZGIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvaW14LWxk Yi5jCj4gQEAgLTQ1NSwxMyArNDU1LDYgQEAgc3RhdGljIGludCBpbXhfbGRiX3JlZ2lzdGVyKHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0sCj4gIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcigm aW14X2xkYl9jaC0+Y29ubmVjdG9yLCBlbmNvZGVyKTsKPiAgCX0KPiAgCj4gLQlpZiAoaW14X2xk Yl9jaC0+cGFuZWwpIHsKPiAtCQlyZXQgPSBkcm1fcGFuZWxfYXR0YWNoKGlteF9sZGJfY2gtPnBh bmVsLAo+IC0JCQkJICAgICAgICZpbXhfbGRiX2NoLT5jb25uZWN0b3IpOwo+IC0JCWlmIChyZXQp Cj4gLQkJCXJldHVybiByZXQ7Cj4gLQl9Cj4gLQo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gQEAg LTcwMiw5ICs2OTUsNiBAQCBzdGF0aWMgdm9pZCBpbXhfbGRiX3VuYmluZChzdHJ1Y3QgZGV2aWNl ICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPiAgCWZvciAoaSA9IDA7IGkgPCAyOyBpKysp IHsKPiAgCQlzdHJ1Y3QgaW14X2xkYl9jaGFubmVsICpjaGFubmVsID0gJmlteF9sZGItPmNoYW5u ZWxbaV07Cj4gIAo+IC0JCWlmIChjaGFubmVsLT5wYW5lbCkKPiAtCQkJZHJtX3BhbmVsX2RldGFj aChjaGFubmVsLT5wYW5lbCk7Cj4gLQo+ICAJCWtmcmVlKGNoYW5uZWwtPmVkaWQpOwo+ICAJCWky Y19wdXRfYWRhcHRlcihjaGFubmVsLT5kZGMpOwo+ICAJfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaW14L3BhcmFsbGVsLWRpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvcGFy YWxsZWwtZGlzcGxheS5jCj4gaW5kZXggYTgzMWI1YmQxNjEzLi44MjMyZjUxMmI5ZWQgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2lteC9wYXJhbGxlbC1kaXNwbGF5LmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaW14L3BhcmFsbGVsLWRpc3BsYXkuYwo+IEBAIC0yODksOSArMjg5LDYg QEAgc3RhdGljIGludCBpbXhfcGRfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKPiAg CQkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EUEkpOwo+ICAJfQo+ICAKPiAtCWlmIChpbXhwZC0+ cGFuZWwpCj4gLQkJZHJtX3BhbmVsX2F0dGFjaChpbXhwZC0+cGFuZWwsICZpbXhwZC0+Y29ubmVj dG9yKTsKPiAtCj4gIAlpZiAoaW14cGQtPm5leHRfYnJpZGdlKSB7Cj4gIAkJcmV0ID0gZHJtX2Jy aWRnZV9hdHRhY2goZW5jb2RlciwgaW14cGQtPm5leHRfYnJpZGdlLAo+ICAJCQkJCSZpbXhwZC0+ YnJpZGdlLCAwKTsKPiBAQCAtMzU3LDkgKzM1NCw2IEBAIHN0YXRpYyB2b2lkIGlteF9wZF91bmJp bmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCj4gIHsKPiAgCXN0 cnVjdCBpbXhfcGFyYWxsZWxfZGlzcGxheSAqaW14cGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK PiAgCj4gLQlpZiAoaW14cGQtPnBhbmVsKQo+IC0JCWRybV9wYW5lbF9kZXRhY2goaW14cGQtPnBh bmVsKTsKPiAtCj4gIAlrZnJlZShpbXhwZC0+ZWRpZCk7Cj4gIH0KPiAgCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA0L21kcDRfbHZkc19jb25uZWN0b3IuYyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA0L21kcDRfbHZkc19jb25uZWN0b3IuYwo+IGluZGV4 IGM3ZGY3MWUyZmFmYy4uNzI4ODA0MWRkODZhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9tZHA0L21kcDRfbHZkc19jb25uZWN0b3IuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9tZHA0L21kcDRfbHZkc19jb25uZWN0b3IuYwo+IEBAIC01MCwxNCArNTAs OSBAQCBzdGF0aWMgaW50IG1kcDRfbHZkc19jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpCj4gIAlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCA9IG1kcDRf bHZkc19jb25uZWN0b3ItPnBhbmVsOwo+ICAJaW50IHJldCA9IDA7Cj4gIAo+IC0JaWYgKHBhbmVs KSB7Cj4gLQkJZHJtX3BhbmVsX2F0dGFjaChwYW5lbCwgY29ubmVjdG9yKTsKPiAtCj4gKwlpZiAo cGFuZWwpCj4gIAkJcmV0ID0gZHJtX3BhbmVsX2dldF9tb2RlcyhwYW5lbCwgY29ubmVjdG9yKTsK PiAgCj4gLQkJZHJtX3BhbmVsX2RldGFjaChwYW5lbCk7Cj4gLQl9Cj4gLQo+ICAJcmV0dXJuIHJl dDsKPiAgfQo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvZHNpX21h bmFnZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL2RzaV9tYW5hZ2VyLmMKPiBpbmRleCA0 YjM2M2JkN2RkZmYuLjFkMjhkZmJhMmM5YiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2RzaS9kc2lfbWFuYWdlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvZHNp X21hbmFnZXIuYwo+IEBAIC0zMjgsNyArMzI4LDYgQEAgc3RhdGljIGludCBkc2lfbWdyX2Nvbm5l Y3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiAgCSAqIElu IGR1YWwgRFNJIG1vZGUsIHdlIGhhdmUgb25lIGNvbm5lY3RvciB0aGF0IGNhbiBiZQo+ICAJICog YXR0YWNoZWQgdG8gdGhlIGRybV9wYW5lbC4KPiAgCSAqLwo+IC0JZHJtX3BhbmVsX2F0dGFjaChw YW5lbCwgY29ubmVjdG9yKTsKPiAgCW51bSA9IGRybV9wYW5lbF9nZXRfbW9kZXMocGFuZWwsIGNv bm5lY3Rvcik7Cj4gIAlpZiAoIW51bSkKPiAgCQlyZXR1cm4gMDsKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL214c2ZiL214c2ZiX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL214c2ZiL214 c2ZiX2Rydi5jCj4gaW5kZXggNTA4NzY0ZmNjZDI3Li41MWRhMGUzZGU1ODcgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL214c2ZiL214c2ZiX2Rydi5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL214c2ZiL214c2ZiX2Rydi5jCj4gQEAgLTI2NSwxMSArMjY1LDcgQEAgc3RhdGljIGludCBt eHNmYl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gIAkgKi8KPiAgCj4gIAlpZiAobXhz ZmItPnBhbmVsKSB7Cj4gLQkJcmV0ID0gZHJtX3BhbmVsX2F0dGFjaChteHNmYi0+cGFuZWwsIG14 c2ZiLT5jb25uZWN0b3IpOwo+IC0JCWlmIChyZXQpIHsKPiAtCQkJZGV2X2Vycihkcm0tPmRldiwg IkNhbm5vdCBjb25uZWN0IHBhbmVsOiAlZFxuIiwgcmV0KTsKPiAtCQkJZ290byBlcnJfdmJsYW5r Owo+IC0JCX0KPiArCQk7Cj4gIAl9IGVsc2UgaWYgKG14c2ZiLT5icmlkZ2UpIHsKPiAgCQlyZXQg PSBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9hdHRhY2hfYnJpZGdlKCZteHNmYi0+cGlwZSwKPiAg CQkJCQkJCSAgICBteHNmYi0+YnJpZGdlKTsKPiBAQCAtMzA2LDcgKzMwMiw2IEBAIHN0YXRpYyBp bnQgbXhzZmJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICAJcmV0dXJuIDA7Cj4gIAo+ ICBlcnJfaXJxOgo+IC0JZHJtX3BhbmVsX2RldGFjaChteHNmYi0+cGFuZWwpOwo+ICBlcnJfdmJs YW5rOgo+ICAJcG1fcnVudGltZV9kaXNhYmxlKGRybS0+ZGV2KTsKPiAgCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9teHNmYi9teHNmYl9vdXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9teHNm Yi9teHNmYl9vdXQuYwo+IGluZGV4IDllY2ExNjA1ZDExZC4uZjkzZTdhNGQ0YzE1IDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9teHNmYi9teHNmYl9vdXQuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9teHNmYi9teHNmYl9vdXQuYwo+IEBAIC01NSwxMiArNTUsNiBAQCBteHNmYl9wYW5l bF9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wg Zm9yY2UpCj4gIAo+ICBzdGF0aWMgdm9pZCBteHNmYl9wYW5lbF9jb25uZWN0b3JfZGVzdHJveShz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICB7Cj4gLQlzdHJ1Y3QgbXhzZmJfZHJt X3ByaXZhdGUgKm14c2ZiID0KPiAtCQkJZHJtX2Nvbm5lY3Rvcl90b19teHNmYl9kcm1fcHJpdmF0 ZShjb25uZWN0b3IpOwo+IC0KPiAtCWlmIChteHNmYi0+cGFuZWwpCj4gLQkJZHJtX3BhbmVsX2Rl dGFjaChteHNmYi0+cGFuZWwpOwo+IC0KPiAgCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25u ZWN0b3IpOwo+ICAJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cj4gIH0KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9kcnYuYyBiL2RyaXZlcnMvZ3B1 L2RybS9vbWFwZHJtL29tYXBfZHJ2LmMKPiBpbmRleCA0NTI2OTY3OTc4YjcuLjUzZDVlMTg0ZWU3 NyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2Rydi5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9kcnYuYwo+IEBAIC0zNDksMTMgKzM0OSw2 IEBAIHN0YXRpYyBpbnQgb21hcF9tb2Rlc2V0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikK PiAgCj4gIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcihwaXBlLT5jb25uZWN0b3IsIGVu Y29kZXIpOwo+ICAKPiAtCQlpZiAocGlwZS0+b3V0cHV0LT5wYW5lbCkgewo+IC0JCQlyZXQgPSBk cm1fcGFuZWxfYXR0YWNoKHBpcGUtPm91dHB1dC0+cGFuZWwsCj4gLQkJCQkJICAgICAgIHBpcGUt PmNvbm5lY3Rvcik7Cj4gLQkJCWlmIChyZXQgPCAwKQo+IC0JCQkJcmV0dXJuIHJldDsKPiAtCQl9 Cj4gLQo+ICAJCWNydGMgPSBvbWFwX2NydGNfaW5pdChkZXYsIHBpcGUsIHByaXYtPnBsYW5lc1tp XSk7Cj4gIAkJaWYgKElTX0VSUihjcnRjKSkKPiAgCQkJcmV0dXJuIFBUUl9FUlIoY3J0Yyk7Cj4g QEAgLTM5NCwxOCArMzg3LDggQEAgc3RhdGljIGludCBvbWFwX21vZGVzZXRfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQo+ICAKPiAgc3RhdGljIHZvaWQgb21hcF9tb2Rlc2V0X2Zpbmkoc3Ry dWN0IGRybV9kZXZpY2UgKmRkZXYpCj4gIHsKPiAtCXN0cnVjdCBvbWFwX2RybV9wcml2YXRlICpw cml2ID0gZGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQl1bnNpZ25lZCBpbnQgaTsKPiAtCj4gIAlvbWFw X2RybV9pcnFfdW5pbnN0YWxsKGRkZXYpOwo+ICAKPiAtCWZvciAoaSA9IDA7IGkgPCBwcml2LT5u dW1fcGlwZXM7IGkrKykgewo+IC0JCXN0cnVjdCBvbWFwX2RybV9waXBlbGluZSAqcGlwZSA9ICZw cml2LT5waXBlc1tpXTsKPiAtCj4gLQkJaWYgKHBpcGUtPm91dHB1dC0+cGFuZWwpCj4gLQkJCWRy bV9wYW5lbF9kZXRhY2gocGlwZS0+b3V0cHV0LT5wYW5lbCk7Cj4gLQl9Cj4gLQo+ICAJZHJtX21v ZGVfY29uZmlnX2NsZWFudXAoZGRldik7Cj4gIH0KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9yY2FyLWR1L3JjYXJfbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNh cl9sdmRzLmMKPiBpbmRleCBhYjBkNDk2MThjZjkuLmJjZWQ3MjlhOTZmZSAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2x2ZHMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9yY2FyLWR1L3JjYXJfbHZkcy5jCj4gQEAgLTY3NywxNSArNjc3LDExIEBAIHN0YXRpYyBp bnQgcmNhcl9sdmRzX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICAJaWYgKHJl dCA8IDApCj4gIAkJcmV0dXJuIHJldDsKPiAgCj4gLQlyZXR1cm4gZHJtX3BhbmVsX2F0dGFjaChs dmRzLT5wYW5lbCwgY29ubmVjdG9yKTsKPiArCXJldHVybiAwOwo+ICB9Cj4gIAo+ICBzdGF0aWMg dm9pZCByY2FyX2x2ZHNfZGV0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gIHsKPiAt CXN0cnVjdCByY2FyX2x2ZHMgKmx2ZHMgPSBicmlkZ2VfdG9fcmNhcl9sdmRzKGJyaWRnZSk7Cj4g LQo+IC0JaWYgKGx2ZHMtPnBhbmVsKQo+IC0JCWRybV9wYW5lbF9kZXRhY2gobHZkcy0+cGFuZWwp Owo+ICB9Cj4gIAo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3MgcmNhcl9s dmRzX2JyaWRnZV9vcHMgPSB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9yb2NrY2hpcF9sdmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfbHZk cy5jCj4gaW5kZXggNjNmOTY3OTAyYzJkLi5mMjkyYzZhNmUyMGYgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2x2ZHMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9sdmRzLmMKPiBAQCAtNjM0LDEzICs2MzQsNiBAQCBzdGF0 aWMgaW50IHJvY2tjaGlwX2x2ZHNfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZp Y2UgKm1hc3RlciwKPiAgCQkJCSAgICAgICJmYWlsZWQgdG8gYXR0YWNoIGVuY29kZXI6ICVkXG4i LCByZXQpOwo+ICAJCQlnb3RvIGVycl9mcmVlX2Nvbm5lY3RvcjsKPiAgCQl9Cj4gLQo+IC0JCXJl dCA9IGRybV9wYW5lbF9hdHRhY2gobHZkcy0+cGFuZWwsIGNvbm5lY3Rvcik7Cj4gLQkJaWYgKHJl dCA8IDApIHsKPiAtCQkJRFJNX0RFVl9FUlJPUihkcm1fZGV2LT5kZXYsCj4gLQkJCQkgICAgICAi ZmFpbGVkIHRvIGF0dGFjaCBwYW5lbDogJWRcbiIsIHJldCk7Cj4gLQkJCWdvdG8gZXJyX2ZyZWVf Y29ubmVjdG9yOwo+IC0JCX0KPiAgCX0gZWxzZSB7Cj4gIAkJcmV0ID0gZHJtX2JyaWRnZV9hdHRh Y2goZW5jb2RlciwgbHZkcy0+YnJpZGdlLCBOVUxMLCAwKTsKPiAgCQlpZiAocmV0KSB7Cj4gQEAg LTY3Niw4ICs2NjksNiBAQCBzdGF0aWMgdm9pZCByb2NrY2hpcF9sdmRzX3VuYmluZChzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPiAgCj4gIAllbmNvZGVyX2Z1bmNz ID0gbHZkcy0+c29jX2RhdGEtPmhlbHBlcl9mdW5jczsKPiAgCWVuY29kZXJfZnVuY3MtPmRpc2Fi bGUoJmx2ZHMtPmVuY29kZXIpOwo+IC0JaWYgKGx2ZHMtPnBhbmVsKQo+IC0JCWRybV9wYW5lbF9k ZXRhY2gobHZkcy0+cGFuZWwpOwo+ICAJcG1fcnVudGltZV9kaXNhYmxlKGRldik7Cj4gIAlkcm1f Y29ubmVjdG9yX2NsZWFudXAoJmx2ZHMtPmNvbm5lY3Rvcik7Cj4gIAlkcm1fZW5jb2Rlcl9jbGVh bnVwKCZsdmRzLT5lbmNvZGVyKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3N0aS9z dGlfZHZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vc3RpL3N0aV9kdm8uYwo+IGluZGV4IGRlNGFmNzcz NWM0Ni4uZGRiNDE4NGYwNzI2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zdGkvc3Rp X2R2by5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3N0aS9zdGlfZHZvLmMKPiBAQCAtMzg5LDgg KzM4OSw2IEBAIHN0aV9kdm9fY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yLCBib29sIGZvcmNlKQo+ICAJCWR2by0+cGFuZWwgPSBvZl9kcm1fZmluZF9wYW5l bChkdm8tPnBhbmVsX25vZGUpOwo+ICAJCWlmIChJU19FUlIoZHZvLT5wYW5lbCkpCj4gIAkJCWR2 by0+cGFuZWwgPSBOVUxMOwo+IC0JCWVsc2UKPiAtCQkJZHJtX3BhbmVsX2F0dGFjaChkdm8tPnBh bmVsLCBjb25uZWN0b3IpOwo+ICAJfQo+ICAKPiAgCWlmIChkdm8tPnBhbmVsKQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJt L3N1bjRpL3N1bjRpX2x2ZHMuYwo+IGluZGV4IGZmZGEzMTg0YWExMi4uZDA2ZGQzMTNkM2MwIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9sdmRzLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfbHZkcy5jCj4gQEAgLTU0LDkgKzU0LDYgQEAgc3Rh dGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBzdW40aV9sdmRzX2Nvbl9oZWxw ZXJfZnVuY3MgPSB7Cj4gIHN0YXRpYyB2b2lkCj4gIHN1bjRpX2x2ZHNfY29ubmVjdG9yX2Rlc3Ry b3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiAgewo+IC0Jc3RydWN0IHN1bjRp X2x2ZHMgKmx2ZHMgPSBkcm1fY29ubmVjdG9yX3RvX3N1bjRpX2x2ZHMoY29ubmVjdG9yKTsKPiAt Cj4gLQlkcm1fcGFuZWxfZGV0YWNoKGx2ZHMtPnBhbmVsKTsKPiAgCWRybV9jb25uZWN0b3JfY2xl YW51cChjb25uZWN0b3IpOwo+ICB9Cj4gIAo+IEBAIC0xNDEsMTIgKzEzOCw2IEBAIGludCBzdW40 aV9sdmRzX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHN1bjRpX3Rjb24gKnRj b24pCj4gIAo+ICAJCWRybV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJmx2ZHMtPmNvbm5lY3Rv ciwKPiAgCQkJCQkJICAmbHZkcy0+ZW5jb2Rlcik7Cj4gLQo+IC0JCXJldCA9IGRybV9wYW5lbF9h dHRhY2gobHZkcy0+cGFuZWwsICZsdmRzLT5jb25uZWN0b3IpOwo+IC0JCWlmIChyZXQpIHsKPiAt CQkJZGV2X2Vycihkcm0tPmRldiwgIkNvdWxkbid0IGF0dGFjaCBvdXIgcGFuZWxcbiIpOwo+IC0J CQlnb3RvIGVycl9jbGVhbnVwX2Nvbm5lY3RvcjsKPiAtCQl9Cj4gIAl9Cj4gIAo+ICAJaWYgKGJy aWRnZSkgewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfcmdiLmMg Yi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfcmdiLmMKPiBpbmRleCA1YTdkNDM5MzlhZTYu LmUwOGFmZGZmZWY1MCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlf cmdiLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfcmdiLmMKPiBAQCAtMTQ3 LDcgKzE0Nyw2IEBAIHN1bjRpX3JnYl9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yKQo+ICB7Cj4gIAlzdHJ1Y3Qgc3VuNGlfcmdiICpyZ2IgPSBkcm1fY29u bmVjdG9yX3RvX3N1bjRpX3JnYihjb25uZWN0b3IpOwo+ICAKPiAtCWRybV9wYW5lbF9kZXRhY2go cmdiLT5wYW5lbCk7Cj4gIAlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKPiAgfQo+ ICAKPiBAQCAtMjMzLDEyICsyMzIsNiBAQCBpbnQgc3VuNGlfcmdiX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRybSwgc3RydWN0IHN1bjRpX3Rjb24gKnRjb24pCj4gIAo+ICAJCWRybV9jb25uZWN0 b3JfYXR0YWNoX2VuY29kZXIoJnJnYi0+Y29ubmVjdG9yLAo+ICAJCQkJCQkgICZyZ2ItPmVuY29k ZXIpOwo+IC0KPiAtCQlyZXQgPSBkcm1fcGFuZWxfYXR0YWNoKHJnYi0+cGFuZWwsICZyZ2ItPmNv bm5lY3Rvcik7Cj4gLQkJaWYgKHJldCkgewo+IC0JCQlkZXZfZXJyKGRybS0+ZGV2LCAiQ291bGRu J3QgYXR0YWNoIG91ciBwYW5lbFxuIik7Cj4gLQkJCWdvdG8gZXJyX2NsZWFudXBfY29ubmVjdG9y Owo+IC0JCX0KPiAgCX0KPiAgCj4gIAlpZiAocmdiLT5icmlkZ2UpIHsKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjZpX21pcGlfZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0v c3VuNGkvc3VuNmlfbWlwaV9kc2kuYwo+IGluZGV4IGFhNjdjYjAzN2U5ZC4uMTI4NDcxYjY1ZjY0 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW42aV9taXBpX2RzaS5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjZpX21pcGlfZHNpLmMKPiBAQCAtOTczLDcg Kzk3Myw2IEBAIHN0YXRpYyBpbnQgc3VuNmlfZHNpX2F0dGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9z dCAqaG9zdCwKPiAgCWRzaS0+cGFuZWwgPSBwYW5lbDsKPiAgCWRzaS0+ZGV2aWNlID0gZGV2aWNl Owo+ICAKPiAtCWRybV9wYW5lbF9hdHRhY2goZHNpLT5wYW5lbCwgJmRzaS0+Y29ubmVjdG9yKTsK PiAgCWRybV9rbXNfaGVscGVyX2hvdHBsdWdfZXZlbnQoZHNpLT5kcm0pOwo+ICAKPiAgCWRldl9p bmZvKGhvc3QtPmRldiwgIkF0dGFjaGVkIGRldmljZSAlc1xuIiwgZGV2aWNlLT5uYW1lKTsKPiBA QCAtOTkwLDcgKzk4OSw2IEBAIHN0YXRpYyBpbnQgc3VuNmlfZHNpX2RldGFjaChzdHJ1Y3QgbWlw aV9kc2lfaG9zdCAqaG9zdCwKPiAgCWRzaS0+cGFuZWwgPSBOVUxMOwo+ICAJZHNpLT5kZXZpY2Ug PSBOVUxMOwo+ICAKPiAtCWRybV9wYW5lbF9kZXRhY2gocGFuZWwpOwo+ICAJZHJtX2ttc19oZWxw ZXJfaG90cGx1Z19ldmVudChkc2ktPmRybSk7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9k c2kuYwo+IGluZGV4IDM4MjBlOGRmZjE0Yi4uMzM4N2RlNzk3MThiIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS90ZWdyYS9kc2kuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9k c2kuYwo+IEBAIC0xNDk4LDEwICsxNDk4LDggQEAgc3RhdGljIGludCB0ZWdyYV9kc2lfaG9zdF9h dHRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCj4gIAkJaWYgKElTX0VSUihvdXRwdXQt PnBhbmVsKSkKPiAgCQkJb3V0cHV0LT5wYW5lbCA9IE5VTEw7Cj4gIAo+IC0JCWlmIChvdXRwdXQt PnBhbmVsICYmIG91dHB1dC0+Y29ubmVjdG9yLmRldikgewo+IC0JCQlkcm1fcGFuZWxfYXR0YWNo KG91dHB1dC0+cGFuZWwsICZvdXRwdXQtPmNvbm5lY3Rvcik7Cj4gKwkJaWYgKG91dHB1dC0+cGFu ZWwgJiYgb3V0cHV0LT5jb25uZWN0b3IuZGV2KQo+ICAJCQlkcm1faGVscGVyX2hwZF9pcnFfZXZl bnQob3V0cHV0LT5jb25uZWN0b3IuZGV2KTsKPiAtCQl9Cj4gIAl9Cj4gIAo+ICAJcmV0dXJuIDA7 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9vdXRwdXQuYyBiL2RyaXZlcnMv Z3B1L2RybS90ZWdyYS9vdXRwdXQuYwo+IGluZGV4IGUzNmU1ZTdjMmY2OS4uYTNhZGI5ZTRkZWJm IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9vdXRwdXQuYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS90ZWdyYS9vdXRwdXQuYwo+IEBAIC0xNzksMTMgKzE3OSw2IEBAIHZvaWQg dGVncmFfb3V0cHV0X3JlbW92ZShzdHJ1Y3QgdGVncmFfb3V0cHV0ICpvdXRwdXQpCj4gIGludCB0 ZWdyYV9vdXRwdXRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgdGVncmFfb3V0 cHV0ICpvdXRwdXQpCj4gIHsKPiAgCWludCBjb25uZWN0b3JfdHlwZTsKPiAtCWludCBlcnI7Cj4g LQo+IC0JaWYgKG91dHB1dC0+cGFuZWwpIHsKPiAtCQllcnIgPSBkcm1fcGFuZWxfYXR0YWNoKG91 dHB1dC0+cGFuZWwsICZvdXRwdXQtPmNvbm5lY3Rvcik7Cj4gLQkJaWYgKGVyciA8IDApCj4gLQkJ CXJldHVybiBlcnI7Cj4gLQl9Cj4gIAo+ICAJLyoKPiAgCSAqIFRoZSBjb25uZWN0b3IgaXMgbm93 IHJlZ2lzdGVyZWQgYW5kIHJlYWR5IHRvIHJlY2VpdmUgaG90cGx1ZyBldmVudHMKPiBAQCAtMjIw LDkgKzIxMyw2IEBAIHZvaWQgdGVncmFfb3V0cHV0X2V4aXQoc3RydWN0IHRlZ3JhX291dHB1dCAq b3V0cHV0KQo+ICAJICovCj4gIAlpZiAob3V0cHV0LT5ocGRfZ3BpbykKPiAgCQlkaXNhYmxlX2ly cShvdXRwdXQtPmhwZF9pcnEpOwo+IC0KPiAtCWlmIChvdXRwdXQtPnBhbmVsKQo+IC0JCWRybV9w YW5lbF9kZXRhY2gob3V0cHV0LT5wYW5lbCk7Cj4gIH0KPiAgCj4gIHZvaWQgdGVncmFfb3V0cHV0 X2ZpbmRfcG9zc2libGVfY3J0Y3Moc3RydWN0IHRlZ3JhX291dHB1dCAqb3V0cHV0LAo+IGRpZmYg LS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcGFuZWwuaCBiL2luY2x1ZGUvZHJtL2RybV9wYW5lbC5o Cj4gaW5kZXggNjE5M2NiNTU1YWNjLi45YjM3NGY4OGZiNzYgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVk ZS9kcm0vZHJtX3BhbmVsLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fcGFuZWwuaAo+IEBAIC0x NzgsOSArMTc4LDYgQEAgdm9pZCBkcm1fcGFuZWxfaW5pdChzdHJ1Y3QgZHJtX3BhbmVsICpwYW5l bCwgc3RydWN0IGRldmljZSAqZGV2LAo+ICBpbnQgZHJtX3BhbmVsX2FkZChzdHJ1Y3QgZHJtX3Bh bmVsICpwYW5lbCk7Cj4gIHZvaWQgZHJtX3BhbmVsX3JlbW92ZShzdHJ1Y3QgZHJtX3BhbmVsICpw YW5lbCk7Cj4gIAo+IC1pbnQgZHJtX3BhbmVsX2F0dGFjaChzdHJ1Y3QgZHJtX3BhbmVsICpwYW5l bCwgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7Cj4gLXZvaWQgZHJtX3BhbmVsX2Rl dGFjaChzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCk7Cj4gLQo+ICBpbnQgZHJtX3BhbmVsX3ByZXBh cmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpOwo+ICBpbnQgZHJtX3BhbmVsX3VucHJlcGFyZShz dHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCk7Cj4gIApfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwK