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=-6.7 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6B22EC432C3 for ; Mon, 18 Nov 2019 17:42:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 290FC2186D for ; Mon, 18 Nov 2019 17:42:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="MAFed+8U" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727053AbfKRRmq (ORCPT ); Mon, 18 Nov 2019 12:42:46 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:44593 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726336AbfKRRmo (ORCPT ); Mon, 18 Nov 2019 12:42:44 -0500 Received: by mail-wr1-f67.google.com with SMTP id f2so20560885wrs.11; Mon, 18 Nov 2019 09:42:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=uayRssAG7JereMlsCPQMtccfJwePrgRnviw2NEhJvhA=; b=MAFed+8UE2FrOteMTzIPzX3SnzbR8siVMCYrDRbJukSRH4xvCmAnTvYFaCnwv3yYuw NEnerzL2lbQ6twp8gdAL+pkFYUBsiWiMv+n5QP0BNWqxDU4QqH+HBp8C1vvLdCN5cUml AHpCPSIyZ8JQVNznKr3Kpaz7hVdsu3ppHhjuy5q8VYD4mRn+yB15Z4nzdWnou3F/Q6VB xmwhCx1BqSPV9HXie8JYH1r0wbubaMZGtmIHjz6BTMzKPrAoS9IIW4AVSV9MibL7UtAc ZZldPXkim2zOcWcMCeQrnbuGpDwvVuWY8eBhif2mM5AivUoOIAp2vb9xEgCLDlghfay4 K88Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=uayRssAG7JereMlsCPQMtccfJwePrgRnviw2NEhJvhA=; b=RQXMcHm7YvhIxvuqcd32T9pGuSFuEJwnLECIRCCi9rQqMWeiWrKxGpZzOW8aosc2ZB CjlKEJPir3iPapi56I6USEpTfU1dnCMOxGxuu4sBD9Ys/FbFjJbZufIoyfF6ngalqDVD Zar9Z2hXtpIFZLPEDus17oqguDVbLYfTZs7h049MFtVrwWMXmHBwcNYtyG1yXzPAL4v8 uNDN78VCRZDKSSoazBjEeTgylv9vUynKr0TNR0VWz+bEWIP6DY5nBTXAf1tUsdOTvXn0 be9qIgwAcOmAEHEFmiR2F0POPKkIek/DHn23l4yd3sEoALNnzI0zC36/KHX9JXn6pIgq RNAA== X-Gm-Message-State: APjAAAVk8bYM78zTYOwslOhF70ei0oZ2FbZv8jZDY0HygoP/FAdpY7tp YLeoAQ9bsA3WpMzl//25g5F3gVyvyPTem3LEN/w= X-Google-Smtp-Source: APXvYqxTp0NjRk6YW+dq/ZHoywe5xse8APCyI5yQXNEmZxIKYsHrqg6AGOV3k8uJ+ERO7RC4s9jJsz9XL5BpLfEsjMw= X-Received: by 2002:a05:6000:18c:: with SMTP id p12mr4072521wrx.154.1574098959646; Mon, 18 Nov 2019 09:42:39 -0800 (PST) MIME-Version: 1.0 References: <20191118003513.10852-1-fred@fredlawl.com> In-Reply-To: <20191118003513.10852-1-fred@fredlawl.com> From: Alex Deucher Date: Mon, 18 Nov 2019 12:42:25 -0500 Message-ID: Subject: Re: [PATCH v2 1/1] drm: Prefer pcie_capability_read_word() To: Frederick Lawler Cc: "Deucher, Alexander" , Christian Koenig , Chunming Zhou , Dave Airlie , Daniel Vetter , Bjorn Helgaas , Linux PCI , LKML , Maling list - DRI developers , amd-gfx list Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Nov 18, 2019 at 3:37 AM Frederick Lawler wrote: > > Commit 8c0d3a02c130 ("PCI: Add accessors for PCI Express Capability") > added accessors for the PCI Express Capability so that drivers didn't > need to be aware of differences between v1 and v2 of the PCI > Express Capability. > > Replace pci_read_config_word() and pci_write_config_word() calls with > pcie_capability_read_word() and pcie_capability_write_word(). > > Signed-off-by: Frederick Lawler > > --- > V2 > - Squash both drm commits into one > - Rebase ontop of d46eac1e658b > --- > drivers/gpu/drm/amd/amdgpu/cik.c | 63 ++++++++++++++++----------- > drivers/gpu/drm/amd/amdgpu/si.c | 71 +++++++++++++++++++------------ > drivers/gpu/drm/radeon/cik.c | 70 ++++++++++++++++++------------ > drivers/gpu/drm/radeon/si.c | 73 ++++++++++++++++++++------------ Can you split this into two patches? One for amdgpu and one for radeon? Thanks! Alex > 4 files changed, 174 insertions(+), 103 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c > index 3067bb874032..f369e3408ed2 100644 > --- a/drivers/gpu/drm/amd/amdgpu/cik.c > +++ b/drivers/gpu/drm/amd/amdgpu/cik.c > @@ -1384,7 +1384,6 @@ static int cik_set_vce_clocks(struct amdgpu_device *adev, u32 evclk, u32 ecclk) > static void cik_pcie_gen3_enable(struct amdgpu_device *adev) > { > struct pci_dev *root = adev->pdev->bus->self; > - int bridge_pos, gpu_pos; > u32 speed_cntl, current_data_rate; > int i; > u16 tmp16; > @@ -1419,12 +1418,7 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev) > DRM_INFO("enabling PCIE gen 2 link speeds, disable with amdgpu.pcie_gen2=0\n"); > } > > - bridge_pos = pci_pcie_cap(root); > - if (!bridge_pos) > - return; > - > - gpu_pos = pci_pcie_cap(adev->pdev); > - if (!gpu_pos) > + if (!pci_is_pcie(root) || !pci_is_pcie(adev->pdev)) > return; > > if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) { > @@ -1434,14 +1428,17 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev) > u16 bridge_cfg2, gpu_cfg2; > u32 max_lw, current_lw, tmp; > > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); > - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL, > + &bridge_cfg); > + pcie_capability_read_word(adev->pdev, PCI_EXP_LNKCTL, > + &gpu_cfg); > > tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD; > - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); > + pcie_capability_write_word(root, PCI_EXP_LNKCTL, tmp16); > > tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD; > - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); > + pcie_capability_write_word(adev->pdev, PCI_EXP_LNKCTL, > + tmp16); > > tmp = RREG32_PCIE(ixPCIE_LC_STATUS1); > max_lw = (tmp & PCIE_LC_STATUS1__LC_DETECTED_LINK_WIDTH_MASK) >> > @@ -1465,15 +1462,23 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev) > > for (i = 0; i < 10; i++) { > /* check status */ > - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_DEVSTA, &tmp16); > + pcie_capability_read_word(adev->pdev, > + PCI_EXP_DEVSTA, > + &tmp16); > if (tmp16 & PCI_EXP_DEVSTA_TRPND) > break; > > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); > - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL, > + &bridge_cfg); > + pcie_capability_read_word(adev->pdev, > + PCI_EXP_LNKCTL, > + &gpu_cfg); > > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &bridge_cfg2); > - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &gpu_cfg2); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, > + &bridge_cfg2); > + pcie_capability_read_word(adev->pdev, > + PCI_EXP_LNKCTL2, > + &gpu_cfg2); > > tmp = RREG32_PCIE(ixPCIE_LC_CNTL4); > tmp |= PCIE_LC_CNTL4__LC_SET_QUIESCE_MASK; > @@ -1486,18 +1491,25 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev) > msleep(100); > > /* linkctl */ > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &tmp16); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL, > + &tmp16); > tmp16 &= ~PCI_EXP_LNKCTL_HAWD; > tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD); > - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); > + pcie_capability_write_word(root, PCI_EXP_LNKCTL, > + tmp16); > > - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &tmp16); > + pcie_capability_read_word(adev->pdev, > + PCI_EXP_LNKCTL, > + &tmp16); > tmp16 &= ~PCI_EXP_LNKCTL_HAWD; > tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD); > - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); > + pcie_capability_write_word(adev->pdev, > + PCI_EXP_LNKCTL, > + tmp16); > > /* linkctl2 */ > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &tmp16); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, > + &tmp16); > tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | > PCI_EXP_LNKCTL2_TX_MARGIN); > tmp16 |= (bridge_cfg2 & > @@ -1511,7 +1523,9 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev) > tmp16 |= (gpu_cfg2 & > (PCI_EXP_LNKCTL2_ENTER_COMP | > PCI_EXP_LNKCTL2_TX_MARGIN)); > - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); > + pcie_capability_write_word(adev->pdev, > + PCI_EXP_LNKCTL2, > + tmp16); > > tmp = RREG32_PCIE(ixPCIE_LC_CNTL4); > tmp &= ~PCIE_LC_CNTL4__LC_SET_QUIESCE_MASK; > @@ -1526,15 +1540,16 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev) > speed_cntl &= ~PCIE_LC_SPEED_CNTL__LC_FORCE_DIS_SW_SPEED_CHANGE_MASK; > WREG32_PCIE(ixPCIE_LC_SPEED_CNTL, speed_cntl); > > - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); > + pcie_capability_read_word(adev->pdev, PCI_EXP_LNKCTL2, &tmp16); > tmp16 &= ~PCI_EXP_LNKCTL2_TLS; > + > if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) > tmp16 |= PCI_EXP_LNKCTL2_TLS_8_0GT; /* gen3 */ > else if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2) > tmp16 |= PCI_EXP_LNKCTL2_TLS_5_0GT; /* gen2 */ > else > tmp16 |= PCI_EXP_LNKCTL2_TLS_2_5GT; /* gen1 */ > - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); > + pcie_capability_write_word(adev->pdev, PCI_EXP_LNKCTL2, tmp16); > > speed_cntl = RREG32_PCIE(ixPCIE_LC_SPEED_CNTL); > speed_cntl |= PCIE_LC_SPEED_CNTL__LC_INITIATE_LINK_SPEED_CHANGE_MASK; > diff --git a/drivers/gpu/drm/amd/amdgpu/si.c b/drivers/gpu/drm/amd/amdgpu/si.c > index a7dcb0d0f039..9f82be879224 100644 > --- a/drivers/gpu/drm/amd/amdgpu/si.c > +++ b/drivers/gpu/drm/amd/amdgpu/si.c > @@ -1633,7 +1633,6 @@ static void si_init_golden_registers(struct amdgpu_device *adev) > static void si_pcie_gen3_enable(struct amdgpu_device *adev) > { > struct pci_dev *root = adev->pdev->bus->self; > - int bridge_pos, gpu_pos; > u32 speed_cntl, current_data_rate; > int i; > u16 tmp16; > @@ -1668,12 +1667,7 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev) > DRM_INFO("enabling PCIE gen 2 link speeds, disable with amdgpu.pcie_gen2=0\n"); > } > > - bridge_pos = pci_pcie_cap(root); > - if (!bridge_pos) > - return; > - > - gpu_pos = pci_pcie_cap(adev->pdev); > - if (!gpu_pos) > + if (!pci_is_pcie(root) || !pci_is_pcie(adev->pdev)) > return; > > if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) { > @@ -1682,14 +1676,17 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev) > u16 bridge_cfg2, gpu_cfg2; > u32 max_lw, current_lw, tmp; > > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); > - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL, > + &bridge_cfg); > + pcie_capability_read_word(adev->pdev, PCI_EXP_LNKCTL, > + &gpu_cfg); > > tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD; > - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); > + pcie_capability_write_word(root, PCI_EXP_LNKCTL, tmp16); > > tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD; > - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); > + pcie_capability_write_word(adev->pdev, PCI_EXP_LNKCTL, > + tmp16); > > tmp = RREG32_PCIE(PCIE_LC_STATUS1); > max_lw = (tmp & LC_DETECTED_LINK_WIDTH_MASK) >> LC_DETECTED_LINK_WIDTH_SHIFT; > @@ -1706,15 +1703,23 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev) > } > > for (i = 0; i < 10; i++) { > - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_DEVSTA, &tmp16); > + pcie_capability_read_word(adev->pdev, > + PCI_EXP_DEVSTA, > + &tmp16); > if (tmp16 & PCI_EXP_DEVSTA_TRPND) > break; > > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); > - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL, > + &bridge_cfg); > + pcie_capability_read_word(adev->pdev, > + PCI_EXP_LNKCTL, > + &gpu_cfg); > > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &bridge_cfg2); > - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &gpu_cfg2); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, > + &bridge_cfg2); > + pcie_capability_read_word(adev->pdev, > + PCI_EXP_LNKCTL2, > + &gpu_cfg2); > > tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); > tmp |= LC_SET_QUIESCE; > @@ -1726,31 +1731,44 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev) > > mdelay(100); > > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &tmp16); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL, > + &tmp16); > tmp16 &= ~PCI_EXP_LNKCTL_HAWD; > tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD); > - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); > + pcie_capability_write_word(root, PCI_EXP_LNKCTL, > + tmp16); > > - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &tmp16); > + pcie_capability_read_word(adev->pdev, > + PCI_EXP_LNKCTL, > + &tmp16); > tmp16 &= ~PCI_EXP_LNKCTL_HAWD; > tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD); > - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); > + pcie_capability_write_word(adev->pdev, > + PCI_EXP_LNKCTL, > + tmp16); > > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &tmp16); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, > + &tmp16); > tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | > PCI_EXP_LNKCTL2_TX_MARGIN); > tmp16 |= (bridge_cfg2 & > (PCI_EXP_LNKCTL2_ENTER_COMP | > PCI_EXP_LNKCTL2_TX_MARGIN)); > - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, tmp16); > + pcie_capability_write_word(root, > + PCI_EXP_LNKCTL2, > + tmp16); > > - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); > + pcie_capability_read_word(adev->pdev, > + PCI_EXP_LNKCTL2, > + &tmp16); > tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | > PCI_EXP_LNKCTL2_TX_MARGIN); > tmp16 |= (gpu_cfg2 & > (PCI_EXP_LNKCTL2_ENTER_COMP | > PCI_EXP_LNKCTL2_TX_MARGIN)); > - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); > + pcie_capability_write_word(adev->pdev, > + PCI_EXP_LNKCTL2, > + tmp16); > > tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); > tmp &= ~LC_SET_QUIESCE; > @@ -1763,15 +1781,16 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev) > speed_cntl &= ~LC_FORCE_DIS_SW_SPEED_CHANGE; > WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl); > > - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); > + pcie_capability_read_word(adev->pdev, PCI_EXP_LNKCTL2, &tmp16); > tmp16 &= ~PCI_EXP_LNKCTL2_TLS; > + > if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) > tmp16 |= PCI_EXP_LNKCTL2_TLS_8_0GT; /* gen3 */ > else if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2) > tmp16 |= PCI_EXP_LNKCTL2_TLS_5_0GT; /* gen2 */ > else > tmp16 |= PCI_EXP_LNKCTL2_TLS_2_5GT; /* gen1 */ > - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); > + pcie_capability_write_word(adev->pdev, PCI_EXP_LNKCTL2, tmp16); > > speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); > speed_cntl |= LC_INITIATE_LINK_SPEED_CHANGE; > diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c > index a280442c81aa..09a4709e67f0 100644 > --- a/drivers/gpu/drm/radeon/cik.c > +++ b/drivers/gpu/drm/radeon/cik.c > @@ -9504,7 +9504,6 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev) > { > struct pci_dev *root = rdev->pdev->bus->self; > enum pci_bus_speed speed_cap; > - int bridge_pos, gpu_pos; > u32 speed_cntl, current_data_rate; > int i; > u16 tmp16; > @@ -9546,12 +9545,7 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev) > DRM_INFO("enabling PCIE gen 2 link speeds, disable with radeon.pcie_gen2=0\n"); > } > > - bridge_pos = pci_pcie_cap(root); > - if (!bridge_pos) > - return; > - > - gpu_pos = pci_pcie_cap(rdev->pdev); > - if (!gpu_pos) > + if (!pci_is_pcie(root) || !pci_is_pcie(rdev->pdev)) > return; > > if (speed_cap == PCIE_SPEED_8_0GT) { > @@ -9561,14 +9555,17 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev) > u16 bridge_cfg2, gpu_cfg2; > u32 max_lw, current_lw, tmp; > > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); > - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL, > + &bridge_cfg); > + pcie_capability_read_word(rdev->pdev, PCI_EXP_LNKCTL, > + &gpu_cfg); > > tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD; > - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); > + pcie_capability_write_word(root, PCI_EXP_LNKCTL, tmp16); > > tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD; > - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); > + pcie_capability_write_word(rdev->pdev, PCI_EXP_LNKCTL, > + tmp16); > > tmp = RREG32_PCIE_PORT(PCIE_LC_STATUS1); > max_lw = (tmp & LC_DETECTED_LINK_WIDTH_MASK) >> LC_DETECTED_LINK_WIDTH_SHIFT; > @@ -9586,15 +9583,23 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev) > > for (i = 0; i < 10; i++) { > /* check status */ > - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_DEVSTA, &tmp16); > + pcie_capability_read_word(rdev->pdev, > + PCI_EXP_DEVSTA, > + &tmp16); > if (tmp16 & PCI_EXP_DEVSTA_TRPND) > break; > > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); > - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL, > + &bridge_cfg); > + pcie_capability_read_word(rdev->pdev, > + PCI_EXP_LNKCTL, > + &gpu_cfg); > > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &bridge_cfg2); > - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &gpu_cfg2); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, > + &bridge_cfg2); > + pcie_capability_read_word(rdev->pdev, > + PCI_EXP_LNKCTL2, > + &gpu_cfg2); > > tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); > tmp |= LC_SET_QUIESCE; > @@ -9607,32 +9612,45 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev) > msleep(100); > > /* linkctl */ > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &tmp16); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL, > + &tmp16); > tmp16 &= ~PCI_EXP_LNKCTL_HAWD; > tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD); > - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); > + pcie_capability_write_word(root, PCI_EXP_LNKCTL, > + tmp16); > > - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &tmp16); > + pcie_capability_read_word(rdev->pdev, > + PCI_EXP_LNKCTL, > + &tmp16); > tmp16 &= ~PCI_EXP_LNKCTL_HAWD; > tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD); > - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); > + pcie_capability_write_word(rdev->pdev, > + PCI_EXP_LNKCTL, > + tmp16); > > /* linkctl2 */ > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &tmp16); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, > + &tmp16); > tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | > PCI_EXP_LNKCTL2_TX_MARGIN); > tmp16 |= (bridge_cfg2 & > (PCI_EXP_LNKCTL2_ENTER_COMP | > PCI_EXP_LNKCTL2_TX_MARGIN)); > - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, tmp16); > + pcie_capability_write_word(root, > + PCI_EXP_LNKCTL2, > + tmp16); > > - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); > + pcie_capability_read_word(rdev->pdev, > + PCI_EXP_LNKCTL2, > + &tmp16); > tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | > PCI_EXP_LNKCTL2_TX_MARGIN); > tmp16 |= (gpu_cfg2 & > (PCI_EXP_LNKCTL2_ENTER_COMP | > PCI_EXP_LNKCTL2_TX_MARGIN)); > - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); > + pcie_capability_write_word(rdev->pdev, > + PCI_EXP_LNKCTL2, > + tmp16); > > tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); > tmp &= ~LC_SET_QUIESCE; > @@ -9646,7 +9664,7 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev) > speed_cntl &= ~LC_FORCE_DIS_SW_SPEED_CHANGE; > WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl); > > - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); > + pcie_capability_read_word(rdev->pdev, PCI_EXP_LNKCTL2, &tmp16); > tmp16 &= ~PCI_EXP_LNKCTL2_TLS; > if (speed_cap == PCIE_SPEED_8_0GT) > tmp16 |= PCI_EXP_LNKCTL2_TLS_8_0GT; /* gen3 */ > @@ -9654,7 +9672,7 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev) > tmp16 |= PCI_EXP_LNKCTL2_TLS_5_0GT; /* gen2 */ > else > tmp16 |= PCI_EXP_LNKCTL2_TLS_2_5GT; /* gen1 */ > - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); > + pcie_capability_write_word(rdev->pdev, PCI_EXP_LNKCTL2, tmp16); > > speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); > speed_cntl |= LC_INITIATE_LINK_SPEED_CHANGE; > diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c > index 529e70a42019..67a98b3370d1 100644 > --- a/drivers/gpu/drm/radeon/si.c > +++ b/drivers/gpu/drm/radeon/si.c > @@ -3257,7 +3257,7 @@ static void si_gpu_init(struct radeon_device *rdev) > /* XXX what about 12? */ > rdev->config.si.tile_config |= (3 << 0); > break; > - } > + } > switch ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT) { > case 0: /* four banks */ > rdev->config.si.tile_config |= 0 << 4; > @@ -7087,7 +7087,6 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev) > { > struct pci_dev *root = rdev->pdev->bus->self; > enum pci_bus_speed speed_cap; > - int bridge_pos, gpu_pos; > u32 speed_cntl, current_data_rate; > int i; > u16 tmp16; > @@ -7129,12 +7128,7 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev) > DRM_INFO("enabling PCIE gen 2 link speeds, disable with radeon.pcie_gen2=0\n"); > } > > - bridge_pos = pci_pcie_cap(root); > - if (!bridge_pos) > - return; > - > - gpu_pos = pci_pcie_cap(rdev->pdev); > - if (!gpu_pos) > + if (!pci_is_pcie(root) || !pci_is_pcie(rdev->pdev)) > return; > > if (speed_cap == PCIE_SPEED_8_0GT) { > @@ -7144,14 +7138,17 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev) > u16 bridge_cfg2, gpu_cfg2; > u32 max_lw, current_lw, tmp; > > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); > - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL, > + &bridge_cfg); > + pcie_capability_read_word(rdev->pdev, PCI_EXP_LNKCTL, > + &gpu_cfg); > > tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD; > - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); > + pcie_capability_write_word(root, PCI_EXP_LNKCTL, tmp16); > > tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD; > - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); > + pcie_capability_write_word(rdev->pdev, PCI_EXP_LNKCTL, > + tmp16); > > tmp = RREG32_PCIE(PCIE_LC_STATUS1); > max_lw = (tmp & LC_DETECTED_LINK_WIDTH_MASK) >> LC_DETECTED_LINK_WIDTH_SHIFT; > @@ -7169,15 +7166,23 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev) > > for (i = 0; i < 10; i++) { > /* check status */ > - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_DEVSTA, &tmp16); > + pcie_capability_read_word(rdev->pdev, > + PCI_EXP_DEVSTA, > + &tmp16); > if (tmp16 & PCI_EXP_DEVSTA_TRPND) > break; > > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); > - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL, > + &bridge_cfg); > + pcie_capability_read_word(rdev->pdev, > + PCI_EXP_LNKCTL, > + &gpu_cfg); > > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &bridge_cfg2); > - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &gpu_cfg2); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, > + &bridge_cfg2); > + pcie_capability_read_word(rdev->pdev, > + PCI_EXP_LNKCTL2, > + &gpu_cfg2); > > tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); > tmp |= LC_SET_QUIESCE; > @@ -7190,32 +7195,46 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev) > msleep(100); > > /* linkctl */ > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &tmp16); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL, > + &tmp16); > tmp16 &= ~PCI_EXP_LNKCTL_HAWD; > tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD); > - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); > + pcie_capability_write_word(root, > + PCI_EXP_LNKCTL, > + tmp16); > > - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &tmp16); > + pcie_capability_read_word(rdev->pdev, > + PCI_EXP_LNKCTL, > + &tmp16); > tmp16 &= ~PCI_EXP_LNKCTL_HAWD; > tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD); > - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); > + pcie_capability_write_word(rdev->pdev, > + PCI_EXP_LNKCTL, > + tmp16); > > /* linkctl2 */ > - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &tmp16); > + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, > + &tmp16); > tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | > PCI_EXP_LNKCTL2_TX_MARGIN); > tmp16 |= (bridge_cfg2 & > (PCI_EXP_LNKCTL2_ENTER_COMP | > PCI_EXP_LNKCTL2_TX_MARGIN)); > - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, tmp16); > + pcie_capability_write_word(root, > + PCI_EXP_LNKCTL2, > + tmp16); > > - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); > + pcie_capability_read_word(rdev->pdev, > + PCI_EXP_LNKCTL2, > + &tmp16); > tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | > PCI_EXP_LNKCTL2_TX_MARGIN); > tmp16 |= (gpu_cfg2 & > (PCI_EXP_LNKCTL2_ENTER_COMP | > PCI_EXP_LNKCTL2_TX_MARGIN)); > - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); > + pcie_capability_write_word(rdev->pdev, > + PCI_EXP_LNKCTL2, > + tmp16); > > tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); > tmp &= ~LC_SET_QUIESCE; > @@ -7229,7 +7248,7 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev) > speed_cntl &= ~LC_FORCE_DIS_SW_SPEED_CHANGE; > WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl); > > - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); > + pcie_capability_read_word(rdev->pdev, PCI_EXP_LNKCTL2, &tmp16); > tmp16 &= ~PCI_EXP_LNKCTL2_TLS; > if (speed_cap == PCIE_SPEED_8_0GT) > tmp16 |= PCI_EXP_LNKCTL2_TLS_8_0GT; /* gen3 */ > @@ -7237,7 +7256,7 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev) > tmp16 |= PCI_EXP_LNKCTL2_TLS_5_0GT; /* gen2 */ > else > tmp16 |= PCI_EXP_LNKCTL2_TLS_2_5GT; /* gen1 */ > - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); > + pcie_capability_write_word(rdev->pdev, PCI_EXP_LNKCTL2, tmp16); > > speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); > speed_cntl |= LC_INITIATE_LINK_SPEED_CHANGE; > -- > 2.20.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: Re: [PATCH v2 1/1] drm: Prefer pcie_capability_read_word() Date: Mon, 18 Nov 2019 12:42:25 -0500 Message-ID: References: <20191118003513.10852-1-fred@fredlawl.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20191118003513.10852-1-fred@fredlawl.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Frederick Lawler Cc: Dave Airlie , Linux PCI , LKML , Maling list - DRI developers , Bjorn Helgaas , amd-gfx list , "Deucher, Alexander" , Christian Koenig List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCBOb3YgMTgsIDIwMTkgYXQgMzozNyBBTSBGcmVkZXJpY2sgTGF3bGVyIDxmcmVkQGZy ZWRsYXdsLmNvbT4gd3JvdGU6Cj4KPiBDb21taXQgOGMwZDNhMDJjMTMwICgiUENJOiBBZGQgYWNj ZXNzb3JzIGZvciBQQ0kgRXhwcmVzcyBDYXBhYmlsaXR5IikKPiBhZGRlZCBhY2Nlc3NvcnMgZm9y IHRoZSBQQ0kgRXhwcmVzcyBDYXBhYmlsaXR5IHNvIHRoYXQgZHJpdmVycyBkaWRuJ3QKPiBuZWVk IHRvIGJlIGF3YXJlIG9mIGRpZmZlcmVuY2VzIGJldHdlZW4gdjEgYW5kIHYyIG9mIHRoZSBQQ0kK PiBFeHByZXNzIENhcGFiaWxpdHkuCj4KPiBSZXBsYWNlIHBjaV9yZWFkX2NvbmZpZ193b3JkKCkg YW5kIHBjaV93cml0ZV9jb25maWdfd29yZCgpIGNhbGxzIHdpdGgKPiBwY2llX2NhcGFiaWxpdHlf cmVhZF93b3JkKCkgYW5kIHBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKCkuCj4KPiBTaWduZWQt b2ZmLWJ5OiBGcmVkZXJpY2sgTGF3bGVyIDxmcmVkQGZyZWRsYXdsLmNvbT4KPgo+IC0tLQo+IFYy Cj4gLSBTcXVhc2ggYm90aCBkcm0gY29tbWl0cyBpbnRvIG9uZQo+IC0gUmViYXNlIG9udG9wIG9m IGQ0NmVhYzFlNjU4Ygo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9jaWsuYyB8 IDYzICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9zaS5jICB8IDcxICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KPiAgZHJpdmVy cy9ncHUvZHJtL3JhZGVvbi9jaWsuYyAgICAgfCA3MCArKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaS5jICAgICAgfCA3MyArKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tLS0tLQoKQ2FuIHlvdSBzcGxpdCB0aGlzIGludG8gdHdvIHBhdGNo ZXM/ICBPbmUgZm9yIGFtZGdwdSBhbmQgb25lIGZvciByYWRlb24/CgpUaGFua3MhCgpBbGV4Cgo+ ICA0IGZpbGVzIGNoYW5nZWQsIDE3NCBpbnNlcnRpb25zKCspLCAxMDMgZGVsZXRpb25zKC0pCj4K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvY2lrLmMgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9jaWsuYwo+IGluZGV4IDMwNjdiYjg3NDAzMi4uZjM2OWUzNDA4 ZWQyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Npay5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvY2lrLmMKPiBAQCAtMTM4NCw3ICsxMzg0LDYg QEAgc3RhdGljIGludCBjaWtfc2V0X3ZjZV9jbG9ja3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYsIHUzMiBldmNsaywgdTMyIGVjY2xrKQo+ICBzdGF0aWMgdm9pZCBjaWtfcGNpZV9nZW4zX2Vu YWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAgewo+ICAgICAgICAgc3RydWN0IHBj aV9kZXYgKnJvb3QgPSBhZGV2LT5wZGV2LT5idXMtPnNlbGY7Cj4gLSAgICAgICBpbnQgYnJpZGdl X3BvcywgZ3B1X3BvczsKPiAgICAgICAgIHUzMiBzcGVlZF9jbnRsLCBjdXJyZW50X2RhdGFfcmF0 ZTsKPiAgICAgICAgIGludCBpOwo+ICAgICAgICAgdTE2IHRtcDE2Owo+IEBAIC0xNDE5LDEyICsx NDE4LDcgQEAgc3RhdGljIHZvaWQgY2lrX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCj4gICAgICAgICAgICAgICAgIERSTV9JTkZPKCJlbmFibGluZyBQQ0lFIGdl biAyIGxpbmsgc3BlZWRzLCBkaXNhYmxlIHdpdGggYW1kZ3B1LnBjaWVfZ2VuMj0wXG4iKTsKPiAg ICAgICAgIH0KPgo+IC0gICAgICAgYnJpZGdlX3BvcyA9IHBjaV9wY2llX2NhcChyb290KTsKPiAt ICAgICAgIGlmICghYnJpZGdlX3BvcykKPiAtICAgICAgICAgICAgICAgcmV0dXJuOwo+IC0KPiAt ICAgICAgIGdwdV9wb3MgPSBwY2lfcGNpZV9jYXAoYWRldi0+cGRldik7Cj4gLSAgICAgICBpZiAo IWdwdV9wb3MpCj4gKyAgICAgICBpZiAoIXBjaV9pc19wY2llKHJvb3QpIHx8ICFwY2lfaXNfcGNp ZShhZGV2LT5wZGV2KSkKPiAgICAgICAgICAgICAgICAgcmV0dXJuOwo+Cj4gICAgICAgICBpZiAo YWRldi0+cG0ucGNpZV9nZW5fbWFzayAmIENBSUxfUENJRV9MSU5LX1NQRUVEX1NVUFBPUlRfR0VO Mykgewo+IEBAIC0xNDM0LDE0ICsxNDI4LDE3IEBAIHN0YXRpYyB2b2lkIGNpa19wY2llX2dlbjNf ZW5hYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ICAgICAgICAgICAgICAgICAgICAg ICAgIHUxNiBicmlkZ2VfY2ZnMiwgZ3B1X2NmZzI7Cj4gICAgICAgICAgICAgICAgICAgICAgICAg dTMyIG1heF9sdywgY3VycmVudF9sdywgdG1wOwo+Cj4gLSAgICAgICAgICAgICAgICAgICAgICAg cGNpX3JlYWRfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAm YnJpZGdlX2NmZyk7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dv cmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmZ3B1X2NmZyk7Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lf RVhQX0xOS0NUTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZicmlkZ2VfY2ZnKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFi aWxpdHlfcmVhZF93b3JkKGFkZXYtPnBkZXYsIFBDSV9FWFBfTE5LQ1RMLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdwdV9jZmcpOwo+Cj4gICAg ICAgICAgICAgICAgICAgICAgICAgdG1wMTYgPSBicmlkZ2VfY2ZnIHwgUENJX0VYUF9MTktDVExf SEFXRDsKPiAtICAgICAgICAgICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocm9v dCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMLCB0bXAxNik7Cj4gKyAgICAgICAgICAgICAg ICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEws IHRtcDE2KTsKPgo+ICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2ID0gZ3B1X2NmZyB8IFBD SV9FWFBfTE5LQ1RMX0hBV0Q7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2Nv bmZpZ193b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOwo+ ICsgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKGFkZXYt PnBkZXYsIFBDSV9FWFBfTE5LQ1RMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRtcDE2KTsKPgo+ICAgICAgICAgICAgICAgICAgICAgICAgIHRt cCA9IFJSRUczMl9QQ0lFKGl4UENJRV9MQ19TVEFUVVMxKTsKPiAgICAgICAgICAgICAgICAgICAg ICAgICBtYXhfbHcgPSAodG1wICYgUENJRV9MQ19TVEFUVVMxX19MQ19ERVRFQ1RFRF9MSU5LX1dJ RFRIX01BU0spID4+Cj4gQEAgLTE0NjUsMTUgKzE0NjIsMjMgQEAgc3RhdGljIHZvaWQgY2lrX3Bj aWVfZ2VuM19lbmFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4KPiAgICAgICAgICAg ICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewo+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogY2hlY2sgc3RhdHVzICovCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChhZGV2LT5wZGV2LCBncHVfcG9zICsg UENJX0VYUF9ERVZTVEEsICZ0bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKGFkZXYtPnBkZXYsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfREVWU1RB LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmdG1wMTYpOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcDE2 ICYgUENJX0VYUF9ERVZTVEFfVFJQTkQpCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwo+Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lf cmVhZF9jb25maWdfd29yZChyb290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwsICZicmlk Z2VfY2ZnKTsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaV9yZWFkX2NvbmZp Z193b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgJmdwdV9jZmcpOwo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29y ZChyb290LCBQQ0lfRVhQX0xOS0NUTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJyaWRnZV9jZmcpOwo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChhZGV2LT5wZGV2LAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQQ0lfRVhQX0xOS0NUTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmdwdV9jZmcpOwo+Cj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChyb290LCBicmlkZ2VfcG9zICsgUENJX0VY UF9MTktDVEwyLCAmYnJpZGdlX2NmZzIpOwo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5L Q1RMMiwgJmdwdV9jZmcyKTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVf Y2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwyLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnJpZGdlX2Nm ZzIpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3Jl YWRfd29yZChhZGV2LT5wZGV2LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTDIsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZncHVfY2ZnMik7Cj4K PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFJSRUczMl9QQ0lFKGl4UENJ RV9MQ19DTlRMNCk7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgfD0gUENJ RV9MQ19DTlRMNF9fTENfU0VUX1FVSUVTQ0VfTUFTSzsKPiBAQCAtMTQ4NiwxOCArMTQ5MSwyNSBA QCBzdGF0aWMgdm9pZCBjaWtfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldikKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCgxMDApOwo+Cj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaW5rY3RsICovCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChyb290LCBicmlkZ2Vf cG9zICsgUENJX0VYUF9MTktDVEwsICZ0bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmdG1wMTYpOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYgJj0gflBD SV9FWFBfTE5LQ1RMX0hBV0Q7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAx NiB8PSAoYnJpZGdlX2NmZyAmIFBDSV9FWFBfTE5LQ1RMX0hBV0QpOwo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ193b3JkKHJvb3QsIGJyaWRnZV9wb3Mg KyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 bXAxNik7Cj4KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaV9yZWFkX2NvbmZp Z193b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgJnRtcDE2KTsKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQo YWRldi0+cGRldiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUENJX0VYUF9MTktDVEwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXAxNik7Cj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0bXAxNiAmPSB+UENJX0VYUF9MTktDVExfSEFXRDsKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2IHw9IChncHVfY2ZnICYgUENJX0VYUF9M TktDVExfSEFXRCk7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfd3JpdGVf Y29uZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMLCB0bXAxNik7 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlfd3JpdGVf d29yZChhZGV2LT5wZGV2LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUENJX0VYUF9MTktDVEwsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAxNik7Cj4KPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxpbmtjdGwyICovCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChyb290LCBicmlkZ2VfcG9z ICsgUENJX0VYUF9MTktDVEwyLCAmdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTDIsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZ0bXAxNik7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAxNiAmPSB+KFBD SV9FWFBfTE5LQ1RMMl9FTlRFUl9DT01QIHwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUENJX0VYUF9MTktDVEwyX1RYX01BUkdJTik7Cj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0bXAxNiB8PSAoYnJpZGdlX2NmZzIgJgo+IEBAIC0xNTExLDcg KzE1MjMsOSBAQCBzdGF0aWMgdm9pZCBjaWtfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldikKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2IHw9 IChncHVfY2ZnMiAmCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KFBDSV9FWFBfTE5LQ1RMMl9FTlRFUl9DT01QIHwKPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUENJX0VYUF9MTktDVEwyX1RYX01BUkdJTikpOwo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ193b3JkKGFkZXYtPnBkZXYs IGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIsIHRtcDE2KTsKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKGFkZXYtPnBkZXYsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ Q0lfRVhQX0xOS0NUTDIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0bXAxNik7Cj4KPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRtcCA9IFJSRUczMl9QQ0lFKGl4UENJRV9MQ19DTlRMNCk7Cj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0bXAgJj0gflBDSUVfTENfQ05UTDRfX0xDX1NFVF9RVUlFU0NF X01BU0s7Cj4gQEAgLTE1MjYsMTUgKzE1NDAsMTYgQEAgc3RhdGljIHZvaWQgY2lrX3BjaWVfZ2Vu M19lbmFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gICAgICAgICBzcGVlZF9jbnRs ICY9IH5QQ0lFX0xDX1NQRUVEX0NOVExfX0xDX0ZPUkNFX0RJU19TV19TUEVFRF9DSEFOR0VfTUFT SzsKPiAgICAgICAgIFdSRUczMl9QQ0lFKGl4UENJRV9MQ19TUEVFRF9DTlRMLCBzcGVlZF9jbnRs KTsKPgo+IC0gICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyAr IFBDSV9FWFBfTE5LQ1RMMiwgJnRtcDE2KTsKPiArICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFk X3dvcmQoYWRldi0+cGRldiwgUENJX0VYUF9MTktDVEwyLCAmdG1wMTYpOwo+ICAgICAgICAgdG1w MTYgJj0gflBDSV9FWFBfTE5LQ1RMMl9UTFM7Cj4gKwo+ICAgICAgICAgaWYgKGFkZXYtPnBtLnBj aWVfZ2VuX21hc2sgJiBDQUlMX1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX0dFTjMpCj4gICAgICAg ICAgICAgICAgIHRtcDE2IHw9IFBDSV9FWFBfTE5LQ1RMMl9UTFNfOF8wR1Q7IC8qIGdlbjMgKi8K PiAgICAgICAgIGVsc2UgaWYgKGFkZXYtPnBtLnBjaWVfZ2VuX21hc2sgJiBDQUlMX1BDSUVfTElO S19TUEVFRF9TVVBQT1JUX0dFTjIpCj4gICAgICAgICAgICAgICAgIHRtcDE2IHw9IFBDSV9FWFBf TE5LQ1RMMl9UTFNfNV8wR1Q7IC8qIGdlbjIgKi8KPiAgICAgICAgIGVsc2UKPiAgICAgICAgICAg ICAgICAgdG1wMTYgfD0gUENJX0VYUF9MTktDVEwyX1RMU18yXzVHVDsgLyogZ2VuMSAqLwo+IC0g ICAgICAgcGNpX3dyaXRlX2NvbmZpZ193b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQ X0xOS0NUTDIsIHRtcDE2KTsKPiArICAgICAgIHBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKGFk ZXYtPnBkZXYsIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOwo+Cj4gICAgICAgICBzcGVlZF9jbnRs ID0gUlJFRzMyX1BDSUUoaXhQQ0lFX0xDX1NQRUVEX0NOVEwpOwo+ICAgICAgICAgc3BlZWRfY250 bCB8PSBQQ0lFX0xDX1NQRUVEX0NOVExfX0xDX0lOSVRJQVRFX0xJTktfU1BFRURfQ0hBTkdFX01B U0s7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NpLmMgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9zaS5jCj4gaW5kZXggYTdkY2IwZDBmMDM5Li45ZjgyYmU4 NzkyMjQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvc2kuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NpLmMKPiBAQCAtMTYzMyw3ICsxNjMzLDYg QEAgc3RhdGljIHZvaWQgc2lfaW5pdF9nb2xkZW5fcmVnaXN0ZXJzKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2KQo+ICBzdGF0aWMgdm9pZCBzaV9wY2llX2dlbjNfZW5hYmxlKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2KQo+ICB7Cj4gICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcm9vdCA9IGFk ZXYtPnBkZXYtPmJ1cy0+c2VsZjsKPiAtICAgICAgIGludCBicmlkZ2VfcG9zLCBncHVfcG9zOwo+ ICAgICAgICAgdTMyIHNwZWVkX2NudGwsIGN1cnJlbnRfZGF0YV9yYXRlOwo+ICAgICAgICAgaW50 IGk7Cj4gICAgICAgICB1MTYgdG1wMTY7Cj4gQEAgLTE2NjgsMTIgKzE2NjcsNyBAQCBzdGF0aWMg dm9pZCBzaV9wY2llX2dlbjNfZW5hYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ICAg ICAgICAgICAgICAgICBEUk1fSU5GTygiZW5hYmxpbmcgUENJRSBnZW4gMiBsaW5rIHNwZWVkcywg ZGlzYWJsZSB3aXRoIGFtZGdwdS5wY2llX2dlbjI9MFxuIik7Cj4gICAgICAgICB9Cj4KPiAtICAg ICAgIGJyaWRnZV9wb3MgPSBwY2lfcGNpZV9jYXAocm9vdCk7Cj4gLSAgICAgICBpZiAoIWJyaWRn ZV9wb3MpCj4gLSAgICAgICAgICAgICAgIHJldHVybjsKPiAtCj4gLSAgICAgICBncHVfcG9zID0g cGNpX3BjaWVfY2FwKGFkZXYtPnBkZXYpOwo+IC0gICAgICAgaWYgKCFncHVfcG9zKQo+ICsgICAg ICAgaWYgKCFwY2lfaXNfcGNpZShyb290KSB8fCAhcGNpX2lzX3BjaWUoYWRldi0+cGRldikpCj4g ICAgICAgICAgICAgICAgIHJldHVybjsKPgo+ICAgICAgICAgaWYgKGFkZXYtPnBtLnBjaWVfZ2Vu X21hc2sgJiBDQUlMX1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX0dFTjMpIHsKPiBAQCAtMTY4Miwx NCArMTY3NiwxNyBAQCBzdGF0aWMgdm9pZCBzaV9wY2llX2dlbjNfZW5hYmxlKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2KQo+ICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBicmlkZ2VfY2Zn MiwgZ3B1X2NmZzI7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgdTMyIG1heF9sdywgY3VycmVu dF9sdywgdG1wOwo+Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dv cmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmYnJpZGdlX2NmZyk7Cj4gLSAg ICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1 X3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmZ3B1X2NmZyk7Cj4gKyAgICAgICAgICAgICAgICAgICAg ICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTCwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZicmlkZ2VfY2Zn KTsKPiArICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKGFk ZXYtPnBkZXYsIFBDSV9FWFBfTE5LQ1RMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmdwdV9jZmcpOwo+Cj4gICAgICAgICAgICAgICAgICAgICAg ICAgdG1wMTYgPSBicmlkZ2VfY2ZnIHwgUENJX0VYUF9MTktDVExfSEFXRDsKPiAtICAgICAgICAg ICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBD SV9FWFBfTE5LQ1RMLCB0bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBh YmlsaXR5X3dyaXRlX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsKPgo+ICAgICAg ICAgICAgICAgICAgICAgICAgIHRtcDE2ID0gZ3B1X2NmZyB8IFBDSV9FWFBfTE5LQ1RMX0hBV0Q7 Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ193b3JkKGFkZXYtPnBk ZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAg ICAgICAgIHBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKGFkZXYtPnBkZXYsIFBDSV9FWFBfTE5L Q1RMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRtcDE2KTsKPgo+ICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFJSRUczMl9QQ0lFKFBD SUVfTENfU1RBVFVTMSk7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2x3ID0gKHRtcCAm IExDX0RFVEVDVEVEX0xJTktfV0lEVEhfTUFTSykgPj4gTENfREVURUNURURfTElOS19XSURUSF9T SElGVDsKPiBAQCAtMTcwNiwxNSArMTcwMywyMyBAQCBzdGF0aWMgdm9pZCBzaV9wY2llX2dlbjNf ZW5hYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ICAgICAgICAgICAgICAgICAgICAg ICAgIH0KPgo+ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsr KSB7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29y ZChhZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9ERVZTVEEsICZ0bXAxNik7Cj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKGFkZXYt PnBkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBDSV9FWFBfREVWU1RBLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wMTYpOwo+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHRtcDE2ICYgUENJX0VYUF9ERVZTVEFfVFJQTkQpCj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+Cj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChyb290LCBicmlkZ2VfcG9z ICsgUENJX0VYUF9MTktDVEwsICZicmlkZ2VfY2ZnKTsKPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lf RVhQX0xOS0NUTCwgJmdwdV9jZmcpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTCwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJyaWRn ZV9jZmcpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5 X3JlYWRfd29yZChhZGV2LT5wZGV2LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTCwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdwdV9jZmcpOwo+ Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChy b290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwyLCAmYnJpZGdlX2NmZzIpOwo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRldi0+cGRl diwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJmdwdV9jZmcyKTsKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VY UF9MTktDVEwyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmYnJpZGdlX2NmZzIpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChhZGV2LT5wZGV2LAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xO S0NUTDIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZncHVfY2ZnMik7Cj4KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRtcCA9IFJSRUczMl9QQ0lFX1BPUlQoUENJRV9MQ19DTlRMNCk7Cj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0bXAgfD0gTENfU0VUX1FVSUVTQ0U7Cj4gQEAgLTE3MjYsMzEgKzE3 MzEsNDQgQEAgc3RhdGljIHZvaWQgc2lfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldikKPgo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRlbGF5KDEw MCk7Cj4KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaV9yZWFkX2NvbmZpZ193 b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgJnRtcDE2KTsKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwg UENJX0VYUF9MTktDVEwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZ0bXAxNik7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0bXAxNiAmPSB+UENJX0VYUF9MTktDVExfSEFXRDsKPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRtcDE2IHw9IChicmlkZ2VfY2ZnICYgUENJX0VYUF9MTktDVExfSEFXRCk7 Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQo cm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMLCB0bXAxNik7Cj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlfd3JpdGVfd29yZChyb290LCBQQ0lf RVhQX0xOS0NUTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRtcDE2KTsKPgo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5L Q1RMLCAmdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBh YmlsaXR5X3JlYWRfd29yZChhZGV2LT5wZGV2LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTCwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcDE2 KTsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2ICY9IH5QQ0lfRVhQX0xO S0NUTF9IQVdEOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYgfD0gKGdw dV9jZmcgJiBQQ0lfRVhQX0xOS0NUTF9IQVdEKTsKPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBjaV93cml0ZV9jb25maWdfd29yZChhZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VY UF9MTktDVEwsIHRtcDE2KTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVf Y2FwYWJpbGl0eV93cml0ZV93b3JkKGFkZXYtPnBkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRtcDE2KTsKPgo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29u ZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJnRtcDE2KTsKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQo cm9vdCwgUENJX0VYUF9MTktDVEwyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wMTYpOwo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdG1wMTYgJj0gfihQQ0lfRVhQX0xOS0NUTDJfRU5URVJfQ09NUCB8Cj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5LQ1RMMl9U WF9NQVJHSU4pOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYgfD0gKGJy aWRnZV9jZmcyICYKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo UENJX0VYUF9MTktDVEwyX0VOVEVSX0NPTVAgfAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTDJfVFhfTUFSR0lOKSk7Cj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdl X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQocm9vdCwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5L Q1RMMiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRtcDE2KTsKPgo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNp X3JlYWRfY29uZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwg JnRtcDE2KTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0 eV9yZWFkX3dvcmQoYWRldi0+cGRldiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0VYUF9MTktDVEwyLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wMTYpOwo+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYgJj0gfihQQ0lfRVhQX0xOS0NU TDJfRU5URVJfQ09NUCB8Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBDSV9FWFBfTE5LQ1RMMl9UWF9NQVJHSU4pOwo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdG1wMTYgfD0gKGdwdV9jZmcyICYKPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoUENJX0VYUF9MTktDVEwyX0VOVEVSX0NPTVAgfAo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTDJfVFhfTUFS R0lOKSk7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmln X3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOwo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQo YWRldi0+cGRldiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5LQ1RMMiwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2KTsKPgo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gUlJFRzMyX1BDSUVfUE9SVChQQ0lFX0xDX0NO VEw0KTsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCAmPSB+TENfU0VUX1FV SUVTQ0U7Cj4gQEAgLTE3NjMsMTUgKzE3ODEsMTYgQEAgc3RhdGljIHZvaWQgc2lfcGNpZV9nZW4z X2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAgICAgICAgIHNwZWVkX2NudGwg Jj0gfkxDX0ZPUkNFX0RJU19TV19TUEVFRF9DSEFOR0U7Cj4gICAgICAgICBXUkVHMzJfUENJRV9Q T1JUKFBDSUVfTENfU1BFRURfQ05UTCwgc3BlZWRfY250bCk7Cj4KPiAtICAgICAgIHBjaV9yZWFk X2NvbmZpZ193b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIsICZ0bXAx Nik7Cj4gKyAgICAgICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKGFkZXYtPnBkZXYsIFBDSV9F WFBfTE5LQ1RMMiwgJnRtcDE2KTsKPiAgICAgICAgIHRtcDE2ICY9IH5QQ0lfRVhQX0xOS0NUTDJf VExTOwo+ICsKPiAgICAgICAgIGlmIChhZGV2LT5wbS5wY2llX2dlbl9tYXNrICYgQ0FJTF9QQ0lF X0xJTktfU1BFRURfU1VQUE9SVF9HRU4zKQo+ICAgICAgICAgICAgICAgICB0bXAxNiB8PSBQQ0lf RVhQX0xOS0NUTDJfVExTXzhfMEdUOyAvKiBnZW4zICovCj4gICAgICAgICBlbHNlIGlmIChhZGV2 LT5wbS5wY2llX2dlbl9tYXNrICYgQ0FJTF9QQ0lFX0xJTktfU1BFRURfU1VQUE9SVF9HRU4yKQo+ ICAgICAgICAgICAgICAgICB0bXAxNiB8PSBQQ0lfRVhQX0xOS0NUTDJfVExTXzVfMEdUOyAvKiBn ZW4yICovCj4gICAgICAgICBlbHNlCj4gICAgICAgICAgICAgICAgIHRtcDE2IHw9IFBDSV9FWFBf TE5LQ1RMMl9UTFNfMl81R1Q7IC8qIGdlbjEgKi8KPiAtICAgICAgIHBjaV93cml0ZV9jb25maWdf d29yZChhZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwyLCB0bXAxNik7Cj4gKyAg ICAgICBwY2llX2NhcGFiaWxpdHlfd3JpdGVfd29yZChhZGV2LT5wZGV2LCBQQ0lfRVhQX0xOS0NU TDIsIHRtcDE2KTsKPgo+ICAgICAgICAgc3BlZWRfY250bCA9IFJSRUczMl9QQ0lFX1BPUlQoUENJ RV9MQ19TUEVFRF9DTlRMKTsKPiAgICAgICAgIHNwZWVkX2NudGwgfD0gTENfSU5JVElBVEVfTElO S19TUEVFRF9DSEFOR0U7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lr LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Npay5jCj4gaW5kZXggYTI4MDQ0MmM4MWFhLi4w OWE0NzA5ZTY3ZjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jaWsuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrLmMKPiBAQCAtOTUwNCw3ICs5NTA0LDYg QEAgc3RhdGljIHZvaWQgY2lrX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2Ug KnJkZXYpCj4gIHsKPiAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpyb290ID0gcmRldi0+cGRldi0+ YnVzLT5zZWxmOwo+ICAgICAgICAgZW51bSBwY2lfYnVzX3NwZWVkIHNwZWVkX2NhcDsKPiAtICAg ICAgIGludCBicmlkZ2VfcG9zLCBncHVfcG9zOwo+ICAgICAgICAgdTMyIHNwZWVkX2NudGwsIGN1 cnJlbnRfZGF0YV9yYXRlOwo+ICAgICAgICAgaW50IGk7Cj4gICAgICAgICB1MTYgdG1wMTY7Cj4g QEAgLTk1NDYsMTIgKzk1NDUsNyBAQCBzdGF0aWMgdm9pZCBjaWtfcGNpZV9nZW4zX2VuYWJsZShz dHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKPiAgICAgICAgICAgICAgICAgRFJNX0lORk8oImVu YWJsaW5nIFBDSUUgZ2VuIDIgbGluayBzcGVlZHMsIGRpc2FibGUgd2l0aCByYWRlb24ucGNpZV9n ZW4yPTBcbiIpOwo+ICAgICAgICAgfQo+Cj4gLSAgICAgICBicmlkZ2VfcG9zID0gcGNpX3BjaWVf Y2FwKHJvb3QpOwo+IC0gICAgICAgaWYgKCFicmlkZ2VfcG9zKQo+IC0gICAgICAgICAgICAgICBy ZXR1cm47Cj4gLQo+IC0gICAgICAgZ3B1X3BvcyA9IHBjaV9wY2llX2NhcChyZGV2LT5wZGV2KTsK PiAtICAgICAgIGlmICghZ3B1X3BvcykKPiArICAgICAgIGlmICghcGNpX2lzX3BjaWUocm9vdCkg fHwgIXBjaV9pc19wY2llKHJkZXYtPnBkZXYpKQo+ICAgICAgICAgICAgICAgICByZXR1cm47Cj4K PiAgICAgICAgIGlmIChzcGVlZF9jYXAgPT0gUENJRV9TUEVFRF84XzBHVCkgewo+IEBAIC05NTYx LDE0ICs5NTU1LDE3IEBAIHN0YXRpYyB2b2lkIGNpa19wY2llX2dlbjNfZW5hYmxlKHN0cnVjdCBy YWRlb25fZGV2aWNlICpyZGV2KQo+ICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBicmlkZ2Vf Y2ZnMiwgZ3B1X2NmZzI7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgdTMyIG1heF9sdywgY3Vy cmVudF9sdywgdG1wOwo+Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmln X3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmYnJpZGdlX2NmZyk7Cj4g LSAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQocmRldi0+cGRldiwg Z3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmZ3B1X2NmZyk7Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZicmlkZ2Vf Y2ZnKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3Jk KHJkZXYtPnBkZXYsIFBDSV9FWFBfTE5LQ1RMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmdwdV9jZmcpOwo+Cj4gICAgICAgICAgICAgICAgICAg ICAgICAgdG1wMTYgPSBicmlkZ2VfY2ZnIHwgUENJX0VYUF9MTktDVExfSEFXRDsKPiAtICAgICAg ICAgICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyAr IFBDSV9FWFBfTE5LQ1RMLCB0bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9j YXBhYmlsaXR5X3dyaXRlX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsKPgo+ICAg ICAgICAgICAgICAgICAgICAgICAgIHRtcDE2ID0gZ3B1X2NmZyB8IFBDSV9FWFBfTE5LQ1RMX0hB V0Q7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ193b3JkKHJkZXYt PnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOwo+ICsgICAgICAgICAgICAg ICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKHJkZXYtPnBkZXYsIFBDSV9FWFBf TE5LQ1RMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRtcDE2KTsKPgo+ICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFJSRUczMl9QQ0lF X1BPUlQoUENJRV9MQ19TVEFUVVMxKTsKPiAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbHcg PSAodG1wICYgTENfREVURUNURURfTElOS19XSURUSF9NQVNLKSA+PiBMQ19ERVRFQ1RFRF9MSU5L X1dJRFRIX1NISUZUOwo+IEBAIC05NTg2LDE1ICs5NTgzLDIzIEBAIHN0YXRpYyB2b2lkIGNpa19w Y2llX2dlbjNfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQo+Cj4gICAgICAgICAg ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGNoZWNrIHN0YXR1cyAqLwo+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQocmRldi0+cGRldiwgZ3B1X3BvcyAr IFBDSV9FWFBfREVWU1RBLCAmdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyZGV2LT5wZGV2LAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0RFVlNU QSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnRtcDE2KTsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAx NiAmIFBDSV9FWFBfREVWU1RBX1RSUE5EKQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKPgo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNp X3JlYWRfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmYnJp ZGdlX2NmZyk7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25m aWdfd29yZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwsICZncHVfY2ZnKTsK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dv cmQocm9vdCwgUENJX0VYUF9MTktDVEwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZicmlkZ2VfY2ZnKTsKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocmRldi0+cGRldiwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUENJX0VYUF9MTktDVEwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZncHVfY2ZnKTsKPgo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9F WFBfTE5LQ1RMMiwgJmJyaWRnZV9jZmcyKTsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xO S0NUTDIsICZncHVfY2ZnMik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2ll X2NhcGFiaWxpdHlfcmVhZF93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMMiwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJyaWRnZV9j ZmcyKTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9y ZWFkX3dvcmQocmRldi0+cGRldiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUENJX0VYUF9MTktDVEwyLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ3B1X2NmZzIpOwo+ Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBSUkVHMzJfUENJRV9QT1JU KFBDSUVfTENfQ05UTDQpOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wIHw9 IExDX1NFVF9RVUlFU0NFOwo+IEBAIC05NjA3LDMyICs5NjEyLDQ1IEBAIHN0YXRpYyB2b2lkIGNp a19wY2llX2dlbjNfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7Cj4KPiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGxpbmtjdGwgKi8KPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xO S0NUTCwgJnRtcDE2KTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2Fw YWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXAxNik7Cj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAxNiAmPSB+UENJX0VYUF9MTktDVExfSEFX RDsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2IHw9IChicmlkZ2VfY2Zn ICYgUENJX0VYUF9MTktDVExfSEFXRCk7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RM LCB0bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxp dHlfd3JpdGVfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2KTsKPgo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQocmRldi0+cGRl diwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyZGV2LT5wZGV2LAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ Q0lfRVhQX0xOS0NUTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnRtcDE2KTsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRtcDE2ICY9IH5QQ0lfRVhQX0xOS0NUTF9IQVdEOwo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdG1wMTYgfD0gKGdwdV9jZmcgJiBQQ0lfRVhQX0xOS0NUTF9IQVdEKTsKPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaV93cml0ZV9jb25maWdfd29yZChyZGV2 LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKHJkZXYtPnBkZXYs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQQ0lfRVhQX0xOS0NUTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2KTsKPgo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogbGlua2N0bDIgKi8KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NU TDIsICZ0bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFi aWxpdHlfcmVhZF93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMMiwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcDE2KTsKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2ICY9IH4oUENJX0VYUF9MTktDVEwyX0VO VEVSX0NPTVAgfAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ Q0lfRVhQX0xOS0NUTDJfVFhfTUFSR0lOKTsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRtcDE2IHw9IChicmlkZ2VfY2ZnMiAmCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKFBDSV9FWFBfTE5LQ1RMMl9FTlRFUl9DT01QIHwKPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0VYUF9MTktDVEwyX1RYX01BUkdJ TikpOwo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ193 b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIsIHRtcDE2KTsKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKHJvb3Qs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQQ0lfRVhQX0xOS0NUTDIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAxNik7Cj4KPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9wb3MgKyBQ Q0lfRVhQX0xOS0NUTDIsICZ0bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJkZXYtPnBkZXYsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5LQ1RM MiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnRtcDE2KTsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2ICY9 IH4oUENJX0VYUF9MTktDVEwyX0VOVEVSX0NPTVAgfAo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTDJfVFhfTUFSR0lOKTsKPiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2IHw9IChncHVfY2ZnMiAmCj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBDSV9FWFBfTE5LQ1RMMl9FTlRFUl9D T01QIHwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0VY UF9MTktDVEwyX1RYX01BUkdJTikpOwo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGNpX3dyaXRlX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NU TDIsIHRtcDE2KTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJp bGl0eV93cml0ZV93b3JkKHJkZXYtPnBkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTDIsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAx Nik7Cj4KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFJSRUczMl9QQ0lF X1BPUlQoUENJRV9MQ19DTlRMNCk7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 bXAgJj0gfkxDX1NFVF9RVUlFU0NFOwo+IEBAIC05NjQ2LDcgKzk2NjQsNyBAQCBzdGF0aWMgdm9p ZCBjaWtfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKPiAgICAg ICAgIHNwZWVkX2NudGwgJj0gfkxDX0ZPUkNFX0RJU19TV19TUEVFRF9DSEFOR0U7Cj4gICAgICAg ICBXUkVHMzJfUENJRV9QT1JUKFBDSUVfTENfU1BFRURfQ05UTCwgc3BlZWRfY250bCk7Cj4KPiAt ICAgICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQ X0xOS0NUTDIsICZ0bXAxNik7Cj4gKyAgICAgICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJk ZXYtPnBkZXYsIFBDSV9FWFBfTE5LQ1RMMiwgJnRtcDE2KTsKPiAgICAgICAgIHRtcDE2ICY9IH5Q Q0lfRVhQX0xOS0NUTDJfVExTOwo+ICAgICAgICAgaWYgKHNwZWVkX2NhcCA9PSBQQ0lFX1NQRUVE XzhfMEdUKQo+ICAgICAgICAgICAgICAgICB0bXAxNiB8PSBQQ0lfRVhQX0xOS0NUTDJfVExTXzhf MEdUOyAvKiBnZW4zICovCj4gQEAgLTk2NTQsNyArOTY3Miw3IEBAIHN0YXRpYyB2b2lkIGNpa19w Y2llX2dlbjNfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQo+ICAgICAgICAgICAg ICAgICB0bXAxNiB8PSBQQ0lfRVhQX0xOS0NUTDJfVExTXzVfMEdUOyAvKiBnZW4yICovCj4gICAg ICAgICBlbHNlCj4gICAgICAgICAgICAgICAgIHRtcDE2IHw9IFBDSV9FWFBfTE5LQ1RMMl9UTFNf Ml81R1Q7IC8qIGdlbjEgKi8KPiAtICAgICAgIHBjaV93cml0ZV9jb25maWdfd29yZChyZGV2LT5w ZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwyLCB0bXAxNik7Cj4gKyAgICAgICBwY2llX2Nh cGFiaWxpdHlfd3JpdGVfd29yZChyZGV2LT5wZGV2LCBQQ0lfRVhQX0xOS0NUTDIsIHRtcDE2KTsK Pgo+ICAgICAgICAgc3BlZWRfY250bCA9IFJSRUczMl9QQ0lFX1BPUlQoUENJRV9MQ19TUEVFRF9D TlRMKTsKPiAgICAgICAgIHNwZWVkX2NudGwgfD0gTENfSU5JVElBVEVfTElOS19TUEVFRF9DSEFO R0U7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2kuYyBiL2RyaXZlcnMv Z3B1L2RybS9yYWRlb24vc2kuYwo+IGluZGV4IDUyOWU3MGE0MjAxOS4uNjdhOThiMzM3MGQxIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2kuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9yYWRlb24vc2kuYwo+IEBAIC0zMjU3LDcgKzMyNTcsNyBAQCBzdGF0aWMgdm9pZCBz aV9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKPiAgICAgICAgICAgICAgICAg LyogWFhYIHdoYXQgYWJvdXQgMTI/ICovCj4gICAgICAgICAgICAgICAgIHJkZXYtPmNvbmZpZy5z aS50aWxlX2NvbmZpZyB8PSAoMyA8PCAwKTsKPiAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gLSAg ICAgICB9Cj4gKyAgICAgICB9Cj4gICAgICAgICBzd2l0Y2ggKChtY19hcmJfcmFtY2ZnICYgTk9P RkJBTktfTUFTSykgPj4gTk9PRkJBTktfU0hJRlQpIHsKPiAgICAgICAgIGNhc2UgMDogLyogZm91 ciBiYW5rcyAqLwo+ICAgICAgICAgICAgICAgICByZGV2LT5jb25maWcuc2kudGlsZV9jb25maWcg fD0gMCA8PCA0Owo+IEBAIC03MDg3LDcgKzcwODcsNiBAQCBzdGF0aWMgdm9pZCBzaV9wY2llX2dl bjNfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQo+ICB7Cj4gICAgICAgICBzdHJ1 Y3QgcGNpX2RldiAqcm9vdCA9IHJkZXYtPnBkZXYtPmJ1cy0+c2VsZjsKPiAgICAgICAgIGVudW0g cGNpX2J1c19zcGVlZCBzcGVlZF9jYXA7Cj4gLSAgICAgICBpbnQgYnJpZGdlX3BvcywgZ3B1X3Bv czsKPiAgICAgICAgIHUzMiBzcGVlZF9jbnRsLCBjdXJyZW50X2RhdGFfcmF0ZTsKPiAgICAgICAg IGludCBpOwo+ICAgICAgICAgdTE2IHRtcDE2Owo+IEBAIC03MTI5LDEyICs3MTI4LDcgQEAgc3Rh dGljIHZvaWQgc2lfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikK PiAgICAgICAgICAgICAgICAgRFJNX0lORk8oImVuYWJsaW5nIFBDSUUgZ2VuIDIgbGluayBzcGVl ZHMsIGRpc2FibGUgd2l0aCByYWRlb24ucGNpZV9nZW4yPTBcbiIpOwo+ICAgICAgICAgfQo+Cj4g LSAgICAgICBicmlkZ2VfcG9zID0gcGNpX3BjaWVfY2FwKHJvb3QpOwo+IC0gICAgICAgaWYgKCFi cmlkZ2VfcG9zKQo+IC0gICAgICAgICAgICAgICByZXR1cm47Cj4gLQo+IC0gICAgICAgZ3B1X3Bv cyA9IHBjaV9wY2llX2NhcChyZGV2LT5wZGV2KTsKPiAtICAgICAgIGlmICghZ3B1X3BvcykKPiAr ICAgICAgIGlmICghcGNpX2lzX3BjaWUocm9vdCkgfHwgIXBjaV9pc19wY2llKHJkZXYtPnBkZXYp KQo+ICAgICAgICAgICAgICAgICByZXR1cm47Cj4KPiAgICAgICAgIGlmIChzcGVlZF9jYXAgPT0g UENJRV9TUEVFRF84XzBHVCkgewo+IEBAIC03MTQ0LDE0ICs3MTM4LDE3IEBAIHN0YXRpYyB2b2lk IHNpX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCj4gICAgICAg ICAgICAgICAgICAgICAgICAgdTE2IGJyaWRnZV9jZmcyLCBncHVfY2ZnMjsKPiAgICAgICAgICAg ICAgICAgICAgICAgICB1MzIgbWF4X2x3LCBjdXJyZW50X2x3LCB0bXA7Cj4KPiAtICAgICAgICAg ICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChyb290LCBicmlkZ2VfcG9zICsgUENJ X0VYUF9MTktDVEwsICZicmlkZ2VfY2ZnKTsKPiAtICAgICAgICAgICAgICAgICAgICAgICBwY2lf cmVhZF9jb25maWdfd29yZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwsICZn cHVfY2ZnKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlfcmVhZF93 b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmJyaWRnZV9jZmcpOwo+ICsgICAgICAgICAgICAgICAgICAg ICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocmRldi0+cGRldiwgUENJX0VYUF9MTktDVEws Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ3B1 X2NmZyk7Cj4KPiAgICAgICAgICAgICAgICAgICAgICAgICB0bXAxNiA9IGJyaWRnZV9jZmcgfCBQ Q0lfRVhQX0xOS0NUTF9IQVdEOwo+IC0gICAgICAgICAgICAgICAgICAgICAgIHBjaV93cml0ZV9j b25maWdfd29yZChyb290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsKPiAr ICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlfd3JpdGVfd29yZChyb290LCBQ Q0lfRVhQX0xOS0NUTCwgdG1wMTYpOwo+Cj4gICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYg PSBncHVfY2ZnIHwgUENJX0VYUF9MTktDVExfSEFXRDsKPiAtICAgICAgICAgICAgICAgICAgICAg ICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocmRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5L Q1RMLCB0bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3dy aXRlX3dvcmQocmRldi0+cGRldiwgUENJX0VYUF9MTktDVEwsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYpOwo+Cj4gICAgICAgICAgICAg ICAgICAgICAgICAgdG1wID0gUlJFRzMyX1BDSUUoUENJRV9MQ19TVEFUVVMxKTsKPiAgICAgICAg ICAgICAgICAgICAgICAgICBtYXhfbHcgPSAodG1wICYgTENfREVURUNURURfTElOS19XSURUSF9N QVNLKSA+PiBMQ19ERVRFQ1RFRF9MSU5LX1dJRFRIX1NISUZUOwo+IEBAIC03MTY5LDE1ICs3MTY2 LDIzIEBAIHN0YXRpYyB2b2lkIHNpX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZp Y2UgKnJkZXYpCj4KPiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTA7 IGkrKykgewo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hlY2sgc3RhdHVz ICovCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29y ZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9ERVZTVEEsICZ0bXAxNik7Cj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJkZXYt PnBkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBDSV9FWFBfREVWU1RBLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wMTYpOwo+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHRtcDE2ICYgUENJX0VYUF9ERVZTVEFfVFJQTkQpCj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+Cj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChyb290LCBicmlkZ2VfcG9z ICsgUENJX0VYUF9MTktDVEwsICZicmlkZ2VfY2ZnKTsKPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lf RVhQX0xOS0NUTCwgJmdwdV9jZmcpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTCwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJyaWRn ZV9jZmcpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5 X3JlYWRfd29yZChyZGV2LT5wZGV2LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTCwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdwdV9jZmcpOwo+ Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChy b290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwyLCAmYnJpZGdlX2NmZzIpOwo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQocmRldi0+cGRl diwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJmdwdV9jZmcyKTsKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VY UF9MTktDVEwyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmYnJpZGdlX2NmZzIpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyZGV2LT5wZGV2LAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xO S0NUTDIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZncHVfY2ZnMik7Cj4KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRtcCA9IFJSRUczMl9QQ0lFX1BPUlQoUENJRV9MQ19DTlRMNCk7Cj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0bXAgfD0gTENfU0VUX1FVSUVTQ0U7Cj4gQEAgLTcxOTAsMzIgKzcx OTUsNDYgQEAgc3RhdGljIHZvaWQgc2lfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2Rl dmljZSAqcmRldikKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCgxMDAp Owo+Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaW5rY3RsICovCj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChyb290LCBi cmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwsICZ0bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJvb3QsIFBDSV9FWFBfTE5L Q1RMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmdG1wMTYpOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYg Jj0gflBDSV9FWFBfTE5LQ1RMX0hBV0Q7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0bXAxNiB8PSAoYnJpZGdlX2NmZyAmIFBDSV9FWFBfTE5LQ1RMX0hBV0QpOwo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ193b3JkKHJvb3QsIGJyaWRn ZV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQocm9vdCwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5L Q1RMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdG1wMTYpOwo+Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lf cmVhZF9jb25maWdfd29yZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwsICZ0 bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlf cmVhZF93b3JkKHJkZXYtPnBkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5LQ1RMLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wMTYpOwo+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYgJj0gflBDSV9FWFBfTE5LQ1RMX0hB V0Q7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAxNiB8PSAoZ3B1X2NmZyAm IFBDSV9FWFBfTE5LQ1RMX0hBV0QpOwo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGNpX3dyaXRlX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NU TCwgdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBhYmls aXR5X3dyaXRlX3dvcmQocmRldi0+cGRldiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5LQ1RMLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYp Owo+Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaW5rY3RsMiAqLwo+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQocm9vdCwg YnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJnRtcDE2KTsKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VYUF9M TktDVEwyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmdG1wMTYpOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1w MTYgJj0gfihQQ0lfRVhQX0xOS0NUTDJfRU5URVJfQ09NUCB8Cj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5LQ1RMMl9UWF9NQVJHSU4pOwo+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYgfD0gKGJyaWRnZV9jZmcyICYKPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUENJX0VYUF9MTktDVEwy X0VOVEVSX0NPTVAgfAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQQ0lfRVhQX0xOS0NUTDJfVFhfTUFSR0lOKSk7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBf TE5LQ1RMMiwgdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9j YXBhYmlsaXR5X3dyaXRlX3dvcmQocm9vdCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5LQ1RMMiwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2 KTsKPgo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dv cmQocmRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJnRtcDE2KTsKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocmRl di0+cGRldiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUENJX0VYUF9MTktDVEwyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wMTYpOwo+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdG1wMTYgJj0gfihQQ0lfRVhQX0xOS0NUTDJfRU5URVJfQ09NUCB8 Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5L Q1RMMl9UWF9NQVJHSU4pOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYg fD0gKGdwdV9jZmcyICYKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoUENJX0VYUF9MTktDVEwyX0VOVEVSX0NPTVAgfAo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTDJfVFhfTUFSR0lOKSk7Cj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocmRldi0+cGRl diwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQocmRldi0+cGRldiwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFBDSV9FWFBfTE5LQ1RMMiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRtcDE2KTsKPgo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdG1wID0gUlJFRzMyX1BDSUVfUE9SVChQQ0lFX0xDX0NOVEw0KTsKPiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCAmPSB+TENfU0VUX1FVSUVTQ0U7Cj4gQEAgLTcy MjksNyArNzI0OCw3IEBAIHN0YXRpYyB2b2lkIHNpX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IHJh ZGVvbl9kZXZpY2UgKnJkZXYpCj4gICAgICAgICBzcGVlZF9jbnRsICY9IH5MQ19GT1JDRV9ESVNf U1dfU1BFRURfQ0hBTkdFOwo+ICAgICAgICAgV1JFRzMyX1BDSUVfUE9SVChQQ0lFX0xDX1NQRUVE X0NOVEwsIHNwZWVkX2NudGwpOwo+Cj4gLSAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChyZGV2 LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwyLCAmdG1wMTYpOwo+ICsgICAgICAgcGNp ZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyZGV2LT5wZGV2LCBQQ0lfRVhQX0xOS0NUTDIsICZ0bXAx Nik7Cj4gICAgICAgICB0bXAxNiAmPSB+UENJX0VYUF9MTktDVEwyX1RMUzsKPiAgICAgICAgIGlm IChzcGVlZF9jYXAgPT0gUENJRV9TUEVFRF84XzBHVCkKPiAgICAgICAgICAgICAgICAgdG1wMTYg fD0gUENJX0VYUF9MTktDVEwyX1RMU184XzBHVDsgLyogZ2VuMyAqLwo+IEBAIC03MjM3LDcgKzcy NTYsNyBAQCBzdGF0aWMgdm9pZCBzaV9wY2llX2dlbjNfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2 aWNlICpyZGV2KQo+ICAgICAgICAgICAgICAgICB0bXAxNiB8PSBQQ0lfRVhQX0xOS0NUTDJfVExT XzVfMEdUOyAvKiBnZW4yICovCj4gICAgICAgICBlbHNlCj4gICAgICAgICAgICAgICAgIHRtcDE2 IHw9IFBDSV9FWFBfTE5LQ1RMMl9UTFNfMl81R1Q7IC8qIGdlbjEgKi8KPiAtICAgICAgIHBjaV93 cml0ZV9jb25maWdfd29yZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwyLCB0 bXAxNik7Cj4gKyAgICAgICBwY2llX2NhcGFiaWxpdHlfd3JpdGVfd29yZChyZGV2LT5wZGV2LCBQ Q0lfRVhQX0xOS0NUTDIsIHRtcDE2KTsKPgo+ICAgICAgICAgc3BlZWRfY250bCA9IFJSRUczMl9Q Q0lFX1BPUlQoUENJRV9MQ19TUEVFRF9DTlRMKTsKPiAgICAgICAgIHNwZWVkX2NudGwgfD0gTENf SU5JVElBVEVfTElOS19TUEVFRF9DSEFOR0U7Cj4gLS0KPiAyLjIwLjEKPgo+IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcg bGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbApfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw= 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=-6.5 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,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 8F12CC432C3 for ; Mon, 18 Nov 2019 17:42:44 +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 705822190F for ; Mon, 18 Nov 2019 17:42:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 705822190F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B1CE3899C7; Mon, 18 Nov 2019 17:42:43 +0000 (UTC) Received: from mail-wr1-x442.google.com (mail-wr1-x442.google.com [IPv6:2a00:1450:4864:20::442]) by gabe.freedesktop.org (Postfix) with ESMTPS id 789598991A; Mon, 18 Nov 2019 17:42:41 +0000 (UTC) Received: by mail-wr1-x442.google.com with SMTP id s5so20587654wrw.2; Mon, 18 Nov 2019 09:42:41 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=uayRssAG7JereMlsCPQMtccfJwePrgRnviw2NEhJvhA=; b=dCuHvCV49CpQ1zeOo5V+jfb0TNxLPZfcG7v53Gdlh/gySWC7LKvosQXL1A458/bTiI EPUNedyGAOl6pD2Gzss9XK5TeHJOxp/K9Ue6hF/Sumjgw/deOAFlri8LCRpwAkaQXks4 Y9zcw29HUvAiEnD5poiaa9JDL2ZQyBwuD0l5wUx02IBifRsAxd873CbCYgmezuZzD9yK Jlj62MkZRiQ6xI8DkyQI7n7aEGMDVtCKANZLGPog2NyDMcPX/mWdunF2/l/eSWoTM0r9 GLnvdRuOSF0mNWb03gmKeDB7DPIWxduq2+uj7br8YQEcmbpDjNxfLkfDmSh9rDipdtp3 v1yA== X-Gm-Message-State: APjAAAXX3h/xsOc8AQ5aOriT4siRAVf3+rE7O7xnKjOe6dvEqdOdzHa0 Z6O1rNimEoJLEiBmAdvoOehEnNvlcdcX5Uh5wpM= X-Google-Smtp-Source: APXvYqxTp0NjRk6YW+dq/ZHoywe5xse8APCyI5yQXNEmZxIKYsHrqg6AGOV3k8uJ+ERO7RC4s9jJsz9XL5BpLfEsjMw= X-Received: by 2002:a05:6000:18c:: with SMTP id p12mr4072521wrx.154.1574098959646; Mon, 18 Nov 2019 09:42:39 -0800 (PST) MIME-Version: 1.0 References: <20191118003513.10852-1-fred@fredlawl.com> In-Reply-To: <20191118003513.10852-1-fred@fredlawl.com> From: Alex Deucher Date: Mon, 18 Nov 2019 12:42:25 -0500 Message-ID: Subject: Re: [PATCH v2 1/1] drm: Prefer pcie_capability_read_word() To: Frederick Lawler X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=uayRssAG7JereMlsCPQMtccfJwePrgRnviw2NEhJvhA=; b=MAFed+8UE2FrOteMTzIPzX3SnzbR8siVMCYrDRbJukSRH4xvCmAnTvYFaCnwv3yYuw NEnerzL2lbQ6twp8gdAL+pkFYUBsiWiMv+n5QP0BNWqxDU4QqH+HBp8C1vvLdCN5cUml AHpCPSIyZ8JQVNznKr3Kpaz7hVdsu3ppHhjuy5q8VYD4mRn+yB15Z4nzdWnou3F/Q6VB xmwhCx1BqSPV9HXie8JYH1r0wbubaMZGtmIHjz6BTMzKPrAoS9IIW4AVSV9MibL7UtAc ZZldPXkim2zOcWcMCeQrnbuGpDwvVuWY8eBhif2mM5AivUoOIAp2vb9xEgCLDlghfay4 K88Q== X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Chunming Zhou , Dave Airlie , Linux PCI , LKML , Maling list - DRI developers , Bjorn Helgaas , amd-gfx list , Daniel Vetter , "Deucher, Alexander" , Christian Koenig Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" Message-ID: <20191118174225.uaW6GdYb6dy68H6ft-1ur4PG6y6WWbG21bHl2YoEn6A@z> T24gTW9uLCBOb3YgMTgsIDIwMTkgYXQgMzozNyBBTSBGcmVkZXJpY2sgTGF3bGVyIDxmcmVkQGZy ZWRsYXdsLmNvbT4gd3JvdGU6Cj4KPiBDb21taXQgOGMwZDNhMDJjMTMwICgiUENJOiBBZGQgYWNj ZXNzb3JzIGZvciBQQ0kgRXhwcmVzcyBDYXBhYmlsaXR5IikKPiBhZGRlZCBhY2Nlc3NvcnMgZm9y IHRoZSBQQ0kgRXhwcmVzcyBDYXBhYmlsaXR5IHNvIHRoYXQgZHJpdmVycyBkaWRuJ3QKPiBuZWVk IHRvIGJlIGF3YXJlIG9mIGRpZmZlcmVuY2VzIGJldHdlZW4gdjEgYW5kIHYyIG9mIHRoZSBQQ0kK PiBFeHByZXNzIENhcGFiaWxpdHkuCj4KPiBSZXBsYWNlIHBjaV9yZWFkX2NvbmZpZ193b3JkKCkg YW5kIHBjaV93cml0ZV9jb25maWdfd29yZCgpIGNhbGxzIHdpdGgKPiBwY2llX2NhcGFiaWxpdHlf cmVhZF93b3JkKCkgYW5kIHBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKCkuCj4KPiBTaWduZWQt b2ZmLWJ5OiBGcmVkZXJpY2sgTGF3bGVyIDxmcmVkQGZyZWRsYXdsLmNvbT4KPgo+IC0tLQo+IFYy Cj4gLSBTcXVhc2ggYm90aCBkcm0gY29tbWl0cyBpbnRvIG9uZQo+IC0gUmViYXNlIG9udG9wIG9m IGQ0NmVhYzFlNjU4Ygo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9jaWsuYyB8 IDYzICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9zaS5jICB8IDcxICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KPiAgZHJpdmVy cy9ncHUvZHJtL3JhZGVvbi9jaWsuYyAgICAgfCA3MCArKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaS5jICAgICAgfCA3MyArKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tLS0tLQoKQ2FuIHlvdSBzcGxpdCB0aGlzIGludG8gdHdvIHBhdGNo ZXM/ICBPbmUgZm9yIGFtZGdwdSBhbmQgb25lIGZvciByYWRlb24/CgpUaGFua3MhCgpBbGV4Cgo+ ICA0IGZpbGVzIGNoYW5nZWQsIDE3NCBpbnNlcnRpb25zKCspLCAxMDMgZGVsZXRpb25zKC0pCj4K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvY2lrLmMgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9jaWsuYwo+IGluZGV4IDMwNjdiYjg3NDAzMi4uZjM2OWUzNDA4 ZWQyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Npay5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvY2lrLmMKPiBAQCAtMTM4NCw3ICsxMzg0LDYg QEAgc3RhdGljIGludCBjaWtfc2V0X3ZjZV9jbG9ja3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYsIHUzMiBldmNsaywgdTMyIGVjY2xrKQo+ICBzdGF0aWMgdm9pZCBjaWtfcGNpZV9nZW4zX2Vu YWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAgewo+ICAgICAgICAgc3RydWN0IHBj aV9kZXYgKnJvb3QgPSBhZGV2LT5wZGV2LT5idXMtPnNlbGY7Cj4gLSAgICAgICBpbnQgYnJpZGdl X3BvcywgZ3B1X3BvczsKPiAgICAgICAgIHUzMiBzcGVlZF9jbnRsLCBjdXJyZW50X2RhdGFfcmF0 ZTsKPiAgICAgICAgIGludCBpOwo+ICAgICAgICAgdTE2IHRtcDE2Owo+IEBAIC0xNDE5LDEyICsx NDE4LDcgQEAgc3RhdGljIHZvaWQgY2lrX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCj4gICAgICAgICAgICAgICAgIERSTV9JTkZPKCJlbmFibGluZyBQQ0lFIGdl biAyIGxpbmsgc3BlZWRzLCBkaXNhYmxlIHdpdGggYW1kZ3B1LnBjaWVfZ2VuMj0wXG4iKTsKPiAg ICAgICAgIH0KPgo+IC0gICAgICAgYnJpZGdlX3BvcyA9IHBjaV9wY2llX2NhcChyb290KTsKPiAt ICAgICAgIGlmICghYnJpZGdlX3BvcykKPiAtICAgICAgICAgICAgICAgcmV0dXJuOwo+IC0KPiAt ICAgICAgIGdwdV9wb3MgPSBwY2lfcGNpZV9jYXAoYWRldi0+cGRldik7Cj4gLSAgICAgICBpZiAo IWdwdV9wb3MpCj4gKyAgICAgICBpZiAoIXBjaV9pc19wY2llKHJvb3QpIHx8ICFwY2lfaXNfcGNp ZShhZGV2LT5wZGV2KSkKPiAgICAgICAgICAgICAgICAgcmV0dXJuOwo+Cj4gICAgICAgICBpZiAo YWRldi0+cG0ucGNpZV9nZW5fbWFzayAmIENBSUxfUENJRV9MSU5LX1NQRUVEX1NVUFBPUlRfR0VO Mykgewo+IEBAIC0xNDM0LDE0ICsxNDI4LDE3IEBAIHN0YXRpYyB2b2lkIGNpa19wY2llX2dlbjNf ZW5hYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ICAgICAgICAgICAgICAgICAgICAg ICAgIHUxNiBicmlkZ2VfY2ZnMiwgZ3B1X2NmZzI7Cj4gICAgICAgICAgICAgICAgICAgICAgICAg dTMyIG1heF9sdywgY3VycmVudF9sdywgdG1wOwo+Cj4gLSAgICAgICAgICAgICAgICAgICAgICAg cGNpX3JlYWRfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAm YnJpZGdlX2NmZyk7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dv cmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmZ3B1X2NmZyk7Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lf RVhQX0xOS0NUTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZicmlkZ2VfY2ZnKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFi aWxpdHlfcmVhZF93b3JkKGFkZXYtPnBkZXYsIFBDSV9FWFBfTE5LQ1RMLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdwdV9jZmcpOwo+Cj4gICAg ICAgICAgICAgICAgICAgICAgICAgdG1wMTYgPSBicmlkZ2VfY2ZnIHwgUENJX0VYUF9MTktDVExf SEFXRDsKPiAtICAgICAgICAgICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocm9v dCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMLCB0bXAxNik7Cj4gKyAgICAgICAgICAgICAg ICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEws IHRtcDE2KTsKPgo+ICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2ID0gZ3B1X2NmZyB8IFBD SV9FWFBfTE5LQ1RMX0hBV0Q7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2Nv bmZpZ193b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOwo+ ICsgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKGFkZXYt PnBkZXYsIFBDSV9FWFBfTE5LQ1RMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRtcDE2KTsKPgo+ICAgICAgICAgICAgICAgICAgICAgICAgIHRt cCA9IFJSRUczMl9QQ0lFKGl4UENJRV9MQ19TVEFUVVMxKTsKPiAgICAgICAgICAgICAgICAgICAg ICAgICBtYXhfbHcgPSAodG1wICYgUENJRV9MQ19TVEFUVVMxX19MQ19ERVRFQ1RFRF9MSU5LX1dJ RFRIX01BU0spID4+Cj4gQEAgLTE0NjUsMTUgKzE0NjIsMjMgQEAgc3RhdGljIHZvaWQgY2lrX3Bj aWVfZ2VuM19lbmFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4KPiAgICAgICAgICAg ICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewo+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogY2hlY2sgc3RhdHVzICovCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChhZGV2LT5wZGV2LCBncHVfcG9zICsg UENJX0VYUF9ERVZTVEEsICZ0bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKGFkZXYtPnBkZXYsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfREVWU1RB LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmdG1wMTYpOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcDE2 ICYgUENJX0VYUF9ERVZTVEFfVFJQTkQpCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwo+Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lf cmVhZF9jb25maWdfd29yZChyb290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwsICZicmlk Z2VfY2ZnKTsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaV9yZWFkX2NvbmZp Z193b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgJmdwdV9jZmcpOwo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29y ZChyb290LCBQQ0lfRVhQX0xOS0NUTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJyaWRnZV9jZmcpOwo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChhZGV2LT5wZGV2LAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQQ0lfRVhQX0xOS0NUTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmdwdV9jZmcpOwo+Cj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChyb290LCBicmlkZ2VfcG9zICsgUENJX0VY UF9MTktDVEwyLCAmYnJpZGdlX2NmZzIpOwo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5L Q1RMMiwgJmdwdV9jZmcyKTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVf Y2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwyLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnJpZGdlX2Nm ZzIpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3Jl YWRfd29yZChhZGV2LT5wZGV2LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTDIsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZncHVfY2ZnMik7Cj4K PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFJSRUczMl9QQ0lFKGl4UENJ RV9MQ19DTlRMNCk7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgfD0gUENJ RV9MQ19DTlRMNF9fTENfU0VUX1FVSUVTQ0VfTUFTSzsKPiBAQCAtMTQ4NiwxOCArMTQ5MSwyNSBA QCBzdGF0aWMgdm9pZCBjaWtfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldikKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCgxMDApOwo+Cj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaW5rY3RsICovCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChyb290LCBicmlkZ2Vf cG9zICsgUENJX0VYUF9MTktDVEwsICZ0bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmdG1wMTYpOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYgJj0gflBD SV9FWFBfTE5LQ1RMX0hBV0Q7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAx NiB8PSAoYnJpZGdlX2NmZyAmIFBDSV9FWFBfTE5LQ1RMX0hBV0QpOwo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ193b3JkKHJvb3QsIGJyaWRnZV9wb3Mg KyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 bXAxNik7Cj4KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaV9yZWFkX2NvbmZp Z193b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgJnRtcDE2KTsKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQo YWRldi0+cGRldiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUENJX0VYUF9MTktDVEwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXAxNik7Cj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0bXAxNiAmPSB+UENJX0VYUF9MTktDVExfSEFXRDsKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2IHw9IChncHVfY2ZnICYgUENJX0VYUF9M TktDVExfSEFXRCk7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfd3JpdGVf Y29uZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMLCB0bXAxNik7 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlfd3JpdGVf d29yZChhZGV2LT5wZGV2LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUENJX0VYUF9MTktDVEwsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAxNik7Cj4KPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxpbmtjdGwyICovCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChyb290LCBicmlkZ2VfcG9z ICsgUENJX0VYUF9MTktDVEwyLCAmdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTDIsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZ0bXAxNik7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAxNiAmPSB+KFBD SV9FWFBfTE5LQ1RMMl9FTlRFUl9DT01QIHwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUENJX0VYUF9MTktDVEwyX1RYX01BUkdJTik7Cj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0bXAxNiB8PSAoYnJpZGdlX2NmZzIgJgo+IEBAIC0xNTExLDcg KzE1MjMsOSBAQCBzdGF0aWMgdm9pZCBjaWtfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldikKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2IHw9 IChncHVfY2ZnMiAmCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KFBDSV9FWFBfTE5LQ1RMMl9FTlRFUl9DT01QIHwKPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUENJX0VYUF9MTktDVEwyX1RYX01BUkdJTikpOwo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ193b3JkKGFkZXYtPnBkZXYs IGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIsIHRtcDE2KTsKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKGFkZXYtPnBkZXYsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ Q0lfRVhQX0xOS0NUTDIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0bXAxNik7Cj4KPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRtcCA9IFJSRUczMl9QQ0lFKGl4UENJRV9MQ19DTlRMNCk7Cj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0bXAgJj0gflBDSUVfTENfQ05UTDRfX0xDX1NFVF9RVUlFU0NF X01BU0s7Cj4gQEAgLTE1MjYsMTUgKzE1NDAsMTYgQEAgc3RhdGljIHZvaWQgY2lrX3BjaWVfZ2Vu M19lbmFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gICAgICAgICBzcGVlZF9jbnRs ICY9IH5QQ0lFX0xDX1NQRUVEX0NOVExfX0xDX0ZPUkNFX0RJU19TV19TUEVFRF9DSEFOR0VfTUFT SzsKPiAgICAgICAgIFdSRUczMl9QQ0lFKGl4UENJRV9MQ19TUEVFRF9DTlRMLCBzcGVlZF9jbnRs KTsKPgo+IC0gICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyAr IFBDSV9FWFBfTE5LQ1RMMiwgJnRtcDE2KTsKPiArICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFk X3dvcmQoYWRldi0+cGRldiwgUENJX0VYUF9MTktDVEwyLCAmdG1wMTYpOwo+ICAgICAgICAgdG1w MTYgJj0gflBDSV9FWFBfTE5LQ1RMMl9UTFM7Cj4gKwo+ICAgICAgICAgaWYgKGFkZXYtPnBtLnBj aWVfZ2VuX21hc2sgJiBDQUlMX1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX0dFTjMpCj4gICAgICAg ICAgICAgICAgIHRtcDE2IHw9IFBDSV9FWFBfTE5LQ1RMMl9UTFNfOF8wR1Q7IC8qIGdlbjMgKi8K PiAgICAgICAgIGVsc2UgaWYgKGFkZXYtPnBtLnBjaWVfZ2VuX21hc2sgJiBDQUlMX1BDSUVfTElO S19TUEVFRF9TVVBQT1JUX0dFTjIpCj4gICAgICAgICAgICAgICAgIHRtcDE2IHw9IFBDSV9FWFBf TE5LQ1RMMl9UTFNfNV8wR1Q7IC8qIGdlbjIgKi8KPiAgICAgICAgIGVsc2UKPiAgICAgICAgICAg ICAgICAgdG1wMTYgfD0gUENJX0VYUF9MTktDVEwyX1RMU18yXzVHVDsgLyogZ2VuMSAqLwo+IC0g ICAgICAgcGNpX3dyaXRlX2NvbmZpZ193b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQ X0xOS0NUTDIsIHRtcDE2KTsKPiArICAgICAgIHBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKGFk ZXYtPnBkZXYsIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOwo+Cj4gICAgICAgICBzcGVlZF9jbnRs ID0gUlJFRzMyX1BDSUUoaXhQQ0lFX0xDX1NQRUVEX0NOVEwpOwo+ICAgICAgICAgc3BlZWRfY250 bCB8PSBQQ0lFX0xDX1NQRUVEX0NOVExfX0xDX0lOSVRJQVRFX0xJTktfU1BFRURfQ0hBTkdFX01B U0s7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NpLmMgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9zaS5jCj4gaW5kZXggYTdkY2IwZDBmMDM5Li45ZjgyYmU4 NzkyMjQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvc2kuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NpLmMKPiBAQCAtMTYzMyw3ICsxNjMzLDYg QEAgc3RhdGljIHZvaWQgc2lfaW5pdF9nb2xkZW5fcmVnaXN0ZXJzKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2KQo+ICBzdGF0aWMgdm9pZCBzaV9wY2llX2dlbjNfZW5hYmxlKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2KQo+ICB7Cj4gICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcm9vdCA9IGFk ZXYtPnBkZXYtPmJ1cy0+c2VsZjsKPiAtICAgICAgIGludCBicmlkZ2VfcG9zLCBncHVfcG9zOwo+ ICAgICAgICAgdTMyIHNwZWVkX2NudGwsIGN1cnJlbnRfZGF0YV9yYXRlOwo+ICAgICAgICAgaW50 IGk7Cj4gICAgICAgICB1MTYgdG1wMTY7Cj4gQEAgLTE2NjgsMTIgKzE2NjcsNyBAQCBzdGF0aWMg dm9pZCBzaV9wY2llX2dlbjNfZW5hYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ICAg ICAgICAgICAgICAgICBEUk1fSU5GTygiZW5hYmxpbmcgUENJRSBnZW4gMiBsaW5rIHNwZWVkcywg ZGlzYWJsZSB3aXRoIGFtZGdwdS5wY2llX2dlbjI9MFxuIik7Cj4gICAgICAgICB9Cj4KPiAtICAg ICAgIGJyaWRnZV9wb3MgPSBwY2lfcGNpZV9jYXAocm9vdCk7Cj4gLSAgICAgICBpZiAoIWJyaWRn ZV9wb3MpCj4gLSAgICAgICAgICAgICAgIHJldHVybjsKPiAtCj4gLSAgICAgICBncHVfcG9zID0g cGNpX3BjaWVfY2FwKGFkZXYtPnBkZXYpOwo+IC0gICAgICAgaWYgKCFncHVfcG9zKQo+ICsgICAg ICAgaWYgKCFwY2lfaXNfcGNpZShyb290KSB8fCAhcGNpX2lzX3BjaWUoYWRldi0+cGRldikpCj4g ICAgICAgICAgICAgICAgIHJldHVybjsKPgo+ICAgICAgICAgaWYgKGFkZXYtPnBtLnBjaWVfZ2Vu X21hc2sgJiBDQUlMX1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX0dFTjMpIHsKPiBAQCAtMTY4Miwx NCArMTY3NiwxNyBAQCBzdGF0aWMgdm9pZCBzaV9wY2llX2dlbjNfZW5hYmxlKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2KQo+ICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBicmlkZ2VfY2Zn MiwgZ3B1X2NmZzI7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgdTMyIG1heF9sdywgY3VycmVu dF9sdywgdG1wOwo+Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dv cmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmYnJpZGdlX2NmZyk7Cj4gLSAg ICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1 X3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmZ3B1X2NmZyk7Cj4gKyAgICAgICAgICAgICAgICAgICAg ICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTCwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZicmlkZ2VfY2Zn KTsKPiArICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKGFk ZXYtPnBkZXYsIFBDSV9FWFBfTE5LQ1RMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmdwdV9jZmcpOwo+Cj4gICAgICAgICAgICAgICAgICAgICAg ICAgdG1wMTYgPSBicmlkZ2VfY2ZnIHwgUENJX0VYUF9MTktDVExfSEFXRDsKPiAtICAgICAgICAg ICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBD SV9FWFBfTE5LQ1RMLCB0bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBh YmlsaXR5X3dyaXRlX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsKPgo+ICAgICAg ICAgICAgICAgICAgICAgICAgIHRtcDE2ID0gZ3B1X2NmZyB8IFBDSV9FWFBfTE5LQ1RMX0hBV0Q7 Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ193b3JkKGFkZXYtPnBk ZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAg ICAgICAgIHBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKGFkZXYtPnBkZXYsIFBDSV9FWFBfTE5L Q1RMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRtcDE2KTsKPgo+ICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFJSRUczMl9QQ0lFKFBD SUVfTENfU1RBVFVTMSk7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2x3ID0gKHRtcCAm IExDX0RFVEVDVEVEX0xJTktfV0lEVEhfTUFTSykgPj4gTENfREVURUNURURfTElOS19XSURUSF9T SElGVDsKPiBAQCAtMTcwNiwxNSArMTcwMywyMyBAQCBzdGF0aWMgdm9pZCBzaV9wY2llX2dlbjNf ZW5hYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ICAgICAgICAgICAgICAgICAgICAg ICAgIH0KPgo+ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsr KSB7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29y ZChhZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9ERVZTVEEsICZ0bXAxNik7Cj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKGFkZXYt PnBkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBDSV9FWFBfREVWU1RBLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wMTYpOwo+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHRtcDE2ICYgUENJX0VYUF9ERVZTVEFfVFJQTkQpCj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+Cj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChyb290LCBicmlkZ2VfcG9z ICsgUENJX0VYUF9MTktDVEwsICZicmlkZ2VfY2ZnKTsKPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lf RVhQX0xOS0NUTCwgJmdwdV9jZmcpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTCwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJyaWRn ZV9jZmcpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5 X3JlYWRfd29yZChhZGV2LT5wZGV2LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTCwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdwdV9jZmcpOwo+ Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChy b290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwyLCAmYnJpZGdlX2NmZzIpOwo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRldi0+cGRl diwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJmdwdV9jZmcyKTsKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VY UF9MTktDVEwyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmYnJpZGdlX2NmZzIpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChhZGV2LT5wZGV2LAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xO S0NUTDIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZncHVfY2ZnMik7Cj4KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRtcCA9IFJSRUczMl9QQ0lFX1BPUlQoUENJRV9MQ19DTlRMNCk7Cj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0bXAgfD0gTENfU0VUX1FVSUVTQ0U7Cj4gQEAgLTE3MjYsMzEgKzE3 MzEsNDQgQEAgc3RhdGljIHZvaWQgc2lfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldikKPgo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRlbGF5KDEw MCk7Cj4KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaV9yZWFkX2NvbmZpZ193 b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgJnRtcDE2KTsKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwg UENJX0VYUF9MTktDVEwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZ0bXAxNik7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0bXAxNiAmPSB+UENJX0VYUF9MTktDVExfSEFXRDsKPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRtcDE2IHw9IChicmlkZ2VfY2ZnICYgUENJX0VYUF9MTktDVExfSEFXRCk7 Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQo cm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMLCB0bXAxNik7Cj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlfd3JpdGVfd29yZChyb290LCBQQ0lf RVhQX0xOS0NUTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRtcDE2KTsKPgo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5L Q1RMLCAmdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBh YmlsaXR5X3JlYWRfd29yZChhZGV2LT5wZGV2LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTCwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcDE2 KTsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2ICY9IH5QQ0lfRVhQX0xO S0NUTF9IQVdEOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYgfD0gKGdw dV9jZmcgJiBQQ0lfRVhQX0xOS0NUTF9IQVdEKTsKPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBjaV93cml0ZV9jb25maWdfd29yZChhZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VY UF9MTktDVEwsIHRtcDE2KTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVf Y2FwYWJpbGl0eV93cml0ZV93b3JkKGFkZXYtPnBkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRtcDE2KTsKPgo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29u ZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJnRtcDE2KTsKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQo cm9vdCwgUENJX0VYUF9MTktDVEwyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wMTYpOwo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdG1wMTYgJj0gfihQQ0lfRVhQX0xOS0NUTDJfRU5URVJfQ09NUCB8Cj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5LQ1RMMl9U WF9NQVJHSU4pOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYgfD0gKGJy aWRnZV9jZmcyICYKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo UENJX0VYUF9MTktDVEwyX0VOVEVSX0NPTVAgfAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTDJfVFhfTUFSR0lOKSk7Cj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdl X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQocm9vdCwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5L Q1RMMiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRtcDE2KTsKPgo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNp X3JlYWRfY29uZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwg JnRtcDE2KTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0 eV9yZWFkX3dvcmQoYWRldi0+cGRldiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0VYUF9MTktDVEwyLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wMTYpOwo+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYgJj0gfihQQ0lfRVhQX0xOS0NU TDJfRU5URVJfQ09NUCB8Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBDSV9FWFBfTE5LQ1RMMl9UWF9NQVJHSU4pOwo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdG1wMTYgfD0gKGdwdV9jZmcyICYKPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoUENJX0VYUF9MTktDVEwyX0VOVEVSX0NPTVAgfAo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTDJfVFhfTUFS R0lOKSk7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmln X3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOwo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQo YWRldi0+cGRldiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5LQ1RMMiwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2KTsKPgo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gUlJFRzMyX1BDSUVfUE9SVChQQ0lFX0xDX0NO VEw0KTsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCAmPSB+TENfU0VUX1FV SUVTQ0U7Cj4gQEAgLTE3NjMsMTUgKzE3ODEsMTYgQEAgc3RhdGljIHZvaWQgc2lfcGNpZV9nZW4z X2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAgICAgICAgIHNwZWVkX2NudGwg Jj0gfkxDX0ZPUkNFX0RJU19TV19TUEVFRF9DSEFOR0U7Cj4gICAgICAgICBXUkVHMzJfUENJRV9Q T1JUKFBDSUVfTENfU1BFRURfQ05UTCwgc3BlZWRfY250bCk7Cj4KPiAtICAgICAgIHBjaV9yZWFk X2NvbmZpZ193b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIsICZ0bXAx Nik7Cj4gKyAgICAgICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKGFkZXYtPnBkZXYsIFBDSV9F WFBfTE5LQ1RMMiwgJnRtcDE2KTsKPiAgICAgICAgIHRtcDE2ICY9IH5QQ0lfRVhQX0xOS0NUTDJf VExTOwo+ICsKPiAgICAgICAgIGlmIChhZGV2LT5wbS5wY2llX2dlbl9tYXNrICYgQ0FJTF9QQ0lF X0xJTktfU1BFRURfU1VQUE9SVF9HRU4zKQo+ICAgICAgICAgICAgICAgICB0bXAxNiB8PSBQQ0lf RVhQX0xOS0NUTDJfVExTXzhfMEdUOyAvKiBnZW4zICovCj4gICAgICAgICBlbHNlIGlmIChhZGV2 LT5wbS5wY2llX2dlbl9tYXNrICYgQ0FJTF9QQ0lFX0xJTktfU1BFRURfU1VQUE9SVF9HRU4yKQo+ ICAgICAgICAgICAgICAgICB0bXAxNiB8PSBQQ0lfRVhQX0xOS0NUTDJfVExTXzVfMEdUOyAvKiBn ZW4yICovCj4gICAgICAgICBlbHNlCj4gICAgICAgICAgICAgICAgIHRtcDE2IHw9IFBDSV9FWFBf TE5LQ1RMMl9UTFNfMl81R1Q7IC8qIGdlbjEgKi8KPiAtICAgICAgIHBjaV93cml0ZV9jb25maWdf d29yZChhZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwyLCB0bXAxNik7Cj4gKyAg ICAgICBwY2llX2NhcGFiaWxpdHlfd3JpdGVfd29yZChhZGV2LT5wZGV2LCBQQ0lfRVhQX0xOS0NU TDIsIHRtcDE2KTsKPgo+ICAgICAgICAgc3BlZWRfY250bCA9IFJSRUczMl9QQ0lFX1BPUlQoUENJ RV9MQ19TUEVFRF9DTlRMKTsKPiAgICAgICAgIHNwZWVkX2NudGwgfD0gTENfSU5JVElBVEVfTElO S19TUEVFRF9DSEFOR0U7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lr LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Npay5jCj4gaW5kZXggYTI4MDQ0MmM4MWFhLi4w OWE0NzA5ZTY3ZjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jaWsuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrLmMKPiBAQCAtOTUwNCw3ICs5NTA0LDYg QEAgc3RhdGljIHZvaWQgY2lrX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2Ug KnJkZXYpCj4gIHsKPiAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpyb290ID0gcmRldi0+cGRldi0+ YnVzLT5zZWxmOwo+ICAgICAgICAgZW51bSBwY2lfYnVzX3NwZWVkIHNwZWVkX2NhcDsKPiAtICAg ICAgIGludCBicmlkZ2VfcG9zLCBncHVfcG9zOwo+ICAgICAgICAgdTMyIHNwZWVkX2NudGwsIGN1 cnJlbnRfZGF0YV9yYXRlOwo+ICAgICAgICAgaW50IGk7Cj4gICAgICAgICB1MTYgdG1wMTY7Cj4g QEAgLTk1NDYsMTIgKzk1NDUsNyBAQCBzdGF0aWMgdm9pZCBjaWtfcGNpZV9nZW4zX2VuYWJsZShz dHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKPiAgICAgICAgICAgICAgICAgRFJNX0lORk8oImVu YWJsaW5nIFBDSUUgZ2VuIDIgbGluayBzcGVlZHMsIGRpc2FibGUgd2l0aCByYWRlb24ucGNpZV9n ZW4yPTBcbiIpOwo+ICAgICAgICAgfQo+Cj4gLSAgICAgICBicmlkZ2VfcG9zID0gcGNpX3BjaWVf Y2FwKHJvb3QpOwo+IC0gICAgICAgaWYgKCFicmlkZ2VfcG9zKQo+IC0gICAgICAgICAgICAgICBy ZXR1cm47Cj4gLQo+IC0gICAgICAgZ3B1X3BvcyA9IHBjaV9wY2llX2NhcChyZGV2LT5wZGV2KTsK PiAtICAgICAgIGlmICghZ3B1X3BvcykKPiArICAgICAgIGlmICghcGNpX2lzX3BjaWUocm9vdCkg fHwgIXBjaV9pc19wY2llKHJkZXYtPnBkZXYpKQo+ICAgICAgICAgICAgICAgICByZXR1cm47Cj4K PiAgICAgICAgIGlmIChzcGVlZF9jYXAgPT0gUENJRV9TUEVFRF84XzBHVCkgewo+IEBAIC05NTYx LDE0ICs5NTU1LDE3IEBAIHN0YXRpYyB2b2lkIGNpa19wY2llX2dlbjNfZW5hYmxlKHN0cnVjdCBy YWRlb25fZGV2aWNlICpyZGV2KQo+ICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBicmlkZ2Vf Y2ZnMiwgZ3B1X2NmZzI7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgdTMyIG1heF9sdywgY3Vy cmVudF9sdywgdG1wOwo+Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmln X3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmYnJpZGdlX2NmZyk7Cj4g LSAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQocmRldi0+cGRldiwg Z3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmZ3B1X2NmZyk7Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZicmlkZ2Vf Y2ZnKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3Jk KHJkZXYtPnBkZXYsIFBDSV9FWFBfTE5LQ1RMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmdwdV9jZmcpOwo+Cj4gICAgICAgICAgICAgICAgICAg ICAgICAgdG1wMTYgPSBicmlkZ2VfY2ZnIHwgUENJX0VYUF9MTktDVExfSEFXRDsKPiAtICAgICAg ICAgICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyAr IFBDSV9FWFBfTE5LQ1RMLCB0bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9j YXBhYmlsaXR5X3dyaXRlX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsKPgo+ICAg ICAgICAgICAgICAgICAgICAgICAgIHRtcDE2ID0gZ3B1X2NmZyB8IFBDSV9FWFBfTE5LQ1RMX0hB V0Q7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ193b3JkKHJkZXYt PnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOwo+ICsgICAgICAgICAgICAg ICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKHJkZXYtPnBkZXYsIFBDSV9FWFBf TE5LQ1RMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRtcDE2KTsKPgo+ICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFJSRUczMl9QQ0lF X1BPUlQoUENJRV9MQ19TVEFUVVMxKTsKPiAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbHcg PSAodG1wICYgTENfREVURUNURURfTElOS19XSURUSF9NQVNLKSA+PiBMQ19ERVRFQ1RFRF9MSU5L X1dJRFRIX1NISUZUOwo+IEBAIC05NTg2LDE1ICs5NTgzLDIzIEBAIHN0YXRpYyB2b2lkIGNpa19w Y2llX2dlbjNfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQo+Cj4gICAgICAgICAg ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGNoZWNrIHN0YXR1cyAqLwo+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQocmRldi0+cGRldiwgZ3B1X3BvcyAr IFBDSV9FWFBfREVWU1RBLCAmdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyZGV2LT5wZGV2LAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0RFVlNU QSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnRtcDE2KTsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAx NiAmIFBDSV9FWFBfREVWU1RBX1RSUE5EKQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKPgo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNp X3JlYWRfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmYnJp ZGdlX2NmZyk7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25m aWdfd29yZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwsICZncHVfY2ZnKTsK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dv cmQocm9vdCwgUENJX0VYUF9MTktDVEwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZicmlkZ2VfY2ZnKTsKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocmRldi0+cGRldiwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUENJX0VYUF9MTktDVEwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZncHVfY2ZnKTsKPgo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9F WFBfTE5LQ1RMMiwgJmJyaWRnZV9jZmcyKTsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xO S0NUTDIsICZncHVfY2ZnMik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2ll X2NhcGFiaWxpdHlfcmVhZF93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMMiwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJyaWRnZV9j ZmcyKTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9y ZWFkX3dvcmQocmRldi0+cGRldiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUENJX0VYUF9MTktDVEwyLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ3B1X2NmZzIpOwo+ Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBSUkVHMzJfUENJRV9QT1JU KFBDSUVfTENfQ05UTDQpOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wIHw9 IExDX1NFVF9RVUlFU0NFOwo+IEBAIC05NjA3LDMyICs5NjEyLDQ1IEBAIHN0YXRpYyB2b2lkIGNp a19wY2llX2dlbjNfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7Cj4KPiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGxpbmtjdGwgKi8KPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xO S0NUTCwgJnRtcDE2KTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2Fw YWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXAxNik7Cj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAxNiAmPSB+UENJX0VYUF9MTktDVExfSEFX RDsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2IHw9IChicmlkZ2VfY2Zn ICYgUENJX0VYUF9MTktDVExfSEFXRCk7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RM LCB0bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxp dHlfd3JpdGVfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2KTsKPgo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQocmRldi0+cGRl diwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyZGV2LT5wZGV2LAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ Q0lfRVhQX0xOS0NUTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnRtcDE2KTsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRtcDE2ICY9IH5QQ0lfRVhQX0xOS0NUTF9IQVdEOwo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdG1wMTYgfD0gKGdwdV9jZmcgJiBQQ0lfRVhQX0xOS0NUTF9IQVdEKTsKPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaV93cml0ZV9jb25maWdfd29yZChyZGV2 LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKHJkZXYtPnBkZXYs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQQ0lfRVhQX0xOS0NUTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2KTsKPgo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogbGlua2N0bDIgKi8KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NU TDIsICZ0bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFi aWxpdHlfcmVhZF93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMMiwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcDE2KTsKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2ICY9IH4oUENJX0VYUF9MTktDVEwyX0VO VEVSX0NPTVAgfAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ Q0lfRVhQX0xOS0NUTDJfVFhfTUFSR0lOKTsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRtcDE2IHw9IChicmlkZ2VfY2ZnMiAmCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKFBDSV9FWFBfTE5LQ1RMMl9FTlRFUl9DT01QIHwKPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0VYUF9MTktDVEwyX1RYX01BUkdJ TikpOwo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ193 b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIsIHRtcDE2KTsKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKHJvb3Qs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQQ0lfRVhQX0xOS0NUTDIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAxNik7Cj4KPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9wb3MgKyBQ Q0lfRVhQX0xOS0NUTDIsICZ0bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJkZXYtPnBkZXYsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5LQ1RM MiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnRtcDE2KTsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2ICY9 IH4oUENJX0VYUF9MTktDVEwyX0VOVEVSX0NPTVAgfAo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTDJfVFhfTUFSR0lOKTsKPiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2IHw9IChncHVfY2ZnMiAmCj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBDSV9FWFBfTE5LQ1RMMl9FTlRFUl9D T01QIHwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0VY UF9MTktDVEwyX1RYX01BUkdJTikpOwo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGNpX3dyaXRlX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NU TDIsIHRtcDE2KTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJp bGl0eV93cml0ZV93b3JkKHJkZXYtPnBkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTDIsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAx Nik7Cj4KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFJSRUczMl9QQ0lF X1BPUlQoUENJRV9MQ19DTlRMNCk7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 bXAgJj0gfkxDX1NFVF9RVUlFU0NFOwo+IEBAIC05NjQ2LDcgKzk2NjQsNyBAQCBzdGF0aWMgdm9p ZCBjaWtfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKPiAgICAg ICAgIHNwZWVkX2NudGwgJj0gfkxDX0ZPUkNFX0RJU19TV19TUEVFRF9DSEFOR0U7Cj4gICAgICAg ICBXUkVHMzJfUENJRV9QT1JUKFBDSUVfTENfU1BFRURfQ05UTCwgc3BlZWRfY250bCk7Cj4KPiAt ICAgICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQ X0xOS0NUTDIsICZ0bXAxNik7Cj4gKyAgICAgICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJk ZXYtPnBkZXYsIFBDSV9FWFBfTE5LQ1RMMiwgJnRtcDE2KTsKPiAgICAgICAgIHRtcDE2ICY9IH5Q Q0lfRVhQX0xOS0NUTDJfVExTOwo+ICAgICAgICAgaWYgKHNwZWVkX2NhcCA9PSBQQ0lFX1NQRUVE XzhfMEdUKQo+ICAgICAgICAgICAgICAgICB0bXAxNiB8PSBQQ0lfRVhQX0xOS0NUTDJfVExTXzhf MEdUOyAvKiBnZW4zICovCj4gQEAgLTk2NTQsNyArOTY3Miw3IEBAIHN0YXRpYyB2b2lkIGNpa19w Y2llX2dlbjNfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQo+ICAgICAgICAgICAg ICAgICB0bXAxNiB8PSBQQ0lfRVhQX0xOS0NUTDJfVExTXzVfMEdUOyAvKiBnZW4yICovCj4gICAg ICAgICBlbHNlCj4gICAgICAgICAgICAgICAgIHRtcDE2IHw9IFBDSV9FWFBfTE5LQ1RMMl9UTFNf Ml81R1Q7IC8qIGdlbjEgKi8KPiAtICAgICAgIHBjaV93cml0ZV9jb25maWdfd29yZChyZGV2LT5w ZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwyLCB0bXAxNik7Cj4gKyAgICAgICBwY2llX2Nh cGFiaWxpdHlfd3JpdGVfd29yZChyZGV2LT5wZGV2LCBQQ0lfRVhQX0xOS0NUTDIsIHRtcDE2KTsK Pgo+ICAgICAgICAgc3BlZWRfY250bCA9IFJSRUczMl9QQ0lFX1BPUlQoUENJRV9MQ19TUEVFRF9D TlRMKTsKPiAgICAgICAgIHNwZWVkX2NudGwgfD0gTENfSU5JVElBVEVfTElOS19TUEVFRF9DSEFO R0U7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2kuYyBiL2RyaXZlcnMv Z3B1L2RybS9yYWRlb24vc2kuYwo+IGluZGV4IDUyOWU3MGE0MjAxOS4uNjdhOThiMzM3MGQxIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2kuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9yYWRlb24vc2kuYwo+IEBAIC0zMjU3LDcgKzMyNTcsNyBAQCBzdGF0aWMgdm9pZCBz aV9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKPiAgICAgICAgICAgICAgICAg LyogWFhYIHdoYXQgYWJvdXQgMTI/ICovCj4gICAgICAgICAgICAgICAgIHJkZXYtPmNvbmZpZy5z aS50aWxlX2NvbmZpZyB8PSAoMyA8PCAwKTsKPiAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gLSAg ICAgICB9Cj4gKyAgICAgICB9Cj4gICAgICAgICBzd2l0Y2ggKChtY19hcmJfcmFtY2ZnICYgTk9P RkJBTktfTUFTSykgPj4gTk9PRkJBTktfU0hJRlQpIHsKPiAgICAgICAgIGNhc2UgMDogLyogZm91 ciBiYW5rcyAqLwo+ICAgICAgICAgICAgICAgICByZGV2LT5jb25maWcuc2kudGlsZV9jb25maWcg fD0gMCA8PCA0Owo+IEBAIC03MDg3LDcgKzcwODcsNiBAQCBzdGF0aWMgdm9pZCBzaV9wY2llX2dl bjNfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQo+ICB7Cj4gICAgICAgICBzdHJ1 Y3QgcGNpX2RldiAqcm9vdCA9IHJkZXYtPnBkZXYtPmJ1cy0+c2VsZjsKPiAgICAgICAgIGVudW0g cGNpX2J1c19zcGVlZCBzcGVlZF9jYXA7Cj4gLSAgICAgICBpbnQgYnJpZGdlX3BvcywgZ3B1X3Bv czsKPiAgICAgICAgIHUzMiBzcGVlZF9jbnRsLCBjdXJyZW50X2RhdGFfcmF0ZTsKPiAgICAgICAg IGludCBpOwo+ICAgICAgICAgdTE2IHRtcDE2Owo+IEBAIC03MTI5LDEyICs3MTI4LDcgQEAgc3Rh dGljIHZvaWQgc2lfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikK PiAgICAgICAgICAgICAgICAgRFJNX0lORk8oImVuYWJsaW5nIFBDSUUgZ2VuIDIgbGluayBzcGVl ZHMsIGRpc2FibGUgd2l0aCByYWRlb24ucGNpZV9nZW4yPTBcbiIpOwo+ICAgICAgICAgfQo+Cj4g LSAgICAgICBicmlkZ2VfcG9zID0gcGNpX3BjaWVfY2FwKHJvb3QpOwo+IC0gICAgICAgaWYgKCFi cmlkZ2VfcG9zKQo+IC0gICAgICAgICAgICAgICByZXR1cm47Cj4gLQo+IC0gICAgICAgZ3B1X3Bv cyA9IHBjaV9wY2llX2NhcChyZGV2LT5wZGV2KTsKPiAtICAgICAgIGlmICghZ3B1X3BvcykKPiAr ICAgICAgIGlmICghcGNpX2lzX3BjaWUocm9vdCkgfHwgIXBjaV9pc19wY2llKHJkZXYtPnBkZXYp KQo+ICAgICAgICAgICAgICAgICByZXR1cm47Cj4KPiAgICAgICAgIGlmIChzcGVlZF9jYXAgPT0g UENJRV9TUEVFRF84XzBHVCkgewo+IEBAIC03MTQ0LDE0ICs3MTM4LDE3IEBAIHN0YXRpYyB2b2lk IHNpX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCj4gICAgICAg ICAgICAgICAgICAgICAgICAgdTE2IGJyaWRnZV9jZmcyLCBncHVfY2ZnMjsKPiAgICAgICAgICAg ICAgICAgICAgICAgICB1MzIgbWF4X2x3LCBjdXJyZW50X2x3LCB0bXA7Cj4KPiAtICAgICAgICAg ICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChyb290LCBicmlkZ2VfcG9zICsgUENJ X0VYUF9MTktDVEwsICZicmlkZ2VfY2ZnKTsKPiAtICAgICAgICAgICAgICAgICAgICAgICBwY2lf cmVhZF9jb25maWdfd29yZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwsICZn cHVfY2ZnKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlfcmVhZF93 b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmJyaWRnZV9jZmcpOwo+ICsgICAgICAgICAgICAgICAgICAg ICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocmRldi0+cGRldiwgUENJX0VYUF9MTktDVEws Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ3B1 X2NmZyk7Cj4KPiAgICAgICAgICAgICAgICAgICAgICAgICB0bXAxNiA9IGJyaWRnZV9jZmcgfCBQ Q0lfRVhQX0xOS0NUTF9IQVdEOwo+IC0gICAgICAgICAgICAgICAgICAgICAgIHBjaV93cml0ZV9j b25maWdfd29yZChyb290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsKPiAr ICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlfd3JpdGVfd29yZChyb290LCBQ Q0lfRVhQX0xOS0NUTCwgdG1wMTYpOwo+Cj4gICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYg PSBncHVfY2ZnIHwgUENJX0VYUF9MTktDVExfSEFXRDsKPiAtICAgICAgICAgICAgICAgICAgICAg ICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocmRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5L Q1RMLCB0bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3dy aXRlX3dvcmQocmRldi0+cGRldiwgUENJX0VYUF9MTktDVEwsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYpOwo+Cj4gICAgICAgICAgICAg ICAgICAgICAgICAgdG1wID0gUlJFRzMyX1BDSUUoUENJRV9MQ19TVEFUVVMxKTsKPiAgICAgICAg ICAgICAgICAgICAgICAgICBtYXhfbHcgPSAodG1wICYgTENfREVURUNURURfTElOS19XSURUSF9N QVNLKSA+PiBMQ19ERVRFQ1RFRF9MSU5LX1dJRFRIX1NISUZUOwo+IEBAIC03MTY5LDE1ICs3MTY2 LDIzIEBAIHN0YXRpYyB2b2lkIHNpX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZp Y2UgKnJkZXYpCj4KPiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTA7 IGkrKykgewo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hlY2sgc3RhdHVz ICovCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29y ZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9ERVZTVEEsICZ0bXAxNik7Cj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJkZXYt PnBkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBDSV9FWFBfREVWU1RBLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wMTYpOwo+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHRtcDE2ICYgUENJX0VYUF9ERVZTVEFfVFJQTkQpCj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+Cj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChyb290LCBicmlkZ2VfcG9z ICsgUENJX0VYUF9MTktDVEwsICZicmlkZ2VfY2ZnKTsKPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lf RVhQX0xOS0NUTCwgJmdwdV9jZmcpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTCwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJyaWRn ZV9jZmcpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5 X3JlYWRfd29yZChyZGV2LT5wZGV2LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTCwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdwdV9jZmcpOwo+ Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChy b290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwyLCAmYnJpZGdlX2NmZzIpOwo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQocmRldi0+cGRl diwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJmdwdV9jZmcyKTsKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VY UF9MTktDVEwyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmYnJpZGdlX2NmZzIpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyZGV2LT5wZGV2LAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xO S0NUTDIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZncHVfY2ZnMik7Cj4KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRtcCA9IFJSRUczMl9QQ0lFX1BPUlQoUENJRV9MQ19DTlRMNCk7Cj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0bXAgfD0gTENfU0VUX1FVSUVTQ0U7Cj4gQEAgLTcxOTAsMzIgKzcx OTUsNDYgQEAgc3RhdGljIHZvaWQgc2lfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2Rl dmljZSAqcmRldikKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCgxMDAp Owo+Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaW5rY3RsICovCj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChyb290LCBi cmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwsICZ0bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJvb3QsIFBDSV9FWFBfTE5L Q1RMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmdG1wMTYpOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYg Jj0gflBDSV9FWFBfTE5LQ1RMX0hBV0Q7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0bXAxNiB8PSAoYnJpZGdlX2NmZyAmIFBDSV9FWFBfTE5LQ1RMX0hBV0QpOwo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ193b3JkKHJvb3QsIGJyaWRn ZV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQocm9vdCwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5L Q1RMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdG1wMTYpOwo+Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lf cmVhZF9jb25maWdfd29yZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwsICZ0 bXAxNik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2llX2NhcGFiaWxpdHlf cmVhZF93b3JkKHJkZXYtPnBkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5LQ1RMLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wMTYpOwo+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYgJj0gflBDSV9FWFBfTE5LQ1RMX0hB V0Q7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAxNiB8PSAoZ3B1X2NmZyAm IFBDSV9FWFBfTE5LQ1RMX0hBV0QpOwo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGNpX3dyaXRlX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NU TCwgdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9jYXBhYmls aXR5X3dyaXRlX3dvcmQocmRldi0+cGRldiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5LQ1RMLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYp Owo+Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaW5rY3RsMiAqLwo+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQocm9vdCwg YnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJnRtcDE2KTsKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VYUF9M TktDVEwyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmdG1wMTYpOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1w MTYgJj0gfihQQ0lfRVhQX0xOS0NUTDJfRU5URVJfQ09NUCB8Cj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5LQ1RMMl9UWF9NQVJHSU4pOwo+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYgfD0gKGJyaWRnZV9jZmcyICYKPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUENJX0VYUF9MTktDVEwy X0VOVEVSX0NPTVAgfAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQQ0lfRVhQX0xOS0NUTDJfVFhfTUFSR0lOKSk7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBf TE5LQ1RMMiwgdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpZV9j YXBhYmlsaXR5X3dyaXRlX3dvcmQocm9vdCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5LQ1RMMiwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDE2 KTsKPgo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dv cmQocmRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJnRtcDE2KTsKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocmRl di0+cGRldiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUENJX0VYUF9MTktDVEwyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wMTYpOwo+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdG1wMTYgJj0gfihQQ0lfRVhQX0xOS0NUTDJfRU5URVJfQ09NUCB8 Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FWFBfTE5L Q1RMMl9UWF9NQVJHSU4pOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMTYg fD0gKGdwdV9jZmcyICYKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoUENJX0VYUF9MTktDVEwyX0VOVEVSX0NPTVAgfAo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQQ0lfRVhQX0xOS0NUTDJfVFhfTUFSR0lOKSk7Cj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocmRldi0+cGRl diwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOwo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQocmRldi0+cGRldiwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFBDSV9FWFBfTE5LQ1RMMiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRtcDE2KTsKPgo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdG1wID0gUlJFRzMyX1BDSUVfUE9SVChQQ0lFX0xDX0NOVEw0KTsKPiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCAmPSB+TENfU0VUX1FVSUVTQ0U7Cj4gQEAgLTcy MjksNyArNzI0OCw3IEBAIHN0YXRpYyB2b2lkIHNpX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IHJh ZGVvbl9kZXZpY2UgKnJkZXYpCj4gICAgICAgICBzcGVlZF9jbnRsICY9IH5MQ19GT1JDRV9ESVNf U1dfU1BFRURfQ0hBTkdFOwo+ICAgICAgICAgV1JFRzMyX1BDSUVfUE9SVChQQ0lFX0xDX1NQRUVE X0NOVEwsIHNwZWVkX2NudGwpOwo+Cj4gLSAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChyZGV2 LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwyLCAmdG1wMTYpOwo+ICsgICAgICAgcGNp ZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyZGV2LT5wZGV2LCBQQ0lfRVhQX0xOS0NUTDIsICZ0bXAx Nik7Cj4gICAgICAgICB0bXAxNiAmPSB+UENJX0VYUF9MTktDVEwyX1RMUzsKPiAgICAgICAgIGlm IChzcGVlZF9jYXAgPT0gUENJRV9TUEVFRF84XzBHVCkKPiAgICAgICAgICAgICAgICAgdG1wMTYg fD0gUENJX0VYUF9MTktDVEwyX1RMU184XzBHVDsgLyogZ2VuMyAqLwo+IEBAIC03MjM3LDcgKzcy NTYsNyBAQCBzdGF0aWMgdm9pZCBzaV9wY2llX2dlbjNfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2 aWNlICpyZGV2KQo+ICAgICAgICAgICAgICAgICB0bXAxNiB8PSBQQ0lfRVhQX0xOS0NUTDJfVExT XzVfMEdUOyAvKiBnZW4yICovCj4gICAgICAgICBlbHNlCj4gICAgICAgICAgICAgICAgIHRtcDE2 IHw9IFBDSV9FWFBfTE5LQ1RMMl9UTFNfMl81R1Q7IC8qIGdlbjEgKi8KPiAtICAgICAgIHBjaV93 cml0ZV9jb25maWdfd29yZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwyLCB0 bXAxNik7Cj4gKyAgICAgICBwY2llX2NhcGFiaWxpdHlfd3JpdGVfd29yZChyZGV2LT5wZGV2LCBQ Q0lfRVhQX0xOS0NUTDIsIHRtcDE2KTsKPgo+ICAgICAgICAgc3BlZWRfY250bCA9IFJSRUczMl9Q Q0lFX1BPUlQoUENJRV9MQ19TUEVFRF9DTlRMKTsKPiAgICAgICAgIHNwZWVkX2NudGwgfD0gTENf SU5JVElBVEVfTElOS19TUEVFRF9DSEFOR0U7Cj4gLS0KPiAyLjIwLjEKPgo+IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcg bGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbApfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2FtZC1nZng=