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=-12.3 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER,NICE_REPLY_A,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 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 46179C4363A for ; Thu, 15 Oct 2020 14:22:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C68CA22248 for ; Thu, 15 Oct 2020 14:22:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="ev4nEbIT" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387776AbgJOOW0 (ORCPT ); Thu, 15 Oct 2020 10:22:26 -0400 Received: from mail-mw2nam10on2080.outbound.protection.outlook.com ([40.107.94.80]:43003 "EHLO NAM10-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728231AbgJOOW0 (ORCPT ); Thu, 15 Oct 2020 10:22:26 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AUnnCFSXdry2sw1L4ia6O64g1l2Yg2XprdkPadyFI+VDLYQpELm2VsYMZE3+rN98ZLfKNf7ZphX5GGRd9D7k7jaw6iraQ+/dlfx0auXBDyTL9Zf8PtqanjhXpEyLOksrJfH1PN0DU1LDl5aDNME7fDWt2LvREi7iUXcpWzOCpdH9MSplKXOQ3CTMUlYUBcJppDZQh07ayvBDwiGlSWnHDYJpgZk8Yk+LGqgIfBLuxaEeYuGwwWwAFxtJGr9Qzh6uFO+9J061vwhH7lHFA+OAy6zEpF5zZuXR+AGe9W8+mQdS28X7YW/7SqucqFXCKoiOYeLxI0jtY4jEhuNMTEfWAQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=s1zJaDsCknzbjiRt/StSITflJScs7eZVdKcjpsdgjsI=; b=TQjQI9Srk0O8AB+AzDXQaAaw3QNjYOf/Xb8IHEneovSvqi8INt9ySqbThfjOf7FFqwXfdlk4TquKI6SY+K3ginCak7As1gfNfVjMNGMZSd04rDfYNZs5FKXaQXoU2Kazh+pOlgwVlQJMsFybcAeNFPF9NFtfWrTV4Lb8YCxM7EPq4hZebKJsNRAuibpw6FIb42JSLRtOd77RqZs99ouW3JJs3FYQL0sj8tsYwYeGZC4TRZyTuTrTX1gjTGHvjrLpinm40mVHBKf5gRgs9Ku/A2sypboomyvvxtmJWfMtLL92nT4rZzq4PSgY/LiSE562+kwhPpYDtrURlCNiA/9ZbA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=s1zJaDsCknzbjiRt/StSITflJScs7eZVdKcjpsdgjsI=; b=ev4nEbIT7ZjdwzBc5xW1PhxZPJppJlzPkhdhNwttquRQxJJCQXZL55EbUdeZxbtPSplLsnq7IvKwRQBHMH9ra5rt/6EYp863XKvnG8cPNuJprat50AFX3W4jScQhmUjBSqmW0qhMaGuFTfP5ECkw8GsXdJPH8Owv8OUVRJUiGMM= Authentication-Results: lists.linaro.org; dkim=none (message not signed) header.d=none;lists.linaro.org; dmarc=none action=none header.from=amd.com; Received: from MN2PR12MB3775.namprd12.prod.outlook.com (2603:10b6:208:159::19) by BL0PR12MB4932.namprd12.prod.outlook.com (2603:10b6:208:1c2::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.21; Thu, 15 Oct 2020 14:21:45 +0000 Received: from MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::f8f7:7403:1c92:3a60]) by MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::f8f7:7403:1c92:3a60%6]) with mapi id 15.20.3477.021; Thu, 15 Oct 2020 14:21:45 +0000 Subject: Re: [PATCH v4 06/10] drm/gem: Use struct dma_buf_map in GEM vmap ops and convert GEM backends To: Thomas Zimmermann , maarten.lankhorst@linux.intel.com, mripard@kernel.org, airlied@linux.ie, daniel@ffwll.ch, sam@ravnborg.org, alexander.deucher@amd.com, kraxel@redhat.com, l.stach@pengutronix.de, linux+etnaviv@armlinux.org.uk, christian.gmeiner@gmail.com, inki.dae@samsung.com, jy0922.shim@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, kgene@kernel.org, krzk@kernel.org, yuq825@gmail.com, bskeggs@redhat.com, robh@kernel.org, tomeu.vizoso@collabora.com, steven.price@arm.com, alyssa.rosenzweig@collabora.com, hjc@rock-chips.com, heiko@sntech.de, hdegoede@redhat.com, sean@poorly.run, eric@anholt.net, oleksandr_andrushchenko@epam.com, ray.huang@amd.com, sumit.semwal@linaro.org, emil.velikov@collabora.com, luben.tuikov@amd.com, apaneers@amd.com, linus.walleij@linaro.org, melissa.srw@gmail.com, chris@chris-wilson.co.uk, miaoqinglang@huawei.com Cc: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, virtualization@lists.linux-foundation.org, etnaviv@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, lima@lists.freedesktop.org, nouveau@lists.freedesktop.org, spice-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, xen-devel@lists.xenproject.org, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org References: <20201015123806.32416-1-tzimmermann@suse.de> <20201015123806.32416-7-tzimmermann@suse.de> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <6bd7d5cf-06c8-3fd8-9bbe-a80ff6bb327e@amd.com> Date: Thu, 15 Oct 2020 16:21:31 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 In-Reply-To: <20201015123806.32416-7-tzimmermann@suse.de> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-Originating-IP: [80.187.123.114] X-ClientProxiedBy: AM0PR03CA0058.eurprd03.prod.outlook.com (2603:10a6:208::35) To MN2PR12MB3775.namprd12.prod.outlook.com (2603:10b6:208:159::19) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [192.168.137.56] (80.187.123.114) by AM0PR03CA0058.eurprd03.prod.outlook.com (2603:10a6:208::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.20 via Frontend Transport; Thu, 15 Oct 2020 14:21:37 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 1402a292-410c-4dd7-5df2-08d87115a47e X-MS-TrafficTypeDiagnostic: BL0PR12MB4932: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qZE7L/zH5aGxqiqWmrxr/TkD8SGVxq492TWlZDRQ8SWP9LUeAjghyncA+V0RbcCiQOlF9BpSa0szaBr1rLMb4pd7NGjinWmMKZzBxFhl/AbSzHryacecP3jmc8SciQoEijiChjkblXtHc4usMJHnAzcMutTXYvIX5HfX6Nm+xOdzuOQCtRKC8c4GqNrw9YZ9L8ZX7aUG8Jez2Kf7T8MqZ1TKwlDddWh5CcJb0lhqwIRd8/qFy18d0ZTQ4NxTPYPSxuSOLxsOH7f+KxYILSZqFnNsnutVIAcmfePky9fzaNcsZwXH2qM8YnHjzPKV14l7WHo1Jo4RzSeIOOJY8yqf3Df5uGdhO9DrcUMwhgotFpmcaIVCTbe+MfIKTxkpI7od6w3lF2gvYlK/Q58+O1aXt5seGL7Bw9/go+uTg39iKc1BB9wtePnfCCvCmVcSs0aQ X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB3775.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39860400002)(396003)(366004)(136003)(376002)(346002)(36756003)(5660300002)(8936002)(30864003)(478600001)(8676002)(26005)(16526019)(7406005)(34490700002)(186003)(2616005)(16576012)(316002)(6666004)(6486002)(31686004)(52116002)(66574015)(86362001)(66946007)(956004)(83380400001)(2906002)(31696002)(4326008)(66556008)(66476007)(7416002)(921003)(43740500002)(579004)(559001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: m1LAH0A49qIsnoSwQsouBc95tPZsFvI7ILL+HyITCdwV3eSL2iszdF0dHXxMB2oIGD335BwU2D+eG6IuPWolrqv1GJ40za1adhpl3RbZ1r2ntg6FKwrWvSGDqY/euNspLIimOkkAyhMiIudpJhNHjSvToTllhvq/vOB6yXkJ2pK4/2RJUktLTxIQoz6/ZYV5B2FXrDyhgO+doQDORwIK5yqGiTmmTcP2JsACozYQc3xOqlQsDRoVZr6KFOB9/QRdbB1D0k+BYNH8mBU+lCqEXTZeUd3OX2d9Rz7ZUreK8Ld9YFw2teXCkJHPYtYvf7YtFAidpvqnsa+zqvxTCXrJgmEAdWAe62ob7ZrIeKcImgVPpNZC/qogN/FOi1n+ZaYI3EcWs+YLZ8jVE6Gq1sKrVFAlIEv0R5yxdIsbXVqsWuRspmjOiPY5BM1SKSwMC2GfuPK5vkzYOfg1ayT2mmJ4TRuyKXDO+/VHy09vY+KAuYSJFZ/+4PZ5ZM7hcJwk88LVWjAawTnzzWpbtlLyGfKChy2Fcf2yhG+/XLwUVWFJ5kZwGepbJJfsCK/1qs+idevkt4XuzMmAYCjuFjcGdu/5NaHKJDvaGTN63plDDLEo6/KcQ7lBx58OAjHWn7gqC2tgnk+/IDbC3P8DUpKFUGF2Tg== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1402a292-410c-4dd7-5df2-08d87115a47e X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3775.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Oct 2020 14:21:44.9217 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: hUctmsKmzwzlQVH4lhjqevgxGnxCyHnHl623cVkEli3p3TuwQp67xFQjNmWsqHz4 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR12MB4932 Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Am 15.10.20 um 14:38 schrieb Thomas Zimmermann: > This patch replaces the vmap/vunmap's use of raw pointers in GEM object > functions with instances of struct dma_buf_map. GEM backends are > converted as well. For most of them, this simply changes the returned type. > > TTM-based drivers now return information about the location of the memory, > either system or I/O memory. GEM VRAM helpers and qxl now use ttm_bo_vmap() > et al. Amdgpu, nouveau and radeon use drm_gem_ttm_vmap() et al instead of > implementing their own vmap callbacks. > > v4: > * use ttm_bo_vmap(), drm_gem_ttm_vmap(), et al. (Daniel, Christian) > * fix a trailing { in drm_gem_vmap() > * remove several empty functions instead of converting them (Daniel) > * comment uses of raw pointers with a TODO (Daniel) > * TODO list: convert more helpers to use struct dma_buf_map > > Signed-off-by: Thomas Zimmermann The amdgpu changes look good to me, but I can't fully judge the other stuff. Acked-by: Christian König > --- > Documentation/gpu/todo.rst | 18 ++++ > drivers/gpu/drm/Kconfig | 2 + > drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 36 ------- > drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h | 2 - > drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 5 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 1 - > drivers/gpu/drm/ast/ast_cursor.c | 27 +++-- > drivers/gpu/drm/ast/ast_drv.h | 7 +- > drivers/gpu/drm/drm_gem.c | 23 +++-- > drivers/gpu/drm/drm_gem_cma_helper.c | 10 +- > drivers/gpu/drm/drm_gem_shmem_helper.c | 48 +++++---- > drivers/gpu/drm/drm_gem_vram_helper.c | 107 ++++++++++---------- > drivers/gpu/drm/etnaviv/etnaviv_drv.h | 2 +- > drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c | 9 +- > drivers/gpu/drm/lima/lima_gem.c | 6 +- > drivers/gpu/drm/lima/lima_sched.c | 11 +- > drivers/gpu/drm/mgag200/mgag200_mode.c | 10 +- > drivers/gpu/drm/nouveau/Kconfig | 1 + > drivers/gpu/drm/nouveau/nouveau_bo.h | 2 - > drivers/gpu/drm/nouveau/nouveau_gem.c | 6 +- > drivers/gpu/drm/nouveau/nouveau_gem.h | 2 - > drivers/gpu/drm/nouveau/nouveau_prime.c | 20 ---- > drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 14 +-- > drivers/gpu/drm/qxl/qxl_display.c | 11 +- > drivers/gpu/drm/qxl/qxl_draw.c | 14 ++- > drivers/gpu/drm/qxl/qxl_drv.h | 11 +- > drivers/gpu/drm/qxl/qxl_object.c | 31 +++--- > drivers/gpu/drm/qxl/qxl_object.h | 2 +- > drivers/gpu/drm/qxl/qxl_prime.c | 12 +-- > drivers/gpu/drm/radeon/radeon.h | 1 - > drivers/gpu/drm/radeon/radeon_gem.c | 7 +- > drivers/gpu/drm/radeon/radeon_prime.c | 20 ---- > drivers/gpu/drm/rockchip/rockchip_drm_gem.c | 22 ++-- > drivers/gpu/drm/rockchip/rockchip_drm_gem.h | 4 +- > drivers/gpu/drm/tiny/cirrus.c | 10 +- > drivers/gpu/drm/tiny/gm12u320.c | 10 +- > drivers/gpu/drm/udl/udl_modeset.c | 8 +- > drivers/gpu/drm/vboxvideo/vbox_mode.c | 11 +- > drivers/gpu/drm/vc4/vc4_bo.c | 6 +- > drivers/gpu/drm/vc4/vc4_drv.h | 2 +- > drivers/gpu/drm/vgem/vgem_drv.c | 16 ++- > drivers/gpu/drm/xen/xen_drm_front_gem.c | 18 ++-- > drivers/gpu/drm/xen/xen_drm_front_gem.h | 6 +- > include/drm/drm_gem.h | 5 +- > include/drm/drm_gem_cma_helper.h | 2 +- > include/drm/drm_gem_shmem_helper.h | 4 +- > include/drm/drm_gem_vram_helper.h | 14 +-- > 47 files changed, 321 insertions(+), 295 deletions(-) > > diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst > index 700637e25ecd..7e6fc3c04add 100644 > --- a/Documentation/gpu/todo.rst > +++ b/Documentation/gpu/todo.rst > @@ -446,6 +446,24 @@ Contact: Ville Syrjälä, Daniel Vetter > > Level: Intermediate > > +Use struct dma_buf_map throughout codebase > +------------------------------------------ > + > +Pointers to shared device memory are stored in struct dma_buf_map. Each > +instance knows whether it refers to system or I/O memory. Most of the DRM-wide > +interface have been converted to use struct dma_buf_map, but implementations > +often still use raw pointers. > + > +The task is to use struct dma_buf_map where it makes sense. > + > +* Memory managers should use struct dma_buf_map for dma-buf-imported buffers. > +* TTM might benefit from using struct dma_buf_map internally. > +* Framebuffer copying and blitting helpers should operate on struct dma_buf_map. > + > +Contact: Thomas Zimmermann , Christian König, Daniel Vetter > + > +Level: Intermediate > + > > Core refactorings > ================= > diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig > index 147d61b9674e..319839b87d37 100644 > --- a/drivers/gpu/drm/Kconfig > +++ b/drivers/gpu/drm/Kconfig > @@ -239,6 +239,7 @@ config DRM_RADEON > select FW_LOADER > select DRM_KMS_HELPER > select DRM_TTM > + select DRM_TTM_HELPER > select POWER_SUPPLY > select HWMON > select BACKLIGHT_CLASS_DEVICE > @@ -259,6 +260,7 @@ config DRM_AMDGPU > select DRM_KMS_HELPER > select DRM_SCHED > select DRM_TTM > + select DRM_TTM_HELPER > select POWER_SUPPLY > select HWMON > select BACKLIGHT_CLASS_DEVICE > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c > index 5b465ab774d1..e5919efca870 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c > @@ -41,42 +41,6 @@ > #include > #include > > -/** > - * amdgpu_gem_prime_vmap - &dma_buf_ops.vmap implementation > - * @obj: GEM BO > - * > - * Sets up an in-kernel virtual mapping of the BO's memory. > - * > - * Returns: > - * The virtual address of the mapping or an error pointer. > - */ > -void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj) > -{ > - struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj); > - int ret; > - > - ret = ttm_bo_kmap(&bo->tbo, 0, bo->tbo.num_pages, > - &bo->dma_buf_vmap); > - if (ret) > - return ERR_PTR(ret); > - > - return bo->dma_buf_vmap.virtual; > -} > - > -/** > - * amdgpu_gem_prime_vunmap - &dma_buf_ops.vunmap implementation > - * @obj: GEM BO > - * @vaddr: Virtual address (unused) > - * > - * Tears down the in-kernel virtual mapping of the BO's memory. > - */ > -void amdgpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr) > -{ > - struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj); > - > - ttm_bo_kunmap(&bo->dma_buf_vmap); > -} > - > /** > * amdgpu_gem_prime_mmap - &drm_driver.gem_prime_mmap implementation > * @obj: GEM BO > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h > index 2c5c84a06bb9..39b5b9616fd8 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h > @@ -31,8 +31,6 @@ struct drm_gem_object *amdgpu_gem_prime_import(struct drm_device *dev, > struct dma_buf *dma_buf); > bool amdgpu_dmabuf_is_xgmi_accessible(struct amdgpu_device *adev, > struct amdgpu_bo *bo); > -void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj); > -void amdgpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); > int amdgpu_gem_prime_mmap(struct drm_gem_object *obj, > struct vm_area_struct *vma); > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > index be08a63ef58c..576659827e74 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > @@ -33,6 +33,7 @@ > > #include > #include > +#include > > #include "amdgpu.h" > #include "amdgpu_display.h" > @@ -220,8 +221,8 @@ static const struct drm_gem_object_funcs amdgpu_gem_object_funcs = { > .open = amdgpu_gem_object_open, > .close = amdgpu_gem_object_close, > .export = amdgpu_gem_prime_export, > - .vmap = amdgpu_gem_prime_vmap, > - .vunmap = amdgpu_gem_prime_vunmap, > + .vmap = drm_gem_ttm_vmap, > + .vunmap = drm_gem_ttm_vunmap, > }; > > /* > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h > index 132e5f955180..01296ef0d673 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h > @@ -100,7 +100,6 @@ struct amdgpu_bo { > struct amdgpu_bo *parent; > struct amdgpu_bo *shadow; > > - struct ttm_bo_kmap_obj dma_buf_vmap; > struct amdgpu_mn *mn; > > > diff --git a/drivers/gpu/drm/ast/ast_cursor.c b/drivers/gpu/drm/ast/ast_cursor.c > index e0f4613918ad..742d43a7edf4 100644 > --- a/drivers/gpu/drm/ast/ast_cursor.c > +++ b/drivers/gpu/drm/ast/ast_cursor.c > @@ -39,7 +39,7 @@ static void ast_cursor_fini(struct ast_private *ast) > > for (i = 0; i < ARRAY_SIZE(ast->cursor.gbo); ++i) { > gbo = ast->cursor.gbo[i]; > - drm_gem_vram_vunmap(gbo, ast->cursor.vaddr[i]); > + drm_gem_vram_vunmap(gbo, &ast->cursor.map[i]); > drm_gem_vram_unpin(gbo); > drm_gem_vram_put(gbo); > } > @@ -60,7 +60,7 @@ int ast_cursor_init(struct ast_private *ast) > struct drm_device *dev = &ast->base; > size_t size, i; > struct drm_gem_vram_object *gbo; > - void __iomem *vaddr; > + struct dma_buf_map map; > int ret; > > size = roundup(AST_HWC_SIZE + AST_HWC_SIGNATURE_SIZE, PAGE_SIZE); > @@ -77,16 +77,15 @@ int ast_cursor_init(struct ast_private *ast) > drm_gem_vram_put(gbo); > goto err_drm_gem_vram_put; > } > - vaddr = drm_gem_vram_vmap(gbo); > - if (IS_ERR(vaddr)) { > - ret = PTR_ERR(vaddr); > + ret = drm_gem_vram_vmap(gbo, &map); > + if (ret) { > drm_gem_vram_unpin(gbo); > drm_gem_vram_put(gbo); > goto err_drm_gem_vram_put; > } > > ast->cursor.gbo[i] = gbo; > - ast->cursor.vaddr[i] = vaddr; > + ast->cursor.map[i] = map; > } > > return drmm_add_action_or_reset(dev, ast_cursor_release, NULL); > @@ -95,7 +94,7 @@ int ast_cursor_init(struct ast_private *ast) > while (i) { > --i; > gbo = ast->cursor.gbo[i]; > - drm_gem_vram_vunmap(gbo, ast->cursor.vaddr[i]); > + drm_gem_vram_vunmap(gbo, &ast->cursor.map[i]); > drm_gem_vram_unpin(gbo); > drm_gem_vram_put(gbo); > } > @@ -170,6 +169,7 @@ int ast_cursor_blit(struct ast_private *ast, struct drm_framebuffer *fb) > { > struct drm_device *dev = &ast->base; > struct drm_gem_vram_object *gbo; > + struct dma_buf_map map; > int ret; > void *src; > void __iomem *dst; > @@ -183,18 +183,17 @@ int ast_cursor_blit(struct ast_private *ast, struct drm_framebuffer *fb) > ret = drm_gem_vram_pin(gbo, 0); > if (ret) > return ret; > - src = drm_gem_vram_vmap(gbo); > - if (IS_ERR(src)) { > - ret = PTR_ERR(src); > + ret = drm_gem_vram_vmap(gbo, &map); > + if (ret) > goto err_drm_gem_vram_unpin; > - } > + src = map.vaddr; /* TODO: Use mapping abstraction properly */ > > - dst = ast->cursor.vaddr[ast->cursor.next_index]; > + dst = ast->cursor.map[ast->cursor.next_index].vaddr_iomem; > > /* do data transfer to cursor BO */ > update_cursor_image(dst, src, fb->width, fb->height); > > - drm_gem_vram_vunmap(gbo, src); > + drm_gem_vram_vunmap(gbo, &map); > drm_gem_vram_unpin(gbo); > > return 0; > @@ -257,7 +256,7 @@ void ast_cursor_show(struct ast_private *ast, int x, int y, > u8 __iomem *sig; > u8 jreg; > > - dst = ast->cursor.vaddr[ast->cursor.next_index]; > + dst = ast->cursor.map[ast->cursor.next_index].vaddr; > > sig = dst + AST_HWC_SIZE; > writel(x, sig + AST_HWC_SIGNATURE_X); > diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h > index 467049ca8430..f963141dd851 100644 > --- a/drivers/gpu/drm/ast/ast_drv.h > +++ b/drivers/gpu/drm/ast/ast_drv.h > @@ -28,10 +28,11 @@ > #ifndef __AST_DRV_H__ > #define __AST_DRV_H__ > > -#include > -#include > +#include > #include > #include > +#include > +#include > > #include > #include > @@ -131,7 +132,7 @@ struct ast_private { > > struct { > struct drm_gem_vram_object *gbo[AST_DEFAULT_HWC_NUM]; > - void __iomem *vaddr[AST_DEFAULT_HWC_NUM]; > + struct dma_buf_map map[AST_DEFAULT_HWC_NUM]; > unsigned int next_index; > } cursor; > > diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c > index 1da67d34e55d..a89ad4570e3c 100644 > --- a/drivers/gpu/drm/drm_gem.c > +++ b/drivers/gpu/drm/drm_gem.c > @@ -36,6 +36,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -1207,26 +1208,30 @@ void drm_gem_unpin(struct drm_gem_object *obj) > > void *drm_gem_vmap(struct drm_gem_object *obj) > { > - void *vaddr; > + struct dma_buf_map map; > + int ret; > > - if (obj->funcs->vmap) > - vaddr = obj->funcs->vmap(obj); > - else > - vaddr = ERR_PTR(-EOPNOTSUPP); > + if (!obj->funcs->vmap) > + return ERR_PTR(-EOPNOTSUPP); > > - if (!vaddr) > - vaddr = ERR_PTR(-ENOMEM); > + ret = obj->funcs->vmap(obj, &map); > + if (ret) > + return ERR_PTR(ret); > + else if (dma_buf_map_is_null(&map)) > + return ERR_PTR(-ENOMEM); > > - return vaddr; > + return map.vaddr; > } > > void drm_gem_vunmap(struct drm_gem_object *obj, void *vaddr) > { > + struct dma_buf_map map = DMA_BUF_MAP_INIT_VADDR(vaddr); > + > if (!vaddr) > return; > > if (obj->funcs->vunmap) > - obj->funcs->vunmap(obj, vaddr); > + obj->funcs->vunmap(obj, &map); > } > > /** > diff --git a/drivers/gpu/drm/drm_gem_cma_helper.c b/drivers/gpu/drm/drm_gem_cma_helper.c > index d527485ea0b7..b57e3e9222f0 100644 > --- a/drivers/gpu/drm/drm_gem_cma_helper.c > +++ b/drivers/gpu/drm/drm_gem_cma_helper.c > @@ -519,6 +519,8 @@ EXPORT_SYMBOL_GPL(drm_gem_cma_prime_mmap); > * drm_gem_cma_prime_vmap - map a CMA GEM object into the kernel's virtual > * address space > * @obj: GEM object > + * @map: Returns the kernel virtual address of the CMA GEM object's backing > + * store. > * > * This function maps a buffer exported via DRM PRIME into the kernel's > * virtual address space. Since the CMA buffers are already mapped into the > @@ -527,13 +529,15 @@ EXPORT_SYMBOL_GPL(drm_gem_cma_prime_mmap); > * driver's &drm_gem_object_funcs.vmap callback. > * > * Returns: > - * The kernel virtual address of the CMA GEM object's backing store. > + * 0 on success, or a negative error code otherwise. > */ > -void *drm_gem_cma_prime_vmap(struct drm_gem_object *obj) > +int drm_gem_cma_prime_vmap(struct drm_gem_object *obj, struct dma_buf_map *map) > { > struct drm_gem_cma_object *cma_obj = to_drm_gem_cma_obj(obj); > > - return cma_obj->vaddr; > + dma_buf_map_set_vaddr(map, cma_obj->vaddr); > + > + return 0; > } > EXPORT_SYMBOL_GPL(drm_gem_cma_prime_vmap); > > diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c > index fb11df7aced5..5553f58f68f3 100644 > --- a/drivers/gpu/drm/drm_gem_shmem_helper.c > +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c > @@ -258,19 +258,25 @@ void drm_gem_shmem_unpin(struct drm_gem_object *obj) > } > EXPORT_SYMBOL(drm_gem_shmem_unpin); > > -static void *drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem) > +static int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, struct dma_buf_map *map) > { > struct drm_gem_object *obj = &shmem->base; > - struct dma_buf_map map; > int ret = 0; > > - if (shmem->vmap_use_count++ > 0) > - return shmem->vaddr; > + if (shmem->vmap_use_count++ > 0) { > + dma_buf_map_set_vaddr(map, shmem->vaddr); > + return 0; > + } > > if (obj->import_attach) { > - ret = dma_buf_vmap(obj->import_attach->dmabuf, &map); > - if (!ret) > - shmem->vaddr = map.vaddr; > + ret = dma_buf_vmap(obj->import_attach->dmabuf, map); > + if (!ret) { > + if (WARN_ON(map->is_iomem)) { > + ret = -EIO; > + goto err_put_pages; > + } > + shmem->vaddr = map->vaddr; > + } > } else { > pgprot_t prot = PAGE_KERNEL; > > @@ -284,6 +290,8 @@ static void *drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem) > VM_MAP, prot); > if (!shmem->vaddr) > ret = -ENOMEM; > + else > + dma_buf_map_set_vaddr(map, shmem->vaddr); > } > > if (ret) { > @@ -291,7 +299,7 @@ static void *drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem) > goto err_put_pages; > } > > - return shmem->vaddr; > + return 0; > > err_put_pages: > if (!obj->import_attach) > @@ -299,12 +307,14 @@ static void *drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem) > err_zero_use: > shmem->vmap_use_count = 0; > > - return ERR_PTR(ret); > + return ret; > } > > /* > * drm_gem_shmem_vmap - Create a virtual mapping for a shmem GEM object > * @shmem: shmem GEM object > + * @map: Returns the kernel virtual address of the SHMEM GEM object's backing > + * store. > * > * This function makes sure that a contiguous kernel virtual address mapping > * exists for the buffer backing the shmem GEM object. > @@ -318,26 +328,25 @@ static void *drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem) > * Returns: > * 0 on success or a negative error code on failure. > */ > -void *drm_gem_shmem_vmap(struct drm_gem_object *obj) > +int drm_gem_shmem_vmap(struct drm_gem_object *obj, struct dma_buf_map *map) > { > struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); > - void *vaddr; > int ret; > > ret = mutex_lock_interruptible(&shmem->vmap_lock); > if (ret) > - return ERR_PTR(ret); > - vaddr = drm_gem_shmem_vmap_locked(shmem); > + return ret; > + ret = drm_gem_shmem_vmap_locked(shmem, map); > mutex_unlock(&shmem->vmap_lock); > > - return vaddr; > + return ret; > } > EXPORT_SYMBOL(drm_gem_shmem_vmap); > > -static void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem) > +static void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem, > + struct dma_buf_map *map) > { > struct drm_gem_object *obj = &shmem->base; > - struct dma_buf_map map = DMA_BUF_MAP_INIT_VADDR(shmem->vaddr); > > if (WARN_ON_ONCE(!shmem->vmap_use_count)) > return; > @@ -346,7 +355,7 @@ static void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem) > return; > > if (obj->import_attach) > - dma_buf_vunmap(obj->import_attach->dmabuf, &map); > + dma_buf_vunmap(obj->import_attach->dmabuf, map); > else > vunmap(shmem->vaddr); > > @@ -357,6 +366,7 @@ static void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem) > /* > * drm_gem_shmem_vunmap - Unmap a virtual mapping fo a shmem GEM object > * @shmem: shmem GEM object > + * @map: Kernel virtual address where the SHMEM GEM object was mapped > * > * This function cleans up a kernel virtual address mapping acquired by > * drm_gem_shmem_vmap(). The mapping is only removed when the use count drops to > @@ -366,12 +376,12 @@ static void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem) > * also be called by drivers directly, in which case it will hide the > * differences between dma-buf imported and natively allocated objects. > */ > -void drm_gem_shmem_vunmap(struct drm_gem_object *obj, void *vaddr) > +void drm_gem_shmem_vunmap(struct drm_gem_object *obj, struct dma_buf_map *map) > { > struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); > > mutex_lock(&shmem->vmap_lock); > - drm_gem_shmem_vunmap_locked(shmem); > + drm_gem_shmem_vunmap_locked(shmem, map); > mutex_unlock(&shmem->vmap_lock); > } > EXPORT_SYMBOL(drm_gem_shmem_vunmap); > diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c > index 2d5ed30518f1..4d8553b28558 100644 > --- a/drivers/gpu/drm/drm_gem_vram_helper.c > +++ b/drivers/gpu/drm/drm_gem_vram_helper.c > @@ -1,5 +1,6 @@ > // SPDX-License-Identifier: GPL-2.0-or-later > > +#include > #include > > #include > @@ -113,8 +114,8 @@ static void drm_gem_vram_cleanup(struct drm_gem_vram_object *gbo) > * up; only release the GEM object. > */ > > - WARN_ON(gbo->kmap_use_count); > - WARN_ON(gbo->kmap.virtual); > + WARN_ON(gbo->vmap_use_count); > + WARN_ON(dma_buf_map_is_set(&gbo->map)); > > drm_gem_object_release(&gbo->bo.base); > } > @@ -382,29 +383,37 @@ int drm_gem_vram_unpin(struct drm_gem_vram_object *gbo) > } > EXPORT_SYMBOL(drm_gem_vram_unpin); > > -static void *drm_gem_vram_kmap_locked(struct drm_gem_vram_object *gbo) > +static int drm_gem_vram_kmap_locked(struct drm_gem_vram_object *gbo, > + struct dma_buf_map *map) > { > int ret; > - struct ttm_bo_kmap_obj *kmap = &gbo->kmap; > - bool is_iomem; > > - if (gbo->kmap_use_count > 0) > + if (gbo->vmap_use_count > 0) > goto out; > > - ret = ttm_bo_kmap(&gbo->bo, 0, gbo->bo.num_pages, kmap); > + ret = ttm_bo_vmap(&gbo->bo, &gbo->map); > if (ret) > - return ERR_PTR(ret); > + return ret; > > out: > - ++gbo->kmap_use_count; > - return ttm_kmap_obj_virtual(kmap, &is_iomem); > + ++gbo->vmap_use_count; > + *map = gbo->map; > + > + return 0; > } > > -static void drm_gem_vram_kunmap_locked(struct drm_gem_vram_object *gbo) > +static void drm_gem_vram_kunmap_locked(struct drm_gem_vram_object *gbo, > + struct dma_buf_map *map) > { > - if (WARN_ON_ONCE(!gbo->kmap_use_count)) > + struct drm_device *dev = gbo->bo.base.dev; > + > + if (drm_WARN_ON_ONCE(dev, !gbo->vmap_use_count)) > return; > - if (--gbo->kmap_use_count > 0) > + > + if (drm_WARN_ON_ONCE(dev, !dma_buf_map_is_equal(&gbo->map, map))) > + return; /* BUG: map not mapped from this BO */ > + > + if (--gbo->vmap_use_count > 0) > return; > > /* > @@ -418,7 +427,9 @@ static void drm_gem_vram_kunmap_locked(struct drm_gem_vram_object *gbo) > /** > * drm_gem_vram_vmap() - Pins and maps a GEM VRAM object into kernel address > * space > - * @gbo: The GEM VRAM object to map > + * @gbo: The GEM VRAM object to map > + * @map: Returns the kernel virtual address of the VRAM GEM object's backing > + * store. > * > * The vmap function pins a GEM VRAM object to its current location, either > * system or video memory, and maps its buffer into kernel address space. > @@ -427,48 +438,44 @@ static void drm_gem_vram_kunmap_locked(struct drm_gem_vram_object *gbo) > * unmap and unpin the GEM VRAM object. > * > * Returns: > - * The buffer's virtual address on success, or > - * an ERR_PTR()-encoded error code otherwise. > + * 0 on success, or a negative error code otherwise. > */ > -void *drm_gem_vram_vmap(struct drm_gem_vram_object *gbo) > +int drm_gem_vram_vmap(struct drm_gem_vram_object *gbo, struct dma_buf_map *map) > { > int ret; > - void *base; > > ret = ttm_bo_reserve(&gbo->bo, true, false, NULL); > if (ret) > - return ERR_PTR(ret); > + return ret; > > ret = drm_gem_vram_pin_locked(gbo, 0); > if (ret) > goto err_ttm_bo_unreserve; > - base = drm_gem_vram_kmap_locked(gbo); > - if (IS_ERR(base)) { > - ret = PTR_ERR(base); > + ret = drm_gem_vram_kmap_locked(gbo, map); > + if (ret) > goto err_drm_gem_vram_unpin_locked; > - } > > ttm_bo_unreserve(&gbo->bo); > > - return base; > + return 0; > > err_drm_gem_vram_unpin_locked: > drm_gem_vram_unpin_locked(gbo); > err_ttm_bo_unreserve: > ttm_bo_unreserve(&gbo->bo); > - return ERR_PTR(ret); > + return ret; > } > EXPORT_SYMBOL(drm_gem_vram_vmap); > > /** > * drm_gem_vram_vunmap() - Unmaps and unpins a GEM VRAM object > - * @gbo: The GEM VRAM object to unmap > - * @vaddr: The mapping's base address as returned by drm_gem_vram_vmap() > + * @gbo: The GEM VRAM object to unmap > + * @map: Kernel virtual address where the VRAM GEM object was mapped > * > * A call to drm_gem_vram_vunmap() unmaps and unpins a GEM VRAM buffer. See > * the documentation for drm_gem_vram_vmap() for more information. > */ > -void drm_gem_vram_vunmap(struct drm_gem_vram_object *gbo, void *vaddr) > +void drm_gem_vram_vunmap(struct drm_gem_vram_object *gbo, struct dma_buf_map *map) > { > int ret; > > @@ -476,7 +483,7 @@ void drm_gem_vram_vunmap(struct drm_gem_vram_object *gbo, void *vaddr) > if (WARN_ONCE(ret, "ttm_bo_reserve_failed(): ret=%d\n", ret)) > return; > > - drm_gem_vram_kunmap_locked(gbo); > + drm_gem_vram_kunmap_locked(gbo, map); > drm_gem_vram_unpin_locked(gbo); > > ttm_bo_unreserve(&gbo->bo); > @@ -567,15 +574,13 @@ static void drm_gem_vram_bo_driver_move_notify(struct drm_gem_vram_object *gbo, > bool evict, > struct ttm_resource *new_mem) > { > - struct ttm_bo_kmap_obj *kmap = &gbo->kmap; > + struct ttm_buffer_object *bo = &gbo->bo; > + struct drm_device *dev = bo->base.dev; > > - if (WARN_ON_ONCE(gbo->kmap_use_count)) > + if (drm_WARN_ON_ONCE(dev, gbo->vmap_use_count)) > return; > > - if (!kmap->virtual) > - return; > - ttm_bo_kunmap(kmap); > - kmap->virtual = NULL; > + ttm_bo_vunmap(bo, &gbo->map); > } > > static int drm_gem_vram_bo_driver_move(struct drm_gem_vram_object *gbo, > @@ -832,37 +837,33 @@ static void drm_gem_vram_object_unpin(struct drm_gem_object *gem) > } > > /** > - * drm_gem_vram_object_vmap() - \ > - Implements &struct drm_gem_object_funcs.vmap > - * @gem: The GEM object to map > + * drm_gem_vram_object_vmap() - > + * Implements &struct drm_gem_object_funcs.vmap > + * @gem: The GEM object to map > + * @map: Returns the kernel virtual address of the VRAM GEM object's backing > + * store. > * > * Returns: > - * The buffers virtual address on success, or > - * NULL otherwise. > + * 0 on success, or a negative error code otherwise. > */ > -static void *drm_gem_vram_object_vmap(struct drm_gem_object *gem) > +static int drm_gem_vram_object_vmap(struct drm_gem_object *gem, struct dma_buf_map *map) > { > struct drm_gem_vram_object *gbo = drm_gem_vram_of_gem(gem); > - void *base; > > - base = drm_gem_vram_vmap(gbo); > - if (IS_ERR(base)) > - return NULL; > - return base; > + return drm_gem_vram_vmap(gbo, map); > } > > /** > - * drm_gem_vram_object_vunmap() - \ > - Implements &struct drm_gem_object_funcs.vunmap > - * @gem: The GEM object to unmap > - * @vaddr: The mapping's base address > + * drm_gem_vram_object_vunmap() - > + * Implements &struct drm_gem_object_funcs.vunmap > + * @gem: The GEM object to unmap > + * @map: Kernel virtual address where the VRAM GEM object was mapped > */ > -static void drm_gem_vram_object_vunmap(struct drm_gem_object *gem, > - void *vaddr) > +static void drm_gem_vram_object_vunmap(struct drm_gem_object *gem, struct dma_buf_map *map) > { > struct drm_gem_vram_object *gbo = drm_gem_vram_of_gem(gem); > > - drm_gem_vram_vunmap(gbo, vaddr); > + drm_gem_vram_vunmap(gbo, map); > } > > /* > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.h b/drivers/gpu/drm/etnaviv/etnaviv_drv.h > index 9682c26d89bb..f5be627e1de0 100644 > --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.h > +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.h > @@ -51,7 +51,7 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data, > int etnaviv_gem_mmap(struct file *filp, struct vm_area_struct *vma); > int etnaviv_gem_mmap_offset(struct drm_gem_object *obj, u64 *offset); > struct sg_table *etnaviv_gem_prime_get_sg_table(struct drm_gem_object *obj); > -void *etnaviv_gem_prime_vmap(struct drm_gem_object *obj); > +int etnaviv_gem_prime_vmap(struct drm_gem_object *obj, struct dma_buf_map *map); > int etnaviv_gem_prime_mmap(struct drm_gem_object *obj, > struct vm_area_struct *vma); > struct drm_gem_object *etnaviv_gem_prime_import_sg_table(struct drm_device *dev, > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c > index a6d9932a32ae..bc2543dd987d 100644 > --- a/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c > +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c > @@ -22,9 +22,14 @@ struct sg_table *etnaviv_gem_prime_get_sg_table(struct drm_gem_object *obj) > return drm_prime_pages_to_sg(obj->dev, etnaviv_obj->pages, npages); > } > > -void *etnaviv_gem_prime_vmap(struct drm_gem_object *obj) > +int etnaviv_gem_prime_vmap(struct drm_gem_object *obj, struct dma_buf_map *map) > { > - return etnaviv_gem_vmap(obj); > + void *vaddr = etnaviv_gem_vmap(obj); > + if (!vaddr) > + return -ENOMEM; > + dma_buf_map_set_vaddr(map, vaddr); > + > + return 0; > } > > int etnaviv_gem_prime_mmap(struct drm_gem_object *obj, > diff --git a/drivers/gpu/drm/lima/lima_gem.c b/drivers/gpu/drm/lima/lima_gem.c > index 11223fe348df..832e5280a6ed 100644 > --- a/drivers/gpu/drm/lima/lima_gem.c > +++ b/drivers/gpu/drm/lima/lima_gem.c > @@ -182,14 +182,14 @@ static int lima_gem_pin(struct drm_gem_object *obj) > return drm_gem_shmem_pin(obj); > } > > -static void *lima_gem_vmap(struct drm_gem_object *obj) > +static int lima_gem_vmap(struct drm_gem_object *obj, struct dma_buf_map *map) > { > struct lima_bo *bo = to_lima_bo(obj); > > if (bo->heap_size) > - return ERR_PTR(-EINVAL); > + return -EINVAL; > > - return drm_gem_shmem_vmap(obj); > + return drm_gem_shmem_vmap(obj, map); > } > > static int lima_gem_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) > diff --git a/drivers/gpu/drm/lima/lima_sched.c b/drivers/gpu/drm/lima/lima_sched.c > index dc6df9e9a40d..a070a85f8f36 100644 > --- a/drivers/gpu/drm/lima/lima_sched.c > +++ b/drivers/gpu/drm/lima/lima_sched.c > @@ -1,6 +1,7 @@ > // SPDX-License-Identifier: GPL-2.0 OR MIT > /* Copyright 2017-2019 Qiang Yu */ > > +#include > #include > #include > #include > @@ -303,6 +304,8 @@ static void lima_sched_build_error_task_list(struct lima_sched_task *task) > struct lima_dump_chunk_buffer *buffer_chunk; > u32 size, task_size, mem_size; > int i; > + struct dma_buf_map map; > + int ret; > > mutex_lock(&dev->error_task_list_lock); > > @@ -388,15 +391,15 @@ static void lima_sched_build_error_task_list(struct lima_sched_task *task) > } else { > buffer_chunk->size = lima_bo_size(bo); > > - data = drm_gem_shmem_vmap(&bo->base.base); > - if (IS_ERR_OR_NULL(data)) { > + ret = drm_gem_shmem_vmap(&bo->base.base, &map); > + if (ret) { > kvfree(et); > goto out; > } > > - memcpy(buffer_chunk + 1, data, buffer_chunk->size); > + memcpy(buffer_chunk + 1, map.vaddr, buffer_chunk->size); > > - drm_gem_shmem_vunmap(&bo->base.base, data); > + drm_gem_shmem_vunmap(&bo->base.base, &map); > } > > buffer_chunk = (void *)(buffer_chunk + 1) + buffer_chunk->size; > diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c > index 38672f9e5c4f..8ef76769b97f 100644 > --- a/drivers/gpu/drm/mgag200/mgag200_mode.c > +++ b/drivers/gpu/drm/mgag200/mgag200_mode.c > @@ -9,6 +9,7 @@ > */ > > #include > +#include > > #include > #include > @@ -1556,15 +1557,18 @@ mgag200_handle_damage(struct mga_device *mdev, struct drm_framebuffer *fb, > struct drm_rect *clip) > { > struct drm_device *dev = &mdev->base; > + struct dma_buf_map map; > void *vmap; > + int ret; > > - vmap = drm_gem_shmem_vmap(fb->obj[0]); > - if (drm_WARN_ON(dev, !vmap)) > + ret = drm_gem_shmem_vmap(fb->obj[0], &map); > + if (drm_WARN_ON(dev, ret)) > return; /* BUG: SHMEM BO should always be vmapped */ > + vmap = map.vaddr; /* TODO: Use mapping abstraction properly */ > > drm_fb_memcpy_dstclip(mdev->vram, vmap, fb, clip); > > - drm_gem_shmem_vunmap(fb->obj[0], vmap); > + drm_gem_shmem_vunmap(fb->obj[0], &map); > > /* Always scanout image at VRAM offset 0 */ > mgag200_set_startadd(mdev, (u32)0); > diff --git a/drivers/gpu/drm/nouveau/Kconfig b/drivers/gpu/drm/nouveau/Kconfig > index 5dec1e5694b7..9436310d0854 100644 > --- a/drivers/gpu/drm/nouveau/Kconfig > +++ b/drivers/gpu/drm/nouveau/Kconfig > @@ -6,6 +6,7 @@ config DRM_NOUVEAU > select FW_LOADER > select DRM_KMS_HELPER > select DRM_TTM > + select DRM_TTM_HELPER > select BACKLIGHT_CLASS_DEVICE if DRM_NOUVEAU_BACKLIGHT > select ACPI_VIDEO if ACPI && X86 && BACKLIGHT_CLASS_DEVICE && INPUT > select X86_PLATFORM_DEVICES if ACPI && X86 > diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.h b/drivers/gpu/drm/nouveau/nouveau_bo.h > index 641ef6298a0e..6045b85a762a 100644 > --- a/drivers/gpu/drm/nouveau/nouveau_bo.h > +++ b/drivers/gpu/drm/nouveau/nouveau_bo.h > @@ -39,8 +39,6 @@ struct nouveau_bo { > unsigned mode; > > struct nouveau_drm_tile *tile; > - > - struct ttm_bo_kmap_obj dma_buf_vmap; > }; > > static inline struct nouveau_bo * > diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c > index 9a421c3949de..f942b526b0a5 100644 > --- a/drivers/gpu/drm/nouveau/nouveau_gem.c > +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c > @@ -24,6 +24,8 @@ > * > */ > > +#include > + > #include "nouveau_drv.h" > #include "nouveau_dma.h" > #include "nouveau_fence.h" > @@ -176,8 +178,8 @@ const struct drm_gem_object_funcs nouveau_gem_object_funcs = { > .pin = nouveau_gem_prime_pin, > .unpin = nouveau_gem_prime_unpin, > .get_sg_table = nouveau_gem_prime_get_sg_table, > - .vmap = nouveau_gem_prime_vmap, > - .vunmap = nouveau_gem_prime_vunmap, > + .vmap = drm_gem_ttm_vmap, > + .vunmap = drm_gem_ttm_vunmap, > }; > > int > diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.h b/drivers/gpu/drm/nouveau/nouveau_gem.h > index b35c180322e2..3b919c7c931c 100644 > --- a/drivers/gpu/drm/nouveau/nouveau_gem.h > +++ b/drivers/gpu/drm/nouveau/nouveau_gem.h > @@ -37,7 +37,5 @@ extern void nouveau_gem_prime_unpin(struct drm_gem_object *); > extern struct sg_table *nouveau_gem_prime_get_sg_table(struct drm_gem_object *); > extern struct drm_gem_object *nouveau_gem_prime_import_sg_table( > struct drm_device *, struct dma_buf_attachment *, struct sg_table *); > -extern void *nouveau_gem_prime_vmap(struct drm_gem_object *); > -extern void nouveau_gem_prime_vunmap(struct drm_gem_object *, void *); > > #endif > diff --git a/drivers/gpu/drm/nouveau/nouveau_prime.c b/drivers/gpu/drm/nouveau/nouveau_prime.c > index a8264aebf3d4..2f16b5249283 100644 > --- a/drivers/gpu/drm/nouveau/nouveau_prime.c > +++ b/drivers/gpu/drm/nouveau/nouveau_prime.c > @@ -35,26 +35,6 @@ struct sg_table *nouveau_gem_prime_get_sg_table(struct drm_gem_object *obj) > return drm_prime_pages_to_sg(obj->dev, nvbo->bo.ttm->pages, npages); > } > > -void *nouveau_gem_prime_vmap(struct drm_gem_object *obj) > -{ > - struct nouveau_bo *nvbo = nouveau_gem_object(obj); > - int ret; > - > - ret = ttm_bo_kmap(&nvbo->bo, 0, nvbo->bo.num_pages, > - &nvbo->dma_buf_vmap); > - if (ret) > - return ERR_PTR(ret); > - > - return nvbo->dma_buf_vmap.virtual; > -} > - > -void nouveau_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr) > -{ > - struct nouveau_bo *nvbo = nouveau_gem_object(obj); > - > - ttm_bo_kunmap(&nvbo->dma_buf_vmap); > -} > - > struct drm_gem_object *nouveau_gem_prime_import_sg_table(struct drm_device *dev, > struct dma_buf_attachment *attach, > struct sg_table *sg) > diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c > index fdbc8d949135..5ab03d605f57 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c > +++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c > @@ -5,6 +5,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -72,6 +73,7 @@ static int panfrost_perfcnt_enable_locked(struct panfrost_device *pfdev, > { > struct panfrost_file_priv *user = file_priv->driver_priv; > struct panfrost_perfcnt *perfcnt = pfdev->perfcnt; > + struct dma_buf_map map; > struct drm_gem_shmem_object *bo; > u32 cfg, as; > int ret; > @@ -103,11 +105,10 @@ static int panfrost_perfcnt_enable_locked(struct panfrost_device *pfdev, > goto err_close_bo; > } > > - perfcnt->buf = drm_gem_shmem_vmap(&bo->base); > - if (IS_ERR(perfcnt->buf)) { > - ret = PTR_ERR(perfcnt->buf); > + ret = drm_gem_shmem_vmap(&bo->base, &map); > + if (ret) > goto err_put_mapping; > - } > + perfcnt->buf = map.vaddr; > > /* > * Invalidate the cache and clear the counters to start from a fresh > @@ -163,7 +164,7 @@ static int panfrost_perfcnt_enable_locked(struct panfrost_device *pfdev, > return 0; > > err_vunmap: > - drm_gem_shmem_vunmap(&bo->base, perfcnt->buf); > + drm_gem_shmem_vunmap(&bo->base, &map); > err_put_mapping: > panfrost_gem_mapping_put(perfcnt->mapping); > err_close_bo: > @@ -180,6 +181,7 @@ static int panfrost_perfcnt_disable_locked(struct panfrost_device *pfdev, > { > struct panfrost_file_priv *user = file_priv->driver_priv; > struct panfrost_perfcnt *perfcnt = pfdev->perfcnt; > + struct dma_buf_map map = DMA_BUF_MAP_INIT_VADDR(perfcnt->buf); > > if (user != perfcnt->user) > return -EINVAL; > @@ -192,7 +194,7 @@ static int panfrost_perfcnt_disable_locked(struct panfrost_device *pfdev, > GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_OFF)); > > perfcnt->user = NULL; > - drm_gem_shmem_vunmap(&perfcnt->mapping->obj->base.base, perfcnt->buf); > + drm_gem_shmem_vunmap(&perfcnt->mapping->obj->base.base, &map); > perfcnt->buf = NULL; > panfrost_gem_close(&perfcnt->mapping->obj->base.base, file_priv); > panfrost_mmu_as_put(pfdev, perfcnt->mapping->mmu); > diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c > index 45fd76e04bdc..e165fa9b2089 100644 > --- a/drivers/gpu/drm/qxl/qxl_display.c > +++ b/drivers/gpu/drm/qxl/qxl_display.c > @@ -25,6 +25,7 @@ > > #include > #include > +#include > > #include > #include > @@ -581,6 +582,8 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane, > struct drm_gem_object *obj; > struct qxl_bo *cursor_bo = NULL, *user_bo = NULL, *old_cursor_bo = NULL; > int ret; > + struct dma_buf_map user_map; > + struct dma_buf_map cursor_map; > void *user_ptr; > int size = 64*64*4; > > @@ -595,9 +598,10 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane, > user_bo = gem_to_qxl_bo(obj); > > /* pinning is done in the prepare/cleanup framevbuffer */ > - ret = qxl_bo_kmap(user_bo, &user_ptr); > + ret = qxl_bo_kmap(user_bo, &user_map); > if (ret) > goto out_free_release; > + user_ptr = user_map.vaddr; /* TODO: Use mapping abstraction properly */ > > ret = qxl_alloc_bo_reserved(qdev, release, > sizeof(struct qxl_cursor) + size, > @@ -613,7 +617,7 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane, > if (ret) > goto out_unpin; > > - ret = qxl_bo_kmap(cursor_bo, (void **)&cursor); > + ret = qxl_bo_kmap(cursor_bo, &cursor_map); > if (ret) > goto out_backoff; > > @@ -1133,6 +1137,7 @@ int qxl_create_monitors_object(struct qxl_device *qdev) > { > int ret; > struct drm_gem_object *gobj; > + struct dma_buf_map map; > int monitors_config_size = sizeof(struct qxl_monitors_config) + > qxl_num_crtc * sizeof(struct qxl_head); > > @@ -1149,7 +1154,7 @@ int qxl_create_monitors_object(struct qxl_device *qdev) > if (ret) > return ret; > > - qxl_bo_kmap(qdev->monitors_config_bo, NULL); > + qxl_bo_kmap(qdev->monitors_config_bo, &map); > > qdev->monitors_config = qdev->monitors_config_bo->kptr; > qdev->ram_header->monitors_config = > diff --git a/drivers/gpu/drm/qxl/qxl_draw.c b/drivers/gpu/drm/qxl/qxl_draw.c > index 3599db096973..7b7acb910780 100644 > --- a/drivers/gpu/drm/qxl/qxl_draw.c > +++ b/drivers/gpu/drm/qxl/qxl_draw.c > @@ -20,6 +20,8 @@ > * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. > */ > > +#include > + > #include > > #include "qxl_drv.h" > @@ -42,13 +44,15 @@ static struct qxl_rect *drawable_set_clipping(struct qxl_device *qdev, > unsigned int num_clips, > struct qxl_bo *clips_bo) > { > + struct dma_buf_map map; > struct qxl_clip_rects *dev_clips; > int ret; > > - ret = qxl_bo_kmap(clips_bo, (void **)&dev_clips); > - if (ret) { > + ret = qxl_bo_kmap(clips_bo, &map); > + if (ret) > return NULL; > - } > + dev_clips = map.vaddr; /* TODO: Use mapping abstraction properly */ > + > dev_clips->num_rects = num_clips; > dev_clips->chunk.next_chunk = 0; > dev_clips->chunk.prev_chunk = 0; > @@ -142,6 +146,7 @@ void qxl_draw_dirty_fb(struct qxl_device *qdev, > int stride = fb->pitches[0]; > /* depth is not actually interesting, we don't mask with it */ > int depth = fb->format->cpp[0] * 8; > + struct dma_buf_map surface_map; > uint8_t *surface_base; > struct qxl_release *release; > struct qxl_bo *clips_bo; > @@ -197,9 +202,10 @@ void qxl_draw_dirty_fb(struct qxl_device *qdev, > if (ret) > goto out_release_backoff; > > - ret = qxl_bo_kmap(bo, (void **)&surface_base); > + ret = qxl_bo_kmap(bo, &surface_map); > if (ret) > goto out_release_backoff; > + surface_base = surface_map.vaddr; /* TODO: Use mapping abstraction properly */ > > ret = qxl_image_init(qdev, release, dimage, surface_base, > left - dumb_shadow_offset, > diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h > index 3602e8b34189..eb437fea5d9e 100644 > --- a/drivers/gpu/drm/qxl/qxl_drv.h > +++ b/drivers/gpu/drm/qxl/qxl_drv.h > @@ -30,6 +30,7 @@ > * Definitions taken from spice-protocol, plus kernel driver specific bits. > */ > > +#include > #include > #include > #include > @@ -50,6 +51,8 @@ > > #include "qxl_dev.h" > > +struct dma_buf_map; > + > #define DRIVER_AUTHOR "Dave Airlie" > > #define DRIVER_NAME "qxl" > @@ -79,7 +82,7 @@ struct qxl_bo { > /* Protected by tbo.reserved */ > struct ttm_place placements[3]; > struct ttm_placement placement; > - struct ttm_bo_kmap_obj kmap; > + struct dma_buf_map map; > void *kptr; > unsigned int map_count; > int type; > @@ -335,7 +338,6 @@ int qxl_gem_object_open(struct drm_gem_object *obj, struct drm_file *file_priv); > void qxl_gem_object_close(struct drm_gem_object *obj, > struct drm_file *file_priv); > void qxl_bo_force_delete(struct qxl_device *qdev); > -int qxl_bo_kmap(struct qxl_bo *bo, void **ptr); > > /* qxl_dumb.c */ > int qxl_mode_dumb_create(struct drm_file *file_priv, > @@ -445,8 +447,9 @@ struct sg_table *qxl_gem_prime_get_sg_table(struct drm_gem_object *obj); > struct drm_gem_object *qxl_gem_prime_import_sg_table( > struct drm_device *dev, struct dma_buf_attachment *attach, > struct sg_table *sgt); > -void *qxl_gem_prime_vmap(struct drm_gem_object *obj); > -void qxl_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); > +int qxl_gem_prime_vmap(struct drm_gem_object *obj, struct dma_buf_map *map); > +void qxl_gem_prime_vunmap(struct drm_gem_object *obj, > + struct dma_buf_map *map); > int qxl_gem_prime_mmap(struct drm_gem_object *obj, > struct vm_area_struct *vma); > > diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c > index 940e99354f49..755df4d8f95f 100644 > --- a/drivers/gpu/drm/qxl/qxl_object.c > +++ b/drivers/gpu/drm/qxl/qxl_object.c > @@ -23,10 +23,12 @@ > * Alon Levy > */ > > +#include > +#include > + > #include "qxl_drv.h" > #include "qxl_object.h" > > -#include > static void qxl_ttm_bo_destroy(struct ttm_buffer_object *tbo) > { > struct qxl_bo *bo; > @@ -152,24 +154,27 @@ int qxl_bo_create(struct qxl_device *qdev, > return 0; > } > > -int qxl_bo_kmap(struct qxl_bo *bo, void **ptr) > +int qxl_bo_kmap(struct qxl_bo *bo, struct dma_buf_map *map) > { > - bool is_iomem; > int r; > > if (bo->kptr) { > - if (ptr) > - *ptr = bo->kptr; > bo->map_count++; > - return 0; > + goto out; > } > - r = ttm_bo_kmap(&bo->tbo, 0, bo->tbo.num_pages, &bo->kmap); > + r = ttm_bo_vmap(&bo->tbo, &bo->map); > if (r) > return r; > - bo->kptr = ttm_kmap_obj_virtual(&bo->kmap, &is_iomem); > - if (ptr) > - *ptr = bo->kptr; > bo->map_count = 1; > + > + /* TODO: Remove kptr in favor of map everywhere. */ > + if (bo->map.is_iomem) > + bo->kptr = (void *)bo->map.vaddr_iomem; > + else > + bo->kptr = bo->map.vaddr; > + > +out: > + *map = bo->map; > return 0; > } > > @@ -180,6 +185,7 @@ void *qxl_bo_kmap_atomic_page(struct qxl_device *qdev, > void *rptr; > int ret; > struct io_mapping *map; > + struct dma_buf_map bo_map; > > if (bo->tbo.mem.mem_type == TTM_PL_VRAM) > map = qdev->vram_mapping; > @@ -196,9 +202,10 @@ void *qxl_bo_kmap_atomic_page(struct qxl_device *qdev, > return rptr; > } > > - ret = qxl_bo_kmap(bo, &rptr); > + ret = qxl_bo_kmap(bo, &bo_map); > if (ret) > return NULL; > + rptr = bo_map.vaddr; /* TODO: Use mapping abstraction properly */ > > rptr += page_offset * PAGE_SIZE; > return rptr; > @@ -212,7 +219,7 @@ void qxl_bo_kunmap(struct qxl_bo *bo) > if (bo->map_count > 0) > return; > bo->kptr = NULL; > - ttm_bo_kunmap(&bo->kmap); > + ttm_bo_vunmap(&bo->tbo, &bo->map); > } > > void qxl_bo_kunmap_atomic_page(struct qxl_device *qdev, > diff --git a/drivers/gpu/drm/qxl/qxl_object.h b/drivers/gpu/drm/qxl/qxl_object.h > index 09a5c818324d..ebf24c9d2bf2 100644 > --- a/drivers/gpu/drm/qxl/qxl_object.h > +++ b/drivers/gpu/drm/qxl/qxl_object.h > @@ -63,7 +63,7 @@ extern int qxl_bo_create(struct qxl_device *qdev, > bool kernel, bool pinned, u32 domain, > struct qxl_surface *surf, > struct qxl_bo **bo_ptr); > -extern int qxl_bo_kmap(struct qxl_bo *bo, void **ptr); > +extern int qxl_bo_kmap(struct qxl_bo *bo, struct dma_buf_map *map); > extern void qxl_bo_kunmap(struct qxl_bo *bo); > void *qxl_bo_kmap_atomic_page(struct qxl_device *qdev, struct qxl_bo *bo, int page_offset); > void qxl_bo_kunmap_atomic_page(struct qxl_device *qdev, struct qxl_bo *bo, void *map); > diff --git a/drivers/gpu/drm/qxl/qxl_prime.c b/drivers/gpu/drm/qxl/qxl_prime.c > index 7d3816fca5a8..4aa949799446 100644 > --- a/drivers/gpu/drm/qxl/qxl_prime.c > +++ b/drivers/gpu/drm/qxl/qxl_prime.c > @@ -54,20 +54,20 @@ struct drm_gem_object *qxl_gem_prime_import_sg_table( > return ERR_PTR(-ENOSYS); > } > > -void *qxl_gem_prime_vmap(struct drm_gem_object *obj) > +int qxl_gem_prime_vmap(struct drm_gem_object *obj, struct dma_buf_map *map) > { > struct qxl_bo *bo = gem_to_qxl_bo(obj); > - void *ptr; > int ret; > > - ret = qxl_bo_kmap(bo, &ptr); > + ret = qxl_bo_kmap(bo, map); > if (ret < 0) > - return ERR_PTR(ret); > + return ret; > > - return ptr; > + return 0; > } > > -void qxl_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr) > +void qxl_gem_prime_vunmap(struct drm_gem_object *obj, > + struct dma_buf_map *map) > { > struct qxl_bo *bo = gem_to_qxl_bo(obj); > > diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h > index 5d54bccebd4d..44cb5ee6fc20 100644 > --- a/drivers/gpu/drm/radeon/radeon.h > +++ b/drivers/gpu/drm/radeon/radeon.h > @@ -509,7 +509,6 @@ struct radeon_bo { > /* Constant after initialization */ > struct radeon_device *rdev; > > - struct ttm_bo_kmap_obj dma_buf_vmap; > pid_t pid; > > #ifdef CONFIG_MMU_NOTIFIER > diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c > index 0ccd7213e41f..d2876ce3bc9e 100644 > --- a/drivers/gpu/drm/radeon/radeon_gem.c > +++ b/drivers/gpu/drm/radeon/radeon_gem.c > @@ -31,6 +31,7 @@ > #include > #include > #include > +#include > #include > > #include "radeon.h" > @@ -40,8 +41,6 @@ struct dma_buf *radeon_gem_prime_export(struct drm_gem_object *gobj, > struct sg_table *radeon_gem_prime_get_sg_table(struct drm_gem_object *obj); > int radeon_gem_prime_pin(struct drm_gem_object *obj); > void radeon_gem_prime_unpin(struct drm_gem_object *obj); > -void *radeon_gem_prime_vmap(struct drm_gem_object *obj); > -void radeon_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); > > static const struct drm_gem_object_funcs radeon_gem_object_funcs; > > @@ -235,8 +234,8 @@ static const struct drm_gem_object_funcs radeon_gem_object_funcs = { > .pin = radeon_gem_prime_pin, > .unpin = radeon_gem_prime_unpin, > .get_sg_table = radeon_gem_prime_get_sg_table, > - .vmap = radeon_gem_prime_vmap, > - .vunmap = radeon_gem_prime_vunmap, > + .vmap = drm_gem_ttm_vmap, > + .vunmap = drm_gem_ttm_vunmap, > }; > > /* > diff --git a/drivers/gpu/drm/radeon/radeon_prime.c b/drivers/gpu/drm/radeon/radeon_prime.c > index b9de0e51c0be..088d39a51c0d 100644 > --- a/drivers/gpu/drm/radeon/radeon_prime.c > +++ b/drivers/gpu/drm/radeon/radeon_prime.c > @@ -39,26 +39,6 @@ struct sg_table *radeon_gem_prime_get_sg_table(struct drm_gem_object *obj) > return drm_prime_pages_to_sg(obj->dev, bo->tbo.ttm->pages, npages); > } > > -void *radeon_gem_prime_vmap(struct drm_gem_object *obj) > -{ > - struct radeon_bo *bo = gem_to_radeon_bo(obj); > - int ret; > - > - ret = ttm_bo_kmap(&bo->tbo, 0, bo->tbo.num_pages, > - &bo->dma_buf_vmap); > - if (ret) > - return ERR_PTR(ret); > - > - return bo->dma_buf_vmap.virtual; > -} > - > -void radeon_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr) > -{ > - struct radeon_bo *bo = gem_to_radeon_bo(obj); > - > - ttm_bo_kunmap(&bo->dma_buf_vmap); > -} > - > struct drm_gem_object *radeon_gem_prime_import_sg_table(struct drm_device *dev, > struct dma_buf_attachment *attach, > struct sg_table *sg) > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c > index 7d5ebb10323b..7971f57436dd 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c > @@ -532,26 +532,32 @@ rockchip_gem_prime_import_sg_table(struct drm_device *drm, > return ERR_PTR(ret); > } > > -void *rockchip_gem_prime_vmap(struct drm_gem_object *obj) > +int rockchip_gem_prime_vmap(struct drm_gem_object *obj, struct dma_buf_map *map) > { > struct rockchip_gem_object *rk_obj = to_rockchip_obj(obj); > > - if (rk_obj->pages) > - return vmap(rk_obj->pages, rk_obj->num_pages, VM_MAP, > - pgprot_writecombine(PAGE_KERNEL)); > + if (rk_obj->pages) { > + void *vaddr = vmap(rk_obj->pages, rk_obj->num_pages, VM_MAP, > + pgprot_writecombine(PAGE_KERNEL)); > + if (!vaddr) > + return -ENOMEM; > + dma_buf_map_set_vaddr(map, vaddr); > + return 0; > + } > > if (rk_obj->dma_attrs & DMA_ATTR_NO_KERNEL_MAPPING) > - return NULL; > + return -ENOMEM; > + dma_buf_map_set_vaddr(map, rk_obj->kvaddr); > > - return rk_obj->kvaddr; > + return 0; > } > > -void rockchip_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr) > +void rockchip_gem_prime_vunmap(struct drm_gem_object *obj, struct dma_buf_map *map) > { > struct rockchip_gem_object *rk_obj = to_rockchip_obj(obj); > > if (rk_obj->pages) { > - vunmap(vaddr); > + vunmap(map->vaddr); > return; > } > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.h b/drivers/gpu/drm/rockchip/rockchip_drm_gem.h > index 7ffc541bea07..5a70a56cd406 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.h > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.h > @@ -31,8 +31,8 @@ struct drm_gem_object * > rockchip_gem_prime_import_sg_table(struct drm_device *dev, > struct dma_buf_attachment *attach, > struct sg_table *sg); > -void *rockchip_gem_prime_vmap(struct drm_gem_object *obj); > -void rockchip_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); > +int rockchip_gem_prime_vmap(struct drm_gem_object *obj, struct dma_buf_map *map); > +void rockchip_gem_prime_vunmap(struct drm_gem_object *obj, struct dma_buf_map *map); > > /* drm driver mmap file operations */ > int rockchip_gem_mmap(struct file *filp, struct vm_area_struct *vma); > diff --git a/drivers/gpu/drm/tiny/cirrus.c b/drivers/gpu/drm/tiny/cirrus.c > index 744a8e337e41..c02e35ed6e76 100644 > --- a/drivers/gpu/drm/tiny/cirrus.c > +++ b/drivers/gpu/drm/tiny/cirrus.c > @@ -17,6 +17,7 @@ > */ > > #include > +#include > #include > #include > > @@ -314,6 +315,7 @@ static int cirrus_fb_blit_rect(struct drm_framebuffer *fb, > struct drm_rect *rect) > { > struct cirrus_device *cirrus = to_cirrus(fb->dev); > + struct dma_buf_map map; > void *vmap; > int idx, ret; > > @@ -321,10 +323,10 @@ static int cirrus_fb_blit_rect(struct drm_framebuffer *fb, > if (!drm_dev_enter(&cirrus->dev, &idx)) > goto out; > > - ret = -ENOMEM; > - vmap = drm_gem_shmem_vmap(fb->obj[0]); > - if (!vmap) > + ret = drm_gem_shmem_vmap(fb->obj[0], &map); > + if (ret) > goto out_dev_exit; > + vmap = map.vaddr; /* TODO: Use mapping abstraction properly */ > > if (cirrus->cpp == fb->format->cpp[0]) > drm_fb_memcpy_dstclip(cirrus->vram, > @@ -343,7 +345,7 @@ static int cirrus_fb_blit_rect(struct drm_framebuffer *fb, > else > WARN_ON_ONCE("cpp mismatch"); > > - drm_gem_shmem_vunmap(fb->obj[0], vmap); > + drm_gem_shmem_vunmap(fb->obj[0], &map); > ret = 0; > > out_dev_exit: > diff --git a/drivers/gpu/drm/tiny/gm12u320.c b/drivers/gpu/drm/tiny/gm12u320.c > index cc397671f689..12a890cea6e9 100644 > --- a/drivers/gpu/drm/tiny/gm12u320.c > +++ b/drivers/gpu/drm/tiny/gm12u320.c > @@ -248,6 +248,7 @@ static void gm12u320_copy_fb_to_blocks(struct gm12u320_device *gm12u320) > { > int block, dst_offset, len, remain, ret, x1, x2, y1, y2; > struct drm_framebuffer *fb; > + struct dma_buf_map map; > void *vaddr; > u8 *src; > > @@ -262,11 +263,12 @@ static void gm12u320_copy_fb_to_blocks(struct gm12u320_device *gm12u320) > y1 = gm12u320->fb_update.rect.y1; > y2 = gm12u320->fb_update.rect.y2; > > - vaddr = drm_gem_shmem_vmap(fb->obj[0]); > - if (IS_ERR(vaddr)) { > - GM12U320_ERR("failed to vmap fb: %ld\n", PTR_ERR(vaddr)); > + ret = drm_gem_shmem_vmap(fb->obj[0], &map); > + if (ret) { > + GM12U320_ERR("failed to vmap fb: %d\n", ret); > goto put_fb; > } > + vaddr = map.vaddr; /* TODO: Use mapping abstraction properly */ > > if (fb->obj[0]->import_attach) { > ret = dma_buf_begin_cpu_access( > @@ -318,7 +320,7 @@ static void gm12u320_copy_fb_to_blocks(struct gm12u320_device *gm12u320) > GM12U320_ERR("dma_buf_end_cpu_access err: %d\n", ret); > } > vunmap: > - drm_gem_shmem_vunmap(fb->obj[0], vaddr); > + drm_gem_shmem_vunmap(fb->obj[0], &map); > put_fb: > drm_framebuffer_put(fb); > gm12u320->fb_update.fb = NULL; > diff --git a/drivers/gpu/drm/udl/udl_modeset.c b/drivers/gpu/drm/udl/udl_modeset.c > index fef43f4e3bac..42eeba1dfdbf 100644 > --- a/drivers/gpu/drm/udl/udl_modeset.c > +++ b/drivers/gpu/drm/udl/udl_modeset.c > @@ -276,6 +276,7 @@ static int udl_handle_damage(struct drm_framebuffer *fb, int x, int y, > struct urb *urb; > struct drm_rect clip; > int log_bpp; > + struct dma_buf_map map; > void *vaddr; > > ret = udl_log_cpp(fb->format->cpp[0]); > @@ -296,11 +297,12 @@ static int udl_handle_damage(struct drm_framebuffer *fb, int x, int y, > return ret; > } > > - vaddr = drm_gem_shmem_vmap(fb->obj[0]); > - if (IS_ERR(vaddr)) { > + ret = drm_gem_shmem_vmap(fb->obj[0], &map); > + if (ret) { > DRM_ERROR("failed to vmap fb\n"); > goto out_dma_buf_end_cpu_access; > } > + vaddr = map.vaddr; /* TODO: Use mapping abstraction properly */ > > urb = udl_get_urb(dev); > if (!urb) > @@ -333,7 +335,7 @@ static int udl_handle_damage(struct drm_framebuffer *fb, int x, int y, > ret = 0; > > out_drm_gem_shmem_vunmap: > - drm_gem_shmem_vunmap(fb->obj[0], vaddr); > + drm_gem_shmem_vunmap(fb->obj[0], &map); > out_dma_buf_end_cpu_access: > if (import_attach) { > tmp_ret = dma_buf_end_cpu_access(import_attach->dmabuf, > diff --git a/drivers/gpu/drm/vboxvideo/vbox_mode.c b/drivers/gpu/drm/vboxvideo/vbox_mode.c > index 931c55126148..f268fb258c83 100644 > --- a/drivers/gpu/drm/vboxvideo/vbox_mode.c > +++ b/drivers/gpu/drm/vboxvideo/vbox_mode.c > @@ -9,6 +9,8 @@ > * Michael Thayer * Hans de Goede > */ > + > +#include > #include > > #include > @@ -384,6 +386,8 @@ static void vbox_cursor_atomic_update(struct drm_plane *plane, > u32 height = plane->state->crtc_h; > size_t data_size, mask_size; > u32 flags; > + struct dma_buf_map map; > + int ret; > u8 *src; > > /* > @@ -397,8 +401,8 @@ static void vbox_cursor_atomic_update(struct drm_plane *plane, > > vbox_crtc->cursor_enabled = true; > > - src = drm_gem_vram_vmap(gbo); > - if (IS_ERR(src)) { > + ret = drm_gem_vram_vmap(gbo, &map); > + if (ret) { > /* > * BUG: we should have pinned the BO in prepare_fb(). > */ > @@ -406,6 +410,7 @@ static void vbox_cursor_atomic_update(struct drm_plane *plane, > DRM_WARN("Could not map cursor bo, skipping update\n"); > return; > } > + src = map.vaddr; /* TODO: Use mapping abstraction properly */ > > /* > * The mask must be calculated based on the alpha > @@ -416,7 +421,7 @@ static void vbox_cursor_atomic_update(struct drm_plane *plane, > data_size = width * height * 4 + mask_size; > > copy_cursor_image(src, vbox->cursor_data, width, height, mask_size); > - drm_gem_vram_vunmap(gbo, src); > + drm_gem_vram_vunmap(gbo, &map); > > flags = VBOX_MOUSE_POINTER_VISIBLE | VBOX_MOUSE_POINTER_SHAPE | > VBOX_MOUSE_POINTER_ALPHA; > diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c > index 557f0d1e6437..f290a9a942dc 100644 > --- a/drivers/gpu/drm/vc4/vc4_bo.c > +++ b/drivers/gpu/drm/vc4/vc4_bo.c > @@ -785,16 +785,16 @@ int vc4_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) > return drm_gem_cma_prime_mmap(obj, vma); > } > > -void *vc4_prime_vmap(struct drm_gem_object *obj) > +int vc4_prime_vmap(struct drm_gem_object *obj, struct dma_buf_map *map) > { > struct vc4_bo *bo = to_vc4_bo(obj); > > if (bo->validated_shader) { > DRM_DEBUG("mmaping of shader BOs not allowed.\n"); > - return ERR_PTR(-EINVAL); > + return -EINVAL; > } > > - return drm_gem_cma_prime_vmap(obj); > + return drm_gem_cma_prime_vmap(obj, map); > } > > struct drm_gem_object * > diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h > index cc79b1aaa878..904f2c36c963 100644 > --- a/drivers/gpu/drm/vc4/vc4_drv.h > +++ b/drivers/gpu/drm/vc4/vc4_drv.h > @@ -806,7 +806,7 @@ int vc4_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma); > struct drm_gem_object *vc4_prime_import_sg_table(struct drm_device *dev, > struct dma_buf_attachment *attach, > struct sg_table *sgt); > -void *vc4_prime_vmap(struct drm_gem_object *obj); > +int vc4_prime_vmap(struct drm_gem_object *obj, struct dma_buf_map *map); > int vc4_bo_cache_init(struct drm_device *dev); > void vc4_bo_cache_destroy(struct drm_device *dev); > int vc4_bo_inc_usecnt(struct vc4_bo *bo); > diff --git a/drivers/gpu/drm/vgem/vgem_drv.c b/drivers/gpu/drm/vgem/vgem_drv.c > index fa54a6d1403d..b2aa26e1e4a2 100644 > --- a/drivers/gpu/drm/vgem/vgem_drv.c > +++ b/drivers/gpu/drm/vgem/vgem_drv.c > @@ -361,24 +361,30 @@ static struct drm_gem_object *vgem_prime_import_sg_table(struct drm_device *dev, > return &obj->base; > } > > -static void *vgem_prime_vmap(struct drm_gem_object *obj) > +static int vgem_prime_vmap(struct drm_gem_object *obj, struct dma_buf_map *map) > { > struct drm_vgem_gem_object *bo = to_vgem_bo(obj); > long n_pages = obj->size >> PAGE_SHIFT; > struct page **pages; > + void *vaddr; > > pages = vgem_pin_pages(bo); > if (IS_ERR(pages)) > - return NULL; > + return PTR_ERR(pages); > + > + vaddr = vmap(pages, n_pages, 0, pgprot_writecombine(PAGE_KERNEL)); > + if (!vaddr) > + return -ENOMEM; > + dma_buf_map_set_vaddr(map, vaddr); > > - return vmap(pages, n_pages, 0, pgprot_writecombine(PAGE_KERNEL)); > + return 0; > } > > -static void vgem_prime_vunmap(struct drm_gem_object *obj, void *vaddr) > +static void vgem_prime_vunmap(struct drm_gem_object *obj, struct dma_buf_map *map) > { > struct drm_vgem_gem_object *bo = to_vgem_bo(obj); > > - vunmap(vaddr); > + vunmap(map->vaddr); > vgem_unpin_pages(bo); > } > > diff --git a/drivers/gpu/drm/xen/xen_drm_front_gem.c b/drivers/gpu/drm/xen/xen_drm_front_gem.c > index 4f34ef34ba60..74db5a840bed 100644 > --- a/drivers/gpu/drm/xen/xen_drm_front_gem.c > +++ b/drivers/gpu/drm/xen/xen_drm_front_gem.c > @@ -290,22 +290,28 @@ int xen_drm_front_gem_mmap(struct file *filp, struct vm_area_struct *vma) > return gem_mmap_obj(xen_obj, vma); > } > > -void *xen_drm_front_gem_prime_vmap(struct drm_gem_object *gem_obj) > +int xen_drm_front_gem_prime_vmap(struct drm_gem_object *gem_obj, struct dma_buf_map *map) > { > struct xen_gem_object *xen_obj = to_xen_gem_obj(gem_obj); > + void *vaddr; > > if (!xen_obj->pages) > - return NULL; > + return -ENOMEM; > > /* Please see comment in gem_mmap_obj on mapping and attributes. */ > - return vmap(xen_obj->pages, xen_obj->num_pages, > - VM_MAP, PAGE_KERNEL); > + vaddr = vmap(xen_obj->pages, xen_obj->num_pages, > + VM_MAP, PAGE_KERNEL); > + if (!vaddr) > + return -ENOMEM; > + dma_buf_map_set_vaddr(map, vaddr); > + > + return 0; > } > > void xen_drm_front_gem_prime_vunmap(struct drm_gem_object *gem_obj, > - void *vaddr) > + struct dma_buf_map *map) > { > - vunmap(vaddr); > + vunmap(map->vaddr); > } > > int xen_drm_front_gem_prime_mmap(struct drm_gem_object *gem_obj, > diff --git a/drivers/gpu/drm/xen/xen_drm_front_gem.h b/drivers/gpu/drm/xen/xen_drm_front_gem.h > index a39675fa31b2..a4e67d0a149c 100644 > --- a/drivers/gpu/drm/xen/xen_drm_front_gem.h > +++ b/drivers/gpu/drm/xen/xen_drm_front_gem.h > @@ -12,6 +12,7 @@ > #define __XEN_DRM_FRONT_GEM_H > > struct dma_buf_attachment; > +struct dma_buf_map; > struct drm_device; > struct drm_gem_object; > struct file; > @@ -34,10 +35,11 @@ void xen_drm_front_gem_free_object_unlocked(struct drm_gem_object *gem_obj); > > int xen_drm_front_gem_mmap(struct file *filp, struct vm_area_struct *vma); > > -void *xen_drm_front_gem_prime_vmap(struct drm_gem_object *gem_obj); > +int xen_drm_front_gem_prime_vmap(struct drm_gem_object *gem_obj, > + struct dma_buf_map *map); > > void xen_drm_front_gem_prime_vunmap(struct drm_gem_object *gem_obj, > - void *vaddr); > + struct dma_buf_map *map); > > int xen_drm_front_gem_prime_mmap(struct drm_gem_object *gem_obj, > struct vm_area_struct *vma); > diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h > index c38dd35da00b..5e6daa1c982f 100644 > --- a/include/drm/drm_gem.h > +++ b/include/drm/drm_gem.h > @@ -39,6 +39,7 @@ > > #include > > +struct dma_buf_map; > struct drm_gem_object; > > /** > @@ -138,7 +139,7 @@ struct drm_gem_object_funcs { > * > * This callback is optional. > */ > - void *(*vmap)(struct drm_gem_object *obj); > + int (*vmap)(struct drm_gem_object *obj, struct dma_buf_map *map); > > /** > * @vunmap: > @@ -148,7 +149,7 @@ struct drm_gem_object_funcs { > * > * This callback is optional. > */ > - void (*vunmap)(struct drm_gem_object *obj, void *vaddr); > + void (*vunmap)(struct drm_gem_object *obj, struct dma_buf_map *map); > > /** > * @mmap: > diff --git a/include/drm/drm_gem_cma_helper.h b/include/drm/drm_gem_cma_helper.h > index a064b0d1c480..caf98b9cf4b4 100644 > --- a/include/drm/drm_gem_cma_helper.h > +++ b/include/drm/drm_gem_cma_helper.h > @@ -103,7 +103,7 @@ drm_gem_cma_prime_import_sg_table(struct drm_device *dev, > struct sg_table *sgt); > int drm_gem_cma_prime_mmap(struct drm_gem_object *obj, > struct vm_area_struct *vma); > -void *drm_gem_cma_prime_vmap(struct drm_gem_object *obj); > +int drm_gem_cma_prime_vmap(struct drm_gem_object *obj, struct dma_buf_map *map); > > struct drm_gem_object * > drm_gem_cma_create_object_default_funcs(struct drm_device *dev, size_t size); > diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h > index 5381f0c8cf6f..3449a0353fe0 100644 > --- a/include/drm/drm_gem_shmem_helper.h > +++ b/include/drm/drm_gem_shmem_helper.h > @@ -113,8 +113,8 @@ int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem); > void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem); > int drm_gem_shmem_pin(struct drm_gem_object *obj); > void drm_gem_shmem_unpin(struct drm_gem_object *obj); > -void *drm_gem_shmem_vmap(struct drm_gem_object *obj); > -void drm_gem_shmem_vunmap(struct drm_gem_object *obj, void *vaddr); > +int drm_gem_shmem_vmap(struct drm_gem_object *obj, struct dma_buf_map *map); > +void drm_gem_shmem_vunmap(struct drm_gem_object *obj, struct dma_buf_map *map); > > int drm_gem_shmem_madvise(struct drm_gem_object *obj, int madv); > > diff --git a/include/drm/drm_gem_vram_helper.h b/include/drm/drm_gem_vram_helper.h > index 128f88174d32..c0d28ba0f5c9 100644 > --- a/include/drm/drm_gem_vram_helper.h > +++ b/include/drm/drm_gem_vram_helper.h > @@ -10,6 +10,7 @@ > #include > #include > > +#include > #include /* for container_of() */ > > struct drm_mode_create_dumb; > @@ -29,9 +30,8 @@ struct vm_area_struct; > > /** > * struct drm_gem_vram_object - GEM object backed by VRAM > - * @gem: GEM object > * @bo: TTM buffer object > - * @kmap: Mapping information for @bo > + * @map: Mapping information for @bo > * @placement: TTM placement information. Supported placements are \ > %TTM_PL_VRAM and %TTM_PL_SYSTEM > * @placements: TTM placement information. > @@ -50,15 +50,15 @@ struct vm_area_struct; > */ > struct drm_gem_vram_object { > struct ttm_buffer_object bo; > - struct ttm_bo_kmap_obj kmap; > + struct dma_buf_map map; > > /** > - * @kmap_use_count: > + * @vmap_use_count: > * > * Reference count on the virtual address. > * The address are un-mapped when the count reaches zero. > */ > - unsigned int kmap_use_count; > + unsigned int vmap_use_count; > > /* Supported placements are %TTM_PL_VRAM and %TTM_PL_SYSTEM */ > struct ttm_placement placement; > @@ -97,8 +97,8 @@ u64 drm_gem_vram_mmap_offset(struct drm_gem_vram_object *gbo); > s64 drm_gem_vram_offset(struct drm_gem_vram_object *gbo); > int drm_gem_vram_pin(struct drm_gem_vram_object *gbo, unsigned long pl_flag); > int drm_gem_vram_unpin(struct drm_gem_vram_object *gbo); > -void *drm_gem_vram_vmap(struct drm_gem_vram_object *gbo); > -void drm_gem_vram_vunmap(struct drm_gem_vram_object *gbo, void *vaddr); > +int drm_gem_vram_vmap(struct drm_gem_vram_object *gbo, struct dma_buf_map *map); > +void drm_gem_vram_vunmap(struct drm_gem_vram_object *gbo, struct dma_buf_map *map); > > int drm_gem_vram_fill_create_dumb(struct drm_file *file, > struct drm_device *dev, From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH v4 06/10] drm/gem: Use struct dma_buf_map in GEM vmap ops and convert GEM backends Date: Thu, 15 Oct 2020 16:21:31 +0200 Message-ID: <6bd7d5cf-06c8-3fd8-9bbe-a80ff6bb327e@amd.com> References: <20201015123806.32416-1-tzimmermann@suse.de> <20201015123806.32416-7-tzimmermann@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20201015123806.32416-7-tzimmermann-l3A5Bk7waGM@public.gmane.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Thomas Zimmermann , maarten.lankhorst-VuQAYsv1563Yd54FQh9/CA@public.gmane.org, mripard-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, airlied-cv59FeDIM0c@public.gmane.org, daniel-/w4YWyX8dFk@public.gmane.org, sam-uyr5N9Q2VtJg9hUCZPvPmw@public.gmane.org, alexander.deucher-5C7GfCeVMHo@public.gmane.org, kraxel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, l.stach-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org, linux+etnaviv-I+IVW8TIWO2tmTQ+vhA3Yw@public.gmane.org, christian.gmeiner-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, inki.dae-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org, jy0922.shim-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org, sw0312.kim-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org, kyungmin.park-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org, kgene-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, krzk-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, yuq825-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, bskeggs-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org, steven.price-5wv7dgnIgG8@public.gmane.org, alyssa.rosenzweig-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org, hjc-TNX95d0MmH7DzftRWevZcw@public.gmane.org, heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org, hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org, eric-WhKQ6XTQaPysTnJN9+BGXg@public.gmane.org, oleksandr_andrushchenko-uRwfk40T5oI@public.gmane.org, ray.huang-5C7GfCeVMHo@public.gmane.org, sumit.semwal-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org, emil.velikov-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org, luben.tuikov-5C7GfCeVMHo@public.gmane.org, apaneers-5C7GfCeVMHo@public.gmane.org, linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org, melissa.srw-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, chris-Y6uKTt2uX1cEflXRtASbqLVCufUGDwFn@public.gmane.org, miaoqinglang@huawei. Cc: linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, lima-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, etnaviv-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw@public.gmane.org, linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, xen-devel-GuqFBffKawtpuQazS67q72D2FQJk+8+b@public.gmane.org, spice-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: nouveau.vger.kernel.org QW0gMTUuMTAuMjAgdW0gMTQ6Mzggc2NocmllYiBUaG9tYXMgWmltbWVybWFubjoKPiBUaGlzIHBh dGNoIHJlcGxhY2VzIHRoZSB2bWFwL3Z1bm1hcCdzIHVzZSBvZiByYXcgcG9pbnRlcnMgaW4gR0VN IG9iamVjdAo+IGZ1bmN0aW9ucyB3aXRoIGluc3RhbmNlcyBvZiBzdHJ1Y3QgZG1hX2J1Zl9tYXAu IEdFTSBiYWNrZW5kcyBhcmUKPiBjb252ZXJ0ZWQgYXMgd2VsbC4gRm9yIG1vc3Qgb2YgdGhlbSwg dGhpcyBzaW1wbHkgY2hhbmdlcyB0aGUgcmV0dXJuZWQgdHlwZS4KPgo+IFRUTS1iYXNlZCBkcml2 ZXJzIG5vdyByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBtZW1v cnksCj4gZWl0aGVyIHN5c3RlbSBvciBJL08gbWVtb3J5LiBHRU0gVlJBTSBoZWxwZXJzIGFuZCBx eGwgbm93IHVzZSB0dG1fYm9fdm1hcCgpCj4gZXQgYWwuIEFtZGdwdSwgbm91dmVhdSBhbmQgcmFk ZW9uIHVzZSBkcm1fZ2VtX3R0bV92bWFwKCkgZXQgYWwgaW5zdGVhZCBvZgo+IGltcGxlbWVudGlu ZyB0aGVpciBvd24gdm1hcCBjYWxsYmFja3MuCj4KPiB2NDoKPiAJKiB1c2UgdHRtX2JvX3ZtYXAo KSwgZHJtX2dlbV90dG1fdm1hcCgpLCBldCBhbC4gKERhbmllbCwgQ2hyaXN0aWFuKQo+IAkqIGZp eCBhIHRyYWlsaW5nIHsgaW4gZHJtX2dlbV92bWFwKCkKPiAJKiByZW1vdmUgc2V2ZXJhbCBlbXB0 eSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBjb252ZXJ0aW5nIHRoZW0gKERhbmllbCkKPiAJKiBjb21t ZW50IHVzZXMgb2YgcmF3IHBvaW50ZXJzIHdpdGggYSBUT0RPIChEYW5pZWwpCj4gCSogVE9ETyBs aXN0OiBjb252ZXJ0IG1vcmUgaGVscGVycyB0byB1c2Ugc3RydWN0IGRtYV9idWZfbWFwCj4KPiBT aWduZWQtb2ZmLWJ5OiBUaG9tYXMgWmltbWVybWFubiA8dHppbW1lcm1hbm5Ac3VzZS5kZT4KClRo ZSBhbWRncHUgY2hhbmdlcyBsb29rIGdvb2QgdG8gbWUsIGJ1dCBJIGNhbid0IGZ1bGx5IGp1ZGdl IHRoZSBvdGhlciBzdHVmZi4KCkFja2VkLWJ5OiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4u a29lbmlnQGFtZC5jb20+Cgo+IC0tLQo+ICAgRG9jdW1lbnRhdGlvbi9ncHUvdG9kby5yc3QgICAg ICAgICAgICAgICAgICB8ICAxOCArKysrCj4gICBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAg ICAgICAgICAgICAgICAgIHwgICAyICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9kbWFfYnVmLmMgfCAgMzYgLS0tLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2RtYV9idWYuaCB8ICAgMiAtCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfZ2VtLmMgICAgIHwgICA1ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfb2JqZWN0LmggIHwgICAxIC0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2N1 cnNvci5jICAgICAgICAgICAgfCAgMjcgKysrLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hc3QvYXN0 X2Rydi5oICAgICAgICAgICAgICAgfCAgIDcgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2Vt LmMgICAgICAgICAgICAgICAgICAgfCAgMjMgKysrLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1f Z2VtX2NtYV9oZWxwZXIuYyAgICAgICAgfCAgMTAgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1f Z2VtX3NobWVtX2hlbHBlci5jICAgICAgfCAgNDggKysrKystLS0tCj4gICBkcml2ZXJzL2dwdS9k cm0vZHJtX2dlbV92cmFtX2hlbHBlci5jICAgICAgIHwgMTA3ICsrKysrKysrKystLS0tLS0tLS0t Cj4gICBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5oICAgICAgIHwgICAyICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9wcmltZS5jIHwgICA5ICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5jICAgICAgICAgICAgIHwgICA2ICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMgICAgICAgICAgIHwgIDExICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX21vZGUuYyAgICAgIHwgIDEwICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnICAgICAgICAgICAgIHwgICAxICsK PiAgIGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uaCAgICAgICAgfCAgIDIgLQo+ ICAgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYyAgICAgICB8ICAgNiArLQo+ ICAgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uaCAgICAgICB8ICAgMiAtCj4g ICBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ByaW1lLmMgICAgIHwgIDIwIC0tLS0K PiAgIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9wZXJmY250LmMgfCAgMTQgKy0t Cj4gICBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kaXNwbGF5LmMgICAgICAgICAgIHwgIDExICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kcmF3LmMgICAgICAgICAgICAgIHwgIDE0ICsr LQo+ICAgZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJ2LmggICAgICAgICAgICAgICB8ICAxMSAr LQo+ICAgZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfb2JqZWN0LmMgICAgICAgICAgICB8ICAzMSAr KystLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX29iamVjdC5oICAgICAgICAgICAgfCAg IDIgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX3ByaW1lLmMgICAgICAgICAgICAgfCAg MTIgKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oICAgICAgICAgICAgIHwg ICAxIC0KPiAgIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jICAgICAgICAgfCAg IDcgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3ByaW1lLmMgICAgICAgfCAg MjAgLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uYyB8 ICAyMiArKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5o IHwgICA0ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdGlueS9jaXJydXMuYyAgICAgICAgICAgICAg IHwgIDEwICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdGlueS9nbTEydTMyMC5jICAgICAgICAgICAg IHwgIDEwICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rlc2V0LmMgICAgICAgICAg IHwgICA4ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbW9kZS5jICAgICAg IHwgIDExICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jICAgICAgICAgICAgICAg IHwgICA2ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaCAgICAgICAgICAgICAg IHwgICAyICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Rydi5jICAgICAgICAgICAg IHwgIDE2ICsrLQo+ICAgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jICAg ICB8ICAxOCArKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmgg ICAgIHwgICA2ICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtLmggICAgICAgICAgICAgICAgICAg ICAgIHwgICA1ICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaCAgICAgICAg ICAgIHwgICAyICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oICAgICAg ICAgIHwgICA0ICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmggICAgICAg ICAgIHwgIDE0ICstLQo+ICAgNDcgZmlsZXMgY2hhbmdlZCwgMzIxIGluc2VydGlvbnMoKyksIDI5 NSBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS90b2RvLnJz dCBiL0RvY3VtZW50YXRpb24vZ3B1L3RvZG8ucnN0Cj4gaW5kZXggNzAwNjM3ZTI1ZWNkLi43ZTZm YzNjMDRhZGQgMTAwNjQ0Cj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvdG9kby5yc3QKPiArKysg Yi9Eb2N1bWVudGF0aW9uL2dwdS90b2RvLnJzdAo+IEBAIC00NDYsNiArNDQ2LDI0IEBAIENvbnRh Y3Q6IFZpbGxlIFN5cmrDpGzDpCwgRGFuaWVsIFZldHRlcgo+ICAgCj4gICBMZXZlbDogSW50ZXJt ZWRpYXRlCj4gICAKPiArVXNlIHN0cnVjdCBkbWFfYnVmX21hcCB0aHJvdWdob3V0IGNvZGViYXNl Cj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICsKPiArUG9p bnRlcnMgdG8gc2hhcmVkIGRldmljZSBtZW1vcnkgYXJlIHN0b3JlZCBpbiBzdHJ1Y3QgZG1hX2J1 Zl9tYXAuIEVhY2gKPiAraW5zdGFuY2Uga25vd3Mgd2hldGhlciBpdCByZWZlcnMgdG8gc3lzdGVt IG9yIEkvTyBtZW1vcnkuIE1vc3Qgb2YgdGhlIERSTS13aWRlCj4gK2ludGVyZmFjZSBoYXZlIGJl ZW4gY29udmVydGVkIHRvIHVzZSBzdHJ1Y3QgZG1hX2J1Zl9tYXAsIGJ1dCBpbXBsZW1lbnRhdGlv bnMKPiArb2Z0ZW4gc3RpbGwgdXNlIHJhdyBwb2ludGVycy4KPiArCj4gK1RoZSB0YXNrIGlzIHRv IHVzZSBzdHJ1Y3QgZG1hX2J1Zl9tYXAgd2hlcmUgaXQgbWFrZXMgc2Vuc2UuCj4gKwo+ICsqIE1l bW9yeSBtYW5hZ2VycyBzaG91bGQgdXNlIHN0cnVjdCBkbWFfYnVmX21hcCBmb3IgZG1hLWJ1Zi1p bXBvcnRlZCBidWZmZXJzLgo+ICsqIFRUTSBtaWdodCBiZW5lZml0IGZyb20gdXNpbmcgc3RydWN0 IGRtYV9idWZfbWFwIGludGVybmFsbHkuCj4gKyogRnJhbWVidWZmZXIgY29weWluZyBhbmQgYmxp dHRpbmcgaGVscGVycyBzaG91bGQgb3BlcmF0ZSBvbiBzdHJ1Y3QgZG1hX2J1Zl9tYXAuCj4gKwo+ ICtDb250YWN0OiBUaG9tYXMgWmltbWVybWFubiA8dHppbW1lcm1hbm5Ac3VzZS5kZT4sIENocmlz dGlhbiBLw7ZuaWcsIERhbmllbCBWZXR0ZXIKPiArCj4gK0xldmVsOiBJbnRlcm1lZGlhdGUKPiAr Cj4gICAKPiAgIENvcmUgcmVmYWN0b3JpbmdzCj4gICA9PT09PT09PT09PT09PT09PQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmln Cj4gaW5kZXggMTQ3ZDYxYjk2NzRlLi4zMTk4MzliODdkMzcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+IEBAIC0y MzksNiArMjM5LDcgQEAgY29uZmlnIERSTV9SQURFT04KPiAgIAlzZWxlY3QgRldfTE9BREVSCj4g ICAgICAgICAgIHNlbGVjdCBEUk1fS01TX0hFTFBFUgo+ICAgICAgICAgICBzZWxlY3QgRFJNX1RU TQo+ICsJc2VsZWN0IERSTV9UVE1fSEVMUEVSCj4gICAJc2VsZWN0IFBPV0VSX1NVUFBMWQo+ICAg CXNlbGVjdCBIV01PTgo+ICAgCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCj4gQEAgLTI1 OSw2ICsyNjAsNyBAQCBjb25maWcgRFJNX0FNREdQVQo+ICAgCXNlbGVjdCBEUk1fS01TX0hFTFBF Ugo+ICAgCXNlbGVjdCBEUk1fU0NIRUQKPiAgIAlzZWxlY3QgRFJNX1RUTQo+ICsJc2VsZWN0IERS TV9UVE1fSEVMUEVSCj4gICAJc2VsZWN0IFBPV0VSX1NVUFBMWQo+ICAgCXNlbGVjdCBIV01PTgo+ ICAgCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5jCj4gaW5kZXggNWI0NjVhYjc3NGQxLi5lNTkxOWVmY2E4 NzAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9i dWYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMK PiBAQCAtNDEsNDIgKzQxLDYgQEAKPiAgICNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UtYXJyYXku aD4KPiAgICNpbmNsdWRlIDxsaW51eC9wY2ktcDJwZG1hLmg+Cj4gICAKPiAtLyoqCj4gLSAqIGFt ZGdwdV9nZW1fcHJpbWVfdm1hcCAtICZkbWFfYnVmX29wcy52bWFwIGltcGxlbWVudGF0aW9uCj4g LSAqIEBvYmo6IEdFTSBCTwo+IC0gKgo+IC0gKiBTZXRzIHVwIGFuIGluLWtlcm5lbCB2aXJ0dWFs IG1hcHBpbmcgb2YgdGhlIEJPJ3MgbWVtb3J5Lgo+IC0gKgo+IC0gKiBSZXR1cm5zOgo+IC0gKiBU aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBtYXBwaW5nIG9yIGFuIGVycm9yIHBvaW50ZXIuCj4g LSAqLwo+IC12b2lkICphbWRncHVfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopCj4gLXsKPiAtCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gZ2VtX3RvX2FtZGdwdV9ibyhv YmopOwo+IC0JaW50IHJldDsKPiAtCj4gLQlyZXQgPSB0dG1fYm9fa21hcCgmYm8tPnRibywgMCwg Ym8tPnRiby5udW1fcGFnZXMsCj4gLQkJCSAgJmJvLT5kbWFfYnVmX3ZtYXApOwo+IC0JaWYgKHJl dCkKPiAtCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+IC0KPiAtCXJldHVybiBiby0+ZG1hX2J1Zl92 bWFwLnZpcnR1YWw7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBhbWRncHVfZ2VtX3ByaW1lX3Z1bm1h cCAtICZkbWFfYnVmX29wcy52dW5tYXAgaW1wbGVtZW50YXRpb24KPiAtICogQG9iajogR0VNIEJP Cj4gLSAqIEB2YWRkcjogVmlydHVhbCBhZGRyZXNzICh1bnVzZWQpCj4gLSAqCj4gLSAqIFRlYXJz IGRvd24gdGhlIGluLWtlcm5lbCB2aXJ0dWFsIG1hcHBpbmcgb2YgdGhlIEJPJ3MgbWVtb3J5Lgo+ IC0gKi8KPiAtdm9pZCBhbWRncHVfZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiwgdm9pZCAqdmFkZHIpCj4gLXsKPiAtCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gZ2Vt X3RvX2FtZGdwdV9ibyhvYmopOwo+IC0KPiAtCXR0bV9ib19rdW5tYXAoJmJvLT5kbWFfYnVmX3Zt YXApOwo+IC19Cj4gLQo+ICAgLyoqCj4gICAgKiBhbWRncHVfZ2VtX3ByaW1lX21tYXAgLSAmZHJt X2RyaXZlci5nZW1fcHJpbWVfbW1hcCBpbXBsZW1lbnRhdGlvbgo+ICAgICogQG9iajogR0VNIEJP Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVm LmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5oCj4gaW5kZXgg MmM1Yzg0YTA2YmI5Li4zOWI1Yjk2MTZmZDggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9idWYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmgKPiBAQCAtMzEsOCArMzEsNiBAQCBzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKmFtZGdwdV9nZW1fcHJpbWVfaW1wb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Cj4gICAJCQkJCSAgICBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zik7Cj4gICBib29sIGFtZGdwdV9k bWFidWZfaXNfeGdtaV9hY2Nlc3NpYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAg CQkJCSAgICAgIHN0cnVjdCBhbWRncHVfYm8gKmJvKTsKPiAtdm9pZCAqYW1kZ3B1X2dlbV9wcmlt ZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAtdm9pZCBhbWRncHVfZ2VtX3By aW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+ICAg aW50IGFtZGdwdV9nZW1fcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKPiAg IAkJCSAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwo+IGluZGV4IGJlMDhhNjNlZjU4Yy4uNTc2NjU5ODI3ZTc0 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwo+IEBAIC0zMyw2 ICszMyw3IEBACj4gICAKPiAgICNpbmNsdWRlIDxkcm0vYW1kZ3B1X2RybS5oPgo+ICAgI2luY2x1 ZGUgPGRybS9kcm1fZGVidWdmcy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdHRtX2hlbHBl ci5oPgo+ICAgCj4gICAjaW5jbHVkZSAiYW1kZ3B1LmgiCj4gICAjaW5jbHVkZSAiYW1kZ3B1X2Rp c3BsYXkuaCIKPiBAQCAtMjIwLDggKzIyMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2dl bV9vYmplY3RfZnVuY3MgYW1kZ3B1X2dlbV9vYmplY3RfZnVuY3MgPSB7Cj4gICAJLm9wZW4gPSBh bWRncHVfZ2VtX29iamVjdF9vcGVuLAo+ICAgCS5jbG9zZSA9IGFtZGdwdV9nZW1fb2JqZWN0X2Ns b3NlLAo+ICAgCS5leHBvcnQgPSBhbWRncHVfZ2VtX3ByaW1lX2V4cG9ydCwKPiAtCS52bWFwID0g YW1kZ3B1X2dlbV9wcmltZV92bWFwLAo+IC0JLnZ1bm1hcCA9IGFtZGdwdV9nZW1fcHJpbWVfdnVu bWFwLAo+ICsJLnZtYXAgPSBkcm1fZ2VtX3R0bV92bWFwLAo+ICsJLnZ1bm1hcCA9IGRybV9nZW1f dHRtX3Z1bm1hcCwKPiAgIH07Cj4gICAKPiAgIC8qCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9vYmplY3QuaAo+IGluZGV4IDEzMmU1Zjk1NTE4MC4uMDEyOTZlZjBkNjczIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaAo+IEBAIC0x MDAsNyArMTAwLDYgQEAgc3RydWN0IGFtZGdwdV9ibyB7Cj4gICAJc3RydWN0IGFtZGdwdV9ibwkJ KnBhcmVudDsKPiAgIAlzdHJ1Y3QgYW1kZ3B1X2JvCQkqc2hhZG93Owo+ICAgCj4gLQlzdHJ1Y3Qg dHRtX2JvX2ttYXBfb2JqCQlkbWFfYnVmX3ZtYXA7Cj4gICAJc3RydWN0IGFtZGdwdV9tbgkJKm1u Owo+ICAgCj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfY3Vyc29y LmMgYi9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9jdXJzb3IuYwo+IGluZGV4IGUwZjQ2MTM5MThh ZC4uNzQyZDQzYTdlZGY0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2N1 cnNvci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfY3Vyc29yLmMKPiBAQCAtMzks NyArMzksNyBAQCBzdGF0aWMgdm9pZCBhc3RfY3Vyc29yX2Zpbmkoc3RydWN0IGFzdF9wcml2YXRl ICphc3QpCj4gICAKPiAgIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhc3QtPmN1cnNvci5n Ym8pOyArK2kpIHsKPiAgIAkJZ2JvID0gYXN0LT5jdXJzb3IuZ2JvW2ldOwo+IC0JCWRybV9nZW1f dnJhbV92dW5tYXAoZ2JvLCBhc3QtPmN1cnNvci52YWRkcltpXSk7Cj4gKwkJZHJtX2dlbV92cmFt X3Z1bm1hcChnYm8sICZhc3QtPmN1cnNvci5tYXBbaV0pOwo+ICAgCQlkcm1fZ2VtX3ZyYW1fdW5w aW4oZ2JvKTsKPiAgIAkJZHJtX2dlbV92cmFtX3B1dChnYm8pOwo+ICAgCX0KPiBAQCAtNjAsNyAr NjAsNyBAQCBpbnQgYXN0X2N1cnNvcl9pbml0KHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0KQo+ICAg CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmYXN0LT5iYXNlOwo+ICAgCXNpemVfdCBzaXplLCBp Owo+ICAgCXN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm87Cj4gLQl2b2lkIF9faW9tZW0g KnZhZGRyOwo+ICsJc3RydWN0IGRtYV9idWZfbWFwIG1hcDsKPiAgIAlpbnQgcmV0Owo+ICAgCj4g ICAJc2l6ZSA9IHJvdW5kdXAoQVNUX0hXQ19TSVpFICsgQVNUX0hXQ19TSUdOQVRVUkVfU0laRSwg UEFHRV9TSVpFKTsKPiBAQCAtNzcsMTYgKzc3LDE1IEBAIGludCBhc3RfY3Vyc29yX2luaXQoc3Ry dWN0IGFzdF9wcml2YXRlICphc3QpCj4gICAJCQlkcm1fZ2VtX3ZyYW1fcHV0KGdibyk7Cj4gICAJ CQlnb3RvIGVycl9kcm1fZ2VtX3ZyYW1fcHV0Owo+ICAgCQl9Cj4gLQkJdmFkZHIgPSBkcm1fZ2Vt X3ZyYW1fdm1hcChnYm8pOwo+IC0JCWlmIChJU19FUlIodmFkZHIpKSB7Cj4gLQkJCXJldCA9IFBU Ul9FUlIodmFkZHIpOwo+ICsJCXJldCA9IGRybV9nZW1fdnJhbV92bWFwKGdibywgJm1hcCk7Cj4g KwkJaWYgKHJldCkgewo+ICAgCQkJZHJtX2dlbV92cmFtX3VucGluKGdibyk7Cj4gICAJCQlkcm1f Z2VtX3ZyYW1fcHV0KGdibyk7Cj4gICAJCQlnb3RvIGVycl9kcm1fZ2VtX3ZyYW1fcHV0Owo+ICAg CQl9Cj4gICAKPiAgIAkJYXN0LT5jdXJzb3IuZ2JvW2ldID0gZ2JvOwo+IC0JCWFzdC0+Y3Vyc29y LnZhZGRyW2ldID0gdmFkZHI7Cj4gKwkJYXN0LT5jdXJzb3IubWFwW2ldID0gbWFwOwo+ICAgCX0K PiAgIAo+ICAgCXJldHVybiBkcm1tX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhc3RfY3Vyc29y X3JlbGVhc2UsIE5VTEwpOwo+IEBAIC05NSw3ICs5NCw3IEBAIGludCBhc3RfY3Vyc29yX2luaXQo c3RydWN0IGFzdF9wcml2YXRlICphc3QpCj4gICAJd2hpbGUgKGkpIHsKPiAgIAkJLS1pOwo+ICAg CQlnYm8gPSBhc3QtPmN1cnNvci5nYm9baV07Cj4gLQkJZHJtX2dlbV92cmFtX3Z1bm1hcChnYm8s IGFzdC0+Y3Vyc29yLnZhZGRyW2ldKTsKPiArCQlkcm1fZ2VtX3ZyYW1fdnVubWFwKGdibywgJmFz dC0+Y3Vyc29yLm1hcFtpXSk7Cj4gICAJCWRybV9nZW1fdnJhbV91bnBpbihnYm8pOwo+ICAgCQlk cm1fZ2VtX3ZyYW1fcHV0KGdibyk7Cj4gICAJfQo+IEBAIC0xNzAsNiArMTY5LDcgQEAgaW50IGFz dF9jdXJzb3JfYmxpdChzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCwgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIpCj4gICB7Cj4gICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZhc3QtPmJhc2U7 Cj4gICAJc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibzsKPiArCXN0cnVjdCBkbWFfYnVm X21hcCBtYXA7Cj4gICAJaW50IHJldDsKPiAgIAl2b2lkICpzcmM7Cj4gICAJdm9pZCBfX2lvbWVt ICpkc3Q7Cj4gQEAgLTE4MywxOCArMTgzLDE3IEBAIGludCBhc3RfY3Vyc29yX2JsaXQoc3RydWN0 IGFzdF9wcml2YXRlICphc3QsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQo+ICAgCXJldCA9 IGRybV9nZW1fdnJhbV9waW4oZ2JvLCAwKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gcmV0 Owo+IC0Jc3JjID0gZHJtX2dlbV92cmFtX3ZtYXAoZ2JvKTsKPiAtCWlmIChJU19FUlIoc3JjKSkg ewo+IC0JCXJldCA9IFBUUl9FUlIoc3JjKTsKPiArCXJldCA9IGRybV9nZW1fdnJhbV92bWFwKGdi bywgJm1hcCk7Cj4gKwlpZiAocmV0KQo+ICAgCQlnb3RvIGVycl9kcm1fZ2VtX3ZyYW1fdW5waW47 Cj4gLQl9Cj4gKwlzcmMgPSBtYXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0 aW9uIHByb3Blcmx5ICovCj4gICAKPiAtCWRzdCA9IGFzdC0+Y3Vyc29yLnZhZGRyW2FzdC0+Y3Vy c29yLm5leHRfaW5kZXhdOwo+ICsJZHN0ID0gYXN0LT5jdXJzb3IubWFwW2FzdC0+Y3Vyc29yLm5l eHRfaW5kZXhdLnZhZGRyX2lvbWVtOwo+ICAgCj4gICAJLyogZG8gZGF0YSB0cmFuc2ZlciB0byBj dXJzb3IgQk8gKi8KPiAgIAl1cGRhdGVfY3Vyc29yX2ltYWdlKGRzdCwgc3JjLCBmYi0+d2lkdGgs IGZiLT5oZWlnaHQpOwo+ICAgCj4gLQlkcm1fZ2VtX3ZyYW1fdnVubWFwKGdibywgc3JjKTsKPiAr CWRybV9nZW1fdnJhbV92dW5tYXAoZ2JvLCAmbWFwKTsKPiAgIAlkcm1fZ2VtX3ZyYW1fdW5waW4o Z2JvKTsKPiAgIAo+ICAgCXJldHVybiAwOwo+IEBAIC0yNTcsNyArMjU2LDcgQEAgdm9pZCBhc3Rf Y3Vyc29yX3Nob3coc3RydWN0IGFzdF9wcml2YXRlICphc3QsIGludCB4LCBpbnQgeSwKPiAgIAl1 OCBfX2lvbWVtICpzaWc7Cj4gICAJdTgganJlZzsKPiAgIAo+IC0JZHN0ID0gYXN0LT5jdXJzb3Iu dmFkZHJbYXN0LT5jdXJzb3IubmV4dF9pbmRleF07Cj4gKwlkc3QgPSBhc3QtPmN1cnNvci5tYXBb YXN0LT5jdXJzb3IubmV4dF9pbmRleF0udmFkZHI7Cj4gICAKPiAgIAlzaWcgPSBkc3QgKyBBU1Rf SFdDX1NJWkU7Cj4gICAJd3JpdGVsKHgsIHNpZyArIEFTVF9IV0NfU0lHTkFUVVJFX1gpOwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9hc3QvYXN0X2Rydi5oCj4gaW5kZXggNDY3MDQ5Y2E4NDMwLi5mOTYzMTQxZGQ4NTEgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vYXN0L2FzdF9kcnYuaAo+IEBAIC0yOCwxMCArMjgsMTEgQEAKPiAgICNpZm5kZWYgX19B U1RfRFJWX0hfXwo+ICAgI2RlZmluZSBfX0FTVF9EUlZfSF9fCj4gICAKPiAtI2luY2x1ZGUgPGxp bnV4L3R5cGVzLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9pby5oPgo+ICsjaW5jbHVkZSA8bGludXgv ZG1hLWJ1Zi1tYXAuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPiAgICNpbmNsdWRlIDxs aW51eC9pMmMtYWxnby1iaXQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC90eXBlcy5oPgo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4K PiAgICNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiBAQCAtMTMxLDcgKzEzMiw3IEBAIHN0cnVj dCBhc3RfcHJpdmF0ZSB7Cj4gICAKPiAgIAlzdHJ1Y3Qgewo+ICAgCQlzdHJ1Y3QgZHJtX2dlbV92 cmFtX29iamVjdCAqZ2JvW0FTVF9ERUZBVUxUX0hXQ19OVU1dOwo+IC0JCXZvaWQgX19pb21lbSAq dmFkZHJbQVNUX0RFRkFVTFRfSFdDX05VTV07Cj4gKwkJc3RydWN0IGRtYV9idWZfbWFwIG1hcFtB U1RfREVGQVVMVF9IV0NfTlVNXTsKPiAgIAkJdW5zaWduZWQgaW50IG5leHRfaW5kZXg7Cj4gICAJ fSBjdXJzb3I7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKPiBpbmRleCAxZGE2N2QzNGU1NWQuLmE4OWFkNDU3 MGUzYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2RybV9nZW0uYwo+IEBAIC0zNiw2ICszNiw3IEBACj4gICAjaW5jbHVkZSA8 bGludXgvcGFnZW1hcC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+Cj4gICAjaW5j bHVkZSA8bGludXgvZG1hLWJ1Zi5oPgo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4K PiAgICNpbmNsdWRlIDxsaW51eC9tZW1fZW5jcnlwdC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3Bh Z2V2ZWMuaD4KPiAgIAo+IEBAIC0xMjA3LDI2ICsxMjA4LDMwIEBAIHZvaWQgZHJtX2dlbV91bnBp bihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAgIAo+ICAgdm9pZCAqZHJtX2dlbV92bWFw KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ICAgewo+IC0Jdm9pZCAqdmFkZHI7Cj4gKwlz dHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICsJaW50IHJldDsKPiAgIAo+IC0JaWYgKG9iai0+ZnVu Y3MtPnZtYXApCj4gLQkJdmFkZHIgPSBvYmotPmZ1bmNzLT52bWFwKG9iaik7Cj4gLQllbHNlCj4g LQkJdmFkZHIgPSBFUlJfUFRSKC1FT1BOT1RTVVBQKTsKPiArCWlmICghb2JqLT5mdW5jcy0+dm1h cCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7Cj4gICAKPiAtCWlmICghdmFkZHIp Cj4gLQkJdmFkZHIgPSBFUlJfUFRSKC1FTk9NRU0pOwo+ICsJcmV0ID0gb2JqLT5mdW5jcy0+dm1h cChvYmosICZtYXApOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJ ZWxzZSBpZiAoZG1hX2J1Zl9tYXBfaXNfbnVsbCgmbWFwKSkKPiArCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKPiAgIAo+IC0JcmV0dXJuIHZhZGRyOwo+ICsJcmV0dXJuIG1hcC52YWRkcjsKPiAg IH0KPiAgIAo+ICAgdm9pZCBkcm1fZ2VtX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aiwgdm9pZCAqdmFkZHIpCj4gICB7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwID0gRE1BX0JV Rl9NQVBfSU5JVF9WQUREUih2YWRkcik7Cj4gKwo+ICAgCWlmICghdmFkZHIpCj4gICAJCXJldHVy bjsKPiAgIAo+ICAgCWlmIChvYmotPmZ1bmNzLT52dW5tYXApCj4gLQkJb2JqLT5mdW5jcy0+dnVu bWFwKG9iaiwgdmFkZHIpOwo+ICsJCW9iai0+ZnVuY3MtPnZ1bm1hcChvYmosICZtYXApOwo+ICAg fQo+ICAgCj4gICAvKioKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fY21h X2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fY21hX2hlbHBlci5jCj4gaW5kZXgg ZDUyNzQ4NWVhMGI3Li5iNTdlM2U5MjIyZjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2RybV9nZW1fY21hX2hlbHBlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fY21h X2hlbHBlci5jCj4gQEAgLTUxOSw2ICs1MTksOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2Vt X2NtYV9wcmltZV9tbWFwKTsKPiAgICAqIGRybV9nZW1fY21hX3ByaW1lX3ZtYXAgLSBtYXAgYSBD TUEgR0VNIG9iamVjdCBpbnRvIHRoZSBrZXJuZWwncyB2aXJ0dWFsCj4gICAgKiAgICAgYWRkcmVz cyBzcGFjZQo+ICAgICogQG9iajogR0VNIG9iamVjdAo+ICsgKiBAbWFwOiBSZXR1cm5zIHRoZSBr ZXJuZWwgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBDTUEgR0VNIG9iamVjdCdzIGJhY2tpbmcKPiAr ICogICAgICAgc3RvcmUuCj4gICAgKgo+ICAgICogVGhpcyBmdW5jdGlvbiBtYXBzIGEgYnVmZmVy IGV4cG9ydGVkIHZpYSBEUk0gUFJJTUUgaW50byB0aGUga2VybmVsJ3MKPiAgICAqIHZpcnR1YWwg YWRkcmVzcyBzcGFjZS4gU2luY2UgdGhlIENNQSBidWZmZXJzIGFyZSBhbHJlYWR5IG1hcHBlZCBp bnRvIHRoZQo+IEBAIC01MjcsMTMgKzUyOSwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2Vt X2NtYV9wcmltZV9tbWFwKTsKPiAgICAqIGRyaXZlcidzICZkcm1fZ2VtX29iamVjdF9mdW5jcy52 bWFwIGNhbGxiYWNrLgo+ICAgICoKPiAgICAqIFJldHVybnM6Cj4gLSAqIFRoZSBrZXJuZWwgdmly dHVhbCBhZGRyZXNzIG9mIHRoZSBDTUEgR0VNIG9iamVjdCdzIGJhY2tpbmcgc3RvcmUuCj4gKyAq IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiAgICAq Lwo+IC12b2lkICpkcm1fZ2VtX2NtYV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqKQo+ICtpbnQgZHJtX2dlbV9jbWFfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IGRybV9nZW1f Y21hX29iamVjdCAqY21hX29iaiA9IHRvX2RybV9nZW1fY21hX29iaihvYmopOwo+ICAgCj4gLQly ZXR1cm4gY21hX29iai0+dmFkZHI7Cj4gKwlkbWFfYnVmX21hcF9zZXRfdmFkZHIobWFwLCBjbWFf b2JqLT52YWRkcik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gICBFWFBPUlRfU1lNQk9MX0dQ TChkcm1fZ2VtX2NtYV9wcmltZV92bWFwKTsKPiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3No bWVtX2hlbHBlci5jCj4gaW5kZXggZmIxMWRmN2FjZWQ1Li41NTUzZjU4ZjY4ZjMgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYwo+IEBAIC0yNTgsMTkgKzI1OCwyNSBA QCB2b2lkIGRybV9nZW1fc2htZW1fdW5waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4g ICB9Cj4gICBFWFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fdW5waW4pOwo+ICAgCj4gLXN0YXRp YyB2b2lkICpkcm1fZ2VtX3NobWVtX3ZtYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29i amVjdCAqc2htZW0pCj4gK3N0YXRpYyBpbnQgZHJtX2dlbV9zaG1lbV92bWFwX2xvY2tlZChzdHJ1 Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtLCBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCkK PiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZzaG1lbS0+YmFzZTsKPiAt CXN0cnVjdCBkbWFfYnVmX21hcCBtYXA7Cj4gICAJaW50IHJldCA9IDA7Cj4gICAKPiAtCWlmIChz aG1lbS0+dm1hcF91c2VfY291bnQrKyA+IDApCj4gLQkJcmV0dXJuIHNobWVtLT52YWRkcjsKPiAr CWlmIChzaG1lbS0+dm1hcF91c2VfY291bnQrKyA+IDApIHsKPiArCQlkbWFfYnVmX21hcF9zZXRf dmFkZHIobWFwLCBzaG1lbS0+dmFkZHIpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICAgCj4gICAJ aWYgKG9iai0+aW1wb3J0X2F0dGFjaCkgewo+IC0JCXJldCA9IGRtYV9idWZfdm1hcChvYmotPmlt cG9ydF9hdHRhY2gtPmRtYWJ1ZiwgJm1hcCk7Cj4gLQkJaWYgKCFyZXQpCj4gLQkJCXNobWVtLT52 YWRkciA9IG1hcC52YWRkcjsKPiArCQlyZXQgPSBkbWFfYnVmX3ZtYXAob2JqLT5pbXBvcnRfYXR0 YWNoLT5kbWFidWYsIG1hcCk7Cj4gKwkJaWYgKCFyZXQpIHsKPiArCQkJaWYgKFdBUk5fT04obWFw LT5pc19pb21lbSkpIHsKPiArCQkJCXJldCA9IC1FSU87Cj4gKwkJCQlnb3RvIGVycl9wdXRfcGFn ZXM7Cj4gKwkJCX0KPiArCQkJc2htZW0tPnZhZGRyID0gbWFwLT52YWRkcjsKPiArCQl9Cj4gICAJ fSBlbHNlIHsKPiAgIAkJcGdwcm90X3QgcHJvdCA9IFBBR0VfS0VSTkVMOwo+ICAgCj4gQEAgLTI4 NCw2ICsyOTAsOCBAQCBzdGF0aWMgdm9pZCAqZHJtX2dlbV9zaG1lbV92bWFwX2xvY2tlZChzdHJ1 Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQo+ICAgCQkJCSAgICBWTV9NQVAsIHByb3Qp Owo+ICAgCQlpZiAoIXNobWVtLT52YWRkcikKPiAgIAkJCXJldCA9IC1FTk9NRU07Cj4gKwkJZWxz ZQo+ICsJCQlkbWFfYnVmX21hcF9zZXRfdmFkZHIobWFwLCBzaG1lbS0+dmFkZHIpOwo+ICAgCX0K PiAgIAo+ICAgCWlmIChyZXQpIHsKPiBAQCAtMjkxLDcgKzI5OSw3IEBAIHN0YXRpYyB2b2lkICpk cm1fZ2VtX3NobWVtX3ZtYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0pCj4gICAJCWdvdG8gZXJyX3B1dF9wYWdlczsKPiAgIAl9Cj4gICAKPiAtCXJldHVybiBzaG1l bS0+dmFkZHI7Cj4gKwlyZXR1cm4gMDsKPiAgIAo+ICAgZXJyX3B1dF9wYWdlczoKPiAgIAlpZiAo IW9iai0+aW1wb3J0X2F0dGFjaCkKPiBAQCAtMjk5LDEyICszMDcsMTQgQEAgc3RhdGljIHZvaWQg KmRybV9nZW1fc2htZW1fdm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpz aG1lbSkKPiAgIGVycl96ZXJvX3VzZToKPiAgIAlzaG1lbS0+dm1hcF91c2VfY291bnQgPSAwOwo+ ICAgCj4gLQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ ICAgLyoKPiAgICAqIGRybV9nZW1fc2htZW1fdm1hcCAtIENyZWF0ZSBhIHZpcnR1YWwgbWFwcGlu ZyBmb3IgYSBzaG1lbSBHRU0gb2JqZWN0Cj4gICAgKiBAc2htZW06IHNobWVtIEdFTSBvYmplY3QK PiArICogQG1hcDogUmV0dXJucyB0aGUga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgU0hN RU0gR0VNIG9iamVjdCdzIGJhY2tpbmcKPiArICogICAgICAgc3RvcmUuCj4gICAgKgo+ICAgICog VGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgYSBjb250aWd1b3VzIGtlcm5lbCB2aXJ0dWFs IGFkZHJlc3MgbWFwcGluZwo+ICAgICogZXhpc3RzIGZvciB0aGUgYnVmZmVyIGJhY2tpbmcgdGhl IHNobWVtIEdFTSBvYmplY3QuCj4gQEAgLTMxOCwyNiArMzI4LDI1IEBAIHN0YXRpYyB2b2lkICpk cm1fZ2VtX3NobWVtX3ZtYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0pCj4gICAgKiBSZXR1cm5zOgo+ICAgICogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJy b3IgY29kZSBvbiBmYWlsdXJlLgo+ICAgICovCj4gLXZvaWQgKmRybV9nZW1fc2htZW1fdm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAraW50IGRybV9nZW1fc2htZW1fdm1hcChzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4g ICAJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1f b2JqKG9iaik7Cj4gLQl2b2lkICp2YWRkcjsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gICAJcmV0ID0g bXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzaG1lbS0+dm1hcF9sb2NrKTsKPiAgIAlpZiAocmV0 KQo+IC0JCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gLQl2YWRkciA9IGRybV9nZW1fc2htZW1fdm1h cF9sb2NrZWQoc2htZW0pOwo+ICsJCXJldHVybiByZXQ7Cj4gKwlyZXQgPSBkcm1fZ2VtX3NobWVt X3ZtYXBfbG9ja2VkKHNobWVtLCBtYXApOwo+ICAgCW11dGV4X3VubG9jaygmc2htZW0tPnZtYXBf bG9jayk7Cj4gICAKPiAtCXJldHVybiB2YWRkcjsKPiArCXJldHVybiByZXQ7Cj4gICB9Cj4gICBF WFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fdm1hcCk7Cj4gICAKPiAtc3RhdGljIHZvaWQgZHJt X2dlbV9zaG1lbV92dW5tYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0pCj4gK3N0YXRpYyB2b2lkIGRybV9nZW1fc2htZW1fdnVubWFwX2xvY2tlZChzdHJ1Y3QgZHJt X2dlbV9zaG1lbV9vYmplY3QgKnNobWVtLAo+ICsJCQkJCXN0cnVjdCBkbWFfYnVmX21hcCAqbWFw KQo+ICAgewo+ICAgCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJnNobWVtLT5iYXNlOwo+ IC0Jc3RydWN0IGRtYV9idWZfbWFwIG1hcCA9IERNQV9CVUZfTUFQX0lOSVRfVkFERFIoc2htZW0t PnZhZGRyKTsKPiAgIAo+ICAgCWlmIChXQVJOX09OX09OQ0UoIXNobWVtLT52bWFwX3VzZV9jb3Vu dCkpCj4gICAJCXJldHVybjsKPiBAQCAtMzQ2LDcgKzM1NSw3IEBAIHN0YXRpYyB2b2lkIGRybV9n ZW1fc2htZW1fdnVubWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVt KQo+ICAgCQlyZXR1cm47Cj4gICAKPiAgIAlpZiAob2JqLT5pbXBvcnRfYXR0YWNoKQo+IC0JCWRt YV9idWZfdnVubWFwKG9iai0+aW1wb3J0X2F0dGFjaC0+ZG1hYnVmLCAmbWFwKTsKPiArCQlkbWFf YnVmX3Z1bm1hcChvYmotPmltcG9ydF9hdHRhY2gtPmRtYWJ1ZiwgbWFwKTsKPiAgIAllbHNlCj4g ICAJCXZ1bm1hcChzaG1lbS0+dmFkZHIpOwo+ICAgCj4gQEAgLTM1Nyw2ICszNjYsNyBAQCBzdGF0 aWMgdm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1f b2JqZWN0ICpzaG1lbSkKPiAgIC8qCj4gICAgKiBkcm1fZ2VtX3NobWVtX3Z1bm1hcCAtIFVubWFw IGEgdmlydHVhbCBtYXBwaW5nIGZvIGEgc2htZW0gR0VNIG9iamVjdAo+ICAgICogQHNobWVtOiBz aG1lbSBHRU0gb2JqZWN0Cj4gKyAqIEBtYXA6IEtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgd2hlcmUg dGhlIFNITUVNIEdFTSBvYmplY3Qgd2FzIG1hcHBlZAo+ICAgICoKPiAgICAqIFRoaXMgZnVuY3Rp b24gY2xlYW5zIHVwIGEga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nIGFjcXVpcmVkIGJ5 Cj4gICAgKiBkcm1fZ2VtX3NobWVtX3ZtYXAoKS4gVGhlIG1hcHBpbmcgaXMgb25seSByZW1vdmVk IHdoZW4gdGhlIHVzZSBjb3VudCBkcm9wcyB0bwo+IEBAIC0zNjYsMTIgKzM3NiwxMiBAQCBzdGF0 aWMgdm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1f b2JqZWN0ICpzaG1lbSkKPiAgICAqIGFsc28gYmUgY2FsbGVkIGJ5IGRyaXZlcnMgZGlyZWN0bHks IGluIHdoaWNoIGNhc2UgaXQgd2lsbCBoaWRlIHRoZQo+ICAgICogZGlmZmVyZW5jZXMgYmV0d2Vl biBkbWEtYnVmIGltcG9ydGVkIGFuZCBuYXRpdmVseSBhbGxvY2F0ZWQgb2JqZWN0cy4KPiAgICAq Lwo+IC12b2lkIGRybV9nZW1fc2htZW1fdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LCB2b2lkICp2YWRkcikKPiArdm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcChzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0 IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7 Cj4gICAKPiAgIAltdXRleF9sb2NrKCZzaG1lbS0+dm1hcF9sb2NrKTsKPiAtCWRybV9nZW1fc2ht ZW1fdnVubWFwX2xvY2tlZChzaG1lbSk7Cj4gKwlkcm1fZ2VtX3NobWVtX3Z1bm1hcF9sb2NrZWQo c2htZW0sIG1hcCk7Cj4gICAJbXV0ZXhfdW5sb2NrKCZzaG1lbS0+dm1hcF9sb2NrKTsKPiAgIH0K PiAgIEVYUE9SVF9TWU1CT0woZHJtX2dlbV9zaG1lbV92dW5tYXApOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9nZW1fdnJhbV9oZWxwZXIuYwo+IGluZGV4IDJkNWVkMzA1MThmMS4uNGQ4NTUzYjI4NTU4IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5jCj4gQEAgLTEsNSArMSw2IEBA Cj4gICAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgo+ICAgCj4g KyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLW1hcC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV9kZWJ1Z2ZzLmg+Cj4gQEAgLTExMyw4ICsx MTQsOCBAQCBzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fY2xlYW51cChzdHJ1Y3QgZHJtX2dlbV92 cmFtX29iamVjdCAqZ2JvKQo+ICAgCSAqIHVwOyBvbmx5IHJlbGVhc2UgdGhlIEdFTSBvYmplY3Qu Cj4gICAJICovCj4gICAKPiAtCVdBUk5fT04oZ2JvLT5rbWFwX3VzZV9jb3VudCk7Cj4gLQlXQVJO X09OKGdiby0+a21hcC52aXJ0dWFsKTsKPiArCVdBUk5fT04oZ2JvLT52bWFwX3VzZV9jb3VudCk7 Cj4gKwlXQVJOX09OKGRtYV9idWZfbWFwX2lzX3NldCgmZ2JvLT5tYXApKTsKPiAgIAo+ICAgCWRy bV9nZW1fb2JqZWN0X3JlbGVhc2UoJmdiby0+Ym8uYmFzZSk7Cj4gICB9Cj4gQEAgLTM4MiwyOSAr MzgzLDM3IEBAIGludCBkcm1fZ2VtX3ZyYW1fdW5waW4oc3RydWN0IGRybV9nZW1fdnJhbV9vYmpl Y3QgKmdibykKPiAgIH0KPiAgIEVYUE9SVF9TWU1CT0woZHJtX2dlbV92cmFtX3VucGluKTsKPiAg IAo+IC1zdGF0aWMgdm9pZCAqZHJtX2dlbV92cmFtX2ttYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2Vt X3ZyYW1fb2JqZWN0ICpnYm8pCj4gK3N0YXRpYyBpbnQgZHJtX2dlbV92cmFtX2ttYXBfbG9ja2Vk KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sCj4gKwkJCQkgICAgc3RydWN0IGRtYV9i dWZfbWFwICptYXApCj4gICB7Cj4gICAJaW50IHJldDsKPiAtCXN0cnVjdCB0dG1fYm9fa21hcF9v YmogKmttYXAgPSAmZ2JvLT5rbWFwOwo+IC0JYm9vbCBpc19pb21lbTsKPiAgIAo+IC0JaWYgKGdi by0+a21hcF91c2VfY291bnQgPiAwKQo+ICsJaWYgKGdiby0+dm1hcF91c2VfY291bnQgPiAwKQo+ ICAgCQlnb3RvIG91dDsKPiAgIAo+IC0JcmV0ID0gdHRtX2JvX2ttYXAoJmdiby0+Ym8sIDAsIGdi by0+Ym8ubnVtX3BhZ2VzLCBrbWFwKTsKPiArCXJldCA9IHR0bV9ib192bWFwKCZnYm8tPmJvLCAm Z2JvLT5tYXApOwo+ICAgCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCQly ZXR1cm4gcmV0Owo+ICAgCj4gICBvdXQ6Cj4gLQkrK2diby0+a21hcF91c2VfY291bnQ7Cj4gLQly ZXR1cm4gdHRtX2ttYXBfb2JqX3ZpcnR1YWwoa21hcCwgJmlzX2lvbWVtKTsKPiArCSsrZ2JvLT52 bWFwX3VzZV9jb3VudDsKPiArCSptYXAgPSBnYm8tPm1hcDsKPiArCj4gKwlyZXR1cm4gMDsKPiAg IH0KPiAgIAo+IC1zdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fa3VubWFwX2xvY2tlZChzdHJ1Y3Qg ZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQo+ICtzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fa3Vu bWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvLAo+ICsJCQkJICAgICAg IHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKQo+ICAgewo+IC0JaWYgKFdBUk5fT05fT05DRSghZ2Jv LT5rbWFwX3VzZV9jb3VudCkpCj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZ2JvLT5iby5i YXNlLmRldjsKPiArCj4gKwlpZiAoZHJtX1dBUk5fT05fT05DRShkZXYsICFnYm8tPnZtYXBfdXNl X2NvdW50KSkKPiAgIAkJcmV0dXJuOwo+IC0JaWYgKC0tZ2JvLT5rbWFwX3VzZV9jb3VudCA+IDAp Cj4gKwo+ICsJaWYgKGRybV9XQVJOX09OX09OQ0UoZGV2LCAhZG1hX2J1Zl9tYXBfaXNfZXF1YWwo Jmdiby0+bWFwLCBtYXApKSkKPiArCQlyZXR1cm47IC8qIEJVRzogbWFwIG5vdCBtYXBwZWQgZnJv bSB0aGlzIEJPICovCj4gKwo+ICsJaWYgKC0tZ2JvLT52bWFwX3VzZV9jb3VudCA+IDApCj4gICAJ CXJldHVybjsKPiAgIAo+ICAgCS8qCj4gQEAgLTQxOCw3ICs0MjcsOSBAQCBzdGF0aWMgdm9pZCBk cm1fZ2VtX3ZyYW1fa3VubWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2Jv KQo+ICAgLyoqCj4gICAgKiBkcm1fZ2VtX3ZyYW1fdm1hcCgpIC0gUGlucyBhbmQgbWFwcyBhIEdF TSBWUkFNIG9iamVjdCBpbnRvIGtlcm5lbCBhZGRyZXNzCj4gICAgKiAgICAgICAgICAgICAgICAg ICAgICAgc3BhY2UKPiAtICogQGdibzoJVGhlIEdFTSBWUkFNIG9iamVjdCB0byBtYXAKPiArICog QGdibzogVGhlIEdFTSBWUkFNIG9iamVjdCB0byBtYXAKPiArICogQG1hcDogUmV0dXJucyB0aGUg a2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgVlJBTSBHRU0gb2JqZWN0J3MgYmFja2luZwo+ ICsgKiAgICAgICBzdG9yZS4KPiAgICAqCj4gICAgKiBUaGUgdm1hcCBmdW5jdGlvbiBwaW5zIGEg R0VNIFZSQU0gb2JqZWN0IHRvIGl0cyBjdXJyZW50IGxvY2F0aW9uLCBlaXRoZXIKPiAgICAqIHN5 c3RlbSBvciB2aWRlbyBtZW1vcnksIGFuZCBtYXBzIGl0cyBidWZmZXIgaW50byBrZXJuZWwgYWRk cmVzcyBzcGFjZS4KPiBAQCAtNDI3LDQ4ICs0MzgsNDQgQEAgc3RhdGljIHZvaWQgZHJtX2dlbV92 cmFtX2t1bm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibykKPiAgICAq IHVubWFwIGFuZCB1bnBpbiB0aGUgR0VNIFZSQU0gb2JqZWN0Lgo+ICAgICoKPiAgICAqIFJldHVy bnM6Cj4gLSAqIFRoZSBidWZmZXIncyB2aXJ0dWFsIGFkZHJlc3Mgb24gc3VjY2Vzcywgb3IKPiAt ICogYW4gRVJSX1BUUigpLWVuY29kZWQgZXJyb3IgY29kZSBvdGhlcndpc2UuCj4gKyAqIDAgb24g c3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiAgICAqLwo+IC12 b2lkICpkcm1fZ2VtX3ZyYW1fdm1hcChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQo+ ICtpbnQgZHJtX2dlbV92cmFtX3ZtYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywg c3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJaW50IHJldDsKPiAtCXZvaWQgKmJh c2U7Cj4gICAKPiAgIAlyZXQgPSB0dG1fYm9fcmVzZXJ2ZSgmZ2JvLT5ibywgdHJ1ZSwgZmFsc2Us IE5VTEwpOwo+ICAgCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCQlyZXR1 cm4gcmV0Owo+ICAgCj4gICAJcmV0ID0gZHJtX2dlbV92cmFtX3Bpbl9sb2NrZWQoZ2JvLCAwKTsK PiAgIAlpZiAocmV0KQo+ICAgCQlnb3RvIGVycl90dG1fYm9fdW5yZXNlcnZlOwo+IC0JYmFzZSA9 IGRybV9nZW1fdnJhbV9rbWFwX2xvY2tlZChnYm8pOwo+IC0JaWYgKElTX0VSUihiYXNlKSkgewo+ IC0JCXJldCA9IFBUUl9FUlIoYmFzZSk7Cj4gKwlyZXQgPSBkcm1fZ2VtX3ZyYW1fa21hcF9sb2Nr ZWQoZ2JvLCBtYXApOwo+ICsJaWYgKHJldCkKPiAgIAkJZ290byBlcnJfZHJtX2dlbV92cmFtX3Vu cGluX2xvY2tlZDsKPiAtCX0KPiAgIAo+ICAgCXR0bV9ib191bnJlc2VydmUoJmdiby0+Ym8pOwo+ ICAgCj4gLQlyZXR1cm4gYmFzZTsKPiArCXJldHVybiAwOwo+ICAgCj4gICBlcnJfZHJtX2dlbV92 cmFtX3VucGluX2xvY2tlZDoKPiAgIAlkcm1fZ2VtX3ZyYW1fdW5waW5fbG9ja2VkKGdibyk7Cj4g ICBlcnJfdHRtX2JvX3VucmVzZXJ2ZToKPiAgIAl0dG1fYm9fdW5yZXNlcnZlKCZnYm8tPmJvKTsK PiAtCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgRVhQT1JU X1NZTUJPTChkcm1fZ2VtX3ZyYW1fdm1hcCk7Cj4gICAKPiAgIC8qKgo+ICAgICogZHJtX2dlbV92 cmFtX3Z1bm1hcCgpIC0gVW5tYXBzIGFuZCB1bnBpbnMgYSBHRU0gVlJBTSBvYmplY3QKPiAtICog QGdibzoJVGhlIEdFTSBWUkFNIG9iamVjdCB0byB1bm1hcAo+IC0gKiBAdmFkZHI6CVRoZSBtYXBw aW5nJ3MgYmFzZSBhZGRyZXNzIGFzIHJldHVybmVkIGJ5IGRybV9nZW1fdnJhbV92bWFwKCkKPiAr ICogQGdibzogVGhlIEdFTSBWUkFNIG9iamVjdCB0byB1bm1hcAo+ICsgKiBAbWFwOiBLZXJuZWwg dmlydHVhbCBhZGRyZXNzIHdoZXJlIHRoZSBWUkFNIEdFTSBvYmplY3Qgd2FzIG1hcHBlZAo+ICAg ICoKPiAgICAqIEEgY2FsbCB0byBkcm1fZ2VtX3ZyYW1fdnVubWFwKCkgdW5tYXBzIGFuZCB1bnBp bnMgYSBHRU0gVlJBTSBidWZmZXIuIFNlZQo+ICAgICogdGhlIGRvY3VtZW50YXRpb24gZm9yIGRy bV9nZW1fdnJhbV92bWFwKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCj4gICAgKi8KPiAtdm9pZCBk cm1fZ2VtX3ZyYW1fdnVubWFwKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sIHZvaWQg KnZhZGRyKQo+ICt2b2lkIGRybV9nZW1fdnJhbV92dW5tYXAoc3RydWN0IGRybV9nZW1fdnJhbV9v YmplY3QgKmdibywgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJaW50IHJldDsK PiAgIAo+IEBAIC00NzYsNyArNDgzLDcgQEAgdm9pZCBkcm1fZ2VtX3ZyYW1fdnVubWFwKHN0cnVj dCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sIHZvaWQgKnZhZGRyKQo+ICAgCWlmIChXQVJOX09O Q0UocmV0LCAidHRtX2JvX3Jlc2VydmVfZmFpbGVkKCk6IHJldD0lZFxuIiwgcmV0KSkKPiAgIAkJ cmV0dXJuOwo+ICAgCj4gLQlkcm1fZ2VtX3ZyYW1fa3VubWFwX2xvY2tlZChnYm8pOwo+ICsJZHJt X2dlbV92cmFtX2t1bm1hcF9sb2NrZWQoZ2JvLCBtYXApOwo+ICAgCWRybV9nZW1fdnJhbV91bnBp bl9sb2NrZWQoZ2JvKTsKPiAgIAo+ICAgCXR0bV9ib191bnJlc2VydmUoJmdiby0+Ym8pOwo+IEBA IC01NjcsMTUgKzU3NCwxMyBAQCBzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fYm9fZHJpdmVyX21v dmVfbm90aWZ5KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sCj4gICAJCQkJCSAgICAg ICBib29sIGV2aWN0LAo+ICAgCQkJCQkgICAgICAgc3RydWN0IHR0bV9yZXNvdXJjZSAqbmV3X21l bSkKPiAgIHsKPiAtCXN0cnVjdCB0dG1fYm9fa21hcF9vYmogKmttYXAgPSAmZ2JvLT5rbWFwOwo+ ICsJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyA9ICZnYm8tPmJvOwo+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGJvLT5iYXNlLmRldjsKPiAgIAo+IC0JaWYgKFdBUk5fT05fT05DRShn Ym8tPmttYXBfdXNlX2NvdW50KSkKPiArCWlmIChkcm1fV0FSTl9PTl9PTkNFKGRldiwgZ2JvLT52 bWFwX3VzZV9jb3VudCkpCj4gICAJCXJldHVybjsKPiAgIAo+IC0JaWYgKCFrbWFwLT52aXJ0dWFs KQo+IC0JCXJldHVybjsKPiAtCXR0bV9ib19rdW5tYXAoa21hcCk7Cj4gLQlrbWFwLT52aXJ0dWFs ID0gTlVMTDsKPiArCXR0bV9ib192dW5tYXAoYm8sICZnYm8tPm1hcCk7Cj4gICB9Cj4gICAKPiAg IHN0YXRpYyBpbnQgZHJtX2dlbV92cmFtX2JvX2RyaXZlcl9tb3ZlKHN0cnVjdCBkcm1fZ2VtX3Zy YW1fb2JqZWN0ICpnYm8sCj4gQEAgLTgzMiwzNyArODM3LDMzIEBAIHN0YXRpYyB2b2lkIGRybV9n ZW1fdnJhbV9vYmplY3RfdW5waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW0pCj4gICB9Cj4g ICAKPiAgIC8qKgo+IC0gKiBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3ZtYXAoKSAtIFwKPiAtCUltcGxl bWVudHMgJnN0cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcy52bWFwCj4gLSAqIEBnZW06CVRoZSBH RU0gb2JqZWN0IHRvIG1hcAo+ICsgKiBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3ZtYXAoKSAtCj4gKyAq CUltcGxlbWVudHMgJnN0cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcy52bWFwCj4gKyAqIEBnZW06 IFRoZSBHRU0gb2JqZWN0IHRvIG1hcAo+ICsgKiBAbWFwOiBSZXR1cm5zIHRoZSBrZXJuZWwgdmly dHVhbCBhZGRyZXNzIG9mIHRoZSBWUkFNIEdFTSBvYmplY3QncyBiYWNraW5nCj4gKyAqICAgICAg IHN0b3JlLgo+ICAgICoKPiAgICAqIFJldHVybnM6Cj4gLSAqIFRoZSBidWZmZXJzIHZpcnR1YWwg YWRkcmVzcyBvbiBzdWNjZXNzLCBvcgo+IC0gKiBOVUxMIG90aGVyd2lzZS4KPiArICogMCBvbiBz dWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgo+ICAgICovCj4gLXN0 YXRpYyB2b2lkICpkcm1fZ2VtX3ZyYW1fb2JqZWN0X3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpnZW0pCj4gK3N0YXRpYyBpbnQgZHJtX2dlbV92cmFtX29iamVjdF92bWFwKHN0cnVjdCBkcm1f Z2VtX29iamVjdCAqZ2VtLCBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCkKPiAgIHsKPiAgIAlzdHJ1 Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvID0gZHJtX2dlbV92cmFtX29mX2dlbShnZW0pOwo+ IC0Jdm9pZCAqYmFzZTsKPiAgIAo+IC0JYmFzZSA9IGRybV9nZW1fdnJhbV92bWFwKGdibyk7Cj4g LQlpZiAoSVNfRVJSKGJhc2UpKQo+IC0JCXJldHVybiBOVUxMOwo+IC0JcmV0dXJuIGJhc2U7Cj4g KwlyZXR1cm4gZHJtX2dlbV92cmFtX3ZtYXAoZ2JvLCBtYXApOwo+ICAgfQo+ICAgCj4gICAvKioK PiAtICogZHJtX2dlbV92cmFtX29iamVjdF92dW5tYXAoKSAtIFwKPiAtCUltcGxlbWVudHMgJnN0 cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcy52dW5tYXAKPiAtICogQGdlbToJVGhlIEdFTSBvYmpl Y3QgdG8gdW5tYXAKPiAtICogQHZhZGRyOglUaGUgbWFwcGluZydzIGJhc2UgYWRkcmVzcwo+ICsg KiBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3Z1bm1hcCgpIC0KPiArICoJSW1wbGVtZW50cyAmc3RydWN0 IGRybV9nZW1fb2JqZWN0X2Z1bmNzLnZ1bm1hcAo+ICsgKiBAZ2VtOiBUaGUgR0VNIG9iamVjdCB0 byB1bm1hcAo+ICsgKiBAbWFwOiBLZXJuZWwgdmlydHVhbCBhZGRyZXNzIHdoZXJlIHRoZSBWUkFN IEdFTSBvYmplY3Qgd2FzIG1hcHBlZAo+ICAgICovCj4gLXN0YXRpYyB2b2lkIGRybV9nZW1fdnJh bV9vYmplY3RfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtLAo+IC0JCQkJICAgICAg IHZvaWQgKnZhZGRyKQo+ICtzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3Z1bm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbSwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7 Cj4gICAJc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibyA9IGRybV9nZW1fdnJhbV9vZl9n ZW0oZ2VtKTsKPiAgIAo+IC0JZHJtX2dlbV92cmFtX3Z1bm1hcChnYm8sIHZhZGRyKTsKPiArCWRy bV9nZW1fdnJhbV92dW5tYXAoZ2JvLCBtYXApOwo+ICAgfQo+ICAgCj4gICAvKgo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5oIGIvZHJpdmVycy9ncHUv ZHJtL2V0bmF2aXYvZXRuYXZpdl9kcnYuaAo+IGluZGV4IDk2ODJjMjZkODliYi4uZjViZTYyN2Ux ZGUwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZHJ2LmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5oCj4gQEAgLTUxLDcg KzUxLDcgQEAgaW50IGV0bmF2aXZfaW9jdGxfZ2VtX3N1Ym1pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB2b2lkICpkYXRhLAo+ICAgaW50IGV0bmF2aXZfZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZp bHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKPiAgIGludCBldG5hdml2X2dlbV9tbWFw X29mZnNldChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdTY0ICpvZmZzZXQpOwo+ICAgc3Ry dWN0IHNnX3RhYmxlICpldG5hdml2X2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmopOwo+IC12b2lkICpldG5hdml2X2dlbV9wcmltZV92bWFwKHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqKTsKPiAraW50IGV0bmF2aXZfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIGludCBl dG5hdml2X2dlbV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkJ ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpldG5hdml2X2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fcHJp bWUuYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3ByaW1lLmMKPiBpbmRl eCBhNmQ5OTMyYTMyYWUuLmJjMjU0M2RkOTg3ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vZXRuYXZpdi9ldG5hdml2X2dlbV9wcmltZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V0 bmF2aXYvZXRuYXZpdl9nZW1fcHJpbWUuYwo+IEBAIC0yMiw5ICsyMiwxNCBAQCBzdHJ1Y3Qgc2df dGFibGUgKmV0bmF2aXZfZ2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiAgIAlyZXR1cm4gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKG9iai0+ZGV2LCBldG5h dml2X29iai0+cGFnZXMsIG5wYWdlcyk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqZXRuYXZpdl9nZW1f cHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAraW50IGV0bmF2aXZfZ2Vt X3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21h cCAqbWFwKQo+ICAgewo+IC0JcmV0dXJuIGV0bmF2aXZfZ2VtX3ZtYXAob2JqKTsKPiArCXZvaWQg KnZhZGRyID0gZXRuYXZpdl9nZW1fdm1hcChvYmopOwo+ICsJaWYgKCF2YWRkcikKPiArCQlyZXR1 cm4gLUVOT01FTTsKPiArCWRtYV9idWZfbWFwX3NldF92YWRkcihtYXAsIHZhZGRyKTsKPiArCj4g KwlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+ICAgaW50IGV0bmF2aXZfZ2VtX3ByaW1lX21tYXAoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5jCj4gaW5kZXgg MTEyMjNmZTM0OGRmLi44MzJlNTI4MGE2ZWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2xpbWEvbGltYV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmMK PiBAQCAtMTgyLDE0ICsxODIsMTQgQEAgc3RhdGljIGludCBsaW1hX2dlbV9waW4oc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmopCj4gICAJcmV0dXJuIGRybV9nZW1fc2htZW1fcGluKG9iaik7Cj4g ICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgKmxpbWFfZ2VtX3ZtYXAoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmopCj4gK3N0YXRpYyBpbnQgbGltYV9nZW1fdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IGxpbWFf Ym8gKmJvID0gdG9fbGltYV9ibyhvYmopOwo+ICAgCj4gICAJaWYgKGJvLT5oZWFwX3NpemUpCj4g LQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gICAKPiAt CXJldHVybiBkcm1fZ2VtX3NobWVtX3ZtYXAob2JqKTsKPiArCXJldHVybiBkcm1fZ2VtX3NobWVt X3ZtYXAob2JqLCBtYXApOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW50IGxpbWFfZ2VtX21tYXAo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMgYi9kcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMKPiBpbmRleCBkYzZkZjllOWE0MGQuLmEwNzBhODVm OGYzNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMKPiBAQCAtMSw2ICsxLDcgQEAK PiAgIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAo+ICAgLyogQ29w eXJpZ2h0IDIwMTctMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KPiAgIAo+ICsj aW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9rdGhyZWFk Lmg+Cj4gICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3ZtYWxs b2MuaD4KPiBAQCAtMzAzLDYgKzMwNCw4IEBAIHN0YXRpYyB2b2lkIGxpbWFfc2NoZWRfYnVpbGRf ZXJyb3JfdGFza19saXN0KHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2spCj4gICAJc3RydWN0 IGxpbWFfZHVtcF9jaHVua19idWZmZXIgKmJ1ZmZlcl9jaHVuazsKPiAgIAl1MzIgc2l6ZSwgdGFz a19zaXplLCBtZW1fc2l6ZTsKPiAgIAlpbnQgaTsKPiArCXN0cnVjdCBkbWFfYnVmX21hcCBtYXA7 Cj4gKwlpbnQgcmV0Owo+ICAgCj4gICAJbXV0ZXhfbG9jaygmZGV2LT5lcnJvcl90YXNrX2xpc3Rf bG9jayk7Cj4gICAKPiBAQCAtMzg4LDE1ICszOTEsMTUgQEAgc3RhdGljIHZvaWQgbGltYV9zY2hl ZF9idWlsZF9lcnJvcl90YXNrX2xpc3Qoc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzaykKPiAg IAkJfSBlbHNlIHsKPiAgIAkJCWJ1ZmZlcl9jaHVuay0+c2l6ZSA9IGxpbWFfYm9fc2l6ZShibyk7 Cj4gICAKPiAtCQkJZGF0YSA9IGRybV9nZW1fc2htZW1fdm1hcCgmYm8tPmJhc2UuYmFzZSk7Cj4g LQkJCWlmIChJU19FUlJfT1JfTlVMTChkYXRhKSkgewo+ICsJCQlyZXQgPSBkcm1fZ2VtX3NobWVt X3ZtYXAoJmJvLT5iYXNlLmJhc2UsICZtYXApOwo+ICsJCQlpZiAocmV0KSB7Cj4gICAJCQkJa3Zm cmVlKGV0KTsKPiAgIAkJCQlnb3RvIG91dDsKPiAgIAkJCX0KPiAgIAo+IC0JCQltZW1jcHkoYnVm ZmVyX2NodW5rICsgMSwgZGF0YSwgYnVmZmVyX2NodW5rLT5zaXplKTsKPiArCQkJbWVtY3B5KGJ1 ZmZlcl9jaHVuayArIDEsIG1hcC52YWRkciwgYnVmZmVyX2NodW5rLT5zaXplKTsKPiAgIAo+IC0J CQlkcm1fZ2VtX3NobWVtX3Z1bm1hcCgmYm8tPmJhc2UuYmFzZSwgZGF0YSk7Cj4gKwkJCWRybV9n ZW1fc2htZW1fdnVubWFwKCZiby0+YmFzZS5iYXNlLCAmbWFwKTsKPiAgIAkJfQo+ICAgCj4gICAJ CWJ1ZmZlcl9jaHVuayA9ICh2b2lkICopKGJ1ZmZlcl9jaHVuayArIDEpICsgYnVmZmVyX2NodW5r LT5zaXplOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX21v ZGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2FnMjAwL21nYWcyMDBfbW9kZS5jCj4gaW5kZXggMzg2 NzJmOWU1YzRmLi44ZWY3Njc2OWI5N2YgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21n YWcyMDAvbWdhZzIwMF9tb2RlLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2Fn MjAwX21vZGUuYwo+IEBAIC05LDYgKzksNyBAQAo+ICAgICovCj4gICAKPiAgICNpbmNsdWRlIDxs aW51eC9kZWxheS5oPgo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiAgIAo+ICAg I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICAgI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljX3N0YXRlX2hlbHBlci5oPgo+IEBAIC0xNTU2LDE1ICsxNTU3LDE4IEBAIG1nYWcyMDBf aGFuZGxlX2RhbWFnZShzdHJ1Y3QgbWdhX2RldmljZSAqbWRldiwgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsCj4gICAJCSAgICAgIHN0cnVjdCBkcm1fcmVjdCAqY2xpcCkKPiAgIHsKPiAgIAlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJm1kZXYtPmJhc2U7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9t YXAgbWFwOwo+ICAgCXZvaWQgKnZtYXA7Cj4gKwlpbnQgcmV0Owo+ICAgCj4gLQl2bWFwID0gZHJt X2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0pOwo+IC0JaWYgKGRybV9XQVJOX09OKGRldiwgIXZt YXApKQo+ICsJcmV0ID0gZHJtX2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0sICZtYXApOwo+ICsJ aWYgKGRybV9XQVJOX09OKGRldiwgcmV0KSkKPiAgIAkJcmV0dXJuOyAvKiBCVUc6IFNITUVNIEJP IHNob3VsZCBhbHdheXMgYmUgdm1hcHBlZCAqLwo+ICsJdm1hcCA9IG1hcC52YWRkcjsgLyogVE9E TzogVXNlIG1hcHBpbmcgYWJzdHJhY3Rpb24gcHJvcGVybHkgKi8KPiAgIAo+ICAgCWRybV9mYl9t ZW1jcHlfZHN0Y2xpcChtZGV2LT52cmFtLCB2bWFwLCBmYiwgY2xpcCk7Cj4gICAKPiAtCWRybV9n ZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sIHZtYXApOwo+ICsJZHJtX2dlbV9zaG1lbV92dW5t YXAoZmItPm9ialswXSwgJm1hcCk7Cj4gICAKPiAgIAkvKiBBbHdheXMgc2Nhbm91dCBpbWFnZSBh dCBWUkFNIG9mZnNldCAwICovCj4gICAJbWdhZzIwMF9zZXRfc3RhcnRhZGQobWRldiwgKHUzMikw KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZyBiL2RyaXZl cnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWcKPiBpbmRleCA1ZGVjMWU1Njk0YjcuLjk0MzYzMTBk MDg1NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZwo+IEBAIC02LDYgKzYsNyBAQCBjb25m aWcgRFJNX05PVVZFQVUKPiAgIAlzZWxlY3QgRldfTE9BREVSCj4gICAJc2VsZWN0IERSTV9LTVNf SEVMUEVSCj4gICAJc2VsZWN0IERSTV9UVE0KPiArCXNlbGVjdCBEUk1fVFRNX0hFTFBFUgo+ICAg CXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFIGlmIERSTV9OT1VWRUFVX0JBQ0tMSUdIVAo+ ICAgCXNlbGVjdCBBQ1BJX1ZJREVPIGlmIEFDUEkgJiYgWDg2ICYmIEJBQ0tMSUdIVF9DTEFTU19E RVZJQ0UgJiYgSU5QVVQKPiAgIAlzZWxlY3QgWDg2X1BMQVRGT1JNX0RFVklDRVMgaWYgQUNQSSAm JiBYODYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5o IGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5oCj4gaW5kZXggNjQxZWY2Mjk4 YTBlLi42MDQ1Yjg1YTc2MmEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUv bm91dmVhdV9iby5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5o Cj4gQEAgLTM5LDggKzM5LDYgQEAgc3RydWN0IG5vdXZlYXVfYm8gewo+ICAgCXVuc2lnbmVkIG1v ZGU7Cj4gICAKPiAgIAlzdHJ1Y3Qgbm91dmVhdV9kcm1fdGlsZSAqdGlsZTsKPiAtCj4gLQlzdHJ1 Y3QgdHRtX2JvX2ttYXBfb2JqIGRtYV9idWZfdm1hcDsKPiAgIH07Cj4gICAKPiAgIHN0YXRpYyBp bmxpbmUgc3RydWN0IG5vdXZlYXVfYm8gKgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bm91dmVhdS9ub3V2ZWF1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9n ZW0uYwo+IGluZGV4IDlhNDIxYzM5NDlkZS4uZjk0MmI1MjZiMGE1IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCj4gQEAgLTI0LDYgKzI0LDggQEAKPiAgICAqCj4gICAg Ki8KPiAgIAo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdHRtX2hlbHBlci5oPgo+ICsKPiAgICNp bmNsdWRlICJub3V2ZWF1X2Rydi5oIgo+ICAgI2luY2x1ZGUgIm5vdXZlYXVfZG1hLmgiCj4gICAj aW5jbHVkZSAibm91dmVhdV9mZW5jZS5oIgo+IEBAIC0xNzYsOCArMTc4LDggQEAgY29uc3Qgc3Ry dWN0IGRybV9nZW1fb2JqZWN0X2Z1bmNzIG5vdXZlYXVfZ2VtX29iamVjdF9mdW5jcyA9IHsKPiAg IAkucGluID0gbm91dmVhdV9nZW1fcHJpbWVfcGluLAo+ICAgCS51bnBpbiA9IG5vdXZlYXVfZ2Vt X3ByaW1lX3VucGluLAo+ICAgCS5nZXRfc2dfdGFibGUgPSBub3V2ZWF1X2dlbV9wcmltZV9nZXRf c2dfdGFibGUsCj4gLQkudm1hcCA9IG5vdXZlYXVfZ2VtX3ByaW1lX3ZtYXAsCj4gLQkudnVubWFw ID0gbm91dmVhdV9nZW1fcHJpbWVfdnVubWFwLAo+ICsJLnZtYXAgPSBkcm1fZ2VtX3R0bV92bWFw LAo+ICsJLnZ1bm1hcCA9IGRybV9nZW1fdHRtX3Z1bm1hcCwKPiAgIH07Cj4gICAKPiAgIGludAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5oIGIvZHJp dmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uaAo+IGluZGV4IGIzNWMxODAzMjJlMi4u M2I5MTljN2M5MzFjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZl YXVfZ2VtLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5oCj4g QEAgLTM3LDcgKzM3LDUgQEAgZXh0ZXJuIHZvaWQgbm91dmVhdV9nZW1fcHJpbWVfdW5waW4oc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICopOwo+ICAgZXh0ZXJuIHN0cnVjdCBzZ190YWJsZSAqbm91dmVh dV9nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKTsKPiAgIGV4 dGVybiBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm5vdXZlYXVfZ2VtX3ByaW1lX2ltcG9ydF9zZ190 YWJsZSgKPiAgIAlzdHJ1Y3QgZHJtX2RldmljZSAqLCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50 ICosIHN0cnVjdCBzZ190YWJsZSAqKTsKPiAtZXh0ZXJuIHZvaWQgKm5vdXZlYXVfZ2VtX3ByaW1l X3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICopOwo+IC1leHRlcm4gdm9pZCBub3V2ZWF1X2dl bV9wcmltZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICosIHZvaWQgKik7Cj4gICAKPiAg ICNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3By aW1lLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ByaW1lLmMKPiBpbmRleCBh ODI2NGFlYmYzZDQuLjJmMTZiNTI0OTI4MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v bm91dmVhdS9ub3V2ZWF1X3ByaW1lLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9u b3V2ZWF1X3ByaW1lLmMKPiBAQCAtMzUsMjYgKzM1LDYgQEAgc3RydWN0IHNnX3RhYmxlICpub3V2 ZWF1X2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4g ICAJcmV0dXJuIGRybV9wcmltZV9wYWdlc190b19zZyhvYmotPmRldiwgbnZiby0+Ym8udHRtLT5w YWdlcywgbnBhZ2VzKTsKPiAgIH0KPiAgIAo+IC12b2lkICpub3V2ZWF1X2dlbV9wcmltZV92bWFw KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+IC17Cj4gLQlzdHJ1Y3Qgbm91dmVhdV9ibyAq bnZibyA9IG5vdXZlYXVfZ2VtX29iamVjdChvYmopOwo+IC0JaW50IHJldDsKPiAtCj4gLQlyZXQg PSB0dG1fYm9fa21hcCgmbnZiby0+Ym8sIDAsIG52Ym8tPmJvLm51bV9wYWdlcywKPiAtCQkJICAm bnZiby0+ZG1hX2J1Zl92bWFwKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0 KTsKPiAtCj4gLQlyZXR1cm4gbnZiby0+ZG1hX2J1Zl92bWFwLnZpcnR1YWw7Cj4gLX0KPiAtCj4g LXZvaWQgbm91dmVhdV9nZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LCB2b2lkICp2YWRkcikKPiAtewo+IC0Jc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8gPSBub3V2ZWF1 X2dlbV9vYmplY3Qob2JqKTsKPiAtCj4gLQl0dG1fYm9fa3VubWFwKCZudmJvLT5kbWFfYnVmX3Zt YXApOwo+IC19Cj4gLQo+ICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpub3V2ZWF1X2dlbV9wcmlt ZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJCQkJCQkgc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+ICAgCQkJCQkJCSBzdHJ1Y3Qgc2dfdGFi bGUgKnNnKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rf cGVyZmNudC5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X3BlcmZjbnQuYwo+ IGluZGV4IGZkYmM4ZDk0OTEzNS4uNWFiMDNkNjA1ZjU3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9wZXJmY250LmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vcGFuZnJvc3QvcGFuZnJvc3RfcGVyZmNudC5jCj4gQEAgLTUsNiArNSw3IEBACj4gICAjaW5j bHVkZSA8ZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmg+Cj4gICAjaW5jbHVkZSA8ZHJtL3BhbmZy b3N0X2RybS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KPiArI2luY2x1ZGUg PGxpbnV4L2RtYS1idWYtbWFwLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Cj4gICAj aW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K PiBAQCAtNzIsNiArNzMsNyBAQCBzdGF0aWMgaW50IHBhbmZyb3N0X3BlcmZjbnRfZW5hYmxlX2xv Y2tlZChzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiwKPiAgIHsKPiAgIAlzdHJ1Y3QgcGFu ZnJvc3RfZmlsZV9wcml2ICp1c2VyID0gZmlsZV9wcml2LT5kcml2ZXJfcHJpdjsKPiAgIAlzdHJ1 Y3QgcGFuZnJvc3RfcGVyZmNudCAqcGVyZmNudCA9IHBmZGV2LT5wZXJmY250Owo+ICsJc3RydWN0 IGRtYV9idWZfbWFwIG1hcDsKPiAgIAlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKmJvOwo+ ICAgCXUzMiBjZmcsIGFzOwo+ICAgCWludCByZXQ7Cj4gQEAgLTEwMywxMSArMTA1LDEwIEBAIHN0 YXRpYyBpbnQgcGFuZnJvc3RfcGVyZmNudF9lbmFibGVfbG9ja2VkKHN0cnVjdCBwYW5mcm9zdF9k ZXZpY2UgKnBmZGV2LAo+ICAgCQlnb3RvIGVycl9jbG9zZV9ibzsKPiAgIAl9Cj4gICAKPiAtCXBl cmZjbnQtPmJ1ZiA9IGRybV9nZW1fc2htZW1fdm1hcCgmYm8tPmJhc2UpOwo+IC0JaWYgKElTX0VS UihwZXJmY250LT5idWYpKSB7Cj4gLQkJcmV0ID0gUFRSX0VSUihwZXJmY250LT5idWYpOwo+ICsJ cmV0ID0gZHJtX2dlbV9zaG1lbV92bWFwKCZiby0+YmFzZSwgJm1hcCk7Cj4gKwlpZiAocmV0KQo+ ICAgCQlnb3RvIGVycl9wdXRfbWFwcGluZzsKPiAtCX0KPiArCXBlcmZjbnQtPmJ1ZiA9IG1hcC52 YWRkcjsKPiAgIAo+ICAgCS8qCj4gICAJICogSW52YWxpZGF0ZSB0aGUgY2FjaGUgYW5kIGNsZWFy IHRoZSBjb3VudGVycyB0byBzdGFydCBmcm9tIGEgZnJlc2gKPiBAQCAtMTYzLDcgKzE2NCw3IEBA IHN0YXRpYyBpbnQgcGFuZnJvc3RfcGVyZmNudF9lbmFibGVfbG9ja2VkKHN0cnVjdCBwYW5mcm9z dF9kZXZpY2UgKnBmZGV2LAo+ICAgCXJldHVybiAwOwo+ICAgCj4gICBlcnJfdnVubWFwOgo+IC0J ZHJtX2dlbV9zaG1lbV92dW5tYXAoJmJvLT5iYXNlLCBwZXJmY250LT5idWYpOwo+ICsJZHJtX2dl bV9zaG1lbV92dW5tYXAoJmJvLT5iYXNlLCAmbWFwKTsKPiAgIGVycl9wdXRfbWFwcGluZzoKPiAg IAlwYW5mcm9zdF9nZW1fbWFwcGluZ19wdXQocGVyZmNudC0+bWFwcGluZyk7Cj4gICBlcnJfY2xv c2VfYm86Cj4gQEAgLTE4MCw2ICsxODEsNyBAQCBzdGF0aWMgaW50IHBhbmZyb3N0X3BlcmZjbnRf ZGlzYWJsZV9sb2NrZWQoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYsCj4gICB7Cj4gICAJ c3RydWN0IHBhbmZyb3N0X2ZpbGVfcHJpdiAqdXNlciA9IGZpbGVfcHJpdi0+ZHJpdmVyX3ByaXY7 Cj4gICAJc3RydWN0IHBhbmZyb3N0X3BlcmZjbnQgKnBlcmZjbnQgPSBwZmRldi0+cGVyZmNudDsK PiArCXN0cnVjdCBkbWFfYnVmX21hcCBtYXAgPSBETUFfQlVGX01BUF9JTklUX1ZBRERSKHBlcmZj bnQtPmJ1Zik7Cj4gICAKPiAgIAlpZiAodXNlciAhPSBwZXJmY250LT51c2VyKQo+ICAgCQlyZXR1 cm4gLUVJTlZBTDsKPiBAQCAtMTkyLDcgKzE5NCw3IEBAIHN0YXRpYyBpbnQgcGFuZnJvc3RfcGVy ZmNudF9kaXNhYmxlX2xvY2tlZChzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiwKPiAgIAkJ ICBHUFVfUEVSRkNOVF9DRkdfTU9ERShHUFVfUEVSRkNOVF9DRkdfTU9ERV9PRkYpKTsKPiAgIAo+ ICAgCXBlcmZjbnQtPnVzZXIgPSBOVUxMOwo+IC0JZHJtX2dlbV9zaG1lbV92dW5tYXAoJnBlcmZj bnQtPm1hcHBpbmctPm9iai0+YmFzZS5iYXNlLCBwZXJmY250LT5idWYpOwo+ICsJZHJtX2dlbV9z aG1lbV92dW5tYXAoJnBlcmZjbnQtPm1hcHBpbmctPm9iai0+YmFzZS5iYXNlLCAmbWFwKTsKPiAg IAlwZXJmY250LT5idWYgPSBOVUxMOwo+ICAgCXBhbmZyb3N0X2dlbV9jbG9zZSgmcGVyZmNudC0+ bWFwcGluZy0+b2JqLT5iYXNlLmJhc2UsIGZpbGVfcHJpdik7Cj4gICAJcGFuZnJvc3RfbW11X2Fz X3B1dChwZmRldiwgcGVyZmNudC0+bWFwcGluZy0+bW11KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3F4bC9xeGxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZGlz cGxheS5jCj4gaW5kZXggNDVmZDc2ZTA0YmRjLi5lMTY1ZmE5YjIwODkgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZGlzcGxheS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfZGlzcGxheS5jCj4gQEAgLTI1LDYgKzI1LDcgQEAKPiAgIAo+ICAgI2luY2x1ZGUg PGxpbnV4L2NyYzMyLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2RtYS1idWYtbWFwLmg+Cj4gICAKPiAgICNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgo+ ICAgI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gQEAgLTU4MSw2ICs1ODIsOCBAQCBzdGF0 aWMgdm9pZCBxeGxfY3Vyc29yX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs Cj4gICAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gICAJc3RydWN0IHF4bF9ibyAqY3Vy c29yX2JvID0gTlVMTCwgKnVzZXJfYm8gPSBOVUxMLCAqb2xkX2N1cnNvcl9ibyA9IE5VTEw7Cj4g ICAJaW50IHJldDsKPiArCXN0cnVjdCBkbWFfYnVmX21hcCB1c2VyX21hcDsKPiArCXN0cnVjdCBk bWFfYnVmX21hcCBjdXJzb3JfbWFwOwo+ICAgCXZvaWQgKnVzZXJfcHRyOwo+ICAgCWludCBzaXpl ID0gNjQqNjQqNDsKPiAgIAo+IEBAIC01OTUsOSArNTk4LDEwIEBAIHN0YXRpYyB2b2lkIHF4bF9j dXJzb3JfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgIAkJdXNlcl9i byA9IGdlbV90b19xeGxfYm8ob2JqKTsKPiAgIAo+ICAgCQkvKiBwaW5uaW5nIGlzIGRvbmUgaW4g dGhlIHByZXBhcmUvY2xlYW51cCBmcmFtZXZidWZmZXIgKi8KPiAtCQlyZXQgPSBxeGxfYm9fa21h cCh1c2VyX2JvLCAmdXNlcl9wdHIpOwo+ICsJCXJldCA9IHF4bF9ib19rbWFwKHVzZXJfYm8sICZ1 c2VyX21hcCk7Cj4gICAJCWlmIChyZXQpCj4gICAJCQlnb3RvIG91dF9mcmVlX3JlbGVhc2U7Cj4g KwkJdXNlcl9wdHIgPSB1c2VyX21hcC52YWRkcjsgLyogVE9ETzogVXNlIG1hcHBpbmcgYWJzdHJh Y3Rpb24gcHJvcGVybHkgKi8KPiAgIAo+ICAgCQlyZXQgPSBxeGxfYWxsb2NfYm9fcmVzZXJ2ZWQo cWRldiwgcmVsZWFzZSwKPiAgIAkJCQkJICAgIHNpemVvZihzdHJ1Y3QgcXhsX2N1cnNvcikgKyBz aXplLAo+IEBAIC02MTMsNyArNjE3LDcgQEAgc3RhdGljIHZvaWQgcXhsX2N1cnNvcl9hdG9taWNf dXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCQlpZiAocmV0KQo+ICAgCQkJZ290 byBvdXRfdW5waW47Cj4gICAKPiAtCQlyZXQgPSBxeGxfYm9fa21hcChjdXJzb3JfYm8sICh2b2lk ICoqKSZjdXJzb3IpOwo+ICsJCXJldCA9IHF4bF9ib19rbWFwKGN1cnNvcl9ibywgJmN1cnNvcl9t YXApOwo+ICAgCQlpZiAocmV0KQo+ICAgCQkJZ290byBvdXRfYmFja29mZjsKPiAgIAo+IEBAIC0x MTMzLDYgKzExMzcsNyBAQCBpbnQgcXhsX2NyZWF0ZV9tb25pdG9yc19vYmplY3Qoc3RydWN0IHF4 bF9kZXZpY2UgKnFkZXYpCj4gICB7Cj4gICAJaW50IHJldDsKPiAgIAlzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKmdvYmo7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICAgCWludCBtb25pdG9y c19jb25maWdfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcXhsX21vbml0b3JzX2NvbmZpZykgKwo+ICAg CQlxeGxfbnVtX2NydGMgKiBzaXplb2Yoc3RydWN0IHF4bF9oZWFkKTsKPiAgIAo+IEBAIC0xMTQ5 LDcgKzExNTQsNyBAQCBpbnQgcXhsX2NyZWF0ZV9tb25pdG9yc19vYmplY3Qoc3RydWN0IHF4bF9k ZXZpY2UgKnFkZXYpCj4gICAJaWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPiAgIAo+IC0JcXhs X2JvX2ttYXAocWRldi0+bW9uaXRvcnNfY29uZmlnX2JvLCBOVUxMKTsKPiArCXF4bF9ib19rbWFw KHFkZXYtPm1vbml0b3JzX2NvbmZpZ19ibywgJm1hcCk7Cj4gICAKPiAgIAlxZGV2LT5tb25pdG9y c19jb25maWcgPSBxZGV2LT5tb25pdG9yc19jb25maWdfYm8tPmtwdHI7Cj4gICAJcWRldi0+cmFt X2hlYWRlci0+bW9uaXRvcnNfY29uZmlnID0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfZHJhdy5jIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJhdy5jCj4gaW5kZXgg MzU5OWRiMDk2OTczLi43YjdhY2I5MTA3ODAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfZHJhdy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJhdy5jCj4g QEAgLTIwLDYgKzIwLDggQEAKPiAgICAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gICAgKi8KPiAgIAo+ ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiArCj4gICAjaW5jbHVkZSA8ZHJtL2Ry bV9mb3VyY2MuaD4KPiAgIAo+ICAgI2luY2x1ZGUgInF4bF9kcnYuaCIKPiBAQCAtNDIsMTMgKzQ0 LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcXhsX3JlY3QgKmRyYXdhYmxlX3NldF9jbGlwcGluZyhzdHJ1 Y3QgcXhsX2RldmljZSAqcWRldiwKPiAgIAkJCQkJICAgICAgdW5zaWduZWQgaW50IG51bV9jbGlw cywKPiAgIAkJCQkJICAgICAgc3RydWN0IHF4bF9ibyAqY2xpcHNfYm8pCj4gICB7Cj4gKwlzdHJ1 Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICAgCXN0cnVjdCBxeGxfY2xpcF9yZWN0cyAqZGV2X2NsaXBz Owo+ICAgCWludCByZXQ7Cj4gICAKPiAtCXJldCA9IHF4bF9ib19rbWFwKGNsaXBzX2JvLCAodm9p ZCAqKikmZGV2X2NsaXBzKTsKPiAtCWlmIChyZXQpIHsKPiArCXJldCA9IHF4bF9ib19rbWFwKGNs aXBzX2JvLCAmbWFwKTsKPiArCWlmIChyZXQpCj4gICAJCXJldHVybiBOVUxMOwo+IC0JfQo+ICsJ ZGV2X2NsaXBzID0gbWFwLnZhZGRyOyAvKiBUT0RPOiBVc2UgbWFwcGluZyBhYnN0cmFjdGlvbiBw cm9wZXJseSAqLwo+ICsKPiAgIAlkZXZfY2xpcHMtPm51bV9yZWN0cyA9IG51bV9jbGlwczsKPiAg IAlkZXZfY2xpcHMtPmNodW5rLm5leHRfY2h1bmsgPSAwOwo+ICAgCWRldl9jbGlwcy0+Y2h1bmsu cHJldl9jaHVuayA9IDA7Cj4gQEAgLTE0Miw2ICsxNDYsNyBAQCB2b2lkIHF4bF9kcmF3X2RpcnR5 X2ZiKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAo+ICAgCWludCBzdHJpZGUgPSBmYi0+cGl0Y2hl c1swXTsKPiAgIAkvKiBkZXB0aCBpcyBub3QgYWN0dWFsbHkgaW50ZXJlc3RpbmcsIHdlIGRvbid0 IG1hc2sgd2l0aCBpdCAqLwo+ICAgCWludCBkZXB0aCA9IGZiLT5mb3JtYXQtPmNwcFswXSAqIDg7 Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgc3VyZmFjZV9tYXA7Cj4gICAJdWludDhfdCAqc3VyZmFj ZV9iYXNlOwo+ICAgCXN0cnVjdCBxeGxfcmVsZWFzZSAqcmVsZWFzZTsKPiAgIAlzdHJ1Y3QgcXhs X2JvICpjbGlwc19ibzsKPiBAQCAtMTk3LDkgKzIwMiwxMCBAQCB2b2lkIHF4bF9kcmF3X2RpcnR5 X2ZiKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAo+ICAgCWlmIChyZXQpCj4gICAJCWdvdG8gb3V0 X3JlbGVhc2VfYmFja29mZjsKPiAgIAo+IC0JcmV0ID0gcXhsX2JvX2ttYXAoYm8sICh2b2lkICoq KSZzdXJmYWNlX2Jhc2UpOwo+ICsJcmV0ID0gcXhsX2JvX2ttYXAoYm8sICZzdXJmYWNlX21hcCk7 Cj4gICAJaWYgKHJldCkKPiAgIAkJZ290byBvdXRfcmVsZWFzZV9iYWNrb2ZmOwo+ICsJc3VyZmFj ZV9iYXNlID0gc3VyZmFjZV9tYXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0 aW9uIHByb3Blcmx5ICovCj4gICAKPiAgIAlyZXQgPSBxeGxfaW1hZ2VfaW5pdChxZGV2LCByZWxl YXNlLCBkaW1hZ2UsIHN1cmZhY2VfYmFzZSwKPiAgIAkJCSAgICAgbGVmdCAtIGR1bWJfc2hhZG93 X29mZnNldCwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJ2LmggYi9k cml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kcnYuaAo+IGluZGV4IDM2MDJlOGIzNDE4OS4uZWI0Mzdm ZWE1ZDllIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX2Rydi5oCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJ2LmgKPiBAQCAtMzAsNiArMzAsNyBAQAo+ICAg ICogRGVmaW5pdGlvbnMgdGFrZW4gZnJvbSBzcGljZS1wcm90b2NvbCwgcGx1cyBrZXJuZWwgZHJp dmVyIHNwZWNpZmljIGJpdHMuCj4gICAgKi8KPiAgIAo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1 Zi1tYXAuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UuaD4KPiAgICNpbmNsdWRlIDxs aW51eC9maXJtd2FyZS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ IEBAIC01MCw2ICs1MSw4IEBACj4gICAKPiAgICNpbmNsdWRlICJxeGxfZGV2LmgiCj4gICAKPiAr c3RydWN0IGRtYV9idWZfbWFwOwo+ICsKPiAgICNkZWZpbmUgRFJJVkVSX0FVVEhPUgkJIkRhdmUg QWlybGllIgo+ICAgCj4gICAjZGVmaW5lIERSSVZFUl9OQU1FCQkicXhsIgo+IEBAIC03OSw3ICs4 Miw3IEBAIHN0cnVjdCBxeGxfYm8gewo+ICAgCS8qIFByb3RlY3RlZCBieSB0Ym8ucmVzZXJ2ZWQg Ki8KPiAgIAlzdHJ1Y3QgdHRtX3BsYWNlCQlwbGFjZW1lbnRzWzNdOwo+ICAgCXN0cnVjdCB0dG1f cGxhY2VtZW50CQlwbGFjZW1lbnQ7Cj4gLQlzdHJ1Y3QgdHRtX2JvX2ttYXBfb2JqCQlrbWFwOwo+ ICsJc3RydWN0IGRtYV9idWZfbWFwCQltYXA7Cj4gICAJdm9pZAkJCQkqa3B0cjsKPiAgIAl1bnNp Z25lZCBpbnQgICAgICAgICAgICAgICAgICAgIG1hcF9jb3VudDsKPiAgIAlpbnQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHR5cGU7Cj4gQEAgLTMzNSw3ICszMzgsNiBAQCBpbnQgcXhsX2dl bV9vYmplY3Rfb3BlbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYpOwo+ICAgdm9pZCBxeGxfZ2VtX29iamVjdF9jbG9zZShzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiwKPiAgIAkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwo+ICAg dm9pZCBxeGxfYm9fZm9yY2VfZGVsZXRlKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2KTsKPiAtaW50 IHF4bF9ib19rbWFwKHN0cnVjdCBxeGxfYm8gKmJvLCB2b2lkICoqcHRyKTsKPiAgIAo+ICAgLyog cXhsX2R1bWIuYyAqLwo+ICAgaW50IHF4bF9tb2RlX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2LAo+IEBAIC00NDUsOCArNDQ3LDkgQEAgc3RydWN0IHNnX3RhYmxlICpxeGxf Z2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gICBz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnF4bF9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKAo+ICAg CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFj aCwKPiAgIAlzdHJ1Y3Qgc2dfdGFibGUgKnNndCk7Cj4gLXZvaWQgKnF4bF9nZW1fcHJpbWVfdm1h cChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gLXZvaWQgcXhsX2dlbV9wcmltZV92dW5t YXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHZvaWQgKnZhZGRyKTsKPiAraW50IHF4bF9n ZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZf bWFwICptYXApOwo+ICt2b2lkIHF4bF9nZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqLAo+ICsJCQkgIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIGludCBxeGxf Z2VtX3ByaW1lX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCj4gICAJCQkJc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9xeGwvcXhsX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfb2JqZWN0LmMKPiBp bmRleCA5NDBlOTkzNTRmNDkuLjc1NWRmNGQ4Zjk1ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vcXhsL3F4bF9vYmplY3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX29i amVjdC5jCj4gQEAgLTIzLDEwICsyMywxMiBAQAo+ICAgICogICAgICAgICAgQWxvbiBMZXZ5Cj4g ICAgKi8KPiAgIAo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2lvLW1hcHBpbmcuaD4KPiArCj4gICAjaW5jbHVkZSAicXhsX2Rydi5oIgo+ICAgI2lu Y2x1ZGUgInF4bF9vYmplY3QuaCIKPiAgIAo+IC0jaW5jbHVkZSA8bGludXgvaW8tbWFwcGluZy5o Pgo+ICAgc3RhdGljIHZvaWQgcXhsX3R0bV9ib19kZXN0cm95KHN0cnVjdCB0dG1fYnVmZmVyX29i amVjdCAqdGJvKQo+ICAgewo+ICAgCXN0cnVjdCBxeGxfYm8gKmJvOwo+IEBAIC0xNTIsMjQgKzE1 NCwyNyBAQCBpbnQgcXhsX2JvX2NyZWF0ZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKPiAgIAly ZXR1cm4gMDsKPiAgIH0KPiAgIAo+IC1pbnQgcXhsX2JvX2ttYXAoc3RydWN0IHF4bF9ibyAqYm8s IHZvaWQgKipwdHIpCj4gK2ludCBxeGxfYm9fa21hcChzdHJ1Y3QgcXhsX2JvICpibywgc3RydWN0 IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gLQlib29sIGlzX2lvbWVtOwo+ICAgCWludCByOwo+ ICAgCj4gICAJaWYgKGJvLT5rcHRyKSB7Cj4gLQkJaWYgKHB0cikKPiAtCQkJKnB0ciA9IGJvLT5r cHRyOwo+ICAgCQliby0+bWFwX2NvdW50Kys7Cj4gLQkJcmV0dXJuIDA7Cj4gKwkJZ290byBvdXQ7 Cj4gICAJfQo+IC0JciA9IHR0bV9ib19rbWFwKCZiby0+dGJvLCAwLCBiby0+dGJvLm51bV9wYWdl cywgJmJvLT5rbWFwKTsKPiArCXIgPSB0dG1fYm9fdm1hcCgmYm8tPnRibywgJmJvLT5tYXApOwo+ ICAgCWlmIChyKQo+ICAgCQlyZXR1cm4gcjsKPiAtCWJvLT5rcHRyID0gdHRtX2ttYXBfb2JqX3Zp cnR1YWwoJmJvLT5rbWFwLCAmaXNfaW9tZW0pOwo+IC0JaWYgKHB0cikKPiAtCQkqcHRyID0gYm8t PmtwdHI7Cj4gICAJYm8tPm1hcF9jb3VudCA9IDE7Cj4gKwo+ICsJLyogVE9ETzogUmVtb3ZlIGtw dHIgaW4gZmF2b3Igb2YgbWFwIGV2ZXJ5d2hlcmUuICovCj4gKwlpZiAoYm8tPm1hcC5pc19pb21l bSkKPiArCQliby0+a3B0ciA9ICh2b2lkICopYm8tPm1hcC52YWRkcl9pb21lbTsKPiArCWVsc2UK PiArCQliby0+a3B0ciA9IGJvLT5tYXAudmFkZHI7Cj4gKwo+ICtvdXQ6Cj4gKwkqbWFwID0gYm8t Pm1hcDsKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IEBAIC0xODAsNiArMTg1LDcgQEAgdm9p ZCAqcXhsX2JvX2ttYXBfYXRvbWljX3BhZ2Uoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsCj4gICAJ dm9pZCAqcnB0cjsKPiAgIAlpbnQgcmV0Owo+ICAgCXN0cnVjdCBpb19tYXBwaW5nICptYXA7Cj4g KwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgYm9fbWFwOwo+ICAgCj4gICAJaWYgKGJvLT50Ym8ubWVtLm1l bV90eXBlID09IFRUTV9QTF9WUkFNKQo+ICAgCQltYXAgPSBxZGV2LT52cmFtX21hcHBpbmc7Cj4g QEAgLTE5Niw5ICsyMDIsMTAgQEAgdm9pZCAqcXhsX2JvX2ttYXBfYXRvbWljX3BhZ2Uoc3RydWN0 IHF4bF9kZXZpY2UgKnFkZXYsCj4gICAJCXJldHVybiBycHRyOwo+ICAgCX0KPiAgIAo+IC0JcmV0 ID0gcXhsX2JvX2ttYXAoYm8sICZycHRyKTsKPiArCXJldCA9IHF4bF9ib19rbWFwKGJvLCAmYm9f bWFwKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gTlVMTDsKPiArCXJwdHIgPSBib19tYXAu dmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4gICAK PiAgIAlycHRyICs9IHBhZ2Vfb2Zmc2V0ICogUEFHRV9TSVpFOwo+ICAgCXJldHVybiBycHRyOwo+ IEBAIC0yMTIsNyArMjE5LDcgQEAgdm9pZCBxeGxfYm9fa3VubWFwKHN0cnVjdCBxeGxfYm8gKmJv KQo+ICAgCWlmIChiby0+bWFwX2NvdW50ID4gMCkKPiAgIAkJcmV0dXJuOwo+ICAgCWJvLT5rcHRy ID0gTlVMTDsKPiAtCXR0bV9ib19rdW5tYXAoJmJvLT5rbWFwKTsKPiArCXR0bV9ib192dW5tYXAo JmJvLT50Ym8sICZiby0+bWFwKTsKPiAgIH0KPiAgIAo+ICAgdm9pZCBxeGxfYm9fa3VubWFwX2F0 b21pY19wYWdlKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vcXhsL3F4bF9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX29iamVj dC5oCj4gaW5kZXggMDlhNWM4MTgzMjRkLi5lYmYyNGM5ZDJiZjIgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL3F4bC9xeGxfb2JqZWN0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcXhs L3F4bF9vYmplY3QuaAo+IEBAIC02Myw3ICs2Myw3IEBAIGV4dGVybiBpbnQgcXhsX2JvX2NyZWF0 ZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKPiAgIAkJCSBib29sIGtlcm5lbCwgYm9vbCBwaW5u ZWQsIHUzMiBkb21haW4sCj4gICAJCQkgc3RydWN0IHF4bF9zdXJmYWNlICpzdXJmLAo+ICAgCQkJ IHN0cnVjdCBxeGxfYm8gKipib19wdHIpOwo+IC1leHRlcm4gaW50IHF4bF9ib19rbWFwKHN0cnVj dCBxeGxfYm8gKmJvLCB2b2lkICoqcHRyKTsKPiArZXh0ZXJuIGludCBxeGxfYm9fa21hcChzdHJ1 Y3QgcXhsX2JvICpibywgc3RydWN0IGRtYV9idWZfbWFwICptYXApOwo+ICAgZXh0ZXJuIHZvaWQg cXhsX2JvX2t1bm1hcChzdHJ1Y3QgcXhsX2JvICpibyk7Cj4gICB2b2lkICpxeGxfYm9fa21hcF9h dG9taWNfcGFnZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwgc3RydWN0IHF4bF9ibyAqYm8sIGlu dCBwYWdlX29mZnNldCk7Cj4gICB2b2lkIHF4bF9ib19rdW5tYXBfYXRvbWljX3BhZ2Uoc3RydWN0 IHF4bF9kZXZpY2UgKnFkZXYsIHN0cnVjdCBxeGxfYm8gKmJvLCB2b2lkICptYXApOwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9wcmltZS5jIGIvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfcHJpbWUuYwo+IGluZGV4IDdkMzgxNmZjYTVhOC4uNGFhOTQ5Nzk5NDQ2IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX3ByaW1lLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vcXhsL3F4bF9wcmltZS5jCj4gQEAgLTU0LDIwICs1NCwyMCBAQCBzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKnF4bF9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKAo+ICAgCXJldHVybiBF UlJfUFRSKC1FTk9TWVMpOwo+ICAgfQo+ICAgCj4gLXZvaWQgKnF4bF9nZW1fcHJpbWVfdm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAraW50IHF4bF9nZW1fcHJpbWVfdm1hcChzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4g ICAJc3RydWN0IHF4bF9ibyAqYm8gPSBnZW1fdG9fcXhsX2JvKG9iaik7Cj4gLQl2b2lkICpwdHI7 Cj4gICAJaW50IHJldDsKPiAgIAo+IC0JcmV0ID0gcXhsX2JvX2ttYXAoYm8sICZwdHIpOwo+ICsJ cmV0ID0gcXhsX2JvX2ttYXAoYm8sIG1hcCk7Cj4gICAJaWYgKHJldCA8IDApCj4gLQkJcmV0dXJu IEVSUl9QVFIocmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICAgCj4gLQlyZXR1cm4gcHRyOwo+ICsJ cmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtdm9pZCBxeGxfZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpCj4gK3ZvaWQgcXhsX2dlbV9wcmltZV92 dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCSAgc3RydWN0IGRtYV9idWZf bWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IHF4bF9ibyAqYm8gPSBnZW1fdG9fcXhsX2JvKG9i aik7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBi L2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKPiBpbmRleCA1ZDU0YmNjZWJkNGQuLjQ0 Y2I1ZWU2ZmMyMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAo+IEBAIC01MDksNyArNTA5 LDYgQEAgc3RydWN0IHJhZGVvbl9ibyB7Cj4gICAJLyogQ29uc3RhbnQgYWZ0ZXIgaW5pdGlhbGl6 YXRpb24gKi8KPiAgIAlzdHJ1Y3QgcmFkZW9uX2RldmljZQkJKnJkZXY7Cj4gICAKPiAtCXN0cnVj dCB0dG1fYm9fa21hcF9vYmoJCWRtYV9idWZfdm1hcDsKPiAgIAlwaWRfdAkJCQlwaWQ7Cj4gICAK PiAgICNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25f Z2VtLmMKPiBpbmRleCAwY2NkNzIxM2U0MWYuLmQyODc2Y2UzYmM5ZSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9yYWRlb24vcmFkZW9uX2dlbS5jCj4gQEAgLTMxLDYgKzMxLDcgQEAKPiAgICNpbmNsdWRlIDxk cm0vZHJtX2RlYnVnZnMuaD4KPiAgICNpbmNsdWRlIDxkcm0vZHJtX2RldmljZS5oPgo+ICAgI2lu Y2x1ZGUgPGRybS9kcm1fZmlsZS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdHRtX2hlbHBl ci5oPgo+ICAgI2luY2x1ZGUgPGRybS9yYWRlb25fZHJtLmg+Cj4gICAKPiAgICNpbmNsdWRlICJy YWRlb24uaCIKPiBAQCAtNDAsOCArNDEsNiBAQCBzdHJ1Y3QgZG1hX2J1ZiAqcmFkZW9uX2dlbV9w cmltZV9leHBvcnQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqLAo+ICAgc3RydWN0IHNnX3Rh YmxlICpyYWRlb25fZ2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaik7Cj4gICBpbnQgcmFkZW9uX2dlbV9wcmltZV9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopOwo+ICAgdm9pZCByYWRlb25fZ2VtX3ByaW1lX3VucGluKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqKTsKPiAtdm9pZCAqcmFkZW9uX2dlbV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqKTsKPiAtdm9pZCByYWRlb25fZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+ICAgCj4gICBzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9nZW1fb2JqZWN0X2Z1bmNzIHJhZGVvbl9nZW1fb2JqZWN0X2Z1bmNzOwo+ICAgCj4g QEAgLTIzNSw4ICsyMzQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9nZW1fb2JqZWN0X2Z1 bmNzIHJhZGVvbl9nZW1fb2JqZWN0X2Z1bmNzID0gewo+ICAgCS5waW4gPSByYWRlb25fZ2VtX3By aW1lX3BpbiwKPiAgIAkudW5waW4gPSByYWRlb25fZ2VtX3ByaW1lX3VucGluLAo+ICAgCS5nZXRf c2dfdGFibGUgPSByYWRlb25fZ2VtX3ByaW1lX2dldF9zZ190YWJsZSwKPiAtCS52bWFwID0gcmFk ZW9uX2dlbV9wcmltZV92bWFwLAo+IC0JLnZ1bm1hcCA9IHJhZGVvbl9nZW1fcHJpbWVfdnVubWFw LAo+ICsJLnZtYXAgPSBkcm1fZ2VtX3R0bV92bWFwLAo+ICsJLnZ1bm1hcCA9IGRybV9nZW1fdHRt X3Z1bm1hcCwKPiAgIH07Cj4gICAKPiAgIC8qCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9yYWRlb24vcmFkZW9uX3ByaW1lLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9w cmltZS5jCj4gaW5kZXggYjlkZTBlNTFjMGJlLi4wODhkMzlhNTFjMGQgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcHJpbWUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9yYWRlb24vcmFkZW9uX3ByaW1lLmMKPiBAQCAtMzksMjYgKzM5LDYgQEAgc3RydWN0IHNn X3RhYmxlICpyYWRlb25fZ2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiAgIAlyZXR1cm4gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKG9iai0+ZGV2LCBiby0+ dGJvLnR0bS0+cGFnZXMsIG5wYWdlcyk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqcmFkZW9uX2dlbV9w cmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+IC17Cj4gLQlzdHJ1Y3QgcmFk ZW9uX2JvICpibyA9IGdlbV90b19yYWRlb25fYm8ob2JqKTsKPiAtCWludCByZXQ7Cj4gLQo+IC0J cmV0ID0gdHRtX2JvX2ttYXAoJmJvLT50Ym8sIDAsIGJvLT50Ym8ubnVtX3BhZ2VzLAo+IC0JCQkg ICZiby0+ZG1hX2J1Zl92bWFwKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0 KTsKPiAtCj4gLQlyZXR1cm4gYm8tPmRtYV9idWZfdm1hcC52aXJ0dWFsOwo+IC19Cj4gLQo+IC12 b2lkIHJhZGVvbl9nZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB2 b2lkICp2YWRkcikKPiAtewo+IC0Jc3RydWN0IHJhZGVvbl9ibyAqYm8gPSBnZW1fdG9fcmFkZW9u X2JvKG9iaik7Cj4gLQo+IC0JdHRtX2JvX2t1bm1hcCgmYm8tPmRtYV9idWZfdm1hcCk7Cj4gLX0K PiAtCj4gICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnJhZGVvbl9nZW1fcHJpbWVfaW1wb3J0X3Nn X3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCQkJCQkJc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqYXR0YWNoLAo+ICAgCQkJCQkJCXN0cnVjdCBzZ190YWJsZSAqc2cpCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmMgYi9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5jCj4gaW5kZXggN2Q1ZWJi MTAzMjNiLi43OTcxZjU3NDM2ZGQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL3JvY2tjaGlwX2RybV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9y b2NrY2hpcF9kcm1fZ2VtLmMKPiBAQCAtNTMyLDI2ICs1MzIsMzIgQEAgcm9ja2NoaXBfZ2VtX3By aW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ICAgCXJldHVybiBF UlJfUFRSKHJldCk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqcm9ja2NoaXBfZ2VtX3ByaW1lX3ZtYXAo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gK2ludCByb2NrY2hpcF9nZW1fcHJpbWVfdm1h cChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4g ICB7Cj4gICAJc3RydWN0IHJvY2tjaGlwX2dlbV9vYmplY3QgKnJrX29iaiA9IHRvX3JvY2tjaGlw X29iaihvYmopOwo+ICAgCj4gLQlpZiAocmtfb2JqLT5wYWdlcykKPiAtCQlyZXR1cm4gdm1hcChy a19vYmotPnBhZ2VzLCBya19vYmotPm51bV9wYWdlcywgVk1fTUFQLAo+IC0JCQkgICAgcGdwcm90 X3dyaXRlY29tYmluZShQQUdFX0tFUk5FTCkpOwo+ICsJaWYgKHJrX29iai0+cGFnZXMpIHsKPiAr CQl2b2lkICp2YWRkciA9IHZtYXAocmtfb2JqLT5wYWdlcywgcmtfb2JqLT5udW1fcGFnZXMsIFZN X01BUCwKPiArCQkJCSAgcGdwcm90X3dyaXRlY29tYmluZShQQUdFX0tFUk5FTCkpOwo+ICsJCWlm ICghdmFkZHIpCj4gKwkJCXJldHVybiAtRU5PTUVNOwo+ICsJCWRtYV9idWZfbWFwX3NldF92YWRk cihtYXAsIHZhZGRyKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiAgIAo+ICAgCWlmIChya19vYmot PmRtYV9hdHRycyAmIERNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5HKQo+IC0JCXJldHVybiBOVUxM Owo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJZG1hX2J1Zl9tYXBfc2V0X3ZhZGRyKG1hcCwgcmtf b2JqLT5rdmFkZHIpOwo+ICAgCj4gLQlyZXR1cm4gcmtfb2JqLT5rdmFkZHI7Cj4gKwlyZXR1cm4g MDsKPiAgIH0KPiAgIAo+IC12b2lkIHJvY2tjaGlwX2dlbV9wcmltZV92dW5tYXAoc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmosIHZvaWQgKnZhZGRyKQo+ICt2b2lkIHJvY2tjaGlwX2dlbV9wcmlt ZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAq bWFwKQo+ICAgewo+ICAgCXN0cnVjdCByb2NrY2hpcF9nZW1fb2JqZWN0ICpya19vYmogPSB0b19y b2NrY2hpcF9vYmoob2JqKTsKPiAgIAo+ICAgCWlmIChya19vYmotPnBhZ2VzKSB7Cj4gLQkJdnVu bWFwKHZhZGRyKTsKPiArCQl2dW5tYXAobWFwLT52YWRkcik7Cj4gICAJCXJldHVybjsKPiAgIAl9 Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2Ry bV9nZW0uaCBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmgKPiBp bmRleCA3ZmZjNTQxYmVhMDcuLjVhNzBhNTZjZDQwNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uaAo+IEBAIC0zMSw4ICszMSw4IEBAIHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqCj4gICByb2NrY2hpcF9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCQkJICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCAqYXR0YWNoLAo+ICAgCQkJCSAgIHN0cnVjdCBzZ190YWJsZSAqc2cpOwo+IC12b2lkICpyb2Nr Y2hpcF9nZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gLXZvaWQg cm9ja2NoaXBfZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9p ZCAqdmFkZHIpOwo+ICtpbnQgcm9ja2NoaXBfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiArdm9pZCByb2NrY2hpcF9n ZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3QgZG1hX2J1 Zl9tYXAgKm1hcCk7Cj4gICAKPiAgIC8qIGRybSBkcml2ZXIgbW1hcCBmaWxlIG9wZXJhdGlvbnMg Ki8KPiAgIGludCByb2NrY2hpcF9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueS9j aXJydXMuYyBiL2RyaXZlcnMvZ3B1L2RybS90aW55L2NpcnJ1cy5jCj4gaW5kZXggNzQ0YThlMzM3 ZTQxLi5jMDJlMzVlZDZlNzYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RpbnkvY2ly cnVzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlueS9jaXJydXMuYwo+IEBAIC0xNyw2ICsx Nyw3IEBACj4gICAgKi8KPiAgIAo+ICAgI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L2RtYS1idWYtbWFwLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ Cj4gICAjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4gICAKPiBAQCAtMzE0LDYgKzMxNSw3IEBAIHN0 YXRpYyBpbnQgY2lycnVzX2ZiX2JsaXRfcmVjdChzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwK PiAgIAkJCSAgICAgICBzdHJ1Y3QgZHJtX3JlY3QgKnJlY3QpCj4gICB7Cj4gICAJc3RydWN0IGNp cnJ1c19kZXZpY2UgKmNpcnJ1cyA9IHRvX2NpcnJ1cyhmYi0+ZGV2KTsKPiArCXN0cnVjdCBkbWFf YnVmX21hcCBtYXA7Cj4gICAJdm9pZCAqdm1hcDsKPiAgIAlpbnQgaWR4LCByZXQ7Cj4gICAKPiBA QCAtMzIxLDEwICszMjMsMTAgQEAgc3RhdGljIGludCBjaXJydXNfZmJfYmxpdF9yZWN0KHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ICAgCWlmICghZHJtX2Rldl9lbnRlcigmY2lycnVzLT5k ZXYsICZpZHgpKQo+ICAgCQlnb3RvIG91dDsKPiAgIAo+IC0JcmV0ID0gLUVOT01FTTsKPiAtCXZt YXAgPSBkcm1fZ2VtX3NobWVtX3ZtYXAoZmItPm9ialswXSk7Cj4gLQlpZiAoIXZtYXApCj4gKwly ZXQgPSBkcm1fZ2VtX3NobWVtX3ZtYXAoZmItPm9ialswXSwgJm1hcCk7Cj4gKwlpZiAocmV0KQo+ ICAgCQlnb3RvIG91dF9kZXZfZXhpdDsKPiArCXZtYXAgPSBtYXAudmFkZHI7IC8qIFRPRE86IFVz ZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4gICAKPiAgIAlpZiAoY2lycnVzLT5j cHAgPT0gZmItPmZvcm1hdC0+Y3BwWzBdKQo+ICAgCQlkcm1fZmJfbWVtY3B5X2RzdGNsaXAoY2ly cnVzLT52cmFtLAo+IEBAIC0zNDMsNyArMzQ1LDcgQEAgc3RhdGljIGludCBjaXJydXNfZmJfYmxp dF9yZWN0KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ICAgCWVsc2UKPiAgIAkJV0FSTl9P Tl9PTkNFKCJjcHAgbWlzbWF0Y2giKTsKPiAgIAo+IC0JZHJtX2dlbV9zaG1lbV92dW5tYXAoZmIt Pm9ialswXSwgdm1hcCk7Cj4gKwlkcm1fZ2VtX3NobWVtX3Z1bm1hcChmYi0+b2JqWzBdLCAmbWFw KTsKPiAgIAlyZXQgPSAwOwo+ICAgCj4gICBvdXRfZGV2X2V4aXQ6Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS90aW55L2dtMTJ1MzIwLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGlueS9nbTEy dTMyMC5jCj4gaW5kZXggY2MzOTc2NzFmNjg5Li4xMmE4OTBjZWE2ZTkgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3RpbnkvZ20xMnUzMjAuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90 aW55L2dtMTJ1MzIwLmMKPiBAQCAtMjQ4LDYgKzI0OCw3IEBAIHN0YXRpYyB2b2lkIGdtMTJ1MzIw X2NvcHlfZmJfdG9fYmxvY2tzKHN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwKQo+ICAg ewo+ICAgCWludCBibG9jaywgZHN0X29mZnNldCwgbGVuLCByZW1haW4sIHJldCwgeDEsIHgyLCB5 MSwgeTI7Cj4gICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4gKwlzdHJ1Y3QgZG1hX2J1 Zl9tYXAgbWFwOwo+ICAgCXZvaWQgKnZhZGRyOwo+ICAgCXU4ICpzcmM7Cj4gICAKPiBAQCAtMjYy LDExICsyNjMsMTIgQEAgc3RhdGljIHZvaWQgZ20xMnUzMjBfY29weV9mYl90b19ibG9ja3Moc3Ry dWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjApCj4gICAJeTEgPSBnbTEydTMyMC0+ZmJfdXBk YXRlLnJlY3QueTE7Cj4gICAJeTIgPSBnbTEydTMyMC0+ZmJfdXBkYXRlLnJlY3QueTI7Cj4gICAK PiAtCXZhZGRyID0gZHJtX2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0pOwo+IC0JaWYgKElTX0VS Uih2YWRkcikpIHsKPiAtCQlHTTEyVTMyMF9FUlIoImZhaWxlZCB0byB2bWFwIGZiOiAlbGRcbiIs IFBUUl9FUlIodmFkZHIpKTsKPiArCXJldCA9IGRybV9nZW1fc2htZW1fdm1hcChmYi0+b2JqWzBd LCAmbWFwKTsKPiArCWlmIChyZXQpIHsKPiArCQlHTTEyVTMyMF9FUlIoImZhaWxlZCB0byB2bWFw IGZiOiAlZFxuIiwgcmV0KTsKPiAgIAkJZ290byBwdXRfZmI7Cj4gICAJfQo+ICsJdmFkZHIgPSBt YXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4g ICAKPiAgIAlpZiAoZmItPm9ialswXS0+aW1wb3J0X2F0dGFjaCkgewo+ICAgCQlyZXQgPSBkbWFf YnVmX2JlZ2luX2NwdV9hY2Nlc3MoCj4gQEAgLTMxOCw3ICszMjAsNyBAQCBzdGF0aWMgdm9pZCBn bTEydTMyMF9jb3B5X2ZiX3RvX2Jsb2NrcyhzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMy MCkKPiAgIAkJCUdNMTJVMzIwX0VSUigiZG1hX2J1Zl9lbmRfY3B1X2FjY2VzcyBlcnI6ICVkXG4i LCByZXQpOwo+ICAgCX0KPiAgIHZ1bm1hcDoKPiAtCWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5v YmpbMF0sIHZhZGRyKTsKPiArCWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sICZtYXAp Owo+ICAgcHV0X2ZiOgo+ICAgCWRybV9mcmFtZWJ1ZmZlcl9wdXQoZmIpOwo+ICAgCWdtMTJ1MzIw LT5mYl91cGRhdGUuZmIgPSBOVUxMOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdWRs L3VkbF9tb2Rlc2V0LmMgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rlc2V0LmMKPiBpbmRl eCBmZWY0M2Y0ZTNiYWMuLjQyZWViYTFkZmRiZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vdWRsL3VkbF9tb2Rlc2V0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rl c2V0LmMKPiBAQCAtMjc2LDYgKzI3Niw3IEBAIHN0YXRpYyBpbnQgdWRsX2hhbmRsZV9kYW1hZ2Uo c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCB4LCBpbnQgeSwKPiAgIAlzdHJ1Y3QgdXJi ICp1cmI7Cj4gICAJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gICAJaW50IGxvZ19icHA7Cj4gKwlz dHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICAgCXZvaWQgKnZhZGRyOwo+ICAgCj4gICAJcmV0ID0g dWRsX2xvZ19jcHAoZmItPmZvcm1hdC0+Y3BwWzBdKTsKPiBAQCAtMjk2LDExICsyOTcsMTIgQEAg c3RhdGljIGludCB1ZGxfaGFuZGxlX2RhbWFnZShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwg aW50IHgsIGludCB5LAo+ICAgCQkJcmV0dXJuIHJldDsKPiAgIAl9Cj4gICAKPiAtCXZhZGRyID0g ZHJtX2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0pOwo+IC0JaWYgKElTX0VSUih2YWRkcikpIHsK PiArCXJldCA9IGRybV9nZW1fc2htZW1fdm1hcChmYi0+b2JqWzBdLCAmbWFwKTsKPiArCWlmIChy ZXQpIHsKPiAgIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdm1hcCBmYlxuIik7Cj4gICAJCWdvdG8g b3V0X2RtYV9idWZfZW5kX2NwdV9hY2Nlc3M7Cj4gICAJfQo+ICsJdmFkZHIgPSBtYXAudmFkZHI7 IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4gICAKPiAgIAl1 cmIgPSB1ZGxfZ2V0X3VyYihkZXYpOwo+ICAgCWlmICghdXJiKQo+IEBAIC0zMzMsNyArMzM1LDcg QEAgc3RhdGljIGludCB1ZGxfaGFuZGxlX2RhbWFnZShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwgaW50IHgsIGludCB5LAo+ICAgCXJldCA9IDA7Cj4gICAKPiAgIG91dF9kcm1fZ2VtX3NobWVt X3Z1bm1hcDoKPiAtCWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sIHZhZGRyKTsKPiAr CWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sICZtYXApOwo+ICAgb3V0X2RtYV9idWZf ZW5kX2NwdV9hY2Nlc3M6Cj4gICAJaWYgKGltcG9ydF9hdHRhY2gpIHsKPiAgIAkJdG1wX3JldCA9 IGRtYV9idWZfZW5kX2NwdV9hY2Nlc3MoaW1wb3J0X2F0dGFjaC0+ZG1hYnVmLAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbW9kZS5jIGIvZHJpdmVycy9ncHUv ZHJtL3Zib3h2aWRlby92Ym94X21vZGUuYwo+IGluZGV4IDkzMWM1NTEyNjE0OC4uZjI2OGZiMjU4 YzgzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9tb2RlLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbW9kZS5jCj4gQEAgLTksNiAr OSw4IEBACj4gICAgKiAgICAgICAgICBNaWNoYWVsIFRoYXllciA8bWljaGFlbC50aGF5ZXJAb3Jh Y2xlLmNvbSwKPiAgICAqICAgICAgICAgIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5j b20+Cj4gICAgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLW1hcC5oPgo+ICAgI2lu Y2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMu aD4KPiBAQCAtMzg0LDYgKzM4Niw4IEBAIHN0YXRpYyB2b2lkIHZib3hfY3Vyc29yX2F0b21pY191 cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJdTMyIGhlaWdodCA9IHBsYW5lLT5z dGF0ZS0+Y3J0Y19oOwo+ICAgCXNpemVfdCBkYXRhX3NpemUsIG1hc2tfc2l6ZTsKPiAgIAl1MzIg ZmxhZ3M7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICsJaW50IHJldDsKPiAgIAl1OCAq c3JjOwo+ICAgCj4gICAJLyoKPiBAQCAtMzk3LDggKzQwMSw4IEBAIHN0YXRpYyB2b2lkIHZib3hf Y3Vyc29yX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAKPiAgIAl2 Ym94X2NydGMtPmN1cnNvcl9lbmFibGVkID0gdHJ1ZTsKPiAgIAo+IC0Jc3JjID0gZHJtX2dlbV92 cmFtX3ZtYXAoZ2JvKTsKPiAtCWlmIChJU19FUlIoc3JjKSkgewo+ICsJcmV0ID0gZHJtX2dlbV92 cmFtX3ZtYXAoZ2JvLCAmbWFwKTsKPiArCWlmIChyZXQpIHsKPiAgIAkJLyoKPiAgIAkJICogQlVH OiB3ZSBzaG91bGQgaGF2ZSBwaW5uZWQgdGhlIEJPIGluIHByZXBhcmVfZmIoKS4KPiAgIAkJICov Cj4gQEAgLTQwNiw2ICs0MTAsNyBAQCBzdGF0aWMgdm9pZCB2Ym94X2N1cnNvcl9hdG9taWNfdXBk YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCQlEUk1fV0FSTigiQ291bGQgbm90IG1h cCBjdXJzb3IgYm8sIHNraXBwaW5nIHVwZGF0ZVxuIik7Cj4gICAJCXJldHVybjsKPiAgIAl9Cj4g KwlzcmMgPSBtYXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Bl cmx5ICovCj4gICAKPiAgIAkvKgo+ICAgCSAqIFRoZSBtYXNrIG11c3QgYmUgY2FsY3VsYXRlZCBi YXNlZCBvbiB0aGUgYWxwaGEKPiBAQCAtNDE2LDcgKzQyMSw3IEBAIHN0YXRpYyB2b2lkIHZib3hf Y3Vyc29yX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJZGF0YV9z aXplID0gd2lkdGggKiBoZWlnaHQgKiA0ICsgbWFza19zaXplOwo+ICAgCj4gICAJY29weV9jdXJz b3JfaW1hZ2Uoc3JjLCB2Ym94LT5jdXJzb3JfZGF0YSwgd2lkdGgsIGhlaWdodCwgbWFza19zaXpl KTsKPiAtCWRybV9nZW1fdnJhbV92dW5tYXAoZ2JvLCBzcmMpOwo+ICsJZHJtX2dlbV92cmFtX3Z1 bm1hcChnYm8sICZtYXApOwo+ICAgCj4gICAJZmxhZ3MgPSBWQk9YX01PVVNFX1BPSU5URVJfVklT SUJMRSB8IFZCT1hfTU9VU0VfUE9JTlRFUl9TSEFQRSB8Cj4gICAJCVZCT1hfTU9VU0VfUE9JTlRF Ul9BTFBIQTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfYm8uYyBiL2Ry aXZlcnMvZ3B1L2RybS92YzQvdmM0X2JvLmMKPiBpbmRleCA1NTdmMGQxZTY0MzcuLmYyOTBhOWE5 NDJkYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfYm8uYwo+IEBAIC03ODUsMTYgKzc4NSwxNiBAQCBpbnQg dmM0X3ByaW1lX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQo+ICAgCXJldHVybiBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwKG9iaiwgdm1h KTsKPiAgIH0KPiAgIAo+IC12b2lkICp2YzRfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiAraW50IHZjNF9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LCBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCkKPiAgIHsKPiAgIAlzdHJ1Y3QgdmM0X2JvICpibyA9 IHRvX3ZjNF9ibyhvYmopOwo+ICAgCj4gICAJaWYgKGJvLT52YWxpZGF0ZWRfc2hhZGVyKSB7Cj4g ICAJCURSTV9ERUJVRygibW1hcGluZyBvZiBzaGFkZXIgQk9zIG5vdCBhbGxvd2VkLlxuIik7Cj4g LQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gICAJfQo+ ICAgCj4gLQlyZXR1cm4gZHJtX2dlbV9jbWFfcHJpbWVfdm1hcChvYmopOwo+ICsJcmV0dXJuIGRy bV9nZW1fY21hX3ByaW1lX3ZtYXAob2JqLCBtYXApOwo+ICAgfQo+ICAgCj4gICBzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYu aCBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oCj4gaW5kZXggY2M3OWIxYWFhODc4Li45 MDRmMmMzNmM5NjMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaAo+IEBAIC04MDYsNyArODA2LDcg QEAgaW50IHZjNF9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Cj4gICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnZjNF9wcmlt ZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJCQkJCSBzdHJ1 Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCj4gICAJCQkJCQkgc3RydWN0IHNnX3RhYmxl ICpzZ3QpOwo+IC12b2lkICp2YzRfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aik7Cj4gK2ludCB2YzRfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3Ry dWN0IGRtYV9idWZfbWFwICptYXApOwo+ICAgaW50IHZjNF9ib19jYWNoZV9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOwo+ICAgdm9pZCB2YzRfYm9fY2FjaGVfZGVzdHJveShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKPiAgIGludCB2YzRfYm9faW5jX3VzZWNudChzdHJ1Y3QgdmM0X2JvICpi byk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmMgYi9kcml2 ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Rydi5jCj4gaW5kZXggZmE1NGE2ZDE0MDNkLi5iMmFhMjZl MWU0YTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9kcnYuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmMKPiBAQCAtMzYxLDI0ICszNjEsMzAg QEAgc3RhdGljIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqdmdlbV9wcmltZV9pbXBvcnRfc2dfdGFi bGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAlyZXR1cm4gJm9iai0+YmFzZTsKPiAgIH0K PiAgIAo+IC1zdGF0aWMgdm9pZCAqdmdlbV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqKQo+ICtzdGF0aWMgaW50IHZnZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IGRybV92 Z2VtX2dlbV9vYmplY3QgKmJvID0gdG9fdmdlbV9ibyhvYmopOwo+ICAgCWxvbmcgbl9wYWdlcyA9 IG9iai0+c2l6ZSA+PiBQQUdFX1NISUZUOwo+ICAgCXN0cnVjdCBwYWdlICoqcGFnZXM7Cj4gKwl2 b2lkICp2YWRkcjsKPiAgIAo+ICAgCXBhZ2VzID0gdmdlbV9waW5fcGFnZXMoYm8pOwo+ICAgCWlm IChJU19FUlIocGFnZXMpKQo+IC0JCXJldHVybiBOVUxMOwo+ICsJCXJldHVybiBQVFJfRVJSKHBh Z2VzKTsKPiArCj4gKwl2YWRkciA9IHZtYXAocGFnZXMsIG5fcGFnZXMsIDAsIHBncHJvdF93cml0 ZWNvbWJpbmUoUEFHRV9LRVJORUwpKTsKPiArCWlmICghdmFkZHIpCj4gKwkJcmV0dXJuIC1FTk9N RU07Cj4gKwlkbWFfYnVmX21hcF9zZXRfdmFkZHIobWFwLCB2YWRkcik7Cj4gICAKPiAtCXJldHVy biB2bWFwKHBhZ2VzLCBuX3BhZ2VzLCAwLCBwZ3Byb3Rfd3JpdGVjb21iaW5lKFBBR0VfS0VSTkVM KSk7Cj4gKwlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdm9pZCB2Z2VtX3ByaW1lX3Z1 bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpCj4gK3N0YXRpYyB2 b2lkIHZnZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qg ZG1hX2J1Zl9tYXAgKm1hcCkKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX3ZnZW1fZ2VtX29iamVjdCAq Ym8gPSB0b192Z2VtX2JvKG9iaik7Cj4gICAKPiAtCXZ1bm1hcCh2YWRkcik7Cj4gKwl2dW5tYXAo bWFwLT52YWRkcik7Cj4gICAJdmdlbV91bnBpbl9wYWdlcyhibyk7Cj4gICB9Cj4gICAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jIGIvZHJpdmVy cy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jCj4gaW5kZXggNGYzNGVmMzRiYTYwLi43 NGRiNWE4NDBiZWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zy b250X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5j Cj4gQEAgLTI5MCwyMiArMjkwLDI4IEBAIGludCB4ZW5fZHJtX2Zyb250X2dlbV9tbWFwKHN0cnVj dCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiAgIAlyZXR1cm4gZ2Vt X21tYXBfb2JqKHhlbl9vYmosIHZtYSk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqeGVuX2RybV9mcm9u dF9nZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopCj4gK2ludCB4 ZW5fZHJtX2Zyb250X2dlbV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29i aiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IHhlbl9nZW1fb2Jq ZWN0ICp4ZW5fb2JqID0gdG9feGVuX2dlbV9vYmooZ2VtX29iaik7Cj4gKwl2b2lkICp2YWRkcjsK PiAgIAo+ICAgCWlmICgheGVuX29iai0+cGFnZXMpCj4gLQkJcmV0dXJuIE5VTEw7Cj4gKwkJcmV0 dXJuIC1FTk9NRU07Cj4gICAKPiAgIAkvKiBQbGVhc2Ugc2VlIGNvbW1lbnQgaW4gZ2VtX21tYXBf b2JqIG9uIG1hcHBpbmcgYW5kIGF0dHJpYnV0ZXMuICovCj4gLQlyZXR1cm4gdm1hcCh4ZW5fb2Jq LT5wYWdlcywgeGVuX29iai0+bnVtX3BhZ2VzLAo+IC0JCSAgICBWTV9NQVAsIFBBR0VfS0VSTkVM KTsKPiArCXZhZGRyID0gdm1hcCh4ZW5fb2JqLT5wYWdlcywgeGVuX29iai0+bnVtX3BhZ2VzLAo+ ICsJCSAgICAgVk1fTUFQLCBQQUdFX0tFUk5FTCk7Cj4gKwlpZiAoIXZhZGRyKQo+ICsJCXJldHVy biAtRU5PTUVNOwo+ICsJZG1hX2J1Zl9tYXBfc2V0X3ZhZGRyKG1hcCwgdmFkZHIpOwo+ICsKPiAr CXJldHVybiAwOwo+ICAgfQo+ICAgCj4gICB2b2lkIHhlbl9kcm1fZnJvbnRfZ2VtX3ByaW1lX3Z1 bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmosCj4gLQkJCQkgICAgdm9pZCAqdmFk ZHIpCj4gKwkJCQkgICAgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gLQl2dW5tYXAo dmFkZHIpOwo+ICsJdnVubWFwKG1hcC0+dmFkZHIpOwo+ICAgfQo+ICAgCj4gICBpbnQgeGVuX2Ry bV9mcm9udF9nZW1fcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmosCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uaCBiL2Ry aXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uaAo+IGluZGV4IGEzOTY3NWZhMzFi Mi4uYTRlNjdkMGExNDljIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2Ry bV9mcm9udF9nZW0uaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9n ZW0uaAo+IEBAIC0xMiw2ICsxMiw3IEBACj4gICAjZGVmaW5lIF9fWEVOX0RSTV9GUk9OVF9HRU1f SAo+ICAgCj4gICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50Owo+ICtzdHJ1Y3QgZG1hX2J1Zl9t YXA7Cj4gICBzdHJ1Y3QgZHJtX2RldmljZTsKPiAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdDsKPiAg IHN0cnVjdCBmaWxlOwo+IEBAIC0zNCwxMCArMzUsMTEgQEAgdm9pZCB4ZW5fZHJtX2Zyb250X2dl bV9mcmVlX29iamVjdF91bmxvY2tlZChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopOwo+ ICAgCj4gICBpbnQgeGVuX2RybV9mcm9udF9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgCj4gLXZvaWQgKnhlbl9kcm1fZnJvbnRfZ2Vt X3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKTsKPiAraW50IHhlbl9k cm1fZnJvbnRfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqLAo+ ICsJCQkJIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIAo+ICAgdm9pZCB4ZW5fZHJtX2Zy b250X2dlbV9wcmltZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqLAo+IC0J CQkJICAgIHZvaWQgKnZhZGRyKTsKPiArCQkJCSAgICBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCk7 Cj4gICAKPiAgIGludCB4ZW5fZHJtX2Zyb250X2dlbV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqZ2VtX29iaiwKPiAgIAkJCQkgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZ2VtLmggYi9pbmNsdWRlL2RybS9kcm1fZ2Vt LmgKPiBpbmRleCBjMzhkZDM1ZGEwMGIuLjVlNmRhYTFjOTgyZiAxMDA2NDQKPiAtLS0gYS9pbmNs dWRlL2RybS9kcm1fZ2VtLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZ2VtLmgKPiBAQCAtMzks NiArMzksNyBAQAo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV92bWFfbWFuYWdlci5oPgo+ICAg Cj4gK3N0cnVjdCBkbWFfYnVmX21hcDsKPiAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdDsKPiAgIAo+ ICAgLyoqCj4gQEAgLTEzOCw3ICsxMzksNyBAQCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3Mg ewo+ICAgCSAqCj4gICAJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4KPiAgIAkgKi8KPiAt CXZvaWQgKigqdm1hcCkoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICsJaW50ICgqdm1h cCkoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsK PiAgIAo+ICAgCS8qKgo+ICAgCSAqIEB2dW5tYXA6Cj4gQEAgLTE0OCw3ICsxNDksNyBAQCBzdHJ1 Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3Mgewo+ICAgCSAqCj4gICAJICogVGhpcyBjYWxsYmFjayBp cyBvcHRpb25hbC4KPiAgIAkgKi8KPiAtCXZvaWQgKCp2dW5tYXApKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqLCB2b2lkICp2YWRkcik7Cj4gKwl2b2lkICgqdnVubWFwKShzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApOwo+ICAgCj4gICAJLyoqCj4g ICAJICogQG1tYXA6Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW1fY21hX2hlbHBl ci5oIGIvaW5jbHVkZS9kcm0vZHJtX2dlbV9jbWFfaGVscGVyLmgKPiBpbmRleCBhMDY0YjBkMWM0 ODAuLmNhZjk4YjljZjRiNCAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fZ2VtX2NtYV9o ZWxwZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fY21hX2hlbHBlci5oCj4gQEAgLTEw Myw3ICsxMDMsNyBAQCBkcm1fZ2VtX2NtYV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKPiAgIAkJCQkgIHN0cnVjdCBzZ190YWJsZSAqc2d0KTsKPiAgIGludCBk cm1fZ2VtX2NtYV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkJ ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+IC12b2lkICpkcm1fZ2VtX2NtYV9wcmlt ZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAraW50IGRybV9nZW1fY21hX3By aW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAq bWFwKTsKPiAgIAo+ICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICoKPiAgIGRybV9nZW1fY21hX2Ny ZWF0ZV9vYmplY3RfZGVmYXVsdF9mdW5jcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qg c2l6ZSk7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmgg Yi9pbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oCj4gaW5kZXggNTM4MWYwYzhjZjZm Li4zNDQ5YTAzNTNmZTAgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9o ZWxwZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmgKPiBAQCAt MTEzLDggKzExMyw4IEBAIGludCBkcm1fZ2VtX3NobWVtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dl bV9zaG1lbV9vYmplY3QgKnNobWVtKTsKPiAgIHZvaWQgZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXMo c3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSk7Cj4gICBpbnQgZHJtX2dlbV9zaG1l bV9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICAgdm9pZCBkcm1fZ2VtX3NobWVt X3VucGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAtdm9pZCAqZHJtX2dlbV9zaG1l bV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAtdm9pZCBkcm1fZ2VtX3NobWVt X3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+ICtpbnQg ZHJtX2dlbV9zaG1lbV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3QgZG1h X2J1Zl9tYXAgKm1hcCk7Cj4gK3ZvaWQgZHJtX2dlbV9zaG1lbV92dW5tYXAoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIAo+ICAgaW50IGRy bV9nZW1fc2htZW1fbWFkdmlzZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IG1hZHYp Owo+ICAgCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaCBi L2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaAo+IGluZGV4IDEyOGY4ODE3NGQzMi4u YzBkMjhiYTBmNWM5IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxw ZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaAo+IEBAIC0xMCw2 ICsxMCw3IEBACj4gICAjaW5jbHVkZSA8ZHJtL3R0bS90dG1fYm9fYXBpLmg+Cj4gICAjaW5jbHVk ZSA8ZHJtL3R0bS90dG1fYm9fZHJpdmVyLmg+Cj4gICAKPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1i dWYtbWFwLmg+Cj4gICAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+IC8qIGZvciBjb250YWluZXJf b2YoKSAqLwo+ICAgCj4gICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWI7Cj4gQEAgLTI5LDkg KzMwLDggQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0Owo+ICAgCj4gICAvKioKPiAgICAqIHN0cnVj dCBkcm1fZ2VtX3ZyYW1fb2JqZWN0IC0gR0VNIG9iamVjdCBiYWNrZWQgYnkgVlJBTQo+IC0gKiBA Z2VtOglHRU0gb2JqZWN0Cj4gICAgKiBAYm86CQlUVE0gYnVmZmVyIG9iamVjdAo+IC0gKiBAa21h cDoJTWFwcGluZyBpbmZvcm1hdGlvbiBmb3IgQGJvCj4gKyAqIEBtYXA6CU1hcHBpbmcgaW5mb3Jt YXRpb24gZm9yIEBibwo+ICAgICogQHBsYWNlbWVudDoJVFRNIHBsYWNlbWVudCBpbmZvcm1hdGlv bi4gU3VwcG9ydGVkIHBsYWNlbWVudHMgYXJlIFwKPiAgIAklVFRNX1BMX1ZSQU0gYW5kICVUVE1f UExfU1lTVEVNCj4gICAgKiBAcGxhY2VtZW50czoJVFRNIHBsYWNlbWVudCBpbmZvcm1hdGlvbi4K PiBAQCAtNTAsMTUgKzUwLDE1IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKPiAgICAqLwo+ICAg c3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3Qgewo+ICAgCXN0cnVjdCB0dG1fYnVmZmVyX29iamVj dCBibzsKPiAtCXN0cnVjdCB0dG1fYm9fa21hcF9vYmoga21hcDsKPiArCXN0cnVjdCBkbWFfYnVm X21hcCBtYXA7Cj4gICAKPiAgIAkvKioKPiAtCSAqIEBrbWFwX3VzZV9jb3VudDoKPiArCSAqIEB2 bWFwX3VzZV9jb3VudDoKPiAgIAkgKgo+ICAgCSAqIFJlZmVyZW5jZSBjb3VudCBvbiB0aGUgdmly dHVhbCBhZGRyZXNzLgo+ICAgCSAqIFRoZSBhZGRyZXNzIGFyZSB1bi1tYXBwZWQgd2hlbiB0aGUg Y291bnQgcmVhY2hlcyB6ZXJvLgo+ICAgCSAqLwo+IC0JdW5zaWduZWQgaW50IGttYXBfdXNlX2Nv dW50Owo+ICsJdW5zaWduZWQgaW50IHZtYXBfdXNlX2NvdW50Owo+ICAgCj4gICAJLyogU3VwcG9y dGVkIHBsYWNlbWVudHMgYXJlICVUVE1fUExfVlJBTSBhbmQgJVRUTV9QTF9TWVNURU0gKi8KPiAg IAlzdHJ1Y3QgdHRtX3BsYWNlbWVudCBwbGFjZW1lbnQ7Cj4gQEAgLTk3LDggKzk3LDggQEAgdTY0 IGRybV9nZW1fdnJhbV9tbWFwX29mZnNldChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2Jv KTsKPiAgIHM2NCBkcm1fZ2VtX3ZyYW1fb2Zmc2V0KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0 ICpnYm8pOwo+ICAgaW50IGRybV9nZW1fdnJhbV9waW4oc3RydWN0IGRybV9nZW1fdnJhbV9vYmpl Y3QgKmdibywgdW5zaWduZWQgbG9uZyBwbF9mbGFnKTsKPiAgIGludCBkcm1fZ2VtX3ZyYW1fdW5w aW4oc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibyk7Cj4gLXZvaWQgKmRybV9nZW1fdnJh bV92bWFwKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8pOwo+IC12b2lkIGRybV9nZW1f dnJhbV92dW5tYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywgdm9pZCAqdmFkZHIp Owo+ICtpbnQgZHJtX2dlbV92cmFtX3ZtYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdi bywgc3RydWN0IGRtYV9idWZfbWFwICptYXApOwo+ICt2b2lkIGRybV9nZW1fdnJhbV92dW5tYXAo c3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywgc3RydWN0IGRtYV9idWZfbWFwICptYXAp Owo+ICAgCj4gICBpbnQgZHJtX2dlbV92cmFtX2ZpbGxfY3JlYXRlX2R1bWIoc3RydWN0IGRybV9m aWxlICpmaWxlLAo+ICAgCQkJCSAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0 CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo= 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=-12.3 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,NICE_REPLY_A,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 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 F1522C433E7 for ; Thu, 15 Oct 2020 14:22:04 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 EFFC020757 for ; Thu, 15 Oct 2020 14:22:03 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="1q/qNqyb"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="ev4nEbIT" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EFFC020757 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=XZsvip9WlxDxcd6YlsrZmqbNI1AyVK7+iffKt0OOBEw=; b=1q/qNqybzTzxZwTLLGlIDqIB0 wFGqAC2Prysi18CftU98wcUh1rh5Px/cBpf7fV1iknYnXwusdW5yRk4eJNSVQPxCXwtQWP2YE46Vw zxCCwat3dIh+J5BNrQxlhJQmqmyfqOwxF5sRnZADbMnzEgY7ke9LoKBdJzNwQ9AmAOwPEyyVOLyji mioB5B0RIexOoKK/h+bxFnpkM7jJ7OuKANBQk8y/JxIz77es1ga45tFEs4WBYgLaPzNsj9EvGXTyF v/a4QyzTemYYSjWRP3BYyAjsLmzuc3JDAuiPjw8DHOsniyRASHEixdtJgGs93a9JfQGtCCmxMdghl Ysj35lwmA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kT48g-0003Ve-LH; Thu, 15 Oct 2020 14:21:54 +0000 Received: from mail-mw2nam10on2060.outbound.protection.outlook.com ([40.107.94.60] helo=NAM10-MW2-obe.outbound.protection.outlook.com) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kT48d-0003V7-FM; Thu, 15 Oct 2020 14:21:53 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AUnnCFSXdry2sw1L4ia6O64g1l2Yg2XprdkPadyFI+VDLYQpELm2VsYMZE3+rN98ZLfKNf7ZphX5GGRd9D7k7jaw6iraQ+/dlfx0auXBDyTL9Zf8PtqanjhXpEyLOksrJfH1PN0DU1LDl5aDNME7fDWt2LvREi7iUXcpWzOCpdH9MSplKXOQ3CTMUlYUBcJppDZQh07ayvBDwiGlSWnHDYJpgZk8Yk+LGqgIfBLuxaEeYuGwwWwAFxtJGr9Qzh6uFO+9J061vwhH7lHFA+OAy6zEpF5zZuXR+AGe9W8+mQdS28X7YW/7SqucqFXCKoiOYeLxI0jtY4jEhuNMTEfWAQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=s1zJaDsCknzbjiRt/StSITflJScs7eZVdKcjpsdgjsI=; b=TQjQI9Srk0O8AB+AzDXQaAaw3QNjYOf/Xb8IHEneovSvqi8INt9ySqbThfjOf7FFqwXfdlk4TquKI6SY+K3ginCak7As1gfNfVjMNGMZSd04rDfYNZs5FKXaQXoU2Kazh+pOlgwVlQJMsFybcAeNFPF9NFtfWrTV4Lb8YCxM7EPq4hZebKJsNRAuibpw6FIb42JSLRtOd77RqZs99ouW3JJs3FYQL0sj8tsYwYeGZC4TRZyTuTrTX1gjTGHvjrLpinm40mVHBKf5gRgs9Ku/A2sypboomyvvxtmJWfMtLL92nT4rZzq4PSgY/LiSE562+kwhPpYDtrURlCNiA/9ZbA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=s1zJaDsCknzbjiRt/StSITflJScs7eZVdKcjpsdgjsI=; b=ev4nEbIT7ZjdwzBc5xW1PhxZPJppJlzPkhdhNwttquRQxJJCQXZL55EbUdeZxbtPSplLsnq7IvKwRQBHMH9ra5rt/6EYp863XKvnG8cPNuJprat50AFX3W4jScQhmUjBSqmW0qhMaGuFTfP5ECkw8GsXdJPH8Owv8OUVRJUiGMM= Authentication-Results: lists.linaro.org; dkim=none (message not signed) header.d=none;lists.linaro.org; dmarc=none action=none header.from=amd.com; Received: from MN2PR12MB3775.namprd12.prod.outlook.com (2603:10b6:208:159::19) by BL0PR12MB4932.namprd12.prod.outlook.com (2603:10b6:208:1c2::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.21; Thu, 15 Oct 2020 14:21:45 +0000 Received: from MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::f8f7:7403:1c92:3a60]) by MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::f8f7:7403:1c92:3a60%6]) with mapi id 15.20.3477.021; Thu, 15 Oct 2020 14:21:45 +0000 Subject: Re: [PATCH v4 06/10] drm/gem: Use struct dma_buf_map in GEM vmap ops and convert GEM backends To: Thomas Zimmermann , maarten.lankhorst@linux.intel.com, mripard@kernel.org, airlied@linux.ie, daniel@ffwll.ch, sam@ravnborg.org, alexander.deucher@amd.com, kraxel@redhat.com, l.stach@pengutronix.de, linux+etnaviv@armlinux.org.uk, christian.gmeiner@gmail.com, inki.dae@samsung.com, jy0922.shim@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, kgene@kernel.org, krzk@kernel.org, yuq825@gmail.com, bskeggs@redhat.com, robh@kernel.org, tomeu.vizoso@collabora.com, steven.price@arm.com, alyssa.rosenzweig@collabora.com, hjc@rock-chips.com, heiko@sntech.de, hdegoede@redhat.com, sean@poorly.run, eric@anholt.net, oleksandr_andrushchenko@epam.com, ray.huang@amd.com, sumit.semwal@linaro.org, emil.velikov@collabora.com, luben.tuikov@amd.com, apaneers@amd.com, linus.walleij@linaro.org, melissa.srw@gmail.com, chris@chris-wilson.co.uk, miaoqinglang@huawei.com References: <20201015123806.32416-1-tzimmermann@suse.de> <20201015123806.32416-7-tzimmermann@suse.de> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <6bd7d5cf-06c8-3fd8-9bbe-a80ff6bb327e@amd.com> Date: Thu, 15 Oct 2020 16:21:31 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 In-Reply-To: <20201015123806.32416-7-tzimmermann@suse.de> Content-Language: en-US X-Originating-IP: [80.187.123.114] X-ClientProxiedBy: AM0PR03CA0058.eurprd03.prod.outlook.com (2603:10a6:208::35) To MN2PR12MB3775.namprd12.prod.outlook.com (2603:10b6:208:159::19) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [192.168.137.56] (80.187.123.114) by AM0PR03CA0058.eurprd03.prod.outlook.com (2603:10a6:208::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.20 via Frontend Transport; Thu, 15 Oct 2020 14:21:37 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 1402a292-410c-4dd7-5df2-08d87115a47e X-MS-TrafficTypeDiagnostic: BL0PR12MB4932: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qZE7L/zH5aGxqiqWmrxr/TkD8SGVxq492TWlZDRQ8SWP9LUeAjghyncA+V0RbcCiQOlF9BpSa0szaBr1rLMb4pd7NGjinWmMKZzBxFhl/AbSzHryacecP3jmc8SciQoEijiChjkblXtHc4usMJHnAzcMutTXYvIX5HfX6Nm+xOdzuOQCtRKC8c4GqNrw9YZ9L8ZX7aUG8Jez2Kf7T8MqZ1TKwlDddWh5CcJb0lhqwIRd8/qFy18d0ZTQ4NxTPYPSxuSOLxsOH7f+KxYILSZqFnNsnutVIAcmfePky9fzaNcsZwXH2qM8YnHjzPKV14l7WHo1Jo4RzSeIOOJY8yqf3Df5uGdhO9DrcUMwhgotFpmcaIVCTbe+MfIKTxkpI7od6w3lF2gvYlK/Q58+O1aXt5seGL7Bw9/go+uTg39iKc1BB9wtePnfCCvCmVcSs0aQ X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR12MB3775.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(39860400002)(396003)(366004)(136003)(376002)(346002)(36756003)(5660300002)(8936002)(30864003)(478600001)(8676002)(26005)(16526019)(7406005)(34490700002)(186003)(2616005)(16576012)(316002)(6666004)(6486002)(31686004)(52116002)(66574015)(86362001)(66946007)(956004)(83380400001)(2906002)(31696002)(4326008)(66556008)(66476007)(7416002)(921003)(43740500002)(579004)(559001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: m1LAH0A49qIsnoSwQsouBc95tPZsFvI7ILL+HyITCdwV3eSL2iszdF0dHXxMB2oIGD335BwU2D+eG6IuPWolrqv1GJ40za1adhpl3RbZ1r2ntg6FKwrWvSGDqY/euNspLIimOkkAyhMiIudpJhNHjSvToTllhvq/vOB6yXkJ2pK4/2RJUktLTxIQoz6/ZYV5B2FXrDyhgO+doQDORwIK5yqGiTmmTcP2JsACozYQc3xOqlQsDRoVZr6KFOB9/QRdbB1D0k+BYNH8mBU+lCqEXTZeUd3OX2d9Rz7ZUreK8Ld9YFw2teXCkJHPYtYvf7YtFAidpvqnsa+zqvxTCXrJgmEAdWAe62ob7ZrIeKcImgVPpNZC/qogN/FOi1n+ZaYI3EcWs+YLZ8jVE6Gq1sKrVFAlIEv0R5yxdIsbXVqsWuRspmjOiPY5BM1SKSwMC2GfuPK5vkzYOfg1ayT2mmJ4TRuyKXDO+/VHy09vY+KAuYSJFZ/+4PZ5ZM7hcJwk88LVWjAawTnzzWpbtlLyGfKChy2Fcf2yhG+/XLwUVWFJ5kZwGepbJJfsCK/1qs+idevkt4XuzMmAYCjuFjcGdu/5NaHKJDvaGTN63plDDLEo6/KcQ7lBx58OAjHWn7gqC2tgnk+/IDbC3P8DUpKFUGF2Tg== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1402a292-410c-4dd7-5df2-08d87115a47e X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3775.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Oct 2020 14:21:44.9217 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: hUctmsKmzwzlQVH4lhjqevgxGnxCyHnHl623cVkEli3p3TuwQp67xFQjNmWsqHz4 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR12MB4932 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201015_102151_666762_B03D2678 X-CRM114-Status: GOOD ( 28.26 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-samsung-soc@vger.kernel.org, lima@lists.freedesktop.org, nouveau@lists.freedesktop.org, etnaviv@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, virtualization@lists.linux-foundation.org, linaro-mm-sig@lists.linaro.org, linux-rockchip@lists.infradead.org, dri-devel@lists.freedesktop.org, xen-devel@lists.xenproject.org, spice-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org QW0gMTUuMTAuMjAgdW0gMTQ6Mzggc2NocmllYiBUaG9tYXMgWmltbWVybWFubjoKPiBUaGlzIHBh dGNoIHJlcGxhY2VzIHRoZSB2bWFwL3Z1bm1hcCdzIHVzZSBvZiByYXcgcG9pbnRlcnMgaW4gR0VN IG9iamVjdAo+IGZ1bmN0aW9ucyB3aXRoIGluc3RhbmNlcyBvZiBzdHJ1Y3QgZG1hX2J1Zl9tYXAu IEdFTSBiYWNrZW5kcyBhcmUKPiBjb252ZXJ0ZWQgYXMgd2VsbC4gRm9yIG1vc3Qgb2YgdGhlbSwg dGhpcyBzaW1wbHkgY2hhbmdlcyB0aGUgcmV0dXJuZWQgdHlwZS4KPgo+IFRUTS1iYXNlZCBkcml2 ZXJzIG5vdyByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBtZW1v cnksCj4gZWl0aGVyIHN5c3RlbSBvciBJL08gbWVtb3J5LiBHRU0gVlJBTSBoZWxwZXJzIGFuZCBx eGwgbm93IHVzZSB0dG1fYm9fdm1hcCgpCj4gZXQgYWwuIEFtZGdwdSwgbm91dmVhdSBhbmQgcmFk ZW9uIHVzZSBkcm1fZ2VtX3R0bV92bWFwKCkgZXQgYWwgaW5zdGVhZCBvZgo+IGltcGxlbWVudGlu ZyB0aGVpciBvd24gdm1hcCBjYWxsYmFja3MuCj4KPiB2NDoKPiAJKiB1c2UgdHRtX2JvX3ZtYXAo KSwgZHJtX2dlbV90dG1fdm1hcCgpLCBldCBhbC4gKERhbmllbCwgQ2hyaXN0aWFuKQo+IAkqIGZp eCBhIHRyYWlsaW5nIHsgaW4gZHJtX2dlbV92bWFwKCkKPiAJKiByZW1vdmUgc2V2ZXJhbCBlbXB0 eSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBjb252ZXJ0aW5nIHRoZW0gKERhbmllbCkKPiAJKiBjb21t ZW50IHVzZXMgb2YgcmF3IHBvaW50ZXJzIHdpdGggYSBUT0RPIChEYW5pZWwpCj4gCSogVE9ETyBs aXN0OiBjb252ZXJ0IG1vcmUgaGVscGVycyB0byB1c2Ugc3RydWN0IGRtYV9idWZfbWFwCj4KPiBT aWduZWQtb2ZmLWJ5OiBUaG9tYXMgWmltbWVybWFubiA8dHppbW1lcm1hbm5Ac3VzZS5kZT4KClRo ZSBhbWRncHUgY2hhbmdlcyBsb29rIGdvb2QgdG8gbWUsIGJ1dCBJIGNhbid0IGZ1bGx5IGp1ZGdl IHRoZSBvdGhlciBzdHVmZi4KCkFja2VkLWJ5OiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4u a29lbmlnQGFtZC5jb20+Cgo+IC0tLQo+ICAgRG9jdW1lbnRhdGlvbi9ncHUvdG9kby5yc3QgICAg ICAgICAgICAgICAgICB8ICAxOCArKysrCj4gICBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAg ICAgICAgICAgICAgICAgIHwgICAyICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9kbWFfYnVmLmMgfCAgMzYgLS0tLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2RtYV9idWYuaCB8ICAgMiAtCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfZ2VtLmMgICAgIHwgICA1ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfb2JqZWN0LmggIHwgICAxIC0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2N1 cnNvci5jICAgICAgICAgICAgfCAgMjcgKysrLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hc3QvYXN0 X2Rydi5oICAgICAgICAgICAgICAgfCAgIDcgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2Vt LmMgICAgICAgICAgICAgICAgICAgfCAgMjMgKysrLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1f Z2VtX2NtYV9oZWxwZXIuYyAgICAgICAgfCAgMTAgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1f Z2VtX3NobWVtX2hlbHBlci5jICAgICAgfCAgNDggKysrKystLS0tCj4gICBkcml2ZXJzL2dwdS9k cm0vZHJtX2dlbV92cmFtX2hlbHBlci5jICAgICAgIHwgMTA3ICsrKysrKysrKystLS0tLS0tLS0t Cj4gICBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5oICAgICAgIHwgICAyICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9wcmltZS5jIHwgICA5ICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5jICAgICAgICAgICAgIHwgICA2ICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMgICAgICAgICAgIHwgIDExICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX21vZGUuYyAgICAgIHwgIDEwICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnICAgICAgICAgICAgIHwgICAxICsK PiAgIGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uaCAgICAgICAgfCAgIDIgLQo+ ICAgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYyAgICAgICB8ICAgNiArLQo+ ICAgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uaCAgICAgICB8ICAgMiAtCj4g ICBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ByaW1lLmMgICAgIHwgIDIwIC0tLS0K PiAgIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9wZXJmY250LmMgfCAgMTQgKy0t Cj4gICBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kaXNwbGF5LmMgICAgICAgICAgIHwgIDExICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kcmF3LmMgICAgICAgICAgICAgIHwgIDE0ICsr LQo+ICAgZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJ2LmggICAgICAgICAgICAgICB8ICAxMSAr LQo+ICAgZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfb2JqZWN0LmMgICAgICAgICAgICB8ICAzMSAr KystLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX29iamVjdC5oICAgICAgICAgICAgfCAg IDIgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX3ByaW1lLmMgICAgICAgICAgICAgfCAg MTIgKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oICAgICAgICAgICAgIHwg ICAxIC0KPiAgIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jICAgICAgICAgfCAg IDcgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3ByaW1lLmMgICAgICAgfCAg MjAgLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uYyB8 ICAyMiArKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5o IHwgICA0ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdGlueS9jaXJydXMuYyAgICAgICAgICAgICAg IHwgIDEwICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdGlueS9nbTEydTMyMC5jICAgICAgICAgICAg IHwgIDEwICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rlc2V0LmMgICAgICAgICAg IHwgICA4ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbW9kZS5jICAgICAg IHwgIDExICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jICAgICAgICAgICAgICAg IHwgICA2ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaCAgICAgICAgICAgICAg IHwgICAyICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Rydi5jICAgICAgICAgICAg IHwgIDE2ICsrLQo+ICAgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jICAg ICB8ICAxOCArKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmgg ICAgIHwgICA2ICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtLmggICAgICAgICAgICAgICAgICAg ICAgIHwgICA1ICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaCAgICAgICAg ICAgIHwgICAyICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oICAgICAg ICAgIHwgICA0ICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmggICAgICAg ICAgIHwgIDE0ICstLQo+ICAgNDcgZmlsZXMgY2hhbmdlZCwgMzIxIGluc2VydGlvbnMoKyksIDI5 NSBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS90b2RvLnJz dCBiL0RvY3VtZW50YXRpb24vZ3B1L3RvZG8ucnN0Cj4gaW5kZXggNzAwNjM3ZTI1ZWNkLi43ZTZm YzNjMDRhZGQgMTAwNjQ0Cj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvdG9kby5yc3QKPiArKysg Yi9Eb2N1bWVudGF0aW9uL2dwdS90b2RvLnJzdAo+IEBAIC00NDYsNiArNDQ2LDI0IEBAIENvbnRh Y3Q6IFZpbGxlIFN5cmrDpGzDpCwgRGFuaWVsIFZldHRlcgo+ICAgCj4gICBMZXZlbDogSW50ZXJt ZWRpYXRlCj4gICAKPiArVXNlIHN0cnVjdCBkbWFfYnVmX21hcCB0aHJvdWdob3V0IGNvZGViYXNl Cj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICsKPiArUG9p bnRlcnMgdG8gc2hhcmVkIGRldmljZSBtZW1vcnkgYXJlIHN0b3JlZCBpbiBzdHJ1Y3QgZG1hX2J1 Zl9tYXAuIEVhY2gKPiAraW5zdGFuY2Uga25vd3Mgd2hldGhlciBpdCByZWZlcnMgdG8gc3lzdGVt IG9yIEkvTyBtZW1vcnkuIE1vc3Qgb2YgdGhlIERSTS13aWRlCj4gK2ludGVyZmFjZSBoYXZlIGJl ZW4gY29udmVydGVkIHRvIHVzZSBzdHJ1Y3QgZG1hX2J1Zl9tYXAsIGJ1dCBpbXBsZW1lbnRhdGlv bnMKPiArb2Z0ZW4gc3RpbGwgdXNlIHJhdyBwb2ludGVycy4KPiArCj4gK1RoZSB0YXNrIGlzIHRv IHVzZSBzdHJ1Y3QgZG1hX2J1Zl9tYXAgd2hlcmUgaXQgbWFrZXMgc2Vuc2UuCj4gKwo+ICsqIE1l bW9yeSBtYW5hZ2VycyBzaG91bGQgdXNlIHN0cnVjdCBkbWFfYnVmX21hcCBmb3IgZG1hLWJ1Zi1p bXBvcnRlZCBidWZmZXJzLgo+ICsqIFRUTSBtaWdodCBiZW5lZml0IGZyb20gdXNpbmcgc3RydWN0 IGRtYV9idWZfbWFwIGludGVybmFsbHkuCj4gKyogRnJhbWVidWZmZXIgY29weWluZyBhbmQgYmxp dHRpbmcgaGVscGVycyBzaG91bGQgb3BlcmF0ZSBvbiBzdHJ1Y3QgZG1hX2J1Zl9tYXAuCj4gKwo+ ICtDb250YWN0OiBUaG9tYXMgWmltbWVybWFubiA8dHppbW1lcm1hbm5Ac3VzZS5kZT4sIENocmlz dGlhbiBLw7ZuaWcsIERhbmllbCBWZXR0ZXIKPiArCj4gK0xldmVsOiBJbnRlcm1lZGlhdGUKPiAr Cj4gICAKPiAgIENvcmUgcmVmYWN0b3JpbmdzCj4gICA9PT09PT09PT09PT09PT09PQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmln Cj4gaW5kZXggMTQ3ZDYxYjk2NzRlLi4zMTk4MzliODdkMzcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+IEBAIC0y MzksNiArMjM5LDcgQEAgY29uZmlnIERSTV9SQURFT04KPiAgIAlzZWxlY3QgRldfTE9BREVSCj4g ICAgICAgICAgIHNlbGVjdCBEUk1fS01TX0hFTFBFUgo+ICAgICAgICAgICBzZWxlY3QgRFJNX1RU TQo+ICsJc2VsZWN0IERSTV9UVE1fSEVMUEVSCj4gICAJc2VsZWN0IFBPV0VSX1NVUFBMWQo+ICAg CXNlbGVjdCBIV01PTgo+ICAgCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCj4gQEAgLTI1 OSw2ICsyNjAsNyBAQCBjb25maWcgRFJNX0FNREdQVQo+ICAgCXNlbGVjdCBEUk1fS01TX0hFTFBF Ugo+ICAgCXNlbGVjdCBEUk1fU0NIRUQKPiAgIAlzZWxlY3QgRFJNX1RUTQo+ICsJc2VsZWN0IERS TV9UVE1fSEVMUEVSCj4gICAJc2VsZWN0IFBPV0VSX1NVUFBMWQo+ICAgCXNlbGVjdCBIV01PTgo+ ICAgCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5jCj4gaW5kZXggNWI0NjVhYjc3NGQxLi5lNTkxOWVmY2E4 NzAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9i dWYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMK PiBAQCAtNDEsNDIgKzQxLDYgQEAKPiAgICNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UtYXJyYXku aD4KPiAgICNpbmNsdWRlIDxsaW51eC9wY2ktcDJwZG1hLmg+Cj4gICAKPiAtLyoqCj4gLSAqIGFt ZGdwdV9nZW1fcHJpbWVfdm1hcCAtICZkbWFfYnVmX29wcy52bWFwIGltcGxlbWVudGF0aW9uCj4g LSAqIEBvYmo6IEdFTSBCTwo+IC0gKgo+IC0gKiBTZXRzIHVwIGFuIGluLWtlcm5lbCB2aXJ0dWFs IG1hcHBpbmcgb2YgdGhlIEJPJ3MgbWVtb3J5Lgo+IC0gKgo+IC0gKiBSZXR1cm5zOgo+IC0gKiBU aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBtYXBwaW5nIG9yIGFuIGVycm9yIHBvaW50ZXIuCj4g LSAqLwo+IC12b2lkICphbWRncHVfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopCj4gLXsKPiAtCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gZ2VtX3RvX2FtZGdwdV9ibyhv YmopOwo+IC0JaW50IHJldDsKPiAtCj4gLQlyZXQgPSB0dG1fYm9fa21hcCgmYm8tPnRibywgMCwg Ym8tPnRiby5udW1fcGFnZXMsCj4gLQkJCSAgJmJvLT5kbWFfYnVmX3ZtYXApOwo+IC0JaWYgKHJl dCkKPiAtCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+IC0KPiAtCXJldHVybiBiby0+ZG1hX2J1Zl92 bWFwLnZpcnR1YWw7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBhbWRncHVfZ2VtX3ByaW1lX3Z1bm1h cCAtICZkbWFfYnVmX29wcy52dW5tYXAgaW1wbGVtZW50YXRpb24KPiAtICogQG9iajogR0VNIEJP Cj4gLSAqIEB2YWRkcjogVmlydHVhbCBhZGRyZXNzICh1bnVzZWQpCj4gLSAqCj4gLSAqIFRlYXJz IGRvd24gdGhlIGluLWtlcm5lbCB2aXJ0dWFsIG1hcHBpbmcgb2YgdGhlIEJPJ3MgbWVtb3J5Lgo+ IC0gKi8KPiAtdm9pZCBhbWRncHVfZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiwgdm9pZCAqdmFkZHIpCj4gLXsKPiAtCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gZ2Vt X3RvX2FtZGdwdV9ibyhvYmopOwo+IC0KPiAtCXR0bV9ib19rdW5tYXAoJmJvLT5kbWFfYnVmX3Zt YXApOwo+IC19Cj4gLQo+ICAgLyoqCj4gICAgKiBhbWRncHVfZ2VtX3ByaW1lX21tYXAgLSAmZHJt X2RyaXZlci5nZW1fcHJpbWVfbW1hcCBpbXBsZW1lbnRhdGlvbgo+ICAgICogQG9iajogR0VNIEJP Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVm LmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5oCj4gaW5kZXgg MmM1Yzg0YTA2YmI5Li4zOWI1Yjk2MTZmZDggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9idWYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmgKPiBAQCAtMzEsOCArMzEsNiBAQCBzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKmFtZGdwdV9nZW1fcHJpbWVfaW1wb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Cj4gICAJCQkJCSAgICBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zik7Cj4gICBib29sIGFtZGdwdV9k bWFidWZfaXNfeGdtaV9hY2Nlc3NpYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAg CQkJCSAgICAgIHN0cnVjdCBhbWRncHVfYm8gKmJvKTsKPiAtdm9pZCAqYW1kZ3B1X2dlbV9wcmlt ZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAtdm9pZCBhbWRncHVfZ2VtX3By aW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+ICAg aW50IGFtZGdwdV9nZW1fcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKPiAg IAkJCSAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwo+IGluZGV4IGJlMDhhNjNlZjU4Yy4uNTc2NjU5ODI3ZTc0 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwo+IEBAIC0zMyw2 ICszMyw3IEBACj4gICAKPiAgICNpbmNsdWRlIDxkcm0vYW1kZ3B1X2RybS5oPgo+ICAgI2luY2x1 ZGUgPGRybS9kcm1fZGVidWdmcy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdHRtX2hlbHBl ci5oPgo+ICAgCj4gICAjaW5jbHVkZSAiYW1kZ3B1LmgiCj4gICAjaW5jbHVkZSAiYW1kZ3B1X2Rp c3BsYXkuaCIKPiBAQCAtMjIwLDggKzIyMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2dl bV9vYmplY3RfZnVuY3MgYW1kZ3B1X2dlbV9vYmplY3RfZnVuY3MgPSB7Cj4gICAJLm9wZW4gPSBh bWRncHVfZ2VtX29iamVjdF9vcGVuLAo+ICAgCS5jbG9zZSA9IGFtZGdwdV9nZW1fb2JqZWN0X2Ns b3NlLAo+ICAgCS5leHBvcnQgPSBhbWRncHVfZ2VtX3ByaW1lX2V4cG9ydCwKPiAtCS52bWFwID0g YW1kZ3B1X2dlbV9wcmltZV92bWFwLAo+IC0JLnZ1bm1hcCA9IGFtZGdwdV9nZW1fcHJpbWVfdnVu bWFwLAo+ICsJLnZtYXAgPSBkcm1fZ2VtX3R0bV92bWFwLAo+ICsJLnZ1bm1hcCA9IGRybV9nZW1f dHRtX3Z1bm1hcCwKPiAgIH07Cj4gICAKPiAgIC8qCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9vYmplY3QuaAo+IGluZGV4IDEzMmU1Zjk1NTE4MC4uMDEyOTZlZjBkNjczIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaAo+IEBAIC0x MDAsNyArMTAwLDYgQEAgc3RydWN0IGFtZGdwdV9ibyB7Cj4gICAJc3RydWN0IGFtZGdwdV9ibwkJ KnBhcmVudDsKPiAgIAlzdHJ1Y3QgYW1kZ3B1X2JvCQkqc2hhZG93Owo+ICAgCj4gLQlzdHJ1Y3Qg dHRtX2JvX2ttYXBfb2JqCQlkbWFfYnVmX3ZtYXA7Cj4gICAJc3RydWN0IGFtZGdwdV9tbgkJKm1u Owo+ICAgCj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfY3Vyc29y LmMgYi9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9jdXJzb3IuYwo+IGluZGV4IGUwZjQ2MTM5MThh ZC4uNzQyZDQzYTdlZGY0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2N1 cnNvci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfY3Vyc29yLmMKPiBAQCAtMzks NyArMzksNyBAQCBzdGF0aWMgdm9pZCBhc3RfY3Vyc29yX2Zpbmkoc3RydWN0IGFzdF9wcml2YXRl ICphc3QpCj4gICAKPiAgIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhc3QtPmN1cnNvci5n Ym8pOyArK2kpIHsKPiAgIAkJZ2JvID0gYXN0LT5jdXJzb3IuZ2JvW2ldOwo+IC0JCWRybV9nZW1f dnJhbV92dW5tYXAoZ2JvLCBhc3QtPmN1cnNvci52YWRkcltpXSk7Cj4gKwkJZHJtX2dlbV92cmFt X3Z1bm1hcChnYm8sICZhc3QtPmN1cnNvci5tYXBbaV0pOwo+ICAgCQlkcm1fZ2VtX3ZyYW1fdW5w aW4oZ2JvKTsKPiAgIAkJZHJtX2dlbV92cmFtX3B1dChnYm8pOwo+ICAgCX0KPiBAQCAtNjAsNyAr NjAsNyBAQCBpbnQgYXN0X2N1cnNvcl9pbml0KHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0KQo+ICAg CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmYXN0LT5iYXNlOwo+ICAgCXNpemVfdCBzaXplLCBp Owo+ICAgCXN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm87Cj4gLQl2b2lkIF9faW9tZW0g KnZhZGRyOwo+ICsJc3RydWN0IGRtYV9idWZfbWFwIG1hcDsKPiAgIAlpbnQgcmV0Owo+ICAgCj4g ICAJc2l6ZSA9IHJvdW5kdXAoQVNUX0hXQ19TSVpFICsgQVNUX0hXQ19TSUdOQVRVUkVfU0laRSwg UEFHRV9TSVpFKTsKPiBAQCAtNzcsMTYgKzc3LDE1IEBAIGludCBhc3RfY3Vyc29yX2luaXQoc3Ry dWN0IGFzdF9wcml2YXRlICphc3QpCj4gICAJCQlkcm1fZ2VtX3ZyYW1fcHV0KGdibyk7Cj4gICAJ CQlnb3RvIGVycl9kcm1fZ2VtX3ZyYW1fcHV0Owo+ICAgCQl9Cj4gLQkJdmFkZHIgPSBkcm1fZ2Vt X3ZyYW1fdm1hcChnYm8pOwo+IC0JCWlmIChJU19FUlIodmFkZHIpKSB7Cj4gLQkJCXJldCA9IFBU Ul9FUlIodmFkZHIpOwo+ICsJCXJldCA9IGRybV9nZW1fdnJhbV92bWFwKGdibywgJm1hcCk7Cj4g KwkJaWYgKHJldCkgewo+ICAgCQkJZHJtX2dlbV92cmFtX3VucGluKGdibyk7Cj4gICAJCQlkcm1f Z2VtX3ZyYW1fcHV0KGdibyk7Cj4gICAJCQlnb3RvIGVycl9kcm1fZ2VtX3ZyYW1fcHV0Owo+ICAg CQl9Cj4gICAKPiAgIAkJYXN0LT5jdXJzb3IuZ2JvW2ldID0gZ2JvOwo+IC0JCWFzdC0+Y3Vyc29y LnZhZGRyW2ldID0gdmFkZHI7Cj4gKwkJYXN0LT5jdXJzb3IubWFwW2ldID0gbWFwOwo+ICAgCX0K PiAgIAo+ICAgCXJldHVybiBkcm1tX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhc3RfY3Vyc29y X3JlbGVhc2UsIE5VTEwpOwo+IEBAIC05NSw3ICs5NCw3IEBAIGludCBhc3RfY3Vyc29yX2luaXQo c3RydWN0IGFzdF9wcml2YXRlICphc3QpCj4gICAJd2hpbGUgKGkpIHsKPiAgIAkJLS1pOwo+ICAg CQlnYm8gPSBhc3QtPmN1cnNvci5nYm9baV07Cj4gLQkJZHJtX2dlbV92cmFtX3Z1bm1hcChnYm8s IGFzdC0+Y3Vyc29yLnZhZGRyW2ldKTsKPiArCQlkcm1fZ2VtX3ZyYW1fdnVubWFwKGdibywgJmFz dC0+Y3Vyc29yLm1hcFtpXSk7Cj4gICAJCWRybV9nZW1fdnJhbV91bnBpbihnYm8pOwo+ICAgCQlk cm1fZ2VtX3ZyYW1fcHV0KGdibyk7Cj4gICAJfQo+IEBAIC0xNzAsNiArMTY5LDcgQEAgaW50IGFz dF9jdXJzb3JfYmxpdChzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCwgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIpCj4gICB7Cj4gICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZhc3QtPmJhc2U7 Cj4gICAJc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibzsKPiArCXN0cnVjdCBkbWFfYnVm X21hcCBtYXA7Cj4gICAJaW50IHJldDsKPiAgIAl2b2lkICpzcmM7Cj4gICAJdm9pZCBfX2lvbWVt ICpkc3Q7Cj4gQEAgLTE4MywxOCArMTgzLDE3IEBAIGludCBhc3RfY3Vyc29yX2JsaXQoc3RydWN0 IGFzdF9wcml2YXRlICphc3QsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQo+ICAgCXJldCA9 IGRybV9nZW1fdnJhbV9waW4oZ2JvLCAwKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gcmV0 Owo+IC0Jc3JjID0gZHJtX2dlbV92cmFtX3ZtYXAoZ2JvKTsKPiAtCWlmIChJU19FUlIoc3JjKSkg ewo+IC0JCXJldCA9IFBUUl9FUlIoc3JjKTsKPiArCXJldCA9IGRybV9nZW1fdnJhbV92bWFwKGdi bywgJm1hcCk7Cj4gKwlpZiAocmV0KQo+ICAgCQlnb3RvIGVycl9kcm1fZ2VtX3ZyYW1fdW5waW47 Cj4gLQl9Cj4gKwlzcmMgPSBtYXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0 aW9uIHByb3Blcmx5ICovCj4gICAKPiAtCWRzdCA9IGFzdC0+Y3Vyc29yLnZhZGRyW2FzdC0+Y3Vy c29yLm5leHRfaW5kZXhdOwo+ICsJZHN0ID0gYXN0LT5jdXJzb3IubWFwW2FzdC0+Y3Vyc29yLm5l eHRfaW5kZXhdLnZhZGRyX2lvbWVtOwo+ICAgCj4gICAJLyogZG8gZGF0YSB0cmFuc2ZlciB0byBj dXJzb3IgQk8gKi8KPiAgIAl1cGRhdGVfY3Vyc29yX2ltYWdlKGRzdCwgc3JjLCBmYi0+d2lkdGgs IGZiLT5oZWlnaHQpOwo+ICAgCj4gLQlkcm1fZ2VtX3ZyYW1fdnVubWFwKGdibywgc3JjKTsKPiAr CWRybV9nZW1fdnJhbV92dW5tYXAoZ2JvLCAmbWFwKTsKPiAgIAlkcm1fZ2VtX3ZyYW1fdW5waW4o Z2JvKTsKPiAgIAo+ICAgCXJldHVybiAwOwo+IEBAIC0yNTcsNyArMjU2LDcgQEAgdm9pZCBhc3Rf Y3Vyc29yX3Nob3coc3RydWN0IGFzdF9wcml2YXRlICphc3QsIGludCB4LCBpbnQgeSwKPiAgIAl1 OCBfX2lvbWVtICpzaWc7Cj4gICAJdTgganJlZzsKPiAgIAo+IC0JZHN0ID0gYXN0LT5jdXJzb3Iu dmFkZHJbYXN0LT5jdXJzb3IubmV4dF9pbmRleF07Cj4gKwlkc3QgPSBhc3QtPmN1cnNvci5tYXBb YXN0LT5jdXJzb3IubmV4dF9pbmRleF0udmFkZHI7Cj4gICAKPiAgIAlzaWcgPSBkc3QgKyBBU1Rf SFdDX1NJWkU7Cj4gICAJd3JpdGVsKHgsIHNpZyArIEFTVF9IV0NfU0lHTkFUVVJFX1gpOwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9hc3QvYXN0X2Rydi5oCj4gaW5kZXggNDY3MDQ5Y2E4NDMwLi5mOTYzMTQxZGQ4NTEgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vYXN0L2FzdF9kcnYuaAo+IEBAIC0yOCwxMCArMjgsMTEgQEAKPiAgICNpZm5kZWYgX19B U1RfRFJWX0hfXwo+ICAgI2RlZmluZSBfX0FTVF9EUlZfSF9fCj4gICAKPiAtI2luY2x1ZGUgPGxp bnV4L3R5cGVzLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9pby5oPgo+ICsjaW5jbHVkZSA8bGludXgv ZG1hLWJ1Zi1tYXAuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPiAgICNpbmNsdWRlIDxs aW51eC9pMmMtYWxnby1iaXQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC90eXBlcy5oPgo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4K PiAgICNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiBAQCAtMTMxLDcgKzEzMiw3IEBAIHN0cnVj dCBhc3RfcHJpdmF0ZSB7Cj4gICAKPiAgIAlzdHJ1Y3Qgewo+ICAgCQlzdHJ1Y3QgZHJtX2dlbV92 cmFtX29iamVjdCAqZ2JvW0FTVF9ERUZBVUxUX0hXQ19OVU1dOwo+IC0JCXZvaWQgX19pb21lbSAq dmFkZHJbQVNUX0RFRkFVTFRfSFdDX05VTV07Cj4gKwkJc3RydWN0IGRtYV9idWZfbWFwIG1hcFtB U1RfREVGQVVMVF9IV0NfTlVNXTsKPiAgIAkJdW5zaWduZWQgaW50IG5leHRfaW5kZXg7Cj4gICAJ fSBjdXJzb3I7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKPiBpbmRleCAxZGE2N2QzNGU1NWQuLmE4OWFkNDU3 MGUzYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2RybV9nZW0uYwo+IEBAIC0zNiw2ICszNiw3IEBACj4gICAjaW5jbHVkZSA8 bGludXgvcGFnZW1hcC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+Cj4gICAjaW5j bHVkZSA8bGludXgvZG1hLWJ1Zi5oPgo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4K PiAgICNpbmNsdWRlIDxsaW51eC9tZW1fZW5jcnlwdC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3Bh Z2V2ZWMuaD4KPiAgIAo+IEBAIC0xMjA3LDI2ICsxMjA4LDMwIEBAIHZvaWQgZHJtX2dlbV91bnBp bihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAgIAo+ICAgdm9pZCAqZHJtX2dlbV92bWFw KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ICAgewo+IC0Jdm9pZCAqdmFkZHI7Cj4gKwlz dHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICsJaW50IHJldDsKPiAgIAo+IC0JaWYgKG9iai0+ZnVu Y3MtPnZtYXApCj4gLQkJdmFkZHIgPSBvYmotPmZ1bmNzLT52bWFwKG9iaik7Cj4gLQllbHNlCj4g LQkJdmFkZHIgPSBFUlJfUFRSKC1FT1BOT1RTVVBQKTsKPiArCWlmICghb2JqLT5mdW5jcy0+dm1h cCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7Cj4gICAKPiAtCWlmICghdmFkZHIp Cj4gLQkJdmFkZHIgPSBFUlJfUFRSKC1FTk9NRU0pOwo+ICsJcmV0ID0gb2JqLT5mdW5jcy0+dm1h cChvYmosICZtYXApOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJ ZWxzZSBpZiAoZG1hX2J1Zl9tYXBfaXNfbnVsbCgmbWFwKSkKPiArCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKPiAgIAo+IC0JcmV0dXJuIHZhZGRyOwo+ICsJcmV0dXJuIG1hcC52YWRkcjsKPiAg IH0KPiAgIAo+ICAgdm9pZCBkcm1fZ2VtX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aiwgdm9pZCAqdmFkZHIpCj4gICB7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwID0gRE1BX0JV Rl9NQVBfSU5JVF9WQUREUih2YWRkcik7Cj4gKwo+ICAgCWlmICghdmFkZHIpCj4gICAJCXJldHVy bjsKPiAgIAo+ICAgCWlmIChvYmotPmZ1bmNzLT52dW5tYXApCj4gLQkJb2JqLT5mdW5jcy0+dnVu bWFwKG9iaiwgdmFkZHIpOwo+ICsJCW9iai0+ZnVuY3MtPnZ1bm1hcChvYmosICZtYXApOwo+ICAg fQo+ICAgCj4gICAvKioKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fY21h X2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fY21hX2hlbHBlci5jCj4gaW5kZXgg ZDUyNzQ4NWVhMGI3Li5iNTdlM2U5MjIyZjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2RybV9nZW1fY21hX2hlbHBlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fY21h X2hlbHBlci5jCj4gQEAgLTUxOSw2ICs1MTksOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2Vt X2NtYV9wcmltZV9tbWFwKTsKPiAgICAqIGRybV9nZW1fY21hX3ByaW1lX3ZtYXAgLSBtYXAgYSBD TUEgR0VNIG9iamVjdCBpbnRvIHRoZSBrZXJuZWwncyB2aXJ0dWFsCj4gICAgKiAgICAgYWRkcmVz cyBzcGFjZQo+ICAgICogQG9iajogR0VNIG9iamVjdAo+ICsgKiBAbWFwOiBSZXR1cm5zIHRoZSBr ZXJuZWwgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBDTUEgR0VNIG9iamVjdCdzIGJhY2tpbmcKPiAr ICogICAgICAgc3RvcmUuCj4gICAgKgo+ICAgICogVGhpcyBmdW5jdGlvbiBtYXBzIGEgYnVmZmVy IGV4cG9ydGVkIHZpYSBEUk0gUFJJTUUgaW50byB0aGUga2VybmVsJ3MKPiAgICAqIHZpcnR1YWwg YWRkcmVzcyBzcGFjZS4gU2luY2UgdGhlIENNQSBidWZmZXJzIGFyZSBhbHJlYWR5IG1hcHBlZCBp bnRvIHRoZQo+IEBAIC01MjcsMTMgKzUyOSwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2Vt X2NtYV9wcmltZV9tbWFwKTsKPiAgICAqIGRyaXZlcidzICZkcm1fZ2VtX29iamVjdF9mdW5jcy52 bWFwIGNhbGxiYWNrLgo+ICAgICoKPiAgICAqIFJldHVybnM6Cj4gLSAqIFRoZSBrZXJuZWwgdmly dHVhbCBhZGRyZXNzIG9mIHRoZSBDTUEgR0VNIG9iamVjdCdzIGJhY2tpbmcgc3RvcmUuCj4gKyAq IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiAgICAq Lwo+IC12b2lkICpkcm1fZ2VtX2NtYV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqKQo+ICtpbnQgZHJtX2dlbV9jbWFfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IGRybV9nZW1f Y21hX29iamVjdCAqY21hX29iaiA9IHRvX2RybV9nZW1fY21hX29iaihvYmopOwo+ICAgCj4gLQly ZXR1cm4gY21hX29iai0+dmFkZHI7Cj4gKwlkbWFfYnVmX21hcF9zZXRfdmFkZHIobWFwLCBjbWFf b2JqLT52YWRkcik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gICBFWFBPUlRfU1lNQk9MX0dQ TChkcm1fZ2VtX2NtYV9wcmltZV92bWFwKTsKPiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3No bWVtX2hlbHBlci5jCj4gaW5kZXggZmIxMWRmN2FjZWQ1Li41NTUzZjU4ZjY4ZjMgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYwo+IEBAIC0yNTgsMTkgKzI1OCwyNSBA QCB2b2lkIGRybV9nZW1fc2htZW1fdW5waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4g ICB9Cj4gICBFWFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fdW5waW4pOwo+ICAgCj4gLXN0YXRp YyB2b2lkICpkcm1fZ2VtX3NobWVtX3ZtYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29i amVjdCAqc2htZW0pCj4gK3N0YXRpYyBpbnQgZHJtX2dlbV9zaG1lbV92bWFwX2xvY2tlZChzdHJ1 Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtLCBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCkK PiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZzaG1lbS0+YmFzZTsKPiAt CXN0cnVjdCBkbWFfYnVmX21hcCBtYXA7Cj4gICAJaW50IHJldCA9IDA7Cj4gICAKPiAtCWlmIChz aG1lbS0+dm1hcF91c2VfY291bnQrKyA+IDApCj4gLQkJcmV0dXJuIHNobWVtLT52YWRkcjsKPiAr CWlmIChzaG1lbS0+dm1hcF91c2VfY291bnQrKyA+IDApIHsKPiArCQlkbWFfYnVmX21hcF9zZXRf dmFkZHIobWFwLCBzaG1lbS0+dmFkZHIpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICAgCj4gICAJ aWYgKG9iai0+aW1wb3J0X2F0dGFjaCkgewo+IC0JCXJldCA9IGRtYV9idWZfdm1hcChvYmotPmlt cG9ydF9hdHRhY2gtPmRtYWJ1ZiwgJm1hcCk7Cj4gLQkJaWYgKCFyZXQpCj4gLQkJCXNobWVtLT52 YWRkciA9IG1hcC52YWRkcjsKPiArCQlyZXQgPSBkbWFfYnVmX3ZtYXAob2JqLT5pbXBvcnRfYXR0 YWNoLT5kbWFidWYsIG1hcCk7Cj4gKwkJaWYgKCFyZXQpIHsKPiArCQkJaWYgKFdBUk5fT04obWFw LT5pc19pb21lbSkpIHsKPiArCQkJCXJldCA9IC1FSU87Cj4gKwkJCQlnb3RvIGVycl9wdXRfcGFn ZXM7Cj4gKwkJCX0KPiArCQkJc2htZW0tPnZhZGRyID0gbWFwLT52YWRkcjsKPiArCQl9Cj4gICAJ fSBlbHNlIHsKPiAgIAkJcGdwcm90X3QgcHJvdCA9IFBBR0VfS0VSTkVMOwo+ICAgCj4gQEAgLTI4 NCw2ICsyOTAsOCBAQCBzdGF0aWMgdm9pZCAqZHJtX2dlbV9zaG1lbV92bWFwX2xvY2tlZChzdHJ1 Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQo+ICAgCQkJCSAgICBWTV9NQVAsIHByb3Qp Owo+ICAgCQlpZiAoIXNobWVtLT52YWRkcikKPiAgIAkJCXJldCA9IC1FTk9NRU07Cj4gKwkJZWxz ZQo+ICsJCQlkbWFfYnVmX21hcF9zZXRfdmFkZHIobWFwLCBzaG1lbS0+dmFkZHIpOwo+ICAgCX0K PiAgIAo+ICAgCWlmIChyZXQpIHsKPiBAQCAtMjkxLDcgKzI5OSw3IEBAIHN0YXRpYyB2b2lkICpk cm1fZ2VtX3NobWVtX3ZtYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0pCj4gICAJCWdvdG8gZXJyX3B1dF9wYWdlczsKPiAgIAl9Cj4gICAKPiAtCXJldHVybiBzaG1l bS0+dmFkZHI7Cj4gKwlyZXR1cm4gMDsKPiAgIAo+ICAgZXJyX3B1dF9wYWdlczoKPiAgIAlpZiAo IW9iai0+aW1wb3J0X2F0dGFjaCkKPiBAQCAtMjk5LDEyICszMDcsMTQgQEAgc3RhdGljIHZvaWQg KmRybV9nZW1fc2htZW1fdm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpz aG1lbSkKPiAgIGVycl96ZXJvX3VzZToKPiAgIAlzaG1lbS0+dm1hcF91c2VfY291bnQgPSAwOwo+ ICAgCj4gLQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ ICAgLyoKPiAgICAqIGRybV9nZW1fc2htZW1fdm1hcCAtIENyZWF0ZSBhIHZpcnR1YWwgbWFwcGlu ZyBmb3IgYSBzaG1lbSBHRU0gb2JqZWN0Cj4gICAgKiBAc2htZW06IHNobWVtIEdFTSBvYmplY3QK PiArICogQG1hcDogUmV0dXJucyB0aGUga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgU0hN RU0gR0VNIG9iamVjdCdzIGJhY2tpbmcKPiArICogICAgICAgc3RvcmUuCj4gICAgKgo+ICAgICog VGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgYSBjb250aWd1b3VzIGtlcm5lbCB2aXJ0dWFs IGFkZHJlc3MgbWFwcGluZwo+ICAgICogZXhpc3RzIGZvciB0aGUgYnVmZmVyIGJhY2tpbmcgdGhl IHNobWVtIEdFTSBvYmplY3QuCj4gQEAgLTMxOCwyNiArMzI4LDI1IEBAIHN0YXRpYyB2b2lkICpk cm1fZ2VtX3NobWVtX3ZtYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0pCj4gICAgKiBSZXR1cm5zOgo+ICAgICogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJy b3IgY29kZSBvbiBmYWlsdXJlLgo+ICAgICovCj4gLXZvaWQgKmRybV9nZW1fc2htZW1fdm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAraW50IGRybV9nZW1fc2htZW1fdm1hcChzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4g ICAJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1f b2JqKG9iaik7Cj4gLQl2b2lkICp2YWRkcjsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gICAJcmV0ID0g bXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzaG1lbS0+dm1hcF9sb2NrKTsKPiAgIAlpZiAocmV0 KQo+IC0JCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gLQl2YWRkciA9IGRybV9nZW1fc2htZW1fdm1h cF9sb2NrZWQoc2htZW0pOwo+ICsJCXJldHVybiByZXQ7Cj4gKwlyZXQgPSBkcm1fZ2VtX3NobWVt X3ZtYXBfbG9ja2VkKHNobWVtLCBtYXApOwo+ICAgCW11dGV4X3VubG9jaygmc2htZW0tPnZtYXBf bG9jayk7Cj4gICAKPiAtCXJldHVybiB2YWRkcjsKPiArCXJldHVybiByZXQ7Cj4gICB9Cj4gICBF WFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fdm1hcCk7Cj4gICAKPiAtc3RhdGljIHZvaWQgZHJt X2dlbV9zaG1lbV92dW5tYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0pCj4gK3N0YXRpYyB2b2lkIGRybV9nZW1fc2htZW1fdnVubWFwX2xvY2tlZChzdHJ1Y3QgZHJt X2dlbV9zaG1lbV9vYmplY3QgKnNobWVtLAo+ICsJCQkJCXN0cnVjdCBkbWFfYnVmX21hcCAqbWFw KQo+ICAgewo+ICAgCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJnNobWVtLT5iYXNlOwo+ IC0Jc3RydWN0IGRtYV9idWZfbWFwIG1hcCA9IERNQV9CVUZfTUFQX0lOSVRfVkFERFIoc2htZW0t PnZhZGRyKTsKPiAgIAo+ICAgCWlmIChXQVJOX09OX09OQ0UoIXNobWVtLT52bWFwX3VzZV9jb3Vu dCkpCj4gICAJCXJldHVybjsKPiBAQCAtMzQ2LDcgKzM1NSw3IEBAIHN0YXRpYyB2b2lkIGRybV9n ZW1fc2htZW1fdnVubWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVt KQo+ICAgCQlyZXR1cm47Cj4gICAKPiAgIAlpZiAob2JqLT5pbXBvcnRfYXR0YWNoKQo+IC0JCWRt YV9idWZfdnVubWFwKG9iai0+aW1wb3J0X2F0dGFjaC0+ZG1hYnVmLCAmbWFwKTsKPiArCQlkbWFf YnVmX3Z1bm1hcChvYmotPmltcG9ydF9hdHRhY2gtPmRtYWJ1ZiwgbWFwKTsKPiAgIAllbHNlCj4g ICAJCXZ1bm1hcChzaG1lbS0+dmFkZHIpOwo+ICAgCj4gQEAgLTM1Nyw2ICszNjYsNyBAQCBzdGF0 aWMgdm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1f b2JqZWN0ICpzaG1lbSkKPiAgIC8qCj4gICAgKiBkcm1fZ2VtX3NobWVtX3Z1bm1hcCAtIFVubWFw IGEgdmlydHVhbCBtYXBwaW5nIGZvIGEgc2htZW0gR0VNIG9iamVjdAo+ICAgICogQHNobWVtOiBz aG1lbSBHRU0gb2JqZWN0Cj4gKyAqIEBtYXA6IEtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgd2hlcmUg dGhlIFNITUVNIEdFTSBvYmplY3Qgd2FzIG1hcHBlZAo+ICAgICoKPiAgICAqIFRoaXMgZnVuY3Rp b24gY2xlYW5zIHVwIGEga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nIGFjcXVpcmVkIGJ5 Cj4gICAgKiBkcm1fZ2VtX3NobWVtX3ZtYXAoKS4gVGhlIG1hcHBpbmcgaXMgb25seSByZW1vdmVk IHdoZW4gdGhlIHVzZSBjb3VudCBkcm9wcyB0bwo+IEBAIC0zNjYsMTIgKzM3NiwxMiBAQCBzdGF0 aWMgdm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1f b2JqZWN0ICpzaG1lbSkKPiAgICAqIGFsc28gYmUgY2FsbGVkIGJ5IGRyaXZlcnMgZGlyZWN0bHks IGluIHdoaWNoIGNhc2UgaXQgd2lsbCBoaWRlIHRoZQo+ICAgICogZGlmZmVyZW5jZXMgYmV0d2Vl biBkbWEtYnVmIGltcG9ydGVkIGFuZCBuYXRpdmVseSBhbGxvY2F0ZWQgb2JqZWN0cy4KPiAgICAq Lwo+IC12b2lkIGRybV9nZW1fc2htZW1fdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LCB2b2lkICp2YWRkcikKPiArdm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcChzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0 IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7 Cj4gICAKPiAgIAltdXRleF9sb2NrKCZzaG1lbS0+dm1hcF9sb2NrKTsKPiAtCWRybV9nZW1fc2ht ZW1fdnVubWFwX2xvY2tlZChzaG1lbSk7Cj4gKwlkcm1fZ2VtX3NobWVtX3Z1bm1hcF9sb2NrZWQo c2htZW0sIG1hcCk7Cj4gICAJbXV0ZXhfdW5sb2NrKCZzaG1lbS0+dm1hcF9sb2NrKTsKPiAgIH0K PiAgIEVYUE9SVF9TWU1CT0woZHJtX2dlbV9zaG1lbV92dW5tYXApOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9nZW1fdnJhbV9oZWxwZXIuYwo+IGluZGV4IDJkNWVkMzA1MThmMS4uNGQ4NTUzYjI4NTU4IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5jCj4gQEAgLTEsNSArMSw2IEBA Cj4gICAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgo+ICAgCj4g KyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLW1hcC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV9kZWJ1Z2ZzLmg+Cj4gQEAgLTExMyw4ICsx MTQsOCBAQCBzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fY2xlYW51cChzdHJ1Y3QgZHJtX2dlbV92 cmFtX29iamVjdCAqZ2JvKQo+ICAgCSAqIHVwOyBvbmx5IHJlbGVhc2UgdGhlIEdFTSBvYmplY3Qu Cj4gICAJICovCj4gICAKPiAtCVdBUk5fT04oZ2JvLT5rbWFwX3VzZV9jb3VudCk7Cj4gLQlXQVJO X09OKGdiby0+a21hcC52aXJ0dWFsKTsKPiArCVdBUk5fT04oZ2JvLT52bWFwX3VzZV9jb3VudCk7 Cj4gKwlXQVJOX09OKGRtYV9idWZfbWFwX2lzX3NldCgmZ2JvLT5tYXApKTsKPiAgIAo+ICAgCWRy bV9nZW1fb2JqZWN0X3JlbGVhc2UoJmdiby0+Ym8uYmFzZSk7Cj4gICB9Cj4gQEAgLTM4MiwyOSAr MzgzLDM3IEBAIGludCBkcm1fZ2VtX3ZyYW1fdW5waW4oc3RydWN0IGRybV9nZW1fdnJhbV9vYmpl Y3QgKmdibykKPiAgIH0KPiAgIEVYUE9SVF9TWU1CT0woZHJtX2dlbV92cmFtX3VucGluKTsKPiAg IAo+IC1zdGF0aWMgdm9pZCAqZHJtX2dlbV92cmFtX2ttYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2Vt X3ZyYW1fb2JqZWN0ICpnYm8pCj4gK3N0YXRpYyBpbnQgZHJtX2dlbV92cmFtX2ttYXBfbG9ja2Vk KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sCj4gKwkJCQkgICAgc3RydWN0IGRtYV9i dWZfbWFwICptYXApCj4gICB7Cj4gICAJaW50IHJldDsKPiAtCXN0cnVjdCB0dG1fYm9fa21hcF9v YmogKmttYXAgPSAmZ2JvLT5rbWFwOwo+IC0JYm9vbCBpc19pb21lbTsKPiAgIAo+IC0JaWYgKGdi by0+a21hcF91c2VfY291bnQgPiAwKQo+ICsJaWYgKGdiby0+dm1hcF91c2VfY291bnQgPiAwKQo+ ICAgCQlnb3RvIG91dDsKPiAgIAo+IC0JcmV0ID0gdHRtX2JvX2ttYXAoJmdiby0+Ym8sIDAsIGdi by0+Ym8ubnVtX3BhZ2VzLCBrbWFwKTsKPiArCXJldCA9IHR0bV9ib192bWFwKCZnYm8tPmJvLCAm Z2JvLT5tYXApOwo+ICAgCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCQly ZXR1cm4gcmV0Owo+ICAgCj4gICBvdXQ6Cj4gLQkrK2diby0+a21hcF91c2VfY291bnQ7Cj4gLQly ZXR1cm4gdHRtX2ttYXBfb2JqX3ZpcnR1YWwoa21hcCwgJmlzX2lvbWVtKTsKPiArCSsrZ2JvLT52 bWFwX3VzZV9jb3VudDsKPiArCSptYXAgPSBnYm8tPm1hcDsKPiArCj4gKwlyZXR1cm4gMDsKPiAg IH0KPiAgIAo+IC1zdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fa3VubWFwX2xvY2tlZChzdHJ1Y3Qg ZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQo+ICtzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fa3Vu bWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvLAo+ICsJCQkJICAgICAg IHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKQo+ICAgewo+IC0JaWYgKFdBUk5fT05fT05DRSghZ2Jv LT5rbWFwX3VzZV9jb3VudCkpCj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZ2JvLT5iby5i YXNlLmRldjsKPiArCj4gKwlpZiAoZHJtX1dBUk5fT05fT05DRShkZXYsICFnYm8tPnZtYXBfdXNl X2NvdW50KSkKPiAgIAkJcmV0dXJuOwo+IC0JaWYgKC0tZ2JvLT5rbWFwX3VzZV9jb3VudCA+IDAp Cj4gKwo+ICsJaWYgKGRybV9XQVJOX09OX09OQ0UoZGV2LCAhZG1hX2J1Zl9tYXBfaXNfZXF1YWwo Jmdiby0+bWFwLCBtYXApKSkKPiArCQlyZXR1cm47IC8qIEJVRzogbWFwIG5vdCBtYXBwZWQgZnJv bSB0aGlzIEJPICovCj4gKwo+ICsJaWYgKC0tZ2JvLT52bWFwX3VzZV9jb3VudCA+IDApCj4gICAJ CXJldHVybjsKPiAgIAo+ICAgCS8qCj4gQEAgLTQxOCw3ICs0MjcsOSBAQCBzdGF0aWMgdm9pZCBk cm1fZ2VtX3ZyYW1fa3VubWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2Jv KQo+ICAgLyoqCj4gICAgKiBkcm1fZ2VtX3ZyYW1fdm1hcCgpIC0gUGlucyBhbmQgbWFwcyBhIEdF TSBWUkFNIG9iamVjdCBpbnRvIGtlcm5lbCBhZGRyZXNzCj4gICAgKiAgICAgICAgICAgICAgICAg ICAgICAgc3BhY2UKPiAtICogQGdibzoJVGhlIEdFTSBWUkFNIG9iamVjdCB0byBtYXAKPiArICog QGdibzogVGhlIEdFTSBWUkFNIG9iamVjdCB0byBtYXAKPiArICogQG1hcDogUmV0dXJucyB0aGUg a2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgVlJBTSBHRU0gb2JqZWN0J3MgYmFja2luZwo+ ICsgKiAgICAgICBzdG9yZS4KPiAgICAqCj4gICAgKiBUaGUgdm1hcCBmdW5jdGlvbiBwaW5zIGEg R0VNIFZSQU0gb2JqZWN0IHRvIGl0cyBjdXJyZW50IGxvY2F0aW9uLCBlaXRoZXIKPiAgICAqIHN5 c3RlbSBvciB2aWRlbyBtZW1vcnksIGFuZCBtYXBzIGl0cyBidWZmZXIgaW50byBrZXJuZWwgYWRk cmVzcyBzcGFjZS4KPiBAQCAtNDI3LDQ4ICs0MzgsNDQgQEAgc3RhdGljIHZvaWQgZHJtX2dlbV92 cmFtX2t1bm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibykKPiAgICAq IHVubWFwIGFuZCB1bnBpbiB0aGUgR0VNIFZSQU0gb2JqZWN0Lgo+ICAgICoKPiAgICAqIFJldHVy bnM6Cj4gLSAqIFRoZSBidWZmZXIncyB2aXJ0dWFsIGFkZHJlc3Mgb24gc3VjY2Vzcywgb3IKPiAt ICogYW4gRVJSX1BUUigpLWVuY29kZWQgZXJyb3IgY29kZSBvdGhlcndpc2UuCj4gKyAqIDAgb24g c3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiAgICAqLwo+IC12 b2lkICpkcm1fZ2VtX3ZyYW1fdm1hcChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQo+ ICtpbnQgZHJtX2dlbV92cmFtX3ZtYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywg c3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJaW50IHJldDsKPiAtCXZvaWQgKmJh c2U7Cj4gICAKPiAgIAlyZXQgPSB0dG1fYm9fcmVzZXJ2ZSgmZ2JvLT5ibywgdHJ1ZSwgZmFsc2Us IE5VTEwpOwo+ICAgCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCQlyZXR1 cm4gcmV0Owo+ICAgCj4gICAJcmV0ID0gZHJtX2dlbV92cmFtX3Bpbl9sb2NrZWQoZ2JvLCAwKTsK PiAgIAlpZiAocmV0KQo+ICAgCQlnb3RvIGVycl90dG1fYm9fdW5yZXNlcnZlOwo+IC0JYmFzZSA9 IGRybV9nZW1fdnJhbV9rbWFwX2xvY2tlZChnYm8pOwo+IC0JaWYgKElTX0VSUihiYXNlKSkgewo+ IC0JCXJldCA9IFBUUl9FUlIoYmFzZSk7Cj4gKwlyZXQgPSBkcm1fZ2VtX3ZyYW1fa21hcF9sb2Nr ZWQoZ2JvLCBtYXApOwo+ICsJaWYgKHJldCkKPiAgIAkJZ290byBlcnJfZHJtX2dlbV92cmFtX3Vu cGluX2xvY2tlZDsKPiAtCX0KPiAgIAo+ICAgCXR0bV9ib191bnJlc2VydmUoJmdiby0+Ym8pOwo+ ICAgCj4gLQlyZXR1cm4gYmFzZTsKPiArCXJldHVybiAwOwo+ICAgCj4gICBlcnJfZHJtX2dlbV92 cmFtX3VucGluX2xvY2tlZDoKPiAgIAlkcm1fZ2VtX3ZyYW1fdW5waW5fbG9ja2VkKGdibyk7Cj4g ICBlcnJfdHRtX2JvX3VucmVzZXJ2ZToKPiAgIAl0dG1fYm9fdW5yZXNlcnZlKCZnYm8tPmJvKTsK PiAtCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgRVhQT1JU X1NZTUJPTChkcm1fZ2VtX3ZyYW1fdm1hcCk7Cj4gICAKPiAgIC8qKgo+ICAgICogZHJtX2dlbV92 cmFtX3Z1bm1hcCgpIC0gVW5tYXBzIGFuZCB1bnBpbnMgYSBHRU0gVlJBTSBvYmplY3QKPiAtICog QGdibzoJVGhlIEdFTSBWUkFNIG9iamVjdCB0byB1bm1hcAo+IC0gKiBAdmFkZHI6CVRoZSBtYXBw aW5nJ3MgYmFzZSBhZGRyZXNzIGFzIHJldHVybmVkIGJ5IGRybV9nZW1fdnJhbV92bWFwKCkKPiAr ICogQGdibzogVGhlIEdFTSBWUkFNIG9iamVjdCB0byB1bm1hcAo+ICsgKiBAbWFwOiBLZXJuZWwg dmlydHVhbCBhZGRyZXNzIHdoZXJlIHRoZSBWUkFNIEdFTSBvYmplY3Qgd2FzIG1hcHBlZAo+ICAg ICoKPiAgICAqIEEgY2FsbCB0byBkcm1fZ2VtX3ZyYW1fdnVubWFwKCkgdW5tYXBzIGFuZCB1bnBp bnMgYSBHRU0gVlJBTSBidWZmZXIuIFNlZQo+ICAgICogdGhlIGRvY3VtZW50YXRpb24gZm9yIGRy bV9nZW1fdnJhbV92bWFwKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCj4gICAgKi8KPiAtdm9pZCBk cm1fZ2VtX3ZyYW1fdnVubWFwKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sIHZvaWQg KnZhZGRyKQo+ICt2b2lkIGRybV9nZW1fdnJhbV92dW5tYXAoc3RydWN0IGRybV9nZW1fdnJhbV9v YmplY3QgKmdibywgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJaW50IHJldDsK PiAgIAo+IEBAIC00NzYsNyArNDgzLDcgQEAgdm9pZCBkcm1fZ2VtX3ZyYW1fdnVubWFwKHN0cnVj dCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sIHZvaWQgKnZhZGRyKQo+ICAgCWlmIChXQVJOX09O Q0UocmV0LCAidHRtX2JvX3Jlc2VydmVfZmFpbGVkKCk6IHJldD0lZFxuIiwgcmV0KSkKPiAgIAkJ cmV0dXJuOwo+ICAgCj4gLQlkcm1fZ2VtX3ZyYW1fa3VubWFwX2xvY2tlZChnYm8pOwo+ICsJZHJt X2dlbV92cmFtX2t1bm1hcF9sb2NrZWQoZ2JvLCBtYXApOwo+ICAgCWRybV9nZW1fdnJhbV91bnBp bl9sb2NrZWQoZ2JvKTsKPiAgIAo+ICAgCXR0bV9ib191bnJlc2VydmUoJmdiby0+Ym8pOwo+IEBA IC01NjcsMTUgKzU3NCwxMyBAQCBzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fYm9fZHJpdmVyX21v dmVfbm90aWZ5KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sCj4gICAJCQkJCSAgICAg ICBib29sIGV2aWN0LAo+ICAgCQkJCQkgICAgICAgc3RydWN0IHR0bV9yZXNvdXJjZSAqbmV3X21l bSkKPiAgIHsKPiAtCXN0cnVjdCB0dG1fYm9fa21hcF9vYmogKmttYXAgPSAmZ2JvLT5rbWFwOwo+ ICsJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyA9ICZnYm8tPmJvOwo+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGJvLT5iYXNlLmRldjsKPiAgIAo+IC0JaWYgKFdBUk5fT05fT05DRShn Ym8tPmttYXBfdXNlX2NvdW50KSkKPiArCWlmIChkcm1fV0FSTl9PTl9PTkNFKGRldiwgZ2JvLT52 bWFwX3VzZV9jb3VudCkpCj4gICAJCXJldHVybjsKPiAgIAo+IC0JaWYgKCFrbWFwLT52aXJ0dWFs KQo+IC0JCXJldHVybjsKPiAtCXR0bV9ib19rdW5tYXAoa21hcCk7Cj4gLQlrbWFwLT52aXJ0dWFs ID0gTlVMTDsKPiArCXR0bV9ib192dW5tYXAoYm8sICZnYm8tPm1hcCk7Cj4gICB9Cj4gICAKPiAg IHN0YXRpYyBpbnQgZHJtX2dlbV92cmFtX2JvX2RyaXZlcl9tb3ZlKHN0cnVjdCBkcm1fZ2VtX3Zy YW1fb2JqZWN0ICpnYm8sCj4gQEAgLTgzMiwzNyArODM3LDMzIEBAIHN0YXRpYyB2b2lkIGRybV9n ZW1fdnJhbV9vYmplY3RfdW5waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW0pCj4gICB9Cj4g ICAKPiAgIC8qKgo+IC0gKiBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3ZtYXAoKSAtIFwKPiAtCUltcGxl bWVudHMgJnN0cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcy52bWFwCj4gLSAqIEBnZW06CVRoZSBH RU0gb2JqZWN0IHRvIG1hcAo+ICsgKiBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3ZtYXAoKSAtCj4gKyAq CUltcGxlbWVudHMgJnN0cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcy52bWFwCj4gKyAqIEBnZW06 IFRoZSBHRU0gb2JqZWN0IHRvIG1hcAo+ICsgKiBAbWFwOiBSZXR1cm5zIHRoZSBrZXJuZWwgdmly dHVhbCBhZGRyZXNzIG9mIHRoZSBWUkFNIEdFTSBvYmplY3QncyBiYWNraW5nCj4gKyAqICAgICAg IHN0b3JlLgo+ICAgICoKPiAgICAqIFJldHVybnM6Cj4gLSAqIFRoZSBidWZmZXJzIHZpcnR1YWwg YWRkcmVzcyBvbiBzdWNjZXNzLCBvcgo+IC0gKiBOVUxMIG90aGVyd2lzZS4KPiArICogMCBvbiBz dWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgo+ICAgICovCj4gLXN0 YXRpYyB2b2lkICpkcm1fZ2VtX3ZyYW1fb2JqZWN0X3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpnZW0pCj4gK3N0YXRpYyBpbnQgZHJtX2dlbV92cmFtX29iamVjdF92bWFwKHN0cnVjdCBkcm1f Z2VtX29iamVjdCAqZ2VtLCBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCkKPiAgIHsKPiAgIAlzdHJ1 Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvID0gZHJtX2dlbV92cmFtX29mX2dlbShnZW0pOwo+ IC0Jdm9pZCAqYmFzZTsKPiAgIAo+IC0JYmFzZSA9IGRybV9nZW1fdnJhbV92bWFwKGdibyk7Cj4g LQlpZiAoSVNfRVJSKGJhc2UpKQo+IC0JCXJldHVybiBOVUxMOwo+IC0JcmV0dXJuIGJhc2U7Cj4g KwlyZXR1cm4gZHJtX2dlbV92cmFtX3ZtYXAoZ2JvLCBtYXApOwo+ICAgfQo+ICAgCj4gICAvKioK PiAtICogZHJtX2dlbV92cmFtX29iamVjdF92dW5tYXAoKSAtIFwKPiAtCUltcGxlbWVudHMgJnN0 cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcy52dW5tYXAKPiAtICogQGdlbToJVGhlIEdFTSBvYmpl Y3QgdG8gdW5tYXAKPiAtICogQHZhZGRyOglUaGUgbWFwcGluZydzIGJhc2UgYWRkcmVzcwo+ICsg KiBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3Z1bm1hcCgpIC0KPiArICoJSW1wbGVtZW50cyAmc3RydWN0 IGRybV9nZW1fb2JqZWN0X2Z1bmNzLnZ1bm1hcAo+ICsgKiBAZ2VtOiBUaGUgR0VNIG9iamVjdCB0 byB1bm1hcAo+ICsgKiBAbWFwOiBLZXJuZWwgdmlydHVhbCBhZGRyZXNzIHdoZXJlIHRoZSBWUkFN IEdFTSBvYmplY3Qgd2FzIG1hcHBlZAo+ICAgICovCj4gLXN0YXRpYyB2b2lkIGRybV9nZW1fdnJh bV9vYmplY3RfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtLAo+IC0JCQkJICAgICAg IHZvaWQgKnZhZGRyKQo+ICtzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3Z1bm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbSwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7 Cj4gICAJc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibyA9IGRybV9nZW1fdnJhbV9vZl9n ZW0oZ2VtKTsKPiAgIAo+IC0JZHJtX2dlbV92cmFtX3Z1bm1hcChnYm8sIHZhZGRyKTsKPiArCWRy bV9nZW1fdnJhbV92dW5tYXAoZ2JvLCBtYXApOwo+ICAgfQo+ICAgCj4gICAvKgo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5oIGIvZHJpdmVycy9ncHUv ZHJtL2V0bmF2aXYvZXRuYXZpdl9kcnYuaAo+IGluZGV4IDk2ODJjMjZkODliYi4uZjViZTYyN2Ux ZGUwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZHJ2LmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5oCj4gQEAgLTUxLDcg KzUxLDcgQEAgaW50IGV0bmF2aXZfaW9jdGxfZ2VtX3N1Ym1pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB2b2lkICpkYXRhLAo+ICAgaW50IGV0bmF2aXZfZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZp bHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKPiAgIGludCBldG5hdml2X2dlbV9tbWFw X29mZnNldChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdTY0ICpvZmZzZXQpOwo+ICAgc3Ry dWN0IHNnX3RhYmxlICpldG5hdml2X2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmopOwo+IC12b2lkICpldG5hdml2X2dlbV9wcmltZV92bWFwKHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqKTsKPiAraW50IGV0bmF2aXZfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIGludCBl dG5hdml2X2dlbV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkJ ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpldG5hdml2X2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fcHJp bWUuYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3ByaW1lLmMKPiBpbmRl eCBhNmQ5OTMyYTMyYWUuLmJjMjU0M2RkOTg3ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vZXRuYXZpdi9ldG5hdml2X2dlbV9wcmltZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V0 bmF2aXYvZXRuYXZpdl9nZW1fcHJpbWUuYwo+IEBAIC0yMiw5ICsyMiwxNCBAQCBzdHJ1Y3Qgc2df dGFibGUgKmV0bmF2aXZfZ2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiAgIAlyZXR1cm4gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKG9iai0+ZGV2LCBldG5h dml2X29iai0+cGFnZXMsIG5wYWdlcyk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqZXRuYXZpdl9nZW1f cHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAraW50IGV0bmF2aXZfZ2Vt X3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21h cCAqbWFwKQo+ICAgewo+IC0JcmV0dXJuIGV0bmF2aXZfZ2VtX3ZtYXAob2JqKTsKPiArCXZvaWQg KnZhZGRyID0gZXRuYXZpdl9nZW1fdm1hcChvYmopOwo+ICsJaWYgKCF2YWRkcikKPiArCQlyZXR1 cm4gLUVOT01FTTsKPiArCWRtYV9idWZfbWFwX3NldF92YWRkcihtYXAsIHZhZGRyKTsKPiArCj4g KwlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+ICAgaW50IGV0bmF2aXZfZ2VtX3ByaW1lX21tYXAoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5jCj4gaW5kZXgg MTEyMjNmZTM0OGRmLi44MzJlNTI4MGE2ZWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2xpbWEvbGltYV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmMK PiBAQCAtMTgyLDE0ICsxODIsMTQgQEAgc3RhdGljIGludCBsaW1hX2dlbV9waW4oc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmopCj4gICAJcmV0dXJuIGRybV9nZW1fc2htZW1fcGluKG9iaik7Cj4g ICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgKmxpbWFfZ2VtX3ZtYXAoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmopCj4gK3N0YXRpYyBpbnQgbGltYV9nZW1fdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IGxpbWFf Ym8gKmJvID0gdG9fbGltYV9ibyhvYmopOwo+ICAgCj4gICAJaWYgKGJvLT5oZWFwX3NpemUpCj4g LQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gICAKPiAt CXJldHVybiBkcm1fZ2VtX3NobWVtX3ZtYXAob2JqKTsKPiArCXJldHVybiBkcm1fZ2VtX3NobWVt X3ZtYXAob2JqLCBtYXApOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW50IGxpbWFfZ2VtX21tYXAo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMgYi9kcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMKPiBpbmRleCBkYzZkZjllOWE0MGQuLmEwNzBhODVm OGYzNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMKPiBAQCAtMSw2ICsxLDcgQEAK PiAgIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAo+ICAgLyogQ29w eXJpZ2h0IDIwMTctMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KPiAgIAo+ICsj aW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9rdGhyZWFk Lmg+Cj4gICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3ZtYWxs b2MuaD4KPiBAQCAtMzAzLDYgKzMwNCw4IEBAIHN0YXRpYyB2b2lkIGxpbWFfc2NoZWRfYnVpbGRf ZXJyb3JfdGFza19saXN0KHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2spCj4gICAJc3RydWN0 IGxpbWFfZHVtcF9jaHVua19idWZmZXIgKmJ1ZmZlcl9jaHVuazsKPiAgIAl1MzIgc2l6ZSwgdGFz a19zaXplLCBtZW1fc2l6ZTsKPiAgIAlpbnQgaTsKPiArCXN0cnVjdCBkbWFfYnVmX21hcCBtYXA7 Cj4gKwlpbnQgcmV0Owo+ICAgCj4gICAJbXV0ZXhfbG9jaygmZGV2LT5lcnJvcl90YXNrX2xpc3Rf bG9jayk7Cj4gICAKPiBAQCAtMzg4LDE1ICszOTEsMTUgQEAgc3RhdGljIHZvaWQgbGltYV9zY2hl ZF9idWlsZF9lcnJvcl90YXNrX2xpc3Qoc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzaykKPiAg IAkJfSBlbHNlIHsKPiAgIAkJCWJ1ZmZlcl9jaHVuay0+c2l6ZSA9IGxpbWFfYm9fc2l6ZShibyk7 Cj4gICAKPiAtCQkJZGF0YSA9IGRybV9nZW1fc2htZW1fdm1hcCgmYm8tPmJhc2UuYmFzZSk7Cj4g LQkJCWlmIChJU19FUlJfT1JfTlVMTChkYXRhKSkgewo+ICsJCQlyZXQgPSBkcm1fZ2VtX3NobWVt X3ZtYXAoJmJvLT5iYXNlLmJhc2UsICZtYXApOwo+ICsJCQlpZiAocmV0KSB7Cj4gICAJCQkJa3Zm cmVlKGV0KTsKPiAgIAkJCQlnb3RvIG91dDsKPiAgIAkJCX0KPiAgIAo+IC0JCQltZW1jcHkoYnVm ZmVyX2NodW5rICsgMSwgZGF0YSwgYnVmZmVyX2NodW5rLT5zaXplKTsKPiArCQkJbWVtY3B5KGJ1 ZmZlcl9jaHVuayArIDEsIG1hcC52YWRkciwgYnVmZmVyX2NodW5rLT5zaXplKTsKPiAgIAo+IC0J CQlkcm1fZ2VtX3NobWVtX3Z1bm1hcCgmYm8tPmJhc2UuYmFzZSwgZGF0YSk7Cj4gKwkJCWRybV9n ZW1fc2htZW1fdnVubWFwKCZiby0+YmFzZS5iYXNlLCAmbWFwKTsKPiAgIAkJfQo+ICAgCj4gICAJ CWJ1ZmZlcl9jaHVuayA9ICh2b2lkICopKGJ1ZmZlcl9jaHVuayArIDEpICsgYnVmZmVyX2NodW5r LT5zaXplOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX21v ZGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2FnMjAwL21nYWcyMDBfbW9kZS5jCj4gaW5kZXggMzg2 NzJmOWU1YzRmLi44ZWY3Njc2OWI5N2YgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21n YWcyMDAvbWdhZzIwMF9tb2RlLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2Fn MjAwX21vZGUuYwo+IEBAIC05LDYgKzksNyBAQAo+ICAgICovCj4gICAKPiAgICNpbmNsdWRlIDxs aW51eC9kZWxheS5oPgo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiAgIAo+ICAg I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICAgI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljX3N0YXRlX2hlbHBlci5oPgo+IEBAIC0xNTU2LDE1ICsxNTU3LDE4IEBAIG1nYWcyMDBf aGFuZGxlX2RhbWFnZShzdHJ1Y3QgbWdhX2RldmljZSAqbWRldiwgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsCj4gICAJCSAgICAgIHN0cnVjdCBkcm1fcmVjdCAqY2xpcCkKPiAgIHsKPiAgIAlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJm1kZXYtPmJhc2U7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9t YXAgbWFwOwo+ICAgCXZvaWQgKnZtYXA7Cj4gKwlpbnQgcmV0Owo+ICAgCj4gLQl2bWFwID0gZHJt X2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0pOwo+IC0JaWYgKGRybV9XQVJOX09OKGRldiwgIXZt YXApKQo+ICsJcmV0ID0gZHJtX2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0sICZtYXApOwo+ICsJ aWYgKGRybV9XQVJOX09OKGRldiwgcmV0KSkKPiAgIAkJcmV0dXJuOyAvKiBCVUc6IFNITUVNIEJP IHNob3VsZCBhbHdheXMgYmUgdm1hcHBlZCAqLwo+ICsJdm1hcCA9IG1hcC52YWRkcjsgLyogVE9E TzogVXNlIG1hcHBpbmcgYWJzdHJhY3Rpb24gcHJvcGVybHkgKi8KPiAgIAo+ICAgCWRybV9mYl9t ZW1jcHlfZHN0Y2xpcChtZGV2LT52cmFtLCB2bWFwLCBmYiwgY2xpcCk7Cj4gICAKPiAtCWRybV9n ZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sIHZtYXApOwo+ICsJZHJtX2dlbV9zaG1lbV92dW5t YXAoZmItPm9ialswXSwgJm1hcCk7Cj4gICAKPiAgIAkvKiBBbHdheXMgc2Nhbm91dCBpbWFnZSBh dCBWUkFNIG9mZnNldCAwICovCj4gICAJbWdhZzIwMF9zZXRfc3RhcnRhZGQobWRldiwgKHUzMikw KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZyBiL2RyaXZl cnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWcKPiBpbmRleCA1ZGVjMWU1Njk0YjcuLjk0MzYzMTBk MDg1NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZwo+IEBAIC02LDYgKzYsNyBAQCBjb25m aWcgRFJNX05PVVZFQVUKPiAgIAlzZWxlY3QgRldfTE9BREVSCj4gICAJc2VsZWN0IERSTV9LTVNf SEVMUEVSCj4gICAJc2VsZWN0IERSTV9UVE0KPiArCXNlbGVjdCBEUk1fVFRNX0hFTFBFUgo+ICAg CXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFIGlmIERSTV9OT1VWRUFVX0JBQ0tMSUdIVAo+ ICAgCXNlbGVjdCBBQ1BJX1ZJREVPIGlmIEFDUEkgJiYgWDg2ICYmIEJBQ0tMSUdIVF9DTEFTU19E RVZJQ0UgJiYgSU5QVVQKPiAgIAlzZWxlY3QgWDg2X1BMQVRGT1JNX0RFVklDRVMgaWYgQUNQSSAm JiBYODYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5o IGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5oCj4gaW5kZXggNjQxZWY2Mjk4 YTBlLi42MDQ1Yjg1YTc2MmEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUv bm91dmVhdV9iby5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5o Cj4gQEAgLTM5LDggKzM5LDYgQEAgc3RydWN0IG5vdXZlYXVfYm8gewo+ICAgCXVuc2lnbmVkIG1v ZGU7Cj4gICAKPiAgIAlzdHJ1Y3Qgbm91dmVhdV9kcm1fdGlsZSAqdGlsZTsKPiAtCj4gLQlzdHJ1 Y3QgdHRtX2JvX2ttYXBfb2JqIGRtYV9idWZfdm1hcDsKPiAgIH07Cj4gICAKPiAgIHN0YXRpYyBp bmxpbmUgc3RydWN0IG5vdXZlYXVfYm8gKgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bm91dmVhdS9ub3V2ZWF1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9n ZW0uYwo+IGluZGV4IDlhNDIxYzM5NDlkZS4uZjk0MmI1MjZiMGE1IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCj4gQEAgLTI0LDYgKzI0LDggQEAKPiAgICAqCj4gICAg Ki8KPiAgIAo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdHRtX2hlbHBlci5oPgo+ICsKPiAgICNp bmNsdWRlICJub3V2ZWF1X2Rydi5oIgo+ICAgI2luY2x1ZGUgIm5vdXZlYXVfZG1hLmgiCj4gICAj aW5jbHVkZSAibm91dmVhdV9mZW5jZS5oIgo+IEBAIC0xNzYsOCArMTc4LDggQEAgY29uc3Qgc3Ry dWN0IGRybV9nZW1fb2JqZWN0X2Z1bmNzIG5vdXZlYXVfZ2VtX29iamVjdF9mdW5jcyA9IHsKPiAg IAkucGluID0gbm91dmVhdV9nZW1fcHJpbWVfcGluLAo+ICAgCS51bnBpbiA9IG5vdXZlYXVfZ2Vt X3ByaW1lX3VucGluLAo+ICAgCS5nZXRfc2dfdGFibGUgPSBub3V2ZWF1X2dlbV9wcmltZV9nZXRf c2dfdGFibGUsCj4gLQkudm1hcCA9IG5vdXZlYXVfZ2VtX3ByaW1lX3ZtYXAsCj4gLQkudnVubWFw ID0gbm91dmVhdV9nZW1fcHJpbWVfdnVubWFwLAo+ICsJLnZtYXAgPSBkcm1fZ2VtX3R0bV92bWFw LAo+ICsJLnZ1bm1hcCA9IGRybV9nZW1fdHRtX3Z1bm1hcCwKPiAgIH07Cj4gICAKPiAgIGludAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5oIGIvZHJp dmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uaAo+IGluZGV4IGIzNWMxODAzMjJlMi4u M2I5MTljN2M5MzFjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZl YXVfZ2VtLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5oCj4g QEAgLTM3LDcgKzM3LDUgQEAgZXh0ZXJuIHZvaWQgbm91dmVhdV9nZW1fcHJpbWVfdW5waW4oc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICopOwo+ICAgZXh0ZXJuIHN0cnVjdCBzZ190YWJsZSAqbm91dmVh dV9nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKTsKPiAgIGV4 dGVybiBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm5vdXZlYXVfZ2VtX3ByaW1lX2ltcG9ydF9zZ190 YWJsZSgKPiAgIAlzdHJ1Y3QgZHJtX2RldmljZSAqLCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50 ICosIHN0cnVjdCBzZ190YWJsZSAqKTsKPiAtZXh0ZXJuIHZvaWQgKm5vdXZlYXVfZ2VtX3ByaW1l X3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICopOwo+IC1leHRlcm4gdm9pZCBub3V2ZWF1X2dl bV9wcmltZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICosIHZvaWQgKik7Cj4gICAKPiAg ICNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3By aW1lLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ByaW1lLmMKPiBpbmRleCBh ODI2NGFlYmYzZDQuLjJmMTZiNTI0OTI4MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v bm91dmVhdS9ub3V2ZWF1X3ByaW1lLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9u b3V2ZWF1X3ByaW1lLmMKPiBAQCAtMzUsMjYgKzM1LDYgQEAgc3RydWN0IHNnX3RhYmxlICpub3V2 ZWF1X2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4g ICAJcmV0dXJuIGRybV9wcmltZV9wYWdlc190b19zZyhvYmotPmRldiwgbnZiby0+Ym8udHRtLT5w YWdlcywgbnBhZ2VzKTsKPiAgIH0KPiAgIAo+IC12b2lkICpub3V2ZWF1X2dlbV9wcmltZV92bWFw KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+IC17Cj4gLQlzdHJ1Y3Qgbm91dmVhdV9ibyAq bnZibyA9IG5vdXZlYXVfZ2VtX29iamVjdChvYmopOwo+IC0JaW50IHJldDsKPiAtCj4gLQlyZXQg PSB0dG1fYm9fa21hcCgmbnZiby0+Ym8sIDAsIG52Ym8tPmJvLm51bV9wYWdlcywKPiAtCQkJICAm bnZiby0+ZG1hX2J1Zl92bWFwKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0 KTsKPiAtCj4gLQlyZXR1cm4gbnZiby0+ZG1hX2J1Zl92bWFwLnZpcnR1YWw7Cj4gLX0KPiAtCj4g LXZvaWQgbm91dmVhdV9nZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LCB2b2lkICp2YWRkcikKPiAtewo+IC0Jc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8gPSBub3V2ZWF1 X2dlbV9vYmplY3Qob2JqKTsKPiAtCj4gLQl0dG1fYm9fa3VubWFwKCZudmJvLT5kbWFfYnVmX3Zt YXApOwo+IC19Cj4gLQo+ICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpub3V2ZWF1X2dlbV9wcmlt ZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJCQkJCQkgc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+ICAgCQkJCQkJCSBzdHJ1Y3Qgc2dfdGFi bGUgKnNnKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rf cGVyZmNudC5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X3BlcmZjbnQuYwo+ IGluZGV4IGZkYmM4ZDk0OTEzNS4uNWFiMDNkNjA1ZjU3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9wZXJmY250LmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vcGFuZnJvc3QvcGFuZnJvc3RfcGVyZmNudC5jCj4gQEAgLTUsNiArNSw3IEBACj4gICAjaW5j bHVkZSA8ZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmg+Cj4gICAjaW5jbHVkZSA8ZHJtL3BhbmZy b3N0X2RybS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KPiArI2luY2x1ZGUg PGxpbnV4L2RtYS1idWYtbWFwLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Cj4gICAj aW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K PiBAQCAtNzIsNiArNzMsNyBAQCBzdGF0aWMgaW50IHBhbmZyb3N0X3BlcmZjbnRfZW5hYmxlX2xv Y2tlZChzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiwKPiAgIHsKPiAgIAlzdHJ1Y3QgcGFu ZnJvc3RfZmlsZV9wcml2ICp1c2VyID0gZmlsZV9wcml2LT5kcml2ZXJfcHJpdjsKPiAgIAlzdHJ1 Y3QgcGFuZnJvc3RfcGVyZmNudCAqcGVyZmNudCA9IHBmZGV2LT5wZXJmY250Owo+ICsJc3RydWN0 IGRtYV9idWZfbWFwIG1hcDsKPiAgIAlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKmJvOwo+ ICAgCXUzMiBjZmcsIGFzOwo+ICAgCWludCByZXQ7Cj4gQEAgLTEwMywxMSArMTA1LDEwIEBAIHN0 YXRpYyBpbnQgcGFuZnJvc3RfcGVyZmNudF9lbmFibGVfbG9ja2VkKHN0cnVjdCBwYW5mcm9zdF9k ZXZpY2UgKnBmZGV2LAo+ICAgCQlnb3RvIGVycl9jbG9zZV9ibzsKPiAgIAl9Cj4gICAKPiAtCXBl cmZjbnQtPmJ1ZiA9IGRybV9nZW1fc2htZW1fdm1hcCgmYm8tPmJhc2UpOwo+IC0JaWYgKElTX0VS UihwZXJmY250LT5idWYpKSB7Cj4gLQkJcmV0ID0gUFRSX0VSUihwZXJmY250LT5idWYpOwo+ICsJ cmV0ID0gZHJtX2dlbV9zaG1lbV92bWFwKCZiby0+YmFzZSwgJm1hcCk7Cj4gKwlpZiAocmV0KQo+ ICAgCQlnb3RvIGVycl9wdXRfbWFwcGluZzsKPiAtCX0KPiArCXBlcmZjbnQtPmJ1ZiA9IG1hcC52 YWRkcjsKPiAgIAo+ICAgCS8qCj4gICAJICogSW52YWxpZGF0ZSB0aGUgY2FjaGUgYW5kIGNsZWFy IHRoZSBjb3VudGVycyB0byBzdGFydCBmcm9tIGEgZnJlc2gKPiBAQCAtMTYzLDcgKzE2NCw3IEBA IHN0YXRpYyBpbnQgcGFuZnJvc3RfcGVyZmNudF9lbmFibGVfbG9ja2VkKHN0cnVjdCBwYW5mcm9z dF9kZXZpY2UgKnBmZGV2LAo+ICAgCXJldHVybiAwOwo+ICAgCj4gICBlcnJfdnVubWFwOgo+IC0J ZHJtX2dlbV9zaG1lbV92dW5tYXAoJmJvLT5iYXNlLCBwZXJmY250LT5idWYpOwo+ICsJZHJtX2dl bV9zaG1lbV92dW5tYXAoJmJvLT5iYXNlLCAmbWFwKTsKPiAgIGVycl9wdXRfbWFwcGluZzoKPiAg IAlwYW5mcm9zdF9nZW1fbWFwcGluZ19wdXQocGVyZmNudC0+bWFwcGluZyk7Cj4gICBlcnJfY2xv c2VfYm86Cj4gQEAgLTE4MCw2ICsxODEsNyBAQCBzdGF0aWMgaW50IHBhbmZyb3N0X3BlcmZjbnRf ZGlzYWJsZV9sb2NrZWQoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYsCj4gICB7Cj4gICAJ c3RydWN0IHBhbmZyb3N0X2ZpbGVfcHJpdiAqdXNlciA9IGZpbGVfcHJpdi0+ZHJpdmVyX3ByaXY7 Cj4gICAJc3RydWN0IHBhbmZyb3N0X3BlcmZjbnQgKnBlcmZjbnQgPSBwZmRldi0+cGVyZmNudDsK PiArCXN0cnVjdCBkbWFfYnVmX21hcCBtYXAgPSBETUFfQlVGX01BUF9JTklUX1ZBRERSKHBlcmZj bnQtPmJ1Zik7Cj4gICAKPiAgIAlpZiAodXNlciAhPSBwZXJmY250LT51c2VyKQo+ICAgCQlyZXR1 cm4gLUVJTlZBTDsKPiBAQCAtMTkyLDcgKzE5NCw3IEBAIHN0YXRpYyBpbnQgcGFuZnJvc3RfcGVy ZmNudF9kaXNhYmxlX2xvY2tlZChzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiwKPiAgIAkJ ICBHUFVfUEVSRkNOVF9DRkdfTU9ERShHUFVfUEVSRkNOVF9DRkdfTU9ERV9PRkYpKTsKPiAgIAo+ ICAgCXBlcmZjbnQtPnVzZXIgPSBOVUxMOwo+IC0JZHJtX2dlbV9zaG1lbV92dW5tYXAoJnBlcmZj bnQtPm1hcHBpbmctPm9iai0+YmFzZS5iYXNlLCBwZXJmY250LT5idWYpOwo+ICsJZHJtX2dlbV9z aG1lbV92dW5tYXAoJnBlcmZjbnQtPm1hcHBpbmctPm9iai0+YmFzZS5iYXNlLCAmbWFwKTsKPiAg IAlwZXJmY250LT5idWYgPSBOVUxMOwo+ICAgCXBhbmZyb3N0X2dlbV9jbG9zZSgmcGVyZmNudC0+ bWFwcGluZy0+b2JqLT5iYXNlLmJhc2UsIGZpbGVfcHJpdik7Cj4gICAJcGFuZnJvc3RfbW11X2Fz X3B1dChwZmRldiwgcGVyZmNudC0+bWFwcGluZy0+bW11KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3F4bC9xeGxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZGlz cGxheS5jCj4gaW5kZXggNDVmZDc2ZTA0YmRjLi5lMTY1ZmE5YjIwODkgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZGlzcGxheS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfZGlzcGxheS5jCj4gQEAgLTI1LDYgKzI1LDcgQEAKPiAgIAo+ICAgI2luY2x1ZGUg PGxpbnV4L2NyYzMyLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2RtYS1idWYtbWFwLmg+Cj4gICAKPiAgICNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgo+ ICAgI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gQEAgLTU4MSw2ICs1ODIsOCBAQCBzdGF0 aWMgdm9pZCBxeGxfY3Vyc29yX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs Cj4gICAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gICAJc3RydWN0IHF4bF9ibyAqY3Vy c29yX2JvID0gTlVMTCwgKnVzZXJfYm8gPSBOVUxMLCAqb2xkX2N1cnNvcl9ibyA9IE5VTEw7Cj4g ICAJaW50IHJldDsKPiArCXN0cnVjdCBkbWFfYnVmX21hcCB1c2VyX21hcDsKPiArCXN0cnVjdCBk bWFfYnVmX21hcCBjdXJzb3JfbWFwOwo+ICAgCXZvaWQgKnVzZXJfcHRyOwo+ICAgCWludCBzaXpl ID0gNjQqNjQqNDsKPiAgIAo+IEBAIC01OTUsOSArNTk4LDEwIEBAIHN0YXRpYyB2b2lkIHF4bF9j dXJzb3JfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgIAkJdXNlcl9i byA9IGdlbV90b19xeGxfYm8ob2JqKTsKPiAgIAo+ICAgCQkvKiBwaW5uaW5nIGlzIGRvbmUgaW4g dGhlIHByZXBhcmUvY2xlYW51cCBmcmFtZXZidWZmZXIgKi8KPiAtCQlyZXQgPSBxeGxfYm9fa21h cCh1c2VyX2JvLCAmdXNlcl9wdHIpOwo+ICsJCXJldCA9IHF4bF9ib19rbWFwKHVzZXJfYm8sICZ1 c2VyX21hcCk7Cj4gICAJCWlmIChyZXQpCj4gICAJCQlnb3RvIG91dF9mcmVlX3JlbGVhc2U7Cj4g KwkJdXNlcl9wdHIgPSB1c2VyX21hcC52YWRkcjsgLyogVE9ETzogVXNlIG1hcHBpbmcgYWJzdHJh Y3Rpb24gcHJvcGVybHkgKi8KPiAgIAo+ICAgCQlyZXQgPSBxeGxfYWxsb2NfYm9fcmVzZXJ2ZWQo cWRldiwgcmVsZWFzZSwKPiAgIAkJCQkJICAgIHNpemVvZihzdHJ1Y3QgcXhsX2N1cnNvcikgKyBz aXplLAo+IEBAIC02MTMsNyArNjE3LDcgQEAgc3RhdGljIHZvaWQgcXhsX2N1cnNvcl9hdG9taWNf dXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCQlpZiAocmV0KQo+ICAgCQkJZ290 byBvdXRfdW5waW47Cj4gICAKPiAtCQlyZXQgPSBxeGxfYm9fa21hcChjdXJzb3JfYm8sICh2b2lk ICoqKSZjdXJzb3IpOwo+ICsJCXJldCA9IHF4bF9ib19rbWFwKGN1cnNvcl9ibywgJmN1cnNvcl9t YXApOwo+ICAgCQlpZiAocmV0KQo+ICAgCQkJZ290byBvdXRfYmFja29mZjsKPiAgIAo+IEBAIC0x MTMzLDYgKzExMzcsNyBAQCBpbnQgcXhsX2NyZWF0ZV9tb25pdG9yc19vYmplY3Qoc3RydWN0IHF4 bF9kZXZpY2UgKnFkZXYpCj4gICB7Cj4gICAJaW50IHJldDsKPiAgIAlzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKmdvYmo7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICAgCWludCBtb25pdG9y c19jb25maWdfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcXhsX21vbml0b3JzX2NvbmZpZykgKwo+ICAg CQlxeGxfbnVtX2NydGMgKiBzaXplb2Yoc3RydWN0IHF4bF9oZWFkKTsKPiAgIAo+IEBAIC0xMTQ5 LDcgKzExNTQsNyBAQCBpbnQgcXhsX2NyZWF0ZV9tb25pdG9yc19vYmplY3Qoc3RydWN0IHF4bF9k ZXZpY2UgKnFkZXYpCj4gICAJaWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPiAgIAo+IC0JcXhs X2JvX2ttYXAocWRldi0+bW9uaXRvcnNfY29uZmlnX2JvLCBOVUxMKTsKPiArCXF4bF9ib19rbWFw KHFkZXYtPm1vbml0b3JzX2NvbmZpZ19ibywgJm1hcCk7Cj4gICAKPiAgIAlxZGV2LT5tb25pdG9y c19jb25maWcgPSBxZGV2LT5tb25pdG9yc19jb25maWdfYm8tPmtwdHI7Cj4gICAJcWRldi0+cmFt X2hlYWRlci0+bW9uaXRvcnNfY29uZmlnID0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfZHJhdy5jIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJhdy5jCj4gaW5kZXgg MzU5OWRiMDk2OTczLi43YjdhY2I5MTA3ODAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfZHJhdy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJhdy5jCj4g QEAgLTIwLDYgKzIwLDggQEAKPiAgICAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gICAgKi8KPiAgIAo+ ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiArCj4gICAjaW5jbHVkZSA8ZHJtL2Ry bV9mb3VyY2MuaD4KPiAgIAo+ICAgI2luY2x1ZGUgInF4bF9kcnYuaCIKPiBAQCAtNDIsMTMgKzQ0 LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcXhsX3JlY3QgKmRyYXdhYmxlX3NldF9jbGlwcGluZyhzdHJ1 Y3QgcXhsX2RldmljZSAqcWRldiwKPiAgIAkJCQkJICAgICAgdW5zaWduZWQgaW50IG51bV9jbGlw cywKPiAgIAkJCQkJICAgICAgc3RydWN0IHF4bF9ibyAqY2xpcHNfYm8pCj4gICB7Cj4gKwlzdHJ1 Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICAgCXN0cnVjdCBxeGxfY2xpcF9yZWN0cyAqZGV2X2NsaXBz Owo+ICAgCWludCByZXQ7Cj4gICAKPiAtCXJldCA9IHF4bF9ib19rbWFwKGNsaXBzX2JvLCAodm9p ZCAqKikmZGV2X2NsaXBzKTsKPiAtCWlmIChyZXQpIHsKPiArCXJldCA9IHF4bF9ib19rbWFwKGNs aXBzX2JvLCAmbWFwKTsKPiArCWlmIChyZXQpCj4gICAJCXJldHVybiBOVUxMOwo+IC0JfQo+ICsJ ZGV2X2NsaXBzID0gbWFwLnZhZGRyOyAvKiBUT0RPOiBVc2UgbWFwcGluZyBhYnN0cmFjdGlvbiBw cm9wZXJseSAqLwo+ICsKPiAgIAlkZXZfY2xpcHMtPm51bV9yZWN0cyA9IG51bV9jbGlwczsKPiAg IAlkZXZfY2xpcHMtPmNodW5rLm5leHRfY2h1bmsgPSAwOwo+ICAgCWRldl9jbGlwcy0+Y2h1bmsu cHJldl9jaHVuayA9IDA7Cj4gQEAgLTE0Miw2ICsxNDYsNyBAQCB2b2lkIHF4bF9kcmF3X2RpcnR5 X2ZiKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAo+ICAgCWludCBzdHJpZGUgPSBmYi0+cGl0Y2hl c1swXTsKPiAgIAkvKiBkZXB0aCBpcyBub3QgYWN0dWFsbHkgaW50ZXJlc3RpbmcsIHdlIGRvbid0 IG1hc2sgd2l0aCBpdCAqLwo+ICAgCWludCBkZXB0aCA9IGZiLT5mb3JtYXQtPmNwcFswXSAqIDg7 Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgc3VyZmFjZV9tYXA7Cj4gICAJdWludDhfdCAqc3VyZmFj ZV9iYXNlOwo+ICAgCXN0cnVjdCBxeGxfcmVsZWFzZSAqcmVsZWFzZTsKPiAgIAlzdHJ1Y3QgcXhs X2JvICpjbGlwc19ibzsKPiBAQCAtMTk3LDkgKzIwMiwxMCBAQCB2b2lkIHF4bF9kcmF3X2RpcnR5 X2ZiKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAo+ICAgCWlmIChyZXQpCj4gICAJCWdvdG8gb3V0 X3JlbGVhc2VfYmFja29mZjsKPiAgIAo+IC0JcmV0ID0gcXhsX2JvX2ttYXAoYm8sICh2b2lkICoq KSZzdXJmYWNlX2Jhc2UpOwo+ICsJcmV0ID0gcXhsX2JvX2ttYXAoYm8sICZzdXJmYWNlX21hcCk7 Cj4gICAJaWYgKHJldCkKPiAgIAkJZ290byBvdXRfcmVsZWFzZV9iYWNrb2ZmOwo+ICsJc3VyZmFj ZV9iYXNlID0gc3VyZmFjZV9tYXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0 aW9uIHByb3Blcmx5ICovCj4gICAKPiAgIAlyZXQgPSBxeGxfaW1hZ2VfaW5pdChxZGV2LCByZWxl YXNlLCBkaW1hZ2UsIHN1cmZhY2VfYmFzZSwKPiAgIAkJCSAgICAgbGVmdCAtIGR1bWJfc2hhZG93 X29mZnNldCwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJ2LmggYi9k cml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kcnYuaAo+IGluZGV4IDM2MDJlOGIzNDE4OS4uZWI0Mzdm ZWE1ZDllIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX2Rydi5oCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJ2LmgKPiBAQCAtMzAsNiArMzAsNyBAQAo+ICAg ICogRGVmaW5pdGlvbnMgdGFrZW4gZnJvbSBzcGljZS1wcm90b2NvbCwgcGx1cyBrZXJuZWwgZHJp dmVyIHNwZWNpZmljIGJpdHMuCj4gICAgKi8KPiAgIAo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1 Zi1tYXAuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UuaD4KPiAgICNpbmNsdWRlIDxs aW51eC9maXJtd2FyZS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ IEBAIC01MCw2ICs1MSw4IEBACj4gICAKPiAgICNpbmNsdWRlICJxeGxfZGV2LmgiCj4gICAKPiAr c3RydWN0IGRtYV9idWZfbWFwOwo+ICsKPiAgICNkZWZpbmUgRFJJVkVSX0FVVEhPUgkJIkRhdmUg QWlybGllIgo+ICAgCj4gICAjZGVmaW5lIERSSVZFUl9OQU1FCQkicXhsIgo+IEBAIC03OSw3ICs4 Miw3IEBAIHN0cnVjdCBxeGxfYm8gewo+ICAgCS8qIFByb3RlY3RlZCBieSB0Ym8ucmVzZXJ2ZWQg Ki8KPiAgIAlzdHJ1Y3QgdHRtX3BsYWNlCQlwbGFjZW1lbnRzWzNdOwo+ICAgCXN0cnVjdCB0dG1f cGxhY2VtZW50CQlwbGFjZW1lbnQ7Cj4gLQlzdHJ1Y3QgdHRtX2JvX2ttYXBfb2JqCQlrbWFwOwo+ ICsJc3RydWN0IGRtYV9idWZfbWFwCQltYXA7Cj4gICAJdm9pZAkJCQkqa3B0cjsKPiAgIAl1bnNp Z25lZCBpbnQgICAgICAgICAgICAgICAgICAgIG1hcF9jb3VudDsKPiAgIAlpbnQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHR5cGU7Cj4gQEAgLTMzNSw3ICszMzgsNiBAQCBpbnQgcXhsX2dl bV9vYmplY3Rfb3BlbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYpOwo+ICAgdm9pZCBxeGxfZ2VtX29iamVjdF9jbG9zZShzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiwKPiAgIAkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwo+ICAg dm9pZCBxeGxfYm9fZm9yY2VfZGVsZXRlKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2KTsKPiAtaW50 IHF4bF9ib19rbWFwKHN0cnVjdCBxeGxfYm8gKmJvLCB2b2lkICoqcHRyKTsKPiAgIAo+ICAgLyog cXhsX2R1bWIuYyAqLwo+ICAgaW50IHF4bF9tb2RlX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2LAo+IEBAIC00NDUsOCArNDQ3LDkgQEAgc3RydWN0IHNnX3RhYmxlICpxeGxf Z2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gICBz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnF4bF9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKAo+ICAg CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFj aCwKPiAgIAlzdHJ1Y3Qgc2dfdGFibGUgKnNndCk7Cj4gLXZvaWQgKnF4bF9nZW1fcHJpbWVfdm1h cChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gLXZvaWQgcXhsX2dlbV9wcmltZV92dW5t YXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHZvaWQgKnZhZGRyKTsKPiAraW50IHF4bF9n ZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZf bWFwICptYXApOwo+ICt2b2lkIHF4bF9nZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqLAo+ICsJCQkgIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIGludCBxeGxf Z2VtX3ByaW1lX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCj4gICAJCQkJc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9xeGwvcXhsX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfb2JqZWN0LmMKPiBp bmRleCA5NDBlOTkzNTRmNDkuLjc1NWRmNGQ4Zjk1ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vcXhsL3F4bF9vYmplY3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX29i amVjdC5jCj4gQEAgLTIzLDEwICsyMywxMiBAQAo+ICAgICogICAgICAgICAgQWxvbiBMZXZ5Cj4g ICAgKi8KPiAgIAo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2lvLW1hcHBpbmcuaD4KPiArCj4gICAjaW5jbHVkZSAicXhsX2Rydi5oIgo+ICAgI2lu Y2x1ZGUgInF4bF9vYmplY3QuaCIKPiAgIAo+IC0jaW5jbHVkZSA8bGludXgvaW8tbWFwcGluZy5o Pgo+ICAgc3RhdGljIHZvaWQgcXhsX3R0bV9ib19kZXN0cm95KHN0cnVjdCB0dG1fYnVmZmVyX29i amVjdCAqdGJvKQo+ICAgewo+ICAgCXN0cnVjdCBxeGxfYm8gKmJvOwo+IEBAIC0xNTIsMjQgKzE1 NCwyNyBAQCBpbnQgcXhsX2JvX2NyZWF0ZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKPiAgIAly ZXR1cm4gMDsKPiAgIH0KPiAgIAo+IC1pbnQgcXhsX2JvX2ttYXAoc3RydWN0IHF4bF9ibyAqYm8s IHZvaWQgKipwdHIpCj4gK2ludCBxeGxfYm9fa21hcChzdHJ1Y3QgcXhsX2JvICpibywgc3RydWN0 IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gLQlib29sIGlzX2lvbWVtOwo+ICAgCWludCByOwo+ ICAgCj4gICAJaWYgKGJvLT5rcHRyKSB7Cj4gLQkJaWYgKHB0cikKPiAtCQkJKnB0ciA9IGJvLT5r cHRyOwo+ICAgCQliby0+bWFwX2NvdW50Kys7Cj4gLQkJcmV0dXJuIDA7Cj4gKwkJZ290byBvdXQ7 Cj4gICAJfQo+IC0JciA9IHR0bV9ib19rbWFwKCZiby0+dGJvLCAwLCBiby0+dGJvLm51bV9wYWdl cywgJmJvLT5rbWFwKTsKPiArCXIgPSB0dG1fYm9fdm1hcCgmYm8tPnRibywgJmJvLT5tYXApOwo+ ICAgCWlmIChyKQo+ICAgCQlyZXR1cm4gcjsKPiAtCWJvLT5rcHRyID0gdHRtX2ttYXBfb2JqX3Zp cnR1YWwoJmJvLT5rbWFwLCAmaXNfaW9tZW0pOwo+IC0JaWYgKHB0cikKPiAtCQkqcHRyID0gYm8t PmtwdHI7Cj4gICAJYm8tPm1hcF9jb3VudCA9IDE7Cj4gKwo+ICsJLyogVE9ETzogUmVtb3ZlIGtw dHIgaW4gZmF2b3Igb2YgbWFwIGV2ZXJ5d2hlcmUuICovCj4gKwlpZiAoYm8tPm1hcC5pc19pb21l bSkKPiArCQliby0+a3B0ciA9ICh2b2lkICopYm8tPm1hcC52YWRkcl9pb21lbTsKPiArCWVsc2UK PiArCQliby0+a3B0ciA9IGJvLT5tYXAudmFkZHI7Cj4gKwo+ICtvdXQ6Cj4gKwkqbWFwID0gYm8t Pm1hcDsKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IEBAIC0xODAsNiArMTg1LDcgQEAgdm9p ZCAqcXhsX2JvX2ttYXBfYXRvbWljX3BhZ2Uoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsCj4gICAJ dm9pZCAqcnB0cjsKPiAgIAlpbnQgcmV0Owo+ICAgCXN0cnVjdCBpb19tYXBwaW5nICptYXA7Cj4g KwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgYm9fbWFwOwo+ICAgCj4gICAJaWYgKGJvLT50Ym8ubWVtLm1l bV90eXBlID09IFRUTV9QTF9WUkFNKQo+ICAgCQltYXAgPSBxZGV2LT52cmFtX21hcHBpbmc7Cj4g QEAgLTE5Niw5ICsyMDIsMTAgQEAgdm9pZCAqcXhsX2JvX2ttYXBfYXRvbWljX3BhZ2Uoc3RydWN0 IHF4bF9kZXZpY2UgKnFkZXYsCj4gICAJCXJldHVybiBycHRyOwo+ICAgCX0KPiAgIAo+IC0JcmV0 ID0gcXhsX2JvX2ttYXAoYm8sICZycHRyKTsKPiArCXJldCA9IHF4bF9ib19rbWFwKGJvLCAmYm9f bWFwKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gTlVMTDsKPiArCXJwdHIgPSBib19tYXAu dmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4gICAK PiAgIAlycHRyICs9IHBhZ2Vfb2Zmc2V0ICogUEFHRV9TSVpFOwo+ICAgCXJldHVybiBycHRyOwo+ IEBAIC0yMTIsNyArMjE5LDcgQEAgdm9pZCBxeGxfYm9fa3VubWFwKHN0cnVjdCBxeGxfYm8gKmJv KQo+ICAgCWlmIChiby0+bWFwX2NvdW50ID4gMCkKPiAgIAkJcmV0dXJuOwo+ICAgCWJvLT5rcHRy ID0gTlVMTDsKPiAtCXR0bV9ib19rdW5tYXAoJmJvLT5rbWFwKTsKPiArCXR0bV9ib192dW5tYXAo JmJvLT50Ym8sICZiby0+bWFwKTsKPiAgIH0KPiAgIAo+ICAgdm9pZCBxeGxfYm9fa3VubWFwX2F0 b21pY19wYWdlKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vcXhsL3F4bF9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX29iamVj dC5oCj4gaW5kZXggMDlhNWM4MTgzMjRkLi5lYmYyNGM5ZDJiZjIgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL3F4bC9xeGxfb2JqZWN0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcXhs L3F4bF9vYmplY3QuaAo+IEBAIC02Myw3ICs2Myw3IEBAIGV4dGVybiBpbnQgcXhsX2JvX2NyZWF0 ZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKPiAgIAkJCSBib29sIGtlcm5lbCwgYm9vbCBwaW5u ZWQsIHUzMiBkb21haW4sCj4gICAJCQkgc3RydWN0IHF4bF9zdXJmYWNlICpzdXJmLAo+ICAgCQkJ IHN0cnVjdCBxeGxfYm8gKipib19wdHIpOwo+IC1leHRlcm4gaW50IHF4bF9ib19rbWFwKHN0cnVj dCBxeGxfYm8gKmJvLCB2b2lkICoqcHRyKTsKPiArZXh0ZXJuIGludCBxeGxfYm9fa21hcChzdHJ1 Y3QgcXhsX2JvICpibywgc3RydWN0IGRtYV9idWZfbWFwICptYXApOwo+ICAgZXh0ZXJuIHZvaWQg cXhsX2JvX2t1bm1hcChzdHJ1Y3QgcXhsX2JvICpibyk7Cj4gICB2b2lkICpxeGxfYm9fa21hcF9h dG9taWNfcGFnZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwgc3RydWN0IHF4bF9ibyAqYm8sIGlu dCBwYWdlX29mZnNldCk7Cj4gICB2b2lkIHF4bF9ib19rdW5tYXBfYXRvbWljX3BhZ2Uoc3RydWN0 IHF4bF9kZXZpY2UgKnFkZXYsIHN0cnVjdCBxeGxfYm8gKmJvLCB2b2lkICptYXApOwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9wcmltZS5jIGIvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfcHJpbWUuYwo+IGluZGV4IDdkMzgxNmZjYTVhOC4uNGFhOTQ5Nzk5NDQ2IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX3ByaW1lLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vcXhsL3F4bF9wcmltZS5jCj4gQEAgLTU0LDIwICs1NCwyMCBAQCBzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKnF4bF9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKAo+ICAgCXJldHVybiBF UlJfUFRSKC1FTk9TWVMpOwo+ICAgfQo+ICAgCj4gLXZvaWQgKnF4bF9nZW1fcHJpbWVfdm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAraW50IHF4bF9nZW1fcHJpbWVfdm1hcChzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4g ICAJc3RydWN0IHF4bF9ibyAqYm8gPSBnZW1fdG9fcXhsX2JvKG9iaik7Cj4gLQl2b2lkICpwdHI7 Cj4gICAJaW50IHJldDsKPiAgIAo+IC0JcmV0ID0gcXhsX2JvX2ttYXAoYm8sICZwdHIpOwo+ICsJ cmV0ID0gcXhsX2JvX2ttYXAoYm8sIG1hcCk7Cj4gICAJaWYgKHJldCA8IDApCj4gLQkJcmV0dXJu IEVSUl9QVFIocmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICAgCj4gLQlyZXR1cm4gcHRyOwo+ICsJ cmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtdm9pZCBxeGxfZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpCj4gK3ZvaWQgcXhsX2dlbV9wcmltZV92 dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCSAgc3RydWN0IGRtYV9idWZf bWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IHF4bF9ibyAqYm8gPSBnZW1fdG9fcXhsX2JvKG9i aik7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBi L2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKPiBpbmRleCA1ZDU0YmNjZWJkNGQuLjQ0 Y2I1ZWU2ZmMyMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAo+IEBAIC01MDksNyArNTA5 LDYgQEAgc3RydWN0IHJhZGVvbl9ibyB7Cj4gICAJLyogQ29uc3RhbnQgYWZ0ZXIgaW5pdGlhbGl6 YXRpb24gKi8KPiAgIAlzdHJ1Y3QgcmFkZW9uX2RldmljZQkJKnJkZXY7Cj4gICAKPiAtCXN0cnVj dCB0dG1fYm9fa21hcF9vYmoJCWRtYV9idWZfdm1hcDsKPiAgIAlwaWRfdAkJCQlwaWQ7Cj4gICAK PiAgICNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25f Z2VtLmMKPiBpbmRleCAwY2NkNzIxM2U0MWYuLmQyODc2Y2UzYmM5ZSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9yYWRlb24vcmFkZW9uX2dlbS5jCj4gQEAgLTMxLDYgKzMxLDcgQEAKPiAgICNpbmNsdWRlIDxk cm0vZHJtX2RlYnVnZnMuaD4KPiAgICNpbmNsdWRlIDxkcm0vZHJtX2RldmljZS5oPgo+ICAgI2lu Y2x1ZGUgPGRybS9kcm1fZmlsZS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdHRtX2hlbHBl ci5oPgo+ICAgI2luY2x1ZGUgPGRybS9yYWRlb25fZHJtLmg+Cj4gICAKPiAgICNpbmNsdWRlICJy YWRlb24uaCIKPiBAQCAtNDAsOCArNDEsNiBAQCBzdHJ1Y3QgZG1hX2J1ZiAqcmFkZW9uX2dlbV9w cmltZV9leHBvcnQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqLAo+ICAgc3RydWN0IHNnX3Rh YmxlICpyYWRlb25fZ2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaik7Cj4gICBpbnQgcmFkZW9uX2dlbV9wcmltZV9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopOwo+ICAgdm9pZCByYWRlb25fZ2VtX3ByaW1lX3VucGluKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqKTsKPiAtdm9pZCAqcmFkZW9uX2dlbV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqKTsKPiAtdm9pZCByYWRlb25fZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+ICAgCj4gICBzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9nZW1fb2JqZWN0X2Z1bmNzIHJhZGVvbl9nZW1fb2JqZWN0X2Z1bmNzOwo+ICAgCj4g QEAgLTIzNSw4ICsyMzQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9nZW1fb2JqZWN0X2Z1 bmNzIHJhZGVvbl9nZW1fb2JqZWN0X2Z1bmNzID0gewo+ICAgCS5waW4gPSByYWRlb25fZ2VtX3By aW1lX3BpbiwKPiAgIAkudW5waW4gPSByYWRlb25fZ2VtX3ByaW1lX3VucGluLAo+ICAgCS5nZXRf c2dfdGFibGUgPSByYWRlb25fZ2VtX3ByaW1lX2dldF9zZ190YWJsZSwKPiAtCS52bWFwID0gcmFk ZW9uX2dlbV9wcmltZV92bWFwLAo+IC0JLnZ1bm1hcCA9IHJhZGVvbl9nZW1fcHJpbWVfdnVubWFw LAo+ICsJLnZtYXAgPSBkcm1fZ2VtX3R0bV92bWFwLAo+ICsJLnZ1bm1hcCA9IGRybV9nZW1fdHRt X3Z1bm1hcCwKPiAgIH07Cj4gICAKPiAgIC8qCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9yYWRlb24vcmFkZW9uX3ByaW1lLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9w cmltZS5jCj4gaW5kZXggYjlkZTBlNTFjMGJlLi4wODhkMzlhNTFjMGQgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcHJpbWUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9yYWRlb24vcmFkZW9uX3ByaW1lLmMKPiBAQCAtMzksMjYgKzM5LDYgQEAgc3RydWN0IHNn X3RhYmxlICpyYWRlb25fZ2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiAgIAlyZXR1cm4gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKG9iai0+ZGV2LCBiby0+ dGJvLnR0bS0+cGFnZXMsIG5wYWdlcyk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqcmFkZW9uX2dlbV9w cmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+IC17Cj4gLQlzdHJ1Y3QgcmFk ZW9uX2JvICpibyA9IGdlbV90b19yYWRlb25fYm8ob2JqKTsKPiAtCWludCByZXQ7Cj4gLQo+IC0J cmV0ID0gdHRtX2JvX2ttYXAoJmJvLT50Ym8sIDAsIGJvLT50Ym8ubnVtX3BhZ2VzLAo+IC0JCQkg ICZiby0+ZG1hX2J1Zl92bWFwKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0 KTsKPiAtCj4gLQlyZXR1cm4gYm8tPmRtYV9idWZfdm1hcC52aXJ0dWFsOwo+IC19Cj4gLQo+IC12 b2lkIHJhZGVvbl9nZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB2 b2lkICp2YWRkcikKPiAtewo+IC0Jc3RydWN0IHJhZGVvbl9ibyAqYm8gPSBnZW1fdG9fcmFkZW9u X2JvKG9iaik7Cj4gLQo+IC0JdHRtX2JvX2t1bm1hcCgmYm8tPmRtYV9idWZfdm1hcCk7Cj4gLX0K PiAtCj4gICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnJhZGVvbl9nZW1fcHJpbWVfaW1wb3J0X3Nn X3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCQkJCQkJc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqYXR0YWNoLAo+ICAgCQkJCQkJCXN0cnVjdCBzZ190YWJsZSAqc2cpCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmMgYi9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5jCj4gaW5kZXggN2Q1ZWJi MTAzMjNiLi43OTcxZjU3NDM2ZGQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL3JvY2tjaGlwX2RybV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9y b2NrY2hpcF9kcm1fZ2VtLmMKPiBAQCAtNTMyLDI2ICs1MzIsMzIgQEAgcm9ja2NoaXBfZ2VtX3By aW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ICAgCXJldHVybiBF UlJfUFRSKHJldCk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqcm9ja2NoaXBfZ2VtX3ByaW1lX3ZtYXAo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gK2ludCByb2NrY2hpcF9nZW1fcHJpbWVfdm1h cChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4g ICB7Cj4gICAJc3RydWN0IHJvY2tjaGlwX2dlbV9vYmplY3QgKnJrX29iaiA9IHRvX3JvY2tjaGlw X29iaihvYmopOwo+ICAgCj4gLQlpZiAocmtfb2JqLT5wYWdlcykKPiAtCQlyZXR1cm4gdm1hcChy a19vYmotPnBhZ2VzLCBya19vYmotPm51bV9wYWdlcywgVk1fTUFQLAo+IC0JCQkgICAgcGdwcm90 X3dyaXRlY29tYmluZShQQUdFX0tFUk5FTCkpOwo+ICsJaWYgKHJrX29iai0+cGFnZXMpIHsKPiAr CQl2b2lkICp2YWRkciA9IHZtYXAocmtfb2JqLT5wYWdlcywgcmtfb2JqLT5udW1fcGFnZXMsIFZN X01BUCwKPiArCQkJCSAgcGdwcm90X3dyaXRlY29tYmluZShQQUdFX0tFUk5FTCkpOwo+ICsJCWlm ICghdmFkZHIpCj4gKwkJCXJldHVybiAtRU5PTUVNOwo+ICsJCWRtYV9idWZfbWFwX3NldF92YWRk cihtYXAsIHZhZGRyKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiAgIAo+ICAgCWlmIChya19vYmot PmRtYV9hdHRycyAmIERNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5HKQo+IC0JCXJldHVybiBOVUxM Owo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJZG1hX2J1Zl9tYXBfc2V0X3ZhZGRyKG1hcCwgcmtf b2JqLT5rdmFkZHIpOwo+ICAgCj4gLQlyZXR1cm4gcmtfb2JqLT5rdmFkZHI7Cj4gKwlyZXR1cm4g MDsKPiAgIH0KPiAgIAo+IC12b2lkIHJvY2tjaGlwX2dlbV9wcmltZV92dW5tYXAoc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmosIHZvaWQgKnZhZGRyKQo+ICt2b2lkIHJvY2tjaGlwX2dlbV9wcmlt ZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAq bWFwKQo+ICAgewo+ICAgCXN0cnVjdCByb2NrY2hpcF9nZW1fb2JqZWN0ICpya19vYmogPSB0b19y b2NrY2hpcF9vYmoob2JqKTsKPiAgIAo+ICAgCWlmIChya19vYmotPnBhZ2VzKSB7Cj4gLQkJdnVu bWFwKHZhZGRyKTsKPiArCQl2dW5tYXAobWFwLT52YWRkcik7Cj4gICAJCXJldHVybjsKPiAgIAl9 Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2Ry bV9nZW0uaCBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmgKPiBp bmRleCA3ZmZjNTQxYmVhMDcuLjVhNzBhNTZjZDQwNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uaAo+IEBAIC0zMSw4ICszMSw4IEBAIHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqCj4gICByb2NrY2hpcF9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCQkJICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCAqYXR0YWNoLAo+ICAgCQkJCSAgIHN0cnVjdCBzZ190YWJsZSAqc2cpOwo+IC12b2lkICpyb2Nr Y2hpcF9nZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gLXZvaWQg cm9ja2NoaXBfZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9p ZCAqdmFkZHIpOwo+ICtpbnQgcm9ja2NoaXBfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiArdm9pZCByb2NrY2hpcF9n ZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3QgZG1hX2J1 Zl9tYXAgKm1hcCk7Cj4gICAKPiAgIC8qIGRybSBkcml2ZXIgbW1hcCBmaWxlIG9wZXJhdGlvbnMg Ki8KPiAgIGludCByb2NrY2hpcF9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueS9j aXJydXMuYyBiL2RyaXZlcnMvZ3B1L2RybS90aW55L2NpcnJ1cy5jCj4gaW5kZXggNzQ0YThlMzM3 ZTQxLi5jMDJlMzVlZDZlNzYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RpbnkvY2ly cnVzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlueS9jaXJydXMuYwo+IEBAIC0xNyw2ICsx Nyw3IEBACj4gICAgKi8KPiAgIAo+ICAgI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L2RtYS1idWYtbWFwLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ Cj4gICAjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4gICAKPiBAQCAtMzE0LDYgKzMxNSw3IEBAIHN0 YXRpYyBpbnQgY2lycnVzX2ZiX2JsaXRfcmVjdChzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwK PiAgIAkJCSAgICAgICBzdHJ1Y3QgZHJtX3JlY3QgKnJlY3QpCj4gICB7Cj4gICAJc3RydWN0IGNp cnJ1c19kZXZpY2UgKmNpcnJ1cyA9IHRvX2NpcnJ1cyhmYi0+ZGV2KTsKPiArCXN0cnVjdCBkbWFf YnVmX21hcCBtYXA7Cj4gICAJdm9pZCAqdm1hcDsKPiAgIAlpbnQgaWR4LCByZXQ7Cj4gICAKPiBA QCAtMzIxLDEwICszMjMsMTAgQEAgc3RhdGljIGludCBjaXJydXNfZmJfYmxpdF9yZWN0KHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ICAgCWlmICghZHJtX2Rldl9lbnRlcigmY2lycnVzLT5k ZXYsICZpZHgpKQo+ICAgCQlnb3RvIG91dDsKPiAgIAo+IC0JcmV0ID0gLUVOT01FTTsKPiAtCXZt YXAgPSBkcm1fZ2VtX3NobWVtX3ZtYXAoZmItPm9ialswXSk7Cj4gLQlpZiAoIXZtYXApCj4gKwly ZXQgPSBkcm1fZ2VtX3NobWVtX3ZtYXAoZmItPm9ialswXSwgJm1hcCk7Cj4gKwlpZiAocmV0KQo+ ICAgCQlnb3RvIG91dF9kZXZfZXhpdDsKPiArCXZtYXAgPSBtYXAudmFkZHI7IC8qIFRPRE86IFVz ZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4gICAKPiAgIAlpZiAoY2lycnVzLT5j cHAgPT0gZmItPmZvcm1hdC0+Y3BwWzBdKQo+ICAgCQlkcm1fZmJfbWVtY3B5X2RzdGNsaXAoY2ly cnVzLT52cmFtLAo+IEBAIC0zNDMsNyArMzQ1LDcgQEAgc3RhdGljIGludCBjaXJydXNfZmJfYmxp dF9yZWN0KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ICAgCWVsc2UKPiAgIAkJV0FSTl9P Tl9PTkNFKCJjcHAgbWlzbWF0Y2giKTsKPiAgIAo+IC0JZHJtX2dlbV9zaG1lbV92dW5tYXAoZmIt Pm9ialswXSwgdm1hcCk7Cj4gKwlkcm1fZ2VtX3NobWVtX3Z1bm1hcChmYi0+b2JqWzBdLCAmbWFw KTsKPiAgIAlyZXQgPSAwOwo+ICAgCj4gICBvdXRfZGV2X2V4aXQ6Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS90aW55L2dtMTJ1MzIwLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGlueS9nbTEy dTMyMC5jCj4gaW5kZXggY2MzOTc2NzFmNjg5Li4xMmE4OTBjZWE2ZTkgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3RpbnkvZ20xMnUzMjAuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90 aW55L2dtMTJ1MzIwLmMKPiBAQCAtMjQ4LDYgKzI0OCw3IEBAIHN0YXRpYyB2b2lkIGdtMTJ1MzIw X2NvcHlfZmJfdG9fYmxvY2tzKHN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwKQo+ICAg ewo+ICAgCWludCBibG9jaywgZHN0X29mZnNldCwgbGVuLCByZW1haW4sIHJldCwgeDEsIHgyLCB5 MSwgeTI7Cj4gICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4gKwlzdHJ1Y3QgZG1hX2J1 Zl9tYXAgbWFwOwo+ICAgCXZvaWQgKnZhZGRyOwo+ICAgCXU4ICpzcmM7Cj4gICAKPiBAQCAtMjYy LDExICsyNjMsMTIgQEAgc3RhdGljIHZvaWQgZ20xMnUzMjBfY29weV9mYl90b19ibG9ja3Moc3Ry dWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjApCj4gICAJeTEgPSBnbTEydTMyMC0+ZmJfdXBk YXRlLnJlY3QueTE7Cj4gICAJeTIgPSBnbTEydTMyMC0+ZmJfdXBkYXRlLnJlY3QueTI7Cj4gICAK PiAtCXZhZGRyID0gZHJtX2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0pOwo+IC0JaWYgKElTX0VS Uih2YWRkcikpIHsKPiAtCQlHTTEyVTMyMF9FUlIoImZhaWxlZCB0byB2bWFwIGZiOiAlbGRcbiIs IFBUUl9FUlIodmFkZHIpKTsKPiArCXJldCA9IGRybV9nZW1fc2htZW1fdm1hcChmYi0+b2JqWzBd LCAmbWFwKTsKPiArCWlmIChyZXQpIHsKPiArCQlHTTEyVTMyMF9FUlIoImZhaWxlZCB0byB2bWFw IGZiOiAlZFxuIiwgcmV0KTsKPiAgIAkJZ290byBwdXRfZmI7Cj4gICAJfQo+ICsJdmFkZHIgPSBt YXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4g ICAKPiAgIAlpZiAoZmItPm9ialswXS0+aW1wb3J0X2F0dGFjaCkgewo+ICAgCQlyZXQgPSBkbWFf YnVmX2JlZ2luX2NwdV9hY2Nlc3MoCj4gQEAgLTMxOCw3ICszMjAsNyBAQCBzdGF0aWMgdm9pZCBn bTEydTMyMF9jb3B5X2ZiX3RvX2Jsb2NrcyhzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMy MCkKPiAgIAkJCUdNMTJVMzIwX0VSUigiZG1hX2J1Zl9lbmRfY3B1X2FjY2VzcyBlcnI6ICVkXG4i LCByZXQpOwo+ICAgCX0KPiAgIHZ1bm1hcDoKPiAtCWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5v YmpbMF0sIHZhZGRyKTsKPiArCWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sICZtYXAp Owo+ICAgcHV0X2ZiOgo+ICAgCWRybV9mcmFtZWJ1ZmZlcl9wdXQoZmIpOwo+ICAgCWdtMTJ1MzIw LT5mYl91cGRhdGUuZmIgPSBOVUxMOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdWRs L3VkbF9tb2Rlc2V0LmMgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rlc2V0LmMKPiBpbmRl eCBmZWY0M2Y0ZTNiYWMuLjQyZWViYTFkZmRiZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vdWRsL3VkbF9tb2Rlc2V0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rl c2V0LmMKPiBAQCAtMjc2LDYgKzI3Niw3IEBAIHN0YXRpYyBpbnQgdWRsX2hhbmRsZV9kYW1hZ2Uo c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCB4LCBpbnQgeSwKPiAgIAlzdHJ1Y3QgdXJi ICp1cmI7Cj4gICAJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gICAJaW50IGxvZ19icHA7Cj4gKwlz dHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICAgCXZvaWQgKnZhZGRyOwo+ICAgCj4gICAJcmV0ID0g dWRsX2xvZ19jcHAoZmItPmZvcm1hdC0+Y3BwWzBdKTsKPiBAQCAtMjk2LDExICsyOTcsMTIgQEAg c3RhdGljIGludCB1ZGxfaGFuZGxlX2RhbWFnZShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwg aW50IHgsIGludCB5LAo+ICAgCQkJcmV0dXJuIHJldDsKPiAgIAl9Cj4gICAKPiAtCXZhZGRyID0g ZHJtX2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0pOwo+IC0JaWYgKElTX0VSUih2YWRkcikpIHsK PiArCXJldCA9IGRybV9nZW1fc2htZW1fdm1hcChmYi0+b2JqWzBdLCAmbWFwKTsKPiArCWlmIChy ZXQpIHsKPiAgIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdm1hcCBmYlxuIik7Cj4gICAJCWdvdG8g b3V0X2RtYV9idWZfZW5kX2NwdV9hY2Nlc3M7Cj4gICAJfQo+ICsJdmFkZHIgPSBtYXAudmFkZHI7 IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4gICAKPiAgIAl1 cmIgPSB1ZGxfZ2V0X3VyYihkZXYpOwo+ICAgCWlmICghdXJiKQo+IEBAIC0zMzMsNyArMzM1LDcg QEAgc3RhdGljIGludCB1ZGxfaGFuZGxlX2RhbWFnZShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwgaW50IHgsIGludCB5LAo+ICAgCXJldCA9IDA7Cj4gICAKPiAgIG91dF9kcm1fZ2VtX3NobWVt X3Z1bm1hcDoKPiAtCWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sIHZhZGRyKTsKPiAr CWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sICZtYXApOwo+ICAgb3V0X2RtYV9idWZf ZW5kX2NwdV9hY2Nlc3M6Cj4gICAJaWYgKGltcG9ydF9hdHRhY2gpIHsKPiAgIAkJdG1wX3JldCA9 IGRtYV9idWZfZW5kX2NwdV9hY2Nlc3MoaW1wb3J0X2F0dGFjaC0+ZG1hYnVmLAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbW9kZS5jIGIvZHJpdmVycy9ncHUv ZHJtL3Zib3h2aWRlby92Ym94X21vZGUuYwo+IGluZGV4IDkzMWM1NTEyNjE0OC4uZjI2OGZiMjU4 YzgzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9tb2RlLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbW9kZS5jCj4gQEAgLTksNiAr OSw4IEBACj4gICAgKiAgICAgICAgICBNaWNoYWVsIFRoYXllciA8bWljaGFlbC50aGF5ZXJAb3Jh Y2xlLmNvbSwKPiAgICAqICAgICAgICAgIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5j b20+Cj4gICAgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLW1hcC5oPgo+ICAgI2lu Y2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMu aD4KPiBAQCAtMzg0LDYgKzM4Niw4IEBAIHN0YXRpYyB2b2lkIHZib3hfY3Vyc29yX2F0b21pY191 cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJdTMyIGhlaWdodCA9IHBsYW5lLT5z dGF0ZS0+Y3J0Y19oOwo+ICAgCXNpemVfdCBkYXRhX3NpemUsIG1hc2tfc2l6ZTsKPiAgIAl1MzIg ZmxhZ3M7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICsJaW50IHJldDsKPiAgIAl1OCAq c3JjOwo+ICAgCj4gICAJLyoKPiBAQCAtMzk3LDggKzQwMSw4IEBAIHN0YXRpYyB2b2lkIHZib3hf Y3Vyc29yX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAKPiAgIAl2 Ym94X2NydGMtPmN1cnNvcl9lbmFibGVkID0gdHJ1ZTsKPiAgIAo+IC0Jc3JjID0gZHJtX2dlbV92 cmFtX3ZtYXAoZ2JvKTsKPiAtCWlmIChJU19FUlIoc3JjKSkgewo+ICsJcmV0ID0gZHJtX2dlbV92 cmFtX3ZtYXAoZ2JvLCAmbWFwKTsKPiArCWlmIChyZXQpIHsKPiAgIAkJLyoKPiAgIAkJICogQlVH OiB3ZSBzaG91bGQgaGF2ZSBwaW5uZWQgdGhlIEJPIGluIHByZXBhcmVfZmIoKS4KPiAgIAkJICov Cj4gQEAgLTQwNiw2ICs0MTAsNyBAQCBzdGF0aWMgdm9pZCB2Ym94X2N1cnNvcl9hdG9taWNfdXBk YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCQlEUk1fV0FSTigiQ291bGQgbm90IG1h cCBjdXJzb3IgYm8sIHNraXBwaW5nIHVwZGF0ZVxuIik7Cj4gICAJCXJldHVybjsKPiAgIAl9Cj4g KwlzcmMgPSBtYXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Bl cmx5ICovCj4gICAKPiAgIAkvKgo+ICAgCSAqIFRoZSBtYXNrIG11c3QgYmUgY2FsY3VsYXRlZCBi YXNlZCBvbiB0aGUgYWxwaGEKPiBAQCAtNDE2LDcgKzQyMSw3IEBAIHN0YXRpYyB2b2lkIHZib3hf Y3Vyc29yX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJZGF0YV9z aXplID0gd2lkdGggKiBoZWlnaHQgKiA0ICsgbWFza19zaXplOwo+ICAgCj4gICAJY29weV9jdXJz b3JfaW1hZ2Uoc3JjLCB2Ym94LT5jdXJzb3JfZGF0YSwgd2lkdGgsIGhlaWdodCwgbWFza19zaXpl KTsKPiAtCWRybV9nZW1fdnJhbV92dW5tYXAoZ2JvLCBzcmMpOwo+ICsJZHJtX2dlbV92cmFtX3Z1 bm1hcChnYm8sICZtYXApOwo+ICAgCj4gICAJZmxhZ3MgPSBWQk9YX01PVVNFX1BPSU5URVJfVklT SUJMRSB8IFZCT1hfTU9VU0VfUE9JTlRFUl9TSEFQRSB8Cj4gICAJCVZCT1hfTU9VU0VfUE9JTlRF Ul9BTFBIQTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfYm8uYyBiL2Ry aXZlcnMvZ3B1L2RybS92YzQvdmM0X2JvLmMKPiBpbmRleCA1NTdmMGQxZTY0MzcuLmYyOTBhOWE5 NDJkYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfYm8uYwo+IEBAIC03ODUsMTYgKzc4NSwxNiBAQCBpbnQg dmM0X3ByaW1lX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQo+ICAgCXJldHVybiBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwKG9iaiwgdm1h KTsKPiAgIH0KPiAgIAo+IC12b2lkICp2YzRfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiAraW50IHZjNF9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LCBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCkKPiAgIHsKPiAgIAlzdHJ1Y3QgdmM0X2JvICpibyA9 IHRvX3ZjNF9ibyhvYmopOwo+ICAgCj4gICAJaWYgKGJvLT52YWxpZGF0ZWRfc2hhZGVyKSB7Cj4g ICAJCURSTV9ERUJVRygibW1hcGluZyBvZiBzaGFkZXIgQk9zIG5vdCBhbGxvd2VkLlxuIik7Cj4g LQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gICAJfQo+ ICAgCj4gLQlyZXR1cm4gZHJtX2dlbV9jbWFfcHJpbWVfdm1hcChvYmopOwo+ICsJcmV0dXJuIGRy bV9nZW1fY21hX3ByaW1lX3ZtYXAob2JqLCBtYXApOwo+ICAgfQo+ICAgCj4gICBzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYu aCBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oCj4gaW5kZXggY2M3OWIxYWFhODc4Li45 MDRmMmMzNmM5NjMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaAo+IEBAIC04MDYsNyArODA2LDcg QEAgaW50IHZjNF9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Cj4gICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnZjNF9wcmlt ZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJCQkJCSBzdHJ1 Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCj4gICAJCQkJCQkgc3RydWN0IHNnX3RhYmxl ICpzZ3QpOwo+IC12b2lkICp2YzRfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aik7Cj4gK2ludCB2YzRfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3Ry dWN0IGRtYV9idWZfbWFwICptYXApOwo+ICAgaW50IHZjNF9ib19jYWNoZV9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOwo+ICAgdm9pZCB2YzRfYm9fY2FjaGVfZGVzdHJveShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKPiAgIGludCB2YzRfYm9faW5jX3VzZWNudChzdHJ1Y3QgdmM0X2JvICpi byk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmMgYi9kcml2 ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Rydi5jCj4gaW5kZXggZmE1NGE2ZDE0MDNkLi5iMmFhMjZl MWU0YTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9kcnYuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmMKPiBAQCAtMzYxLDI0ICszNjEsMzAg QEAgc3RhdGljIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqdmdlbV9wcmltZV9pbXBvcnRfc2dfdGFi bGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAlyZXR1cm4gJm9iai0+YmFzZTsKPiAgIH0K PiAgIAo+IC1zdGF0aWMgdm9pZCAqdmdlbV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqKQo+ICtzdGF0aWMgaW50IHZnZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IGRybV92 Z2VtX2dlbV9vYmplY3QgKmJvID0gdG9fdmdlbV9ibyhvYmopOwo+ICAgCWxvbmcgbl9wYWdlcyA9 IG9iai0+c2l6ZSA+PiBQQUdFX1NISUZUOwo+ICAgCXN0cnVjdCBwYWdlICoqcGFnZXM7Cj4gKwl2 b2lkICp2YWRkcjsKPiAgIAo+ICAgCXBhZ2VzID0gdmdlbV9waW5fcGFnZXMoYm8pOwo+ICAgCWlm IChJU19FUlIocGFnZXMpKQo+IC0JCXJldHVybiBOVUxMOwo+ICsJCXJldHVybiBQVFJfRVJSKHBh Z2VzKTsKPiArCj4gKwl2YWRkciA9IHZtYXAocGFnZXMsIG5fcGFnZXMsIDAsIHBncHJvdF93cml0 ZWNvbWJpbmUoUEFHRV9LRVJORUwpKTsKPiArCWlmICghdmFkZHIpCj4gKwkJcmV0dXJuIC1FTk9N RU07Cj4gKwlkbWFfYnVmX21hcF9zZXRfdmFkZHIobWFwLCB2YWRkcik7Cj4gICAKPiAtCXJldHVy biB2bWFwKHBhZ2VzLCBuX3BhZ2VzLCAwLCBwZ3Byb3Rfd3JpdGVjb21iaW5lKFBBR0VfS0VSTkVM KSk7Cj4gKwlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdm9pZCB2Z2VtX3ByaW1lX3Z1 bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpCj4gK3N0YXRpYyB2 b2lkIHZnZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qg ZG1hX2J1Zl9tYXAgKm1hcCkKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX3ZnZW1fZ2VtX29iamVjdCAq Ym8gPSB0b192Z2VtX2JvKG9iaik7Cj4gICAKPiAtCXZ1bm1hcCh2YWRkcik7Cj4gKwl2dW5tYXAo bWFwLT52YWRkcik7Cj4gICAJdmdlbV91bnBpbl9wYWdlcyhibyk7Cj4gICB9Cj4gICAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jIGIvZHJpdmVy cy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jCj4gaW5kZXggNGYzNGVmMzRiYTYwLi43 NGRiNWE4NDBiZWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zy b250X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5j Cj4gQEAgLTI5MCwyMiArMjkwLDI4IEBAIGludCB4ZW5fZHJtX2Zyb250X2dlbV9tbWFwKHN0cnVj dCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiAgIAlyZXR1cm4gZ2Vt X21tYXBfb2JqKHhlbl9vYmosIHZtYSk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqeGVuX2RybV9mcm9u dF9nZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopCj4gK2ludCB4 ZW5fZHJtX2Zyb250X2dlbV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29i aiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IHhlbl9nZW1fb2Jq ZWN0ICp4ZW5fb2JqID0gdG9feGVuX2dlbV9vYmooZ2VtX29iaik7Cj4gKwl2b2lkICp2YWRkcjsK PiAgIAo+ICAgCWlmICgheGVuX29iai0+cGFnZXMpCj4gLQkJcmV0dXJuIE5VTEw7Cj4gKwkJcmV0 dXJuIC1FTk9NRU07Cj4gICAKPiAgIAkvKiBQbGVhc2Ugc2VlIGNvbW1lbnQgaW4gZ2VtX21tYXBf b2JqIG9uIG1hcHBpbmcgYW5kIGF0dHJpYnV0ZXMuICovCj4gLQlyZXR1cm4gdm1hcCh4ZW5fb2Jq LT5wYWdlcywgeGVuX29iai0+bnVtX3BhZ2VzLAo+IC0JCSAgICBWTV9NQVAsIFBBR0VfS0VSTkVM KTsKPiArCXZhZGRyID0gdm1hcCh4ZW5fb2JqLT5wYWdlcywgeGVuX29iai0+bnVtX3BhZ2VzLAo+ ICsJCSAgICAgVk1fTUFQLCBQQUdFX0tFUk5FTCk7Cj4gKwlpZiAoIXZhZGRyKQo+ICsJCXJldHVy biAtRU5PTUVNOwo+ICsJZG1hX2J1Zl9tYXBfc2V0X3ZhZGRyKG1hcCwgdmFkZHIpOwo+ICsKPiAr CXJldHVybiAwOwo+ICAgfQo+ICAgCj4gICB2b2lkIHhlbl9kcm1fZnJvbnRfZ2VtX3ByaW1lX3Z1 bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmosCj4gLQkJCQkgICAgdm9pZCAqdmFk ZHIpCj4gKwkJCQkgICAgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gLQl2dW5tYXAo dmFkZHIpOwo+ICsJdnVubWFwKG1hcC0+dmFkZHIpOwo+ICAgfQo+ICAgCj4gICBpbnQgeGVuX2Ry bV9mcm9udF9nZW1fcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmosCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uaCBiL2Ry aXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uaAo+IGluZGV4IGEzOTY3NWZhMzFi Mi4uYTRlNjdkMGExNDljIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2Ry bV9mcm9udF9nZW0uaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9n ZW0uaAo+IEBAIC0xMiw2ICsxMiw3IEBACj4gICAjZGVmaW5lIF9fWEVOX0RSTV9GUk9OVF9HRU1f SAo+ICAgCj4gICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50Owo+ICtzdHJ1Y3QgZG1hX2J1Zl9t YXA7Cj4gICBzdHJ1Y3QgZHJtX2RldmljZTsKPiAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdDsKPiAg IHN0cnVjdCBmaWxlOwo+IEBAIC0zNCwxMCArMzUsMTEgQEAgdm9pZCB4ZW5fZHJtX2Zyb250X2dl bV9mcmVlX29iamVjdF91bmxvY2tlZChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopOwo+ ICAgCj4gICBpbnQgeGVuX2RybV9mcm9udF9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgCj4gLXZvaWQgKnhlbl9kcm1fZnJvbnRfZ2Vt X3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKTsKPiAraW50IHhlbl9k cm1fZnJvbnRfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqLAo+ ICsJCQkJIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIAo+ICAgdm9pZCB4ZW5fZHJtX2Zy b250X2dlbV9wcmltZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqLAo+IC0J CQkJICAgIHZvaWQgKnZhZGRyKTsKPiArCQkJCSAgICBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCk7 Cj4gICAKPiAgIGludCB4ZW5fZHJtX2Zyb250X2dlbV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqZ2VtX29iaiwKPiAgIAkJCQkgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZ2VtLmggYi9pbmNsdWRlL2RybS9kcm1fZ2Vt LmgKPiBpbmRleCBjMzhkZDM1ZGEwMGIuLjVlNmRhYTFjOTgyZiAxMDA2NDQKPiAtLS0gYS9pbmNs dWRlL2RybS9kcm1fZ2VtLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZ2VtLmgKPiBAQCAtMzks NiArMzksNyBAQAo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV92bWFfbWFuYWdlci5oPgo+ICAg Cj4gK3N0cnVjdCBkbWFfYnVmX21hcDsKPiAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdDsKPiAgIAo+ ICAgLyoqCj4gQEAgLTEzOCw3ICsxMzksNyBAQCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3Mg ewo+ICAgCSAqCj4gICAJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4KPiAgIAkgKi8KPiAt CXZvaWQgKigqdm1hcCkoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICsJaW50ICgqdm1h cCkoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsK PiAgIAo+ICAgCS8qKgo+ICAgCSAqIEB2dW5tYXA6Cj4gQEAgLTE0OCw3ICsxNDksNyBAQCBzdHJ1 Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3Mgewo+ICAgCSAqCj4gICAJICogVGhpcyBjYWxsYmFjayBp cyBvcHRpb25hbC4KPiAgIAkgKi8KPiAtCXZvaWQgKCp2dW5tYXApKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqLCB2b2lkICp2YWRkcik7Cj4gKwl2b2lkICgqdnVubWFwKShzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApOwo+ICAgCj4gICAJLyoqCj4g ICAJICogQG1tYXA6Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW1fY21hX2hlbHBl ci5oIGIvaW5jbHVkZS9kcm0vZHJtX2dlbV9jbWFfaGVscGVyLmgKPiBpbmRleCBhMDY0YjBkMWM0 ODAuLmNhZjk4YjljZjRiNCAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fZ2VtX2NtYV9o ZWxwZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fY21hX2hlbHBlci5oCj4gQEAgLTEw Myw3ICsxMDMsNyBAQCBkcm1fZ2VtX2NtYV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKPiAgIAkJCQkgIHN0cnVjdCBzZ190YWJsZSAqc2d0KTsKPiAgIGludCBk cm1fZ2VtX2NtYV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkJ ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+IC12b2lkICpkcm1fZ2VtX2NtYV9wcmlt ZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAraW50IGRybV9nZW1fY21hX3By aW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAq bWFwKTsKPiAgIAo+ICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICoKPiAgIGRybV9nZW1fY21hX2Ny ZWF0ZV9vYmplY3RfZGVmYXVsdF9mdW5jcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qg c2l6ZSk7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmgg Yi9pbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oCj4gaW5kZXggNTM4MWYwYzhjZjZm Li4zNDQ5YTAzNTNmZTAgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9o ZWxwZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmgKPiBAQCAt MTEzLDggKzExMyw4IEBAIGludCBkcm1fZ2VtX3NobWVtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dl bV9zaG1lbV9vYmplY3QgKnNobWVtKTsKPiAgIHZvaWQgZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXMo c3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSk7Cj4gICBpbnQgZHJtX2dlbV9zaG1l bV9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICAgdm9pZCBkcm1fZ2VtX3NobWVt X3VucGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAtdm9pZCAqZHJtX2dlbV9zaG1l bV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAtdm9pZCBkcm1fZ2VtX3NobWVt X3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+ICtpbnQg ZHJtX2dlbV9zaG1lbV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3QgZG1h X2J1Zl9tYXAgKm1hcCk7Cj4gK3ZvaWQgZHJtX2dlbV9zaG1lbV92dW5tYXAoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIAo+ICAgaW50IGRy bV9nZW1fc2htZW1fbWFkdmlzZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IG1hZHYp Owo+ICAgCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaCBi L2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaAo+IGluZGV4IDEyOGY4ODE3NGQzMi4u YzBkMjhiYTBmNWM5IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxw ZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaAo+IEBAIC0xMCw2 ICsxMCw3IEBACj4gICAjaW5jbHVkZSA8ZHJtL3R0bS90dG1fYm9fYXBpLmg+Cj4gICAjaW5jbHVk ZSA8ZHJtL3R0bS90dG1fYm9fZHJpdmVyLmg+Cj4gICAKPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1i dWYtbWFwLmg+Cj4gICAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+IC8qIGZvciBjb250YWluZXJf b2YoKSAqLwo+ICAgCj4gICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWI7Cj4gQEAgLTI5LDkg KzMwLDggQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0Owo+ICAgCj4gICAvKioKPiAgICAqIHN0cnVj dCBkcm1fZ2VtX3ZyYW1fb2JqZWN0IC0gR0VNIG9iamVjdCBiYWNrZWQgYnkgVlJBTQo+IC0gKiBA Z2VtOglHRU0gb2JqZWN0Cj4gICAgKiBAYm86CQlUVE0gYnVmZmVyIG9iamVjdAo+IC0gKiBAa21h cDoJTWFwcGluZyBpbmZvcm1hdGlvbiBmb3IgQGJvCj4gKyAqIEBtYXA6CU1hcHBpbmcgaW5mb3Jt YXRpb24gZm9yIEBibwo+ICAgICogQHBsYWNlbWVudDoJVFRNIHBsYWNlbWVudCBpbmZvcm1hdGlv bi4gU3VwcG9ydGVkIHBsYWNlbWVudHMgYXJlIFwKPiAgIAklVFRNX1BMX1ZSQU0gYW5kICVUVE1f UExfU1lTVEVNCj4gICAgKiBAcGxhY2VtZW50czoJVFRNIHBsYWNlbWVudCBpbmZvcm1hdGlvbi4K PiBAQCAtNTAsMTUgKzUwLDE1IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKPiAgICAqLwo+ICAg c3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3Qgewo+ICAgCXN0cnVjdCB0dG1fYnVmZmVyX29iamVj dCBibzsKPiAtCXN0cnVjdCB0dG1fYm9fa21hcF9vYmoga21hcDsKPiArCXN0cnVjdCBkbWFfYnVm X21hcCBtYXA7Cj4gICAKPiAgIAkvKioKPiAtCSAqIEBrbWFwX3VzZV9jb3VudDoKPiArCSAqIEB2 bWFwX3VzZV9jb3VudDoKPiAgIAkgKgo+ICAgCSAqIFJlZmVyZW5jZSBjb3VudCBvbiB0aGUgdmly dHVhbCBhZGRyZXNzLgo+ICAgCSAqIFRoZSBhZGRyZXNzIGFyZSB1bi1tYXBwZWQgd2hlbiB0aGUg Y291bnQgcmVhY2hlcyB6ZXJvLgo+ICAgCSAqLwo+IC0JdW5zaWduZWQgaW50IGttYXBfdXNlX2Nv dW50Owo+ICsJdW5zaWduZWQgaW50IHZtYXBfdXNlX2NvdW50Owo+ICAgCj4gICAJLyogU3VwcG9y dGVkIHBsYWNlbWVudHMgYXJlICVUVE1fUExfVlJBTSBhbmQgJVRUTV9QTF9TWVNURU0gKi8KPiAg IAlzdHJ1Y3QgdHRtX3BsYWNlbWVudCBwbGFjZW1lbnQ7Cj4gQEAgLTk3LDggKzk3LDggQEAgdTY0 IGRybV9nZW1fdnJhbV9tbWFwX29mZnNldChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2Jv KTsKPiAgIHM2NCBkcm1fZ2VtX3ZyYW1fb2Zmc2V0KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0 ICpnYm8pOwo+ICAgaW50IGRybV9nZW1fdnJhbV9waW4oc3RydWN0IGRybV9nZW1fdnJhbV9vYmpl Y3QgKmdibywgdW5zaWduZWQgbG9uZyBwbF9mbGFnKTsKPiAgIGludCBkcm1fZ2VtX3ZyYW1fdW5w aW4oc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibyk7Cj4gLXZvaWQgKmRybV9nZW1fdnJh bV92bWFwKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8pOwo+IC12b2lkIGRybV9nZW1f dnJhbV92dW5tYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywgdm9pZCAqdmFkZHIp Owo+ICtpbnQgZHJtX2dlbV92cmFtX3ZtYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdi bywgc3RydWN0IGRtYV9idWZfbWFwICptYXApOwo+ICt2b2lkIGRybV9nZW1fdnJhbV92dW5tYXAo c3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywgc3RydWN0IGRtYV9idWZfbWFwICptYXAp Owo+ICAgCj4gICBpbnQgZHJtX2dlbV92cmFtX2ZpbGxfY3JlYXRlX2R1bWIoc3RydWN0IGRybV9m aWxlICpmaWxlLAo+ICAgCQkJCSAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eC1yb2NrY2hpcCBtYWls aW5nIGxpc3QKTGludXgtcm9ja2NoaXBAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJvY2tjaGlwCg== 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=-12.1 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER,NICE_REPLY_A,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 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 6B355C43457 for ; Thu, 15 Oct 2020 14:22:27 +0000 (UTC) Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (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 9E16E2075B for ; Thu, 15 Oct 2020 14:22:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="ev4nEbIT" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9E16E2075B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=virtualization-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id D668E2E66B; Thu, 15 Oct 2020 14:22:23 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Ah92jTRBFCpb; Thu, 15 Oct 2020 14:21:55 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by silver.osuosl.org (Postfix) with ESMTP id D43442002F; Thu, 15 Oct 2020 14:21:54 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 9524CC07FF; Thu, 15 Oct 2020 14:21:54 +0000 (UTC) Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 99125C0051 for ; Thu, 15 Oct 2020 14:21:53 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 86A3987D6E for ; Thu, 15 Oct 2020 14:21:53 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id EOI1PBxLiDGe for ; Thu, 15 Oct 2020 14:21:49 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2084.outbound.protection.outlook.com [40.107.94.84]) by hemlock.osuosl.org (Postfix) with ESMTPS id 8164A87D64 for ; Thu, 15 Oct 2020 14:21:49 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AUnnCFSXdry2sw1L4ia6O64g1l2Yg2XprdkPadyFI+VDLYQpELm2VsYMZE3+rN98ZLfKNf7ZphX5GGRd9D7k7jaw6iraQ+/dlfx0auXBDyTL9Zf8PtqanjhXpEyLOksrJfH1PN0DU1LDl5aDNME7fDWt2LvREi7iUXcpWzOCpdH9MSplKXOQ3CTMUlYUBcJppDZQh07ayvBDwiGlSWnHDYJpgZk8Yk+LGqgIfBLuxaEeYuGwwWwAFxtJGr9Qzh6uFO+9J061vwhH7lHFA+OAy6zEpF5zZuXR+AGe9W8+mQdS28X7YW/7SqucqFXCKoiOYeLxI0jtY4jEhuNMTEfWAQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=s1zJaDsCknzbjiRt/StSITflJScs7eZVdKcjpsdgjsI=; b=TQjQI9Srk0O8AB+AzDXQaAaw3QNjYOf/Xb8IHEneovSvqi8INt9ySqbThfjOf7FFqwXfdlk4TquKI6SY+K3ginCak7As1gfNfVjMNGMZSd04rDfYNZs5FKXaQXoU2Kazh+pOlgwVlQJMsFybcAeNFPF9NFtfWrTV4Lb8YCxM7EPq4hZebKJsNRAuibpw6FIb42JSLRtOd77RqZs99ouW3JJs3FYQL0sj8tsYwYeGZC4TRZyTuTrTX1gjTGHvjrLpinm40mVHBKf5gRgs9Ku/A2sypboomyvvxtmJWfMtLL92nT4rZzq4PSgY/LiSE562+kwhPpYDtrURlCNiA/9ZbA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=s1zJaDsCknzbjiRt/StSITflJScs7eZVdKcjpsdgjsI=; b=ev4nEbIT7ZjdwzBc5xW1PhxZPJppJlzPkhdhNwttquRQxJJCQXZL55EbUdeZxbtPSplLsnq7IvKwRQBHMH9ra5rt/6EYp863XKvnG8cPNuJprat50AFX3W4jScQhmUjBSqmW0qhMaGuFTfP5ECkw8GsXdJPH8Owv8OUVRJUiGMM= Authentication-Results: lists.linaro.org; dkim=none (message not signed) header.d=none;lists.linaro.org; dmarc=none action=none header.from=amd.com; Received: from MN2PR12MB3775.namprd12.prod.outlook.com (2603:10b6:208:159::19) by BL0PR12MB4932.namprd12.prod.outlook.com (2603:10b6:208:1c2::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.21; Thu, 15 Oct 2020 14:21:45 +0000 Received: from MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::f8f7:7403:1c92:3a60]) by MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::f8f7:7403:1c92:3a60%6]) with mapi id 15.20.3477.021; Thu, 15 Oct 2020 14:21:45 +0000 Subject: Re: [PATCH v4 06/10] drm/gem: Use struct dma_buf_map in GEM vmap ops and convert GEM backends To: Thomas Zimmermann , maarten.lankhorst@linux.intel.com, mripard@kernel.org, airlied@linux.ie, daniel@ffwll.ch, sam@ravnborg.org, alexander.deucher@amd.com, kraxel@redhat.com, l.stach@pengutronix.de, linux+etnaviv@armlinux.org.uk, christian.gmeiner@gmail.com, inki.dae@samsung.com, jy0922.shim@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, kgene@kernel.org, krzk@kernel.org, yuq825@gmail.com, bskeggs@redhat.com, robh@kernel.org, tomeu.vizoso@collabora.com, steven.price@arm.com, alyssa.rosenzweig@collabora.com, hjc@rock-chips.com, heiko@sntech.de, hdegoede@redhat.com, sean@poorly.run, eric@anholt.net, oleksandr_andrushchenko@epam.com, ray.huang@amd.com, sumit.semwal@linaro.org, emil.velikov@collabora.com, luben.tuikov@amd.com, apaneers@amd.com, linus.walleij@linaro.org, melissa.srw@gmail.com, chris@chris-wilson.co.uk, miaoqinglang@huawei.com References: <20201015123806.32416-1-tzimmermann@suse.de> <20201015123806.32416-7-tzimmermann@suse.de> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <6bd7d5cf-06c8-3fd8-9bbe-a80ff6bb327e@amd.com> Date: Thu, 15 Oct 2020 16:21:31 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 In-Reply-To: <20201015123806.32416-7-tzimmermann@suse.de> Content-Language: en-US X-Originating-IP: [80.187.123.114] X-ClientProxiedBy: AM0PR03CA0058.eurprd03.prod.outlook.com (2603:10a6:208::35) To MN2PR12MB3775.namprd12.prod.outlook.com (2603:10b6:208:159::19) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [192.168.137.56] (80.187.123.114) by AM0PR03CA0058.eurprd03.prod.outlook.com (2603:10a6:208::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.20 via Frontend Transport; Thu, 15 Oct 2020 14:21:37 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 1402a292-410c-4dd7-5df2-08d87115a47e X-MS-TrafficTypeDiagnostic: BL0PR12MB4932: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qZE7L/zH5aGxqiqWmrxr/TkD8SGVxq492TWlZDRQ8SWP9LUeAjghyncA+V0RbcCiQOlF9BpSa0szaBr1rLMb4pd7NGjinWmMKZzBxFhl/AbSzHryacecP3jmc8SciQoEijiChjkblXtHc4usMJHnAzcMutTXYvIX5HfX6Nm+xOdzuOQCtRKC8c4GqNrw9YZ9L8ZX7aUG8Jez2Kf7T8MqZ1TKwlDddWh5CcJb0lhqwIRd8/qFy18d0ZTQ4NxTPYPSxuSOLxsOH7f+KxYILSZqFnNsnutVIAcmfePky9fzaNcsZwXH2qM8YnHjzPKV14l7WHo1Jo4RzSeIOOJY8yqf3Df5uGdhO9DrcUMwhgotFpmcaIVCTbe+MfIKTxkpI7od6w3lF2gvYlK/Q58+O1aXt5seGL7Bw9/go+uTg39iKc1BB9wtePnfCCvCmVcSs0aQ X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR12MB3775.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(39860400002)(396003)(366004)(136003)(376002)(346002)(36756003)(5660300002)(8936002)(30864003)(478600001)(8676002)(26005)(16526019)(7406005)(34490700002)(186003)(2616005)(16576012)(316002)(6666004)(6486002)(31686004)(52116002)(66574015)(86362001)(66946007)(956004)(83380400001)(2906002)(31696002)(4326008)(66556008)(66476007)(7416002)(921003)(43740500002)(579004)(559001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: m1LAH0A49qIsnoSwQsouBc95tPZsFvI7ILL+HyITCdwV3eSL2iszdF0dHXxMB2oIGD335BwU2D+eG6IuPWolrqv1GJ40za1adhpl3RbZ1r2ntg6FKwrWvSGDqY/euNspLIimOkkAyhMiIudpJhNHjSvToTllhvq/vOB6yXkJ2pK4/2RJUktLTxIQoz6/ZYV5B2FXrDyhgO+doQDORwIK5yqGiTmmTcP2JsACozYQc3xOqlQsDRoVZr6KFOB9/QRdbB1D0k+BYNH8mBU+lCqEXTZeUd3OX2d9Rz7ZUreK8Ld9YFw2teXCkJHPYtYvf7YtFAidpvqnsa+zqvxTCXrJgmEAdWAe62ob7ZrIeKcImgVPpNZC/qogN/FOi1n+ZaYI3EcWs+YLZ8jVE6Gq1sKrVFAlIEv0R5yxdIsbXVqsWuRspmjOiPY5BM1SKSwMC2GfuPK5vkzYOfg1ayT2mmJ4TRuyKXDO+/VHy09vY+KAuYSJFZ/+4PZ5ZM7hcJwk88LVWjAawTnzzWpbtlLyGfKChy2Fcf2yhG+/XLwUVWFJ5kZwGepbJJfsCK/1qs+idevkt4XuzMmAYCjuFjcGdu/5NaHKJDvaGTN63plDDLEo6/KcQ7lBx58OAjHWn7gqC2tgnk+/IDbC3P8DUpKFUGF2Tg== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1402a292-410c-4dd7-5df2-08d87115a47e X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3775.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Oct 2020 14:21:44.9217 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: hUctmsKmzwzlQVH4lhjqevgxGnxCyHnHl623cVkEli3p3TuwQp67xFQjNmWsqHz4 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR12MB4932 Cc: linux-samsung-soc@vger.kernel.org, lima@lists.freedesktop.org, nouveau@lists.freedesktop.org, etnaviv@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, virtualization@lists.linux-foundation.org, linaro-mm-sig@lists.linaro.org, linux-rockchip@lists.infradead.org, dri-devel@lists.freedesktop.org, xen-devel@lists.xenproject.org, spice-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" QW0gMTUuMTAuMjAgdW0gMTQ6Mzggc2NocmllYiBUaG9tYXMgWmltbWVybWFubjoKPiBUaGlzIHBh dGNoIHJlcGxhY2VzIHRoZSB2bWFwL3Z1bm1hcCdzIHVzZSBvZiByYXcgcG9pbnRlcnMgaW4gR0VN IG9iamVjdAo+IGZ1bmN0aW9ucyB3aXRoIGluc3RhbmNlcyBvZiBzdHJ1Y3QgZG1hX2J1Zl9tYXAu IEdFTSBiYWNrZW5kcyBhcmUKPiBjb252ZXJ0ZWQgYXMgd2VsbC4gRm9yIG1vc3Qgb2YgdGhlbSwg dGhpcyBzaW1wbHkgY2hhbmdlcyB0aGUgcmV0dXJuZWQgdHlwZS4KPgo+IFRUTS1iYXNlZCBkcml2 ZXJzIG5vdyByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBtZW1v cnksCj4gZWl0aGVyIHN5c3RlbSBvciBJL08gbWVtb3J5LiBHRU0gVlJBTSBoZWxwZXJzIGFuZCBx eGwgbm93IHVzZSB0dG1fYm9fdm1hcCgpCj4gZXQgYWwuIEFtZGdwdSwgbm91dmVhdSBhbmQgcmFk ZW9uIHVzZSBkcm1fZ2VtX3R0bV92bWFwKCkgZXQgYWwgaW5zdGVhZCBvZgo+IGltcGxlbWVudGlu ZyB0aGVpciBvd24gdm1hcCBjYWxsYmFja3MuCj4KPiB2NDoKPiAJKiB1c2UgdHRtX2JvX3ZtYXAo KSwgZHJtX2dlbV90dG1fdm1hcCgpLCBldCBhbC4gKERhbmllbCwgQ2hyaXN0aWFuKQo+IAkqIGZp eCBhIHRyYWlsaW5nIHsgaW4gZHJtX2dlbV92bWFwKCkKPiAJKiByZW1vdmUgc2V2ZXJhbCBlbXB0 eSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBjb252ZXJ0aW5nIHRoZW0gKERhbmllbCkKPiAJKiBjb21t ZW50IHVzZXMgb2YgcmF3IHBvaW50ZXJzIHdpdGggYSBUT0RPIChEYW5pZWwpCj4gCSogVE9ETyBs aXN0OiBjb252ZXJ0IG1vcmUgaGVscGVycyB0byB1c2Ugc3RydWN0IGRtYV9idWZfbWFwCj4KPiBT aWduZWQtb2ZmLWJ5OiBUaG9tYXMgWmltbWVybWFubiA8dHppbW1lcm1hbm5Ac3VzZS5kZT4KClRo ZSBhbWRncHUgY2hhbmdlcyBsb29rIGdvb2QgdG8gbWUsIGJ1dCBJIGNhbid0IGZ1bGx5IGp1ZGdl IHRoZSBvdGhlciBzdHVmZi4KCkFja2VkLWJ5OiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4u a29lbmlnQGFtZC5jb20+Cgo+IC0tLQo+ICAgRG9jdW1lbnRhdGlvbi9ncHUvdG9kby5yc3QgICAg ICAgICAgICAgICAgICB8ICAxOCArKysrCj4gICBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAg ICAgICAgICAgICAgICAgIHwgICAyICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9kbWFfYnVmLmMgfCAgMzYgLS0tLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2RtYV9idWYuaCB8ICAgMiAtCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfZ2VtLmMgICAgIHwgICA1ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfb2JqZWN0LmggIHwgICAxIC0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2N1 cnNvci5jICAgICAgICAgICAgfCAgMjcgKysrLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hc3QvYXN0 X2Rydi5oICAgICAgICAgICAgICAgfCAgIDcgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2Vt LmMgICAgICAgICAgICAgICAgICAgfCAgMjMgKysrLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1f Z2VtX2NtYV9oZWxwZXIuYyAgICAgICAgfCAgMTAgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1f Z2VtX3NobWVtX2hlbHBlci5jICAgICAgfCAgNDggKysrKystLS0tCj4gICBkcml2ZXJzL2dwdS9k cm0vZHJtX2dlbV92cmFtX2hlbHBlci5jICAgICAgIHwgMTA3ICsrKysrKysrKystLS0tLS0tLS0t Cj4gICBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5oICAgICAgIHwgICAyICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9wcmltZS5jIHwgICA5ICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5jICAgICAgICAgICAgIHwgICA2ICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMgICAgICAgICAgIHwgIDExICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX21vZGUuYyAgICAgIHwgIDEwICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnICAgICAgICAgICAgIHwgICAxICsK PiAgIGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uaCAgICAgICAgfCAgIDIgLQo+ ICAgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYyAgICAgICB8ICAgNiArLQo+ ICAgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uaCAgICAgICB8ICAgMiAtCj4g ICBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ByaW1lLmMgICAgIHwgIDIwIC0tLS0K PiAgIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9wZXJmY250LmMgfCAgMTQgKy0t Cj4gICBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kaXNwbGF5LmMgICAgICAgICAgIHwgIDExICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kcmF3LmMgICAgICAgICAgICAgIHwgIDE0ICsr LQo+ICAgZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJ2LmggICAgICAgICAgICAgICB8ICAxMSAr LQo+ICAgZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfb2JqZWN0LmMgICAgICAgICAgICB8ICAzMSAr KystLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX29iamVjdC5oICAgICAgICAgICAgfCAg IDIgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX3ByaW1lLmMgICAgICAgICAgICAgfCAg MTIgKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oICAgICAgICAgICAgIHwg ICAxIC0KPiAgIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jICAgICAgICAgfCAg IDcgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3ByaW1lLmMgICAgICAgfCAg MjAgLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uYyB8 ICAyMiArKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5o IHwgICA0ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdGlueS9jaXJydXMuYyAgICAgICAgICAgICAg IHwgIDEwICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdGlueS9nbTEydTMyMC5jICAgICAgICAgICAg IHwgIDEwICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rlc2V0LmMgICAgICAgICAg IHwgICA4ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbW9kZS5jICAgICAg IHwgIDExICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jICAgICAgICAgICAgICAg IHwgICA2ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaCAgICAgICAgICAgICAg IHwgICAyICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Rydi5jICAgICAgICAgICAg IHwgIDE2ICsrLQo+ICAgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jICAg ICB8ICAxOCArKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmgg ICAgIHwgICA2ICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtLmggICAgICAgICAgICAgICAgICAg ICAgIHwgICA1ICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaCAgICAgICAg ICAgIHwgICAyICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oICAgICAg ICAgIHwgICA0ICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmggICAgICAg ICAgIHwgIDE0ICstLQo+ICAgNDcgZmlsZXMgY2hhbmdlZCwgMzIxIGluc2VydGlvbnMoKyksIDI5 NSBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS90b2RvLnJz dCBiL0RvY3VtZW50YXRpb24vZ3B1L3RvZG8ucnN0Cj4gaW5kZXggNzAwNjM3ZTI1ZWNkLi43ZTZm YzNjMDRhZGQgMTAwNjQ0Cj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvdG9kby5yc3QKPiArKysg Yi9Eb2N1bWVudGF0aW9uL2dwdS90b2RvLnJzdAo+IEBAIC00NDYsNiArNDQ2LDI0IEBAIENvbnRh Y3Q6IFZpbGxlIFN5cmrDpGzDpCwgRGFuaWVsIFZldHRlcgo+ICAgCj4gICBMZXZlbDogSW50ZXJt ZWRpYXRlCj4gICAKPiArVXNlIHN0cnVjdCBkbWFfYnVmX21hcCB0aHJvdWdob3V0IGNvZGViYXNl Cj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICsKPiArUG9p bnRlcnMgdG8gc2hhcmVkIGRldmljZSBtZW1vcnkgYXJlIHN0b3JlZCBpbiBzdHJ1Y3QgZG1hX2J1 Zl9tYXAuIEVhY2gKPiAraW5zdGFuY2Uga25vd3Mgd2hldGhlciBpdCByZWZlcnMgdG8gc3lzdGVt IG9yIEkvTyBtZW1vcnkuIE1vc3Qgb2YgdGhlIERSTS13aWRlCj4gK2ludGVyZmFjZSBoYXZlIGJl ZW4gY29udmVydGVkIHRvIHVzZSBzdHJ1Y3QgZG1hX2J1Zl9tYXAsIGJ1dCBpbXBsZW1lbnRhdGlv bnMKPiArb2Z0ZW4gc3RpbGwgdXNlIHJhdyBwb2ludGVycy4KPiArCj4gK1RoZSB0YXNrIGlzIHRv IHVzZSBzdHJ1Y3QgZG1hX2J1Zl9tYXAgd2hlcmUgaXQgbWFrZXMgc2Vuc2UuCj4gKwo+ICsqIE1l bW9yeSBtYW5hZ2VycyBzaG91bGQgdXNlIHN0cnVjdCBkbWFfYnVmX21hcCBmb3IgZG1hLWJ1Zi1p bXBvcnRlZCBidWZmZXJzLgo+ICsqIFRUTSBtaWdodCBiZW5lZml0IGZyb20gdXNpbmcgc3RydWN0 IGRtYV9idWZfbWFwIGludGVybmFsbHkuCj4gKyogRnJhbWVidWZmZXIgY29weWluZyBhbmQgYmxp dHRpbmcgaGVscGVycyBzaG91bGQgb3BlcmF0ZSBvbiBzdHJ1Y3QgZG1hX2J1Zl9tYXAuCj4gKwo+ ICtDb250YWN0OiBUaG9tYXMgWmltbWVybWFubiA8dHppbW1lcm1hbm5Ac3VzZS5kZT4sIENocmlz dGlhbiBLw7ZuaWcsIERhbmllbCBWZXR0ZXIKPiArCj4gK0xldmVsOiBJbnRlcm1lZGlhdGUKPiAr Cj4gICAKPiAgIENvcmUgcmVmYWN0b3JpbmdzCj4gICA9PT09PT09PT09PT09PT09PQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmln Cj4gaW5kZXggMTQ3ZDYxYjk2NzRlLi4zMTk4MzliODdkMzcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+IEBAIC0y MzksNiArMjM5LDcgQEAgY29uZmlnIERSTV9SQURFT04KPiAgIAlzZWxlY3QgRldfTE9BREVSCj4g ICAgICAgICAgIHNlbGVjdCBEUk1fS01TX0hFTFBFUgo+ICAgICAgICAgICBzZWxlY3QgRFJNX1RU TQo+ICsJc2VsZWN0IERSTV9UVE1fSEVMUEVSCj4gICAJc2VsZWN0IFBPV0VSX1NVUFBMWQo+ICAg CXNlbGVjdCBIV01PTgo+ICAgCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCj4gQEAgLTI1 OSw2ICsyNjAsNyBAQCBjb25maWcgRFJNX0FNREdQVQo+ICAgCXNlbGVjdCBEUk1fS01TX0hFTFBF Ugo+ICAgCXNlbGVjdCBEUk1fU0NIRUQKPiAgIAlzZWxlY3QgRFJNX1RUTQo+ICsJc2VsZWN0IERS TV9UVE1fSEVMUEVSCj4gICAJc2VsZWN0IFBPV0VSX1NVUFBMWQo+ICAgCXNlbGVjdCBIV01PTgo+ ICAgCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5jCj4gaW5kZXggNWI0NjVhYjc3NGQxLi5lNTkxOWVmY2E4 NzAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9i dWYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMK PiBAQCAtNDEsNDIgKzQxLDYgQEAKPiAgICNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UtYXJyYXku aD4KPiAgICNpbmNsdWRlIDxsaW51eC9wY2ktcDJwZG1hLmg+Cj4gICAKPiAtLyoqCj4gLSAqIGFt ZGdwdV9nZW1fcHJpbWVfdm1hcCAtICZkbWFfYnVmX29wcy52bWFwIGltcGxlbWVudGF0aW9uCj4g LSAqIEBvYmo6IEdFTSBCTwo+IC0gKgo+IC0gKiBTZXRzIHVwIGFuIGluLWtlcm5lbCB2aXJ0dWFs IG1hcHBpbmcgb2YgdGhlIEJPJ3MgbWVtb3J5Lgo+IC0gKgo+IC0gKiBSZXR1cm5zOgo+IC0gKiBU aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBtYXBwaW5nIG9yIGFuIGVycm9yIHBvaW50ZXIuCj4g LSAqLwo+IC12b2lkICphbWRncHVfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopCj4gLXsKPiAtCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gZ2VtX3RvX2FtZGdwdV9ibyhv YmopOwo+IC0JaW50IHJldDsKPiAtCj4gLQlyZXQgPSB0dG1fYm9fa21hcCgmYm8tPnRibywgMCwg Ym8tPnRiby5udW1fcGFnZXMsCj4gLQkJCSAgJmJvLT5kbWFfYnVmX3ZtYXApOwo+IC0JaWYgKHJl dCkKPiAtCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+IC0KPiAtCXJldHVybiBiby0+ZG1hX2J1Zl92 bWFwLnZpcnR1YWw7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBhbWRncHVfZ2VtX3ByaW1lX3Z1bm1h cCAtICZkbWFfYnVmX29wcy52dW5tYXAgaW1wbGVtZW50YXRpb24KPiAtICogQG9iajogR0VNIEJP Cj4gLSAqIEB2YWRkcjogVmlydHVhbCBhZGRyZXNzICh1bnVzZWQpCj4gLSAqCj4gLSAqIFRlYXJz IGRvd24gdGhlIGluLWtlcm5lbCB2aXJ0dWFsIG1hcHBpbmcgb2YgdGhlIEJPJ3MgbWVtb3J5Lgo+ IC0gKi8KPiAtdm9pZCBhbWRncHVfZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiwgdm9pZCAqdmFkZHIpCj4gLXsKPiAtCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gZ2Vt X3RvX2FtZGdwdV9ibyhvYmopOwo+IC0KPiAtCXR0bV9ib19rdW5tYXAoJmJvLT5kbWFfYnVmX3Zt YXApOwo+IC19Cj4gLQo+ICAgLyoqCj4gICAgKiBhbWRncHVfZ2VtX3ByaW1lX21tYXAgLSAmZHJt X2RyaXZlci5nZW1fcHJpbWVfbW1hcCBpbXBsZW1lbnRhdGlvbgo+ICAgICogQG9iajogR0VNIEJP Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVm LmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5oCj4gaW5kZXgg MmM1Yzg0YTA2YmI5Li4zOWI1Yjk2MTZmZDggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9idWYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmgKPiBAQCAtMzEsOCArMzEsNiBAQCBzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKmFtZGdwdV9nZW1fcHJpbWVfaW1wb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Cj4gICAJCQkJCSAgICBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zik7Cj4gICBib29sIGFtZGdwdV9k bWFidWZfaXNfeGdtaV9hY2Nlc3NpYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAg CQkJCSAgICAgIHN0cnVjdCBhbWRncHVfYm8gKmJvKTsKPiAtdm9pZCAqYW1kZ3B1X2dlbV9wcmlt ZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAtdm9pZCBhbWRncHVfZ2VtX3By aW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+ICAg aW50IGFtZGdwdV9nZW1fcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKPiAg IAkJCSAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwo+IGluZGV4IGJlMDhhNjNlZjU4Yy4uNTc2NjU5ODI3ZTc0 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwo+IEBAIC0zMyw2 ICszMyw3IEBACj4gICAKPiAgICNpbmNsdWRlIDxkcm0vYW1kZ3B1X2RybS5oPgo+ICAgI2luY2x1 ZGUgPGRybS9kcm1fZGVidWdmcy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdHRtX2hlbHBl ci5oPgo+ICAgCj4gICAjaW5jbHVkZSAiYW1kZ3B1LmgiCj4gICAjaW5jbHVkZSAiYW1kZ3B1X2Rp c3BsYXkuaCIKPiBAQCAtMjIwLDggKzIyMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2dl bV9vYmplY3RfZnVuY3MgYW1kZ3B1X2dlbV9vYmplY3RfZnVuY3MgPSB7Cj4gICAJLm9wZW4gPSBh bWRncHVfZ2VtX29iamVjdF9vcGVuLAo+ICAgCS5jbG9zZSA9IGFtZGdwdV9nZW1fb2JqZWN0X2Ns b3NlLAo+ICAgCS5leHBvcnQgPSBhbWRncHVfZ2VtX3ByaW1lX2V4cG9ydCwKPiAtCS52bWFwID0g YW1kZ3B1X2dlbV9wcmltZV92bWFwLAo+IC0JLnZ1bm1hcCA9IGFtZGdwdV9nZW1fcHJpbWVfdnVu bWFwLAo+ICsJLnZtYXAgPSBkcm1fZ2VtX3R0bV92bWFwLAo+ICsJLnZ1bm1hcCA9IGRybV9nZW1f dHRtX3Z1bm1hcCwKPiAgIH07Cj4gICAKPiAgIC8qCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9vYmplY3QuaAo+IGluZGV4IDEzMmU1Zjk1NTE4MC4uMDEyOTZlZjBkNjczIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaAo+IEBAIC0x MDAsNyArMTAwLDYgQEAgc3RydWN0IGFtZGdwdV9ibyB7Cj4gICAJc3RydWN0IGFtZGdwdV9ibwkJ KnBhcmVudDsKPiAgIAlzdHJ1Y3QgYW1kZ3B1X2JvCQkqc2hhZG93Owo+ICAgCj4gLQlzdHJ1Y3Qg dHRtX2JvX2ttYXBfb2JqCQlkbWFfYnVmX3ZtYXA7Cj4gICAJc3RydWN0IGFtZGdwdV9tbgkJKm1u Owo+ICAgCj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfY3Vyc29y LmMgYi9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9jdXJzb3IuYwo+IGluZGV4IGUwZjQ2MTM5MThh ZC4uNzQyZDQzYTdlZGY0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2N1 cnNvci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfY3Vyc29yLmMKPiBAQCAtMzks NyArMzksNyBAQCBzdGF0aWMgdm9pZCBhc3RfY3Vyc29yX2Zpbmkoc3RydWN0IGFzdF9wcml2YXRl ICphc3QpCj4gICAKPiAgIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhc3QtPmN1cnNvci5n Ym8pOyArK2kpIHsKPiAgIAkJZ2JvID0gYXN0LT5jdXJzb3IuZ2JvW2ldOwo+IC0JCWRybV9nZW1f dnJhbV92dW5tYXAoZ2JvLCBhc3QtPmN1cnNvci52YWRkcltpXSk7Cj4gKwkJZHJtX2dlbV92cmFt X3Z1bm1hcChnYm8sICZhc3QtPmN1cnNvci5tYXBbaV0pOwo+ICAgCQlkcm1fZ2VtX3ZyYW1fdW5w aW4oZ2JvKTsKPiAgIAkJZHJtX2dlbV92cmFtX3B1dChnYm8pOwo+ICAgCX0KPiBAQCAtNjAsNyAr NjAsNyBAQCBpbnQgYXN0X2N1cnNvcl9pbml0KHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0KQo+ICAg CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmYXN0LT5iYXNlOwo+ICAgCXNpemVfdCBzaXplLCBp Owo+ICAgCXN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm87Cj4gLQl2b2lkIF9faW9tZW0g KnZhZGRyOwo+ICsJc3RydWN0IGRtYV9idWZfbWFwIG1hcDsKPiAgIAlpbnQgcmV0Owo+ICAgCj4g ICAJc2l6ZSA9IHJvdW5kdXAoQVNUX0hXQ19TSVpFICsgQVNUX0hXQ19TSUdOQVRVUkVfU0laRSwg UEFHRV9TSVpFKTsKPiBAQCAtNzcsMTYgKzc3LDE1IEBAIGludCBhc3RfY3Vyc29yX2luaXQoc3Ry dWN0IGFzdF9wcml2YXRlICphc3QpCj4gICAJCQlkcm1fZ2VtX3ZyYW1fcHV0KGdibyk7Cj4gICAJ CQlnb3RvIGVycl9kcm1fZ2VtX3ZyYW1fcHV0Owo+ICAgCQl9Cj4gLQkJdmFkZHIgPSBkcm1fZ2Vt X3ZyYW1fdm1hcChnYm8pOwo+IC0JCWlmIChJU19FUlIodmFkZHIpKSB7Cj4gLQkJCXJldCA9IFBU Ul9FUlIodmFkZHIpOwo+ICsJCXJldCA9IGRybV9nZW1fdnJhbV92bWFwKGdibywgJm1hcCk7Cj4g KwkJaWYgKHJldCkgewo+ICAgCQkJZHJtX2dlbV92cmFtX3VucGluKGdibyk7Cj4gICAJCQlkcm1f Z2VtX3ZyYW1fcHV0KGdibyk7Cj4gICAJCQlnb3RvIGVycl9kcm1fZ2VtX3ZyYW1fcHV0Owo+ICAg CQl9Cj4gICAKPiAgIAkJYXN0LT5jdXJzb3IuZ2JvW2ldID0gZ2JvOwo+IC0JCWFzdC0+Y3Vyc29y LnZhZGRyW2ldID0gdmFkZHI7Cj4gKwkJYXN0LT5jdXJzb3IubWFwW2ldID0gbWFwOwo+ICAgCX0K PiAgIAo+ICAgCXJldHVybiBkcm1tX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhc3RfY3Vyc29y X3JlbGVhc2UsIE5VTEwpOwo+IEBAIC05NSw3ICs5NCw3IEBAIGludCBhc3RfY3Vyc29yX2luaXQo c3RydWN0IGFzdF9wcml2YXRlICphc3QpCj4gICAJd2hpbGUgKGkpIHsKPiAgIAkJLS1pOwo+ICAg CQlnYm8gPSBhc3QtPmN1cnNvci5nYm9baV07Cj4gLQkJZHJtX2dlbV92cmFtX3Z1bm1hcChnYm8s IGFzdC0+Y3Vyc29yLnZhZGRyW2ldKTsKPiArCQlkcm1fZ2VtX3ZyYW1fdnVubWFwKGdibywgJmFz dC0+Y3Vyc29yLm1hcFtpXSk7Cj4gICAJCWRybV9nZW1fdnJhbV91bnBpbihnYm8pOwo+ICAgCQlk cm1fZ2VtX3ZyYW1fcHV0KGdibyk7Cj4gICAJfQo+IEBAIC0xNzAsNiArMTY5LDcgQEAgaW50IGFz dF9jdXJzb3JfYmxpdChzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCwgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIpCj4gICB7Cj4gICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZhc3QtPmJhc2U7 Cj4gICAJc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibzsKPiArCXN0cnVjdCBkbWFfYnVm X21hcCBtYXA7Cj4gICAJaW50IHJldDsKPiAgIAl2b2lkICpzcmM7Cj4gICAJdm9pZCBfX2lvbWVt ICpkc3Q7Cj4gQEAgLTE4MywxOCArMTgzLDE3IEBAIGludCBhc3RfY3Vyc29yX2JsaXQoc3RydWN0 IGFzdF9wcml2YXRlICphc3QsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQo+ICAgCXJldCA9 IGRybV9nZW1fdnJhbV9waW4oZ2JvLCAwKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gcmV0 Owo+IC0Jc3JjID0gZHJtX2dlbV92cmFtX3ZtYXAoZ2JvKTsKPiAtCWlmIChJU19FUlIoc3JjKSkg ewo+IC0JCXJldCA9IFBUUl9FUlIoc3JjKTsKPiArCXJldCA9IGRybV9nZW1fdnJhbV92bWFwKGdi bywgJm1hcCk7Cj4gKwlpZiAocmV0KQo+ICAgCQlnb3RvIGVycl9kcm1fZ2VtX3ZyYW1fdW5waW47 Cj4gLQl9Cj4gKwlzcmMgPSBtYXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0 aW9uIHByb3Blcmx5ICovCj4gICAKPiAtCWRzdCA9IGFzdC0+Y3Vyc29yLnZhZGRyW2FzdC0+Y3Vy c29yLm5leHRfaW5kZXhdOwo+ICsJZHN0ID0gYXN0LT5jdXJzb3IubWFwW2FzdC0+Y3Vyc29yLm5l eHRfaW5kZXhdLnZhZGRyX2lvbWVtOwo+ICAgCj4gICAJLyogZG8gZGF0YSB0cmFuc2ZlciB0byBj dXJzb3IgQk8gKi8KPiAgIAl1cGRhdGVfY3Vyc29yX2ltYWdlKGRzdCwgc3JjLCBmYi0+d2lkdGgs IGZiLT5oZWlnaHQpOwo+ICAgCj4gLQlkcm1fZ2VtX3ZyYW1fdnVubWFwKGdibywgc3JjKTsKPiAr CWRybV9nZW1fdnJhbV92dW5tYXAoZ2JvLCAmbWFwKTsKPiAgIAlkcm1fZ2VtX3ZyYW1fdW5waW4o Z2JvKTsKPiAgIAo+ICAgCXJldHVybiAwOwo+IEBAIC0yNTcsNyArMjU2LDcgQEAgdm9pZCBhc3Rf Y3Vyc29yX3Nob3coc3RydWN0IGFzdF9wcml2YXRlICphc3QsIGludCB4LCBpbnQgeSwKPiAgIAl1 OCBfX2lvbWVtICpzaWc7Cj4gICAJdTgganJlZzsKPiAgIAo+IC0JZHN0ID0gYXN0LT5jdXJzb3Iu dmFkZHJbYXN0LT5jdXJzb3IubmV4dF9pbmRleF07Cj4gKwlkc3QgPSBhc3QtPmN1cnNvci5tYXBb YXN0LT5jdXJzb3IubmV4dF9pbmRleF0udmFkZHI7Cj4gICAKPiAgIAlzaWcgPSBkc3QgKyBBU1Rf SFdDX1NJWkU7Cj4gICAJd3JpdGVsKHgsIHNpZyArIEFTVF9IV0NfU0lHTkFUVVJFX1gpOwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9hc3QvYXN0X2Rydi5oCj4gaW5kZXggNDY3MDQ5Y2E4NDMwLi5mOTYzMTQxZGQ4NTEgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vYXN0L2FzdF9kcnYuaAo+IEBAIC0yOCwxMCArMjgsMTEgQEAKPiAgICNpZm5kZWYgX19B U1RfRFJWX0hfXwo+ICAgI2RlZmluZSBfX0FTVF9EUlZfSF9fCj4gICAKPiAtI2luY2x1ZGUgPGxp bnV4L3R5cGVzLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9pby5oPgo+ICsjaW5jbHVkZSA8bGludXgv ZG1hLWJ1Zi1tYXAuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPiAgICNpbmNsdWRlIDxs aW51eC9pMmMtYWxnby1iaXQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC90eXBlcy5oPgo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4K PiAgICNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiBAQCAtMTMxLDcgKzEzMiw3IEBAIHN0cnVj dCBhc3RfcHJpdmF0ZSB7Cj4gICAKPiAgIAlzdHJ1Y3Qgewo+ICAgCQlzdHJ1Y3QgZHJtX2dlbV92 cmFtX29iamVjdCAqZ2JvW0FTVF9ERUZBVUxUX0hXQ19OVU1dOwo+IC0JCXZvaWQgX19pb21lbSAq dmFkZHJbQVNUX0RFRkFVTFRfSFdDX05VTV07Cj4gKwkJc3RydWN0IGRtYV9idWZfbWFwIG1hcFtB U1RfREVGQVVMVF9IV0NfTlVNXTsKPiAgIAkJdW5zaWduZWQgaW50IG5leHRfaW5kZXg7Cj4gICAJ fSBjdXJzb3I7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKPiBpbmRleCAxZGE2N2QzNGU1NWQuLmE4OWFkNDU3 MGUzYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2RybV9nZW0uYwo+IEBAIC0zNiw2ICszNiw3IEBACj4gICAjaW5jbHVkZSA8 bGludXgvcGFnZW1hcC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+Cj4gICAjaW5j bHVkZSA8bGludXgvZG1hLWJ1Zi5oPgo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4K PiAgICNpbmNsdWRlIDxsaW51eC9tZW1fZW5jcnlwdC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3Bh Z2V2ZWMuaD4KPiAgIAo+IEBAIC0xMjA3LDI2ICsxMjA4LDMwIEBAIHZvaWQgZHJtX2dlbV91bnBp bihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAgIAo+ICAgdm9pZCAqZHJtX2dlbV92bWFw KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ICAgewo+IC0Jdm9pZCAqdmFkZHI7Cj4gKwlz dHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICsJaW50IHJldDsKPiAgIAo+IC0JaWYgKG9iai0+ZnVu Y3MtPnZtYXApCj4gLQkJdmFkZHIgPSBvYmotPmZ1bmNzLT52bWFwKG9iaik7Cj4gLQllbHNlCj4g LQkJdmFkZHIgPSBFUlJfUFRSKC1FT1BOT1RTVVBQKTsKPiArCWlmICghb2JqLT5mdW5jcy0+dm1h cCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7Cj4gICAKPiAtCWlmICghdmFkZHIp Cj4gLQkJdmFkZHIgPSBFUlJfUFRSKC1FTk9NRU0pOwo+ICsJcmV0ID0gb2JqLT5mdW5jcy0+dm1h cChvYmosICZtYXApOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJ ZWxzZSBpZiAoZG1hX2J1Zl9tYXBfaXNfbnVsbCgmbWFwKSkKPiArCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKPiAgIAo+IC0JcmV0dXJuIHZhZGRyOwo+ICsJcmV0dXJuIG1hcC52YWRkcjsKPiAg IH0KPiAgIAo+ICAgdm9pZCBkcm1fZ2VtX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aiwgdm9pZCAqdmFkZHIpCj4gICB7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwID0gRE1BX0JV Rl9NQVBfSU5JVF9WQUREUih2YWRkcik7Cj4gKwo+ICAgCWlmICghdmFkZHIpCj4gICAJCXJldHVy bjsKPiAgIAo+ICAgCWlmIChvYmotPmZ1bmNzLT52dW5tYXApCj4gLQkJb2JqLT5mdW5jcy0+dnVu bWFwKG9iaiwgdmFkZHIpOwo+ICsJCW9iai0+ZnVuY3MtPnZ1bm1hcChvYmosICZtYXApOwo+ICAg fQo+ICAgCj4gICAvKioKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fY21h X2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fY21hX2hlbHBlci5jCj4gaW5kZXgg ZDUyNzQ4NWVhMGI3Li5iNTdlM2U5MjIyZjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2RybV9nZW1fY21hX2hlbHBlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fY21h X2hlbHBlci5jCj4gQEAgLTUxOSw2ICs1MTksOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2Vt X2NtYV9wcmltZV9tbWFwKTsKPiAgICAqIGRybV9nZW1fY21hX3ByaW1lX3ZtYXAgLSBtYXAgYSBD TUEgR0VNIG9iamVjdCBpbnRvIHRoZSBrZXJuZWwncyB2aXJ0dWFsCj4gICAgKiAgICAgYWRkcmVz cyBzcGFjZQo+ICAgICogQG9iajogR0VNIG9iamVjdAo+ICsgKiBAbWFwOiBSZXR1cm5zIHRoZSBr ZXJuZWwgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBDTUEgR0VNIG9iamVjdCdzIGJhY2tpbmcKPiAr ICogICAgICAgc3RvcmUuCj4gICAgKgo+ICAgICogVGhpcyBmdW5jdGlvbiBtYXBzIGEgYnVmZmVy IGV4cG9ydGVkIHZpYSBEUk0gUFJJTUUgaW50byB0aGUga2VybmVsJ3MKPiAgICAqIHZpcnR1YWwg YWRkcmVzcyBzcGFjZS4gU2luY2UgdGhlIENNQSBidWZmZXJzIGFyZSBhbHJlYWR5IG1hcHBlZCBp bnRvIHRoZQo+IEBAIC01MjcsMTMgKzUyOSwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2Vt X2NtYV9wcmltZV9tbWFwKTsKPiAgICAqIGRyaXZlcidzICZkcm1fZ2VtX29iamVjdF9mdW5jcy52 bWFwIGNhbGxiYWNrLgo+ICAgICoKPiAgICAqIFJldHVybnM6Cj4gLSAqIFRoZSBrZXJuZWwgdmly dHVhbCBhZGRyZXNzIG9mIHRoZSBDTUEgR0VNIG9iamVjdCdzIGJhY2tpbmcgc3RvcmUuCj4gKyAq IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiAgICAq Lwo+IC12b2lkICpkcm1fZ2VtX2NtYV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqKQo+ICtpbnQgZHJtX2dlbV9jbWFfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IGRybV9nZW1f Y21hX29iamVjdCAqY21hX29iaiA9IHRvX2RybV9nZW1fY21hX29iaihvYmopOwo+ICAgCj4gLQly ZXR1cm4gY21hX29iai0+dmFkZHI7Cj4gKwlkbWFfYnVmX21hcF9zZXRfdmFkZHIobWFwLCBjbWFf b2JqLT52YWRkcik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gICBFWFBPUlRfU1lNQk9MX0dQ TChkcm1fZ2VtX2NtYV9wcmltZV92bWFwKTsKPiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3No bWVtX2hlbHBlci5jCj4gaW5kZXggZmIxMWRmN2FjZWQ1Li41NTUzZjU4ZjY4ZjMgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYwo+IEBAIC0yNTgsMTkgKzI1OCwyNSBA QCB2b2lkIGRybV9nZW1fc2htZW1fdW5waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4g ICB9Cj4gICBFWFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fdW5waW4pOwo+ICAgCj4gLXN0YXRp YyB2b2lkICpkcm1fZ2VtX3NobWVtX3ZtYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29i amVjdCAqc2htZW0pCj4gK3N0YXRpYyBpbnQgZHJtX2dlbV9zaG1lbV92bWFwX2xvY2tlZChzdHJ1 Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtLCBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCkK PiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZzaG1lbS0+YmFzZTsKPiAt CXN0cnVjdCBkbWFfYnVmX21hcCBtYXA7Cj4gICAJaW50IHJldCA9IDA7Cj4gICAKPiAtCWlmIChz aG1lbS0+dm1hcF91c2VfY291bnQrKyA+IDApCj4gLQkJcmV0dXJuIHNobWVtLT52YWRkcjsKPiAr CWlmIChzaG1lbS0+dm1hcF91c2VfY291bnQrKyA+IDApIHsKPiArCQlkbWFfYnVmX21hcF9zZXRf dmFkZHIobWFwLCBzaG1lbS0+dmFkZHIpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICAgCj4gICAJ aWYgKG9iai0+aW1wb3J0X2F0dGFjaCkgewo+IC0JCXJldCA9IGRtYV9idWZfdm1hcChvYmotPmlt cG9ydF9hdHRhY2gtPmRtYWJ1ZiwgJm1hcCk7Cj4gLQkJaWYgKCFyZXQpCj4gLQkJCXNobWVtLT52 YWRkciA9IG1hcC52YWRkcjsKPiArCQlyZXQgPSBkbWFfYnVmX3ZtYXAob2JqLT5pbXBvcnRfYXR0 YWNoLT5kbWFidWYsIG1hcCk7Cj4gKwkJaWYgKCFyZXQpIHsKPiArCQkJaWYgKFdBUk5fT04obWFw LT5pc19pb21lbSkpIHsKPiArCQkJCXJldCA9IC1FSU87Cj4gKwkJCQlnb3RvIGVycl9wdXRfcGFn ZXM7Cj4gKwkJCX0KPiArCQkJc2htZW0tPnZhZGRyID0gbWFwLT52YWRkcjsKPiArCQl9Cj4gICAJ fSBlbHNlIHsKPiAgIAkJcGdwcm90X3QgcHJvdCA9IFBBR0VfS0VSTkVMOwo+ICAgCj4gQEAgLTI4 NCw2ICsyOTAsOCBAQCBzdGF0aWMgdm9pZCAqZHJtX2dlbV9zaG1lbV92bWFwX2xvY2tlZChzdHJ1 Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQo+ICAgCQkJCSAgICBWTV9NQVAsIHByb3Qp Owo+ICAgCQlpZiAoIXNobWVtLT52YWRkcikKPiAgIAkJCXJldCA9IC1FTk9NRU07Cj4gKwkJZWxz ZQo+ICsJCQlkbWFfYnVmX21hcF9zZXRfdmFkZHIobWFwLCBzaG1lbS0+dmFkZHIpOwo+ICAgCX0K PiAgIAo+ICAgCWlmIChyZXQpIHsKPiBAQCAtMjkxLDcgKzI5OSw3IEBAIHN0YXRpYyB2b2lkICpk cm1fZ2VtX3NobWVtX3ZtYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0pCj4gICAJCWdvdG8gZXJyX3B1dF9wYWdlczsKPiAgIAl9Cj4gICAKPiAtCXJldHVybiBzaG1l bS0+dmFkZHI7Cj4gKwlyZXR1cm4gMDsKPiAgIAo+ICAgZXJyX3B1dF9wYWdlczoKPiAgIAlpZiAo IW9iai0+aW1wb3J0X2F0dGFjaCkKPiBAQCAtMjk5LDEyICszMDcsMTQgQEAgc3RhdGljIHZvaWQg KmRybV9nZW1fc2htZW1fdm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpz aG1lbSkKPiAgIGVycl96ZXJvX3VzZToKPiAgIAlzaG1lbS0+dm1hcF91c2VfY291bnQgPSAwOwo+ ICAgCj4gLQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ ICAgLyoKPiAgICAqIGRybV9nZW1fc2htZW1fdm1hcCAtIENyZWF0ZSBhIHZpcnR1YWwgbWFwcGlu ZyBmb3IgYSBzaG1lbSBHRU0gb2JqZWN0Cj4gICAgKiBAc2htZW06IHNobWVtIEdFTSBvYmplY3QK PiArICogQG1hcDogUmV0dXJucyB0aGUga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgU0hN RU0gR0VNIG9iamVjdCdzIGJhY2tpbmcKPiArICogICAgICAgc3RvcmUuCj4gICAgKgo+ICAgICog VGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgYSBjb250aWd1b3VzIGtlcm5lbCB2aXJ0dWFs IGFkZHJlc3MgbWFwcGluZwo+ICAgICogZXhpc3RzIGZvciB0aGUgYnVmZmVyIGJhY2tpbmcgdGhl IHNobWVtIEdFTSBvYmplY3QuCj4gQEAgLTMxOCwyNiArMzI4LDI1IEBAIHN0YXRpYyB2b2lkICpk cm1fZ2VtX3NobWVtX3ZtYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0pCj4gICAgKiBSZXR1cm5zOgo+ICAgICogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJy b3IgY29kZSBvbiBmYWlsdXJlLgo+ICAgICovCj4gLXZvaWQgKmRybV9nZW1fc2htZW1fdm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAraW50IGRybV9nZW1fc2htZW1fdm1hcChzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4g ICAJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1f b2JqKG9iaik7Cj4gLQl2b2lkICp2YWRkcjsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gICAJcmV0ID0g bXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzaG1lbS0+dm1hcF9sb2NrKTsKPiAgIAlpZiAocmV0 KQo+IC0JCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gLQl2YWRkciA9IGRybV9nZW1fc2htZW1fdm1h cF9sb2NrZWQoc2htZW0pOwo+ICsJCXJldHVybiByZXQ7Cj4gKwlyZXQgPSBkcm1fZ2VtX3NobWVt X3ZtYXBfbG9ja2VkKHNobWVtLCBtYXApOwo+ICAgCW11dGV4X3VubG9jaygmc2htZW0tPnZtYXBf bG9jayk7Cj4gICAKPiAtCXJldHVybiB2YWRkcjsKPiArCXJldHVybiByZXQ7Cj4gICB9Cj4gICBF WFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fdm1hcCk7Cj4gICAKPiAtc3RhdGljIHZvaWQgZHJt X2dlbV9zaG1lbV92dW5tYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0pCj4gK3N0YXRpYyB2b2lkIGRybV9nZW1fc2htZW1fdnVubWFwX2xvY2tlZChzdHJ1Y3QgZHJt X2dlbV9zaG1lbV9vYmplY3QgKnNobWVtLAo+ICsJCQkJCXN0cnVjdCBkbWFfYnVmX21hcCAqbWFw KQo+ICAgewo+ICAgCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJnNobWVtLT5iYXNlOwo+ IC0Jc3RydWN0IGRtYV9idWZfbWFwIG1hcCA9IERNQV9CVUZfTUFQX0lOSVRfVkFERFIoc2htZW0t PnZhZGRyKTsKPiAgIAo+ICAgCWlmIChXQVJOX09OX09OQ0UoIXNobWVtLT52bWFwX3VzZV9jb3Vu dCkpCj4gICAJCXJldHVybjsKPiBAQCAtMzQ2LDcgKzM1NSw3IEBAIHN0YXRpYyB2b2lkIGRybV9n ZW1fc2htZW1fdnVubWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVt KQo+ICAgCQlyZXR1cm47Cj4gICAKPiAgIAlpZiAob2JqLT5pbXBvcnRfYXR0YWNoKQo+IC0JCWRt YV9idWZfdnVubWFwKG9iai0+aW1wb3J0X2F0dGFjaC0+ZG1hYnVmLCAmbWFwKTsKPiArCQlkbWFf YnVmX3Z1bm1hcChvYmotPmltcG9ydF9hdHRhY2gtPmRtYWJ1ZiwgbWFwKTsKPiAgIAllbHNlCj4g ICAJCXZ1bm1hcChzaG1lbS0+dmFkZHIpOwo+ICAgCj4gQEAgLTM1Nyw2ICszNjYsNyBAQCBzdGF0 aWMgdm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1f b2JqZWN0ICpzaG1lbSkKPiAgIC8qCj4gICAgKiBkcm1fZ2VtX3NobWVtX3Z1bm1hcCAtIFVubWFw IGEgdmlydHVhbCBtYXBwaW5nIGZvIGEgc2htZW0gR0VNIG9iamVjdAo+ICAgICogQHNobWVtOiBz aG1lbSBHRU0gb2JqZWN0Cj4gKyAqIEBtYXA6IEtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgd2hlcmUg dGhlIFNITUVNIEdFTSBvYmplY3Qgd2FzIG1hcHBlZAo+ICAgICoKPiAgICAqIFRoaXMgZnVuY3Rp b24gY2xlYW5zIHVwIGEga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nIGFjcXVpcmVkIGJ5 Cj4gICAgKiBkcm1fZ2VtX3NobWVtX3ZtYXAoKS4gVGhlIG1hcHBpbmcgaXMgb25seSByZW1vdmVk IHdoZW4gdGhlIHVzZSBjb3VudCBkcm9wcyB0bwo+IEBAIC0zNjYsMTIgKzM3NiwxMiBAQCBzdGF0 aWMgdm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1f b2JqZWN0ICpzaG1lbSkKPiAgICAqIGFsc28gYmUgY2FsbGVkIGJ5IGRyaXZlcnMgZGlyZWN0bHks IGluIHdoaWNoIGNhc2UgaXQgd2lsbCBoaWRlIHRoZQo+ICAgICogZGlmZmVyZW5jZXMgYmV0d2Vl biBkbWEtYnVmIGltcG9ydGVkIGFuZCBuYXRpdmVseSBhbGxvY2F0ZWQgb2JqZWN0cy4KPiAgICAq Lwo+IC12b2lkIGRybV9nZW1fc2htZW1fdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LCB2b2lkICp2YWRkcikKPiArdm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcChzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0 IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7 Cj4gICAKPiAgIAltdXRleF9sb2NrKCZzaG1lbS0+dm1hcF9sb2NrKTsKPiAtCWRybV9nZW1fc2ht ZW1fdnVubWFwX2xvY2tlZChzaG1lbSk7Cj4gKwlkcm1fZ2VtX3NobWVtX3Z1bm1hcF9sb2NrZWQo c2htZW0sIG1hcCk7Cj4gICAJbXV0ZXhfdW5sb2NrKCZzaG1lbS0+dm1hcF9sb2NrKTsKPiAgIH0K PiAgIEVYUE9SVF9TWU1CT0woZHJtX2dlbV9zaG1lbV92dW5tYXApOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9nZW1fdnJhbV9oZWxwZXIuYwo+IGluZGV4IDJkNWVkMzA1MThmMS4uNGQ4NTUzYjI4NTU4IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5jCj4gQEAgLTEsNSArMSw2IEBA Cj4gICAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgo+ICAgCj4g KyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLW1hcC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV9kZWJ1Z2ZzLmg+Cj4gQEAgLTExMyw4ICsx MTQsOCBAQCBzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fY2xlYW51cChzdHJ1Y3QgZHJtX2dlbV92 cmFtX29iamVjdCAqZ2JvKQo+ICAgCSAqIHVwOyBvbmx5IHJlbGVhc2UgdGhlIEdFTSBvYmplY3Qu Cj4gICAJICovCj4gICAKPiAtCVdBUk5fT04oZ2JvLT5rbWFwX3VzZV9jb3VudCk7Cj4gLQlXQVJO X09OKGdiby0+a21hcC52aXJ0dWFsKTsKPiArCVdBUk5fT04oZ2JvLT52bWFwX3VzZV9jb3VudCk7 Cj4gKwlXQVJOX09OKGRtYV9idWZfbWFwX2lzX3NldCgmZ2JvLT5tYXApKTsKPiAgIAo+ICAgCWRy bV9nZW1fb2JqZWN0X3JlbGVhc2UoJmdiby0+Ym8uYmFzZSk7Cj4gICB9Cj4gQEAgLTM4MiwyOSAr MzgzLDM3IEBAIGludCBkcm1fZ2VtX3ZyYW1fdW5waW4oc3RydWN0IGRybV9nZW1fdnJhbV9vYmpl Y3QgKmdibykKPiAgIH0KPiAgIEVYUE9SVF9TWU1CT0woZHJtX2dlbV92cmFtX3VucGluKTsKPiAg IAo+IC1zdGF0aWMgdm9pZCAqZHJtX2dlbV92cmFtX2ttYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2Vt X3ZyYW1fb2JqZWN0ICpnYm8pCj4gK3N0YXRpYyBpbnQgZHJtX2dlbV92cmFtX2ttYXBfbG9ja2Vk KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sCj4gKwkJCQkgICAgc3RydWN0IGRtYV9i dWZfbWFwICptYXApCj4gICB7Cj4gICAJaW50IHJldDsKPiAtCXN0cnVjdCB0dG1fYm9fa21hcF9v YmogKmttYXAgPSAmZ2JvLT5rbWFwOwo+IC0JYm9vbCBpc19pb21lbTsKPiAgIAo+IC0JaWYgKGdi by0+a21hcF91c2VfY291bnQgPiAwKQo+ICsJaWYgKGdiby0+dm1hcF91c2VfY291bnQgPiAwKQo+ ICAgCQlnb3RvIG91dDsKPiAgIAo+IC0JcmV0ID0gdHRtX2JvX2ttYXAoJmdiby0+Ym8sIDAsIGdi by0+Ym8ubnVtX3BhZ2VzLCBrbWFwKTsKPiArCXJldCA9IHR0bV9ib192bWFwKCZnYm8tPmJvLCAm Z2JvLT5tYXApOwo+ICAgCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCQly ZXR1cm4gcmV0Owo+ICAgCj4gICBvdXQ6Cj4gLQkrK2diby0+a21hcF91c2VfY291bnQ7Cj4gLQly ZXR1cm4gdHRtX2ttYXBfb2JqX3ZpcnR1YWwoa21hcCwgJmlzX2lvbWVtKTsKPiArCSsrZ2JvLT52 bWFwX3VzZV9jb3VudDsKPiArCSptYXAgPSBnYm8tPm1hcDsKPiArCj4gKwlyZXR1cm4gMDsKPiAg IH0KPiAgIAo+IC1zdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fa3VubWFwX2xvY2tlZChzdHJ1Y3Qg ZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQo+ICtzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fa3Vu bWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvLAo+ICsJCQkJICAgICAg IHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKQo+ICAgewo+IC0JaWYgKFdBUk5fT05fT05DRSghZ2Jv LT5rbWFwX3VzZV9jb3VudCkpCj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZ2JvLT5iby5i YXNlLmRldjsKPiArCj4gKwlpZiAoZHJtX1dBUk5fT05fT05DRShkZXYsICFnYm8tPnZtYXBfdXNl X2NvdW50KSkKPiAgIAkJcmV0dXJuOwo+IC0JaWYgKC0tZ2JvLT5rbWFwX3VzZV9jb3VudCA+IDAp Cj4gKwo+ICsJaWYgKGRybV9XQVJOX09OX09OQ0UoZGV2LCAhZG1hX2J1Zl9tYXBfaXNfZXF1YWwo Jmdiby0+bWFwLCBtYXApKSkKPiArCQlyZXR1cm47IC8qIEJVRzogbWFwIG5vdCBtYXBwZWQgZnJv bSB0aGlzIEJPICovCj4gKwo+ICsJaWYgKC0tZ2JvLT52bWFwX3VzZV9jb3VudCA+IDApCj4gICAJ CXJldHVybjsKPiAgIAo+ICAgCS8qCj4gQEAgLTQxOCw3ICs0MjcsOSBAQCBzdGF0aWMgdm9pZCBk cm1fZ2VtX3ZyYW1fa3VubWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2Jv KQo+ICAgLyoqCj4gICAgKiBkcm1fZ2VtX3ZyYW1fdm1hcCgpIC0gUGlucyBhbmQgbWFwcyBhIEdF TSBWUkFNIG9iamVjdCBpbnRvIGtlcm5lbCBhZGRyZXNzCj4gICAgKiAgICAgICAgICAgICAgICAg ICAgICAgc3BhY2UKPiAtICogQGdibzoJVGhlIEdFTSBWUkFNIG9iamVjdCB0byBtYXAKPiArICog QGdibzogVGhlIEdFTSBWUkFNIG9iamVjdCB0byBtYXAKPiArICogQG1hcDogUmV0dXJucyB0aGUg a2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgVlJBTSBHRU0gb2JqZWN0J3MgYmFja2luZwo+ ICsgKiAgICAgICBzdG9yZS4KPiAgICAqCj4gICAgKiBUaGUgdm1hcCBmdW5jdGlvbiBwaW5zIGEg R0VNIFZSQU0gb2JqZWN0IHRvIGl0cyBjdXJyZW50IGxvY2F0aW9uLCBlaXRoZXIKPiAgICAqIHN5 c3RlbSBvciB2aWRlbyBtZW1vcnksIGFuZCBtYXBzIGl0cyBidWZmZXIgaW50byBrZXJuZWwgYWRk cmVzcyBzcGFjZS4KPiBAQCAtNDI3LDQ4ICs0MzgsNDQgQEAgc3RhdGljIHZvaWQgZHJtX2dlbV92 cmFtX2t1bm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibykKPiAgICAq IHVubWFwIGFuZCB1bnBpbiB0aGUgR0VNIFZSQU0gb2JqZWN0Lgo+ICAgICoKPiAgICAqIFJldHVy bnM6Cj4gLSAqIFRoZSBidWZmZXIncyB2aXJ0dWFsIGFkZHJlc3Mgb24gc3VjY2Vzcywgb3IKPiAt ICogYW4gRVJSX1BUUigpLWVuY29kZWQgZXJyb3IgY29kZSBvdGhlcndpc2UuCj4gKyAqIDAgb24g c3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiAgICAqLwo+IC12 b2lkICpkcm1fZ2VtX3ZyYW1fdm1hcChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQo+ ICtpbnQgZHJtX2dlbV92cmFtX3ZtYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywg c3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJaW50IHJldDsKPiAtCXZvaWQgKmJh c2U7Cj4gICAKPiAgIAlyZXQgPSB0dG1fYm9fcmVzZXJ2ZSgmZ2JvLT5ibywgdHJ1ZSwgZmFsc2Us IE5VTEwpOwo+ICAgCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCQlyZXR1 cm4gcmV0Owo+ICAgCj4gICAJcmV0ID0gZHJtX2dlbV92cmFtX3Bpbl9sb2NrZWQoZ2JvLCAwKTsK PiAgIAlpZiAocmV0KQo+ICAgCQlnb3RvIGVycl90dG1fYm9fdW5yZXNlcnZlOwo+IC0JYmFzZSA9 IGRybV9nZW1fdnJhbV9rbWFwX2xvY2tlZChnYm8pOwo+IC0JaWYgKElTX0VSUihiYXNlKSkgewo+ IC0JCXJldCA9IFBUUl9FUlIoYmFzZSk7Cj4gKwlyZXQgPSBkcm1fZ2VtX3ZyYW1fa21hcF9sb2Nr ZWQoZ2JvLCBtYXApOwo+ICsJaWYgKHJldCkKPiAgIAkJZ290byBlcnJfZHJtX2dlbV92cmFtX3Vu cGluX2xvY2tlZDsKPiAtCX0KPiAgIAo+ICAgCXR0bV9ib191bnJlc2VydmUoJmdiby0+Ym8pOwo+ ICAgCj4gLQlyZXR1cm4gYmFzZTsKPiArCXJldHVybiAwOwo+ICAgCj4gICBlcnJfZHJtX2dlbV92 cmFtX3VucGluX2xvY2tlZDoKPiAgIAlkcm1fZ2VtX3ZyYW1fdW5waW5fbG9ja2VkKGdibyk7Cj4g ICBlcnJfdHRtX2JvX3VucmVzZXJ2ZToKPiAgIAl0dG1fYm9fdW5yZXNlcnZlKCZnYm8tPmJvKTsK PiAtCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgRVhQT1JU X1NZTUJPTChkcm1fZ2VtX3ZyYW1fdm1hcCk7Cj4gICAKPiAgIC8qKgo+ICAgICogZHJtX2dlbV92 cmFtX3Z1bm1hcCgpIC0gVW5tYXBzIGFuZCB1bnBpbnMgYSBHRU0gVlJBTSBvYmplY3QKPiAtICog QGdibzoJVGhlIEdFTSBWUkFNIG9iamVjdCB0byB1bm1hcAo+IC0gKiBAdmFkZHI6CVRoZSBtYXBw aW5nJ3MgYmFzZSBhZGRyZXNzIGFzIHJldHVybmVkIGJ5IGRybV9nZW1fdnJhbV92bWFwKCkKPiAr ICogQGdibzogVGhlIEdFTSBWUkFNIG9iamVjdCB0byB1bm1hcAo+ICsgKiBAbWFwOiBLZXJuZWwg dmlydHVhbCBhZGRyZXNzIHdoZXJlIHRoZSBWUkFNIEdFTSBvYmplY3Qgd2FzIG1hcHBlZAo+ICAg ICoKPiAgICAqIEEgY2FsbCB0byBkcm1fZ2VtX3ZyYW1fdnVubWFwKCkgdW5tYXBzIGFuZCB1bnBp bnMgYSBHRU0gVlJBTSBidWZmZXIuIFNlZQo+ICAgICogdGhlIGRvY3VtZW50YXRpb24gZm9yIGRy bV9nZW1fdnJhbV92bWFwKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCj4gICAgKi8KPiAtdm9pZCBk cm1fZ2VtX3ZyYW1fdnVubWFwKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sIHZvaWQg KnZhZGRyKQo+ICt2b2lkIGRybV9nZW1fdnJhbV92dW5tYXAoc3RydWN0IGRybV9nZW1fdnJhbV9v YmplY3QgKmdibywgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJaW50IHJldDsK PiAgIAo+IEBAIC00NzYsNyArNDgzLDcgQEAgdm9pZCBkcm1fZ2VtX3ZyYW1fdnVubWFwKHN0cnVj dCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sIHZvaWQgKnZhZGRyKQo+ICAgCWlmIChXQVJOX09O Q0UocmV0LCAidHRtX2JvX3Jlc2VydmVfZmFpbGVkKCk6IHJldD0lZFxuIiwgcmV0KSkKPiAgIAkJ cmV0dXJuOwo+ICAgCj4gLQlkcm1fZ2VtX3ZyYW1fa3VubWFwX2xvY2tlZChnYm8pOwo+ICsJZHJt X2dlbV92cmFtX2t1bm1hcF9sb2NrZWQoZ2JvLCBtYXApOwo+ICAgCWRybV9nZW1fdnJhbV91bnBp bl9sb2NrZWQoZ2JvKTsKPiAgIAo+ICAgCXR0bV9ib191bnJlc2VydmUoJmdiby0+Ym8pOwo+IEBA IC01NjcsMTUgKzU3NCwxMyBAQCBzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fYm9fZHJpdmVyX21v dmVfbm90aWZ5KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sCj4gICAJCQkJCSAgICAg ICBib29sIGV2aWN0LAo+ICAgCQkJCQkgICAgICAgc3RydWN0IHR0bV9yZXNvdXJjZSAqbmV3X21l bSkKPiAgIHsKPiAtCXN0cnVjdCB0dG1fYm9fa21hcF9vYmogKmttYXAgPSAmZ2JvLT5rbWFwOwo+ ICsJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyA9ICZnYm8tPmJvOwo+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGJvLT5iYXNlLmRldjsKPiAgIAo+IC0JaWYgKFdBUk5fT05fT05DRShn Ym8tPmttYXBfdXNlX2NvdW50KSkKPiArCWlmIChkcm1fV0FSTl9PTl9PTkNFKGRldiwgZ2JvLT52 bWFwX3VzZV9jb3VudCkpCj4gICAJCXJldHVybjsKPiAgIAo+IC0JaWYgKCFrbWFwLT52aXJ0dWFs KQo+IC0JCXJldHVybjsKPiAtCXR0bV9ib19rdW5tYXAoa21hcCk7Cj4gLQlrbWFwLT52aXJ0dWFs ID0gTlVMTDsKPiArCXR0bV9ib192dW5tYXAoYm8sICZnYm8tPm1hcCk7Cj4gICB9Cj4gICAKPiAg IHN0YXRpYyBpbnQgZHJtX2dlbV92cmFtX2JvX2RyaXZlcl9tb3ZlKHN0cnVjdCBkcm1fZ2VtX3Zy YW1fb2JqZWN0ICpnYm8sCj4gQEAgLTgzMiwzNyArODM3LDMzIEBAIHN0YXRpYyB2b2lkIGRybV9n ZW1fdnJhbV9vYmplY3RfdW5waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW0pCj4gICB9Cj4g ICAKPiAgIC8qKgo+IC0gKiBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3ZtYXAoKSAtIFwKPiAtCUltcGxl bWVudHMgJnN0cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcy52bWFwCj4gLSAqIEBnZW06CVRoZSBH RU0gb2JqZWN0IHRvIG1hcAo+ICsgKiBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3ZtYXAoKSAtCj4gKyAq CUltcGxlbWVudHMgJnN0cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcy52bWFwCj4gKyAqIEBnZW06 IFRoZSBHRU0gb2JqZWN0IHRvIG1hcAo+ICsgKiBAbWFwOiBSZXR1cm5zIHRoZSBrZXJuZWwgdmly dHVhbCBhZGRyZXNzIG9mIHRoZSBWUkFNIEdFTSBvYmplY3QncyBiYWNraW5nCj4gKyAqICAgICAg IHN0b3JlLgo+ICAgICoKPiAgICAqIFJldHVybnM6Cj4gLSAqIFRoZSBidWZmZXJzIHZpcnR1YWwg YWRkcmVzcyBvbiBzdWNjZXNzLCBvcgo+IC0gKiBOVUxMIG90aGVyd2lzZS4KPiArICogMCBvbiBz dWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgo+ICAgICovCj4gLXN0 YXRpYyB2b2lkICpkcm1fZ2VtX3ZyYW1fb2JqZWN0X3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpnZW0pCj4gK3N0YXRpYyBpbnQgZHJtX2dlbV92cmFtX29iamVjdF92bWFwKHN0cnVjdCBkcm1f Z2VtX29iamVjdCAqZ2VtLCBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCkKPiAgIHsKPiAgIAlzdHJ1 Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvID0gZHJtX2dlbV92cmFtX29mX2dlbShnZW0pOwo+ IC0Jdm9pZCAqYmFzZTsKPiAgIAo+IC0JYmFzZSA9IGRybV9nZW1fdnJhbV92bWFwKGdibyk7Cj4g LQlpZiAoSVNfRVJSKGJhc2UpKQo+IC0JCXJldHVybiBOVUxMOwo+IC0JcmV0dXJuIGJhc2U7Cj4g KwlyZXR1cm4gZHJtX2dlbV92cmFtX3ZtYXAoZ2JvLCBtYXApOwo+ICAgfQo+ICAgCj4gICAvKioK PiAtICogZHJtX2dlbV92cmFtX29iamVjdF92dW5tYXAoKSAtIFwKPiAtCUltcGxlbWVudHMgJnN0 cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcy52dW5tYXAKPiAtICogQGdlbToJVGhlIEdFTSBvYmpl Y3QgdG8gdW5tYXAKPiAtICogQHZhZGRyOglUaGUgbWFwcGluZydzIGJhc2UgYWRkcmVzcwo+ICsg KiBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3Z1bm1hcCgpIC0KPiArICoJSW1wbGVtZW50cyAmc3RydWN0 IGRybV9nZW1fb2JqZWN0X2Z1bmNzLnZ1bm1hcAo+ICsgKiBAZ2VtOiBUaGUgR0VNIG9iamVjdCB0 byB1bm1hcAo+ICsgKiBAbWFwOiBLZXJuZWwgdmlydHVhbCBhZGRyZXNzIHdoZXJlIHRoZSBWUkFN IEdFTSBvYmplY3Qgd2FzIG1hcHBlZAo+ICAgICovCj4gLXN0YXRpYyB2b2lkIGRybV9nZW1fdnJh bV9vYmplY3RfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtLAo+IC0JCQkJICAgICAg IHZvaWQgKnZhZGRyKQo+ICtzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3Z1bm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbSwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7 Cj4gICAJc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibyA9IGRybV9nZW1fdnJhbV9vZl9n ZW0oZ2VtKTsKPiAgIAo+IC0JZHJtX2dlbV92cmFtX3Z1bm1hcChnYm8sIHZhZGRyKTsKPiArCWRy bV9nZW1fdnJhbV92dW5tYXAoZ2JvLCBtYXApOwo+ICAgfQo+ICAgCj4gICAvKgo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5oIGIvZHJpdmVycy9ncHUv ZHJtL2V0bmF2aXYvZXRuYXZpdl9kcnYuaAo+IGluZGV4IDk2ODJjMjZkODliYi4uZjViZTYyN2Ux ZGUwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZHJ2LmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5oCj4gQEAgLTUxLDcg KzUxLDcgQEAgaW50IGV0bmF2aXZfaW9jdGxfZ2VtX3N1Ym1pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB2b2lkICpkYXRhLAo+ICAgaW50IGV0bmF2aXZfZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZp bHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKPiAgIGludCBldG5hdml2X2dlbV9tbWFw X29mZnNldChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdTY0ICpvZmZzZXQpOwo+ICAgc3Ry dWN0IHNnX3RhYmxlICpldG5hdml2X2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmopOwo+IC12b2lkICpldG5hdml2X2dlbV9wcmltZV92bWFwKHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqKTsKPiAraW50IGV0bmF2aXZfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIGludCBl dG5hdml2X2dlbV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkJ ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpldG5hdml2X2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fcHJp bWUuYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3ByaW1lLmMKPiBpbmRl eCBhNmQ5OTMyYTMyYWUuLmJjMjU0M2RkOTg3ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vZXRuYXZpdi9ldG5hdml2X2dlbV9wcmltZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V0 bmF2aXYvZXRuYXZpdl9nZW1fcHJpbWUuYwo+IEBAIC0yMiw5ICsyMiwxNCBAQCBzdHJ1Y3Qgc2df dGFibGUgKmV0bmF2aXZfZ2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiAgIAlyZXR1cm4gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKG9iai0+ZGV2LCBldG5h dml2X29iai0+cGFnZXMsIG5wYWdlcyk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqZXRuYXZpdl9nZW1f cHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAraW50IGV0bmF2aXZfZ2Vt X3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21h cCAqbWFwKQo+ICAgewo+IC0JcmV0dXJuIGV0bmF2aXZfZ2VtX3ZtYXAob2JqKTsKPiArCXZvaWQg KnZhZGRyID0gZXRuYXZpdl9nZW1fdm1hcChvYmopOwo+ICsJaWYgKCF2YWRkcikKPiArCQlyZXR1 cm4gLUVOT01FTTsKPiArCWRtYV9idWZfbWFwX3NldF92YWRkcihtYXAsIHZhZGRyKTsKPiArCj4g KwlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+ICAgaW50IGV0bmF2aXZfZ2VtX3ByaW1lX21tYXAoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5jCj4gaW5kZXgg MTEyMjNmZTM0OGRmLi44MzJlNTI4MGE2ZWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2xpbWEvbGltYV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmMK PiBAQCAtMTgyLDE0ICsxODIsMTQgQEAgc3RhdGljIGludCBsaW1hX2dlbV9waW4oc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmopCj4gICAJcmV0dXJuIGRybV9nZW1fc2htZW1fcGluKG9iaik7Cj4g ICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgKmxpbWFfZ2VtX3ZtYXAoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmopCj4gK3N0YXRpYyBpbnQgbGltYV9nZW1fdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IGxpbWFf Ym8gKmJvID0gdG9fbGltYV9ibyhvYmopOwo+ICAgCj4gICAJaWYgKGJvLT5oZWFwX3NpemUpCj4g LQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gICAKPiAt CXJldHVybiBkcm1fZ2VtX3NobWVtX3ZtYXAob2JqKTsKPiArCXJldHVybiBkcm1fZ2VtX3NobWVt X3ZtYXAob2JqLCBtYXApOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW50IGxpbWFfZ2VtX21tYXAo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMgYi9kcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMKPiBpbmRleCBkYzZkZjllOWE0MGQuLmEwNzBhODVm OGYzNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMKPiBAQCAtMSw2ICsxLDcgQEAK PiAgIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAo+ICAgLyogQ29w eXJpZ2h0IDIwMTctMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KPiAgIAo+ICsj aW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9rdGhyZWFk Lmg+Cj4gICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3ZtYWxs b2MuaD4KPiBAQCAtMzAzLDYgKzMwNCw4IEBAIHN0YXRpYyB2b2lkIGxpbWFfc2NoZWRfYnVpbGRf ZXJyb3JfdGFza19saXN0KHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2spCj4gICAJc3RydWN0 IGxpbWFfZHVtcF9jaHVua19idWZmZXIgKmJ1ZmZlcl9jaHVuazsKPiAgIAl1MzIgc2l6ZSwgdGFz a19zaXplLCBtZW1fc2l6ZTsKPiAgIAlpbnQgaTsKPiArCXN0cnVjdCBkbWFfYnVmX21hcCBtYXA7 Cj4gKwlpbnQgcmV0Owo+ICAgCj4gICAJbXV0ZXhfbG9jaygmZGV2LT5lcnJvcl90YXNrX2xpc3Rf bG9jayk7Cj4gICAKPiBAQCAtMzg4LDE1ICszOTEsMTUgQEAgc3RhdGljIHZvaWQgbGltYV9zY2hl ZF9idWlsZF9lcnJvcl90YXNrX2xpc3Qoc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzaykKPiAg IAkJfSBlbHNlIHsKPiAgIAkJCWJ1ZmZlcl9jaHVuay0+c2l6ZSA9IGxpbWFfYm9fc2l6ZShibyk7 Cj4gICAKPiAtCQkJZGF0YSA9IGRybV9nZW1fc2htZW1fdm1hcCgmYm8tPmJhc2UuYmFzZSk7Cj4g LQkJCWlmIChJU19FUlJfT1JfTlVMTChkYXRhKSkgewo+ICsJCQlyZXQgPSBkcm1fZ2VtX3NobWVt X3ZtYXAoJmJvLT5iYXNlLmJhc2UsICZtYXApOwo+ICsJCQlpZiAocmV0KSB7Cj4gICAJCQkJa3Zm cmVlKGV0KTsKPiAgIAkJCQlnb3RvIG91dDsKPiAgIAkJCX0KPiAgIAo+IC0JCQltZW1jcHkoYnVm ZmVyX2NodW5rICsgMSwgZGF0YSwgYnVmZmVyX2NodW5rLT5zaXplKTsKPiArCQkJbWVtY3B5KGJ1 ZmZlcl9jaHVuayArIDEsIG1hcC52YWRkciwgYnVmZmVyX2NodW5rLT5zaXplKTsKPiAgIAo+IC0J CQlkcm1fZ2VtX3NobWVtX3Z1bm1hcCgmYm8tPmJhc2UuYmFzZSwgZGF0YSk7Cj4gKwkJCWRybV9n ZW1fc2htZW1fdnVubWFwKCZiby0+YmFzZS5iYXNlLCAmbWFwKTsKPiAgIAkJfQo+ICAgCj4gICAJ CWJ1ZmZlcl9jaHVuayA9ICh2b2lkICopKGJ1ZmZlcl9jaHVuayArIDEpICsgYnVmZmVyX2NodW5r LT5zaXplOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX21v ZGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2FnMjAwL21nYWcyMDBfbW9kZS5jCj4gaW5kZXggMzg2 NzJmOWU1YzRmLi44ZWY3Njc2OWI5N2YgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21n YWcyMDAvbWdhZzIwMF9tb2RlLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2Fn MjAwX21vZGUuYwo+IEBAIC05LDYgKzksNyBAQAo+ICAgICovCj4gICAKPiAgICNpbmNsdWRlIDxs aW51eC9kZWxheS5oPgo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiAgIAo+ICAg I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICAgI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljX3N0YXRlX2hlbHBlci5oPgo+IEBAIC0xNTU2LDE1ICsxNTU3LDE4IEBAIG1nYWcyMDBf aGFuZGxlX2RhbWFnZShzdHJ1Y3QgbWdhX2RldmljZSAqbWRldiwgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsCj4gICAJCSAgICAgIHN0cnVjdCBkcm1fcmVjdCAqY2xpcCkKPiAgIHsKPiAgIAlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJm1kZXYtPmJhc2U7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9t YXAgbWFwOwo+ICAgCXZvaWQgKnZtYXA7Cj4gKwlpbnQgcmV0Owo+ICAgCj4gLQl2bWFwID0gZHJt X2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0pOwo+IC0JaWYgKGRybV9XQVJOX09OKGRldiwgIXZt YXApKQo+ICsJcmV0ID0gZHJtX2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0sICZtYXApOwo+ICsJ aWYgKGRybV9XQVJOX09OKGRldiwgcmV0KSkKPiAgIAkJcmV0dXJuOyAvKiBCVUc6IFNITUVNIEJP IHNob3VsZCBhbHdheXMgYmUgdm1hcHBlZCAqLwo+ICsJdm1hcCA9IG1hcC52YWRkcjsgLyogVE9E TzogVXNlIG1hcHBpbmcgYWJzdHJhY3Rpb24gcHJvcGVybHkgKi8KPiAgIAo+ICAgCWRybV9mYl9t ZW1jcHlfZHN0Y2xpcChtZGV2LT52cmFtLCB2bWFwLCBmYiwgY2xpcCk7Cj4gICAKPiAtCWRybV9n ZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sIHZtYXApOwo+ICsJZHJtX2dlbV9zaG1lbV92dW5t YXAoZmItPm9ialswXSwgJm1hcCk7Cj4gICAKPiAgIAkvKiBBbHdheXMgc2Nhbm91dCBpbWFnZSBh dCBWUkFNIG9mZnNldCAwICovCj4gICAJbWdhZzIwMF9zZXRfc3RhcnRhZGQobWRldiwgKHUzMikw KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZyBiL2RyaXZl cnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWcKPiBpbmRleCA1ZGVjMWU1Njk0YjcuLjk0MzYzMTBk MDg1NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZwo+IEBAIC02LDYgKzYsNyBAQCBjb25m aWcgRFJNX05PVVZFQVUKPiAgIAlzZWxlY3QgRldfTE9BREVSCj4gICAJc2VsZWN0IERSTV9LTVNf SEVMUEVSCj4gICAJc2VsZWN0IERSTV9UVE0KPiArCXNlbGVjdCBEUk1fVFRNX0hFTFBFUgo+ICAg CXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFIGlmIERSTV9OT1VWRUFVX0JBQ0tMSUdIVAo+ ICAgCXNlbGVjdCBBQ1BJX1ZJREVPIGlmIEFDUEkgJiYgWDg2ICYmIEJBQ0tMSUdIVF9DTEFTU19E RVZJQ0UgJiYgSU5QVVQKPiAgIAlzZWxlY3QgWDg2X1BMQVRGT1JNX0RFVklDRVMgaWYgQUNQSSAm JiBYODYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5o IGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5oCj4gaW5kZXggNjQxZWY2Mjk4 YTBlLi42MDQ1Yjg1YTc2MmEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUv bm91dmVhdV9iby5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5o Cj4gQEAgLTM5LDggKzM5LDYgQEAgc3RydWN0IG5vdXZlYXVfYm8gewo+ICAgCXVuc2lnbmVkIG1v ZGU7Cj4gICAKPiAgIAlzdHJ1Y3Qgbm91dmVhdV9kcm1fdGlsZSAqdGlsZTsKPiAtCj4gLQlzdHJ1 Y3QgdHRtX2JvX2ttYXBfb2JqIGRtYV9idWZfdm1hcDsKPiAgIH07Cj4gICAKPiAgIHN0YXRpYyBp bmxpbmUgc3RydWN0IG5vdXZlYXVfYm8gKgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bm91dmVhdS9ub3V2ZWF1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9n ZW0uYwo+IGluZGV4IDlhNDIxYzM5NDlkZS4uZjk0MmI1MjZiMGE1IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCj4gQEAgLTI0LDYgKzI0LDggQEAKPiAgICAqCj4gICAg Ki8KPiAgIAo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdHRtX2hlbHBlci5oPgo+ICsKPiAgICNp bmNsdWRlICJub3V2ZWF1X2Rydi5oIgo+ICAgI2luY2x1ZGUgIm5vdXZlYXVfZG1hLmgiCj4gICAj aW5jbHVkZSAibm91dmVhdV9mZW5jZS5oIgo+IEBAIC0xNzYsOCArMTc4LDggQEAgY29uc3Qgc3Ry dWN0IGRybV9nZW1fb2JqZWN0X2Z1bmNzIG5vdXZlYXVfZ2VtX29iamVjdF9mdW5jcyA9IHsKPiAg IAkucGluID0gbm91dmVhdV9nZW1fcHJpbWVfcGluLAo+ICAgCS51bnBpbiA9IG5vdXZlYXVfZ2Vt X3ByaW1lX3VucGluLAo+ICAgCS5nZXRfc2dfdGFibGUgPSBub3V2ZWF1X2dlbV9wcmltZV9nZXRf c2dfdGFibGUsCj4gLQkudm1hcCA9IG5vdXZlYXVfZ2VtX3ByaW1lX3ZtYXAsCj4gLQkudnVubWFw ID0gbm91dmVhdV9nZW1fcHJpbWVfdnVubWFwLAo+ICsJLnZtYXAgPSBkcm1fZ2VtX3R0bV92bWFw LAo+ICsJLnZ1bm1hcCA9IGRybV9nZW1fdHRtX3Z1bm1hcCwKPiAgIH07Cj4gICAKPiAgIGludAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5oIGIvZHJp dmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uaAo+IGluZGV4IGIzNWMxODAzMjJlMi4u M2I5MTljN2M5MzFjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZl YXVfZ2VtLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5oCj4g QEAgLTM3LDcgKzM3LDUgQEAgZXh0ZXJuIHZvaWQgbm91dmVhdV9nZW1fcHJpbWVfdW5waW4oc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICopOwo+ICAgZXh0ZXJuIHN0cnVjdCBzZ190YWJsZSAqbm91dmVh dV9nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKTsKPiAgIGV4 dGVybiBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm5vdXZlYXVfZ2VtX3ByaW1lX2ltcG9ydF9zZ190 YWJsZSgKPiAgIAlzdHJ1Y3QgZHJtX2RldmljZSAqLCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50 ICosIHN0cnVjdCBzZ190YWJsZSAqKTsKPiAtZXh0ZXJuIHZvaWQgKm5vdXZlYXVfZ2VtX3ByaW1l X3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICopOwo+IC1leHRlcm4gdm9pZCBub3V2ZWF1X2dl bV9wcmltZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICosIHZvaWQgKik7Cj4gICAKPiAg ICNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3By aW1lLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ByaW1lLmMKPiBpbmRleCBh ODI2NGFlYmYzZDQuLjJmMTZiNTI0OTI4MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v bm91dmVhdS9ub3V2ZWF1X3ByaW1lLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9u b3V2ZWF1X3ByaW1lLmMKPiBAQCAtMzUsMjYgKzM1LDYgQEAgc3RydWN0IHNnX3RhYmxlICpub3V2 ZWF1X2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4g ICAJcmV0dXJuIGRybV9wcmltZV9wYWdlc190b19zZyhvYmotPmRldiwgbnZiby0+Ym8udHRtLT5w YWdlcywgbnBhZ2VzKTsKPiAgIH0KPiAgIAo+IC12b2lkICpub3V2ZWF1X2dlbV9wcmltZV92bWFw KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+IC17Cj4gLQlzdHJ1Y3Qgbm91dmVhdV9ibyAq bnZibyA9IG5vdXZlYXVfZ2VtX29iamVjdChvYmopOwo+IC0JaW50IHJldDsKPiAtCj4gLQlyZXQg PSB0dG1fYm9fa21hcCgmbnZiby0+Ym8sIDAsIG52Ym8tPmJvLm51bV9wYWdlcywKPiAtCQkJICAm bnZiby0+ZG1hX2J1Zl92bWFwKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0 KTsKPiAtCj4gLQlyZXR1cm4gbnZiby0+ZG1hX2J1Zl92bWFwLnZpcnR1YWw7Cj4gLX0KPiAtCj4g LXZvaWQgbm91dmVhdV9nZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LCB2b2lkICp2YWRkcikKPiAtewo+IC0Jc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8gPSBub3V2ZWF1 X2dlbV9vYmplY3Qob2JqKTsKPiAtCj4gLQl0dG1fYm9fa3VubWFwKCZudmJvLT5kbWFfYnVmX3Zt YXApOwo+IC19Cj4gLQo+ICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpub3V2ZWF1X2dlbV9wcmlt ZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJCQkJCQkgc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+ICAgCQkJCQkJCSBzdHJ1Y3Qgc2dfdGFi bGUgKnNnKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rf cGVyZmNudC5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X3BlcmZjbnQuYwo+ IGluZGV4IGZkYmM4ZDk0OTEzNS4uNWFiMDNkNjA1ZjU3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9wZXJmY250LmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vcGFuZnJvc3QvcGFuZnJvc3RfcGVyZmNudC5jCj4gQEAgLTUsNiArNSw3IEBACj4gICAjaW5j bHVkZSA8ZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmg+Cj4gICAjaW5jbHVkZSA8ZHJtL3BhbmZy b3N0X2RybS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KPiArI2luY2x1ZGUg PGxpbnV4L2RtYS1idWYtbWFwLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Cj4gICAj aW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K PiBAQCAtNzIsNiArNzMsNyBAQCBzdGF0aWMgaW50IHBhbmZyb3N0X3BlcmZjbnRfZW5hYmxlX2xv Y2tlZChzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiwKPiAgIHsKPiAgIAlzdHJ1Y3QgcGFu ZnJvc3RfZmlsZV9wcml2ICp1c2VyID0gZmlsZV9wcml2LT5kcml2ZXJfcHJpdjsKPiAgIAlzdHJ1 Y3QgcGFuZnJvc3RfcGVyZmNudCAqcGVyZmNudCA9IHBmZGV2LT5wZXJmY250Owo+ICsJc3RydWN0 IGRtYV9idWZfbWFwIG1hcDsKPiAgIAlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKmJvOwo+ ICAgCXUzMiBjZmcsIGFzOwo+ICAgCWludCByZXQ7Cj4gQEAgLTEwMywxMSArMTA1LDEwIEBAIHN0 YXRpYyBpbnQgcGFuZnJvc3RfcGVyZmNudF9lbmFibGVfbG9ja2VkKHN0cnVjdCBwYW5mcm9zdF9k ZXZpY2UgKnBmZGV2LAo+ICAgCQlnb3RvIGVycl9jbG9zZV9ibzsKPiAgIAl9Cj4gICAKPiAtCXBl cmZjbnQtPmJ1ZiA9IGRybV9nZW1fc2htZW1fdm1hcCgmYm8tPmJhc2UpOwo+IC0JaWYgKElTX0VS UihwZXJmY250LT5idWYpKSB7Cj4gLQkJcmV0ID0gUFRSX0VSUihwZXJmY250LT5idWYpOwo+ICsJ cmV0ID0gZHJtX2dlbV9zaG1lbV92bWFwKCZiby0+YmFzZSwgJm1hcCk7Cj4gKwlpZiAocmV0KQo+ ICAgCQlnb3RvIGVycl9wdXRfbWFwcGluZzsKPiAtCX0KPiArCXBlcmZjbnQtPmJ1ZiA9IG1hcC52 YWRkcjsKPiAgIAo+ICAgCS8qCj4gICAJICogSW52YWxpZGF0ZSB0aGUgY2FjaGUgYW5kIGNsZWFy IHRoZSBjb3VudGVycyB0byBzdGFydCBmcm9tIGEgZnJlc2gKPiBAQCAtMTYzLDcgKzE2NCw3IEBA IHN0YXRpYyBpbnQgcGFuZnJvc3RfcGVyZmNudF9lbmFibGVfbG9ja2VkKHN0cnVjdCBwYW5mcm9z dF9kZXZpY2UgKnBmZGV2LAo+ICAgCXJldHVybiAwOwo+ICAgCj4gICBlcnJfdnVubWFwOgo+IC0J ZHJtX2dlbV9zaG1lbV92dW5tYXAoJmJvLT5iYXNlLCBwZXJmY250LT5idWYpOwo+ICsJZHJtX2dl bV9zaG1lbV92dW5tYXAoJmJvLT5iYXNlLCAmbWFwKTsKPiAgIGVycl9wdXRfbWFwcGluZzoKPiAg IAlwYW5mcm9zdF9nZW1fbWFwcGluZ19wdXQocGVyZmNudC0+bWFwcGluZyk7Cj4gICBlcnJfY2xv c2VfYm86Cj4gQEAgLTE4MCw2ICsxODEsNyBAQCBzdGF0aWMgaW50IHBhbmZyb3N0X3BlcmZjbnRf ZGlzYWJsZV9sb2NrZWQoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYsCj4gICB7Cj4gICAJ c3RydWN0IHBhbmZyb3N0X2ZpbGVfcHJpdiAqdXNlciA9IGZpbGVfcHJpdi0+ZHJpdmVyX3ByaXY7 Cj4gICAJc3RydWN0IHBhbmZyb3N0X3BlcmZjbnQgKnBlcmZjbnQgPSBwZmRldi0+cGVyZmNudDsK PiArCXN0cnVjdCBkbWFfYnVmX21hcCBtYXAgPSBETUFfQlVGX01BUF9JTklUX1ZBRERSKHBlcmZj bnQtPmJ1Zik7Cj4gICAKPiAgIAlpZiAodXNlciAhPSBwZXJmY250LT51c2VyKQo+ICAgCQlyZXR1 cm4gLUVJTlZBTDsKPiBAQCAtMTkyLDcgKzE5NCw3IEBAIHN0YXRpYyBpbnQgcGFuZnJvc3RfcGVy ZmNudF9kaXNhYmxlX2xvY2tlZChzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiwKPiAgIAkJ ICBHUFVfUEVSRkNOVF9DRkdfTU9ERShHUFVfUEVSRkNOVF9DRkdfTU9ERV9PRkYpKTsKPiAgIAo+ ICAgCXBlcmZjbnQtPnVzZXIgPSBOVUxMOwo+IC0JZHJtX2dlbV9zaG1lbV92dW5tYXAoJnBlcmZj bnQtPm1hcHBpbmctPm9iai0+YmFzZS5iYXNlLCBwZXJmY250LT5idWYpOwo+ICsJZHJtX2dlbV9z aG1lbV92dW5tYXAoJnBlcmZjbnQtPm1hcHBpbmctPm9iai0+YmFzZS5iYXNlLCAmbWFwKTsKPiAg IAlwZXJmY250LT5idWYgPSBOVUxMOwo+ICAgCXBhbmZyb3N0X2dlbV9jbG9zZSgmcGVyZmNudC0+ bWFwcGluZy0+b2JqLT5iYXNlLmJhc2UsIGZpbGVfcHJpdik7Cj4gICAJcGFuZnJvc3RfbW11X2Fz X3B1dChwZmRldiwgcGVyZmNudC0+bWFwcGluZy0+bW11KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3F4bC9xeGxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZGlz cGxheS5jCj4gaW5kZXggNDVmZDc2ZTA0YmRjLi5lMTY1ZmE5YjIwODkgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZGlzcGxheS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfZGlzcGxheS5jCj4gQEAgLTI1LDYgKzI1LDcgQEAKPiAgIAo+ICAgI2luY2x1ZGUg PGxpbnV4L2NyYzMyLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2RtYS1idWYtbWFwLmg+Cj4gICAKPiAgICNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgo+ ICAgI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gQEAgLTU4MSw2ICs1ODIsOCBAQCBzdGF0 aWMgdm9pZCBxeGxfY3Vyc29yX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs Cj4gICAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gICAJc3RydWN0IHF4bF9ibyAqY3Vy c29yX2JvID0gTlVMTCwgKnVzZXJfYm8gPSBOVUxMLCAqb2xkX2N1cnNvcl9ibyA9IE5VTEw7Cj4g ICAJaW50IHJldDsKPiArCXN0cnVjdCBkbWFfYnVmX21hcCB1c2VyX21hcDsKPiArCXN0cnVjdCBk bWFfYnVmX21hcCBjdXJzb3JfbWFwOwo+ICAgCXZvaWQgKnVzZXJfcHRyOwo+ICAgCWludCBzaXpl ID0gNjQqNjQqNDsKPiAgIAo+IEBAIC01OTUsOSArNTk4LDEwIEBAIHN0YXRpYyB2b2lkIHF4bF9j dXJzb3JfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgIAkJdXNlcl9i byA9IGdlbV90b19xeGxfYm8ob2JqKTsKPiAgIAo+ICAgCQkvKiBwaW5uaW5nIGlzIGRvbmUgaW4g dGhlIHByZXBhcmUvY2xlYW51cCBmcmFtZXZidWZmZXIgKi8KPiAtCQlyZXQgPSBxeGxfYm9fa21h cCh1c2VyX2JvLCAmdXNlcl9wdHIpOwo+ICsJCXJldCA9IHF4bF9ib19rbWFwKHVzZXJfYm8sICZ1 c2VyX21hcCk7Cj4gICAJCWlmIChyZXQpCj4gICAJCQlnb3RvIG91dF9mcmVlX3JlbGVhc2U7Cj4g KwkJdXNlcl9wdHIgPSB1c2VyX21hcC52YWRkcjsgLyogVE9ETzogVXNlIG1hcHBpbmcgYWJzdHJh Y3Rpb24gcHJvcGVybHkgKi8KPiAgIAo+ICAgCQlyZXQgPSBxeGxfYWxsb2NfYm9fcmVzZXJ2ZWQo cWRldiwgcmVsZWFzZSwKPiAgIAkJCQkJICAgIHNpemVvZihzdHJ1Y3QgcXhsX2N1cnNvcikgKyBz aXplLAo+IEBAIC02MTMsNyArNjE3LDcgQEAgc3RhdGljIHZvaWQgcXhsX2N1cnNvcl9hdG9taWNf dXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCQlpZiAocmV0KQo+ICAgCQkJZ290 byBvdXRfdW5waW47Cj4gICAKPiAtCQlyZXQgPSBxeGxfYm9fa21hcChjdXJzb3JfYm8sICh2b2lk ICoqKSZjdXJzb3IpOwo+ICsJCXJldCA9IHF4bF9ib19rbWFwKGN1cnNvcl9ibywgJmN1cnNvcl9t YXApOwo+ICAgCQlpZiAocmV0KQo+ICAgCQkJZ290byBvdXRfYmFja29mZjsKPiAgIAo+IEBAIC0x MTMzLDYgKzExMzcsNyBAQCBpbnQgcXhsX2NyZWF0ZV9tb25pdG9yc19vYmplY3Qoc3RydWN0IHF4 bF9kZXZpY2UgKnFkZXYpCj4gICB7Cj4gICAJaW50IHJldDsKPiAgIAlzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKmdvYmo7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICAgCWludCBtb25pdG9y c19jb25maWdfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcXhsX21vbml0b3JzX2NvbmZpZykgKwo+ICAg CQlxeGxfbnVtX2NydGMgKiBzaXplb2Yoc3RydWN0IHF4bF9oZWFkKTsKPiAgIAo+IEBAIC0xMTQ5 LDcgKzExNTQsNyBAQCBpbnQgcXhsX2NyZWF0ZV9tb25pdG9yc19vYmplY3Qoc3RydWN0IHF4bF9k ZXZpY2UgKnFkZXYpCj4gICAJaWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPiAgIAo+IC0JcXhs X2JvX2ttYXAocWRldi0+bW9uaXRvcnNfY29uZmlnX2JvLCBOVUxMKTsKPiArCXF4bF9ib19rbWFw KHFkZXYtPm1vbml0b3JzX2NvbmZpZ19ibywgJm1hcCk7Cj4gICAKPiAgIAlxZGV2LT5tb25pdG9y c19jb25maWcgPSBxZGV2LT5tb25pdG9yc19jb25maWdfYm8tPmtwdHI7Cj4gICAJcWRldi0+cmFt X2hlYWRlci0+bW9uaXRvcnNfY29uZmlnID0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfZHJhdy5jIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJhdy5jCj4gaW5kZXgg MzU5OWRiMDk2OTczLi43YjdhY2I5MTA3ODAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfZHJhdy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJhdy5jCj4g QEAgLTIwLDYgKzIwLDggQEAKPiAgICAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gICAgKi8KPiAgIAo+ ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiArCj4gICAjaW5jbHVkZSA8ZHJtL2Ry bV9mb3VyY2MuaD4KPiAgIAo+ICAgI2luY2x1ZGUgInF4bF9kcnYuaCIKPiBAQCAtNDIsMTMgKzQ0 LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcXhsX3JlY3QgKmRyYXdhYmxlX3NldF9jbGlwcGluZyhzdHJ1 Y3QgcXhsX2RldmljZSAqcWRldiwKPiAgIAkJCQkJICAgICAgdW5zaWduZWQgaW50IG51bV9jbGlw cywKPiAgIAkJCQkJICAgICAgc3RydWN0IHF4bF9ibyAqY2xpcHNfYm8pCj4gICB7Cj4gKwlzdHJ1 Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICAgCXN0cnVjdCBxeGxfY2xpcF9yZWN0cyAqZGV2X2NsaXBz Owo+ICAgCWludCByZXQ7Cj4gICAKPiAtCXJldCA9IHF4bF9ib19rbWFwKGNsaXBzX2JvLCAodm9p ZCAqKikmZGV2X2NsaXBzKTsKPiAtCWlmIChyZXQpIHsKPiArCXJldCA9IHF4bF9ib19rbWFwKGNs aXBzX2JvLCAmbWFwKTsKPiArCWlmIChyZXQpCj4gICAJCXJldHVybiBOVUxMOwo+IC0JfQo+ICsJ ZGV2X2NsaXBzID0gbWFwLnZhZGRyOyAvKiBUT0RPOiBVc2UgbWFwcGluZyBhYnN0cmFjdGlvbiBw cm9wZXJseSAqLwo+ICsKPiAgIAlkZXZfY2xpcHMtPm51bV9yZWN0cyA9IG51bV9jbGlwczsKPiAg IAlkZXZfY2xpcHMtPmNodW5rLm5leHRfY2h1bmsgPSAwOwo+ICAgCWRldl9jbGlwcy0+Y2h1bmsu cHJldl9jaHVuayA9IDA7Cj4gQEAgLTE0Miw2ICsxNDYsNyBAQCB2b2lkIHF4bF9kcmF3X2RpcnR5 X2ZiKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAo+ICAgCWludCBzdHJpZGUgPSBmYi0+cGl0Y2hl c1swXTsKPiAgIAkvKiBkZXB0aCBpcyBub3QgYWN0dWFsbHkgaW50ZXJlc3RpbmcsIHdlIGRvbid0 IG1hc2sgd2l0aCBpdCAqLwo+ICAgCWludCBkZXB0aCA9IGZiLT5mb3JtYXQtPmNwcFswXSAqIDg7 Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgc3VyZmFjZV9tYXA7Cj4gICAJdWludDhfdCAqc3VyZmFj ZV9iYXNlOwo+ICAgCXN0cnVjdCBxeGxfcmVsZWFzZSAqcmVsZWFzZTsKPiAgIAlzdHJ1Y3QgcXhs X2JvICpjbGlwc19ibzsKPiBAQCAtMTk3LDkgKzIwMiwxMCBAQCB2b2lkIHF4bF9kcmF3X2RpcnR5 X2ZiKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAo+ICAgCWlmIChyZXQpCj4gICAJCWdvdG8gb3V0 X3JlbGVhc2VfYmFja29mZjsKPiAgIAo+IC0JcmV0ID0gcXhsX2JvX2ttYXAoYm8sICh2b2lkICoq KSZzdXJmYWNlX2Jhc2UpOwo+ICsJcmV0ID0gcXhsX2JvX2ttYXAoYm8sICZzdXJmYWNlX21hcCk7 Cj4gICAJaWYgKHJldCkKPiAgIAkJZ290byBvdXRfcmVsZWFzZV9iYWNrb2ZmOwo+ICsJc3VyZmFj ZV9iYXNlID0gc3VyZmFjZV9tYXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0 aW9uIHByb3Blcmx5ICovCj4gICAKPiAgIAlyZXQgPSBxeGxfaW1hZ2VfaW5pdChxZGV2LCByZWxl YXNlLCBkaW1hZ2UsIHN1cmZhY2VfYmFzZSwKPiAgIAkJCSAgICAgbGVmdCAtIGR1bWJfc2hhZG93 X29mZnNldCwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJ2LmggYi9k cml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kcnYuaAo+IGluZGV4IDM2MDJlOGIzNDE4OS4uZWI0Mzdm ZWE1ZDllIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX2Rydi5oCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJ2LmgKPiBAQCAtMzAsNiArMzAsNyBAQAo+ICAg ICogRGVmaW5pdGlvbnMgdGFrZW4gZnJvbSBzcGljZS1wcm90b2NvbCwgcGx1cyBrZXJuZWwgZHJp dmVyIHNwZWNpZmljIGJpdHMuCj4gICAgKi8KPiAgIAo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1 Zi1tYXAuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UuaD4KPiAgICNpbmNsdWRlIDxs aW51eC9maXJtd2FyZS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ IEBAIC01MCw2ICs1MSw4IEBACj4gICAKPiAgICNpbmNsdWRlICJxeGxfZGV2LmgiCj4gICAKPiAr c3RydWN0IGRtYV9idWZfbWFwOwo+ICsKPiAgICNkZWZpbmUgRFJJVkVSX0FVVEhPUgkJIkRhdmUg QWlybGllIgo+ICAgCj4gICAjZGVmaW5lIERSSVZFUl9OQU1FCQkicXhsIgo+IEBAIC03OSw3ICs4 Miw3IEBAIHN0cnVjdCBxeGxfYm8gewo+ICAgCS8qIFByb3RlY3RlZCBieSB0Ym8ucmVzZXJ2ZWQg Ki8KPiAgIAlzdHJ1Y3QgdHRtX3BsYWNlCQlwbGFjZW1lbnRzWzNdOwo+ICAgCXN0cnVjdCB0dG1f cGxhY2VtZW50CQlwbGFjZW1lbnQ7Cj4gLQlzdHJ1Y3QgdHRtX2JvX2ttYXBfb2JqCQlrbWFwOwo+ ICsJc3RydWN0IGRtYV9idWZfbWFwCQltYXA7Cj4gICAJdm9pZAkJCQkqa3B0cjsKPiAgIAl1bnNp Z25lZCBpbnQgICAgICAgICAgICAgICAgICAgIG1hcF9jb3VudDsKPiAgIAlpbnQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHR5cGU7Cj4gQEAgLTMzNSw3ICszMzgsNiBAQCBpbnQgcXhsX2dl bV9vYmplY3Rfb3BlbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYpOwo+ICAgdm9pZCBxeGxfZ2VtX29iamVjdF9jbG9zZShzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiwKPiAgIAkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwo+ICAg dm9pZCBxeGxfYm9fZm9yY2VfZGVsZXRlKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2KTsKPiAtaW50 IHF4bF9ib19rbWFwKHN0cnVjdCBxeGxfYm8gKmJvLCB2b2lkICoqcHRyKTsKPiAgIAo+ICAgLyog cXhsX2R1bWIuYyAqLwo+ICAgaW50IHF4bF9tb2RlX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2LAo+IEBAIC00NDUsOCArNDQ3LDkgQEAgc3RydWN0IHNnX3RhYmxlICpxeGxf Z2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gICBz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnF4bF9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKAo+ICAg CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFj aCwKPiAgIAlzdHJ1Y3Qgc2dfdGFibGUgKnNndCk7Cj4gLXZvaWQgKnF4bF9nZW1fcHJpbWVfdm1h cChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gLXZvaWQgcXhsX2dlbV9wcmltZV92dW5t YXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHZvaWQgKnZhZGRyKTsKPiAraW50IHF4bF9n ZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZf bWFwICptYXApOwo+ICt2b2lkIHF4bF9nZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqLAo+ICsJCQkgIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIGludCBxeGxf Z2VtX3ByaW1lX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCj4gICAJCQkJc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9xeGwvcXhsX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfb2JqZWN0LmMKPiBp bmRleCA5NDBlOTkzNTRmNDkuLjc1NWRmNGQ4Zjk1ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vcXhsL3F4bF9vYmplY3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX29i amVjdC5jCj4gQEAgLTIzLDEwICsyMywxMiBAQAo+ICAgICogICAgICAgICAgQWxvbiBMZXZ5Cj4g ICAgKi8KPiAgIAo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2lvLW1hcHBpbmcuaD4KPiArCj4gICAjaW5jbHVkZSAicXhsX2Rydi5oIgo+ICAgI2lu Y2x1ZGUgInF4bF9vYmplY3QuaCIKPiAgIAo+IC0jaW5jbHVkZSA8bGludXgvaW8tbWFwcGluZy5o Pgo+ICAgc3RhdGljIHZvaWQgcXhsX3R0bV9ib19kZXN0cm95KHN0cnVjdCB0dG1fYnVmZmVyX29i amVjdCAqdGJvKQo+ICAgewo+ICAgCXN0cnVjdCBxeGxfYm8gKmJvOwo+IEBAIC0xNTIsMjQgKzE1 NCwyNyBAQCBpbnQgcXhsX2JvX2NyZWF0ZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKPiAgIAly ZXR1cm4gMDsKPiAgIH0KPiAgIAo+IC1pbnQgcXhsX2JvX2ttYXAoc3RydWN0IHF4bF9ibyAqYm8s IHZvaWQgKipwdHIpCj4gK2ludCBxeGxfYm9fa21hcChzdHJ1Y3QgcXhsX2JvICpibywgc3RydWN0 IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gLQlib29sIGlzX2lvbWVtOwo+ICAgCWludCByOwo+ ICAgCj4gICAJaWYgKGJvLT5rcHRyKSB7Cj4gLQkJaWYgKHB0cikKPiAtCQkJKnB0ciA9IGJvLT5r cHRyOwo+ICAgCQliby0+bWFwX2NvdW50Kys7Cj4gLQkJcmV0dXJuIDA7Cj4gKwkJZ290byBvdXQ7 Cj4gICAJfQo+IC0JciA9IHR0bV9ib19rbWFwKCZiby0+dGJvLCAwLCBiby0+dGJvLm51bV9wYWdl cywgJmJvLT5rbWFwKTsKPiArCXIgPSB0dG1fYm9fdm1hcCgmYm8tPnRibywgJmJvLT5tYXApOwo+ ICAgCWlmIChyKQo+ICAgCQlyZXR1cm4gcjsKPiAtCWJvLT5rcHRyID0gdHRtX2ttYXBfb2JqX3Zp cnR1YWwoJmJvLT5rbWFwLCAmaXNfaW9tZW0pOwo+IC0JaWYgKHB0cikKPiAtCQkqcHRyID0gYm8t PmtwdHI7Cj4gICAJYm8tPm1hcF9jb3VudCA9IDE7Cj4gKwo+ICsJLyogVE9ETzogUmVtb3ZlIGtw dHIgaW4gZmF2b3Igb2YgbWFwIGV2ZXJ5d2hlcmUuICovCj4gKwlpZiAoYm8tPm1hcC5pc19pb21l bSkKPiArCQliby0+a3B0ciA9ICh2b2lkICopYm8tPm1hcC52YWRkcl9pb21lbTsKPiArCWVsc2UK PiArCQliby0+a3B0ciA9IGJvLT5tYXAudmFkZHI7Cj4gKwo+ICtvdXQ6Cj4gKwkqbWFwID0gYm8t Pm1hcDsKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IEBAIC0xODAsNiArMTg1LDcgQEAgdm9p ZCAqcXhsX2JvX2ttYXBfYXRvbWljX3BhZ2Uoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsCj4gICAJ dm9pZCAqcnB0cjsKPiAgIAlpbnQgcmV0Owo+ICAgCXN0cnVjdCBpb19tYXBwaW5nICptYXA7Cj4g KwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgYm9fbWFwOwo+ICAgCj4gICAJaWYgKGJvLT50Ym8ubWVtLm1l bV90eXBlID09IFRUTV9QTF9WUkFNKQo+ICAgCQltYXAgPSBxZGV2LT52cmFtX21hcHBpbmc7Cj4g QEAgLTE5Niw5ICsyMDIsMTAgQEAgdm9pZCAqcXhsX2JvX2ttYXBfYXRvbWljX3BhZ2Uoc3RydWN0 IHF4bF9kZXZpY2UgKnFkZXYsCj4gICAJCXJldHVybiBycHRyOwo+ICAgCX0KPiAgIAo+IC0JcmV0 ID0gcXhsX2JvX2ttYXAoYm8sICZycHRyKTsKPiArCXJldCA9IHF4bF9ib19rbWFwKGJvLCAmYm9f bWFwKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gTlVMTDsKPiArCXJwdHIgPSBib19tYXAu dmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4gICAK PiAgIAlycHRyICs9IHBhZ2Vfb2Zmc2V0ICogUEFHRV9TSVpFOwo+ICAgCXJldHVybiBycHRyOwo+ IEBAIC0yMTIsNyArMjE5LDcgQEAgdm9pZCBxeGxfYm9fa3VubWFwKHN0cnVjdCBxeGxfYm8gKmJv KQo+ICAgCWlmIChiby0+bWFwX2NvdW50ID4gMCkKPiAgIAkJcmV0dXJuOwo+ICAgCWJvLT5rcHRy ID0gTlVMTDsKPiAtCXR0bV9ib19rdW5tYXAoJmJvLT5rbWFwKTsKPiArCXR0bV9ib192dW5tYXAo JmJvLT50Ym8sICZiby0+bWFwKTsKPiAgIH0KPiAgIAo+ICAgdm9pZCBxeGxfYm9fa3VubWFwX2F0 b21pY19wYWdlKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vcXhsL3F4bF9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX29iamVj dC5oCj4gaW5kZXggMDlhNWM4MTgzMjRkLi5lYmYyNGM5ZDJiZjIgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL3F4bC9xeGxfb2JqZWN0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcXhs L3F4bF9vYmplY3QuaAo+IEBAIC02Myw3ICs2Myw3IEBAIGV4dGVybiBpbnQgcXhsX2JvX2NyZWF0 ZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKPiAgIAkJCSBib29sIGtlcm5lbCwgYm9vbCBwaW5u ZWQsIHUzMiBkb21haW4sCj4gICAJCQkgc3RydWN0IHF4bF9zdXJmYWNlICpzdXJmLAo+ICAgCQkJ IHN0cnVjdCBxeGxfYm8gKipib19wdHIpOwo+IC1leHRlcm4gaW50IHF4bF9ib19rbWFwKHN0cnVj dCBxeGxfYm8gKmJvLCB2b2lkICoqcHRyKTsKPiArZXh0ZXJuIGludCBxeGxfYm9fa21hcChzdHJ1 Y3QgcXhsX2JvICpibywgc3RydWN0IGRtYV9idWZfbWFwICptYXApOwo+ICAgZXh0ZXJuIHZvaWQg cXhsX2JvX2t1bm1hcChzdHJ1Y3QgcXhsX2JvICpibyk7Cj4gICB2b2lkICpxeGxfYm9fa21hcF9h dG9taWNfcGFnZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwgc3RydWN0IHF4bF9ibyAqYm8sIGlu dCBwYWdlX29mZnNldCk7Cj4gICB2b2lkIHF4bF9ib19rdW5tYXBfYXRvbWljX3BhZ2Uoc3RydWN0 IHF4bF9kZXZpY2UgKnFkZXYsIHN0cnVjdCBxeGxfYm8gKmJvLCB2b2lkICptYXApOwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9wcmltZS5jIGIvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfcHJpbWUuYwo+IGluZGV4IDdkMzgxNmZjYTVhOC4uNGFhOTQ5Nzk5NDQ2IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX3ByaW1lLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vcXhsL3F4bF9wcmltZS5jCj4gQEAgLTU0LDIwICs1NCwyMCBAQCBzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKnF4bF9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKAo+ICAgCXJldHVybiBF UlJfUFRSKC1FTk9TWVMpOwo+ICAgfQo+ICAgCj4gLXZvaWQgKnF4bF9nZW1fcHJpbWVfdm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAraW50IHF4bF9nZW1fcHJpbWVfdm1hcChzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4g ICAJc3RydWN0IHF4bF9ibyAqYm8gPSBnZW1fdG9fcXhsX2JvKG9iaik7Cj4gLQl2b2lkICpwdHI7 Cj4gICAJaW50IHJldDsKPiAgIAo+IC0JcmV0ID0gcXhsX2JvX2ttYXAoYm8sICZwdHIpOwo+ICsJ cmV0ID0gcXhsX2JvX2ttYXAoYm8sIG1hcCk7Cj4gICAJaWYgKHJldCA8IDApCj4gLQkJcmV0dXJu IEVSUl9QVFIocmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICAgCj4gLQlyZXR1cm4gcHRyOwo+ICsJ cmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtdm9pZCBxeGxfZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpCj4gK3ZvaWQgcXhsX2dlbV9wcmltZV92 dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCSAgc3RydWN0IGRtYV9idWZf bWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IHF4bF9ibyAqYm8gPSBnZW1fdG9fcXhsX2JvKG9i aik7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBi L2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKPiBpbmRleCA1ZDU0YmNjZWJkNGQuLjQ0 Y2I1ZWU2ZmMyMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAo+IEBAIC01MDksNyArNTA5 LDYgQEAgc3RydWN0IHJhZGVvbl9ibyB7Cj4gICAJLyogQ29uc3RhbnQgYWZ0ZXIgaW5pdGlhbGl6 YXRpb24gKi8KPiAgIAlzdHJ1Y3QgcmFkZW9uX2RldmljZQkJKnJkZXY7Cj4gICAKPiAtCXN0cnVj dCB0dG1fYm9fa21hcF9vYmoJCWRtYV9idWZfdm1hcDsKPiAgIAlwaWRfdAkJCQlwaWQ7Cj4gICAK PiAgICNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25f Z2VtLmMKPiBpbmRleCAwY2NkNzIxM2U0MWYuLmQyODc2Y2UzYmM5ZSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9yYWRlb24vcmFkZW9uX2dlbS5jCj4gQEAgLTMxLDYgKzMxLDcgQEAKPiAgICNpbmNsdWRlIDxk cm0vZHJtX2RlYnVnZnMuaD4KPiAgICNpbmNsdWRlIDxkcm0vZHJtX2RldmljZS5oPgo+ICAgI2lu Y2x1ZGUgPGRybS9kcm1fZmlsZS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdHRtX2hlbHBl ci5oPgo+ICAgI2luY2x1ZGUgPGRybS9yYWRlb25fZHJtLmg+Cj4gICAKPiAgICNpbmNsdWRlICJy YWRlb24uaCIKPiBAQCAtNDAsOCArNDEsNiBAQCBzdHJ1Y3QgZG1hX2J1ZiAqcmFkZW9uX2dlbV9w cmltZV9leHBvcnQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqLAo+ICAgc3RydWN0IHNnX3Rh YmxlICpyYWRlb25fZ2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaik7Cj4gICBpbnQgcmFkZW9uX2dlbV9wcmltZV9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopOwo+ICAgdm9pZCByYWRlb25fZ2VtX3ByaW1lX3VucGluKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqKTsKPiAtdm9pZCAqcmFkZW9uX2dlbV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqKTsKPiAtdm9pZCByYWRlb25fZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+ICAgCj4gICBzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9nZW1fb2JqZWN0X2Z1bmNzIHJhZGVvbl9nZW1fb2JqZWN0X2Z1bmNzOwo+ICAgCj4g QEAgLTIzNSw4ICsyMzQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9nZW1fb2JqZWN0X2Z1 bmNzIHJhZGVvbl9nZW1fb2JqZWN0X2Z1bmNzID0gewo+ICAgCS5waW4gPSByYWRlb25fZ2VtX3By aW1lX3BpbiwKPiAgIAkudW5waW4gPSByYWRlb25fZ2VtX3ByaW1lX3VucGluLAo+ICAgCS5nZXRf c2dfdGFibGUgPSByYWRlb25fZ2VtX3ByaW1lX2dldF9zZ190YWJsZSwKPiAtCS52bWFwID0gcmFk ZW9uX2dlbV9wcmltZV92bWFwLAo+IC0JLnZ1bm1hcCA9IHJhZGVvbl9nZW1fcHJpbWVfdnVubWFw LAo+ICsJLnZtYXAgPSBkcm1fZ2VtX3R0bV92bWFwLAo+ICsJLnZ1bm1hcCA9IGRybV9nZW1fdHRt X3Z1bm1hcCwKPiAgIH07Cj4gICAKPiAgIC8qCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9yYWRlb24vcmFkZW9uX3ByaW1lLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9w cmltZS5jCj4gaW5kZXggYjlkZTBlNTFjMGJlLi4wODhkMzlhNTFjMGQgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcHJpbWUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9yYWRlb24vcmFkZW9uX3ByaW1lLmMKPiBAQCAtMzksMjYgKzM5LDYgQEAgc3RydWN0IHNn X3RhYmxlICpyYWRlb25fZ2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiAgIAlyZXR1cm4gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKG9iai0+ZGV2LCBiby0+ dGJvLnR0bS0+cGFnZXMsIG5wYWdlcyk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqcmFkZW9uX2dlbV9w cmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+IC17Cj4gLQlzdHJ1Y3QgcmFk ZW9uX2JvICpibyA9IGdlbV90b19yYWRlb25fYm8ob2JqKTsKPiAtCWludCByZXQ7Cj4gLQo+IC0J cmV0ID0gdHRtX2JvX2ttYXAoJmJvLT50Ym8sIDAsIGJvLT50Ym8ubnVtX3BhZ2VzLAo+IC0JCQkg ICZiby0+ZG1hX2J1Zl92bWFwKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0 KTsKPiAtCj4gLQlyZXR1cm4gYm8tPmRtYV9idWZfdm1hcC52aXJ0dWFsOwo+IC19Cj4gLQo+IC12 b2lkIHJhZGVvbl9nZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB2 b2lkICp2YWRkcikKPiAtewo+IC0Jc3RydWN0IHJhZGVvbl9ibyAqYm8gPSBnZW1fdG9fcmFkZW9u X2JvKG9iaik7Cj4gLQo+IC0JdHRtX2JvX2t1bm1hcCgmYm8tPmRtYV9idWZfdm1hcCk7Cj4gLX0K PiAtCj4gICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnJhZGVvbl9nZW1fcHJpbWVfaW1wb3J0X3Nn X3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCQkJCQkJc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqYXR0YWNoLAo+ICAgCQkJCQkJCXN0cnVjdCBzZ190YWJsZSAqc2cpCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmMgYi9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5jCj4gaW5kZXggN2Q1ZWJi MTAzMjNiLi43OTcxZjU3NDM2ZGQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL3JvY2tjaGlwX2RybV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9y b2NrY2hpcF9kcm1fZ2VtLmMKPiBAQCAtNTMyLDI2ICs1MzIsMzIgQEAgcm9ja2NoaXBfZ2VtX3By aW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ICAgCXJldHVybiBF UlJfUFRSKHJldCk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqcm9ja2NoaXBfZ2VtX3ByaW1lX3ZtYXAo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gK2ludCByb2NrY2hpcF9nZW1fcHJpbWVfdm1h cChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4g ICB7Cj4gICAJc3RydWN0IHJvY2tjaGlwX2dlbV9vYmplY3QgKnJrX29iaiA9IHRvX3JvY2tjaGlw X29iaihvYmopOwo+ICAgCj4gLQlpZiAocmtfb2JqLT5wYWdlcykKPiAtCQlyZXR1cm4gdm1hcChy a19vYmotPnBhZ2VzLCBya19vYmotPm51bV9wYWdlcywgVk1fTUFQLAo+IC0JCQkgICAgcGdwcm90 X3dyaXRlY29tYmluZShQQUdFX0tFUk5FTCkpOwo+ICsJaWYgKHJrX29iai0+cGFnZXMpIHsKPiAr CQl2b2lkICp2YWRkciA9IHZtYXAocmtfb2JqLT5wYWdlcywgcmtfb2JqLT5udW1fcGFnZXMsIFZN X01BUCwKPiArCQkJCSAgcGdwcm90X3dyaXRlY29tYmluZShQQUdFX0tFUk5FTCkpOwo+ICsJCWlm ICghdmFkZHIpCj4gKwkJCXJldHVybiAtRU5PTUVNOwo+ICsJCWRtYV9idWZfbWFwX3NldF92YWRk cihtYXAsIHZhZGRyKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiAgIAo+ICAgCWlmIChya19vYmot PmRtYV9hdHRycyAmIERNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5HKQo+IC0JCXJldHVybiBOVUxM Owo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJZG1hX2J1Zl9tYXBfc2V0X3ZhZGRyKG1hcCwgcmtf b2JqLT5rdmFkZHIpOwo+ICAgCj4gLQlyZXR1cm4gcmtfb2JqLT5rdmFkZHI7Cj4gKwlyZXR1cm4g MDsKPiAgIH0KPiAgIAo+IC12b2lkIHJvY2tjaGlwX2dlbV9wcmltZV92dW5tYXAoc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmosIHZvaWQgKnZhZGRyKQo+ICt2b2lkIHJvY2tjaGlwX2dlbV9wcmlt ZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAq bWFwKQo+ICAgewo+ICAgCXN0cnVjdCByb2NrY2hpcF9nZW1fb2JqZWN0ICpya19vYmogPSB0b19y b2NrY2hpcF9vYmoob2JqKTsKPiAgIAo+ICAgCWlmIChya19vYmotPnBhZ2VzKSB7Cj4gLQkJdnVu bWFwKHZhZGRyKTsKPiArCQl2dW5tYXAobWFwLT52YWRkcik7Cj4gICAJCXJldHVybjsKPiAgIAl9 Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2Ry bV9nZW0uaCBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmgKPiBp bmRleCA3ZmZjNTQxYmVhMDcuLjVhNzBhNTZjZDQwNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uaAo+IEBAIC0zMSw4ICszMSw4IEBAIHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqCj4gICByb2NrY2hpcF9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCQkJICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCAqYXR0YWNoLAo+ICAgCQkJCSAgIHN0cnVjdCBzZ190YWJsZSAqc2cpOwo+IC12b2lkICpyb2Nr Y2hpcF9nZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gLXZvaWQg cm9ja2NoaXBfZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9p ZCAqdmFkZHIpOwo+ICtpbnQgcm9ja2NoaXBfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiArdm9pZCByb2NrY2hpcF9n ZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3QgZG1hX2J1 Zl9tYXAgKm1hcCk7Cj4gICAKPiAgIC8qIGRybSBkcml2ZXIgbW1hcCBmaWxlIG9wZXJhdGlvbnMg Ki8KPiAgIGludCByb2NrY2hpcF9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueS9j aXJydXMuYyBiL2RyaXZlcnMvZ3B1L2RybS90aW55L2NpcnJ1cy5jCj4gaW5kZXggNzQ0YThlMzM3 ZTQxLi5jMDJlMzVlZDZlNzYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RpbnkvY2ly cnVzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlueS9jaXJydXMuYwo+IEBAIC0xNyw2ICsx Nyw3IEBACj4gICAgKi8KPiAgIAo+ICAgI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L2RtYS1idWYtbWFwLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ Cj4gICAjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4gICAKPiBAQCAtMzE0LDYgKzMxNSw3IEBAIHN0 YXRpYyBpbnQgY2lycnVzX2ZiX2JsaXRfcmVjdChzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwK PiAgIAkJCSAgICAgICBzdHJ1Y3QgZHJtX3JlY3QgKnJlY3QpCj4gICB7Cj4gICAJc3RydWN0IGNp cnJ1c19kZXZpY2UgKmNpcnJ1cyA9IHRvX2NpcnJ1cyhmYi0+ZGV2KTsKPiArCXN0cnVjdCBkbWFf YnVmX21hcCBtYXA7Cj4gICAJdm9pZCAqdm1hcDsKPiAgIAlpbnQgaWR4LCByZXQ7Cj4gICAKPiBA QCAtMzIxLDEwICszMjMsMTAgQEAgc3RhdGljIGludCBjaXJydXNfZmJfYmxpdF9yZWN0KHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ICAgCWlmICghZHJtX2Rldl9lbnRlcigmY2lycnVzLT5k ZXYsICZpZHgpKQo+ICAgCQlnb3RvIG91dDsKPiAgIAo+IC0JcmV0ID0gLUVOT01FTTsKPiAtCXZt YXAgPSBkcm1fZ2VtX3NobWVtX3ZtYXAoZmItPm9ialswXSk7Cj4gLQlpZiAoIXZtYXApCj4gKwly ZXQgPSBkcm1fZ2VtX3NobWVtX3ZtYXAoZmItPm9ialswXSwgJm1hcCk7Cj4gKwlpZiAocmV0KQo+ ICAgCQlnb3RvIG91dF9kZXZfZXhpdDsKPiArCXZtYXAgPSBtYXAudmFkZHI7IC8qIFRPRE86IFVz ZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4gICAKPiAgIAlpZiAoY2lycnVzLT5j cHAgPT0gZmItPmZvcm1hdC0+Y3BwWzBdKQo+ICAgCQlkcm1fZmJfbWVtY3B5X2RzdGNsaXAoY2ly cnVzLT52cmFtLAo+IEBAIC0zNDMsNyArMzQ1LDcgQEAgc3RhdGljIGludCBjaXJydXNfZmJfYmxp dF9yZWN0KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ICAgCWVsc2UKPiAgIAkJV0FSTl9P Tl9PTkNFKCJjcHAgbWlzbWF0Y2giKTsKPiAgIAo+IC0JZHJtX2dlbV9zaG1lbV92dW5tYXAoZmIt Pm9ialswXSwgdm1hcCk7Cj4gKwlkcm1fZ2VtX3NobWVtX3Z1bm1hcChmYi0+b2JqWzBdLCAmbWFw KTsKPiAgIAlyZXQgPSAwOwo+ICAgCj4gICBvdXRfZGV2X2V4aXQ6Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS90aW55L2dtMTJ1MzIwLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGlueS9nbTEy dTMyMC5jCj4gaW5kZXggY2MzOTc2NzFmNjg5Li4xMmE4OTBjZWE2ZTkgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3RpbnkvZ20xMnUzMjAuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90 aW55L2dtMTJ1MzIwLmMKPiBAQCAtMjQ4LDYgKzI0OCw3IEBAIHN0YXRpYyB2b2lkIGdtMTJ1MzIw X2NvcHlfZmJfdG9fYmxvY2tzKHN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwKQo+ICAg ewo+ICAgCWludCBibG9jaywgZHN0X29mZnNldCwgbGVuLCByZW1haW4sIHJldCwgeDEsIHgyLCB5 MSwgeTI7Cj4gICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4gKwlzdHJ1Y3QgZG1hX2J1 Zl9tYXAgbWFwOwo+ICAgCXZvaWQgKnZhZGRyOwo+ICAgCXU4ICpzcmM7Cj4gICAKPiBAQCAtMjYy LDExICsyNjMsMTIgQEAgc3RhdGljIHZvaWQgZ20xMnUzMjBfY29weV9mYl90b19ibG9ja3Moc3Ry dWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjApCj4gICAJeTEgPSBnbTEydTMyMC0+ZmJfdXBk YXRlLnJlY3QueTE7Cj4gICAJeTIgPSBnbTEydTMyMC0+ZmJfdXBkYXRlLnJlY3QueTI7Cj4gICAK PiAtCXZhZGRyID0gZHJtX2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0pOwo+IC0JaWYgKElTX0VS Uih2YWRkcikpIHsKPiAtCQlHTTEyVTMyMF9FUlIoImZhaWxlZCB0byB2bWFwIGZiOiAlbGRcbiIs IFBUUl9FUlIodmFkZHIpKTsKPiArCXJldCA9IGRybV9nZW1fc2htZW1fdm1hcChmYi0+b2JqWzBd LCAmbWFwKTsKPiArCWlmIChyZXQpIHsKPiArCQlHTTEyVTMyMF9FUlIoImZhaWxlZCB0byB2bWFw IGZiOiAlZFxuIiwgcmV0KTsKPiAgIAkJZ290byBwdXRfZmI7Cj4gICAJfQo+ICsJdmFkZHIgPSBt YXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4g ICAKPiAgIAlpZiAoZmItPm9ialswXS0+aW1wb3J0X2F0dGFjaCkgewo+ICAgCQlyZXQgPSBkbWFf YnVmX2JlZ2luX2NwdV9hY2Nlc3MoCj4gQEAgLTMxOCw3ICszMjAsNyBAQCBzdGF0aWMgdm9pZCBn bTEydTMyMF9jb3B5X2ZiX3RvX2Jsb2NrcyhzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMy MCkKPiAgIAkJCUdNMTJVMzIwX0VSUigiZG1hX2J1Zl9lbmRfY3B1X2FjY2VzcyBlcnI6ICVkXG4i LCByZXQpOwo+ICAgCX0KPiAgIHZ1bm1hcDoKPiAtCWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5v YmpbMF0sIHZhZGRyKTsKPiArCWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sICZtYXAp Owo+ICAgcHV0X2ZiOgo+ICAgCWRybV9mcmFtZWJ1ZmZlcl9wdXQoZmIpOwo+ICAgCWdtMTJ1MzIw LT5mYl91cGRhdGUuZmIgPSBOVUxMOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdWRs L3VkbF9tb2Rlc2V0LmMgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rlc2V0LmMKPiBpbmRl eCBmZWY0M2Y0ZTNiYWMuLjQyZWViYTFkZmRiZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vdWRsL3VkbF9tb2Rlc2V0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rl c2V0LmMKPiBAQCAtMjc2LDYgKzI3Niw3IEBAIHN0YXRpYyBpbnQgdWRsX2hhbmRsZV9kYW1hZ2Uo c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCB4LCBpbnQgeSwKPiAgIAlzdHJ1Y3QgdXJi ICp1cmI7Cj4gICAJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gICAJaW50IGxvZ19icHA7Cj4gKwlz dHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICAgCXZvaWQgKnZhZGRyOwo+ICAgCj4gICAJcmV0ID0g dWRsX2xvZ19jcHAoZmItPmZvcm1hdC0+Y3BwWzBdKTsKPiBAQCAtMjk2LDExICsyOTcsMTIgQEAg c3RhdGljIGludCB1ZGxfaGFuZGxlX2RhbWFnZShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwg aW50IHgsIGludCB5LAo+ICAgCQkJcmV0dXJuIHJldDsKPiAgIAl9Cj4gICAKPiAtCXZhZGRyID0g ZHJtX2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0pOwo+IC0JaWYgKElTX0VSUih2YWRkcikpIHsK PiArCXJldCA9IGRybV9nZW1fc2htZW1fdm1hcChmYi0+b2JqWzBdLCAmbWFwKTsKPiArCWlmIChy ZXQpIHsKPiAgIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdm1hcCBmYlxuIik7Cj4gICAJCWdvdG8g b3V0X2RtYV9idWZfZW5kX2NwdV9hY2Nlc3M7Cj4gICAJfQo+ICsJdmFkZHIgPSBtYXAudmFkZHI7 IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4gICAKPiAgIAl1 cmIgPSB1ZGxfZ2V0X3VyYihkZXYpOwo+ICAgCWlmICghdXJiKQo+IEBAIC0zMzMsNyArMzM1LDcg QEAgc3RhdGljIGludCB1ZGxfaGFuZGxlX2RhbWFnZShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwgaW50IHgsIGludCB5LAo+ICAgCXJldCA9IDA7Cj4gICAKPiAgIG91dF9kcm1fZ2VtX3NobWVt X3Z1bm1hcDoKPiAtCWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sIHZhZGRyKTsKPiAr CWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sICZtYXApOwo+ICAgb3V0X2RtYV9idWZf ZW5kX2NwdV9hY2Nlc3M6Cj4gICAJaWYgKGltcG9ydF9hdHRhY2gpIHsKPiAgIAkJdG1wX3JldCA9 IGRtYV9idWZfZW5kX2NwdV9hY2Nlc3MoaW1wb3J0X2F0dGFjaC0+ZG1hYnVmLAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbW9kZS5jIGIvZHJpdmVycy9ncHUv ZHJtL3Zib3h2aWRlby92Ym94X21vZGUuYwo+IGluZGV4IDkzMWM1NTEyNjE0OC4uZjI2OGZiMjU4 YzgzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9tb2RlLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbW9kZS5jCj4gQEAgLTksNiAr OSw4IEBACj4gICAgKiAgICAgICAgICBNaWNoYWVsIFRoYXllciA8bWljaGFlbC50aGF5ZXJAb3Jh Y2xlLmNvbSwKPiAgICAqICAgICAgICAgIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5j b20+Cj4gICAgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLW1hcC5oPgo+ICAgI2lu Y2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMu aD4KPiBAQCAtMzg0LDYgKzM4Niw4IEBAIHN0YXRpYyB2b2lkIHZib3hfY3Vyc29yX2F0b21pY191 cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJdTMyIGhlaWdodCA9IHBsYW5lLT5z dGF0ZS0+Y3J0Y19oOwo+ICAgCXNpemVfdCBkYXRhX3NpemUsIG1hc2tfc2l6ZTsKPiAgIAl1MzIg ZmxhZ3M7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICsJaW50IHJldDsKPiAgIAl1OCAq c3JjOwo+ICAgCj4gICAJLyoKPiBAQCAtMzk3LDggKzQwMSw4IEBAIHN0YXRpYyB2b2lkIHZib3hf Y3Vyc29yX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAKPiAgIAl2 Ym94X2NydGMtPmN1cnNvcl9lbmFibGVkID0gdHJ1ZTsKPiAgIAo+IC0Jc3JjID0gZHJtX2dlbV92 cmFtX3ZtYXAoZ2JvKTsKPiAtCWlmIChJU19FUlIoc3JjKSkgewo+ICsJcmV0ID0gZHJtX2dlbV92 cmFtX3ZtYXAoZ2JvLCAmbWFwKTsKPiArCWlmIChyZXQpIHsKPiAgIAkJLyoKPiAgIAkJICogQlVH OiB3ZSBzaG91bGQgaGF2ZSBwaW5uZWQgdGhlIEJPIGluIHByZXBhcmVfZmIoKS4KPiAgIAkJICov Cj4gQEAgLTQwNiw2ICs0MTAsNyBAQCBzdGF0aWMgdm9pZCB2Ym94X2N1cnNvcl9hdG9taWNfdXBk YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCQlEUk1fV0FSTigiQ291bGQgbm90IG1h cCBjdXJzb3IgYm8sIHNraXBwaW5nIHVwZGF0ZVxuIik7Cj4gICAJCXJldHVybjsKPiAgIAl9Cj4g KwlzcmMgPSBtYXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Bl cmx5ICovCj4gICAKPiAgIAkvKgo+ICAgCSAqIFRoZSBtYXNrIG11c3QgYmUgY2FsY3VsYXRlZCBi YXNlZCBvbiB0aGUgYWxwaGEKPiBAQCAtNDE2LDcgKzQyMSw3IEBAIHN0YXRpYyB2b2lkIHZib3hf Y3Vyc29yX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJZGF0YV9z aXplID0gd2lkdGggKiBoZWlnaHQgKiA0ICsgbWFza19zaXplOwo+ICAgCj4gICAJY29weV9jdXJz b3JfaW1hZ2Uoc3JjLCB2Ym94LT5jdXJzb3JfZGF0YSwgd2lkdGgsIGhlaWdodCwgbWFza19zaXpl KTsKPiAtCWRybV9nZW1fdnJhbV92dW5tYXAoZ2JvLCBzcmMpOwo+ICsJZHJtX2dlbV92cmFtX3Z1 bm1hcChnYm8sICZtYXApOwo+ICAgCj4gICAJZmxhZ3MgPSBWQk9YX01PVVNFX1BPSU5URVJfVklT SUJMRSB8IFZCT1hfTU9VU0VfUE9JTlRFUl9TSEFQRSB8Cj4gICAJCVZCT1hfTU9VU0VfUE9JTlRF Ul9BTFBIQTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfYm8uYyBiL2Ry aXZlcnMvZ3B1L2RybS92YzQvdmM0X2JvLmMKPiBpbmRleCA1NTdmMGQxZTY0MzcuLmYyOTBhOWE5 NDJkYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfYm8uYwo+IEBAIC03ODUsMTYgKzc4NSwxNiBAQCBpbnQg dmM0X3ByaW1lX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQo+ICAgCXJldHVybiBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwKG9iaiwgdm1h KTsKPiAgIH0KPiAgIAo+IC12b2lkICp2YzRfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiAraW50IHZjNF9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LCBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCkKPiAgIHsKPiAgIAlzdHJ1Y3QgdmM0X2JvICpibyA9 IHRvX3ZjNF9ibyhvYmopOwo+ICAgCj4gICAJaWYgKGJvLT52YWxpZGF0ZWRfc2hhZGVyKSB7Cj4g ICAJCURSTV9ERUJVRygibW1hcGluZyBvZiBzaGFkZXIgQk9zIG5vdCBhbGxvd2VkLlxuIik7Cj4g LQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gICAJfQo+ ICAgCj4gLQlyZXR1cm4gZHJtX2dlbV9jbWFfcHJpbWVfdm1hcChvYmopOwo+ICsJcmV0dXJuIGRy bV9nZW1fY21hX3ByaW1lX3ZtYXAob2JqLCBtYXApOwo+ICAgfQo+ICAgCj4gICBzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYu aCBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oCj4gaW5kZXggY2M3OWIxYWFhODc4Li45 MDRmMmMzNmM5NjMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaAo+IEBAIC04MDYsNyArODA2LDcg QEAgaW50IHZjNF9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Cj4gICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnZjNF9wcmlt ZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJCQkJCSBzdHJ1 Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCj4gICAJCQkJCQkgc3RydWN0IHNnX3RhYmxl ICpzZ3QpOwo+IC12b2lkICp2YzRfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aik7Cj4gK2ludCB2YzRfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3Ry dWN0IGRtYV9idWZfbWFwICptYXApOwo+ICAgaW50IHZjNF9ib19jYWNoZV9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOwo+ICAgdm9pZCB2YzRfYm9fY2FjaGVfZGVzdHJveShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKPiAgIGludCB2YzRfYm9faW5jX3VzZWNudChzdHJ1Y3QgdmM0X2JvICpi byk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmMgYi9kcml2 ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Rydi5jCj4gaW5kZXggZmE1NGE2ZDE0MDNkLi5iMmFhMjZl MWU0YTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9kcnYuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmMKPiBAQCAtMzYxLDI0ICszNjEsMzAg QEAgc3RhdGljIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqdmdlbV9wcmltZV9pbXBvcnRfc2dfdGFi bGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAlyZXR1cm4gJm9iai0+YmFzZTsKPiAgIH0K PiAgIAo+IC1zdGF0aWMgdm9pZCAqdmdlbV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqKQo+ICtzdGF0aWMgaW50IHZnZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IGRybV92 Z2VtX2dlbV9vYmplY3QgKmJvID0gdG9fdmdlbV9ibyhvYmopOwo+ICAgCWxvbmcgbl9wYWdlcyA9 IG9iai0+c2l6ZSA+PiBQQUdFX1NISUZUOwo+ICAgCXN0cnVjdCBwYWdlICoqcGFnZXM7Cj4gKwl2 b2lkICp2YWRkcjsKPiAgIAo+ICAgCXBhZ2VzID0gdmdlbV9waW5fcGFnZXMoYm8pOwo+ICAgCWlm IChJU19FUlIocGFnZXMpKQo+IC0JCXJldHVybiBOVUxMOwo+ICsJCXJldHVybiBQVFJfRVJSKHBh Z2VzKTsKPiArCj4gKwl2YWRkciA9IHZtYXAocGFnZXMsIG5fcGFnZXMsIDAsIHBncHJvdF93cml0 ZWNvbWJpbmUoUEFHRV9LRVJORUwpKTsKPiArCWlmICghdmFkZHIpCj4gKwkJcmV0dXJuIC1FTk9N RU07Cj4gKwlkbWFfYnVmX21hcF9zZXRfdmFkZHIobWFwLCB2YWRkcik7Cj4gICAKPiAtCXJldHVy biB2bWFwKHBhZ2VzLCBuX3BhZ2VzLCAwLCBwZ3Byb3Rfd3JpdGVjb21iaW5lKFBBR0VfS0VSTkVM KSk7Cj4gKwlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdm9pZCB2Z2VtX3ByaW1lX3Z1 bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpCj4gK3N0YXRpYyB2 b2lkIHZnZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qg ZG1hX2J1Zl9tYXAgKm1hcCkKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX3ZnZW1fZ2VtX29iamVjdCAq Ym8gPSB0b192Z2VtX2JvKG9iaik7Cj4gICAKPiAtCXZ1bm1hcCh2YWRkcik7Cj4gKwl2dW5tYXAo bWFwLT52YWRkcik7Cj4gICAJdmdlbV91bnBpbl9wYWdlcyhibyk7Cj4gICB9Cj4gICAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jIGIvZHJpdmVy cy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jCj4gaW5kZXggNGYzNGVmMzRiYTYwLi43 NGRiNWE4NDBiZWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zy b250X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5j Cj4gQEAgLTI5MCwyMiArMjkwLDI4IEBAIGludCB4ZW5fZHJtX2Zyb250X2dlbV9tbWFwKHN0cnVj dCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiAgIAlyZXR1cm4gZ2Vt X21tYXBfb2JqKHhlbl9vYmosIHZtYSk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqeGVuX2RybV9mcm9u dF9nZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopCj4gK2ludCB4 ZW5fZHJtX2Zyb250X2dlbV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29i aiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IHhlbl9nZW1fb2Jq ZWN0ICp4ZW5fb2JqID0gdG9feGVuX2dlbV9vYmooZ2VtX29iaik7Cj4gKwl2b2lkICp2YWRkcjsK PiAgIAo+ICAgCWlmICgheGVuX29iai0+cGFnZXMpCj4gLQkJcmV0dXJuIE5VTEw7Cj4gKwkJcmV0 dXJuIC1FTk9NRU07Cj4gICAKPiAgIAkvKiBQbGVhc2Ugc2VlIGNvbW1lbnQgaW4gZ2VtX21tYXBf b2JqIG9uIG1hcHBpbmcgYW5kIGF0dHJpYnV0ZXMuICovCj4gLQlyZXR1cm4gdm1hcCh4ZW5fb2Jq LT5wYWdlcywgeGVuX29iai0+bnVtX3BhZ2VzLAo+IC0JCSAgICBWTV9NQVAsIFBBR0VfS0VSTkVM KTsKPiArCXZhZGRyID0gdm1hcCh4ZW5fb2JqLT5wYWdlcywgeGVuX29iai0+bnVtX3BhZ2VzLAo+ ICsJCSAgICAgVk1fTUFQLCBQQUdFX0tFUk5FTCk7Cj4gKwlpZiAoIXZhZGRyKQo+ICsJCXJldHVy biAtRU5PTUVNOwo+ICsJZG1hX2J1Zl9tYXBfc2V0X3ZhZGRyKG1hcCwgdmFkZHIpOwo+ICsKPiAr CXJldHVybiAwOwo+ICAgfQo+ICAgCj4gICB2b2lkIHhlbl9kcm1fZnJvbnRfZ2VtX3ByaW1lX3Z1 bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmosCj4gLQkJCQkgICAgdm9pZCAqdmFk ZHIpCj4gKwkJCQkgICAgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gLQl2dW5tYXAo dmFkZHIpOwo+ICsJdnVubWFwKG1hcC0+dmFkZHIpOwo+ICAgfQo+ICAgCj4gICBpbnQgeGVuX2Ry bV9mcm9udF9nZW1fcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmosCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uaCBiL2Ry aXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uaAo+IGluZGV4IGEzOTY3NWZhMzFi Mi4uYTRlNjdkMGExNDljIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2Ry bV9mcm9udF9nZW0uaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9n ZW0uaAo+IEBAIC0xMiw2ICsxMiw3IEBACj4gICAjZGVmaW5lIF9fWEVOX0RSTV9GUk9OVF9HRU1f SAo+ICAgCj4gICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50Owo+ICtzdHJ1Y3QgZG1hX2J1Zl9t YXA7Cj4gICBzdHJ1Y3QgZHJtX2RldmljZTsKPiAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdDsKPiAg IHN0cnVjdCBmaWxlOwo+IEBAIC0zNCwxMCArMzUsMTEgQEAgdm9pZCB4ZW5fZHJtX2Zyb250X2dl bV9mcmVlX29iamVjdF91bmxvY2tlZChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopOwo+ ICAgCj4gICBpbnQgeGVuX2RybV9mcm9udF9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgCj4gLXZvaWQgKnhlbl9kcm1fZnJvbnRfZ2Vt X3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKTsKPiAraW50IHhlbl9k cm1fZnJvbnRfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqLAo+ ICsJCQkJIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIAo+ICAgdm9pZCB4ZW5fZHJtX2Zy b250X2dlbV9wcmltZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqLAo+IC0J CQkJICAgIHZvaWQgKnZhZGRyKTsKPiArCQkJCSAgICBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCk7 Cj4gICAKPiAgIGludCB4ZW5fZHJtX2Zyb250X2dlbV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqZ2VtX29iaiwKPiAgIAkJCQkgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZ2VtLmggYi9pbmNsdWRlL2RybS9kcm1fZ2Vt LmgKPiBpbmRleCBjMzhkZDM1ZGEwMGIuLjVlNmRhYTFjOTgyZiAxMDA2NDQKPiAtLS0gYS9pbmNs dWRlL2RybS9kcm1fZ2VtLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZ2VtLmgKPiBAQCAtMzks NiArMzksNyBAQAo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV92bWFfbWFuYWdlci5oPgo+ICAg Cj4gK3N0cnVjdCBkbWFfYnVmX21hcDsKPiAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdDsKPiAgIAo+ ICAgLyoqCj4gQEAgLTEzOCw3ICsxMzksNyBAQCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3Mg ewo+ICAgCSAqCj4gICAJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4KPiAgIAkgKi8KPiAt CXZvaWQgKigqdm1hcCkoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICsJaW50ICgqdm1h cCkoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsK PiAgIAo+ICAgCS8qKgo+ICAgCSAqIEB2dW5tYXA6Cj4gQEAgLTE0OCw3ICsxNDksNyBAQCBzdHJ1 Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3Mgewo+ICAgCSAqCj4gICAJICogVGhpcyBjYWxsYmFjayBp cyBvcHRpb25hbC4KPiAgIAkgKi8KPiAtCXZvaWQgKCp2dW5tYXApKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqLCB2b2lkICp2YWRkcik7Cj4gKwl2b2lkICgqdnVubWFwKShzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApOwo+ICAgCj4gICAJLyoqCj4g ICAJICogQG1tYXA6Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW1fY21hX2hlbHBl ci5oIGIvaW5jbHVkZS9kcm0vZHJtX2dlbV9jbWFfaGVscGVyLmgKPiBpbmRleCBhMDY0YjBkMWM0 ODAuLmNhZjk4YjljZjRiNCAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fZ2VtX2NtYV9o ZWxwZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fY21hX2hlbHBlci5oCj4gQEAgLTEw Myw3ICsxMDMsNyBAQCBkcm1fZ2VtX2NtYV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKPiAgIAkJCQkgIHN0cnVjdCBzZ190YWJsZSAqc2d0KTsKPiAgIGludCBk cm1fZ2VtX2NtYV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkJ ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+IC12b2lkICpkcm1fZ2VtX2NtYV9wcmlt ZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAraW50IGRybV9nZW1fY21hX3By aW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAq bWFwKTsKPiAgIAo+ICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICoKPiAgIGRybV9nZW1fY21hX2Ny ZWF0ZV9vYmplY3RfZGVmYXVsdF9mdW5jcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qg c2l6ZSk7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmgg Yi9pbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oCj4gaW5kZXggNTM4MWYwYzhjZjZm Li4zNDQ5YTAzNTNmZTAgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9o ZWxwZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmgKPiBAQCAt MTEzLDggKzExMyw4IEBAIGludCBkcm1fZ2VtX3NobWVtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dl bV9zaG1lbV9vYmplY3QgKnNobWVtKTsKPiAgIHZvaWQgZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXMo c3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSk7Cj4gICBpbnQgZHJtX2dlbV9zaG1l bV9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICAgdm9pZCBkcm1fZ2VtX3NobWVt X3VucGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAtdm9pZCAqZHJtX2dlbV9zaG1l bV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAtdm9pZCBkcm1fZ2VtX3NobWVt X3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+ICtpbnQg ZHJtX2dlbV9zaG1lbV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3QgZG1h X2J1Zl9tYXAgKm1hcCk7Cj4gK3ZvaWQgZHJtX2dlbV9zaG1lbV92dW5tYXAoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIAo+ICAgaW50IGRy bV9nZW1fc2htZW1fbWFkdmlzZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IG1hZHYp Owo+ICAgCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaCBi L2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaAo+IGluZGV4IDEyOGY4ODE3NGQzMi4u YzBkMjhiYTBmNWM5IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxw ZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaAo+IEBAIC0xMCw2 ICsxMCw3IEBACj4gICAjaW5jbHVkZSA8ZHJtL3R0bS90dG1fYm9fYXBpLmg+Cj4gICAjaW5jbHVk ZSA8ZHJtL3R0bS90dG1fYm9fZHJpdmVyLmg+Cj4gICAKPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1i dWYtbWFwLmg+Cj4gICAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+IC8qIGZvciBjb250YWluZXJf b2YoKSAqLwo+ICAgCj4gICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWI7Cj4gQEAgLTI5LDkg KzMwLDggQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0Owo+ICAgCj4gICAvKioKPiAgICAqIHN0cnVj dCBkcm1fZ2VtX3ZyYW1fb2JqZWN0IC0gR0VNIG9iamVjdCBiYWNrZWQgYnkgVlJBTQo+IC0gKiBA Z2VtOglHRU0gb2JqZWN0Cj4gICAgKiBAYm86CQlUVE0gYnVmZmVyIG9iamVjdAo+IC0gKiBAa21h cDoJTWFwcGluZyBpbmZvcm1hdGlvbiBmb3IgQGJvCj4gKyAqIEBtYXA6CU1hcHBpbmcgaW5mb3Jt YXRpb24gZm9yIEBibwo+ICAgICogQHBsYWNlbWVudDoJVFRNIHBsYWNlbWVudCBpbmZvcm1hdGlv bi4gU3VwcG9ydGVkIHBsYWNlbWVudHMgYXJlIFwKPiAgIAklVFRNX1BMX1ZSQU0gYW5kICVUVE1f UExfU1lTVEVNCj4gICAgKiBAcGxhY2VtZW50czoJVFRNIHBsYWNlbWVudCBpbmZvcm1hdGlvbi4K PiBAQCAtNTAsMTUgKzUwLDE1IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKPiAgICAqLwo+ICAg c3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3Qgewo+ICAgCXN0cnVjdCB0dG1fYnVmZmVyX29iamVj dCBibzsKPiAtCXN0cnVjdCB0dG1fYm9fa21hcF9vYmoga21hcDsKPiArCXN0cnVjdCBkbWFfYnVm X21hcCBtYXA7Cj4gICAKPiAgIAkvKioKPiAtCSAqIEBrbWFwX3VzZV9jb3VudDoKPiArCSAqIEB2 bWFwX3VzZV9jb3VudDoKPiAgIAkgKgo+ICAgCSAqIFJlZmVyZW5jZSBjb3VudCBvbiB0aGUgdmly dHVhbCBhZGRyZXNzLgo+ICAgCSAqIFRoZSBhZGRyZXNzIGFyZSB1bi1tYXBwZWQgd2hlbiB0aGUg Y291bnQgcmVhY2hlcyB6ZXJvLgo+ICAgCSAqLwo+IC0JdW5zaWduZWQgaW50IGttYXBfdXNlX2Nv dW50Owo+ICsJdW5zaWduZWQgaW50IHZtYXBfdXNlX2NvdW50Owo+ICAgCj4gICAJLyogU3VwcG9y dGVkIHBsYWNlbWVudHMgYXJlICVUVE1fUExfVlJBTSBhbmQgJVRUTV9QTF9TWVNURU0gKi8KPiAg IAlzdHJ1Y3QgdHRtX3BsYWNlbWVudCBwbGFjZW1lbnQ7Cj4gQEAgLTk3LDggKzk3LDggQEAgdTY0 IGRybV9nZW1fdnJhbV9tbWFwX29mZnNldChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2Jv KTsKPiAgIHM2NCBkcm1fZ2VtX3ZyYW1fb2Zmc2V0KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0 ICpnYm8pOwo+ICAgaW50IGRybV9nZW1fdnJhbV9waW4oc3RydWN0IGRybV9nZW1fdnJhbV9vYmpl Y3QgKmdibywgdW5zaWduZWQgbG9uZyBwbF9mbGFnKTsKPiAgIGludCBkcm1fZ2VtX3ZyYW1fdW5w aW4oc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibyk7Cj4gLXZvaWQgKmRybV9nZW1fdnJh bV92bWFwKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8pOwo+IC12b2lkIGRybV9nZW1f dnJhbV92dW5tYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywgdm9pZCAqdmFkZHIp Owo+ICtpbnQgZHJtX2dlbV92cmFtX3ZtYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdi bywgc3RydWN0IGRtYV9idWZfbWFwICptYXApOwo+ICt2b2lkIGRybV9nZW1fdnJhbV92dW5tYXAo c3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywgc3RydWN0IGRtYV9idWZfbWFwICptYXAp Owo+ICAgCj4gICBpbnQgZHJtX2dlbV92cmFtX2ZpbGxfY3JlYXRlX2R1bWIoc3RydWN0IGRybV9m aWxlICpmaWxlLAo+ICAgCQkJCSAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxp bmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczov L2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlv bg== 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=-12.1 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER,NICE_REPLY_A,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 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 C9998C43457 for ; Thu, 15 Oct 2020 14:21:54 +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 2054020757 for ; Thu, 15 Oct 2020 14:21:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="ev4nEbIT" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2054020757 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 634F56ED2A; Thu, 15 Oct 2020 14:21:51 +0000 (UTC) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2065.outbound.protection.outlook.com [40.107.94.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7A83C6ED20; Thu, 15 Oct 2020 14:21:49 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AUnnCFSXdry2sw1L4ia6O64g1l2Yg2XprdkPadyFI+VDLYQpELm2VsYMZE3+rN98ZLfKNf7ZphX5GGRd9D7k7jaw6iraQ+/dlfx0auXBDyTL9Zf8PtqanjhXpEyLOksrJfH1PN0DU1LDl5aDNME7fDWt2LvREi7iUXcpWzOCpdH9MSplKXOQ3CTMUlYUBcJppDZQh07ayvBDwiGlSWnHDYJpgZk8Yk+LGqgIfBLuxaEeYuGwwWwAFxtJGr9Qzh6uFO+9J061vwhH7lHFA+OAy6zEpF5zZuXR+AGe9W8+mQdS28X7YW/7SqucqFXCKoiOYeLxI0jtY4jEhuNMTEfWAQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=s1zJaDsCknzbjiRt/StSITflJScs7eZVdKcjpsdgjsI=; b=TQjQI9Srk0O8AB+AzDXQaAaw3QNjYOf/Xb8IHEneovSvqi8INt9ySqbThfjOf7FFqwXfdlk4TquKI6SY+K3ginCak7As1gfNfVjMNGMZSd04rDfYNZs5FKXaQXoU2Kazh+pOlgwVlQJMsFybcAeNFPF9NFtfWrTV4Lb8YCxM7EPq4hZebKJsNRAuibpw6FIb42JSLRtOd77RqZs99ouW3JJs3FYQL0sj8tsYwYeGZC4TRZyTuTrTX1gjTGHvjrLpinm40mVHBKf5gRgs9Ku/A2sypboomyvvxtmJWfMtLL92nT4rZzq4PSgY/LiSE562+kwhPpYDtrURlCNiA/9ZbA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=s1zJaDsCknzbjiRt/StSITflJScs7eZVdKcjpsdgjsI=; b=ev4nEbIT7ZjdwzBc5xW1PhxZPJppJlzPkhdhNwttquRQxJJCQXZL55EbUdeZxbtPSplLsnq7IvKwRQBHMH9ra5rt/6EYp863XKvnG8cPNuJprat50AFX3W4jScQhmUjBSqmW0qhMaGuFTfP5ECkw8GsXdJPH8Owv8OUVRJUiGMM= Authentication-Results: lists.linaro.org; dkim=none (message not signed) header.d=none;lists.linaro.org; dmarc=none action=none header.from=amd.com; Received: from MN2PR12MB3775.namprd12.prod.outlook.com (2603:10b6:208:159::19) by BL0PR12MB4932.namprd12.prod.outlook.com (2603:10b6:208:1c2::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.21; Thu, 15 Oct 2020 14:21:45 +0000 Received: from MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::f8f7:7403:1c92:3a60]) by MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::f8f7:7403:1c92:3a60%6]) with mapi id 15.20.3477.021; Thu, 15 Oct 2020 14:21:45 +0000 Subject: Re: [PATCH v4 06/10] drm/gem: Use struct dma_buf_map in GEM vmap ops and convert GEM backends To: Thomas Zimmermann , maarten.lankhorst@linux.intel.com, mripard@kernel.org, airlied@linux.ie, daniel@ffwll.ch, sam@ravnborg.org, alexander.deucher@amd.com, kraxel@redhat.com, l.stach@pengutronix.de, linux+etnaviv@armlinux.org.uk, christian.gmeiner@gmail.com, inki.dae@samsung.com, jy0922.shim@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, kgene@kernel.org, krzk@kernel.org, yuq825@gmail.com, bskeggs@redhat.com, robh@kernel.org, tomeu.vizoso@collabora.com, steven.price@arm.com, alyssa.rosenzweig@collabora.com, hjc@rock-chips.com, heiko@sntech.de, hdegoede@redhat.com, sean@poorly.run, eric@anholt.net, oleksandr_andrushchenko@epam.com, ray.huang@amd.com, sumit.semwal@linaro.org, emil.velikov@collabora.com, luben.tuikov@amd.com, apaneers@amd.com, linus.walleij@linaro.org, melissa.srw@gmail.com, chris@chris-wilson.co.uk, miaoqinglang@huawei.com References: <20201015123806.32416-1-tzimmermann@suse.de> <20201015123806.32416-7-tzimmermann@suse.de> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <6bd7d5cf-06c8-3fd8-9bbe-a80ff6bb327e@amd.com> Date: Thu, 15 Oct 2020 16:21:31 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 In-Reply-To: <20201015123806.32416-7-tzimmermann@suse.de> Content-Language: en-US X-Originating-IP: [80.187.123.114] X-ClientProxiedBy: AM0PR03CA0058.eurprd03.prod.outlook.com (2603:10a6:208::35) To MN2PR12MB3775.namprd12.prod.outlook.com (2603:10b6:208:159::19) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [192.168.137.56] (80.187.123.114) by AM0PR03CA0058.eurprd03.prod.outlook.com (2603:10a6:208::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.20 via Frontend Transport; Thu, 15 Oct 2020 14:21:37 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 1402a292-410c-4dd7-5df2-08d87115a47e X-MS-TrafficTypeDiagnostic: BL0PR12MB4932: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qZE7L/zH5aGxqiqWmrxr/TkD8SGVxq492TWlZDRQ8SWP9LUeAjghyncA+V0RbcCiQOlF9BpSa0szaBr1rLMb4pd7NGjinWmMKZzBxFhl/AbSzHryacecP3jmc8SciQoEijiChjkblXtHc4usMJHnAzcMutTXYvIX5HfX6Nm+xOdzuOQCtRKC8c4GqNrw9YZ9L8ZX7aUG8Jez2Kf7T8MqZ1TKwlDddWh5CcJb0lhqwIRd8/qFy18d0ZTQ4NxTPYPSxuSOLxsOH7f+KxYILSZqFnNsnutVIAcmfePky9fzaNcsZwXH2qM8YnHjzPKV14l7WHo1Jo4RzSeIOOJY8yqf3Df5uGdhO9DrcUMwhgotFpmcaIVCTbe+MfIKTxkpI7od6w3lF2gvYlK/Q58+O1aXt5seGL7Bw9/go+uTg39iKc1BB9wtePnfCCvCmVcSs0aQ X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR12MB3775.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(39860400002)(396003)(366004)(136003)(376002)(346002)(36756003)(5660300002)(8936002)(30864003)(478600001)(8676002)(26005)(16526019)(7406005)(34490700002)(186003)(2616005)(16576012)(316002)(6666004)(6486002)(31686004)(52116002)(66574015)(86362001)(66946007)(956004)(83380400001)(2906002)(31696002)(4326008)(66556008)(66476007)(7416002)(921003)(43740500002)(579004)(559001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: m1LAH0A49qIsnoSwQsouBc95tPZsFvI7ILL+HyITCdwV3eSL2iszdF0dHXxMB2oIGD335BwU2D+eG6IuPWolrqv1GJ40za1adhpl3RbZ1r2ntg6FKwrWvSGDqY/euNspLIimOkkAyhMiIudpJhNHjSvToTllhvq/vOB6yXkJ2pK4/2RJUktLTxIQoz6/ZYV5B2FXrDyhgO+doQDORwIK5yqGiTmmTcP2JsACozYQc3xOqlQsDRoVZr6KFOB9/QRdbB1D0k+BYNH8mBU+lCqEXTZeUd3OX2d9Rz7ZUreK8Ld9YFw2teXCkJHPYtYvf7YtFAidpvqnsa+zqvxTCXrJgmEAdWAe62ob7ZrIeKcImgVPpNZC/qogN/FOi1n+ZaYI3EcWs+YLZ8jVE6Gq1sKrVFAlIEv0R5yxdIsbXVqsWuRspmjOiPY5BM1SKSwMC2GfuPK5vkzYOfg1ayT2mmJ4TRuyKXDO+/VHy09vY+KAuYSJFZ/+4PZ5ZM7hcJwk88LVWjAawTnzzWpbtlLyGfKChy2Fcf2yhG+/XLwUVWFJ5kZwGepbJJfsCK/1qs+idevkt4XuzMmAYCjuFjcGdu/5NaHKJDvaGTN63plDDLEo6/KcQ7lBx58OAjHWn7gqC2tgnk+/IDbC3P8DUpKFUGF2Tg== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1402a292-410c-4dd7-5df2-08d87115a47e X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3775.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Oct 2020 14:21:44.9217 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: hUctmsKmzwzlQVH4lhjqevgxGnxCyHnHl623cVkEli3p3TuwQp67xFQjNmWsqHz4 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR12MB4932 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-samsung-soc@vger.kernel.org, lima@lists.freedesktop.org, nouveau@lists.freedesktop.org, etnaviv@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, virtualization@lists.linux-foundation.org, linaro-mm-sig@lists.linaro.org, linux-rockchip@lists.infradead.org, dri-devel@lists.freedesktop.org, xen-devel@lists.xenproject.org, spice-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" QW0gMTUuMTAuMjAgdW0gMTQ6Mzggc2NocmllYiBUaG9tYXMgWmltbWVybWFubjoKPiBUaGlzIHBh dGNoIHJlcGxhY2VzIHRoZSB2bWFwL3Z1bm1hcCdzIHVzZSBvZiByYXcgcG9pbnRlcnMgaW4gR0VN IG9iamVjdAo+IGZ1bmN0aW9ucyB3aXRoIGluc3RhbmNlcyBvZiBzdHJ1Y3QgZG1hX2J1Zl9tYXAu IEdFTSBiYWNrZW5kcyBhcmUKPiBjb252ZXJ0ZWQgYXMgd2VsbC4gRm9yIG1vc3Qgb2YgdGhlbSwg dGhpcyBzaW1wbHkgY2hhbmdlcyB0aGUgcmV0dXJuZWQgdHlwZS4KPgo+IFRUTS1iYXNlZCBkcml2 ZXJzIG5vdyByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBtZW1v cnksCj4gZWl0aGVyIHN5c3RlbSBvciBJL08gbWVtb3J5LiBHRU0gVlJBTSBoZWxwZXJzIGFuZCBx eGwgbm93IHVzZSB0dG1fYm9fdm1hcCgpCj4gZXQgYWwuIEFtZGdwdSwgbm91dmVhdSBhbmQgcmFk ZW9uIHVzZSBkcm1fZ2VtX3R0bV92bWFwKCkgZXQgYWwgaW5zdGVhZCBvZgo+IGltcGxlbWVudGlu ZyB0aGVpciBvd24gdm1hcCBjYWxsYmFja3MuCj4KPiB2NDoKPiAJKiB1c2UgdHRtX2JvX3ZtYXAo KSwgZHJtX2dlbV90dG1fdm1hcCgpLCBldCBhbC4gKERhbmllbCwgQ2hyaXN0aWFuKQo+IAkqIGZp eCBhIHRyYWlsaW5nIHsgaW4gZHJtX2dlbV92bWFwKCkKPiAJKiByZW1vdmUgc2V2ZXJhbCBlbXB0 eSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBjb252ZXJ0aW5nIHRoZW0gKERhbmllbCkKPiAJKiBjb21t ZW50IHVzZXMgb2YgcmF3IHBvaW50ZXJzIHdpdGggYSBUT0RPIChEYW5pZWwpCj4gCSogVE9ETyBs aXN0OiBjb252ZXJ0IG1vcmUgaGVscGVycyB0byB1c2Ugc3RydWN0IGRtYV9idWZfbWFwCj4KPiBT aWduZWQtb2ZmLWJ5OiBUaG9tYXMgWmltbWVybWFubiA8dHppbW1lcm1hbm5Ac3VzZS5kZT4KClRo ZSBhbWRncHUgY2hhbmdlcyBsb29rIGdvb2QgdG8gbWUsIGJ1dCBJIGNhbid0IGZ1bGx5IGp1ZGdl IHRoZSBvdGhlciBzdHVmZi4KCkFja2VkLWJ5OiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4u a29lbmlnQGFtZC5jb20+Cgo+IC0tLQo+ICAgRG9jdW1lbnRhdGlvbi9ncHUvdG9kby5yc3QgICAg ICAgICAgICAgICAgICB8ICAxOCArKysrCj4gICBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAg ICAgICAgICAgICAgICAgIHwgICAyICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9kbWFfYnVmLmMgfCAgMzYgLS0tLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2RtYV9idWYuaCB8ICAgMiAtCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfZ2VtLmMgICAgIHwgICA1ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfb2JqZWN0LmggIHwgICAxIC0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2N1 cnNvci5jICAgICAgICAgICAgfCAgMjcgKysrLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hc3QvYXN0 X2Rydi5oICAgICAgICAgICAgICAgfCAgIDcgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2Vt LmMgICAgICAgICAgICAgICAgICAgfCAgMjMgKysrLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1f Z2VtX2NtYV9oZWxwZXIuYyAgICAgICAgfCAgMTAgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1f Z2VtX3NobWVtX2hlbHBlci5jICAgICAgfCAgNDggKysrKystLS0tCj4gICBkcml2ZXJzL2dwdS9k cm0vZHJtX2dlbV92cmFtX2hlbHBlci5jICAgICAgIHwgMTA3ICsrKysrKysrKystLS0tLS0tLS0t Cj4gICBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5oICAgICAgIHwgICAyICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9wcmltZS5jIHwgICA5ICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5jICAgICAgICAgICAgIHwgICA2ICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMgICAgICAgICAgIHwgIDExICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX21vZGUuYyAgICAgIHwgIDEwICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnICAgICAgICAgICAgIHwgICAxICsK PiAgIGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uaCAgICAgICAgfCAgIDIgLQo+ ICAgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYyAgICAgICB8ICAgNiArLQo+ ICAgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uaCAgICAgICB8ICAgMiAtCj4g ICBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ByaW1lLmMgICAgIHwgIDIwIC0tLS0K PiAgIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9wZXJmY250LmMgfCAgMTQgKy0t Cj4gICBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kaXNwbGF5LmMgICAgICAgICAgIHwgIDExICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kcmF3LmMgICAgICAgICAgICAgIHwgIDE0ICsr LQo+ICAgZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJ2LmggICAgICAgICAgICAgICB8ICAxMSAr LQo+ICAgZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfb2JqZWN0LmMgICAgICAgICAgICB8ICAzMSAr KystLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX29iamVjdC5oICAgICAgICAgICAgfCAg IDIgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX3ByaW1lLmMgICAgICAgICAgICAgfCAg MTIgKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oICAgICAgICAgICAgIHwg ICAxIC0KPiAgIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jICAgICAgICAgfCAg IDcgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3ByaW1lLmMgICAgICAgfCAg MjAgLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uYyB8 ICAyMiArKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5o IHwgICA0ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdGlueS9jaXJydXMuYyAgICAgICAgICAgICAg IHwgIDEwICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdGlueS9nbTEydTMyMC5jICAgICAgICAgICAg IHwgIDEwICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rlc2V0LmMgICAgICAgICAg IHwgICA4ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbW9kZS5jICAgICAg IHwgIDExICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jICAgICAgICAgICAgICAg IHwgICA2ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaCAgICAgICAgICAgICAg IHwgICAyICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Rydi5jICAgICAgICAgICAg IHwgIDE2ICsrLQo+ICAgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jICAg ICB8ICAxOCArKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmgg ICAgIHwgICA2ICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtLmggICAgICAgICAgICAgICAgICAg ICAgIHwgICA1ICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaCAgICAgICAg ICAgIHwgICAyICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oICAgICAg ICAgIHwgICA0ICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmggICAgICAg ICAgIHwgIDE0ICstLQo+ICAgNDcgZmlsZXMgY2hhbmdlZCwgMzIxIGluc2VydGlvbnMoKyksIDI5 NSBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS90b2RvLnJz dCBiL0RvY3VtZW50YXRpb24vZ3B1L3RvZG8ucnN0Cj4gaW5kZXggNzAwNjM3ZTI1ZWNkLi43ZTZm YzNjMDRhZGQgMTAwNjQ0Cj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvdG9kby5yc3QKPiArKysg Yi9Eb2N1bWVudGF0aW9uL2dwdS90b2RvLnJzdAo+IEBAIC00NDYsNiArNDQ2LDI0IEBAIENvbnRh Y3Q6IFZpbGxlIFN5cmrDpGzDpCwgRGFuaWVsIFZldHRlcgo+ICAgCj4gICBMZXZlbDogSW50ZXJt ZWRpYXRlCj4gICAKPiArVXNlIHN0cnVjdCBkbWFfYnVmX21hcCB0aHJvdWdob3V0IGNvZGViYXNl Cj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICsKPiArUG9p bnRlcnMgdG8gc2hhcmVkIGRldmljZSBtZW1vcnkgYXJlIHN0b3JlZCBpbiBzdHJ1Y3QgZG1hX2J1 Zl9tYXAuIEVhY2gKPiAraW5zdGFuY2Uga25vd3Mgd2hldGhlciBpdCByZWZlcnMgdG8gc3lzdGVt IG9yIEkvTyBtZW1vcnkuIE1vc3Qgb2YgdGhlIERSTS13aWRlCj4gK2ludGVyZmFjZSBoYXZlIGJl ZW4gY29udmVydGVkIHRvIHVzZSBzdHJ1Y3QgZG1hX2J1Zl9tYXAsIGJ1dCBpbXBsZW1lbnRhdGlv bnMKPiArb2Z0ZW4gc3RpbGwgdXNlIHJhdyBwb2ludGVycy4KPiArCj4gK1RoZSB0YXNrIGlzIHRv IHVzZSBzdHJ1Y3QgZG1hX2J1Zl9tYXAgd2hlcmUgaXQgbWFrZXMgc2Vuc2UuCj4gKwo+ICsqIE1l bW9yeSBtYW5hZ2VycyBzaG91bGQgdXNlIHN0cnVjdCBkbWFfYnVmX21hcCBmb3IgZG1hLWJ1Zi1p bXBvcnRlZCBidWZmZXJzLgo+ICsqIFRUTSBtaWdodCBiZW5lZml0IGZyb20gdXNpbmcgc3RydWN0 IGRtYV9idWZfbWFwIGludGVybmFsbHkuCj4gKyogRnJhbWVidWZmZXIgY29weWluZyBhbmQgYmxp dHRpbmcgaGVscGVycyBzaG91bGQgb3BlcmF0ZSBvbiBzdHJ1Y3QgZG1hX2J1Zl9tYXAuCj4gKwo+ ICtDb250YWN0OiBUaG9tYXMgWmltbWVybWFubiA8dHppbW1lcm1hbm5Ac3VzZS5kZT4sIENocmlz dGlhbiBLw7ZuaWcsIERhbmllbCBWZXR0ZXIKPiArCj4gK0xldmVsOiBJbnRlcm1lZGlhdGUKPiAr Cj4gICAKPiAgIENvcmUgcmVmYWN0b3JpbmdzCj4gICA9PT09PT09PT09PT09PT09PQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmln Cj4gaW5kZXggMTQ3ZDYxYjk2NzRlLi4zMTk4MzliODdkMzcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+IEBAIC0y MzksNiArMjM5LDcgQEAgY29uZmlnIERSTV9SQURFT04KPiAgIAlzZWxlY3QgRldfTE9BREVSCj4g ICAgICAgICAgIHNlbGVjdCBEUk1fS01TX0hFTFBFUgo+ICAgICAgICAgICBzZWxlY3QgRFJNX1RU TQo+ICsJc2VsZWN0IERSTV9UVE1fSEVMUEVSCj4gICAJc2VsZWN0IFBPV0VSX1NVUFBMWQo+ICAg CXNlbGVjdCBIV01PTgo+ICAgCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCj4gQEAgLTI1 OSw2ICsyNjAsNyBAQCBjb25maWcgRFJNX0FNREdQVQo+ICAgCXNlbGVjdCBEUk1fS01TX0hFTFBF Ugo+ICAgCXNlbGVjdCBEUk1fU0NIRUQKPiAgIAlzZWxlY3QgRFJNX1RUTQo+ICsJc2VsZWN0IERS TV9UVE1fSEVMUEVSCj4gICAJc2VsZWN0IFBPV0VSX1NVUFBMWQo+ICAgCXNlbGVjdCBIV01PTgo+ ICAgCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5jCj4gaW5kZXggNWI0NjVhYjc3NGQxLi5lNTkxOWVmY2E4 NzAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9i dWYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMK PiBAQCAtNDEsNDIgKzQxLDYgQEAKPiAgICNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UtYXJyYXku aD4KPiAgICNpbmNsdWRlIDxsaW51eC9wY2ktcDJwZG1hLmg+Cj4gICAKPiAtLyoqCj4gLSAqIGFt ZGdwdV9nZW1fcHJpbWVfdm1hcCAtICZkbWFfYnVmX29wcy52bWFwIGltcGxlbWVudGF0aW9uCj4g LSAqIEBvYmo6IEdFTSBCTwo+IC0gKgo+IC0gKiBTZXRzIHVwIGFuIGluLWtlcm5lbCB2aXJ0dWFs IG1hcHBpbmcgb2YgdGhlIEJPJ3MgbWVtb3J5Lgo+IC0gKgo+IC0gKiBSZXR1cm5zOgo+IC0gKiBU aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBtYXBwaW5nIG9yIGFuIGVycm9yIHBvaW50ZXIuCj4g LSAqLwo+IC12b2lkICphbWRncHVfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopCj4gLXsKPiAtCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gZ2VtX3RvX2FtZGdwdV9ibyhv YmopOwo+IC0JaW50IHJldDsKPiAtCj4gLQlyZXQgPSB0dG1fYm9fa21hcCgmYm8tPnRibywgMCwg Ym8tPnRiby5udW1fcGFnZXMsCj4gLQkJCSAgJmJvLT5kbWFfYnVmX3ZtYXApOwo+IC0JaWYgKHJl dCkKPiAtCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+IC0KPiAtCXJldHVybiBiby0+ZG1hX2J1Zl92 bWFwLnZpcnR1YWw7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBhbWRncHVfZ2VtX3ByaW1lX3Z1bm1h cCAtICZkbWFfYnVmX29wcy52dW5tYXAgaW1wbGVtZW50YXRpb24KPiAtICogQG9iajogR0VNIEJP Cj4gLSAqIEB2YWRkcjogVmlydHVhbCBhZGRyZXNzICh1bnVzZWQpCj4gLSAqCj4gLSAqIFRlYXJz IGRvd24gdGhlIGluLWtlcm5lbCB2aXJ0dWFsIG1hcHBpbmcgb2YgdGhlIEJPJ3MgbWVtb3J5Lgo+ IC0gKi8KPiAtdm9pZCBhbWRncHVfZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiwgdm9pZCAqdmFkZHIpCj4gLXsKPiAtCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gZ2Vt X3RvX2FtZGdwdV9ibyhvYmopOwo+IC0KPiAtCXR0bV9ib19rdW5tYXAoJmJvLT5kbWFfYnVmX3Zt YXApOwo+IC19Cj4gLQo+ICAgLyoqCj4gICAgKiBhbWRncHVfZ2VtX3ByaW1lX21tYXAgLSAmZHJt X2RyaXZlci5nZW1fcHJpbWVfbW1hcCBpbXBsZW1lbnRhdGlvbgo+ICAgICogQG9iajogR0VNIEJP Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVm LmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5oCj4gaW5kZXgg MmM1Yzg0YTA2YmI5Li4zOWI1Yjk2MTZmZDggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9idWYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmgKPiBAQCAtMzEsOCArMzEsNiBAQCBzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKmFtZGdwdV9nZW1fcHJpbWVfaW1wb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Cj4gICAJCQkJCSAgICBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zik7Cj4gICBib29sIGFtZGdwdV9k bWFidWZfaXNfeGdtaV9hY2Nlc3NpYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAg CQkJCSAgICAgIHN0cnVjdCBhbWRncHVfYm8gKmJvKTsKPiAtdm9pZCAqYW1kZ3B1X2dlbV9wcmlt ZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAtdm9pZCBhbWRncHVfZ2VtX3By aW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+ICAg aW50IGFtZGdwdV9nZW1fcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKPiAg IAkJCSAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwo+IGluZGV4IGJlMDhhNjNlZjU4Yy4uNTc2NjU5ODI3ZTc0 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwo+IEBAIC0zMyw2 ICszMyw3IEBACj4gICAKPiAgICNpbmNsdWRlIDxkcm0vYW1kZ3B1X2RybS5oPgo+ICAgI2luY2x1 ZGUgPGRybS9kcm1fZGVidWdmcy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdHRtX2hlbHBl ci5oPgo+ICAgCj4gICAjaW5jbHVkZSAiYW1kZ3B1LmgiCj4gICAjaW5jbHVkZSAiYW1kZ3B1X2Rp c3BsYXkuaCIKPiBAQCAtMjIwLDggKzIyMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2dl bV9vYmplY3RfZnVuY3MgYW1kZ3B1X2dlbV9vYmplY3RfZnVuY3MgPSB7Cj4gICAJLm9wZW4gPSBh bWRncHVfZ2VtX29iamVjdF9vcGVuLAo+ICAgCS5jbG9zZSA9IGFtZGdwdV9nZW1fb2JqZWN0X2Ns b3NlLAo+ICAgCS5leHBvcnQgPSBhbWRncHVfZ2VtX3ByaW1lX2V4cG9ydCwKPiAtCS52bWFwID0g YW1kZ3B1X2dlbV9wcmltZV92bWFwLAo+IC0JLnZ1bm1hcCA9IGFtZGdwdV9nZW1fcHJpbWVfdnVu bWFwLAo+ICsJLnZtYXAgPSBkcm1fZ2VtX3R0bV92bWFwLAo+ICsJLnZ1bm1hcCA9IGRybV9nZW1f dHRtX3Z1bm1hcCwKPiAgIH07Cj4gICAKPiAgIC8qCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9vYmplY3QuaAo+IGluZGV4IDEzMmU1Zjk1NTE4MC4uMDEyOTZlZjBkNjczIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaAo+IEBAIC0x MDAsNyArMTAwLDYgQEAgc3RydWN0IGFtZGdwdV9ibyB7Cj4gICAJc3RydWN0IGFtZGdwdV9ibwkJ KnBhcmVudDsKPiAgIAlzdHJ1Y3QgYW1kZ3B1X2JvCQkqc2hhZG93Owo+ICAgCj4gLQlzdHJ1Y3Qg dHRtX2JvX2ttYXBfb2JqCQlkbWFfYnVmX3ZtYXA7Cj4gICAJc3RydWN0IGFtZGdwdV9tbgkJKm1u Owo+ICAgCj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfY3Vyc29y LmMgYi9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9jdXJzb3IuYwo+IGluZGV4IGUwZjQ2MTM5MThh ZC4uNzQyZDQzYTdlZGY0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2N1 cnNvci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfY3Vyc29yLmMKPiBAQCAtMzks NyArMzksNyBAQCBzdGF0aWMgdm9pZCBhc3RfY3Vyc29yX2Zpbmkoc3RydWN0IGFzdF9wcml2YXRl ICphc3QpCj4gICAKPiAgIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhc3QtPmN1cnNvci5n Ym8pOyArK2kpIHsKPiAgIAkJZ2JvID0gYXN0LT5jdXJzb3IuZ2JvW2ldOwo+IC0JCWRybV9nZW1f dnJhbV92dW5tYXAoZ2JvLCBhc3QtPmN1cnNvci52YWRkcltpXSk7Cj4gKwkJZHJtX2dlbV92cmFt X3Z1bm1hcChnYm8sICZhc3QtPmN1cnNvci5tYXBbaV0pOwo+ICAgCQlkcm1fZ2VtX3ZyYW1fdW5w aW4oZ2JvKTsKPiAgIAkJZHJtX2dlbV92cmFtX3B1dChnYm8pOwo+ICAgCX0KPiBAQCAtNjAsNyAr NjAsNyBAQCBpbnQgYXN0X2N1cnNvcl9pbml0KHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0KQo+ICAg CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmYXN0LT5iYXNlOwo+ICAgCXNpemVfdCBzaXplLCBp Owo+ICAgCXN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm87Cj4gLQl2b2lkIF9faW9tZW0g KnZhZGRyOwo+ICsJc3RydWN0IGRtYV9idWZfbWFwIG1hcDsKPiAgIAlpbnQgcmV0Owo+ICAgCj4g ICAJc2l6ZSA9IHJvdW5kdXAoQVNUX0hXQ19TSVpFICsgQVNUX0hXQ19TSUdOQVRVUkVfU0laRSwg UEFHRV9TSVpFKTsKPiBAQCAtNzcsMTYgKzc3LDE1IEBAIGludCBhc3RfY3Vyc29yX2luaXQoc3Ry dWN0IGFzdF9wcml2YXRlICphc3QpCj4gICAJCQlkcm1fZ2VtX3ZyYW1fcHV0KGdibyk7Cj4gICAJ CQlnb3RvIGVycl9kcm1fZ2VtX3ZyYW1fcHV0Owo+ICAgCQl9Cj4gLQkJdmFkZHIgPSBkcm1fZ2Vt X3ZyYW1fdm1hcChnYm8pOwo+IC0JCWlmIChJU19FUlIodmFkZHIpKSB7Cj4gLQkJCXJldCA9IFBU Ul9FUlIodmFkZHIpOwo+ICsJCXJldCA9IGRybV9nZW1fdnJhbV92bWFwKGdibywgJm1hcCk7Cj4g KwkJaWYgKHJldCkgewo+ICAgCQkJZHJtX2dlbV92cmFtX3VucGluKGdibyk7Cj4gICAJCQlkcm1f Z2VtX3ZyYW1fcHV0KGdibyk7Cj4gICAJCQlnb3RvIGVycl9kcm1fZ2VtX3ZyYW1fcHV0Owo+ICAg CQl9Cj4gICAKPiAgIAkJYXN0LT5jdXJzb3IuZ2JvW2ldID0gZ2JvOwo+IC0JCWFzdC0+Y3Vyc29y LnZhZGRyW2ldID0gdmFkZHI7Cj4gKwkJYXN0LT5jdXJzb3IubWFwW2ldID0gbWFwOwo+ICAgCX0K PiAgIAo+ICAgCXJldHVybiBkcm1tX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhc3RfY3Vyc29y X3JlbGVhc2UsIE5VTEwpOwo+IEBAIC05NSw3ICs5NCw3IEBAIGludCBhc3RfY3Vyc29yX2luaXQo c3RydWN0IGFzdF9wcml2YXRlICphc3QpCj4gICAJd2hpbGUgKGkpIHsKPiAgIAkJLS1pOwo+ICAg CQlnYm8gPSBhc3QtPmN1cnNvci5nYm9baV07Cj4gLQkJZHJtX2dlbV92cmFtX3Z1bm1hcChnYm8s IGFzdC0+Y3Vyc29yLnZhZGRyW2ldKTsKPiArCQlkcm1fZ2VtX3ZyYW1fdnVubWFwKGdibywgJmFz dC0+Y3Vyc29yLm1hcFtpXSk7Cj4gICAJCWRybV9nZW1fdnJhbV91bnBpbihnYm8pOwo+ICAgCQlk cm1fZ2VtX3ZyYW1fcHV0KGdibyk7Cj4gICAJfQo+IEBAIC0xNzAsNiArMTY5LDcgQEAgaW50IGFz dF9jdXJzb3JfYmxpdChzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCwgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIpCj4gICB7Cj4gICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZhc3QtPmJhc2U7 Cj4gICAJc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibzsKPiArCXN0cnVjdCBkbWFfYnVm X21hcCBtYXA7Cj4gICAJaW50IHJldDsKPiAgIAl2b2lkICpzcmM7Cj4gICAJdm9pZCBfX2lvbWVt ICpkc3Q7Cj4gQEAgLTE4MywxOCArMTgzLDE3IEBAIGludCBhc3RfY3Vyc29yX2JsaXQoc3RydWN0 IGFzdF9wcml2YXRlICphc3QsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQo+ICAgCXJldCA9 IGRybV9nZW1fdnJhbV9waW4oZ2JvLCAwKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gcmV0 Owo+IC0Jc3JjID0gZHJtX2dlbV92cmFtX3ZtYXAoZ2JvKTsKPiAtCWlmIChJU19FUlIoc3JjKSkg ewo+IC0JCXJldCA9IFBUUl9FUlIoc3JjKTsKPiArCXJldCA9IGRybV9nZW1fdnJhbV92bWFwKGdi bywgJm1hcCk7Cj4gKwlpZiAocmV0KQo+ICAgCQlnb3RvIGVycl9kcm1fZ2VtX3ZyYW1fdW5waW47 Cj4gLQl9Cj4gKwlzcmMgPSBtYXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0 aW9uIHByb3Blcmx5ICovCj4gICAKPiAtCWRzdCA9IGFzdC0+Y3Vyc29yLnZhZGRyW2FzdC0+Y3Vy c29yLm5leHRfaW5kZXhdOwo+ICsJZHN0ID0gYXN0LT5jdXJzb3IubWFwW2FzdC0+Y3Vyc29yLm5l eHRfaW5kZXhdLnZhZGRyX2lvbWVtOwo+ICAgCj4gICAJLyogZG8gZGF0YSB0cmFuc2ZlciB0byBj dXJzb3IgQk8gKi8KPiAgIAl1cGRhdGVfY3Vyc29yX2ltYWdlKGRzdCwgc3JjLCBmYi0+d2lkdGgs IGZiLT5oZWlnaHQpOwo+ICAgCj4gLQlkcm1fZ2VtX3ZyYW1fdnVubWFwKGdibywgc3JjKTsKPiAr CWRybV9nZW1fdnJhbV92dW5tYXAoZ2JvLCAmbWFwKTsKPiAgIAlkcm1fZ2VtX3ZyYW1fdW5waW4o Z2JvKTsKPiAgIAo+ICAgCXJldHVybiAwOwo+IEBAIC0yNTcsNyArMjU2LDcgQEAgdm9pZCBhc3Rf Y3Vyc29yX3Nob3coc3RydWN0IGFzdF9wcml2YXRlICphc3QsIGludCB4LCBpbnQgeSwKPiAgIAl1 OCBfX2lvbWVtICpzaWc7Cj4gICAJdTgganJlZzsKPiAgIAo+IC0JZHN0ID0gYXN0LT5jdXJzb3Iu dmFkZHJbYXN0LT5jdXJzb3IubmV4dF9pbmRleF07Cj4gKwlkc3QgPSBhc3QtPmN1cnNvci5tYXBb YXN0LT5jdXJzb3IubmV4dF9pbmRleF0udmFkZHI7Cj4gICAKPiAgIAlzaWcgPSBkc3QgKyBBU1Rf SFdDX1NJWkU7Cj4gICAJd3JpdGVsKHgsIHNpZyArIEFTVF9IV0NfU0lHTkFUVVJFX1gpOwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9hc3QvYXN0X2Rydi5oCj4gaW5kZXggNDY3MDQ5Y2E4NDMwLi5mOTYzMTQxZGQ4NTEgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vYXN0L2FzdF9kcnYuaAo+IEBAIC0yOCwxMCArMjgsMTEgQEAKPiAgICNpZm5kZWYgX19B U1RfRFJWX0hfXwo+ICAgI2RlZmluZSBfX0FTVF9EUlZfSF9fCj4gICAKPiAtI2luY2x1ZGUgPGxp bnV4L3R5cGVzLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9pby5oPgo+ICsjaW5jbHVkZSA8bGludXgv ZG1hLWJ1Zi1tYXAuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPiAgICNpbmNsdWRlIDxs aW51eC9pMmMtYWxnby1iaXQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC90eXBlcy5oPgo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4K PiAgICNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiBAQCAtMTMxLDcgKzEzMiw3IEBAIHN0cnVj dCBhc3RfcHJpdmF0ZSB7Cj4gICAKPiAgIAlzdHJ1Y3Qgewo+ICAgCQlzdHJ1Y3QgZHJtX2dlbV92 cmFtX29iamVjdCAqZ2JvW0FTVF9ERUZBVUxUX0hXQ19OVU1dOwo+IC0JCXZvaWQgX19pb21lbSAq dmFkZHJbQVNUX0RFRkFVTFRfSFdDX05VTV07Cj4gKwkJc3RydWN0IGRtYV9idWZfbWFwIG1hcFtB U1RfREVGQVVMVF9IV0NfTlVNXTsKPiAgIAkJdW5zaWduZWQgaW50IG5leHRfaW5kZXg7Cj4gICAJ fSBjdXJzb3I7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKPiBpbmRleCAxZGE2N2QzNGU1NWQuLmE4OWFkNDU3 MGUzYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2RybV9nZW0uYwo+IEBAIC0zNiw2ICszNiw3IEBACj4gICAjaW5jbHVkZSA8 bGludXgvcGFnZW1hcC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+Cj4gICAjaW5j bHVkZSA8bGludXgvZG1hLWJ1Zi5oPgo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4K PiAgICNpbmNsdWRlIDxsaW51eC9tZW1fZW5jcnlwdC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3Bh Z2V2ZWMuaD4KPiAgIAo+IEBAIC0xMjA3LDI2ICsxMjA4LDMwIEBAIHZvaWQgZHJtX2dlbV91bnBp bihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAgIAo+ICAgdm9pZCAqZHJtX2dlbV92bWFw KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ICAgewo+IC0Jdm9pZCAqdmFkZHI7Cj4gKwlz dHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICsJaW50IHJldDsKPiAgIAo+IC0JaWYgKG9iai0+ZnVu Y3MtPnZtYXApCj4gLQkJdmFkZHIgPSBvYmotPmZ1bmNzLT52bWFwKG9iaik7Cj4gLQllbHNlCj4g LQkJdmFkZHIgPSBFUlJfUFRSKC1FT1BOT1RTVVBQKTsKPiArCWlmICghb2JqLT5mdW5jcy0+dm1h cCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7Cj4gICAKPiAtCWlmICghdmFkZHIp Cj4gLQkJdmFkZHIgPSBFUlJfUFRSKC1FTk9NRU0pOwo+ICsJcmV0ID0gb2JqLT5mdW5jcy0+dm1h cChvYmosICZtYXApOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJ ZWxzZSBpZiAoZG1hX2J1Zl9tYXBfaXNfbnVsbCgmbWFwKSkKPiArCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKPiAgIAo+IC0JcmV0dXJuIHZhZGRyOwo+ICsJcmV0dXJuIG1hcC52YWRkcjsKPiAg IH0KPiAgIAo+ICAgdm9pZCBkcm1fZ2VtX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aiwgdm9pZCAqdmFkZHIpCj4gICB7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwID0gRE1BX0JV Rl9NQVBfSU5JVF9WQUREUih2YWRkcik7Cj4gKwo+ICAgCWlmICghdmFkZHIpCj4gICAJCXJldHVy bjsKPiAgIAo+ICAgCWlmIChvYmotPmZ1bmNzLT52dW5tYXApCj4gLQkJb2JqLT5mdW5jcy0+dnVu bWFwKG9iaiwgdmFkZHIpOwo+ICsJCW9iai0+ZnVuY3MtPnZ1bm1hcChvYmosICZtYXApOwo+ICAg fQo+ICAgCj4gICAvKioKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fY21h X2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fY21hX2hlbHBlci5jCj4gaW5kZXgg ZDUyNzQ4NWVhMGI3Li5iNTdlM2U5MjIyZjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2RybV9nZW1fY21hX2hlbHBlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fY21h X2hlbHBlci5jCj4gQEAgLTUxOSw2ICs1MTksOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2Vt X2NtYV9wcmltZV9tbWFwKTsKPiAgICAqIGRybV9nZW1fY21hX3ByaW1lX3ZtYXAgLSBtYXAgYSBD TUEgR0VNIG9iamVjdCBpbnRvIHRoZSBrZXJuZWwncyB2aXJ0dWFsCj4gICAgKiAgICAgYWRkcmVz cyBzcGFjZQo+ICAgICogQG9iajogR0VNIG9iamVjdAo+ICsgKiBAbWFwOiBSZXR1cm5zIHRoZSBr ZXJuZWwgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBDTUEgR0VNIG9iamVjdCdzIGJhY2tpbmcKPiAr ICogICAgICAgc3RvcmUuCj4gICAgKgo+ICAgICogVGhpcyBmdW5jdGlvbiBtYXBzIGEgYnVmZmVy IGV4cG9ydGVkIHZpYSBEUk0gUFJJTUUgaW50byB0aGUga2VybmVsJ3MKPiAgICAqIHZpcnR1YWwg YWRkcmVzcyBzcGFjZS4gU2luY2UgdGhlIENNQSBidWZmZXJzIGFyZSBhbHJlYWR5IG1hcHBlZCBp bnRvIHRoZQo+IEBAIC01MjcsMTMgKzUyOSwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2Vt X2NtYV9wcmltZV9tbWFwKTsKPiAgICAqIGRyaXZlcidzICZkcm1fZ2VtX29iamVjdF9mdW5jcy52 bWFwIGNhbGxiYWNrLgo+ICAgICoKPiAgICAqIFJldHVybnM6Cj4gLSAqIFRoZSBrZXJuZWwgdmly dHVhbCBhZGRyZXNzIG9mIHRoZSBDTUEgR0VNIG9iamVjdCdzIGJhY2tpbmcgc3RvcmUuCj4gKyAq IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiAgICAq Lwo+IC12b2lkICpkcm1fZ2VtX2NtYV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqKQo+ICtpbnQgZHJtX2dlbV9jbWFfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IGRybV9nZW1f Y21hX29iamVjdCAqY21hX29iaiA9IHRvX2RybV9nZW1fY21hX29iaihvYmopOwo+ICAgCj4gLQly ZXR1cm4gY21hX29iai0+dmFkZHI7Cj4gKwlkbWFfYnVmX21hcF9zZXRfdmFkZHIobWFwLCBjbWFf b2JqLT52YWRkcik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gICBFWFBPUlRfU1lNQk9MX0dQ TChkcm1fZ2VtX2NtYV9wcmltZV92bWFwKTsKPiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3No bWVtX2hlbHBlci5jCj4gaW5kZXggZmIxMWRmN2FjZWQ1Li41NTUzZjU4ZjY4ZjMgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYwo+IEBAIC0yNTgsMTkgKzI1OCwyNSBA QCB2b2lkIGRybV9nZW1fc2htZW1fdW5waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4g ICB9Cj4gICBFWFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fdW5waW4pOwo+ICAgCj4gLXN0YXRp YyB2b2lkICpkcm1fZ2VtX3NobWVtX3ZtYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29i amVjdCAqc2htZW0pCj4gK3N0YXRpYyBpbnQgZHJtX2dlbV9zaG1lbV92bWFwX2xvY2tlZChzdHJ1 Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtLCBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCkK PiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZzaG1lbS0+YmFzZTsKPiAt CXN0cnVjdCBkbWFfYnVmX21hcCBtYXA7Cj4gICAJaW50IHJldCA9IDA7Cj4gICAKPiAtCWlmIChz aG1lbS0+dm1hcF91c2VfY291bnQrKyA+IDApCj4gLQkJcmV0dXJuIHNobWVtLT52YWRkcjsKPiAr CWlmIChzaG1lbS0+dm1hcF91c2VfY291bnQrKyA+IDApIHsKPiArCQlkbWFfYnVmX21hcF9zZXRf dmFkZHIobWFwLCBzaG1lbS0+dmFkZHIpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICAgCj4gICAJ aWYgKG9iai0+aW1wb3J0X2F0dGFjaCkgewo+IC0JCXJldCA9IGRtYV9idWZfdm1hcChvYmotPmlt cG9ydF9hdHRhY2gtPmRtYWJ1ZiwgJm1hcCk7Cj4gLQkJaWYgKCFyZXQpCj4gLQkJCXNobWVtLT52 YWRkciA9IG1hcC52YWRkcjsKPiArCQlyZXQgPSBkbWFfYnVmX3ZtYXAob2JqLT5pbXBvcnRfYXR0 YWNoLT5kbWFidWYsIG1hcCk7Cj4gKwkJaWYgKCFyZXQpIHsKPiArCQkJaWYgKFdBUk5fT04obWFw LT5pc19pb21lbSkpIHsKPiArCQkJCXJldCA9IC1FSU87Cj4gKwkJCQlnb3RvIGVycl9wdXRfcGFn ZXM7Cj4gKwkJCX0KPiArCQkJc2htZW0tPnZhZGRyID0gbWFwLT52YWRkcjsKPiArCQl9Cj4gICAJ fSBlbHNlIHsKPiAgIAkJcGdwcm90X3QgcHJvdCA9IFBBR0VfS0VSTkVMOwo+ICAgCj4gQEAgLTI4 NCw2ICsyOTAsOCBAQCBzdGF0aWMgdm9pZCAqZHJtX2dlbV9zaG1lbV92bWFwX2xvY2tlZChzdHJ1 Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQo+ICAgCQkJCSAgICBWTV9NQVAsIHByb3Qp Owo+ICAgCQlpZiAoIXNobWVtLT52YWRkcikKPiAgIAkJCXJldCA9IC1FTk9NRU07Cj4gKwkJZWxz ZQo+ICsJCQlkbWFfYnVmX21hcF9zZXRfdmFkZHIobWFwLCBzaG1lbS0+dmFkZHIpOwo+ICAgCX0K PiAgIAo+ICAgCWlmIChyZXQpIHsKPiBAQCAtMjkxLDcgKzI5OSw3IEBAIHN0YXRpYyB2b2lkICpk cm1fZ2VtX3NobWVtX3ZtYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0pCj4gICAJCWdvdG8gZXJyX3B1dF9wYWdlczsKPiAgIAl9Cj4gICAKPiAtCXJldHVybiBzaG1l bS0+dmFkZHI7Cj4gKwlyZXR1cm4gMDsKPiAgIAo+ICAgZXJyX3B1dF9wYWdlczoKPiAgIAlpZiAo IW9iai0+aW1wb3J0X2F0dGFjaCkKPiBAQCAtMjk5LDEyICszMDcsMTQgQEAgc3RhdGljIHZvaWQg KmRybV9nZW1fc2htZW1fdm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpz aG1lbSkKPiAgIGVycl96ZXJvX3VzZToKPiAgIAlzaG1lbS0+dm1hcF91c2VfY291bnQgPSAwOwo+ ICAgCj4gLQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ ICAgLyoKPiAgICAqIGRybV9nZW1fc2htZW1fdm1hcCAtIENyZWF0ZSBhIHZpcnR1YWwgbWFwcGlu ZyBmb3IgYSBzaG1lbSBHRU0gb2JqZWN0Cj4gICAgKiBAc2htZW06IHNobWVtIEdFTSBvYmplY3QK PiArICogQG1hcDogUmV0dXJucyB0aGUga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgU0hN RU0gR0VNIG9iamVjdCdzIGJhY2tpbmcKPiArICogICAgICAgc3RvcmUuCj4gICAgKgo+ICAgICog VGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgYSBjb250aWd1b3VzIGtlcm5lbCB2aXJ0dWFs IGFkZHJlc3MgbWFwcGluZwo+ICAgICogZXhpc3RzIGZvciB0aGUgYnVmZmVyIGJhY2tpbmcgdGhl IHNobWVtIEdFTSBvYmplY3QuCj4gQEAgLTMxOCwyNiArMzI4LDI1IEBAIHN0YXRpYyB2b2lkICpk cm1fZ2VtX3NobWVtX3ZtYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0pCj4gICAgKiBSZXR1cm5zOgo+ICAgICogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJy b3IgY29kZSBvbiBmYWlsdXJlLgo+ICAgICovCj4gLXZvaWQgKmRybV9nZW1fc2htZW1fdm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAraW50IGRybV9nZW1fc2htZW1fdm1hcChzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4g ICAJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1f b2JqKG9iaik7Cj4gLQl2b2lkICp2YWRkcjsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gICAJcmV0ID0g bXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzaG1lbS0+dm1hcF9sb2NrKTsKPiAgIAlpZiAocmV0 KQo+IC0JCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gLQl2YWRkciA9IGRybV9nZW1fc2htZW1fdm1h cF9sb2NrZWQoc2htZW0pOwo+ICsJCXJldHVybiByZXQ7Cj4gKwlyZXQgPSBkcm1fZ2VtX3NobWVt X3ZtYXBfbG9ja2VkKHNobWVtLCBtYXApOwo+ICAgCW11dGV4X3VubG9jaygmc2htZW0tPnZtYXBf bG9jayk7Cj4gICAKPiAtCXJldHVybiB2YWRkcjsKPiArCXJldHVybiByZXQ7Cj4gICB9Cj4gICBF WFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fdm1hcCk7Cj4gICAKPiAtc3RhdGljIHZvaWQgZHJt X2dlbV9zaG1lbV92dW5tYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0pCj4gK3N0YXRpYyB2b2lkIGRybV9nZW1fc2htZW1fdnVubWFwX2xvY2tlZChzdHJ1Y3QgZHJt X2dlbV9zaG1lbV9vYmplY3QgKnNobWVtLAo+ICsJCQkJCXN0cnVjdCBkbWFfYnVmX21hcCAqbWFw KQo+ICAgewo+ICAgCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJnNobWVtLT5iYXNlOwo+ IC0Jc3RydWN0IGRtYV9idWZfbWFwIG1hcCA9IERNQV9CVUZfTUFQX0lOSVRfVkFERFIoc2htZW0t PnZhZGRyKTsKPiAgIAo+ICAgCWlmIChXQVJOX09OX09OQ0UoIXNobWVtLT52bWFwX3VzZV9jb3Vu dCkpCj4gICAJCXJldHVybjsKPiBAQCAtMzQ2LDcgKzM1NSw3IEBAIHN0YXRpYyB2b2lkIGRybV9n ZW1fc2htZW1fdnVubWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVt KQo+ICAgCQlyZXR1cm47Cj4gICAKPiAgIAlpZiAob2JqLT5pbXBvcnRfYXR0YWNoKQo+IC0JCWRt YV9idWZfdnVubWFwKG9iai0+aW1wb3J0X2F0dGFjaC0+ZG1hYnVmLCAmbWFwKTsKPiArCQlkbWFf YnVmX3Z1bm1hcChvYmotPmltcG9ydF9hdHRhY2gtPmRtYWJ1ZiwgbWFwKTsKPiAgIAllbHNlCj4g ICAJCXZ1bm1hcChzaG1lbS0+dmFkZHIpOwo+ICAgCj4gQEAgLTM1Nyw2ICszNjYsNyBAQCBzdGF0 aWMgdm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1f b2JqZWN0ICpzaG1lbSkKPiAgIC8qCj4gICAgKiBkcm1fZ2VtX3NobWVtX3Z1bm1hcCAtIFVubWFw IGEgdmlydHVhbCBtYXBwaW5nIGZvIGEgc2htZW0gR0VNIG9iamVjdAo+ICAgICogQHNobWVtOiBz aG1lbSBHRU0gb2JqZWN0Cj4gKyAqIEBtYXA6IEtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgd2hlcmUg dGhlIFNITUVNIEdFTSBvYmplY3Qgd2FzIG1hcHBlZAo+ICAgICoKPiAgICAqIFRoaXMgZnVuY3Rp b24gY2xlYW5zIHVwIGEga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nIGFjcXVpcmVkIGJ5 Cj4gICAgKiBkcm1fZ2VtX3NobWVtX3ZtYXAoKS4gVGhlIG1hcHBpbmcgaXMgb25seSByZW1vdmVk IHdoZW4gdGhlIHVzZSBjb3VudCBkcm9wcyB0bwo+IEBAIC0zNjYsMTIgKzM3NiwxMiBAQCBzdGF0 aWMgdm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1f b2JqZWN0ICpzaG1lbSkKPiAgICAqIGFsc28gYmUgY2FsbGVkIGJ5IGRyaXZlcnMgZGlyZWN0bHks IGluIHdoaWNoIGNhc2UgaXQgd2lsbCBoaWRlIHRoZQo+ICAgICogZGlmZmVyZW5jZXMgYmV0d2Vl biBkbWEtYnVmIGltcG9ydGVkIGFuZCBuYXRpdmVseSBhbGxvY2F0ZWQgb2JqZWN0cy4KPiAgICAq Lwo+IC12b2lkIGRybV9nZW1fc2htZW1fdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LCB2b2lkICp2YWRkcikKPiArdm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcChzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0 IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7 Cj4gICAKPiAgIAltdXRleF9sb2NrKCZzaG1lbS0+dm1hcF9sb2NrKTsKPiAtCWRybV9nZW1fc2ht ZW1fdnVubWFwX2xvY2tlZChzaG1lbSk7Cj4gKwlkcm1fZ2VtX3NobWVtX3Z1bm1hcF9sb2NrZWQo c2htZW0sIG1hcCk7Cj4gICAJbXV0ZXhfdW5sb2NrKCZzaG1lbS0+dm1hcF9sb2NrKTsKPiAgIH0K PiAgIEVYUE9SVF9TWU1CT0woZHJtX2dlbV9zaG1lbV92dW5tYXApOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9nZW1fdnJhbV9oZWxwZXIuYwo+IGluZGV4IDJkNWVkMzA1MThmMS4uNGQ4NTUzYjI4NTU4IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5jCj4gQEAgLTEsNSArMSw2IEBA Cj4gICAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgo+ICAgCj4g KyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLW1hcC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV9kZWJ1Z2ZzLmg+Cj4gQEAgLTExMyw4ICsx MTQsOCBAQCBzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fY2xlYW51cChzdHJ1Y3QgZHJtX2dlbV92 cmFtX29iamVjdCAqZ2JvKQo+ICAgCSAqIHVwOyBvbmx5IHJlbGVhc2UgdGhlIEdFTSBvYmplY3Qu Cj4gICAJICovCj4gICAKPiAtCVdBUk5fT04oZ2JvLT5rbWFwX3VzZV9jb3VudCk7Cj4gLQlXQVJO X09OKGdiby0+a21hcC52aXJ0dWFsKTsKPiArCVdBUk5fT04oZ2JvLT52bWFwX3VzZV9jb3VudCk7 Cj4gKwlXQVJOX09OKGRtYV9idWZfbWFwX2lzX3NldCgmZ2JvLT5tYXApKTsKPiAgIAo+ICAgCWRy bV9nZW1fb2JqZWN0X3JlbGVhc2UoJmdiby0+Ym8uYmFzZSk7Cj4gICB9Cj4gQEAgLTM4MiwyOSAr MzgzLDM3IEBAIGludCBkcm1fZ2VtX3ZyYW1fdW5waW4oc3RydWN0IGRybV9nZW1fdnJhbV9vYmpl Y3QgKmdibykKPiAgIH0KPiAgIEVYUE9SVF9TWU1CT0woZHJtX2dlbV92cmFtX3VucGluKTsKPiAg IAo+IC1zdGF0aWMgdm9pZCAqZHJtX2dlbV92cmFtX2ttYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2Vt X3ZyYW1fb2JqZWN0ICpnYm8pCj4gK3N0YXRpYyBpbnQgZHJtX2dlbV92cmFtX2ttYXBfbG9ja2Vk KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sCj4gKwkJCQkgICAgc3RydWN0IGRtYV9i dWZfbWFwICptYXApCj4gICB7Cj4gICAJaW50IHJldDsKPiAtCXN0cnVjdCB0dG1fYm9fa21hcF9v YmogKmttYXAgPSAmZ2JvLT5rbWFwOwo+IC0JYm9vbCBpc19pb21lbTsKPiAgIAo+IC0JaWYgKGdi by0+a21hcF91c2VfY291bnQgPiAwKQo+ICsJaWYgKGdiby0+dm1hcF91c2VfY291bnQgPiAwKQo+ ICAgCQlnb3RvIG91dDsKPiAgIAo+IC0JcmV0ID0gdHRtX2JvX2ttYXAoJmdiby0+Ym8sIDAsIGdi by0+Ym8ubnVtX3BhZ2VzLCBrbWFwKTsKPiArCXJldCA9IHR0bV9ib192bWFwKCZnYm8tPmJvLCAm Z2JvLT5tYXApOwo+ICAgCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCQly ZXR1cm4gcmV0Owo+ICAgCj4gICBvdXQ6Cj4gLQkrK2diby0+a21hcF91c2VfY291bnQ7Cj4gLQly ZXR1cm4gdHRtX2ttYXBfb2JqX3ZpcnR1YWwoa21hcCwgJmlzX2lvbWVtKTsKPiArCSsrZ2JvLT52 bWFwX3VzZV9jb3VudDsKPiArCSptYXAgPSBnYm8tPm1hcDsKPiArCj4gKwlyZXR1cm4gMDsKPiAg IH0KPiAgIAo+IC1zdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fa3VubWFwX2xvY2tlZChzdHJ1Y3Qg ZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQo+ICtzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fa3Vu bWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvLAo+ICsJCQkJICAgICAg IHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKQo+ICAgewo+IC0JaWYgKFdBUk5fT05fT05DRSghZ2Jv LT5rbWFwX3VzZV9jb3VudCkpCj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZ2JvLT5iby5i YXNlLmRldjsKPiArCj4gKwlpZiAoZHJtX1dBUk5fT05fT05DRShkZXYsICFnYm8tPnZtYXBfdXNl X2NvdW50KSkKPiAgIAkJcmV0dXJuOwo+IC0JaWYgKC0tZ2JvLT5rbWFwX3VzZV9jb3VudCA+IDAp Cj4gKwo+ICsJaWYgKGRybV9XQVJOX09OX09OQ0UoZGV2LCAhZG1hX2J1Zl9tYXBfaXNfZXF1YWwo Jmdiby0+bWFwLCBtYXApKSkKPiArCQlyZXR1cm47IC8qIEJVRzogbWFwIG5vdCBtYXBwZWQgZnJv bSB0aGlzIEJPICovCj4gKwo+ICsJaWYgKC0tZ2JvLT52bWFwX3VzZV9jb3VudCA+IDApCj4gICAJ CXJldHVybjsKPiAgIAo+ICAgCS8qCj4gQEAgLTQxOCw3ICs0MjcsOSBAQCBzdGF0aWMgdm9pZCBk cm1fZ2VtX3ZyYW1fa3VubWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2Jv KQo+ICAgLyoqCj4gICAgKiBkcm1fZ2VtX3ZyYW1fdm1hcCgpIC0gUGlucyBhbmQgbWFwcyBhIEdF TSBWUkFNIG9iamVjdCBpbnRvIGtlcm5lbCBhZGRyZXNzCj4gICAgKiAgICAgICAgICAgICAgICAg ICAgICAgc3BhY2UKPiAtICogQGdibzoJVGhlIEdFTSBWUkFNIG9iamVjdCB0byBtYXAKPiArICog QGdibzogVGhlIEdFTSBWUkFNIG9iamVjdCB0byBtYXAKPiArICogQG1hcDogUmV0dXJucyB0aGUg a2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgVlJBTSBHRU0gb2JqZWN0J3MgYmFja2luZwo+ ICsgKiAgICAgICBzdG9yZS4KPiAgICAqCj4gICAgKiBUaGUgdm1hcCBmdW5jdGlvbiBwaW5zIGEg R0VNIFZSQU0gb2JqZWN0IHRvIGl0cyBjdXJyZW50IGxvY2F0aW9uLCBlaXRoZXIKPiAgICAqIHN5 c3RlbSBvciB2aWRlbyBtZW1vcnksIGFuZCBtYXBzIGl0cyBidWZmZXIgaW50byBrZXJuZWwgYWRk cmVzcyBzcGFjZS4KPiBAQCAtNDI3LDQ4ICs0MzgsNDQgQEAgc3RhdGljIHZvaWQgZHJtX2dlbV92 cmFtX2t1bm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibykKPiAgICAq IHVubWFwIGFuZCB1bnBpbiB0aGUgR0VNIFZSQU0gb2JqZWN0Lgo+ICAgICoKPiAgICAqIFJldHVy bnM6Cj4gLSAqIFRoZSBidWZmZXIncyB2aXJ0dWFsIGFkZHJlc3Mgb24gc3VjY2Vzcywgb3IKPiAt ICogYW4gRVJSX1BUUigpLWVuY29kZWQgZXJyb3IgY29kZSBvdGhlcndpc2UuCj4gKyAqIDAgb24g c3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiAgICAqLwo+IC12 b2lkICpkcm1fZ2VtX3ZyYW1fdm1hcChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQo+ ICtpbnQgZHJtX2dlbV92cmFtX3ZtYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywg c3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJaW50IHJldDsKPiAtCXZvaWQgKmJh c2U7Cj4gICAKPiAgIAlyZXQgPSB0dG1fYm9fcmVzZXJ2ZSgmZ2JvLT5ibywgdHJ1ZSwgZmFsc2Us IE5VTEwpOwo+ICAgCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCQlyZXR1 cm4gcmV0Owo+ICAgCj4gICAJcmV0ID0gZHJtX2dlbV92cmFtX3Bpbl9sb2NrZWQoZ2JvLCAwKTsK PiAgIAlpZiAocmV0KQo+ICAgCQlnb3RvIGVycl90dG1fYm9fdW5yZXNlcnZlOwo+IC0JYmFzZSA9 IGRybV9nZW1fdnJhbV9rbWFwX2xvY2tlZChnYm8pOwo+IC0JaWYgKElTX0VSUihiYXNlKSkgewo+ IC0JCXJldCA9IFBUUl9FUlIoYmFzZSk7Cj4gKwlyZXQgPSBkcm1fZ2VtX3ZyYW1fa21hcF9sb2Nr ZWQoZ2JvLCBtYXApOwo+ICsJaWYgKHJldCkKPiAgIAkJZ290byBlcnJfZHJtX2dlbV92cmFtX3Vu cGluX2xvY2tlZDsKPiAtCX0KPiAgIAo+ICAgCXR0bV9ib191bnJlc2VydmUoJmdiby0+Ym8pOwo+ ICAgCj4gLQlyZXR1cm4gYmFzZTsKPiArCXJldHVybiAwOwo+ICAgCj4gICBlcnJfZHJtX2dlbV92 cmFtX3VucGluX2xvY2tlZDoKPiAgIAlkcm1fZ2VtX3ZyYW1fdW5waW5fbG9ja2VkKGdibyk7Cj4g ICBlcnJfdHRtX2JvX3VucmVzZXJ2ZToKPiAgIAl0dG1fYm9fdW5yZXNlcnZlKCZnYm8tPmJvKTsK PiAtCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgRVhQT1JU X1NZTUJPTChkcm1fZ2VtX3ZyYW1fdm1hcCk7Cj4gICAKPiAgIC8qKgo+ICAgICogZHJtX2dlbV92 cmFtX3Z1bm1hcCgpIC0gVW5tYXBzIGFuZCB1bnBpbnMgYSBHRU0gVlJBTSBvYmplY3QKPiAtICog QGdibzoJVGhlIEdFTSBWUkFNIG9iamVjdCB0byB1bm1hcAo+IC0gKiBAdmFkZHI6CVRoZSBtYXBw aW5nJ3MgYmFzZSBhZGRyZXNzIGFzIHJldHVybmVkIGJ5IGRybV9nZW1fdnJhbV92bWFwKCkKPiAr ICogQGdibzogVGhlIEdFTSBWUkFNIG9iamVjdCB0byB1bm1hcAo+ICsgKiBAbWFwOiBLZXJuZWwg dmlydHVhbCBhZGRyZXNzIHdoZXJlIHRoZSBWUkFNIEdFTSBvYmplY3Qgd2FzIG1hcHBlZAo+ICAg ICoKPiAgICAqIEEgY2FsbCB0byBkcm1fZ2VtX3ZyYW1fdnVubWFwKCkgdW5tYXBzIGFuZCB1bnBp bnMgYSBHRU0gVlJBTSBidWZmZXIuIFNlZQo+ICAgICogdGhlIGRvY3VtZW50YXRpb24gZm9yIGRy bV9nZW1fdnJhbV92bWFwKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCj4gICAgKi8KPiAtdm9pZCBk cm1fZ2VtX3ZyYW1fdnVubWFwKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sIHZvaWQg KnZhZGRyKQo+ICt2b2lkIGRybV9nZW1fdnJhbV92dW5tYXAoc3RydWN0IGRybV9nZW1fdnJhbV9v YmplY3QgKmdibywgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJaW50IHJldDsK PiAgIAo+IEBAIC00NzYsNyArNDgzLDcgQEAgdm9pZCBkcm1fZ2VtX3ZyYW1fdnVubWFwKHN0cnVj dCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sIHZvaWQgKnZhZGRyKQo+ICAgCWlmIChXQVJOX09O Q0UocmV0LCAidHRtX2JvX3Jlc2VydmVfZmFpbGVkKCk6IHJldD0lZFxuIiwgcmV0KSkKPiAgIAkJ cmV0dXJuOwo+ICAgCj4gLQlkcm1fZ2VtX3ZyYW1fa3VubWFwX2xvY2tlZChnYm8pOwo+ICsJZHJt X2dlbV92cmFtX2t1bm1hcF9sb2NrZWQoZ2JvLCBtYXApOwo+ICAgCWRybV9nZW1fdnJhbV91bnBp bl9sb2NrZWQoZ2JvKTsKPiAgIAo+ICAgCXR0bV9ib191bnJlc2VydmUoJmdiby0+Ym8pOwo+IEBA IC01NjcsMTUgKzU3NCwxMyBAQCBzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fYm9fZHJpdmVyX21v dmVfbm90aWZ5KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sCj4gICAJCQkJCSAgICAg ICBib29sIGV2aWN0LAo+ICAgCQkJCQkgICAgICAgc3RydWN0IHR0bV9yZXNvdXJjZSAqbmV3X21l bSkKPiAgIHsKPiAtCXN0cnVjdCB0dG1fYm9fa21hcF9vYmogKmttYXAgPSAmZ2JvLT5rbWFwOwo+ ICsJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyA9ICZnYm8tPmJvOwo+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGJvLT5iYXNlLmRldjsKPiAgIAo+IC0JaWYgKFdBUk5fT05fT05DRShn Ym8tPmttYXBfdXNlX2NvdW50KSkKPiArCWlmIChkcm1fV0FSTl9PTl9PTkNFKGRldiwgZ2JvLT52 bWFwX3VzZV9jb3VudCkpCj4gICAJCXJldHVybjsKPiAgIAo+IC0JaWYgKCFrbWFwLT52aXJ0dWFs KQo+IC0JCXJldHVybjsKPiAtCXR0bV9ib19rdW5tYXAoa21hcCk7Cj4gLQlrbWFwLT52aXJ0dWFs ID0gTlVMTDsKPiArCXR0bV9ib192dW5tYXAoYm8sICZnYm8tPm1hcCk7Cj4gICB9Cj4gICAKPiAg IHN0YXRpYyBpbnQgZHJtX2dlbV92cmFtX2JvX2RyaXZlcl9tb3ZlKHN0cnVjdCBkcm1fZ2VtX3Zy YW1fb2JqZWN0ICpnYm8sCj4gQEAgLTgzMiwzNyArODM3LDMzIEBAIHN0YXRpYyB2b2lkIGRybV9n ZW1fdnJhbV9vYmplY3RfdW5waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW0pCj4gICB9Cj4g ICAKPiAgIC8qKgo+IC0gKiBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3ZtYXAoKSAtIFwKPiAtCUltcGxl bWVudHMgJnN0cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcy52bWFwCj4gLSAqIEBnZW06CVRoZSBH RU0gb2JqZWN0IHRvIG1hcAo+ICsgKiBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3ZtYXAoKSAtCj4gKyAq CUltcGxlbWVudHMgJnN0cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcy52bWFwCj4gKyAqIEBnZW06 IFRoZSBHRU0gb2JqZWN0IHRvIG1hcAo+ICsgKiBAbWFwOiBSZXR1cm5zIHRoZSBrZXJuZWwgdmly dHVhbCBhZGRyZXNzIG9mIHRoZSBWUkFNIEdFTSBvYmplY3QncyBiYWNraW5nCj4gKyAqICAgICAg IHN0b3JlLgo+ICAgICoKPiAgICAqIFJldHVybnM6Cj4gLSAqIFRoZSBidWZmZXJzIHZpcnR1YWwg YWRkcmVzcyBvbiBzdWNjZXNzLCBvcgo+IC0gKiBOVUxMIG90aGVyd2lzZS4KPiArICogMCBvbiBz dWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgo+ICAgICovCj4gLXN0 YXRpYyB2b2lkICpkcm1fZ2VtX3ZyYW1fb2JqZWN0X3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpnZW0pCj4gK3N0YXRpYyBpbnQgZHJtX2dlbV92cmFtX29iamVjdF92bWFwKHN0cnVjdCBkcm1f Z2VtX29iamVjdCAqZ2VtLCBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCkKPiAgIHsKPiAgIAlzdHJ1 Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvID0gZHJtX2dlbV92cmFtX29mX2dlbShnZW0pOwo+ IC0Jdm9pZCAqYmFzZTsKPiAgIAo+IC0JYmFzZSA9IGRybV9nZW1fdnJhbV92bWFwKGdibyk7Cj4g LQlpZiAoSVNfRVJSKGJhc2UpKQo+IC0JCXJldHVybiBOVUxMOwo+IC0JcmV0dXJuIGJhc2U7Cj4g KwlyZXR1cm4gZHJtX2dlbV92cmFtX3ZtYXAoZ2JvLCBtYXApOwo+ICAgfQo+ICAgCj4gICAvKioK PiAtICogZHJtX2dlbV92cmFtX29iamVjdF92dW5tYXAoKSAtIFwKPiAtCUltcGxlbWVudHMgJnN0 cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcy52dW5tYXAKPiAtICogQGdlbToJVGhlIEdFTSBvYmpl Y3QgdG8gdW5tYXAKPiAtICogQHZhZGRyOglUaGUgbWFwcGluZydzIGJhc2UgYWRkcmVzcwo+ICsg KiBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3Z1bm1hcCgpIC0KPiArICoJSW1wbGVtZW50cyAmc3RydWN0 IGRybV9nZW1fb2JqZWN0X2Z1bmNzLnZ1bm1hcAo+ICsgKiBAZ2VtOiBUaGUgR0VNIG9iamVjdCB0 byB1bm1hcAo+ICsgKiBAbWFwOiBLZXJuZWwgdmlydHVhbCBhZGRyZXNzIHdoZXJlIHRoZSBWUkFN IEdFTSBvYmplY3Qgd2FzIG1hcHBlZAo+ICAgICovCj4gLXN0YXRpYyB2b2lkIGRybV9nZW1fdnJh bV9vYmplY3RfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtLAo+IC0JCQkJICAgICAg IHZvaWQgKnZhZGRyKQo+ICtzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3Z1bm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbSwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7 Cj4gICAJc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibyA9IGRybV9nZW1fdnJhbV9vZl9n ZW0oZ2VtKTsKPiAgIAo+IC0JZHJtX2dlbV92cmFtX3Z1bm1hcChnYm8sIHZhZGRyKTsKPiArCWRy bV9nZW1fdnJhbV92dW5tYXAoZ2JvLCBtYXApOwo+ICAgfQo+ICAgCj4gICAvKgo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5oIGIvZHJpdmVycy9ncHUv ZHJtL2V0bmF2aXYvZXRuYXZpdl9kcnYuaAo+IGluZGV4IDk2ODJjMjZkODliYi4uZjViZTYyN2Ux ZGUwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZHJ2LmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5oCj4gQEAgLTUxLDcg KzUxLDcgQEAgaW50IGV0bmF2aXZfaW9jdGxfZ2VtX3N1Ym1pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB2b2lkICpkYXRhLAo+ICAgaW50IGV0bmF2aXZfZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZp bHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKPiAgIGludCBldG5hdml2X2dlbV9tbWFw X29mZnNldChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdTY0ICpvZmZzZXQpOwo+ICAgc3Ry dWN0IHNnX3RhYmxlICpldG5hdml2X2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmopOwo+IC12b2lkICpldG5hdml2X2dlbV9wcmltZV92bWFwKHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqKTsKPiAraW50IGV0bmF2aXZfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIGludCBl dG5hdml2X2dlbV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkJ ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpldG5hdml2X2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fcHJp bWUuYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3ByaW1lLmMKPiBpbmRl eCBhNmQ5OTMyYTMyYWUuLmJjMjU0M2RkOTg3ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vZXRuYXZpdi9ldG5hdml2X2dlbV9wcmltZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V0 bmF2aXYvZXRuYXZpdl9nZW1fcHJpbWUuYwo+IEBAIC0yMiw5ICsyMiwxNCBAQCBzdHJ1Y3Qgc2df dGFibGUgKmV0bmF2aXZfZ2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiAgIAlyZXR1cm4gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKG9iai0+ZGV2LCBldG5h dml2X29iai0+cGFnZXMsIG5wYWdlcyk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqZXRuYXZpdl9nZW1f cHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAraW50IGV0bmF2aXZfZ2Vt X3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21h cCAqbWFwKQo+ICAgewo+IC0JcmV0dXJuIGV0bmF2aXZfZ2VtX3ZtYXAob2JqKTsKPiArCXZvaWQg KnZhZGRyID0gZXRuYXZpdl9nZW1fdm1hcChvYmopOwo+ICsJaWYgKCF2YWRkcikKPiArCQlyZXR1 cm4gLUVOT01FTTsKPiArCWRtYV9idWZfbWFwX3NldF92YWRkcihtYXAsIHZhZGRyKTsKPiArCj4g KwlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+ICAgaW50IGV0bmF2aXZfZ2VtX3ByaW1lX21tYXAoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5jCj4gaW5kZXgg MTEyMjNmZTM0OGRmLi44MzJlNTI4MGE2ZWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2xpbWEvbGltYV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmMK PiBAQCAtMTgyLDE0ICsxODIsMTQgQEAgc3RhdGljIGludCBsaW1hX2dlbV9waW4oc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmopCj4gICAJcmV0dXJuIGRybV9nZW1fc2htZW1fcGluKG9iaik7Cj4g ICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgKmxpbWFfZ2VtX3ZtYXAoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmopCj4gK3N0YXRpYyBpbnQgbGltYV9nZW1fdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IGxpbWFf Ym8gKmJvID0gdG9fbGltYV9ibyhvYmopOwo+ICAgCj4gICAJaWYgKGJvLT5oZWFwX3NpemUpCj4g LQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gICAKPiAt CXJldHVybiBkcm1fZ2VtX3NobWVtX3ZtYXAob2JqKTsKPiArCXJldHVybiBkcm1fZ2VtX3NobWVt X3ZtYXAob2JqLCBtYXApOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW50IGxpbWFfZ2VtX21tYXAo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMgYi9kcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMKPiBpbmRleCBkYzZkZjllOWE0MGQuLmEwNzBhODVm OGYzNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMKPiBAQCAtMSw2ICsxLDcgQEAK PiAgIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAo+ICAgLyogQ29w eXJpZ2h0IDIwMTctMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KPiAgIAo+ICsj aW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9rdGhyZWFk Lmg+Cj4gICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3ZtYWxs b2MuaD4KPiBAQCAtMzAzLDYgKzMwNCw4IEBAIHN0YXRpYyB2b2lkIGxpbWFfc2NoZWRfYnVpbGRf ZXJyb3JfdGFza19saXN0KHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2spCj4gICAJc3RydWN0 IGxpbWFfZHVtcF9jaHVua19idWZmZXIgKmJ1ZmZlcl9jaHVuazsKPiAgIAl1MzIgc2l6ZSwgdGFz a19zaXplLCBtZW1fc2l6ZTsKPiAgIAlpbnQgaTsKPiArCXN0cnVjdCBkbWFfYnVmX21hcCBtYXA7 Cj4gKwlpbnQgcmV0Owo+ICAgCj4gICAJbXV0ZXhfbG9jaygmZGV2LT5lcnJvcl90YXNrX2xpc3Rf bG9jayk7Cj4gICAKPiBAQCAtMzg4LDE1ICszOTEsMTUgQEAgc3RhdGljIHZvaWQgbGltYV9zY2hl ZF9idWlsZF9lcnJvcl90YXNrX2xpc3Qoc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzaykKPiAg IAkJfSBlbHNlIHsKPiAgIAkJCWJ1ZmZlcl9jaHVuay0+c2l6ZSA9IGxpbWFfYm9fc2l6ZShibyk7 Cj4gICAKPiAtCQkJZGF0YSA9IGRybV9nZW1fc2htZW1fdm1hcCgmYm8tPmJhc2UuYmFzZSk7Cj4g LQkJCWlmIChJU19FUlJfT1JfTlVMTChkYXRhKSkgewo+ICsJCQlyZXQgPSBkcm1fZ2VtX3NobWVt X3ZtYXAoJmJvLT5iYXNlLmJhc2UsICZtYXApOwo+ICsJCQlpZiAocmV0KSB7Cj4gICAJCQkJa3Zm cmVlKGV0KTsKPiAgIAkJCQlnb3RvIG91dDsKPiAgIAkJCX0KPiAgIAo+IC0JCQltZW1jcHkoYnVm ZmVyX2NodW5rICsgMSwgZGF0YSwgYnVmZmVyX2NodW5rLT5zaXplKTsKPiArCQkJbWVtY3B5KGJ1 ZmZlcl9jaHVuayArIDEsIG1hcC52YWRkciwgYnVmZmVyX2NodW5rLT5zaXplKTsKPiAgIAo+IC0J CQlkcm1fZ2VtX3NobWVtX3Z1bm1hcCgmYm8tPmJhc2UuYmFzZSwgZGF0YSk7Cj4gKwkJCWRybV9n ZW1fc2htZW1fdnVubWFwKCZiby0+YmFzZS5iYXNlLCAmbWFwKTsKPiAgIAkJfQo+ICAgCj4gICAJ CWJ1ZmZlcl9jaHVuayA9ICh2b2lkICopKGJ1ZmZlcl9jaHVuayArIDEpICsgYnVmZmVyX2NodW5r LT5zaXplOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX21v ZGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2FnMjAwL21nYWcyMDBfbW9kZS5jCj4gaW5kZXggMzg2 NzJmOWU1YzRmLi44ZWY3Njc2OWI5N2YgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21n YWcyMDAvbWdhZzIwMF9tb2RlLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2Fn MjAwX21vZGUuYwo+IEBAIC05LDYgKzksNyBAQAo+ICAgICovCj4gICAKPiAgICNpbmNsdWRlIDxs aW51eC9kZWxheS5oPgo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiAgIAo+ICAg I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICAgI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljX3N0YXRlX2hlbHBlci5oPgo+IEBAIC0xNTU2LDE1ICsxNTU3LDE4IEBAIG1nYWcyMDBf aGFuZGxlX2RhbWFnZShzdHJ1Y3QgbWdhX2RldmljZSAqbWRldiwgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsCj4gICAJCSAgICAgIHN0cnVjdCBkcm1fcmVjdCAqY2xpcCkKPiAgIHsKPiAgIAlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJm1kZXYtPmJhc2U7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9t YXAgbWFwOwo+ICAgCXZvaWQgKnZtYXA7Cj4gKwlpbnQgcmV0Owo+ICAgCj4gLQl2bWFwID0gZHJt X2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0pOwo+IC0JaWYgKGRybV9XQVJOX09OKGRldiwgIXZt YXApKQo+ICsJcmV0ID0gZHJtX2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0sICZtYXApOwo+ICsJ aWYgKGRybV9XQVJOX09OKGRldiwgcmV0KSkKPiAgIAkJcmV0dXJuOyAvKiBCVUc6IFNITUVNIEJP IHNob3VsZCBhbHdheXMgYmUgdm1hcHBlZCAqLwo+ICsJdm1hcCA9IG1hcC52YWRkcjsgLyogVE9E TzogVXNlIG1hcHBpbmcgYWJzdHJhY3Rpb24gcHJvcGVybHkgKi8KPiAgIAo+ICAgCWRybV9mYl9t ZW1jcHlfZHN0Y2xpcChtZGV2LT52cmFtLCB2bWFwLCBmYiwgY2xpcCk7Cj4gICAKPiAtCWRybV9n ZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sIHZtYXApOwo+ICsJZHJtX2dlbV9zaG1lbV92dW5t YXAoZmItPm9ialswXSwgJm1hcCk7Cj4gICAKPiAgIAkvKiBBbHdheXMgc2Nhbm91dCBpbWFnZSBh dCBWUkFNIG9mZnNldCAwICovCj4gICAJbWdhZzIwMF9zZXRfc3RhcnRhZGQobWRldiwgKHUzMikw KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZyBiL2RyaXZl cnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWcKPiBpbmRleCA1ZGVjMWU1Njk0YjcuLjk0MzYzMTBk MDg1NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZwo+IEBAIC02LDYgKzYsNyBAQCBjb25m aWcgRFJNX05PVVZFQVUKPiAgIAlzZWxlY3QgRldfTE9BREVSCj4gICAJc2VsZWN0IERSTV9LTVNf SEVMUEVSCj4gICAJc2VsZWN0IERSTV9UVE0KPiArCXNlbGVjdCBEUk1fVFRNX0hFTFBFUgo+ICAg CXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFIGlmIERSTV9OT1VWRUFVX0JBQ0tMSUdIVAo+ ICAgCXNlbGVjdCBBQ1BJX1ZJREVPIGlmIEFDUEkgJiYgWDg2ICYmIEJBQ0tMSUdIVF9DTEFTU19E RVZJQ0UgJiYgSU5QVVQKPiAgIAlzZWxlY3QgWDg2X1BMQVRGT1JNX0RFVklDRVMgaWYgQUNQSSAm JiBYODYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5o IGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5oCj4gaW5kZXggNjQxZWY2Mjk4 YTBlLi42MDQ1Yjg1YTc2MmEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUv bm91dmVhdV9iby5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5o Cj4gQEAgLTM5LDggKzM5LDYgQEAgc3RydWN0IG5vdXZlYXVfYm8gewo+ICAgCXVuc2lnbmVkIG1v ZGU7Cj4gICAKPiAgIAlzdHJ1Y3Qgbm91dmVhdV9kcm1fdGlsZSAqdGlsZTsKPiAtCj4gLQlzdHJ1 Y3QgdHRtX2JvX2ttYXBfb2JqIGRtYV9idWZfdm1hcDsKPiAgIH07Cj4gICAKPiAgIHN0YXRpYyBp bmxpbmUgc3RydWN0IG5vdXZlYXVfYm8gKgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bm91dmVhdS9ub3V2ZWF1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9n ZW0uYwo+IGluZGV4IDlhNDIxYzM5NDlkZS4uZjk0MmI1MjZiMGE1IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCj4gQEAgLTI0LDYgKzI0LDggQEAKPiAgICAqCj4gICAg Ki8KPiAgIAo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdHRtX2hlbHBlci5oPgo+ICsKPiAgICNp bmNsdWRlICJub3V2ZWF1X2Rydi5oIgo+ICAgI2luY2x1ZGUgIm5vdXZlYXVfZG1hLmgiCj4gICAj aW5jbHVkZSAibm91dmVhdV9mZW5jZS5oIgo+IEBAIC0xNzYsOCArMTc4LDggQEAgY29uc3Qgc3Ry dWN0IGRybV9nZW1fb2JqZWN0X2Z1bmNzIG5vdXZlYXVfZ2VtX29iamVjdF9mdW5jcyA9IHsKPiAg IAkucGluID0gbm91dmVhdV9nZW1fcHJpbWVfcGluLAo+ICAgCS51bnBpbiA9IG5vdXZlYXVfZ2Vt X3ByaW1lX3VucGluLAo+ICAgCS5nZXRfc2dfdGFibGUgPSBub3V2ZWF1X2dlbV9wcmltZV9nZXRf c2dfdGFibGUsCj4gLQkudm1hcCA9IG5vdXZlYXVfZ2VtX3ByaW1lX3ZtYXAsCj4gLQkudnVubWFw ID0gbm91dmVhdV9nZW1fcHJpbWVfdnVubWFwLAo+ICsJLnZtYXAgPSBkcm1fZ2VtX3R0bV92bWFw LAo+ICsJLnZ1bm1hcCA9IGRybV9nZW1fdHRtX3Z1bm1hcCwKPiAgIH07Cj4gICAKPiAgIGludAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5oIGIvZHJp dmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uaAo+IGluZGV4IGIzNWMxODAzMjJlMi4u M2I5MTljN2M5MzFjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZl YXVfZ2VtLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5oCj4g QEAgLTM3LDcgKzM3LDUgQEAgZXh0ZXJuIHZvaWQgbm91dmVhdV9nZW1fcHJpbWVfdW5waW4oc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICopOwo+ICAgZXh0ZXJuIHN0cnVjdCBzZ190YWJsZSAqbm91dmVh dV9nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKTsKPiAgIGV4 dGVybiBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm5vdXZlYXVfZ2VtX3ByaW1lX2ltcG9ydF9zZ190 YWJsZSgKPiAgIAlzdHJ1Y3QgZHJtX2RldmljZSAqLCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50 ICosIHN0cnVjdCBzZ190YWJsZSAqKTsKPiAtZXh0ZXJuIHZvaWQgKm5vdXZlYXVfZ2VtX3ByaW1l X3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICopOwo+IC1leHRlcm4gdm9pZCBub3V2ZWF1X2dl bV9wcmltZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICosIHZvaWQgKik7Cj4gICAKPiAg ICNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3By aW1lLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ByaW1lLmMKPiBpbmRleCBh ODI2NGFlYmYzZDQuLjJmMTZiNTI0OTI4MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v bm91dmVhdS9ub3V2ZWF1X3ByaW1lLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9u b3V2ZWF1X3ByaW1lLmMKPiBAQCAtMzUsMjYgKzM1LDYgQEAgc3RydWN0IHNnX3RhYmxlICpub3V2 ZWF1X2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4g ICAJcmV0dXJuIGRybV9wcmltZV9wYWdlc190b19zZyhvYmotPmRldiwgbnZiby0+Ym8udHRtLT5w YWdlcywgbnBhZ2VzKTsKPiAgIH0KPiAgIAo+IC12b2lkICpub3V2ZWF1X2dlbV9wcmltZV92bWFw KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+IC17Cj4gLQlzdHJ1Y3Qgbm91dmVhdV9ibyAq bnZibyA9IG5vdXZlYXVfZ2VtX29iamVjdChvYmopOwo+IC0JaW50IHJldDsKPiAtCj4gLQlyZXQg PSB0dG1fYm9fa21hcCgmbnZiby0+Ym8sIDAsIG52Ym8tPmJvLm51bV9wYWdlcywKPiAtCQkJICAm bnZiby0+ZG1hX2J1Zl92bWFwKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0 KTsKPiAtCj4gLQlyZXR1cm4gbnZiby0+ZG1hX2J1Zl92bWFwLnZpcnR1YWw7Cj4gLX0KPiAtCj4g LXZvaWQgbm91dmVhdV9nZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LCB2b2lkICp2YWRkcikKPiAtewo+IC0Jc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8gPSBub3V2ZWF1 X2dlbV9vYmplY3Qob2JqKTsKPiAtCj4gLQl0dG1fYm9fa3VubWFwKCZudmJvLT5kbWFfYnVmX3Zt YXApOwo+IC19Cj4gLQo+ICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpub3V2ZWF1X2dlbV9wcmlt ZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJCQkJCQkgc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+ICAgCQkJCQkJCSBzdHJ1Y3Qgc2dfdGFi bGUgKnNnKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rf cGVyZmNudC5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X3BlcmZjbnQuYwo+ IGluZGV4IGZkYmM4ZDk0OTEzNS4uNWFiMDNkNjA1ZjU3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9wZXJmY250LmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vcGFuZnJvc3QvcGFuZnJvc3RfcGVyZmNudC5jCj4gQEAgLTUsNiArNSw3IEBACj4gICAjaW5j bHVkZSA8ZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmg+Cj4gICAjaW5jbHVkZSA8ZHJtL3BhbmZy b3N0X2RybS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KPiArI2luY2x1ZGUg PGxpbnV4L2RtYS1idWYtbWFwLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Cj4gICAj aW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K PiBAQCAtNzIsNiArNzMsNyBAQCBzdGF0aWMgaW50IHBhbmZyb3N0X3BlcmZjbnRfZW5hYmxlX2xv Y2tlZChzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiwKPiAgIHsKPiAgIAlzdHJ1Y3QgcGFu ZnJvc3RfZmlsZV9wcml2ICp1c2VyID0gZmlsZV9wcml2LT5kcml2ZXJfcHJpdjsKPiAgIAlzdHJ1 Y3QgcGFuZnJvc3RfcGVyZmNudCAqcGVyZmNudCA9IHBmZGV2LT5wZXJmY250Owo+ICsJc3RydWN0 IGRtYV9idWZfbWFwIG1hcDsKPiAgIAlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKmJvOwo+ ICAgCXUzMiBjZmcsIGFzOwo+ICAgCWludCByZXQ7Cj4gQEAgLTEwMywxMSArMTA1LDEwIEBAIHN0 YXRpYyBpbnQgcGFuZnJvc3RfcGVyZmNudF9lbmFibGVfbG9ja2VkKHN0cnVjdCBwYW5mcm9zdF9k ZXZpY2UgKnBmZGV2LAo+ICAgCQlnb3RvIGVycl9jbG9zZV9ibzsKPiAgIAl9Cj4gICAKPiAtCXBl cmZjbnQtPmJ1ZiA9IGRybV9nZW1fc2htZW1fdm1hcCgmYm8tPmJhc2UpOwo+IC0JaWYgKElTX0VS UihwZXJmY250LT5idWYpKSB7Cj4gLQkJcmV0ID0gUFRSX0VSUihwZXJmY250LT5idWYpOwo+ICsJ cmV0ID0gZHJtX2dlbV9zaG1lbV92bWFwKCZiby0+YmFzZSwgJm1hcCk7Cj4gKwlpZiAocmV0KQo+ ICAgCQlnb3RvIGVycl9wdXRfbWFwcGluZzsKPiAtCX0KPiArCXBlcmZjbnQtPmJ1ZiA9IG1hcC52 YWRkcjsKPiAgIAo+ICAgCS8qCj4gICAJICogSW52YWxpZGF0ZSB0aGUgY2FjaGUgYW5kIGNsZWFy IHRoZSBjb3VudGVycyB0byBzdGFydCBmcm9tIGEgZnJlc2gKPiBAQCAtMTYzLDcgKzE2NCw3IEBA IHN0YXRpYyBpbnQgcGFuZnJvc3RfcGVyZmNudF9lbmFibGVfbG9ja2VkKHN0cnVjdCBwYW5mcm9z dF9kZXZpY2UgKnBmZGV2LAo+ICAgCXJldHVybiAwOwo+ICAgCj4gICBlcnJfdnVubWFwOgo+IC0J ZHJtX2dlbV9zaG1lbV92dW5tYXAoJmJvLT5iYXNlLCBwZXJmY250LT5idWYpOwo+ICsJZHJtX2dl bV9zaG1lbV92dW5tYXAoJmJvLT5iYXNlLCAmbWFwKTsKPiAgIGVycl9wdXRfbWFwcGluZzoKPiAg IAlwYW5mcm9zdF9nZW1fbWFwcGluZ19wdXQocGVyZmNudC0+bWFwcGluZyk7Cj4gICBlcnJfY2xv c2VfYm86Cj4gQEAgLTE4MCw2ICsxODEsNyBAQCBzdGF0aWMgaW50IHBhbmZyb3N0X3BlcmZjbnRf ZGlzYWJsZV9sb2NrZWQoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYsCj4gICB7Cj4gICAJ c3RydWN0IHBhbmZyb3N0X2ZpbGVfcHJpdiAqdXNlciA9IGZpbGVfcHJpdi0+ZHJpdmVyX3ByaXY7 Cj4gICAJc3RydWN0IHBhbmZyb3N0X3BlcmZjbnQgKnBlcmZjbnQgPSBwZmRldi0+cGVyZmNudDsK PiArCXN0cnVjdCBkbWFfYnVmX21hcCBtYXAgPSBETUFfQlVGX01BUF9JTklUX1ZBRERSKHBlcmZj bnQtPmJ1Zik7Cj4gICAKPiAgIAlpZiAodXNlciAhPSBwZXJmY250LT51c2VyKQo+ICAgCQlyZXR1 cm4gLUVJTlZBTDsKPiBAQCAtMTkyLDcgKzE5NCw3IEBAIHN0YXRpYyBpbnQgcGFuZnJvc3RfcGVy ZmNudF9kaXNhYmxlX2xvY2tlZChzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiwKPiAgIAkJ ICBHUFVfUEVSRkNOVF9DRkdfTU9ERShHUFVfUEVSRkNOVF9DRkdfTU9ERV9PRkYpKTsKPiAgIAo+ ICAgCXBlcmZjbnQtPnVzZXIgPSBOVUxMOwo+IC0JZHJtX2dlbV9zaG1lbV92dW5tYXAoJnBlcmZj bnQtPm1hcHBpbmctPm9iai0+YmFzZS5iYXNlLCBwZXJmY250LT5idWYpOwo+ICsJZHJtX2dlbV9z aG1lbV92dW5tYXAoJnBlcmZjbnQtPm1hcHBpbmctPm9iai0+YmFzZS5iYXNlLCAmbWFwKTsKPiAg IAlwZXJmY250LT5idWYgPSBOVUxMOwo+ICAgCXBhbmZyb3N0X2dlbV9jbG9zZSgmcGVyZmNudC0+ bWFwcGluZy0+b2JqLT5iYXNlLmJhc2UsIGZpbGVfcHJpdik7Cj4gICAJcGFuZnJvc3RfbW11X2Fz X3B1dChwZmRldiwgcGVyZmNudC0+bWFwcGluZy0+bW11KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3F4bC9xeGxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZGlz cGxheS5jCj4gaW5kZXggNDVmZDc2ZTA0YmRjLi5lMTY1ZmE5YjIwODkgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZGlzcGxheS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfZGlzcGxheS5jCj4gQEAgLTI1LDYgKzI1LDcgQEAKPiAgIAo+ICAgI2luY2x1ZGUg PGxpbnV4L2NyYzMyLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2RtYS1idWYtbWFwLmg+Cj4gICAKPiAgICNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgo+ ICAgI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gQEAgLTU4MSw2ICs1ODIsOCBAQCBzdGF0 aWMgdm9pZCBxeGxfY3Vyc29yX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs Cj4gICAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gICAJc3RydWN0IHF4bF9ibyAqY3Vy c29yX2JvID0gTlVMTCwgKnVzZXJfYm8gPSBOVUxMLCAqb2xkX2N1cnNvcl9ibyA9IE5VTEw7Cj4g ICAJaW50IHJldDsKPiArCXN0cnVjdCBkbWFfYnVmX21hcCB1c2VyX21hcDsKPiArCXN0cnVjdCBk bWFfYnVmX21hcCBjdXJzb3JfbWFwOwo+ICAgCXZvaWQgKnVzZXJfcHRyOwo+ICAgCWludCBzaXpl ID0gNjQqNjQqNDsKPiAgIAo+IEBAIC01OTUsOSArNTk4LDEwIEBAIHN0YXRpYyB2b2lkIHF4bF9j dXJzb3JfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgIAkJdXNlcl9i byA9IGdlbV90b19xeGxfYm8ob2JqKTsKPiAgIAo+ICAgCQkvKiBwaW5uaW5nIGlzIGRvbmUgaW4g dGhlIHByZXBhcmUvY2xlYW51cCBmcmFtZXZidWZmZXIgKi8KPiAtCQlyZXQgPSBxeGxfYm9fa21h cCh1c2VyX2JvLCAmdXNlcl9wdHIpOwo+ICsJCXJldCA9IHF4bF9ib19rbWFwKHVzZXJfYm8sICZ1 c2VyX21hcCk7Cj4gICAJCWlmIChyZXQpCj4gICAJCQlnb3RvIG91dF9mcmVlX3JlbGVhc2U7Cj4g KwkJdXNlcl9wdHIgPSB1c2VyX21hcC52YWRkcjsgLyogVE9ETzogVXNlIG1hcHBpbmcgYWJzdHJh Y3Rpb24gcHJvcGVybHkgKi8KPiAgIAo+ICAgCQlyZXQgPSBxeGxfYWxsb2NfYm9fcmVzZXJ2ZWQo cWRldiwgcmVsZWFzZSwKPiAgIAkJCQkJICAgIHNpemVvZihzdHJ1Y3QgcXhsX2N1cnNvcikgKyBz aXplLAo+IEBAIC02MTMsNyArNjE3LDcgQEAgc3RhdGljIHZvaWQgcXhsX2N1cnNvcl9hdG9taWNf dXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCQlpZiAocmV0KQo+ICAgCQkJZ290 byBvdXRfdW5waW47Cj4gICAKPiAtCQlyZXQgPSBxeGxfYm9fa21hcChjdXJzb3JfYm8sICh2b2lk ICoqKSZjdXJzb3IpOwo+ICsJCXJldCA9IHF4bF9ib19rbWFwKGN1cnNvcl9ibywgJmN1cnNvcl9t YXApOwo+ICAgCQlpZiAocmV0KQo+ICAgCQkJZ290byBvdXRfYmFja29mZjsKPiAgIAo+IEBAIC0x MTMzLDYgKzExMzcsNyBAQCBpbnQgcXhsX2NyZWF0ZV9tb25pdG9yc19vYmplY3Qoc3RydWN0IHF4 bF9kZXZpY2UgKnFkZXYpCj4gICB7Cj4gICAJaW50IHJldDsKPiAgIAlzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKmdvYmo7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICAgCWludCBtb25pdG9y c19jb25maWdfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcXhsX21vbml0b3JzX2NvbmZpZykgKwo+ICAg CQlxeGxfbnVtX2NydGMgKiBzaXplb2Yoc3RydWN0IHF4bF9oZWFkKTsKPiAgIAo+IEBAIC0xMTQ5 LDcgKzExNTQsNyBAQCBpbnQgcXhsX2NyZWF0ZV9tb25pdG9yc19vYmplY3Qoc3RydWN0IHF4bF9k ZXZpY2UgKnFkZXYpCj4gICAJaWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPiAgIAo+IC0JcXhs X2JvX2ttYXAocWRldi0+bW9uaXRvcnNfY29uZmlnX2JvLCBOVUxMKTsKPiArCXF4bF9ib19rbWFw KHFkZXYtPm1vbml0b3JzX2NvbmZpZ19ibywgJm1hcCk7Cj4gICAKPiAgIAlxZGV2LT5tb25pdG9y c19jb25maWcgPSBxZGV2LT5tb25pdG9yc19jb25maWdfYm8tPmtwdHI7Cj4gICAJcWRldi0+cmFt X2hlYWRlci0+bW9uaXRvcnNfY29uZmlnID0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfZHJhdy5jIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJhdy5jCj4gaW5kZXgg MzU5OWRiMDk2OTczLi43YjdhY2I5MTA3ODAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfZHJhdy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJhdy5jCj4g QEAgLTIwLDYgKzIwLDggQEAKPiAgICAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gICAgKi8KPiAgIAo+ ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiArCj4gICAjaW5jbHVkZSA8ZHJtL2Ry bV9mb3VyY2MuaD4KPiAgIAo+ICAgI2luY2x1ZGUgInF4bF9kcnYuaCIKPiBAQCAtNDIsMTMgKzQ0 LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcXhsX3JlY3QgKmRyYXdhYmxlX3NldF9jbGlwcGluZyhzdHJ1 Y3QgcXhsX2RldmljZSAqcWRldiwKPiAgIAkJCQkJICAgICAgdW5zaWduZWQgaW50IG51bV9jbGlw cywKPiAgIAkJCQkJICAgICAgc3RydWN0IHF4bF9ibyAqY2xpcHNfYm8pCj4gICB7Cj4gKwlzdHJ1 Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICAgCXN0cnVjdCBxeGxfY2xpcF9yZWN0cyAqZGV2X2NsaXBz Owo+ICAgCWludCByZXQ7Cj4gICAKPiAtCXJldCA9IHF4bF9ib19rbWFwKGNsaXBzX2JvLCAodm9p ZCAqKikmZGV2X2NsaXBzKTsKPiAtCWlmIChyZXQpIHsKPiArCXJldCA9IHF4bF9ib19rbWFwKGNs aXBzX2JvLCAmbWFwKTsKPiArCWlmIChyZXQpCj4gICAJCXJldHVybiBOVUxMOwo+IC0JfQo+ICsJ ZGV2X2NsaXBzID0gbWFwLnZhZGRyOyAvKiBUT0RPOiBVc2UgbWFwcGluZyBhYnN0cmFjdGlvbiBw cm9wZXJseSAqLwo+ICsKPiAgIAlkZXZfY2xpcHMtPm51bV9yZWN0cyA9IG51bV9jbGlwczsKPiAg IAlkZXZfY2xpcHMtPmNodW5rLm5leHRfY2h1bmsgPSAwOwo+ICAgCWRldl9jbGlwcy0+Y2h1bmsu cHJldl9jaHVuayA9IDA7Cj4gQEAgLTE0Miw2ICsxNDYsNyBAQCB2b2lkIHF4bF9kcmF3X2RpcnR5 X2ZiKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAo+ICAgCWludCBzdHJpZGUgPSBmYi0+cGl0Y2hl c1swXTsKPiAgIAkvKiBkZXB0aCBpcyBub3QgYWN0dWFsbHkgaW50ZXJlc3RpbmcsIHdlIGRvbid0 IG1hc2sgd2l0aCBpdCAqLwo+ICAgCWludCBkZXB0aCA9IGZiLT5mb3JtYXQtPmNwcFswXSAqIDg7 Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgc3VyZmFjZV9tYXA7Cj4gICAJdWludDhfdCAqc3VyZmFj ZV9iYXNlOwo+ICAgCXN0cnVjdCBxeGxfcmVsZWFzZSAqcmVsZWFzZTsKPiAgIAlzdHJ1Y3QgcXhs X2JvICpjbGlwc19ibzsKPiBAQCAtMTk3LDkgKzIwMiwxMCBAQCB2b2lkIHF4bF9kcmF3X2RpcnR5 X2ZiKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAo+ICAgCWlmIChyZXQpCj4gICAJCWdvdG8gb3V0 X3JlbGVhc2VfYmFja29mZjsKPiAgIAo+IC0JcmV0ID0gcXhsX2JvX2ttYXAoYm8sICh2b2lkICoq KSZzdXJmYWNlX2Jhc2UpOwo+ICsJcmV0ID0gcXhsX2JvX2ttYXAoYm8sICZzdXJmYWNlX21hcCk7 Cj4gICAJaWYgKHJldCkKPiAgIAkJZ290byBvdXRfcmVsZWFzZV9iYWNrb2ZmOwo+ICsJc3VyZmFj ZV9iYXNlID0gc3VyZmFjZV9tYXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0 aW9uIHByb3Blcmx5ICovCj4gICAKPiAgIAlyZXQgPSBxeGxfaW1hZ2VfaW5pdChxZGV2LCByZWxl YXNlLCBkaW1hZ2UsIHN1cmZhY2VfYmFzZSwKPiAgIAkJCSAgICAgbGVmdCAtIGR1bWJfc2hhZG93 X29mZnNldCwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJ2LmggYi9k cml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kcnYuaAo+IGluZGV4IDM2MDJlOGIzNDE4OS4uZWI0Mzdm ZWE1ZDllIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX2Rydi5oCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJ2LmgKPiBAQCAtMzAsNiArMzAsNyBAQAo+ICAg ICogRGVmaW5pdGlvbnMgdGFrZW4gZnJvbSBzcGljZS1wcm90b2NvbCwgcGx1cyBrZXJuZWwgZHJp dmVyIHNwZWNpZmljIGJpdHMuCj4gICAgKi8KPiAgIAo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1 Zi1tYXAuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UuaD4KPiAgICNpbmNsdWRlIDxs aW51eC9maXJtd2FyZS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ IEBAIC01MCw2ICs1MSw4IEBACj4gICAKPiAgICNpbmNsdWRlICJxeGxfZGV2LmgiCj4gICAKPiAr c3RydWN0IGRtYV9idWZfbWFwOwo+ICsKPiAgICNkZWZpbmUgRFJJVkVSX0FVVEhPUgkJIkRhdmUg QWlybGllIgo+ICAgCj4gICAjZGVmaW5lIERSSVZFUl9OQU1FCQkicXhsIgo+IEBAIC03OSw3ICs4 Miw3IEBAIHN0cnVjdCBxeGxfYm8gewo+ICAgCS8qIFByb3RlY3RlZCBieSB0Ym8ucmVzZXJ2ZWQg Ki8KPiAgIAlzdHJ1Y3QgdHRtX3BsYWNlCQlwbGFjZW1lbnRzWzNdOwo+ICAgCXN0cnVjdCB0dG1f cGxhY2VtZW50CQlwbGFjZW1lbnQ7Cj4gLQlzdHJ1Y3QgdHRtX2JvX2ttYXBfb2JqCQlrbWFwOwo+ ICsJc3RydWN0IGRtYV9idWZfbWFwCQltYXA7Cj4gICAJdm9pZAkJCQkqa3B0cjsKPiAgIAl1bnNp Z25lZCBpbnQgICAgICAgICAgICAgICAgICAgIG1hcF9jb3VudDsKPiAgIAlpbnQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHR5cGU7Cj4gQEAgLTMzNSw3ICszMzgsNiBAQCBpbnQgcXhsX2dl bV9vYmplY3Rfb3BlbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYpOwo+ICAgdm9pZCBxeGxfZ2VtX29iamVjdF9jbG9zZShzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiwKPiAgIAkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwo+ICAg dm9pZCBxeGxfYm9fZm9yY2VfZGVsZXRlKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2KTsKPiAtaW50 IHF4bF9ib19rbWFwKHN0cnVjdCBxeGxfYm8gKmJvLCB2b2lkICoqcHRyKTsKPiAgIAo+ICAgLyog cXhsX2R1bWIuYyAqLwo+ICAgaW50IHF4bF9tb2RlX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2LAo+IEBAIC00NDUsOCArNDQ3LDkgQEAgc3RydWN0IHNnX3RhYmxlICpxeGxf Z2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gICBz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnF4bF9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKAo+ICAg CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFj aCwKPiAgIAlzdHJ1Y3Qgc2dfdGFibGUgKnNndCk7Cj4gLXZvaWQgKnF4bF9nZW1fcHJpbWVfdm1h cChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gLXZvaWQgcXhsX2dlbV9wcmltZV92dW5t YXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHZvaWQgKnZhZGRyKTsKPiAraW50IHF4bF9n ZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZf bWFwICptYXApOwo+ICt2b2lkIHF4bF9nZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqLAo+ICsJCQkgIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIGludCBxeGxf Z2VtX3ByaW1lX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCj4gICAJCQkJc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9xeGwvcXhsX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfb2JqZWN0LmMKPiBp bmRleCA5NDBlOTkzNTRmNDkuLjc1NWRmNGQ4Zjk1ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vcXhsL3F4bF9vYmplY3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX29i amVjdC5jCj4gQEAgLTIzLDEwICsyMywxMiBAQAo+ICAgICogICAgICAgICAgQWxvbiBMZXZ5Cj4g ICAgKi8KPiAgIAo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2lvLW1hcHBpbmcuaD4KPiArCj4gICAjaW5jbHVkZSAicXhsX2Rydi5oIgo+ICAgI2lu Y2x1ZGUgInF4bF9vYmplY3QuaCIKPiAgIAo+IC0jaW5jbHVkZSA8bGludXgvaW8tbWFwcGluZy5o Pgo+ICAgc3RhdGljIHZvaWQgcXhsX3R0bV9ib19kZXN0cm95KHN0cnVjdCB0dG1fYnVmZmVyX29i amVjdCAqdGJvKQo+ICAgewo+ICAgCXN0cnVjdCBxeGxfYm8gKmJvOwo+IEBAIC0xNTIsMjQgKzE1 NCwyNyBAQCBpbnQgcXhsX2JvX2NyZWF0ZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKPiAgIAly ZXR1cm4gMDsKPiAgIH0KPiAgIAo+IC1pbnQgcXhsX2JvX2ttYXAoc3RydWN0IHF4bF9ibyAqYm8s IHZvaWQgKipwdHIpCj4gK2ludCBxeGxfYm9fa21hcChzdHJ1Y3QgcXhsX2JvICpibywgc3RydWN0 IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gLQlib29sIGlzX2lvbWVtOwo+ICAgCWludCByOwo+ ICAgCj4gICAJaWYgKGJvLT5rcHRyKSB7Cj4gLQkJaWYgKHB0cikKPiAtCQkJKnB0ciA9IGJvLT5r cHRyOwo+ICAgCQliby0+bWFwX2NvdW50Kys7Cj4gLQkJcmV0dXJuIDA7Cj4gKwkJZ290byBvdXQ7 Cj4gICAJfQo+IC0JciA9IHR0bV9ib19rbWFwKCZiby0+dGJvLCAwLCBiby0+dGJvLm51bV9wYWdl cywgJmJvLT5rbWFwKTsKPiArCXIgPSB0dG1fYm9fdm1hcCgmYm8tPnRibywgJmJvLT5tYXApOwo+ ICAgCWlmIChyKQo+ICAgCQlyZXR1cm4gcjsKPiAtCWJvLT5rcHRyID0gdHRtX2ttYXBfb2JqX3Zp cnR1YWwoJmJvLT5rbWFwLCAmaXNfaW9tZW0pOwo+IC0JaWYgKHB0cikKPiAtCQkqcHRyID0gYm8t PmtwdHI7Cj4gICAJYm8tPm1hcF9jb3VudCA9IDE7Cj4gKwo+ICsJLyogVE9ETzogUmVtb3ZlIGtw dHIgaW4gZmF2b3Igb2YgbWFwIGV2ZXJ5d2hlcmUuICovCj4gKwlpZiAoYm8tPm1hcC5pc19pb21l bSkKPiArCQliby0+a3B0ciA9ICh2b2lkICopYm8tPm1hcC52YWRkcl9pb21lbTsKPiArCWVsc2UK PiArCQliby0+a3B0ciA9IGJvLT5tYXAudmFkZHI7Cj4gKwo+ICtvdXQ6Cj4gKwkqbWFwID0gYm8t Pm1hcDsKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IEBAIC0xODAsNiArMTg1LDcgQEAgdm9p ZCAqcXhsX2JvX2ttYXBfYXRvbWljX3BhZ2Uoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsCj4gICAJ dm9pZCAqcnB0cjsKPiAgIAlpbnQgcmV0Owo+ICAgCXN0cnVjdCBpb19tYXBwaW5nICptYXA7Cj4g KwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgYm9fbWFwOwo+ICAgCj4gICAJaWYgKGJvLT50Ym8ubWVtLm1l bV90eXBlID09IFRUTV9QTF9WUkFNKQo+ICAgCQltYXAgPSBxZGV2LT52cmFtX21hcHBpbmc7Cj4g QEAgLTE5Niw5ICsyMDIsMTAgQEAgdm9pZCAqcXhsX2JvX2ttYXBfYXRvbWljX3BhZ2Uoc3RydWN0 IHF4bF9kZXZpY2UgKnFkZXYsCj4gICAJCXJldHVybiBycHRyOwo+ICAgCX0KPiAgIAo+IC0JcmV0 ID0gcXhsX2JvX2ttYXAoYm8sICZycHRyKTsKPiArCXJldCA9IHF4bF9ib19rbWFwKGJvLCAmYm9f bWFwKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gTlVMTDsKPiArCXJwdHIgPSBib19tYXAu dmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4gICAK PiAgIAlycHRyICs9IHBhZ2Vfb2Zmc2V0ICogUEFHRV9TSVpFOwo+ICAgCXJldHVybiBycHRyOwo+ IEBAIC0yMTIsNyArMjE5LDcgQEAgdm9pZCBxeGxfYm9fa3VubWFwKHN0cnVjdCBxeGxfYm8gKmJv KQo+ICAgCWlmIChiby0+bWFwX2NvdW50ID4gMCkKPiAgIAkJcmV0dXJuOwo+ICAgCWJvLT5rcHRy ID0gTlVMTDsKPiAtCXR0bV9ib19rdW5tYXAoJmJvLT5rbWFwKTsKPiArCXR0bV9ib192dW5tYXAo JmJvLT50Ym8sICZiby0+bWFwKTsKPiAgIH0KPiAgIAo+ICAgdm9pZCBxeGxfYm9fa3VubWFwX2F0 b21pY19wYWdlKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vcXhsL3F4bF9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX29iamVj dC5oCj4gaW5kZXggMDlhNWM4MTgzMjRkLi5lYmYyNGM5ZDJiZjIgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL3F4bC9xeGxfb2JqZWN0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcXhs L3F4bF9vYmplY3QuaAo+IEBAIC02Myw3ICs2Myw3IEBAIGV4dGVybiBpbnQgcXhsX2JvX2NyZWF0 ZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKPiAgIAkJCSBib29sIGtlcm5lbCwgYm9vbCBwaW5u ZWQsIHUzMiBkb21haW4sCj4gICAJCQkgc3RydWN0IHF4bF9zdXJmYWNlICpzdXJmLAo+ICAgCQkJ IHN0cnVjdCBxeGxfYm8gKipib19wdHIpOwo+IC1leHRlcm4gaW50IHF4bF9ib19rbWFwKHN0cnVj dCBxeGxfYm8gKmJvLCB2b2lkICoqcHRyKTsKPiArZXh0ZXJuIGludCBxeGxfYm9fa21hcChzdHJ1 Y3QgcXhsX2JvICpibywgc3RydWN0IGRtYV9idWZfbWFwICptYXApOwo+ICAgZXh0ZXJuIHZvaWQg cXhsX2JvX2t1bm1hcChzdHJ1Y3QgcXhsX2JvICpibyk7Cj4gICB2b2lkICpxeGxfYm9fa21hcF9h dG9taWNfcGFnZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwgc3RydWN0IHF4bF9ibyAqYm8sIGlu dCBwYWdlX29mZnNldCk7Cj4gICB2b2lkIHF4bF9ib19rdW5tYXBfYXRvbWljX3BhZ2Uoc3RydWN0 IHF4bF9kZXZpY2UgKnFkZXYsIHN0cnVjdCBxeGxfYm8gKmJvLCB2b2lkICptYXApOwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9wcmltZS5jIGIvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfcHJpbWUuYwo+IGluZGV4IDdkMzgxNmZjYTVhOC4uNGFhOTQ5Nzk5NDQ2IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX3ByaW1lLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vcXhsL3F4bF9wcmltZS5jCj4gQEAgLTU0LDIwICs1NCwyMCBAQCBzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKnF4bF9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKAo+ICAgCXJldHVybiBF UlJfUFRSKC1FTk9TWVMpOwo+ICAgfQo+ICAgCj4gLXZvaWQgKnF4bF9nZW1fcHJpbWVfdm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAraW50IHF4bF9nZW1fcHJpbWVfdm1hcChzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4g ICAJc3RydWN0IHF4bF9ibyAqYm8gPSBnZW1fdG9fcXhsX2JvKG9iaik7Cj4gLQl2b2lkICpwdHI7 Cj4gICAJaW50IHJldDsKPiAgIAo+IC0JcmV0ID0gcXhsX2JvX2ttYXAoYm8sICZwdHIpOwo+ICsJ cmV0ID0gcXhsX2JvX2ttYXAoYm8sIG1hcCk7Cj4gICAJaWYgKHJldCA8IDApCj4gLQkJcmV0dXJu IEVSUl9QVFIocmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICAgCj4gLQlyZXR1cm4gcHRyOwo+ICsJ cmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtdm9pZCBxeGxfZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpCj4gK3ZvaWQgcXhsX2dlbV9wcmltZV92 dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCSAgc3RydWN0IGRtYV9idWZf bWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IHF4bF9ibyAqYm8gPSBnZW1fdG9fcXhsX2JvKG9i aik7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBi L2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKPiBpbmRleCA1ZDU0YmNjZWJkNGQuLjQ0 Y2I1ZWU2ZmMyMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAo+IEBAIC01MDksNyArNTA5 LDYgQEAgc3RydWN0IHJhZGVvbl9ibyB7Cj4gICAJLyogQ29uc3RhbnQgYWZ0ZXIgaW5pdGlhbGl6 YXRpb24gKi8KPiAgIAlzdHJ1Y3QgcmFkZW9uX2RldmljZQkJKnJkZXY7Cj4gICAKPiAtCXN0cnVj dCB0dG1fYm9fa21hcF9vYmoJCWRtYV9idWZfdm1hcDsKPiAgIAlwaWRfdAkJCQlwaWQ7Cj4gICAK PiAgICNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25f Z2VtLmMKPiBpbmRleCAwY2NkNzIxM2U0MWYuLmQyODc2Y2UzYmM5ZSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9yYWRlb24vcmFkZW9uX2dlbS5jCj4gQEAgLTMxLDYgKzMxLDcgQEAKPiAgICNpbmNsdWRlIDxk cm0vZHJtX2RlYnVnZnMuaD4KPiAgICNpbmNsdWRlIDxkcm0vZHJtX2RldmljZS5oPgo+ICAgI2lu Y2x1ZGUgPGRybS9kcm1fZmlsZS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdHRtX2hlbHBl ci5oPgo+ICAgI2luY2x1ZGUgPGRybS9yYWRlb25fZHJtLmg+Cj4gICAKPiAgICNpbmNsdWRlICJy YWRlb24uaCIKPiBAQCAtNDAsOCArNDEsNiBAQCBzdHJ1Y3QgZG1hX2J1ZiAqcmFkZW9uX2dlbV9w cmltZV9leHBvcnQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqLAo+ICAgc3RydWN0IHNnX3Rh YmxlICpyYWRlb25fZ2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaik7Cj4gICBpbnQgcmFkZW9uX2dlbV9wcmltZV9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopOwo+ICAgdm9pZCByYWRlb25fZ2VtX3ByaW1lX3VucGluKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqKTsKPiAtdm9pZCAqcmFkZW9uX2dlbV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqKTsKPiAtdm9pZCByYWRlb25fZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+ICAgCj4gICBzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9nZW1fb2JqZWN0X2Z1bmNzIHJhZGVvbl9nZW1fb2JqZWN0X2Z1bmNzOwo+ICAgCj4g QEAgLTIzNSw4ICsyMzQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9nZW1fb2JqZWN0X2Z1 bmNzIHJhZGVvbl9nZW1fb2JqZWN0X2Z1bmNzID0gewo+ICAgCS5waW4gPSByYWRlb25fZ2VtX3By aW1lX3BpbiwKPiAgIAkudW5waW4gPSByYWRlb25fZ2VtX3ByaW1lX3VucGluLAo+ICAgCS5nZXRf c2dfdGFibGUgPSByYWRlb25fZ2VtX3ByaW1lX2dldF9zZ190YWJsZSwKPiAtCS52bWFwID0gcmFk ZW9uX2dlbV9wcmltZV92bWFwLAo+IC0JLnZ1bm1hcCA9IHJhZGVvbl9nZW1fcHJpbWVfdnVubWFw LAo+ICsJLnZtYXAgPSBkcm1fZ2VtX3R0bV92bWFwLAo+ICsJLnZ1bm1hcCA9IGRybV9nZW1fdHRt X3Z1bm1hcCwKPiAgIH07Cj4gICAKPiAgIC8qCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9yYWRlb24vcmFkZW9uX3ByaW1lLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9w cmltZS5jCj4gaW5kZXggYjlkZTBlNTFjMGJlLi4wODhkMzlhNTFjMGQgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcHJpbWUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9yYWRlb24vcmFkZW9uX3ByaW1lLmMKPiBAQCAtMzksMjYgKzM5LDYgQEAgc3RydWN0IHNn X3RhYmxlICpyYWRlb25fZ2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiAgIAlyZXR1cm4gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKG9iai0+ZGV2LCBiby0+ dGJvLnR0bS0+cGFnZXMsIG5wYWdlcyk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqcmFkZW9uX2dlbV9w cmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+IC17Cj4gLQlzdHJ1Y3QgcmFk ZW9uX2JvICpibyA9IGdlbV90b19yYWRlb25fYm8ob2JqKTsKPiAtCWludCByZXQ7Cj4gLQo+IC0J cmV0ID0gdHRtX2JvX2ttYXAoJmJvLT50Ym8sIDAsIGJvLT50Ym8ubnVtX3BhZ2VzLAo+IC0JCQkg ICZiby0+ZG1hX2J1Zl92bWFwKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0 KTsKPiAtCj4gLQlyZXR1cm4gYm8tPmRtYV9idWZfdm1hcC52aXJ0dWFsOwo+IC19Cj4gLQo+IC12 b2lkIHJhZGVvbl9nZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB2 b2lkICp2YWRkcikKPiAtewo+IC0Jc3RydWN0IHJhZGVvbl9ibyAqYm8gPSBnZW1fdG9fcmFkZW9u X2JvKG9iaik7Cj4gLQo+IC0JdHRtX2JvX2t1bm1hcCgmYm8tPmRtYV9idWZfdm1hcCk7Cj4gLX0K PiAtCj4gICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnJhZGVvbl9nZW1fcHJpbWVfaW1wb3J0X3Nn X3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCQkJCQkJc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqYXR0YWNoLAo+ICAgCQkJCQkJCXN0cnVjdCBzZ190YWJsZSAqc2cpCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmMgYi9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5jCj4gaW5kZXggN2Q1ZWJi MTAzMjNiLi43OTcxZjU3NDM2ZGQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL3JvY2tjaGlwX2RybV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9y b2NrY2hpcF9kcm1fZ2VtLmMKPiBAQCAtNTMyLDI2ICs1MzIsMzIgQEAgcm9ja2NoaXBfZ2VtX3By aW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ICAgCXJldHVybiBF UlJfUFRSKHJldCk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqcm9ja2NoaXBfZ2VtX3ByaW1lX3ZtYXAo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gK2ludCByb2NrY2hpcF9nZW1fcHJpbWVfdm1h cChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4g ICB7Cj4gICAJc3RydWN0IHJvY2tjaGlwX2dlbV9vYmplY3QgKnJrX29iaiA9IHRvX3JvY2tjaGlw X29iaihvYmopOwo+ICAgCj4gLQlpZiAocmtfb2JqLT5wYWdlcykKPiAtCQlyZXR1cm4gdm1hcChy a19vYmotPnBhZ2VzLCBya19vYmotPm51bV9wYWdlcywgVk1fTUFQLAo+IC0JCQkgICAgcGdwcm90 X3dyaXRlY29tYmluZShQQUdFX0tFUk5FTCkpOwo+ICsJaWYgKHJrX29iai0+cGFnZXMpIHsKPiAr CQl2b2lkICp2YWRkciA9IHZtYXAocmtfb2JqLT5wYWdlcywgcmtfb2JqLT5udW1fcGFnZXMsIFZN X01BUCwKPiArCQkJCSAgcGdwcm90X3dyaXRlY29tYmluZShQQUdFX0tFUk5FTCkpOwo+ICsJCWlm ICghdmFkZHIpCj4gKwkJCXJldHVybiAtRU5PTUVNOwo+ICsJCWRtYV9idWZfbWFwX3NldF92YWRk cihtYXAsIHZhZGRyKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiAgIAo+ICAgCWlmIChya19vYmot PmRtYV9hdHRycyAmIERNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5HKQo+IC0JCXJldHVybiBOVUxM Owo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJZG1hX2J1Zl9tYXBfc2V0X3ZhZGRyKG1hcCwgcmtf b2JqLT5rdmFkZHIpOwo+ICAgCj4gLQlyZXR1cm4gcmtfb2JqLT5rdmFkZHI7Cj4gKwlyZXR1cm4g MDsKPiAgIH0KPiAgIAo+IC12b2lkIHJvY2tjaGlwX2dlbV9wcmltZV92dW5tYXAoc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmosIHZvaWQgKnZhZGRyKQo+ICt2b2lkIHJvY2tjaGlwX2dlbV9wcmlt ZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAq bWFwKQo+ICAgewo+ICAgCXN0cnVjdCByb2NrY2hpcF9nZW1fb2JqZWN0ICpya19vYmogPSB0b19y b2NrY2hpcF9vYmoob2JqKTsKPiAgIAo+ICAgCWlmIChya19vYmotPnBhZ2VzKSB7Cj4gLQkJdnVu bWFwKHZhZGRyKTsKPiArCQl2dW5tYXAobWFwLT52YWRkcik7Cj4gICAJCXJldHVybjsKPiAgIAl9 Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2Ry bV9nZW0uaCBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmgKPiBp bmRleCA3ZmZjNTQxYmVhMDcuLjVhNzBhNTZjZDQwNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uaAo+IEBAIC0zMSw4ICszMSw4IEBAIHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqCj4gICByb2NrY2hpcF9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCQkJICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCAqYXR0YWNoLAo+ICAgCQkJCSAgIHN0cnVjdCBzZ190YWJsZSAqc2cpOwo+IC12b2lkICpyb2Nr Y2hpcF9nZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gLXZvaWQg cm9ja2NoaXBfZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9p ZCAqdmFkZHIpOwo+ICtpbnQgcm9ja2NoaXBfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiArdm9pZCByb2NrY2hpcF9n ZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3QgZG1hX2J1 Zl9tYXAgKm1hcCk7Cj4gICAKPiAgIC8qIGRybSBkcml2ZXIgbW1hcCBmaWxlIG9wZXJhdGlvbnMg Ki8KPiAgIGludCByb2NrY2hpcF9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueS9j aXJydXMuYyBiL2RyaXZlcnMvZ3B1L2RybS90aW55L2NpcnJ1cy5jCj4gaW5kZXggNzQ0YThlMzM3 ZTQxLi5jMDJlMzVlZDZlNzYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RpbnkvY2ly cnVzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlueS9jaXJydXMuYwo+IEBAIC0xNyw2ICsx Nyw3IEBACj4gICAgKi8KPiAgIAo+ICAgI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L2RtYS1idWYtbWFwLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ Cj4gICAjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4gICAKPiBAQCAtMzE0LDYgKzMxNSw3IEBAIHN0 YXRpYyBpbnQgY2lycnVzX2ZiX2JsaXRfcmVjdChzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwK PiAgIAkJCSAgICAgICBzdHJ1Y3QgZHJtX3JlY3QgKnJlY3QpCj4gICB7Cj4gICAJc3RydWN0IGNp cnJ1c19kZXZpY2UgKmNpcnJ1cyA9IHRvX2NpcnJ1cyhmYi0+ZGV2KTsKPiArCXN0cnVjdCBkbWFf YnVmX21hcCBtYXA7Cj4gICAJdm9pZCAqdm1hcDsKPiAgIAlpbnQgaWR4LCByZXQ7Cj4gICAKPiBA QCAtMzIxLDEwICszMjMsMTAgQEAgc3RhdGljIGludCBjaXJydXNfZmJfYmxpdF9yZWN0KHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ICAgCWlmICghZHJtX2Rldl9lbnRlcigmY2lycnVzLT5k ZXYsICZpZHgpKQo+ICAgCQlnb3RvIG91dDsKPiAgIAo+IC0JcmV0ID0gLUVOT01FTTsKPiAtCXZt YXAgPSBkcm1fZ2VtX3NobWVtX3ZtYXAoZmItPm9ialswXSk7Cj4gLQlpZiAoIXZtYXApCj4gKwly ZXQgPSBkcm1fZ2VtX3NobWVtX3ZtYXAoZmItPm9ialswXSwgJm1hcCk7Cj4gKwlpZiAocmV0KQo+ ICAgCQlnb3RvIG91dF9kZXZfZXhpdDsKPiArCXZtYXAgPSBtYXAudmFkZHI7IC8qIFRPRE86IFVz ZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4gICAKPiAgIAlpZiAoY2lycnVzLT5j cHAgPT0gZmItPmZvcm1hdC0+Y3BwWzBdKQo+ICAgCQlkcm1fZmJfbWVtY3B5X2RzdGNsaXAoY2ly cnVzLT52cmFtLAo+IEBAIC0zNDMsNyArMzQ1LDcgQEAgc3RhdGljIGludCBjaXJydXNfZmJfYmxp dF9yZWN0KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ICAgCWVsc2UKPiAgIAkJV0FSTl9P Tl9PTkNFKCJjcHAgbWlzbWF0Y2giKTsKPiAgIAo+IC0JZHJtX2dlbV9zaG1lbV92dW5tYXAoZmIt Pm9ialswXSwgdm1hcCk7Cj4gKwlkcm1fZ2VtX3NobWVtX3Z1bm1hcChmYi0+b2JqWzBdLCAmbWFw KTsKPiAgIAlyZXQgPSAwOwo+ICAgCj4gICBvdXRfZGV2X2V4aXQ6Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS90aW55L2dtMTJ1MzIwLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGlueS9nbTEy dTMyMC5jCj4gaW5kZXggY2MzOTc2NzFmNjg5Li4xMmE4OTBjZWE2ZTkgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3RpbnkvZ20xMnUzMjAuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90 aW55L2dtMTJ1MzIwLmMKPiBAQCAtMjQ4LDYgKzI0OCw3IEBAIHN0YXRpYyB2b2lkIGdtMTJ1MzIw X2NvcHlfZmJfdG9fYmxvY2tzKHN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwKQo+ICAg ewo+ICAgCWludCBibG9jaywgZHN0X29mZnNldCwgbGVuLCByZW1haW4sIHJldCwgeDEsIHgyLCB5 MSwgeTI7Cj4gICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4gKwlzdHJ1Y3QgZG1hX2J1 Zl9tYXAgbWFwOwo+ICAgCXZvaWQgKnZhZGRyOwo+ICAgCXU4ICpzcmM7Cj4gICAKPiBAQCAtMjYy LDExICsyNjMsMTIgQEAgc3RhdGljIHZvaWQgZ20xMnUzMjBfY29weV9mYl90b19ibG9ja3Moc3Ry dWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjApCj4gICAJeTEgPSBnbTEydTMyMC0+ZmJfdXBk YXRlLnJlY3QueTE7Cj4gICAJeTIgPSBnbTEydTMyMC0+ZmJfdXBkYXRlLnJlY3QueTI7Cj4gICAK PiAtCXZhZGRyID0gZHJtX2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0pOwo+IC0JaWYgKElTX0VS Uih2YWRkcikpIHsKPiAtCQlHTTEyVTMyMF9FUlIoImZhaWxlZCB0byB2bWFwIGZiOiAlbGRcbiIs IFBUUl9FUlIodmFkZHIpKTsKPiArCXJldCA9IGRybV9nZW1fc2htZW1fdm1hcChmYi0+b2JqWzBd LCAmbWFwKTsKPiArCWlmIChyZXQpIHsKPiArCQlHTTEyVTMyMF9FUlIoImZhaWxlZCB0byB2bWFw IGZiOiAlZFxuIiwgcmV0KTsKPiAgIAkJZ290byBwdXRfZmI7Cj4gICAJfQo+ICsJdmFkZHIgPSBt YXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4g ICAKPiAgIAlpZiAoZmItPm9ialswXS0+aW1wb3J0X2F0dGFjaCkgewo+ICAgCQlyZXQgPSBkbWFf YnVmX2JlZ2luX2NwdV9hY2Nlc3MoCj4gQEAgLTMxOCw3ICszMjAsNyBAQCBzdGF0aWMgdm9pZCBn bTEydTMyMF9jb3B5X2ZiX3RvX2Jsb2NrcyhzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMy MCkKPiAgIAkJCUdNMTJVMzIwX0VSUigiZG1hX2J1Zl9lbmRfY3B1X2FjY2VzcyBlcnI6ICVkXG4i LCByZXQpOwo+ICAgCX0KPiAgIHZ1bm1hcDoKPiAtCWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5v YmpbMF0sIHZhZGRyKTsKPiArCWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sICZtYXAp Owo+ICAgcHV0X2ZiOgo+ICAgCWRybV9mcmFtZWJ1ZmZlcl9wdXQoZmIpOwo+ICAgCWdtMTJ1MzIw LT5mYl91cGRhdGUuZmIgPSBOVUxMOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdWRs L3VkbF9tb2Rlc2V0LmMgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rlc2V0LmMKPiBpbmRl eCBmZWY0M2Y0ZTNiYWMuLjQyZWViYTFkZmRiZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vdWRsL3VkbF9tb2Rlc2V0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rl c2V0LmMKPiBAQCAtMjc2LDYgKzI3Niw3IEBAIHN0YXRpYyBpbnQgdWRsX2hhbmRsZV9kYW1hZ2Uo c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCB4LCBpbnQgeSwKPiAgIAlzdHJ1Y3QgdXJi ICp1cmI7Cj4gICAJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gICAJaW50IGxvZ19icHA7Cj4gKwlz dHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICAgCXZvaWQgKnZhZGRyOwo+ICAgCj4gICAJcmV0ID0g dWRsX2xvZ19jcHAoZmItPmZvcm1hdC0+Y3BwWzBdKTsKPiBAQCAtMjk2LDExICsyOTcsMTIgQEAg c3RhdGljIGludCB1ZGxfaGFuZGxlX2RhbWFnZShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwg aW50IHgsIGludCB5LAo+ICAgCQkJcmV0dXJuIHJldDsKPiAgIAl9Cj4gICAKPiAtCXZhZGRyID0g ZHJtX2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0pOwo+IC0JaWYgKElTX0VSUih2YWRkcikpIHsK PiArCXJldCA9IGRybV9nZW1fc2htZW1fdm1hcChmYi0+b2JqWzBdLCAmbWFwKTsKPiArCWlmIChy ZXQpIHsKPiAgIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdm1hcCBmYlxuIik7Cj4gICAJCWdvdG8g b3V0X2RtYV9idWZfZW5kX2NwdV9hY2Nlc3M7Cj4gICAJfQo+ICsJdmFkZHIgPSBtYXAudmFkZHI7 IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4gICAKPiAgIAl1 cmIgPSB1ZGxfZ2V0X3VyYihkZXYpOwo+ICAgCWlmICghdXJiKQo+IEBAIC0zMzMsNyArMzM1LDcg QEAgc3RhdGljIGludCB1ZGxfaGFuZGxlX2RhbWFnZShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwgaW50IHgsIGludCB5LAo+ICAgCXJldCA9IDA7Cj4gICAKPiAgIG91dF9kcm1fZ2VtX3NobWVt X3Z1bm1hcDoKPiAtCWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sIHZhZGRyKTsKPiAr CWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sICZtYXApOwo+ICAgb3V0X2RtYV9idWZf ZW5kX2NwdV9hY2Nlc3M6Cj4gICAJaWYgKGltcG9ydF9hdHRhY2gpIHsKPiAgIAkJdG1wX3JldCA9 IGRtYV9idWZfZW5kX2NwdV9hY2Nlc3MoaW1wb3J0X2F0dGFjaC0+ZG1hYnVmLAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbW9kZS5jIGIvZHJpdmVycy9ncHUv ZHJtL3Zib3h2aWRlby92Ym94X21vZGUuYwo+IGluZGV4IDkzMWM1NTEyNjE0OC4uZjI2OGZiMjU4 YzgzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9tb2RlLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbW9kZS5jCj4gQEAgLTksNiAr OSw4IEBACj4gICAgKiAgICAgICAgICBNaWNoYWVsIFRoYXllciA8bWljaGFlbC50aGF5ZXJAb3Jh Y2xlLmNvbSwKPiAgICAqICAgICAgICAgIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5j b20+Cj4gICAgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLW1hcC5oPgo+ICAgI2lu Y2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMu aD4KPiBAQCAtMzg0LDYgKzM4Niw4IEBAIHN0YXRpYyB2b2lkIHZib3hfY3Vyc29yX2F0b21pY191 cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJdTMyIGhlaWdodCA9IHBsYW5lLT5z dGF0ZS0+Y3J0Y19oOwo+ICAgCXNpemVfdCBkYXRhX3NpemUsIG1hc2tfc2l6ZTsKPiAgIAl1MzIg ZmxhZ3M7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICsJaW50IHJldDsKPiAgIAl1OCAq c3JjOwo+ICAgCj4gICAJLyoKPiBAQCAtMzk3LDggKzQwMSw4IEBAIHN0YXRpYyB2b2lkIHZib3hf Y3Vyc29yX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAKPiAgIAl2 Ym94X2NydGMtPmN1cnNvcl9lbmFibGVkID0gdHJ1ZTsKPiAgIAo+IC0Jc3JjID0gZHJtX2dlbV92 cmFtX3ZtYXAoZ2JvKTsKPiAtCWlmIChJU19FUlIoc3JjKSkgewo+ICsJcmV0ID0gZHJtX2dlbV92 cmFtX3ZtYXAoZ2JvLCAmbWFwKTsKPiArCWlmIChyZXQpIHsKPiAgIAkJLyoKPiAgIAkJICogQlVH OiB3ZSBzaG91bGQgaGF2ZSBwaW5uZWQgdGhlIEJPIGluIHByZXBhcmVfZmIoKS4KPiAgIAkJICov Cj4gQEAgLTQwNiw2ICs0MTAsNyBAQCBzdGF0aWMgdm9pZCB2Ym94X2N1cnNvcl9hdG9taWNfdXBk YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCQlEUk1fV0FSTigiQ291bGQgbm90IG1h cCBjdXJzb3IgYm8sIHNraXBwaW5nIHVwZGF0ZVxuIik7Cj4gICAJCXJldHVybjsKPiAgIAl9Cj4g KwlzcmMgPSBtYXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Bl cmx5ICovCj4gICAKPiAgIAkvKgo+ICAgCSAqIFRoZSBtYXNrIG11c3QgYmUgY2FsY3VsYXRlZCBi YXNlZCBvbiB0aGUgYWxwaGEKPiBAQCAtNDE2LDcgKzQyMSw3IEBAIHN0YXRpYyB2b2lkIHZib3hf Y3Vyc29yX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJZGF0YV9z aXplID0gd2lkdGggKiBoZWlnaHQgKiA0ICsgbWFza19zaXplOwo+ICAgCj4gICAJY29weV9jdXJz b3JfaW1hZ2Uoc3JjLCB2Ym94LT5jdXJzb3JfZGF0YSwgd2lkdGgsIGhlaWdodCwgbWFza19zaXpl KTsKPiAtCWRybV9nZW1fdnJhbV92dW5tYXAoZ2JvLCBzcmMpOwo+ICsJZHJtX2dlbV92cmFtX3Z1 bm1hcChnYm8sICZtYXApOwo+ICAgCj4gICAJZmxhZ3MgPSBWQk9YX01PVVNFX1BPSU5URVJfVklT SUJMRSB8IFZCT1hfTU9VU0VfUE9JTlRFUl9TSEFQRSB8Cj4gICAJCVZCT1hfTU9VU0VfUE9JTlRF Ul9BTFBIQTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfYm8uYyBiL2Ry aXZlcnMvZ3B1L2RybS92YzQvdmM0X2JvLmMKPiBpbmRleCA1NTdmMGQxZTY0MzcuLmYyOTBhOWE5 NDJkYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfYm8uYwo+IEBAIC03ODUsMTYgKzc4NSwxNiBAQCBpbnQg dmM0X3ByaW1lX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQo+ICAgCXJldHVybiBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwKG9iaiwgdm1h KTsKPiAgIH0KPiAgIAo+IC12b2lkICp2YzRfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiAraW50IHZjNF9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LCBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCkKPiAgIHsKPiAgIAlzdHJ1Y3QgdmM0X2JvICpibyA9 IHRvX3ZjNF9ibyhvYmopOwo+ICAgCj4gICAJaWYgKGJvLT52YWxpZGF0ZWRfc2hhZGVyKSB7Cj4g ICAJCURSTV9ERUJVRygibW1hcGluZyBvZiBzaGFkZXIgQk9zIG5vdCBhbGxvd2VkLlxuIik7Cj4g LQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gICAJfQo+ ICAgCj4gLQlyZXR1cm4gZHJtX2dlbV9jbWFfcHJpbWVfdm1hcChvYmopOwo+ICsJcmV0dXJuIGRy bV9nZW1fY21hX3ByaW1lX3ZtYXAob2JqLCBtYXApOwo+ICAgfQo+ICAgCj4gICBzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYu aCBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oCj4gaW5kZXggY2M3OWIxYWFhODc4Li45 MDRmMmMzNmM5NjMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaAo+IEBAIC04MDYsNyArODA2LDcg QEAgaW50IHZjNF9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Cj4gICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnZjNF9wcmlt ZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJCQkJCSBzdHJ1 Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCj4gICAJCQkJCQkgc3RydWN0IHNnX3RhYmxl ICpzZ3QpOwo+IC12b2lkICp2YzRfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aik7Cj4gK2ludCB2YzRfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3Ry dWN0IGRtYV9idWZfbWFwICptYXApOwo+ICAgaW50IHZjNF9ib19jYWNoZV9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOwo+ICAgdm9pZCB2YzRfYm9fY2FjaGVfZGVzdHJveShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKPiAgIGludCB2YzRfYm9faW5jX3VzZWNudChzdHJ1Y3QgdmM0X2JvICpi byk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmMgYi9kcml2 ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Rydi5jCj4gaW5kZXggZmE1NGE2ZDE0MDNkLi5iMmFhMjZl MWU0YTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9kcnYuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmMKPiBAQCAtMzYxLDI0ICszNjEsMzAg QEAgc3RhdGljIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqdmdlbV9wcmltZV9pbXBvcnRfc2dfdGFi bGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAlyZXR1cm4gJm9iai0+YmFzZTsKPiAgIH0K PiAgIAo+IC1zdGF0aWMgdm9pZCAqdmdlbV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqKQo+ICtzdGF0aWMgaW50IHZnZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IGRybV92 Z2VtX2dlbV9vYmplY3QgKmJvID0gdG9fdmdlbV9ibyhvYmopOwo+ICAgCWxvbmcgbl9wYWdlcyA9 IG9iai0+c2l6ZSA+PiBQQUdFX1NISUZUOwo+ICAgCXN0cnVjdCBwYWdlICoqcGFnZXM7Cj4gKwl2 b2lkICp2YWRkcjsKPiAgIAo+ICAgCXBhZ2VzID0gdmdlbV9waW5fcGFnZXMoYm8pOwo+ICAgCWlm IChJU19FUlIocGFnZXMpKQo+IC0JCXJldHVybiBOVUxMOwo+ICsJCXJldHVybiBQVFJfRVJSKHBh Z2VzKTsKPiArCj4gKwl2YWRkciA9IHZtYXAocGFnZXMsIG5fcGFnZXMsIDAsIHBncHJvdF93cml0 ZWNvbWJpbmUoUEFHRV9LRVJORUwpKTsKPiArCWlmICghdmFkZHIpCj4gKwkJcmV0dXJuIC1FTk9N RU07Cj4gKwlkbWFfYnVmX21hcF9zZXRfdmFkZHIobWFwLCB2YWRkcik7Cj4gICAKPiAtCXJldHVy biB2bWFwKHBhZ2VzLCBuX3BhZ2VzLCAwLCBwZ3Byb3Rfd3JpdGVjb21iaW5lKFBBR0VfS0VSTkVM KSk7Cj4gKwlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdm9pZCB2Z2VtX3ByaW1lX3Z1 bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpCj4gK3N0YXRpYyB2 b2lkIHZnZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qg ZG1hX2J1Zl9tYXAgKm1hcCkKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX3ZnZW1fZ2VtX29iamVjdCAq Ym8gPSB0b192Z2VtX2JvKG9iaik7Cj4gICAKPiAtCXZ1bm1hcCh2YWRkcik7Cj4gKwl2dW5tYXAo bWFwLT52YWRkcik7Cj4gICAJdmdlbV91bnBpbl9wYWdlcyhibyk7Cj4gICB9Cj4gICAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jIGIvZHJpdmVy cy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jCj4gaW5kZXggNGYzNGVmMzRiYTYwLi43 NGRiNWE4NDBiZWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zy b250X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5j Cj4gQEAgLTI5MCwyMiArMjkwLDI4IEBAIGludCB4ZW5fZHJtX2Zyb250X2dlbV9tbWFwKHN0cnVj dCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiAgIAlyZXR1cm4gZ2Vt X21tYXBfb2JqKHhlbl9vYmosIHZtYSk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqeGVuX2RybV9mcm9u dF9nZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopCj4gK2ludCB4 ZW5fZHJtX2Zyb250X2dlbV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29i aiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IHhlbl9nZW1fb2Jq ZWN0ICp4ZW5fb2JqID0gdG9feGVuX2dlbV9vYmooZ2VtX29iaik7Cj4gKwl2b2lkICp2YWRkcjsK PiAgIAo+ICAgCWlmICgheGVuX29iai0+cGFnZXMpCj4gLQkJcmV0dXJuIE5VTEw7Cj4gKwkJcmV0 dXJuIC1FTk9NRU07Cj4gICAKPiAgIAkvKiBQbGVhc2Ugc2VlIGNvbW1lbnQgaW4gZ2VtX21tYXBf b2JqIG9uIG1hcHBpbmcgYW5kIGF0dHJpYnV0ZXMuICovCj4gLQlyZXR1cm4gdm1hcCh4ZW5fb2Jq LT5wYWdlcywgeGVuX29iai0+bnVtX3BhZ2VzLAo+IC0JCSAgICBWTV9NQVAsIFBBR0VfS0VSTkVM KTsKPiArCXZhZGRyID0gdm1hcCh4ZW5fb2JqLT5wYWdlcywgeGVuX29iai0+bnVtX3BhZ2VzLAo+ ICsJCSAgICAgVk1fTUFQLCBQQUdFX0tFUk5FTCk7Cj4gKwlpZiAoIXZhZGRyKQo+ICsJCXJldHVy biAtRU5PTUVNOwo+ICsJZG1hX2J1Zl9tYXBfc2V0X3ZhZGRyKG1hcCwgdmFkZHIpOwo+ICsKPiAr CXJldHVybiAwOwo+ICAgfQo+ICAgCj4gICB2b2lkIHhlbl9kcm1fZnJvbnRfZ2VtX3ByaW1lX3Z1 bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmosCj4gLQkJCQkgICAgdm9pZCAqdmFk ZHIpCj4gKwkJCQkgICAgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gLQl2dW5tYXAo dmFkZHIpOwo+ICsJdnVubWFwKG1hcC0+dmFkZHIpOwo+ICAgfQo+ICAgCj4gICBpbnQgeGVuX2Ry bV9mcm9udF9nZW1fcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmosCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uaCBiL2Ry aXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uaAo+IGluZGV4IGEzOTY3NWZhMzFi Mi4uYTRlNjdkMGExNDljIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2Ry bV9mcm9udF9nZW0uaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9n ZW0uaAo+IEBAIC0xMiw2ICsxMiw3IEBACj4gICAjZGVmaW5lIF9fWEVOX0RSTV9GUk9OVF9HRU1f SAo+ICAgCj4gICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50Owo+ICtzdHJ1Y3QgZG1hX2J1Zl9t YXA7Cj4gICBzdHJ1Y3QgZHJtX2RldmljZTsKPiAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdDsKPiAg IHN0cnVjdCBmaWxlOwo+IEBAIC0zNCwxMCArMzUsMTEgQEAgdm9pZCB4ZW5fZHJtX2Zyb250X2dl bV9mcmVlX29iamVjdF91bmxvY2tlZChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopOwo+ ICAgCj4gICBpbnQgeGVuX2RybV9mcm9udF9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgCj4gLXZvaWQgKnhlbl9kcm1fZnJvbnRfZ2Vt X3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKTsKPiAraW50IHhlbl9k cm1fZnJvbnRfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqLAo+ ICsJCQkJIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIAo+ICAgdm9pZCB4ZW5fZHJtX2Zy b250X2dlbV9wcmltZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqLAo+IC0J CQkJICAgIHZvaWQgKnZhZGRyKTsKPiArCQkJCSAgICBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCk7 Cj4gICAKPiAgIGludCB4ZW5fZHJtX2Zyb250X2dlbV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqZ2VtX29iaiwKPiAgIAkJCQkgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZ2VtLmggYi9pbmNsdWRlL2RybS9kcm1fZ2Vt LmgKPiBpbmRleCBjMzhkZDM1ZGEwMGIuLjVlNmRhYTFjOTgyZiAxMDA2NDQKPiAtLS0gYS9pbmNs dWRlL2RybS9kcm1fZ2VtLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZ2VtLmgKPiBAQCAtMzks NiArMzksNyBAQAo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV92bWFfbWFuYWdlci5oPgo+ICAg Cj4gK3N0cnVjdCBkbWFfYnVmX21hcDsKPiAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdDsKPiAgIAo+ ICAgLyoqCj4gQEAgLTEzOCw3ICsxMzksNyBAQCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3Mg ewo+ICAgCSAqCj4gICAJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4KPiAgIAkgKi8KPiAt CXZvaWQgKigqdm1hcCkoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICsJaW50ICgqdm1h cCkoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsK PiAgIAo+ICAgCS8qKgo+ICAgCSAqIEB2dW5tYXA6Cj4gQEAgLTE0OCw3ICsxNDksNyBAQCBzdHJ1 Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3Mgewo+ICAgCSAqCj4gICAJICogVGhpcyBjYWxsYmFjayBp cyBvcHRpb25hbC4KPiAgIAkgKi8KPiAtCXZvaWQgKCp2dW5tYXApKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqLCB2b2lkICp2YWRkcik7Cj4gKwl2b2lkICgqdnVubWFwKShzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApOwo+ICAgCj4gICAJLyoqCj4g ICAJICogQG1tYXA6Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW1fY21hX2hlbHBl ci5oIGIvaW5jbHVkZS9kcm0vZHJtX2dlbV9jbWFfaGVscGVyLmgKPiBpbmRleCBhMDY0YjBkMWM0 ODAuLmNhZjk4YjljZjRiNCAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fZ2VtX2NtYV9o ZWxwZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fY21hX2hlbHBlci5oCj4gQEAgLTEw Myw3ICsxMDMsNyBAQCBkcm1fZ2VtX2NtYV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKPiAgIAkJCQkgIHN0cnVjdCBzZ190YWJsZSAqc2d0KTsKPiAgIGludCBk cm1fZ2VtX2NtYV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkJ ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+IC12b2lkICpkcm1fZ2VtX2NtYV9wcmlt ZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAraW50IGRybV9nZW1fY21hX3By aW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAq bWFwKTsKPiAgIAo+ICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICoKPiAgIGRybV9nZW1fY21hX2Ny ZWF0ZV9vYmplY3RfZGVmYXVsdF9mdW5jcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qg c2l6ZSk7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmgg Yi9pbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oCj4gaW5kZXggNTM4MWYwYzhjZjZm Li4zNDQ5YTAzNTNmZTAgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9o ZWxwZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmgKPiBAQCAt MTEzLDggKzExMyw4IEBAIGludCBkcm1fZ2VtX3NobWVtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dl bV9zaG1lbV9vYmplY3QgKnNobWVtKTsKPiAgIHZvaWQgZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXMo c3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSk7Cj4gICBpbnQgZHJtX2dlbV9zaG1l bV9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICAgdm9pZCBkcm1fZ2VtX3NobWVt X3VucGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAtdm9pZCAqZHJtX2dlbV9zaG1l bV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAtdm9pZCBkcm1fZ2VtX3NobWVt X3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+ICtpbnQg ZHJtX2dlbV9zaG1lbV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3QgZG1h X2J1Zl9tYXAgKm1hcCk7Cj4gK3ZvaWQgZHJtX2dlbV9zaG1lbV92dW5tYXAoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIAo+ICAgaW50IGRy bV9nZW1fc2htZW1fbWFkdmlzZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IG1hZHYp Owo+ICAgCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaCBi L2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaAo+IGluZGV4IDEyOGY4ODE3NGQzMi4u YzBkMjhiYTBmNWM5IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxw ZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaAo+IEBAIC0xMCw2 ICsxMCw3IEBACj4gICAjaW5jbHVkZSA8ZHJtL3R0bS90dG1fYm9fYXBpLmg+Cj4gICAjaW5jbHVk ZSA8ZHJtL3R0bS90dG1fYm9fZHJpdmVyLmg+Cj4gICAKPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1i dWYtbWFwLmg+Cj4gICAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+IC8qIGZvciBjb250YWluZXJf b2YoKSAqLwo+ICAgCj4gICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWI7Cj4gQEAgLTI5LDkg KzMwLDggQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0Owo+ICAgCj4gICAvKioKPiAgICAqIHN0cnVj dCBkcm1fZ2VtX3ZyYW1fb2JqZWN0IC0gR0VNIG9iamVjdCBiYWNrZWQgYnkgVlJBTQo+IC0gKiBA Z2VtOglHRU0gb2JqZWN0Cj4gICAgKiBAYm86CQlUVE0gYnVmZmVyIG9iamVjdAo+IC0gKiBAa21h cDoJTWFwcGluZyBpbmZvcm1hdGlvbiBmb3IgQGJvCj4gKyAqIEBtYXA6CU1hcHBpbmcgaW5mb3Jt YXRpb24gZm9yIEBibwo+ICAgICogQHBsYWNlbWVudDoJVFRNIHBsYWNlbWVudCBpbmZvcm1hdGlv bi4gU3VwcG9ydGVkIHBsYWNlbWVudHMgYXJlIFwKPiAgIAklVFRNX1BMX1ZSQU0gYW5kICVUVE1f UExfU1lTVEVNCj4gICAgKiBAcGxhY2VtZW50czoJVFRNIHBsYWNlbWVudCBpbmZvcm1hdGlvbi4K PiBAQCAtNTAsMTUgKzUwLDE1IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKPiAgICAqLwo+ICAg c3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3Qgewo+ICAgCXN0cnVjdCB0dG1fYnVmZmVyX29iamVj dCBibzsKPiAtCXN0cnVjdCB0dG1fYm9fa21hcF9vYmoga21hcDsKPiArCXN0cnVjdCBkbWFfYnVm X21hcCBtYXA7Cj4gICAKPiAgIAkvKioKPiAtCSAqIEBrbWFwX3VzZV9jb3VudDoKPiArCSAqIEB2 bWFwX3VzZV9jb3VudDoKPiAgIAkgKgo+ICAgCSAqIFJlZmVyZW5jZSBjb3VudCBvbiB0aGUgdmly dHVhbCBhZGRyZXNzLgo+ICAgCSAqIFRoZSBhZGRyZXNzIGFyZSB1bi1tYXBwZWQgd2hlbiB0aGUg Y291bnQgcmVhY2hlcyB6ZXJvLgo+ICAgCSAqLwo+IC0JdW5zaWduZWQgaW50IGttYXBfdXNlX2Nv dW50Owo+ICsJdW5zaWduZWQgaW50IHZtYXBfdXNlX2NvdW50Owo+ICAgCj4gICAJLyogU3VwcG9y dGVkIHBsYWNlbWVudHMgYXJlICVUVE1fUExfVlJBTSBhbmQgJVRUTV9QTF9TWVNURU0gKi8KPiAg IAlzdHJ1Y3QgdHRtX3BsYWNlbWVudCBwbGFjZW1lbnQ7Cj4gQEAgLTk3LDggKzk3LDggQEAgdTY0 IGRybV9nZW1fdnJhbV9tbWFwX29mZnNldChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2Jv KTsKPiAgIHM2NCBkcm1fZ2VtX3ZyYW1fb2Zmc2V0KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0 ICpnYm8pOwo+ICAgaW50IGRybV9nZW1fdnJhbV9waW4oc3RydWN0IGRybV9nZW1fdnJhbV9vYmpl Y3QgKmdibywgdW5zaWduZWQgbG9uZyBwbF9mbGFnKTsKPiAgIGludCBkcm1fZ2VtX3ZyYW1fdW5w aW4oc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibyk7Cj4gLXZvaWQgKmRybV9nZW1fdnJh bV92bWFwKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8pOwo+IC12b2lkIGRybV9nZW1f dnJhbV92dW5tYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywgdm9pZCAqdmFkZHIp Owo+ICtpbnQgZHJtX2dlbV92cmFtX3ZtYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdi bywgc3RydWN0IGRtYV9idWZfbWFwICptYXApOwo+ICt2b2lkIGRybV9nZW1fdnJhbV92dW5tYXAo c3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywgc3RydWN0IGRtYV9idWZfbWFwICptYXAp Owo+ICAgCj4gICBpbnQgZHJtX2dlbV92cmFtX2ZpbGxfY3JlYXRlX2R1bWIoc3RydWN0IGRybV9m aWxlICpmaWxlLAo+ICAgCQkJCSAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= 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=-12.1 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER,NICE_REPLY_A,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 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 6B872C433E7 for ; Thu, 15 Oct 2020 14:21:52 +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 B2BD120757 for ; Thu, 15 Oct 2020 14:21:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="ev4nEbIT" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B2BD120757 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.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 E60936ED28; Thu, 15 Oct 2020 14:21:50 +0000 (UTC) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2065.outbound.protection.outlook.com [40.107.94.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7A83C6ED20; Thu, 15 Oct 2020 14:21:49 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AUnnCFSXdry2sw1L4ia6O64g1l2Yg2XprdkPadyFI+VDLYQpELm2VsYMZE3+rN98ZLfKNf7ZphX5GGRd9D7k7jaw6iraQ+/dlfx0auXBDyTL9Zf8PtqanjhXpEyLOksrJfH1PN0DU1LDl5aDNME7fDWt2LvREi7iUXcpWzOCpdH9MSplKXOQ3CTMUlYUBcJppDZQh07ayvBDwiGlSWnHDYJpgZk8Yk+LGqgIfBLuxaEeYuGwwWwAFxtJGr9Qzh6uFO+9J061vwhH7lHFA+OAy6zEpF5zZuXR+AGe9W8+mQdS28X7YW/7SqucqFXCKoiOYeLxI0jtY4jEhuNMTEfWAQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=s1zJaDsCknzbjiRt/StSITflJScs7eZVdKcjpsdgjsI=; b=TQjQI9Srk0O8AB+AzDXQaAaw3QNjYOf/Xb8IHEneovSvqi8INt9ySqbThfjOf7FFqwXfdlk4TquKI6SY+K3ginCak7As1gfNfVjMNGMZSd04rDfYNZs5FKXaQXoU2Kazh+pOlgwVlQJMsFybcAeNFPF9NFtfWrTV4Lb8YCxM7EPq4hZebKJsNRAuibpw6FIb42JSLRtOd77RqZs99ouW3JJs3FYQL0sj8tsYwYeGZC4TRZyTuTrTX1gjTGHvjrLpinm40mVHBKf5gRgs9Ku/A2sypboomyvvxtmJWfMtLL92nT4rZzq4PSgY/LiSE562+kwhPpYDtrURlCNiA/9ZbA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=s1zJaDsCknzbjiRt/StSITflJScs7eZVdKcjpsdgjsI=; b=ev4nEbIT7ZjdwzBc5xW1PhxZPJppJlzPkhdhNwttquRQxJJCQXZL55EbUdeZxbtPSplLsnq7IvKwRQBHMH9ra5rt/6EYp863XKvnG8cPNuJprat50AFX3W4jScQhmUjBSqmW0qhMaGuFTfP5ECkw8GsXdJPH8Owv8OUVRJUiGMM= Authentication-Results: lists.linaro.org; dkim=none (message not signed) header.d=none;lists.linaro.org; dmarc=none action=none header.from=amd.com; Received: from MN2PR12MB3775.namprd12.prod.outlook.com (2603:10b6:208:159::19) by BL0PR12MB4932.namprd12.prod.outlook.com (2603:10b6:208:1c2::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.21; Thu, 15 Oct 2020 14:21:45 +0000 Received: from MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::f8f7:7403:1c92:3a60]) by MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::f8f7:7403:1c92:3a60%6]) with mapi id 15.20.3477.021; Thu, 15 Oct 2020 14:21:45 +0000 Subject: Re: [PATCH v4 06/10] drm/gem: Use struct dma_buf_map in GEM vmap ops and convert GEM backends To: Thomas Zimmermann , maarten.lankhorst@linux.intel.com, mripard@kernel.org, airlied@linux.ie, daniel@ffwll.ch, sam@ravnborg.org, alexander.deucher@amd.com, kraxel@redhat.com, l.stach@pengutronix.de, linux+etnaviv@armlinux.org.uk, christian.gmeiner@gmail.com, inki.dae@samsung.com, jy0922.shim@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, kgene@kernel.org, krzk@kernel.org, yuq825@gmail.com, bskeggs@redhat.com, robh@kernel.org, tomeu.vizoso@collabora.com, steven.price@arm.com, alyssa.rosenzweig@collabora.com, hjc@rock-chips.com, heiko@sntech.de, hdegoede@redhat.com, sean@poorly.run, eric@anholt.net, oleksandr_andrushchenko@epam.com, ray.huang@amd.com, sumit.semwal@linaro.org, emil.velikov@collabora.com, luben.tuikov@amd.com, apaneers@amd.com, linus.walleij@linaro.org, melissa.srw@gmail.com, chris@chris-wilson.co.uk, miaoqinglang@huawei.com References: <20201015123806.32416-1-tzimmermann@suse.de> <20201015123806.32416-7-tzimmermann@suse.de> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <6bd7d5cf-06c8-3fd8-9bbe-a80ff6bb327e@amd.com> Date: Thu, 15 Oct 2020 16:21:31 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 In-Reply-To: <20201015123806.32416-7-tzimmermann@suse.de> Content-Language: en-US X-Originating-IP: [80.187.123.114] X-ClientProxiedBy: AM0PR03CA0058.eurprd03.prod.outlook.com (2603:10a6:208::35) To MN2PR12MB3775.namprd12.prod.outlook.com (2603:10b6:208:159::19) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [192.168.137.56] (80.187.123.114) by AM0PR03CA0058.eurprd03.prod.outlook.com (2603:10a6:208::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.20 via Frontend Transport; Thu, 15 Oct 2020 14:21:37 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 1402a292-410c-4dd7-5df2-08d87115a47e X-MS-TrafficTypeDiagnostic: BL0PR12MB4932: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qZE7L/zH5aGxqiqWmrxr/TkD8SGVxq492TWlZDRQ8SWP9LUeAjghyncA+V0RbcCiQOlF9BpSa0szaBr1rLMb4pd7NGjinWmMKZzBxFhl/AbSzHryacecP3jmc8SciQoEijiChjkblXtHc4usMJHnAzcMutTXYvIX5HfX6Nm+xOdzuOQCtRKC8c4GqNrw9YZ9L8ZX7aUG8Jez2Kf7T8MqZ1TKwlDddWh5CcJb0lhqwIRd8/qFy18d0ZTQ4NxTPYPSxuSOLxsOH7f+KxYILSZqFnNsnutVIAcmfePky9fzaNcsZwXH2qM8YnHjzPKV14l7WHo1Jo4RzSeIOOJY8yqf3Df5uGdhO9DrcUMwhgotFpmcaIVCTbe+MfIKTxkpI7od6w3lF2gvYlK/Q58+O1aXt5seGL7Bw9/go+uTg39iKc1BB9wtePnfCCvCmVcSs0aQ X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR12MB3775.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(39860400002)(396003)(366004)(136003)(376002)(346002)(36756003)(5660300002)(8936002)(30864003)(478600001)(8676002)(26005)(16526019)(7406005)(34490700002)(186003)(2616005)(16576012)(316002)(6666004)(6486002)(31686004)(52116002)(66574015)(86362001)(66946007)(956004)(83380400001)(2906002)(31696002)(4326008)(66556008)(66476007)(7416002)(921003)(43740500002)(579004)(559001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: m1LAH0A49qIsnoSwQsouBc95tPZsFvI7ILL+HyITCdwV3eSL2iszdF0dHXxMB2oIGD335BwU2D+eG6IuPWolrqv1GJ40za1adhpl3RbZ1r2ntg6FKwrWvSGDqY/euNspLIimOkkAyhMiIudpJhNHjSvToTllhvq/vOB6yXkJ2pK4/2RJUktLTxIQoz6/ZYV5B2FXrDyhgO+doQDORwIK5yqGiTmmTcP2JsACozYQc3xOqlQsDRoVZr6KFOB9/QRdbB1D0k+BYNH8mBU+lCqEXTZeUd3OX2d9Rz7ZUreK8Ld9YFw2teXCkJHPYtYvf7YtFAidpvqnsa+zqvxTCXrJgmEAdWAe62ob7ZrIeKcImgVPpNZC/qogN/FOi1n+ZaYI3EcWs+YLZ8jVE6Gq1sKrVFAlIEv0R5yxdIsbXVqsWuRspmjOiPY5BM1SKSwMC2GfuPK5vkzYOfg1ayT2mmJ4TRuyKXDO+/VHy09vY+KAuYSJFZ/+4PZ5ZM7hcJwk88LVWjAawTnzzWpbtlLyGfKChy2Fcf2yhG+/XLwUVWFJ5kZwGepbJJfsCK/1qs+idevkt4XuzMmAYCjuFjcGdu/5NaHKJDvaGTN63plDDLEo6/KcQ7lBx58OAjHWn7gqC2tgnk+/IDbC3P8DUpKFUGF2Tg== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1402a292-410c-4dd7-5df2-08d87115a47e X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3775.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Oct 2020 14:21:44.9217 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: hUctmsKmzwzlQVH4lhjqevgxGnxCyHnHl623cVkEli3p3TuwQp67xFQjNmWsqHz4 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR12MB4932 X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-samsung-soc@vger.kernel.org, lima@lists.freedesktop.org, nouveau@lists.freedesktop.org, etnaviv@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, virtualization@lists.linux-foundation.org, linaro-mm-sig@lists.linaro.org, linux-rockchip@lists.infradead.org, dri-devel@lists.freedesktop.org, xen-devel@lists.xenproject.org, spice-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" QW0gMTUuMTAuMjAgdW0gMTQ6Mzggc2NocmllYiBUaG9tYXMgWmltbWVybWFubjoKPiBUaGlzIHBh dGNoIHJlcGxhY2VzIHRoZSB2bWFwL3Z1bm1hcCdzIHVzZSBvZiByYXcgcG9pbnRlcnMgaW4gR0VN IG9iamVjdAo+IGZ1bmN0aW9ucyB3aXRoIGluc3RhbmNlcyBvZiBzdHJ1Y3QgZG1hX2J1Zl9tYXAu IEdFTSBiYWNrZW5kcyBhcmUKPiBjb252ZXJ0ZWQgYXMgd2VsbC4gRm9yIG1vc3Qgb2YgdGhlbSwg dGhpcyBzaW1wbHkgY2hhbmdlcyB0aGUgcmV0dXJuZWQgdHlwZS4KPgo+IFRUTS1iYXNlZCBkcml2 ZXJzIG5vdyByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBtZW1v cnksCj4gZWl0aGVyIHN5c3RlbSBvciBJL08gbWVtb3J5LiBHRU0gVlJBTSBoZWxwZXJzIGFuZCBx eGwgbm93IHVzZSB0dG1fYm9fdm1hcCgpCj4gZXQgYWwuIEFtZGdwdSwgbm91dmVhdSBhbmQgcmFk ZW9uIHVzZSBkcm1fZ2VtX3R0bV92bWFwKCkgZXQgYWwgaW5zdGVhZCBvZgo+IGltcGxlbWVudGlu ZyB0aGVpciBvd24gdm1hcCBjYWxsYmFja3MuCj4KPiB2NDoKPiAJKiB1c2UgdHRtX2JvX3ZtYXAo KSwgZHJtX2dlbV90dG1fdm1hcCgpLCBldCBhbC4gKERhbmllbCwgQ2hyaXN0aWFuKQo+IAkqIGZp eCBhIHRyYWlsaW5nIHsgaW4gZHJtX2dlbV92bWFwKCkKPiAJKiByZW1vdmUgc2V2ZXJhbCBlbXB0 eSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBjb252ZXJ0aW5nIHRoZW0gKERhbmllbCkKPiAJKiBjb21t ZW50IHVzZXMgb2YgcmF3IHBvaW50ZXJzIHdpdGggYSBUT0RPIChEYW5pZWwpCj4gCSogVE9ETyBs aXN0OiBjb252ZXJ0IG1vcmUgaGVscGVycyB0byB1c2Ugc3RydWN0IGRtYV9idWZfbWFwCj4KPiBT aWduZWQtb2ZmLWJ5OiBUaG9tYXMgWmltbWVybWFubiA8dHppbW1lcm1hbm5Ac3VzZS5kZT4KClRo ZSBhbWRncHUgY2hhbmdlcyBsb29rIGdvb2QgdG8gbWUsIGJ1dCBJIGNhbid0IGZ1bGx5IGp1ZGdl IHRoZSBvdGhlciBzdHVmZi4KCkFja2VkLWJ5OiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4u a29lbmlnQGFtZC5jb20+Cgo+IC0tLQo+ICAgRG9jdW1lbnRhdGlvbi9ncHUvdG9kby5yc3QgICAg ICAgICAgICAgICAgICB8ICAxOCArKysrCj4gICBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAg ICAgICAgICAgICAgICAgIHwgICAyICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9kbWFfYnVmLmMgfCAgMzYgLS0tLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2RtYV9idWYuaCB8ICAgMiAtCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfZ2VtLmMgICAgIHwgICA1ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfb2JqZWN0LmggIHwgICAxIC0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2N1 cnNvci5jICAgICAgICAgICAgfCAgMjcgKysrLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hc3QvYXN0 X2Rydi5oICAgICAgICAgICAgICAgfCAgIDcgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2Vt LmMgICAgICAgICAgICAgICAgICAgfCAgMjMgKysrLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1f Z2VtX2NtYV9oZWxwZXIuYyAgICAgICAgfCAgMTAgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1f Z2VtX3NobWVtX2hlbHBlci5jICAgICAgfCAgNDggKysrKystLS0tCj4gICBkcml2ZXJzL2dwdS9k cm0vZHJtX2dlbV92cmFtX2hlbHBlci5jICAgICAgIHwgMTA3ICsrKysrKysrKystLS0tLS0tLS0t Cj4gICBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5oICAgICAgIHwgICAyICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9wcmltZS5jIHwgICA5ICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5jICAgICAgICAgICAgIHwgICA2ICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMgICAgICAgICAgIHwgIDExICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX21vZGUuYyAgICAgIHwgIDEwICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnICAgICAgICAgICAgIHwgICAxICsK PiAgIGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uaCAgICAgICAgfCAgIDIgLQo+ ICAgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYyAgICAgICB8ICAgNiArLQo+ ICAgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uaCAgICAgICB8ICAgMiAtCj4g ICBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ByaW1lLmMgICAgIHwgIDIwIC0tLS0K PiAgIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9wZXJmY250LmMgfCAgMTQgKy0t Cj4gICBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kaXNwbGF5LmMgICAgICAgICAgIHwgIDExICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kcmF3LmMgICAgICAgICAgICAgIHwgIDE0ICsr LQo+ICAgZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJ2LmggICAgICAgICAgICAgICB8ICAxMSAr LQo+ICAgZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfb2JqZWN0LmMgICAgICAgICAgICB8ICAzMSAr KystLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX29iamVjdC5oICAgICAgICAgICAgfCAg IDIgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX3ByaW1lLmMgICAgICAgICAgICAgfCAg MTIgKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oICAgICAgICAgICAgIHwg ICAxIC0KPiAgIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jICAgICAgICAgfCAg IDcgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3ByaW1lLmMgICAgICAgfCAg MjAgLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uYyB8 ICAyMiArKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5o IHwgICA0ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdGlueS9jaXJydXMuYyAgICAgICAgICAgICAg IHwgIDEwICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdGlueS9nbTEydTMyMC5jICAgICAgICAgICAg IHwgIDEwICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rlc2V0LmMgICAgICAgICAg IHwgICA4ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbW9kZS5jICAgICAg IHwgIDExICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jICAgICAgICAgICAgICAg IHwgICA2ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaCAgICAgICAgICAgICAg IHwgICAyICstCj4gICBkcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Rydi5jICAgICAgICAgICAg IHwgIDE2ICsrLQo+ICAgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jICAg ICB8ICAxOCArKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmgg ICAgIHwgICA2ICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtLmggICAgICAgICAgICAgICAgICAg ICAgIHwgICA1ICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaCAgICAgICAg ICAgIHwgICAyICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oICAgICAg ICAgIHwgICA0ICstCj4gICBpbmNsdWRlL2RybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmggICAgICAg ICAgIHwgIDE0ICstLQo+ICAgNDcgZmlsZXMgY2hhbmdlZCwgMzIxIGluc2VydGlvbnMoKyksIDI5 NSBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS90b2RvLnJz dCBiL0RvY3VtZW50YXRpb24vZ3B1L3RvZG8ucnN0Cj4gaW5kZXggNzAwNjM3ZTI1ZWNkLi43ZTZm YzNjMDRhZGQgMTAwNjQ0Cj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvdG9kby5yc3QKPiArKysg Yi9Eb2N1bWVudGF0aW9uL2dwdS90b2RvLnJzdAo+IEBAIC00NDYsNiArNDQ2LDI0IEBAIENvbnRh Y3Q6IFZpbGxlIFN5cmrDpGzDpCwgRGFuaWVsIFZldHRlcgo+ICAgCj4gICBMZXZlbDogSW50ZXJt ZWRpYXRlCj4gICAKPiArVXNlIHN0cnVjdCBkbWFfYnVmX21hcCB0aHJvdWdob3V0IGNvZGViYXNl Cj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICsKPiArUG9p bnRlcnMgdG8gc2hhcmVkIGRldmljZSBtZW1vcnkgYXJlIHN0b3JlZCBpbiBzdHJ1Y3QgZG1hX2J1 Zl9tYXAuIEVhY2gKPiAraW5zdGFuY2Uga25vd3Mgd2hldGhlciBpdCByZWZlcnMgdG8gc3lzdGVt IG9yIEkvTyBtZW1vcnkuIE1vc3Qgb2YgdGhlIERSTS13aWRlCj4gK2ludGVyZmFjZSBoYXZlIGJl ZW4gY29udmVydGVkIHRvIHVzZSBzdHJ1Y3QgZG1hX2J1Zl9tYXAsIGJ1dCBpbXBsZW1lbnRhdGlv bnMKPiArb2Z0ZW4gc3RpbGwgdXNlIHJhdyBwb2ludGVycy4KPiArCj4gK1RoZSB0YXNrIGlzIHRv IHVzZSBzdHJ1Y3QgZG1hX2J1Zl9tYXAgd2hlcmUgaXQgbWFrZXMgc2Vuc2UuCj4gKwo+ICsqIE1l bW9yeSBtYW5hZ2VycyBzaG91bGQgdXNlIHN0cnVjdCBkbWFfYnVmX21hcCBmb3IgZG1hLWJ1Zi1p bXBvcnRlZCBidWZmZXJzLgo+ICsqIFRUTSBtaWdodCBiZW5lZml0IGZyb20gdXNpbmcgc3RydWN0 IGRtYV9idWZfbWFwIGludGVybmFsbHkuCj4gKyogRnJhbWVidWZmZXIgY29weWluZyBhbmQgYmxp dHRpbmcgaGVscGVycyBzaG91bGQgb3BlcmF0ZSBvbiBzdHJ1Y3QgZG1hX2J1Zl9tYXAuCj4gKwo+ ICtDb250YWN0OiBUaG9tYXMgWmltbWVybWFubiA8dHppbW1lcm1hbm5Ac3VzZS5kZT4sIENocmlz dGlhbiBLw7ZuaWcsIERhbmllbCBWZXR0ZXIKPiArCj4gK0xldmVsOiBJbnRlcm1lZGlhdGUKPiAr Cj4gICAKPiAgIENvcmUgcmVmYWN0b3JpbmdzCj4gICA9PT09PT09PT09PT09PT09PQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmln Cj4gaW5kZXggMTQ3ZDYxYjk2NzRlLi4zMTk4MzliODdkMzcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+IEBAIC0y MzksNiArMjM5LDcgQEAgY29uZmlnIERSTV9SQURFT04KPiAgIAlzZWxlY3QgRldfTE9BREVSCj4g ICAgICAgICAgIHNlbGVjdCBEUk1fS01TX0hFTFBFUgo+ICAgICAgICAgICBzZWxlY3QgRFJNX1RU TQo+ICsJc2VsZWN0IERSTV9UVE1fSEVMUEVSCj4gICAJc2VsZWN0IFBPV0VSX1NVUFBMWQo+ICAg CXNlbGVjdCBIV01PTgo+ICAgCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCj4gQEAgLTI1 OSw2ICsyNjAsNyBAQCBjb25maWcgRFJNX0FNREdQVQo+ICAgCXNlbGVjdCBEUk1fS01TX0hFTFBF Ugo+ICAgCXNlbGVjdCBEUk1fU0NIRUQKPiAgIAlzZWxlY3QgRFJNX1RUTQo+ICsJc2VsZWN0IERS TV9UVE1fSEVMUEVSCj4gICAJc2VsZWN0IFBPV0VSX1NVUFBMWQo+ICAgCXNlbGVjdCBIV01PTgo+ ICAgCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5jCj4gaW5kZXggNWI0NjVhYjc3NGQxLi5lNTkxOWVmY2E4 NzAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9i dWYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMK PiBAQCAtNDEsNDIgKzQxLDYgQEAKPiAgICNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UtYXJyYXku aD4KPiAgICNpbmNsdWRlIDxsaW51eC9wY2ktcDJwZG1hLmg+Cj4gICAKPiAtLyoqCj4gLSAqIGFt ZGdwdV9nZW1fcHJpbWVfdm1hcCAtICZkbWFfYnVmX29wcy52bWFwIGltcGxlbWVudGF0aW9uCj4g LSAqIEBvYmo6IEdFTSBCTwo+IC0gKgo+IC0gKiBTZXRzIHVwIGFuIGluLWtlcm5lbCB2aXJ0dWFs IG1hcHBpbmcgb2YgdGhlIEJPJ3MgbWVtb3J5Lgo+IC0gKgo+IC0gKiBSZXR1cm5zOgo+IC0gKiBU aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBtYXBwaW5nIG9yIGFuIGVycm9yIHBvaW50ZXIuCj4g LSAqLwo+IC12b2lkICphbWRncHVfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopCj4gLXsKPiAtCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gZ2VtX3RvX2FtZGdwdV9ibyhv YmopOwo+IC0JaW50IHJldDsKPiAtCj4gLQlyZXQgPSB0dG1fYm9fa21hcCgmYm8tPnRibywgMCwg Ym8tPnRiby5udW1fcGFnZXMsCj4gLQkJCSAgJmJvLT5kbWFfYnVmX3ZtYXApOwo+IC0JaWYgKHJl dCkKPiAtCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+IC0KPiAtCXJldHVybiBiby0+ZG1hX2J1Zl92 bWFwLnZpcnR1YWw7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBhbWRncHVfZ2VtX3ByaW1lX3Z1bm1h cCAtICZkbWFfYnVmX29wcy52dW5tYXAgaW1wbGVtZW50YXRpb24KPiAtICogQG9iajogR0VNIEJP Cj4gLSAqIEB2YWRkcjogVmlydHVhbCBhZGRyZXNzICh1bnVzZWQpCj4gLSAqCj4gLSAqIFRlYXJz IGRvd24gdGhlIGluLWtlcm5lbCB2aXJ0dWFsIG1hcHBpbmcgb2YgdGhlIEJPJ3MgbWVtb3J5Lgo+ IC0gKi8KPiAtdm9pZCBhbWRncHVfZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiwgdm9pZCAqdmFkZHIpCj4gLXsKPiAtCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gZ2Vt X3RvX2FtZGdwdV9ibyhvYmopOwo+IC0KPiAtCXR0bV9ib19rdW5tYXAoJmJvLT5kbWFfYnVmX3Zt YXApOwo+IC19Cj4gLQo+ICAgLyoqCj4gICAgKiBhbWRncHVfZ2VtX3ByaW1lX21tYXAgLSAmZHJt X2RyaXZlci5nZW1fcHJpbWVfbW1hcCBpbXBsZW1lbnRhdGlvbgo+ICAgICogQG9iajogR0VNIEJP Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVm LmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5oCj4gaW5kZXgg MmM1Yzg0YTA2YmI5Li4zOWI1Yjk2MTZmZDggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9idWYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmgKPiBAQCAtMzEsOCArMzEsNiBAQCBzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKmFtZGdwdV9nZW1fcHJpbWVfaW1wb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Cj4gICAJCQkJCSAgICBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zik7Cj4gICBib29sIGFtZGdwdV9k bWFidWZfaXNfeGdtaV9hY2Nlc3NpYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAg CQkJCSAgICAgIHN0cnVjdCBhbWRncHVfYm8gKmJvKTsKPiAtdm9pZCAqYW1kZ3B1X2dlbV9wcmlt ZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAtdm9pZCBhbWRncHVfZ2VtX3By aW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+ICAg aW50IGFtZGdwdV9nZW1fcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKPiAg IAkJCSAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwo+IGluZGV4IGJlMDhhNjNlZjU4Yy4uNTc2NjU5ODI3ZTc0 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwo+IEBAIC0zMyw2 ICszMyw3IEBACj4gICAKPiAgICNpbmNsdWRlIDxkcm0vYW1kZ3B1X2RybS5oPgo+ICAgI2luY2x1 ZGUgPGRybS9kcm1fZGVidWdmcy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdHRtX2hlbHBl ci5oPgo+ICAgCj4gICAjaW5jbHVkZSAiYW1kZ3B1LmgiCj4gICAjaW5jbHVkZSAiYW1kZ3B1X2Rp c3BsYXkuaCIKPiBAQCAtMjIwLDggKzIyMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2dl bV9vYmplY3RfZnVuY3MgYW1kZ3B1X2dlbV9vYmplY3RfZnVuY3MgPSB7Cj4gICAJLm9wZW4gPSBh bWRncHVfZ2VtX29iamVjdF9vcGVuLAo+ICAgCS5jbG9zZSA9IGFtZGdwdV9nZW1fb2JqZWN0X2Ns b3NlLAo+ICAgCS5leHBvcnQgPSBhbWRncHVfZ2VtX3ByaW1lX2V4cG9ydCwKPiAtCS52bWFwID0g YW1kZ3B1X2dlbV9wcmltZV92bWFwLAo+IC0JLnZ1bm1hcCA9IGFtZGdwdV9nZW1fcHJpbWVfdnVu bWFwLAo+ICsJLnZtYXAgPSBkcm1fZ2VtX3R0bV92bWFwLAo+ICsJLnZ1bm1hcCA9IGRybV9nZW1f dHRtX3Z1bm1hcCwKPiAgIH07Cj4gICAKPiAgIC8qCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9vYmplY3QuaAo+IGluZGV4IDEzMmU1Zjk1NTE4MC4uMDEyOTZlZjBkNjczIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaAo+IEBAIC0x MDAsNyArMTAwLDYgQEAgc3RydWN0IGFtZGdwdV9ibyB7Cj4gICAJc3RydWN0IGFtZGdwdV9ibwkJ KnBhcmVudDsKPiAgIAlzdHJ1Y3QgYW1kZ3B1X2JvCQkqc2hhZG93Owo+ICAgCj4gLQlzdHJ1Y3Qg dHRtX2JvX2ttYXBfb2JqCQlkbWFfYnVmX3ZtYXA7Cj4gICAJc3RydWN0IGFtZGdwdV9tbgkJKm1u Owo+ICAgCj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfY3Vyc29y LmMgYi9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9jdXJzb3IuYwo+IGluZGV4IGUwZjQ2MTM5MThh ZC4uNzQyZDQzYTdlZGY0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2N1 cnNvci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfY3Vyc29yLmMKPiBAQCAtMzks NyArMzksNyBAQCBzdGF0aWMgdm9pZCBhc3RfY3Vyc29yX2Zpbmkoc3RydWN0IGFzdF9wcml2YXRl ICphc3QpCj4gICAKPiAgIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhc3QtPmN1cnNvci5n Ym8pOyArK2kpIHsKPiAgIAkJZ2JvID0gYXN0LT5jdXJzb3IuZ2JvW2ldOwo+IC0JCWRybV9nZW1f dnJhbV92dW5tYXAoZ2JvLCBhc3QtPmN1cnNvci52YWRkcltpXSk7Cj4gKwkJZHJtX2dlbV92cmFt X3Z1bm1hcChnYm8sICZhc3QtPmN1cnNvci5tYXBbaV0pOwo+ICAgCQlkcm1fZ2VtX3ZyYW1fdW5w aW4oZ2JvKTsKPiAgIAkJZHJtX2dlbV92cmFtX3B1dChnYm8pOwo+ICAgCX0KPiBAQCAtNjAsNyAr NjAsNyBAQCBpbnQgYXN0X2N1cnNvcl9pbml0KHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0KQo+ICAg CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmYXN0LT5iYXNlOwo+ICAgCXNpemVfdCBzaXplLCBp Owo+ICAgCXN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm87Cj4gLQl2b2lkIF9faW9tZW0g KnZhZGRyOwo+ICsJc3RydWN0IGRtYV9idWZfbWFwIG1hcDsKPiAgIAlpbnQgcmV0Owo+ICAgCj4g ICAJc2l6ZSA9IHJvdW5kdXAoQVNUX0hXQ19TSVpFICsgQVNUX0hXQ19TSUdOQVRVUkVfU0laRSwg UEFHRV9TSVpFKTsKPiBAQCAtNzcsMTYgKzc3LDE1IEBAIGludCBhc3RfY3Vyc29yX2luaXQoc3Ry dWN0IGFzdF9wcml2YXRlICphc3QpCj4gICAJCQlkcm1fZ2VtX3ZyYW1fcHV0KGdibyk7Cj4gICAJ CQlnb3RvIGVycl9kcm1fZ2VtX3ZyYW1fcHV0Owo+ICAgCQl9Cj4gLQkJdmFkZHIgPSBkcm1fZ2Vt X3ZyYW1fdm1hcChnYm8pOwo+IC0JCWlmIChJU19FUlIodmFkZHIpKSB7Cj4gLQkJCXJldCA9IFBU Ul9FUlIodmFkZHIpOwo+ICsJCXJldCA9IGRybV9nZW1fdnJhbV92bWFwKGdibywgJm1hcCk7Cj4g KwkJaWYgKHJldCkgewo+ICAgCQkJZHJtX2dlbV92cmFtX3VucGluKGdibyk7Cj4gICAJCQlkcm1f Z2VtX3ZyYW1fcHV0KGdibyk7Cj4gICAJCQlnb3RvIGVycl9kcm1fZ2VtX3ZyYW1fcHV0Owo+ICAg CQl9Cj4gICAKPiAgIAkJYXN0LT5jdXJzb3IuZ2JvW2ldID0gZ2JvOwo+IC0JCWFzdC0+Y3Vyc29y LnZhZGRyW2ldID0gdmFkZHI7Cj4gKwkJYXN0LT5jdXJzb3IubWFwW2ldID0gbWFwOwo+ICAgCX0K PiAgIAo+ICAgCXJldHVybiBkcm1tX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhc3RfY3Vyc29y X3JlbGVhc2UsIE5VTEwpOwo+IEBAIC05NSw3ICs5NCw3IEBAIGludCBhc3RfY3Vyc29yX2luaXQo c3RydWN0IGFzdF9wcml2YXRlICphc3QpCj4gICAJd2hpbGUgKGkpIHsKPiAgIAkJLS1pOwo+ICAg CQlnYm8gPSBhc3QtPmN1cnNvci5nYm9baV07Cj4gLQkJZHJtX2dlbV92cmFtX3Z1bm1hcChnYm8s IGFzdC0+Y3Vyc29yLnZhZGRyW2ldKTsKPiArCQlkcm1fZ2VtX3ZyYW1fdnVubWFwKGdibywgJmFz dC0+Y3Vyc29yLm1hcFtpXSk7Cj4gICAJCWRybV9nZW1fdnJhbV91bnBpbihnYm8pOwo+ICAgCQlk cm1fZ2VtX3ZyYW1fcHV0KGdibyk7Cj4gICAJfQo+IEBAIC0xNzAsNiArMTY5LDcgQEAgaW50IGFz dF9jdXJzb3JfYmxpdChzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCwgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIpCj4gICB7Cj4gICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZhc3QtPmJhc2U7 Cj4gICAJc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibzsKPiArCXN0cnVjdCBkbWFfYnVm X21hcCBtYXA7Cj4gICAJaW50IHJldDsKPiAgIAl2b2lkICpzcmM7Cj4gICAJdm9pZCBfX2lvbWVt ICpkc3Q7Cj4gQEAgLTE4MywxOCArMTgzLDE3IEBAIGludCBhc3RfY3Vyc29yX2JsaXQoc3RydWN0 IGFzdF9wcml2YXRlICphc3QsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQo+ICAgCXJldCA9 IGRybV9nZW1fdnJhbV9waW4oZ2JvLCAwKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gcmV0 Owo+IC0Jc3JjID0gZHJtX2dlbV92cmFtX3ZtYXAoZ2JvKTsKPiAtCWlmIChJU19FUlIoc3JjKSkg ewo+IC0JCXJldCA9IFBUUl9FUlIoc3JjKTsKPiArCXJldCA9IGRybV9nZW1fdnJhbV92bWFwKGdi bywgJm1hcCk7Cj4gKwlpZiAocmV0KQo+ICAgCQlnb3RvIGVycl9kcm1fZ2VtX3ZyYW1fdW5waW47 Cj4gLQl9Cj4gKwlzcmMgPSBtYXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0 aW9uIHByb3Blcmx5ICovCj4gICAKPiAtCWRzdCA9IGFzdC0+Y3Vyc29yLnZhZGRyW2FzdC0+Y3Vy c29yLm5leHRfaW5kZXhdOwo+ICsJZHN0ID0gYXN0LT5jdXJzb3IubWFwW2FzdC0+Y3Vyc29yLm5l eHRfaW5kZXhdLnZhZGRyX2lvbWVtOwo+ICAgCj4gICAJLyogZG8gZGF0YSB0cmFuc2ZlciB0byBj dXJzb3IgQk8gKi8KPiAgIAl1cGRhdGVfY3Vyc29yX2ltYWdlKGRzdCwgc3JjLCBmYi0+d2lkdGgs IGZiLT5oZWlnaHQpOwo+ICAgCj4gLQlkcm1fZ2VtX3ZyYW1fdnVubWFwKGdibywgc3JjKTsKPiAr CWRybV9nZW1fdnJhbV92dW5tYXAoZ2JvLCAmbWFwKTsKPiAgIAlkcm1fZ2VtX3ZyYW1fdW5waW4o Z2JvKTsKPiAgIAo+ICAgCXJldHVybiAwOwo+IEBAIC0yNTcsNyArMjU2LDcgQEAgdm9pZCBhc3Rf Y3Vyc29yX3Nob3coc3RydWN0IGFzdF9wcml2YXRlICphc3QsIGludCB4LCBpbnQgeSwKPiAgIAl1 OCBfX2lvbWVtICpzaWc7Cj4gICAJdTgganJlZzsKPiAgIAo+IC0JZHN0ID0gYXN0LT5jdXJzb3Iu dmFkZHJbYXN0LT5jdXJzb3IubmV4dF9pbmRleF07Cj4gKwlkc3QgPSBhc3QtPmN1cnNvci5tYXBb YXN0LT5jdXJzb3IubmV4dF9pbmRleF0udmFkZHI7Cj4gICAKPiAgIAlzaWcgPSBkc3QgKyBBU1Rf SFdDX1NJWkU7Cj4gICAJd3JpdGVsKHgsIHNpZyArIEFTVF9IV0NfU0lHTkFUVVJFX1gpOwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9hc3QvYXN0X2Rydi5oCj4gaW5kZXggNDY3MDQ5Y2E4NDMwLi5mOTYzMTQxZGQ4NTEgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vYXN0L2FzdF9kcnYuaAo+IEBAIC0yOCwxMCArMjgsMTEgQEAKPiAgICNpZm5kZWYgX19B U1RfRFJWX0hfXwo+ICAgI2RlZmluZSBfX0FTVF9EUlZfSF9fCj4gICAKPiAtI2luY2x1ZGUgPGxp bnV4L3R5cGVzLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9pby5oPgo+ICsjaW5jbHVkZSA8bGludXgv ZG1hLWJ1Zi1tYXAuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPiAgICNpbmNsdWRlIDxs aW51eC9pMmMtYWxnby1iaXQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC90eXBlcy5oPgo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4K PiAgICNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiBAQCAtMTMxLDcgKzEzMiw3IEBAIHN0cnVj dCBhc3RfcHJpdmF0ZSB7Cj4gICAKPiAgIAlzdHJ1Y3Qgewo+ICAgCQlzdHJ1Y3QgZHJtX2dlbV92 cmFtX29iamVjdCAqZ2JvW0FTVF9ERUZBVUxUX0hXQ19OVU1dOwo+IC0JCXZvaWQgX19pb21lbSAq dmFkZHJbQVNUX0RFRkFVTFRfSFdDX05VTV07Cj4gKwkJc3RydWN0IGRtYV9idWZfbWFwIG1hcFtB U1RfREVGQVVMVF9IV0NfTlVNXTsKPiAgIAkJdW5zaWduZWQgaW50IG5leHRfaW5kZXg7Cj4gICAJ fSBjdXJzb3I7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKPiBpbmRleCAxZGE2N2QzNGU1NWQuLmE4OWFkNDU3 MGUzYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2RybV9nZW0uYwo+IEBAIC0zNiw2ICszNiw3IEBACj4gICAjaW5jbHVkZSA8 bGludXgvcGFnZW1hcC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+Cj4gICAjaW5j bHVkZSA8bGludXgvZG1hLWJ1Zi5oPgo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4K PiAgICNpbmNsdWRlIDxsaW51eC9tZW1fZW5jcnlwdC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3Bh Z2V2ZWMuaD4KPiAgIAo+IEBAIC0xMjA3LDI2ICsxMjA4LDMwIEBAIHZvaWQgZHJtX2dlbV91bnBp bihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAgIAo+ICAgdm9pZCAqZHJtX2dlbV92bWFw KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ICAgewo+IC0Jdm9pZCAqdmFkZHI7Cj4gKwlz dHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICsJaW50IHJldDsKPiAgIAo+IC0JaWYgKG9iai0+ZnVu Y3MtPnZtYXApCj4gLQkJdmFkZHIgPSBvYmotPmZ1bmNzLT52bWFwKG9iaik7Cj4gLQllbHNlCj4g LQkJdmFkZHIgPSBFUlJfUFRSKC1FT1BOT1RTVVBQKTsKPiArCWlmICghb2JqLT5mdW5jcy0+dm1h cCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7Cj4gICAKPiAtCWlmICghdmFkZHIp Cj4gLQkJdmFkZHIgPSBFUlJfUFRSKC1FTk9NRU0pOwo+ICsJcmV0ID0gb2JqLT5mdW5jcy0+dm1h cChvYmosICZtYXApOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJ ZWxzZSBpZiAoZG1hX2J1Zl9tYXBfaXNfbnVsbCgmbWFwKSkKPiArCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKPiAgIAo+IC0JcmV0dXJuIHZhZGRyOwo+ICsJcmV0dXJuIG1hcC52YWRkcjsKPiAg IH0KPiAgIAo+ICAgdm9pZCBkcm1fZ2VtX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aiwgdm9pZCAqdmFkZHIpCj4gICB7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwID0gRE1BX0JV Rl9NQVBfSU5JVF9WQUREUih2YWRkcik7Cj4gKwo+ICAgCWlmICghdmFkZHIpCj4gICAJCXJldHVy bjsKPiAgIAo+ICAgCWlmIChvYmotPmZ1bmNzLT52dW5tYXApCj4gLQkJb2JqLT5mdW5jcy0+dnVu bWFwKG9iaiwgdmFkZHIpOwo+ICsJCW9iai0+ZnVuY3MtPnZ1bm1hcChvYmosICZtYXApOwo+ICAg fQo+ICAgCj4gICAvKioKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fY21h X2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fY21hX2hlbHBlci5jCj4gaW5kZXgg ZDUyNzQ4NWVhMGI3Li5iNTdlM2U5MjIyZjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2RybV9nZW1fY21hX2hlbHBlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fY21h X2hlbHBlci5jCj4gQEAgLTUxOSw2ICs1MTksOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2Vt X2NtYV9wcmltZV9tbWFwKTsKPiAgICAqIGRybV9nZW1fY21hX3ByaW1lX3ZtYXAgLSBtYXAgYSBD TUEgR0VNIG9iamVjdCBpbnRvIHRoZSBrZXJuZWwncyB2aXJ0dWFsCj4gICAgKiAgICAgYWRkcmVz cyBzcGFjZQo+ICAgICogQG9iajogR0VNIG9iamVjdAo+ICsgKiBAbWFwOiBSZXR1cm5zIHRoZSBr ZXJuZWwgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBDTUEgR0VNIG9iamVjdCdzIGJhY2tpbmcKPiAr ICogICAgICAgc3RvcmUuCj4gICAgKgo+ICAgICogVGhpcyBmdW5jdGlvbiBtYXBzIGEgYnVmZmVy IGV4cG9ydGVkIHZpYSBEUk0gUFJJTUUgaW50byB0aGUga2VybmVsJ3MKPiAgICAqIHZpcnR1YWwg YWRkcmVzcyBzcGFjZS4gU2luY2UgdGhlIENNQSBidWZmZXJzIGFyZSBhbHJlYWR5IG1hcHBlZCBp bnRvIHRoZQo+IEBAIC01MjcsMTMgKzUyOSwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2Vt X2NtYV9wcmltZV9tbWFwKTsKPiAgICAqIGRyaXZlcidzICZkcm1fZ2VtX29iamVjdF9mdW5jcy52 bWFwIGNhbGxiYWNrLgo+ICAgICoKPiAgICAqIFJldHVybnM6Cj4gLSAqIFRoZSBrZXJuZWwgdmly dHVhbCBhZGRyZXNzIG9mIHRoZSBDTUEgR0VNIG9iamVjdCdzIGJhY2tpbmcgc3RvcmUuCj4gKyAq IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiAgICAq Lwo+IC12b2lkICpkcm1fZ2VtX2NtYV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqKQo+ICtpbnQgZHJtX2dlbV9jbWFfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IGRybV9nZW1f Y21hX29iamVjdCAqY21hX29iaiA9IHRvX2RybV9nZW1fY21hX29iaihvYmopOwo+ICAgCj4gLQly ZXR1cm4gY21hX29iai0+dmFkZHI7Cj4gKwlkbWFfYnVmX21hcF9zZXRfdmFkZHIobWFwLCBjbWFf b2JqLT52YWRkcik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gICBFWFBPUlRfU1lNQk9MX0dQ TChkcm1fZ2VtX2NtYV9wcmltZV92bWFwKTsKPiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3No bWVtX2hlbHBlci5jCj4gaW5kZXggZmIxMWRmN2FjZWQ1Li41NTUzZjU4ZjY4ZjMgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYwo+IEBAIC0yNTgsMTkgKzI1OCwyNSBA QCB2b2lkIGRybV9nZW1fc2htZW1fdW5waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4g ICB9Cj4gICBFWFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fdW5waW4pOwo+ICAgCj4gLXN0YXRp YyB2b2lkICpkcm1fZ2VtX3NobWVtX3ZtYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29i amVjdCAqc2htZW0pCj4gK3N0YXRpYyBpbnQgZHJtX2dlbV9zaG1lbV92bWFwX2xvY2tlZChzdHJ1 Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtLCBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCkK PiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZzaG1lbS0+YmFzZTsKPiAt CXN0cnVjdCBkbWFfYnVmX21hcCBtYXA7Cj4gICAJaW50IHJldCA9IDA7Cj4gICAKPiAtCWlmIChz aG1lbS0+dm1hcF91c2VfY291bnQrKyA+IDApCj4gLQkJcmV0dXJuIHNobWVtLT52YWRkcjsKPiAr CWlmIChzaG1lbS0+dm1hcF91c2VfY291bnQrKyA+IDApIHsKPiArCQlkbWFfYnVmX21hcF9zZXRf dmFkZHIobWFwLCBzaG1lbS0+dmFkZHIpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICAgCj4gICAJ aWYgKG9iai0+aW1wb3J0X2F0dGFjaCkgewo+IC0JCXJldCA9IGRtYV9idWZfdm1hcChvYmotPmlt cG9ydF9hdHRhY2gtPmRtYWJ1ZiwgJm1hcCk7Cj4gLQkJaWYgKCFyZXQpCj4gLQkJCXNobWVtLT52 YWRkciA9IG1hcC52YWRkcjsKPiArCQlyZXQgPSBkbWFfYnVmX3ZtYXAob2JqLT5pbXBvcnRfYXR0 YWNoLT5kbWFidWYsIG1hcCk7Cj4gKwkJaWYgKCFyZXQpIHsKPiArCQkJaWYgKFdBUk5fT04obWFw LT5pc19pb21lbSkpIHsKPiArCQkJCXJldCA9IC1FSU87Cj4gKwkJCQlnb3RvIGVycl9wdXRfcGFn ZXM7Cj4gKwkJCX0KPiArCQkJc2htZW0tPnZhZGRyID0gbWFwLT52YWRkcjsKPiArCQl9Cj4gICAJ fSBlbHNlIHsKPiAgIAkJcGdwcm90X3QgcHJvdCA9IFBBR0VfS0VSTkVMOwo+ICAgCj4gQEAgLTI4 NCw2ICsyOTAsOCBAQCBzdGF0aWMgdm9pZCAqZHJtX2dlbV9zaG1lbV92bWFwX2xvY2tlZChzdHJ1 Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQo+ICAgCQkJCSAgICBWTV9NQVAsIHByb3Qp Owo+ICAgCQlpZiAoIXNobWVtLT52YWRkcikKPiAgIAkJCXJldCA9IC1FTk9NRU07Cj4gKwkJZWxz ZQo+ICsJCQlkbWFfYnVmX21hcF9zZXRfdmFkZHIobWFwLCBzaG1lbS0+dmFkZHIpOwo+ICAgCX0K PiAgIAo+ICAgCWlmIChyZXQpIHsKPiBAQCAtMjkxLDcgKzI5OSw3IEBAIHN0YXRpYyB2b2lkICpk cm1fZ2VtX3NobWVtX3ZtYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0pCj4gICAJCWdvdG8gZXJyX3B1dF9wYWdlczsKPiAgIAl9Cj4gICAKPiAtCXJldHVybiBzaG1l bS0+dmFkZHI7Cj4gKwlyZXR1cm4gMDsKPiAgIAo+ICAgZXJyX3B1dF9wYWdlczoKPiAgIAlpZiAo IW9iai0+aW1wb3J0X2F0dGFjaCkKPiBAQCAtMjk5LDEyICszMDcsMTQgQEAgc3RhdGljIHZvaWQg KmRybV9nZW1fc2htZW1fdm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpz aG1lbSkKPiAgIGVycl96ZXJvX3VzZToKPiAgIAlzaG1lbS0+dm1hcF91c2VfY291bnQgPSAwOwo+ ICAgCj4gLQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ ICAgLyoKPiAgICAqIGRybV9nZW1fc2htZW1fdm1hcCAtIENyZWF0ZSBhIHZpcnR1YWwgbWFwcGlu ZyBmb3IgYSBzaG1lbSBHRU0gb2JqZWN0Cj4gICAgKiBAc2htZW06IHNobWVtIEdFTSBvYmplY3QK PiArICogQG1hcDogUmV0dXJucyB0aGUga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgU0hN RU0gR0VNIG9iamVjdCdzIGJhY2tpbmcKPiArICogICAgICAgc3RvcmUuCj4gICAgKgo+ICAgICog VGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgYSBjb250aWd1b3VzIGtlcm5lbCB2aXJ0dWFs IGFkZHJlc3MgbWFwcGluZwo+ICAgICogZXhpc3RzIGZvciB0aGUgYnVmZmVyIGJhY2tpbmcgdGhl IHNobWVtIEdFTSBvYmplY3QuCj4gQEAgLTMxOCwyNiArMzI4LDI1IEBAIHN0YXRpYyB2b2lkICpk cm1fZ2VtX3NobWVtX3ZtYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0pCj4gICAgKiBSZXR1cm5zOgo+ICAgICogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJy b3IgY29kZSBvbiBmYWlsdXJlLgo+ICAgICovCj4gLXZvaWQgKmRybV9nZW1fc2htZW1fdm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAraW50IGRybV9nZW1fc2htZW1fdm1hcChzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4g ICAJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1f b2JqKG9iaik7Cj4gLQl2b2lkICp2YWRkcjsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gICAJcmV0ID0g bXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzaG1lbS0+dm1hcF9sb2NrKTsKPiAgIAlpZiAocmV0 KQo+IC0JCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gLQl2YWRkciA9IGRybV9nZW1fc2htZW1fdm1h cF9sb2NrZWQoc2htZW0pOwo+ICsJCXJldHVybiByZXQ7Cj4gKwlyZXQgPSBkcm1fZ2VtX3NobWVt X3ZtYXBfbG9ja2VkKHNobWVtLCBtYXApOwo+ICAgCW11dGV4X3VubG9jaygmc2htZW0tPnZtYXBf bG9jayk7Cj4gICAKPiAtCXJldHVybiB2YWRkcjsKPiArCXJldHVybiByZXQ7Cj4gICB9Cj4gICBF WFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fdm1hcCk7Cj4gICAKPiAtc3RhdGljIHZvaWQgZHJt X2dlbV9zaG1lbV92dW5tYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0pCj4gK3N0YXRpYyB2b2lkIGRybV9nZW1fc2htZW1fdnVubWFwX2xvY2tlZChzdHJ1Y3QgZHJt X2dlbV9zaG1lbV9vYmplY3QgKnNobWVtLAo+ICsJCQkJCXN0cnVjdCBkbWFfYnVmX21hcCAqbWFw KQo+ICAgewo+ICAgCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJnNobWVtLT5iYXNlOwo+ IC0Jc3RydWN0IGRtYV9idWZfbWFwIG1hcCA9IERNQV9CVUZfTUFQX0lOSVRfVkFERFIoc2htZW0t PnZhZGRyKTsKPiAgIAo+ICAgCWlmIChXQVJOX09OX09OQ0UoIXNobWVtLT52bWFwX3VzZV9jb3Vu dCkpCj4gICAJCXJldHVybjsKPiBAQCAtMzQ2LDcgKzM1NSw3IEBAIHN0YXRpYyB2b2lkIGRybV9n ZW1fc2htZW1fdnVubWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVt KQo+ICAgCQlyZXR1cm47Cj4gICAKPiAgIAlpZiAob2JqLT5pbXBvcnRfYXR0YWNoKQo+IC0JCWRt YV9idWZfdnVubWFwKG9iai0+aW1wb3J0X2F0dGFjaC0+ZG1hYnVmLCAmbWFwKTsKPiArCQlkbWFf YnVmX3Z1bm1hcChvYmotPmltcG9ydF9hdHRhY2gtPmRtYWJ1ZiwgbWFwKTsKPiAgIAllbHNlCj4g ICAJCXZ1bm1hcChzaG1lbS0+dmFkZHIpOwo+ICAgCj4gQEAgLTM1Nyw2ICszNjYsNyBAQCBzdGF0 aWMgdm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1f b2JqZWN0ICpzaG1lbSkKPiAgIC8qCj4gICAgKiBkcm1fZ2VtX3NobWVtX3Z1bm1hcCAtIFVubWFw IGEgdmlydHVhbCBtYXBwaW5nIGZvIGEgc2htZW0gR0VNIG9iamVjdAo+ICAgICogQHNobWVtOiBz aG1lbSBHRU0gb2JqZWN0Cj4gKyAqIEBtYXA6IEtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgd2hlcmUg dGhlIFNITUVNIEdFTSBvYmplY3Qgd2FzIG1hcHBlZAo+ICAgICoKPiAgICAqIFRoaXMgZnVuY3Rp b24gY2xlYW5zIHVwIGEga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nIGFjcXVpcmVkIGJ5 Cj4gICAgKiBkcm1fZ2VtX3NobWVtX3ZtYXAoKS4gVGhlIG1hcHBpbmcgaXMgb25seSByZW1vdmVk IHdoZW4gdGhlIHVzZSBjb3VudCBkcm9wcyB0bwo+IEBAIC0zNjYsMTIgKzM3NiwxMiBAQCBzdGF0 aWMgdm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1f b2JqZWN0ICpzaG1lbSkKPiAgICAqIGFsc28gYmUgY2FsbGVkIGJ5IGRyaXZlcnMgZGlyZWN0bHks IGluIHdoaWNoIGNhc2UgaXQgd2lsbCBoaWRlIHRoZQo+ICAgICogZGlmZmVyZW5jZXMgYmV0d2Vl biBkbWEtYnVmIGltcG9ydGVkIGFuZCBuYXRpdmVseSBhbGxvY2F0ZWQgb2JqZWN0cy4KPiAgICAq Lwo+IC12b2lkIGRybV9nZW1fc2htZW1fdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LCB2b2lkICp2YWRkcikKPiArdm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcChzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0 IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7 Cj4gICAKPiAgIAltdXRleF9sb2NrKCZzaG1lbS0+dm1hcF9sb2NrKTsKPiAtCWRybV9nZW1fc2ht ZW1fdnVubWFwX2xvY2tlZChzaG1lbSk7Cj4gKwlkcm1fZ2VtX3NobWVtX3Z1bm1hcF9sb2NrZWQo c2htZW0sIG1hcCk7Cj4gICAJbXV0ZXhfdW5sb2NrKCZzaG1lbS0+dm1hcF9sb2NrKTsKPiAgIH0K PiAgIEVYUE9SVF9TWU1CT0woZHJtX2dlbV9zaG1lbV92dW5tYXApOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9nZW1fdnJhbV9oZWxwZXIuYwo+IGluZGV4IDJkNWVkMzA1MThmMS4uNGQ4NTUzYjI4NTU4IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5jCj4gQEAgLTEsNSArMSw2IEBA Cj4gICAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgo+ICAgCj4g KyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLW1hcC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV9kZWJ1Z2ZzLmg+Cj4gQEAgLTExMyw4ICsx MTQsOCBAQCBzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fY2xlYW51cChzdHJ1Y3QgZHJtX2dlbV92 cmFtX29iamVjdCAqZ2JvKQo+ICAgCSAqIHVwOyBvbmx5IHJlbGVhc2UgdGhlIEdFTSBvYmplY3Qu Cj4gICAJICovCj4gICAKPiAtCVdBUk5fT04oZ2JvLT5rbWFwX3VzZV9jb3VudCk7Cj4gLQlXQVJO X09OKGdiby0+a21hcC52aXJ0dWFsKTsKPiArCVdBUk5fT04oZ2JvLT52bWFwX3VzZV9jb3VudCk7 Cj4gKwlXQVJOX09OKGRtYV9idWZfbWFwX2lzX3NldCgmZ2JvLT5tYXApKTsKPiAgIAo+ICAgCWRy bV9nZW1fb2JqZWN0X3JlbGVhc2UoJmdiby0+Ym8uYmFzZSk7Cj4gICB9Cj4gQEAgLTM4MiwyOSAr MzgzLDM3IEBAIGludCBkcm1fZ2VtX3ZyYW1fdW5waW4oc3RydWN0IGRybV9nZW1fdnJhbV9vYmpl Y3QgKmdibykKPiAgIH0KPiAgIEVYUE9SVF9TWU1CT0woZHJtX2dlbV92cmFtX3VucGluKTsKPiAg IAo+IC1zdGF0aWMgdm9pZCAqZHJtX2dlbV92cmFtX2ttYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2Vt X3ZyYW1fb2JqZWN0ICpnYm8pCj4gK3N0YXRpYyBpbnQgZHJtX2dlbV92cmFtX2ttYXBfbG9ja2Vk KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sCj4gKwkJCQkgICAgc3RydWN0IGRtYV9i dWZfbWFwICptYXApCj4gICB7Cj4gICAJaW50IHJldDsKPiAtCXN0cnVjdCB0dG1fYm9fa21hcF9v YmogKmttYXAgPSAmZ2JvLT5rbWFwOwo+IC0JYm9vbCBpc19pb21lbTsKPiAgIAo+IC0JaWYgKGdi by0+a21hcF91c2VfY291bnQgPiAwKQo+ICsJaWYgKGdiby0+dm1hcF91c2VfY291bnQgPiAwKQo+ ICAgCQlnb3RvIG91dDsKPiAgIAo+IC0JcmV0ID0gdHRtX2JvX2ttYXAoJmdiby0+Ym8sIDAsIGdi by0+Ym8ubnVtX3BhZ2VzLCBrbWFwKTsKPiArCXJldCA9IHR0bV9ib192bWFwKCZnYm8tPmJvLCAm Z2JvLT5tYXApOwo+ICAgCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCQly ZXR1cm4gcmV0Owo+ICAgCj4gICBvdXQ6Cj4gLQkrK2diby0+a21hcF91c2VfY291bnQ7Cj4gLQly ZXR1cm4gdHRtX2ttYXBfb2JqX3ZpcnR1YWwoa21hcCwgJmlzX2lvbWVtKTsKPiArCSsrZ2JvLT52 bWFwX3VzZV9jb3VudDsKPiArCSptYXAgPSBnYm8tPm1hcDsKPiArCj4gKwlyZXR1cm4gMDsKPiAg IH0KPiAgIAo+IC1zdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fa3VubWFwX2xvY2tlZChzdHJ1Y3Qg ZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQo+ICtzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fa3Vu bWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvLAo+ICsJCQkJICAgICAg IHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKQo+ICAgewo+IC0JaWYgKFdBUk5fT05fT05DRSghZ2Jv LT5rbWFwX3VzZV9jb3VudCkpCj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZ2JvLT5iby5i YXNlLmRldjsKPiArCj4gKwlpZiAoZHJtX1dBUk5fT05fT05DRShkZXYsICFnYm8tPnZtYXBfdXNl X2NvdW50KSkKPiAgIAkJcmV0dXJuOwo+IC0JaWYgKC0tZ2JvLT5rbWFwX3VzZV9jb3VudCA+IDAp Cj4gKwo+ICsJaWYgKGRybV9XQVJOX09OX09OQ0UoZGV2LCAhZG1hX2J1Zl9tYXBfaXNfZXF1YWwo Jmdiby0+bWFwLCBtYXApKSkKPiArCQlyZXR1cm47IC8qIEJVRzogbWFwIG5vdCBtYXBwZWQgZnJv bSB0aGlzIEJPICovCj4gKwo+ICsJaWYgKC0tZ2JvLT52bWFwX3VzZV9jb3VudCA+IDApCj4gICAJ CXJldHVybjsKPiAgIAo+ICAgCS8qCj4gQEAgLTQxOCw3ICs0MjcsOSBAQCBzdGF0aWMgdm9pZCBk cm1fZ2VtX3ZyYW1fa3VubWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2Jv KQo+ICAgLyoqCj4gICAgKiBkcm1fZ2VtX3ZyYW1fdm1hcCgpIC0gUGlucyBhbmQgbWFwcyBhIEdF TSBWUkFNIG9iamVjdCBpbnRvIGtlcm5lbCBhZGRyZXNzCj4gICAgKiAgICAgICAgICAgICAgICAg ICAgICAgc3BhY2UKPiAtICogQGdibzoJVGhlIEdFTSBWUkFNIG9iamVjdCB0byBtYXAKPiArICog QGdibzogVGhlIEdFTSBWUkFNIG9iamVjdCB0byBtYXAKPiArICogQG1hcDogUmV0dXJucyB0aGUg a2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgVlJBTSBHRU0gb2JqZWN0J3MgYmFja2luZwo+ ICsgKiAgICAgICBzdG9yZS4KPiAgICAqCj4gICAgKiBUaGUgdm1hcCBmdW5jdGlvbiBwaW5zIGEg R0VNIFZSQU0gb2JqZWN0IHRvIGl0cyBjdXJyZW50IGxvY2F0aW9uLCBlaXRoZXIKPiAgICAqIHN5 c3RlbSBvciB2aWRlbyBtZW1vcnksIGFuZCBtYXBzIGl0cyBidWZmZXIgaW50byBrZXJuZWwgYWRk cmVzcyBzcGFjZS4KPiBAQCAtNDI3LDQ4ICs0MzgsNDQgQEAgc3RhdGljIHZvaWQgZHJtX2dlbV92 cmFtX2t1bm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibykKPiAgICAq IHVubWFwIGFuZCB1bnBpbiB0aGUgR0VNIFZSQU0gb2JqZWN0Lgo+ICAgICoKPiAgICAqIFJldHVy bnM6Cj4gLSAqIFRoZSBidWZmZXIncyB2aXJ0dWFsIGFkZHJlc3Mgb24gc3VjY2Vzcywgb3IKPiAt ICogYW4gRVJSX1BUUigpLWVuY29kZWQgZXJyb3IgY29kZSBvdGhlcndpc2UuCj4gKyAqIDAgb24g c3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiAgICAqLwo+IC12 b2lkICpkcm1fZ2VtX3ZyYW1fdm1hcChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQo+ ICtpbnQgZHJtX2dlbV92cmFtX3ZtYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywg c3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJaW50IHJldDsKPiAtCXZvaWQgKmJh c2U7Cj4gICAKPiAgIAlyZXQgPSB0dG1fYm9fcmVzZXJ2ZSgmZ2JvLT5ibywgdHJ1ZSwgZmFsc2Us IE5VTEwpOwo+ICAgCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCQlyZXR1 cm4gcmV0Owo+ICAgCj4gICAJcmV0ID0gZHJtX2dlbV92cmFtX3Bpbl9sb2NrZWQoZ2JvLCAwKTsK PiAgIAlpZiAocmV0KQo+ICAgCQlnb3RvIGVycl90dG1fYm9fdW5yZXNlcnZlOwo+IC0JYmFzZSA9 IGRybV9nZW1fdnJhbV9rbWFwX2xvY2tlZChnYm8pOwo+IC0JaWYgKElTX0VSUihiYXNlKSkgewo+ IC0JCXJldCA9IFBUUl9FUlIoYmFzZSk7Cj4gKwlyZXQgPSBkcm1fZ2VtX3ZyYW1fa21hcF9sb2Nr ZWQoZ2JvLCBtYXApOwo+ICsJaWYgKHJldCkKPiAgIAkJZ290byBlcnJfZHJtX2dlbV92cmFtX3Vu cGluX2xvY2tlZDsKPiAtCX0KPiAgIAo+ICAgCXR0bV9ib191bnJlc2VydmUoJmdiby0+Ym8pOwo+ ICAgCj4gLQlyZXR1cm4gYmFzZTsKPiArCXJldHVybiAwOwo+ICAgCj4gICBlcnJfZHJtX2dlbV92 cmFtX3VucGluX2xvY2tlZDoKPiAgIAlkcm1fZ2VtX3ZyYW1fdW5waW5fbG9ja2VkKGdibyk7Cj4g ICBlcnJfdHRtX2JvX3VucmVzZXJ2ZToKPiAgIAl0dG1fYm9fdW5yZXNlcnZlKCZnYm8tPmJvKTsK PiAtCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgRVhQT1JU X1NZTUJPTChkcm1fZ2VtX3ZyYW1fdm1hcCk7Cj4gICAKPiAgIC8qKgo+ICAgICogZHJtX2dlbV92 cmFtX3Z1bm1hcCgpIC0gVW5tYXBzIGFuZCB1bnBpbnMgYSBHRU0gVlJBTSBvYmplY3QKPiAtICog QGdibzoJVGhlIEdFTSBWUkFNIG9iamVjdCB0byB1bm1hcAo+IC0gKiBAdmFkZHI6CVRoZSBtYXBw aW5nJ3MgYmFzZSBhZGRyZXNzIGFzIHJldHVybmVkIGJ5IGRybV9nZW1fdnJhbV92bWFwKCkKPiAr ICogQGdibzogVGhlIEdFTSBWUkFNIG9iamVjdCB0byB1bm1hcAo+ICsgKiBAbWFwOiBLZXJuZWwg dmlydHVhbCBhZGRyZXNzIHdoZXJlIHRoZSBWUkFNIEdFTSBvYmplY3Qgd2FzIG1hcHBlZAo+ICAg ICoKPiAgICAqIEEgY2FsbCB0byBkcm1fZ2VtX3ZyYW1fdnVubWFwKCkgdW5tYXBzIGFuZCB1bnBp bnMgYSBHRU0gVlJBTSBidWZmZXIuIFNlZQo+ICAgICogdGhlIGRvY3VtZW50YXRpb24gZm9yIGRy bV9nZW1fdnJhbV92bWFwKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCj4gICAgKi8KPiAtdm9pZCBk cm1fZ2VtX3ZyYW1fdnVubWFwKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sIHZvaWQg KnZhZGRyKQo+ICt2b2lkIGRybV9nZW1fdnJhbV92dW5tYXAoc3RydWN0IGRybV9nZW1fdnJhbV9v YmplY3QgKmdibywgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJaW50IHJldDsK PiAgIAo+IEBAIC00NzYsNyArNDgzLDcgQEAgdm9pZCBkcm1fZ2VtX3ZyYW1fdnVubWFwKHN0cnVj dCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sIHZvaWQgKnZhZGRyKQo+ICAgCWlmIChXQVJOX09O Q0UocmV0LCAidHRtX2JvX3Jlc2VydmVfZmFpbGVkKCk6IHJldD0lZFxuIiwgcmV0KSkKPiAgIAkJ cmV0dXJuOwo+ICAgCj4gLQlkcm1fZ2VtX3ZyYW1fa3VubWFwX2xvY2tlZChnYm8pOwo+ICsJZHJt X2dlbV92cmFtX2t1bm1hcF9sb2NrZWQoZ2JvLCBtYXApOwo+ICAgCWRybV9nZW1fdnJhbV91bnBp bl9sb2NrZWQoZ2JvKTsKPiAgIAo+ICAgCXR0bV9ib191bnJlc2VydmUoJmdiby0+Ym8pOwo+IEBA IC01NjcsMTUgKzU3NCwxMyBAQCBzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fYm9fZHJpdmVyX21v dmVfbm90aWZ5KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sCj4gICAJCQkJCSAgICAg ICBib29sIGV2aWN0LAo+ICAgCQkJCQkgICAgICAgc3RydWN0IHR0bV9yZXNvdXJjZSAqbmV3X21l bSkKPiAgIHsKPiAtCXN0cnVjdCB0dG1fYm9fa21hcF9vYmogKmttYXAgPSAmZ2JvLT5rbWFwOwo+ ICsJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyA9ICZnYm8tPmJvOwo+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGJvLT5iYXNlLmRldjsKPiAgIAo+IC0JaWYgKFdBUk5fT05fT05DRShn Ym8tPmttYXBfdXNlX2NvdW50KSkKPiArCWlmIChkcm1fV0FSTl9PTl9PTkNFKGRldiwgZ2JvLT52 bWFwX3VzZV9jb3VudCkpCj4gICAJCXJldHVybjsKPiAgIAo+IC0JaWYgKCFrbWFwLT52aXJ0dWFs KQo+IC0JCXJldHVybjsKPiAtCXR0bV9ib19rdW5tYXAoa21hcCk7Cj4gLQlrbWFwLT52aXJ0dWFs ID0gTlVMTDsKPiArCXR0bV9ib192dW5tYXAoYm8sICZnYm8tPm1hcCk7Cj4gICB9Cj4gICAKPiAg IHN0YXRpYyBpbnQgZHJtX2dlbV92cmFtX2JvX2RyaXZlcl9tb3ZlKHN0cnVjdCBkcm1fZ2VtX3Zy YW1fb2JqZWN0ICpnYm8sCj4gQEAgLTgzMiwzNyArODM3LDMzIEBAIHN0YXRpYyB2b2lkIGRybV9n ZW1fdnJhbV9vYmplY3RfdW5waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW0pCj4gICB9Cj4g ICAKPiAgIC8qKgo+IC0gKiBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3ZtYXAoKSAtIFwKPiAtCUltcGxl bWVudHMgJnN0cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcy52bWFwCj4gLSAqIEBnZW06CVRoZSBH RU0gb2JqZWN0IHRvIG1hcAo+ICsgKiBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3ZtYXAoKSAtCj4gKyAq CUltcGxlbWVudHMgJnN0cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcy52bWFwCj4gKyAqIEBnZW06 IFRoZSBHRU0gb2JqZWN0IHRvIG1hcAo+ICsgKiBAbWFwOiBSZXR1cm5zIHRoZSBrZXJuZWwgdmly dHVhbCBhZGRyZXNzIG9mIHRoZSBWUkFNIEdFTSBvYmplY3QncyBiYWNraW5nCj4gKyAqICAgICAg IHN0b3JlLgo+ICAgICoKPiAgICAqIFJldHVybnM6Cj4gLSAqIFRoZSBidWZmZXJzIHZpcnR1YWwg YWRkcmVzcyBvbiBzdWNjZXNzLCBvcgo+IC0gKiBOVUxMIG90aGVyd2lzZS4KPiArICogMCBvbiBz dWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgo+ICAgICovCj4gLXN0 YXRpYyB2b2lkICpkcm1fZ2VtX3ZyYW1fb2JqZWN0X3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpnZW0pCj4gK3N0YXRpYyBpbnQgZHJtX2dlbV92cmFtX29iamVjdF92bWFwKHN0cnVjdCBkcm1f Z2VtX29iamVjdCAqZ2VtLCBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCkKPiAgIHsKPiAgIAlzdHJ1 Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvID0gZHJtX2dlbV92cmFtX29mX2dlbShnZW0pOwo+ IC0Jdm9pZCAqYmFzZTsKPiAgIAo+IC0JYmFzZSA9IGRybV9nZW1fdnJhbV92bWFwKGdibyk7Cj4g LQlpZiAoSVNfRVJSKGJhc2UpKQo+IC0JCXJldHVybiBOVUxMOwo+IC0JcmV0dXJuIGJhc2U7Cj4g KwlyZXR1cm4gZHJtX2dlbV92cmFtX3ZtYXAoZ2JvLCBtYXApOwo+ICAgfQo+ICAgCj4gICAvKioK PiAtICogZHJtX2dlbV92cmFtX29iamVjdF92dW5tYXAoKSAtIFwKPiAtCUltcGxlbWVudHMgJnN0 cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcy52dW5tYXAKPiAtICogQGdlbToJVGhlIEdFTSBvYmpl Y3QgdG8gdW5tYXAKPiAtICogQHZhZGRyOglUaGUgbWFwcGluZydzIGJhc2UgYWRkcmVzcwo+ICsg KiBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3Z1bm1hcCgpIC0KPiArICoJSW1wbGVtZW50cyAmc3RydWN0 IGRybV9nZW1fb2JqZWN0X2Z1bmNzLnZ1bm1hcAo+ICsgKiBAZ2VtOiBUaGUgR0VNIG9iamVjdCB0 byB1bm1hcAo+ICsgKiBAbWFwOiBLZXJuZWwgdmlydHVhbCBhZGRyZXNzIHdoZXJlIHRoZSBWUkFN IEdFTSBvYmplY3Qgd2FzIG1hcHBlZAo+ICAgICovCj4gLXN0YXRpYyB2b2lkIGRybV9nZW1fdnJh bV9vYmplY3RfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtLAo+IC0JCQkJICAgICAg IHZvaWQgKnZhZGRyKQo+ICtzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fb2JqZWN0X3Z1bm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbSwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7 Cj4gICAJc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibyA9IGRybV9nZW1fdnJhbV9vZl9n ZW0oZ2VtKTsKPiAgIAo+IC0JZHJtX2dlbV92cmFtX3Z1bm1hcChnYm8sIHZhZGRyKTsKPiArCWRy bV9nZW1fdnJhbV92dW5tYXAoZ2JvLCBtYXApOwo+ICAgfQo+ICAgCj4gICAvKgo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5oIGIvZHJpdmVycy9ncHUv ZHJtL2V0bmF2aXYvZXRuYXZpdl9kcnYuaAo+IGluZGV4IDk2ODJjMjZkODliYi4uZjViZTYyN2Ux ZGUwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZHJ2LmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5oCj4gQEAgLTUxLDcg KzUxLDcgQEAgaW50IGV0bmF2aXZfaW9jdGxfZ2VtX3N1Ym1pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB2b2lkICpkYXRhLAo+ICAgaW50IGV0bmF2aXZfZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZp bHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKPiAgIGludCBldG5hdml2X2dlbV9tbWFw X29mZnNldChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdTY0ICpvZmZzZXQpOwo+ICAgc3Ry dWN0IHNnX3RhYmxlICpldG5hdml2X2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmopOwo+IC12b2lkICpldG5hdml2X2dlbV9wcmltZV92bWFwKHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqKTsKPiAraW50IGV0bmF2aXZfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIGludCBl dG5hdml2X2dlbV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkJ ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpldG5hdml2X2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fcHJp bWUuYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3ByaW1lLmMKPiBpbmRl eCBhNmQ5OTMyYTMyYWUuLmJjMjU0M2RkOTg3ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vZXRuYXZpdi9ldG5hdml2X2dlbV9wcmltZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V0 bmF2aXYvZXRuYXZpdl9nZW1fcHJpbWUuYwo+IEBAIC0yMiw5ICsyMiwxNCBAQCBzdHJ1Y3Qgc2df dGFibGUgKmV0bmF2aXZfZ2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiAgIAlyZXR1cm4gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKG9iai0+ZGV2LCBldG5h dml2X29iai0+cGFnZXMsIG5wYWdlcyk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqZXRuYXZpdl9nZW1f cHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAraW50IGV0bmF2aXZfZ2Vt X3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21h cCAqbWFwKQo+ICAgewo+IC0JcmV0dXJuIGV0bmF2aXZfZ2VtX3ZtYXAob2JqKTsKPiArCXZvaWQg KnZhZGRyID0gZXRuYXZpdl9nZW1fdm1hcChvYmopOwo+ICsJaWYgKCF2YWRkcikKPiArCQlyZXR1 cm4gLUVOT01FTTsKPiArCWRtYV9idWZfbWFwX3NldF92YWRkcihtYXAsIHZhZGRyKTsKPiArCj4g KwlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+ICAgaW50IGV0bmF2aXZfZ2VtX3ByaW1lX21tYXAoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5jCj4gaW5kZXgg MTEyMjNmZTM0OGRmLi44MzJlNTI4MGE2ZWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2xpbWEvbGltYV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmMK PiBAQCAtMTgyLDE0ICsxODIsMTQgQEAgc3RhdGljIGludCBsaW1hX2dlbV9waW4oc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmopCj4gICAJcmV0dXJuIGRybV9nZW1fc2htZW1fcGluKG9iaik7Cj4g ICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgKmxpbWFfZ2VtX3ZtYXAoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmopCj4gK3N0YXRpYyBpbnQgbGltYV9nZW1fdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IGxpbWFf Ym8gKmJvID0gdG9fbGltYV9ibyhvYmopOwo+ICAgCj4gICAJaWYgKGJvLT5oZWFwX3NpemUpCj4g LQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gICAKPiAt CXJldHVybiBkcm1fZ2VtX3NobWVtX3ZtYXAob2JqKTsKPiArCXJldHVybiBkcm1fZ2VtX3NobWVt X3ZtYXAob2JqLCBtYXApOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW50IGxpbWFfZ2VtX21tYXAo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMgYi9kcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMKPiBpbmRleCBkYzZkZjllOWE0MGQuLmEwNzBhODVm OGYzNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMKPiBAQCAtMSw2ICsxLDcgQEAK PiAgIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAo+ICAgLyogQ29w eXJpZ2h0IDIwMTctMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KPiAgIAo+ICsj aW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9rdGhyZWFk Lmg+Cj4gICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3ZtYWxs b2MuaD4KPiBAQCAtMzAzLDYgKzMwNCw4IEBAIHN0YXRpYyB2b2lkIGxpbWFfc2NoZWRfYnVpbGRf ZXJyb3JfdGFza19saXN0KHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2spCj4gICAJc3RydWN0 IGxpbWFfZHVtcF9jaHVua19idWZmZXIgKmJ1ZmZlcl9jaHVuazsKPiAgIAl1MzIgc2l6ZSwgdGFz a19zaXplLCBtZW1fc2l6ZTsKPiAgIAlpbnQgaTsKPiArCXN0cnVjdCBkbWFfYnVmX21hcCBtYXA7 Cj4gKwlpbnQgcmV0Owo+ICAgCj4gICAJbXV0ZXhfbG9jaygmZGV2LT5lcnJvcl90YXNrX2xpc3Rf bG9jayk7Cj4gICAKPiBAQCAtMzg4LDE1ICszOTEsMTUgQEAgc3RhdGljIHZvaWQgbGltYV9zY2hl ZF9idWlsZF9lcnJvcl90YXNrX2xpc3Qoc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzaykKPiAg IAkJfSBlbHNlIHsKPiAgIAkJCWJ1ZmZlcl9jaHVuay0+c2l6ZSA9IGxpbWFfYm9fc2l6ZShibyk7 Cj4gICAKPiAtCQkJZGF0YSA9IGRybV9nZW1fc2htZW1fdm1hcCgmYm8tPmJhc2UuYmFzZSk7Cj4g LQkJCWlmIChJU19FUlJfT1JfTlVMTChkYXRhKSkgewo+ICsJCQlyZXQgPSBkcm1fZ2VtX3NobWVt X3ZtYXAoJmJvLT5iYXNlLmJhc2UsICZtYXApOwo+ICsJCQlpZiAocmV0KSB7Cj4gICAJCQkJa3Zm cmVlKGV0KTsKPiAgIAkJCQlnb3RvIG91dDsKPiAgIAkJCX0KPiAgIAo+IC0JCQltZW1jcHkoYnVm ZmVyX2NodW5rICsgMSwgZGF0YSwgYnVmZmVyX2NodW5rLT5zaXplKTsKPiArCQkJbWVtY3B5KGJ1 ZmZlcl9jaHVuayArIDEsIG1hcC52YWRkciwgYnVmZmVyX2NodW5rLT5zaXplKTsKPiAgIAo+IC0J CQlkcm1fZ2VtX3NobWVtX3Z1bm1hcCgmYm8tPmJhc2UuYmFzZSwgZGF0YSk7Cj4gKwkJCWRybV9n ZW1fc2htZW1fdnVubWFwKCZiby0+YmFzZS5iYXNlLCAmbWFwKTsKPiAgIAkJfQo+ICAgCj4gICAJ CWJ1ZmZlcl9jaHVuayA9ICh2b2lkICopKGJ1ZmZlcl9jaHVuayArIDEpICsgYnVmZmVyX2NodW5r LT5zaXplOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX21v ZGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2FnMjAwL21nYWcyMDBfbW9kZS5jCj4gaW5kZXggMzg2 NzJmOWU1YzRmLi44ZWY3Njc2OWI5N2YgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21n YWcyMDAvbWdhZzIwMF9tb2RlLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2Fn MjAwX21vZGUuYwo+IEBAIC05LDYgKzksNyBAQAo+ICAgICovCj4gICAKPiAgICNpbmNsdWRlIDxs aW51eC9kZWxheS5oPgo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiAgIAo+ICAg I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICAgI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljX3N0YXRlX2hlbHBlci5oPgo+IEBAIC0xNTU2LDE1ICsxNTU3LDE4IEBAIG1nYWcyMDBf aGFuZGxlX2RhbWFnZShzdHJ1Y3QgbWdhX2RldmljZSAqbWRldiwgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsCj4gICAJCSAgICAgIHN0cnVjdCBkcm1fcmVjdCAqY2xpcCkKPiAgIHsKPiAgIAlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJm1kZXYtPmJhc2U7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9t YXAgbWFwOwo+ICAgCXZvaWQgKnZtYXA7Cj4gKwlpbnQgcmV0Owo+ICAgCj4gLQl2bWFwID0gZHJt X2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0pOwo+IC0JaWYgKGRybV9XQVJOX09OKGRldiwgIXZt YXApKQo+ICsJcmV0ID0gZHJtX2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0sICZtYXApOwo+ICsJ aWYgKGRybV9XQVJOX09OKGRldiwgcmV0KSkKPiAgIAkJcmV0dXJuOyAvKiBCVUc6IFNITUVNIEJP IHNob3VsZCBhbHdheXMgYmUgdm1hcHBlZCAqLwo+ICsJdm1hcCA9IG1hcC52YWRkcjsgLyogVE9E TzogVXNlIG1hcHBpbmcgYWJzdHJhY3Rpb24gcHJvcGVybHkgKi8KPiAgIAo+ICAgCWRybV9mYl9t ZW1jcHlfZHN0Y2xpcChtZGV2LT52cmFtLCB2bWFwLCBmYiwgY2xpcCk7Cj4gICAKPiAtCWRybV9n ZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sIHZtYXApOwo+ICsJZHJtX2dlbV9zaG1lbV92dW5t YXAoZmItPm9ialswXSwgJm1hcCk7Cj4gICAKPiAgIAkvKiBBbHdheXMgc2Nhbm91dCBpbWFnZSBh dCBWUkFNIG9mZnNldCAwICovCj4gICAJbWdhZzIwMF9zZXRfc3RhcnRhZGQobWRldiwgKHUzMikw KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZyBiL2RyaXZl cnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWcKPiBpbmRleCA1ZGVjMWU1Njk0YjcuLjk0MzYzMTBk MDg1NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZwo+IEBAIC02LDYgKzYsNyBAQCBjb25m aWcgRFJNX05PVVZFQVUKPiAgIAlzZWxlY3QgRldfTE9BREVSCj4gICAJc2VsZWN0IERSTV9LTVNf SEVMUEVSCj4gICAJc2VsZWN0IERSTV9UVE0KPiArCXNlbGVjdCBEUk1fVFRNX0hFTFBFUgo+ICAg CXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFIGlmIERSTV9OT1VWRUFVX0JBQ0tMSUdIVAo+ ICAgCXNlbGVjdCBBQ1BJX1ZJREVPIGlmIEFDUEkgJiYgWDg2ICYmIEJBQ0tMSUdIVF9DTEFTU19E RVZJQ0UgJiYgSU5QVVQKPiAgIAlzZWxlY3QgWDg2X1BMQVRGT1JNX0RFVklDRVMgaWYgQUNQSSAm JiBYODYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5o IGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5oCj4gaW5kZXggNjQxZWY2Mjk4 YTBlLi42MDQ1Yjg1YTc2MmEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUv bm91dmVhdV9iby5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5o Cj4gQEAgLTM5LDggKzM5LDYgQEAgc3RydWN0IG5vdXZlYXVfYm8gewo+ICAgCXVuc2lnbmVkIG1v ZGU7Cj4gICAKPiAgIAlzdHJ1Y3Qgbm91dmVhdV9kcm1fdGlsZSAqdGlsZTsKPiAtCj4gLQlzdHJ1 Y3QgdHRtX2JvX2ttYXBfb2JqIGRtYV9idWZfdm1hcDsKPiAgIH07Cj4gICAKPiAgIHN0YXRpYyBp bmxpbmUgc3RydWN0IG5vdXZlYXVfYm8gKgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bm91dmVhdS9ub3V2ZWF1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9n ZW0uYwo+IGluZGV4IDlhNDIxYzM5NDlkZS4uZjk0MmI1MjZiMGE1IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCj4gQEAgLTI0LDYgKzI0LDggQEAKPiAgICAqCj4gICAg Ki8KPiAgIAo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdHRtX2hlbHBlci5oPgo+ICsKPiAgICNp bmNsdWRlICJub3V2ZWF1X2Rydi5oIgo+ICAgI2luY2x1ZGUgIm5vdXZlYXVfZG1hLmgiCj4gICAj aW5jbHVkZSAibm91dmVhdV9mZW5jZS5oIgo+IEBAIC0xNzYsOCArMTc4LDggQEAgY29uc3Qgc3Ry dWN0IGRybV9nZW1fb2JqZWN0X2Z1bmNzIG5vdXZlYXVfZ2VtX29iamVjdF9mdW5jcyA9IHsKPiAg IAkucGluID0gbm91dmVhdV9nZW1fcHJpbWVfcGluLAo+ICAgCS51bnBpbiA9IG5vdXZlYXVfZ2Vt X3ByaW1lX3VucGluLAo+ICAgCS5nZXRfc2dfdGFibGUgPSBub3V2ZWF1X2dlbV9wcmltZV9nZXRf c2dfdGFibGUsCj4gLQkudm1hcCA9IG5vdXZlYXVfZ2VtX3ByaW1lX3ZtYXAsCj4gLQkudnVubWFw ID0gbm91dmVhdV9nZW1fcHJpbWVfdnVubWFwLAo+ICsJLnZtYXAgPSBkcm1fZ2VtX3R0bV92bWFw LAo+ICsJLnZ1bm1hcCA9IGRybV9nZW1fdHRtX3Z1bm1hcCwKPiAgIH07Cj4gICAKPiAgIGludAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5oIGIvZHJp dmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uaAo+IGluZGV4IGIzNWMxODAzMjJlMi4u M2I5MTljN2M5MzFjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZl YXVfZ2VtLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5oCj4g QEAgLTM3LDcgKzM3LDUgQEAgZXh0ZXJuIHZvaWQgbm91dmVhdV9nZW1fcHJpbWVfdW5waW4oc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICopOwo+ICAgZXh0ZXJuIHN0cnVjdCBzZ190YWJsZSAqbm91dmVh dV9nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKTsKPiAgIGV4 dGVybiBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm5vdXZlYXVfZ2VtX3ByaW1lX2ltcG9ydF9zZ190 YWJsZSgKPiAgIAlzdHJ1Y3QgZHJtX2RldmljZSAqLCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50 ICosIHN0cnVjdCBzZ190YWJsZSAqKTsKPiAtZXh0ZXJuIHZvaWQgKm5vdXZlYXVfZ2VtX3ByaW1l X3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICopOwo+IC1leHRlcm4gdm9pZCBub3V2ZWF1X2dl bV9wcmltZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICosIHZvaWQgKik7Cj4gICAKPiAg ICNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3By aW1lLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ByaW1lLmMKPiBpbmRleCBh ODI2NGFlYmYzZDQuLjJmMTZiNTI0OTI4MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v bm91dmVhdS9ub3V2ZWF1X3ByaW1lLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9u b3V2ZWF1X3ByaW1lLmMKPiBAQCAtMzUsMjYgKzM1LDYgQEAgc3RydWN0IHNnX3RhYmxlICpub3V2 ZWF1X2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4g ICAJcmV0dXJuIGRybV9wcmltZV9wYWdlc190b19zZyhvYmotPmRldiwgbnZiby0+Ym8udHRtLT5w YWdlcywgbnBhZ2VzKTsKPiAgIH0KPiAgIAo+IC12b2lkICpub3V2ZWF1X2dlbV9wcmltZV92bWFw KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+IC17Cj4gLQlzdHJ1Y3Qgbm91dmVhdV9ibyAq bnZibyA9IG5vdXZlYXVfZ2VtX29iamVjdChvYmopOwo+IC0JaW50IHJldDsKPiAtCj4gLQlyZXQg PSB0dG1fYm9fa21hcCgmbnZiby0+Ym8sIDAsIG52Ym8tPmJvLm51bV9wYWdlcywKPiAtCQkJICAm bnZiby0+ZG1hX2J1Zl92bWFwKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0 KTsKPiAtCj4gLQlyZXR1cm4gbnZiby0+ZG1hX2J1Zl92bWFwLnZpcnR1YWw7Cj4gLX0KPiAtCj4g LXZvaWQgbm91dmVhdV9nZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LCB2b2lkICp2YWRkcikKPiAtewo+IC0Jc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8gPSBub3V2ZWF1 X2dlbV9vYmplY3Qob2JqKTsKPiAtCj4gLQl0dG1fYm9fa3VubWFwKCZudmJvLT5kbWFfYnVmX3Zt YXApOwo+IC19Cj4gLQo+ICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpub3V2ZWF1X2dlbV9wcmlt ZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJCQkJCQkgc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+ICAgCQkJCQkJCSBzdHJ1Y3Qgc2dfdGFi bGUgKnNnKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rf cGVyZmNudC5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X3BlcmZjbnQuYwo+ IGluZGV4IGZkYmM4ZDk0OTEzNS4uNWFiMDNkNjA1ZjU3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9wZXJmY250LmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vcGFuZnJvc3QvcGFuZnJvc3RfcGVyZmNudC5jCj4gQEAgLTUsNiArNSw3IEBACj4gICAjaW5j bHVkZSA8ZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmg+Cj4gICAjaW5jbHVkZSA8ZHJtL3BhbmZy b3N0X2RybS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KPiArI2luY2x1ZGUg PGxpbnV4L2RtYS1idWYtbWFwLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Cj4gICAj aW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K PiBAQCAtNzIsNiArNzMsNyBAQCBzdGF0aWMgaW50IHBhbmZyb3N0X3BlcmZjbnRfZW5hYmxlX2xv Y2tlZChzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiwKPiAgIHsKPiAgIAlzdHJ1Y3QgcGFu ZnJvc3RfZmlsZV9wcml2ICp1c2VyID0gZmlsZV9wcml2LT5kcml2ZXJfcHJpdjsKPiAgIAlzdHJ1 Y3QgcGFuZnJvc3RfcGVyZmNudCAqcGVyZmNudCA9IHBmZGV2LT5wZXJmY250Owo+ICsJc3RydWN0 IGRtYV9idWZfbWFwIG1hcDsKPiAgIAlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKmJvOwo+ ICAgCXUzMiBjZmcsIGFzOwo+ICAgCWludCByZXQ7Cj4gQEAgLTEwMywxMSArMTA1LDEwIEBAIHN0 YXRpYyBpbnQgcGFuZnJvc3RfcGVyZmNudF9lbmFibGVfbG9ja2VkKHN0cnVjdCBwYW5mcm9zdF9k ZXZpY2UgKnBmZGV2LAo+ICAgCQlnb3RvIGVycl9jbG9zZV9ibzsKPiAgIAl9Cj4gICAKPiAtCXBl cmZjbnQtPmJ1ZiA9IGRybV9nZW1fc2htZW1fdm1hcCgmYm8tPmJhc2UpOwo+IC0JaWYgKElTX0VS UihwZXJmY250LT5idWYpKSB7Cj4gLQkJcmV0ID0gUFRSX0VSUihwZXJmY250LT5idWYpOwo+ICsJ cmV0ID0gZHJtX2dlbV9zaG1lbV92bWFwKCZiby0+YmFzZSwgJm1hcCk7Cj4gKwlpZiAocmV0KQo+ ICAgCQlnb3RvIGVycl9wdXRfbWFwcGluZzsKPiAtCX0KPiArCXBlcmZjbnQtPmJ1ZiA9IG1hcC52 YWRkcjsKPiAgIAo+ICAgCS8qCj4gICAJICogSW52YWxpZGF0ZSB0aGUgY2FjaGUgYW5kIGNsZWFy IHRoZSBjb3VudGVycyB0byBzdGFydCBmcm9tIGEgZnJlc2gKPiBAQCAtMTYzLDcgKzE2NCw3IEBA IHN0YXRpYyBpbnQgcGFuZnJvc3RfcGVyZmNudF9lbmFibGVfbG9ja2VkKHN0cnVjdCBwYW5mcm9z dF9kZXZpY2UgKnBmZGV2LAo+ICAgCXJldHVybiAwOwo+ICAgCj4gICBlcnJfdnVubWFwOgo+IC0J ZHJtX2dlbV9zaG1lbV92dW5tYXAoJmJvLT5iYXNlLCBwZXJmY250LT5idWYpOwo+ICsJZHJtX2dl bV9zaG1lbV92dW5tYXAoJmJvLT5iYXNlLCAmbWFwKTsKPiAgIGVycl9wdXRfbWFwcGluZzoKPiAg IAlwYW5mcm9zdF9nZW1fbWFwcGluZ19wdXQocGVyZmNudC0+bWFwcGluZyk7Cj4gICBlcnJfY2xv c2VfYm86Cj4gQEAgLTE4MCw2ICsxODEsNyBAQCBzdGF0aWMgaW50IHBhbmZyb3N0X3BlcmZjbnRf ZGlzYWJsZV9sb2NrZWQoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYsCj4gICB7Cj4gICAJ c3RydWN0IHBhbmZyb3N0X2ZpbGVfcHJpdiAqdXNlciA9IGZpbGVfcHJpdi0+ZHJpdmVyX3ByaXY7 Cj4gICAJc3RydWN0IHBhbmZyb3N0X3BlcmZjbnQgKnBlcmZjbnQgPSBwZmRldi0+cGVyZmNudDsK PiArCXN0cnVjdCBkbWFfYnVmX21hcCBtYXAgPSBETUFfQlVGX01BUF9JTklUX1ZBRERSKHBlcmZj bnQtPmJ1Zik7Cj4gICAKPiAgIAlpZiAodXNlciAhPSBwZXJmY250LT51c2VyKQo+ICAgCQlyZXR1 cm4gLUVJTlZBTDsKPiBAQCAtMTkyLDcgKzE5NCw3IEBAIHN0YXRpYyBpbnQgcGFuZnJvc3RfcGVy ZmNudF9kaXNhYmxlX2xvY2tlZChzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiwKPiAgIAkJ ICBHUFVfUEVSRkNOVF9DRkdfTU9ERShHUFVfUEVSRkNOVF9DRkdfTU9ERV9PRkYpKTsKPiAgIAo+ ICAgCXBlcmZjbnQtPnVzZXIgPSBOVUxMOwo+IC0JZHJtX2dlbV9zaG1lbV92dW5tYXAoJnBlcmZj bnQtPm1hcHBpbmctPm9iai0+YmFzZS5iYXNlLCBwZXJmY250LT5idWYpOwo+ICsJZHJtX2dlbV9z aG1lbV92dW5tYXAoJnBlcmZjbnQtPm1hcHBpbmctPm9iai0+YmFzZS5iYXNlLCAmbWFwKTsKPiAg IAlwZXJmY250LT5idWYgPSBOVUxMOwo+ICAgCXBhbmZyb3N0X2dlbV9jbG9zZSgmcGVyZmNudC0+ bWFwcGluZy0+b2JqLT5iYXNlLmJhc2UsIGZpbGVfcHJpdik7Cj4gICAJcGFuZnJvc3RfbW11X2Fz X3B1dChwZmRldiwgcGVyZmNudC0+bWFwcGluZy0+bW11KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3F4bC9xeGxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZGlz cGxheS5jCj4gaW5kZXggNDVmZDc2ZTA0YmRjLi5lMTY1ZmE5YjIwODkgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZGlzcGxheS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfZGlzcGxheS5jCj4gQEAgLTI1LDYgKzI1LDcgQEAKPiAgIAo+ICAgI2luY2x1ZGUg PGxpbnV4L2NyYzMyLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2RtYS1idWYtbWFwLmg+Cj4gICAKPiAgICNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgo+ ICAgI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gQEAgLTU4MSw2ICs1ODIsOCBAQCBzdGF0 aWMgdm9pZCBxeGxfY3Vyc29yX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs Cj4gICAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gICAJc3RydWN0IHF4bF9ibyAqY3Vy c29yX2JvID0gTlVMTCwgKnVzZXJfYm8gPSBOVUxMLCAqb2xkX2N1cnNvcl9ibyA9IE5VTEw7Cj4g ICAJaW50IHJldDsKPiArCXN0cnVjdCBkbWFfYnVmX21hcCB1c2VyX21hcDsKPiArCXN0cnVjdCBk bWFfYnVmX21hcCBjdXJzb3JfbWFwOwo+ICAgCXZvaWQgKnVzZXJfcHRyOwo+ICAgCWludCBzaXpl ID0gNjQqNjQqNDsKPiAgIAo+IEBAIC01OTUsOSArNTk4LDEwIEBAIHN0YXRpYyB2b2lkIHF4bF9j dXJzb3JfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgIAkJdXNlcl9i byA9IGdlbV90b19xeGxfYm8ob2JqKTsKPiAgIAo+ICAgCQkvKiBwaW5uaW5nIGlzIGRvbmUgaW4g dGhlIHByZXBhcmUvY2xlYW51cCBmcmFtZXZidWZmZXIgKi8KPiAtCQlyZXQgPSBxeGxfYm9fa21h cCh1c2VyX2JvLCAmdXNlcl9wdHIpOwo+ICsJCXJldCA9IHF4bF9ib19rbWFwKHVzZXJfYm8sICZ1 c2VyX21hcCk7Cj4gICAJCWlmIChyZXQpCj4gICAJCQlnb3RvIG91dF9mcmVlX3JlbGVhc2U7Cj4g KwkJdXNlcl9wdHIgPSB1c2VyX21hcC52YWRkcjsgLyogVE9ETzogVXNlIG1hcHBpbmcgYWJzdHJh Y3Rpb24gcHJvcGVybHkgKi8KPiAgIAo+ICAgCQlyZXQgPSBxeGxfYWxsb2NfYm9fcmVzZXJ2ZWQo cWRldiwgcmVsZWFzZSwKPiAgIAkJCQkJICAgIHNpemVvZihzdHJ1Y3QgcXhsX2N1cnNvcikgKyBz aXplLAo+IEBAIC02MTMsNyArNjE3LDcgQEAgc3RhdGljIHZvaWQgcXhsX2N1cnNvcl9hdG9taWNf dXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCQlpZiAocmV0KQo+ICAgCQkJZ290 byBvdXRfdW5waW47Cj4gICAKPiAtCQlyZXQgPSBxeGxfYm9fa21hcChjdXJzb3JfYm8sICh2b2lk ICoqKSZjdXJzb3IpOwo+ICsJCXJldCA9IHF4bF9ib19rbWFwKGN1cnNvcl9ibywgJmN1cnNvcl9t YXApOwo+ICAgCQlpZiAocmV0KQo+ICAgCQkJZ290byBvdXRfYmFja29mZjsKPiAgIAo+IEBAIC0x MTMzLDYgKzExMzcsNyBAQCBpbnQgcXhsX2NyZWF0ZV9tb25pdG9yc19vYmplY3Qoc3RydWN0IHF4 bF9kZXZpY2UgKnFkZXYpCj4gICB7Cj4gICAJaW50IHJldDsKPiAgIAlzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKmdvYmo7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICAgCWludCBtb25pdG9y c19jb25maWdfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcXhsX21vbml0b3JzX2NvbmZpZykgKwo+ICAg CQlxeGxfbnVtX2NydGMgKiBzaXplb2Yoc3RydWN0IHF4bF9oZWFkKTsKPiAgIAo+IEBAIC0xMTQ5 LDcgKzExNTQsNyBAQCBpbnQgcXhsX2NyZWF0ZV9tb25pdG9yc19vYmplY3Qoc3RydWN0IHF4bF9k ZXZpY2UgKnFkZXYpCj4gICAJaWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPiAgIAo+IC0JcXhs X2JvX2ttYXAocWRldi0+bW9uaXRvcnNfY29uZmlnX2JvLCBOVUxMKTsKPiArCXF4bF9ib19rbWFw KHFkZXYtPm1vbml0b3JzX2NvbmZpZ19ibywgJm1hcCk7Cj4gICAKPiAgIAlxZGV2LT5tb25pdG9y c19jb25maWcgPSBxZGV2LT5tb25pdG9yc19jb25maWdfYm8tPmtwdHI7Cj4gICAJcWRldi0+cmFt X2hlYWRlci0+bW9uaXRvcnNfY29uZmlnID0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfZHJhdy5jIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJhdy5jCj4gaW5kZXgg MzU5OWRiMDk2OTczLi43YjdhY2I5MTA3ODAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfZHJhdy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJhdy5jCj4g QEAgLTIwLDYgKzIwLDggQEAKPiAgICAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gICAgKi8KPiAgIAo+ ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiArCj4gICAjaW5jbHVkZSA8ZHJtL2Ry bV9mb3VyY2MuaD4KPiAgIAo+ICAgI2luY2x1ZGUgInF4bF9kcnYuaCIKPiBAQCAtNDIsMTMgKzQ0 LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcXhsX3JlY3QgKmRyYXdhYmxlX3NldF9jbGlwcGluZyhzdHJ1 Y3QgcXhsX2RldmljZSAqcWRldiwKPiAgIAkJCQkJICAgICAgdW5zaWduZWQgaW50IG51bV9jbGlw cywKPiAgIAkJCQkJICAgICAgc3RydWN0IHF4bF9ibyAqY2xpcHNfYm8pCj4gICB7Cj4gKwlzdHJ1 Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICAgCXN0cnVjdCBxeGxfY2xpcF9yZWN0cyAqZGV2X2NsaXBz Owo+ICAgCWludCByZXQ7Cj4gICAKPiAtCXJldCA9IHF4bF9ib19rbWFwKGNsaXBzX2JvLCAodm9p ZCAqKikmZGV2X2NsaXBzKTsKPiAtCWlmIChyZXQpIHsKPiArCXJldCA9IHF4bF9ib19rbWFwKGNs aXBzX2JvLCAmbWFwKTsKPiArCWlmIChyZXQpCj4gICAJCXJldHVybiBOVUxMOwo+IC0JfQo+ICsJ ZGV2X2NsaXBzID0gbWFwLnZhZGRyOyAvKiBUT0RPOiBVc2UgbWFwcGluZyBhYnN0cmFjdGlvbiBw cm9wZXJseSAqLwo+ICsKPiAgIAlkZXZfY2xpcHMtPm51bV9yZWN0cyA9IG51bV9jbGlwczsKPiAg IAlkZXZfY2xpcHMtPmNodW5rLm5leHRfY2h1bmsgPSAwOwo+ICAgCWRldl9jbGlwcy0+Y2h1bmsu cHJldl9jaHVuayA9IDA7Cj4gQEAgLTE0Miw2ICsxNDYsNyBAQCB2b2lkIHF4bF9kcmF3X2RpcnR5 X2ZiKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAo+ICAgCWludCBzdHJpZGUgPSBmYi0+cGl0Y2hl c1swXTsKPiAgIAkvKiBkZXB0aCBpcyBub3QgYWN0dWFsbHkgaW50ZXJlc3RpbmcsIHdlIGRvbid0 IG1hc2sgd2l0aCBpdCAqLwo+ICAgCWludCBkZXB0aCA9IGZiLT5mb3JtYXQtPmNwcFswXSAqIDg7 Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgc3VyZmFjZV9tYXA7Cj4gICAJdWludDhfdCAqc3VyZmFj ZV9iYXNlOwo+ICAgCXN0cnVjdCBxeGxfcmVsZWFzZSAqcmVsZWFzZTsKPiAgIAlzdHJ1Y3QgcXhs X2JvICpjbGlwc19ibzsKPiBAQCAtMTk3LDkgKzIwMiwxMCBAQCB2b2lkIHF4bF9kcmF3X2RpcnR5 X2ZiKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAo+ICAgCWlmIChyZXQpCj4gICAJCWdvdG8gb3V0 X3JlbGVhc2VfYmFja29mZjsKPiAgIAo+IC0JcmV0ID0gcXhsX2JvX2ttYXAoYm8sICh2b2lkICoq KSZzdXJmYWNlX2Jhc2UpOwo+ICsJcmV0ID0gcXhsX2JvX2ttYXAoYm8sICZzdXJmYWNlX21hcCk7 Cj4gICAJaWYgKHJldCkKPiAgIAkJZ290byBvdXRfcmVsZWFzZV9iYWNrb2ZmOwo+ICsJc3VyZmFj ZV9iYXNlID0gc3VyZmFjZV9tYXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0 aW9uIHByb3Blcmx5ICovCj4gICAKPiAgIAlyZXQgPSBxeGxfaW1hZ2VfaW5pdChxZGV2LCByZWxl YXNlLCBkaW1hZ2UsIHN1cmZhY2VfYmFzZSwKPiAgIAkJCSAgICAgbGVmdCAtIGR1bWJfc2hhZG93 X29mZnNldCwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJ2LmggYi9k cml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kcnYuaAo+IGluZGV4IDM2MDJlOGIzNDE4OS4uZWI0Mzdm ZWE1ZDllIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX2Rydi5oCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJ2LmgKPiBAQCAtMzAsNiArMzAsNyBAQAo+ICAg ICogRGVmaW5pdGlvbnMgdGFrZW4gZnJvbSBzcGljZS1wcm90b2NvbCwgcGx1cyBrZXJuZWwgZHJp dmVyIHNwZWNpZmljIGJpdHMuCj4gICAgKi8KPiAgIAo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1 Zi1tYXAuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UuaD4KPiAgICNpbmNsdWRlIDxs aW51eC9maXJtd2FyZS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ IEBAIC01MCw2ICs1MSw4IEBACj4gICAKPiAgICNpbmNsdWRlICJxeGxfZGV2LmgiCj4gICAKPiAr c3RydWN0IGRtYV9idWZfbWFwOwo+ICsKPiAgICNkZWZpbmUgRFJJVkVSX0FVVEhPUgkJIkRhdmUg QWlybGllIgo+ICAgCj4gICAjZGVmaW5lIERSSVZFUl9OQU1FCQkicXhsIgo+IEBAIC03OSw3ICs4 Miw3IEBAIHN0cnVjdCBxeGxfYm8gewo+ICAgCS8qIFByb3RlY3RlZCBieSB0Ym8ucmVzZXJ2ZWQg Ki8KPiAgIAlzdHJ1Y3QgdHRtX3BsYWNlCQlwbGFjZW1lbnRzWzNdOwo+ICAgCXN0cnVjdCB0dG1f cGxhY2VtZW50CQlwbGFjZW1lbnQ7Cj4gLQlzdHJ1Y3QgdHRtX2JvX2ttYXBfb2JqCQlrbWFwOwo+ ICsJc3RydWN0IGRtYV9idWZfbWFwCQltYXA7Cj4gICAJdm9pZAkJCQkqa3B0cjsKPiAgIAl1bnNp Z25lZCBpbnQgICAgICAgICAgICAgICAgICAgIG1hcF9jb3VudDsKPiAgIAlpbnQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHR5cGU7Cj4gQEAgLTMzNSw3ICszMzgsNiBAQCBpbnQgcXhsX2dl bV9vYmplY3Rfb3BlbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYpOwo+ICAgdm9pZCBxeGxfZ2VtX29iamVjdF9jbG9zZShzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiwKPiAgIAkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwo+ICAg dm9pZCBxeGxfYm9fZm9yY2VfZGVsZXRlKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2KTsKPiAtaW50 IHF4bF9ib19rbWFwKHN0cnVjdCBxeGxfYm8gKmJvLCB2b2lkICoqcHRyKTsKPiAgIAo+ICAgLyog cXhsX2R1bWIuYyAqLwo+ICAgaW50IHF4bF9tb2RlX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2LAo+IEBAIC00NDUsOCArNDQ3LDkgQEAgc3RydWN0IHNnX3RhYmxlICpxeGxf Z2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gICBz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnF4bF9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKAo+ICAg CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFj aCwKPiAgIAlzdHJ1Y3Qgc2dfdGFibGUgKnNndCk7Cj4gLXZvaWQgKnF4bF9nZW1fcHJpbWVfdm1h cChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gLXZvaWQgcXhsX2dlbV9wcmltZV92dW5t YXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHZvaWQgKnZhZGRyKTsKPiAraW50IHF4bF9n ZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZf bWFwICptYXApOwo+ICt2b2lkIHF4bF9nZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqLAo+ICsJCQkgIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIGludCBxeGxf Z2VtX3ByaW1lX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCj4gICAJCQkJc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9xeGwvcXhsX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfb2JqZWN0LmMKPiBp bmRleCA5NDBlOTkzNTRmNDkuLjc1NWRmNGQ4Zjk1ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vcXhsL3F4bF9vYmplY3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX29i amVjdC5jCj4gQEAgLTIzLDEwICsyMywxMiBAQAo+ICAgICogICAgICAgICAgQWxvbiBMZXZ5Cj4g ICAgKi8KPiAgIAo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi1tYXAuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2lvLW1hcHBpbmcuaD4KPiArCj4gICAjaW5jbHVkZSAicXhsX2Rydi5oIgo+ICAgI2lu Y2x1ZGUgInF4bF9vYmplY3QuaCIKPiAgIAo+IC0jaW5jbHVkZSA8bGludXgvaW8tbWFwcGluZy5o Pgo+ICAgc3RhdGljIHZvaWQgcXhsX3R0bV9ib19kZXN0cm95KHN0cnVjdCB0dG1fYnVmZmVyX29i amVjdCAqdGJvKQo+ICAgewo+ICAgCXN0cnVjdCBxeGxfYm8gKmJvOwo+IEBAIC0xNTIsMjQgKzE1 NCwyNyBAQCBpbnQgcXhsX2JvX2NyZWF0ZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKPiAgIAly ZXR1cm4gMDsKPiAgIH0KPiAgIAo+IC1pbnQgcXhsX2JvX2ttYXAoc3RydWN0IHF4bF9ibyAqYm8s IHZvaWQgKipwdHIpCj4gK2ludCBxeGxfYm9fa21hcChzdHJ1Y3QgcXhsX2JvICpibywgc3RydWN0 IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gLQlib29sIGlzX2lvbWVtOwo+ICAgCWludCByOwo+ ICAgCj4gICAJaWYgKGJvLT5rcHRyKSB7Cj4gLQkJaWYgKHB0cikKPiAtCQkJKnB0ciA9IGJvLT5r cHRyOwo+ICAgCQliby0+bWFwX2NvdW50Kys7Cj4gLQkJcmV0dXJuIDA7Cj4gKwkJZ290byBvdXQ7 Cj4gICAJfQo+IC0JciA9IHR0bV9ib19rbWFwKCZiby0+dGJvLCAwLCBiby0+dGJvLm51bV9wYWdl cywgJmJvLT5rbWFwKTsKPiArCXIgPSB0dG1fYm9fdm1hcCgmYm8tPnRibywgJmJvLT5tYXApOwo+ ICAgCWlmIChyKQo+ICAgCQlyZXR1cm4gcjsKPiAtCWJvLT5rcHRyID0gdHRtX2ttYXBfb2JqX3Zp cnR1YWwoJmJvLT5rbWFwLCAmaXNfaW9tZW0pOwo+IC0JaWYgKHB0cikKPiAtCQkqcHRyID0gYm8t PmtwdHI7Cj4gICAJYm8tPm1hcF9jb3VudCA9IDE7Cj4gKwo+ICsJLyogVE9ETzogUmVtb3ZlIGtw dHIgaW4gZmF2b3Igb2YgbWFwIGV2ZXJ5d2hlcmUuICovCj4gKwlpZiAoYm8tPm1hcC5pc19pb21l bSkKPiArCQliby0+a3B0ciA9ICh2b2lkICopYm8tPm1hcC52YWRkcl9pb21lbTsKPiArCWVsc2UK PiArCQliby0+a3B0ciA9IGJvLT5tYXAudmFkZHI7Cj4gKwo+ICtvdXQ6Cj4gKwkqbWFwID0gYm8t Pm1hcDsKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IEBAIC0xODAsNiArMTg1LDcgQEAgdm9p ZCAqcXhsX2JvX2ttYXBfYXRvbWljX3BhZ2Uoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsCj4gICAJ dm9pZCAqcnB0cjsKPiAgIAlpbnQgcmV0Owo+ICAgCXN0cnVjdCBpb19tYXBwaW5nICptYXA7Cj4g KwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgYm9fbWFwOwo+ICAgCj4gICAJaWYgKGJvLT50Ym8ubWVtLm1l bV90eXBlID09IFRUTV9QTF9WUkFNKQo+ICAgCQltYXAgPSBxZGV2LT52cmFtX21hcHBpbmc7Cj4g QEAgLTE5Niw5ICsyMDIsMTAgQEAgdm9pZCAqcXhsX2JvX2ttYXBfYXRvbWljX3BhZ2Uoc3RydWN0 IHF4bF9kZXZpY2UgKnFkZXYsCj4gICAJCXJldHVybiBycHRyOwo+ICAgCX0KPiAgIAo+IC0JcmV0 ID0gcXhsX2JvX2ttYXAoYm8sICZycHRyKTsKPiArCXJldCA9IHF4bF9ib19rbWFwKGJvLCAmYm9f bWFwKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gTlVMTDsKPiArCXJwdHIgPSBib19tYXAu dmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4gICAK PiAgIAlycHRyICs9IHBhZ2Vfb2Zmc2V0ICogUEFHRV9TSVpFOwo+ICAgCXJldHVybiBycHRyOwo+ IEBAIC0yMTIsNyArMjE5LDcgQEAgdm9pZCBxeGxfYm9fa3VubWFwKHN0cnVjdCBxeGxfYm8gKmJv KQo+ICAgCWlmIChiby0+bWFwX2NvdW50ID4gMCkKPiAgIAkJcmV0dXJuOwo+ICAgCWJvLT5rcHRy ID0gTlVMTDsKPiAtCXR0bV9ib19rdW5tYXAoJmJvLT5rbWFwKTsKPiArCXR0bV9ib192dW5tYXAo JmJvLT50Ym8sICZiby0+bWFwKTsKPiAgIH0KPiAgIAo+ICAgdm9pZCBxeGxfYm9fa3VubWFwX2F0 b21pY19wYWdlKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vcXhsL3F4bF9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX29iamVj dC5oCj4gaW5kZXggMDlhNWM4MTgzMjRkLi5lYmYyNGM5ZDJiZjIgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL3F4bC9xeGxfb2JqZWN0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcXhs L3F4bF9vYmplY3QuaAo+IEBAIC02Myw3ICs2Myw3IEBAIGV4dGVybiBpbnQgcXhsX2JvX2NyZWF0 ZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKPiAgIAkJCSBib29sIGtlcm5lbCwgYm9vbCBwaW5u ZWQsIHUzMiBkb21haW4sCj4gICAJCQkgc3RydWN0IHF4bF9zdXJmYWNlICpzdXJmLAo+ICAgCQkJ IHN0cnVjdCBxeGxfYm8gKipib19wdHIpOwo+IC1leHRlcm4gaW50IHF4bF9ib19rbWFwKHN0cnVj dCBxeGxfYm8gKmJvLCB2b2lkICoqcHRyKTsKPiArZXh0ZXJuIGludCBxeGxfYm9fa21hcChzdHJ1 Y3QgcXhsX2JvICpibywgc3RydWN0IGRtYV9idWZfbWFwICptYXApOwo+ICAgZXh0ZXJuIHZvaWQg cXhsX2JvX2t1bm1hcChzdHJ1Y3QgcXhsX2JvICpibyk7Cj4gICB2b2lkICpxeGxfYm9fa21hcF9h dG9taWNfcGFnZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwgc3RydWN0IHF4bF9ibyAqYm8sIGlu dCBwYWdlX29mZnNldCk7Cj4gICB2b2lkIHF4bF9ib19rdW5tYXBfYXRvbWljX3BhZ2Uoc3RydWN0 IHF4bF9kZXZpY2UgKnFkZXYsIHN0cnVjdCBxeGxfYm8gKmJvLCB2b2lkICptYXApOwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9wcmltZS5jIGIvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfcHJpbWUuYwo+IGluZGV4IDdkMzgxNmZjYTVhOC4uNGFhOTQ5Nzk5NDQ2IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX3ByaW1lLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vcXhsL3F4bF9wcmltZS5jCj4gQEAgLTU0LDIwICs1NCwyMCBAQCBzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKnF4bF9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKAo+ICAgCXJldHVybiBF UlJfUFRSKC1FTk9TWVMpOwo+ICAgfQo+ICAgCj4gLXZvaWQgKnF4bF9nZW1fcHJpbWVfdm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAraW50IHF4bF9nZW1fcHJpbWVfdm1hcChzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4g ICAJc3RydWN0IHF4bF9ibyAqYm8gPSBnZW1fdG9fcXhsX2JvKG9iaik7Cj4gLQl2b2lkICpwdHI7 Cj4gICAJaW50IHJldDsKPiAgIAo+IC0JcmV0ID0gcXhsX2JvX2ttYXAoYm8sICZwdHIpOwo+ICsJ cmV0ID0gcXhsX2JvX2ttYXAoYm8sIG1hcCk7Cj4gICAJaWYgKHJldCA8IDApCj4gLQkJcmV0dXJu IEVSUl9QVFIocmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICAgCj4gLQlyZXR1cm4gcHRyOwo+ICsJ cmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtdm9pZCBxeGxfZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpCj4gK3ZvaWQgcXhsX2dlbV9wcmltZV92 dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCSAgc3RydWN0IGRtYV9idWZf bWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IHF4bF9ibyAqYm8gPSBnZW1fdG9fcXhsX2JvKG9i aik7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBi L2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKPiBpbmRleCA1ZDU0YmNjZWJkNGQuLjQ0 Y2I1ZWU2ZmMyMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAo+IEBAIC01MDksNyArNTA5 LDYgQEAgc3RydWN0IHJhZGVvbl9ibyB7Cj4gICAJLyogQ29uc3RhbnQgYWZ0ZXIgaW5pdGlhbGl6 YXRpb24gKi8KPiAgIAlzdHJ1Y3QgcmFkZW9uX2RldmljZQkJKnJkZXY7Cj4gICAKPiAtCXN0cnVj dCB0dG1fYm9fa21hcF9vYmoJCWRtYV9idWZfdm1hcDsKPiAgIAlwaWRfdAkJCQlwaWQ7Cj4gICAK PiAgICNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25f Z2VtLmMKPiBpbmRleCAwY2NkNzIxM2U0MWYuLmQyODc2Y2UzYmM5ZSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9yYWRlb24vcmFkZW9uX2dlbS5jCj4gQEAgLTMxLDYgKzMxLDcgQEAKPiAgICNpbmNsdWRlIDxk cm0vZHJtX2RlYnVnZnMuaD4KPiAgICNpbmNsdWRlIDxkcm0vZHJtX2RldmljZS5oPgo+ICAgI2lu Y2x1ZGUgPGRybS9kcm1fZmlsZS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdHRtX2hlbHBl ci5oPgo+ICAgI2luY2x1ZGUgPGRybS9yYWRlb25fZHJtLmg+Cj4gICAKPiAgICNpbmNsdWRlICJy YWRlb24uaCIKPiBAQCAtNDAsOCArNDEsNiBAQCBzdHJ1Y3QgZG1hX2J1ZiAqcmFkZW9uX2dlbV9w cmltZV9leHBvcnQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqLAo+ICAgc3RydWN0IHNnX3Rh YmxlICpyYWRlb25fZ2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaik7Cj4gICBpbnQgcmFkZW9uX2dlbV9wcmltZV9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopOwo+ICAgdm9pZCByYWRlb25fZ2VtX3ByaW1lX3VucGluKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqKTsKPiAtdm9pZCAqcmFkZW9uX2dlbV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqKTsKPiAtdm9pZCByYWRlb25fZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+ICAgCj4gICBzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9nZW1fb2JqZWN0X2Z1bmNzIHJhZGVvbl9nZW1fb2JqZWN0X2Z1bmNzOwo+ICAgCj4g QEAgLTIzNSw4ICsyMzQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9nZW1fb2JqZWN0X2Z1 bmNzIHJhZGVvbl9nZW1fb2JqZWN0X2Z1bmNzID0gewo+ICAgCS5waW4gPSByYWRlb25fZ2VtX3By aW1lX3BpbiwKPiAgIAkudW5waW4gPSByYWRlb25fZ2VtX3ByaW1lX3VucGluLAo+ICAgCS5nZXRf c2dfdGFibGUgPSByYWRlb25fZ2VtX3ByaW1lX2dldF9zZ190YWJsZSwKPiAtCS52bWFwID0gcmFk ZW9uX2dlbV9wcmltZV92bWFwLAo+IC0JLnZ1bm1hcCA9IHJhZGVvbl9nZW1fcHJpbWVfdnVubWFw LAo+ICsJLnZtYXAgPSBkcm1fZ2VtX3R0bV92bWFwLAo+ICsJLnZ1bm1hcCA9IGRybV9nZW1fdHRt X3Z1bm1hcCwKPiAgIH07Cj4gICAKPiAgIC8qCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9yYWRlb24vcmFkZW9uX3ByaW1lLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9w cmltZS5jCj4gaW5kZXggYjlkZTBlNTFjMGJlLi4wODhkMzlhNTFjMGQgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcHJpbWUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9yYWRlb24vcmFkZW9uX3ByaW1lLmMKPiBAQCAtMzksMjYgKzM5LDYgQEAgc3RydWN0IHNn X3RhYmxlICpyYWRlb25fZ2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiAgIAlyZXR1cm4gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKG9iai0+ZGV2LCBiby0+ dGJvLnR0bS0+cGFnZXMsIG5wYWdlcyk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqcmFkZW9uX2dlbV9w cmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+IC17Cj4gLQlzdHJ1Y3QgcmFk ZW9uX2JvICpibyA9IGdlbV90b19yYWRlb25fYm8ob2JqKTsKPiAtCWludCByZXQ7Cj4gLQo+IC0J cmV0ID0gdHRtX2JvX2ttYXAoJmJvLT50Ym8sIDAsIGJvLT50Ym8ubnVtX3BhZ2VzLAo+IC0JCQkg ICZiby0+ZG1hX2J1Zl92bWFwKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0 KTsKPiAtCj4gLQlyZXR1cm4gYm8tPmRtYV9idWZfdm1hcC52aXJ0dWFsOwo+IC19Cj4gLQo+IC12 b2lkIHJhZGVvbl9nZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB2 b2lkICp2YWRkcikKPiAtewo+IC0Jc3RydWN0IHJhZGVvbl9ibyAqYm8gPSBnZW1fdG9fcmFkZW9u X2JvKG9iaik7Cj4gLQo+IC0JdHRtX2JvX2t1bm1hcCgmYm8tPmRtYV9idWZfdm1hcCk7Cj4gLX0K PiAtCj4gICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnJhZGVvbl9nZW1fcHJpbWVfaW1wb3J0X3Nn X3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCQkJCQkJc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqYXR0YWNoLAo+ICAgCQkJCQkJCXN0cnVjdCBzZ190YWJsZSAqc2cpCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmMgYi9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5jCj4gaW5kZXggN2Q1ZWJi MTAzMjNiLi43OTcxZjU3NDM2ZGQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL3JvY2tjaGlwX2RybV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9y b2NrY2hpcF9kcm1fZ2VtLmMKPiBAQCAtNTMyLDI2ICs1MzIsMzIgQEAgcm9ja2NoaXBfZ2VtX3By aW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ICAgCXJldHVybiBF UlJfUFRSKHJldCk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqcm9ja2NoaXBfZ2VtX3ByaW1lX3ZtYXAo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gK2ludCByb2NrY2hpcF9nZW1fcHJpbWVfdm1h cChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4g ICB7Cj4gICAJc3RydWN0IHJvY2tjaGlwX2dlbV9vYmplY3QgKnJrX29iaiA9IHRvX3JvY2tjaGlw X29iaihvYmopOwo+ICAgCj4gLQlpZiAocmtfb2JqLT5wYWdlcykKPiAtCQlyZXR1cm4gdm1hcChy a19vYmotPnBhZ2VzLCBya19vYmotPm51bV9wYWdlcywgVk1fTUFQLAo+IC0JCQkgICAgcGdwcm90 X3dyaXRlY29tYmluZShQQUdFX0tFUk5FTCkpOwo+ICsJaWYgKHJrX29iai0+cGFnZXMpIHsKPiAr CQl2b2lkICp2YWRkciA9IHZtYXAocmtfb2JqLT5wYWdlcywgcmtfb2JqLT5udW1fcGFnZXMsIFZN X01BUCwKPiArCQkJCSAgcGdwcm90X3dyaXRlY29tYmluZShQQUdFX0tFUk5FTCkpOwo+ICsJCWlm ICghdmFkZHIpCj4gKwkJCXJldHVybiAtRU5PTUVNOwo+ICsJCWRtYV9idWZfbWFwX3NldF92YWRk cihtYXAsIHZhZGRyKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiAgIAo+ICAgCWlmIChya19vYmot PmRtYV9hdHRycyAmIERNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5HKQo+IC0JCXJldHVybiBOVUxM Owo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJZG1hX2J1Zl9tYXBfc2V0X3ZhZGRyKG1hcCwgcmtf b2JqLT5rdmFkZHIpOwo+ICAgCj4gLQlyZXR1cm4gcmtfb2JqLT5rdmFkZHI7Cj4gKwlyZXR1cm4g MDsKPiAgIH0KPiAgIAo+IC12b2lkIHJvY2tjaGlwX2dlbV9wcmltZV92dW5tYXAoc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmosIHZvaWQgKnZhZGRyKQo+ICt2b2lkIHJvY2tjaGlwX2dlbV9wcmlt ZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAq bWFwKQo+ICAgewo+ICAgCXN0cnVjdCByb2NrY2hpcF9nZW1fb2JqZWN0ICpya19vYmogPSB0b19y b2NrY2hpcF9vYmoob2JqKTsKPiAgIAo+ICAgCWlmIChya19vYmotPnBhZ2VzKSB7Cj4gLQkJdnVu bWFwKHZhZGRyKTsKPiArCQl2dW5tYXAobWFwLT52YWRkcik7Cj4gICAJCXJldHVybjsKPiAgIAl9 Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2Ry bV9nZW0uaCBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmgKPiBp bmRleCA3ZmZjNTQxYmVhMDcuLjVhNzBhNTZjZDQwNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uaAo+IEBAIC0zMSw4ICszMSw4IEBAIHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqCj4gICByb2NrY2hpcF9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCQkJICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCAqYXR0YWNoLAo+ICAgCQkJCSAgIHN0cnVjdCBzZ190YWJsZSAqc2cpOwo+IC12b2lkICpyb2Nr Y2hpcF9nZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gLXZvaWQg cm9ja2NoaXBfZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9p ZCAqdmFkZHIpOwo+ICtpbnQgcm9ja2NoaXBfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiArdm9pZCByb2NrY2hpcF9n ZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3QgZG1hX2J1 Zl9tYXAgKm1hcCk7Cj4gICAKPiAgIC8qIGRybSBkcml2ZXIgbW1hcCBmaWxlIG9wZXJhdGlvbnMg Ki8KPiAgIGludCByb2NrY2hpcF9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueS9j aXJydXMuYyBiL2RyaXZlcnMvZ3B1L2RybS90aW55L2NpcnJ1cy5jCj4gaW5kZXggNzQ0YThlMzM3 ZTQxLi5jMDJlMzVlZDZlNzYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RpbnkvY2ly cnVzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlueS9jaXJydXMuYwo+IEBAIC0xNyw2ICsx Nyw3IEBACj4gICAgKi8KPiAgIAo+ICAgI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L2RtYS1idWYtbWFwLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ Cj4gICAjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4gICAKPiBAQCAtMzE0LDYgKzMxNSw3IEBAIHN0 YXRpYyBpbnQgY2lycnVzX2ZiX2JsaXRfcmVjdChzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwK PiAgIAkJCSAgICAgICBzdHJ1Y3QgZHJtX3JlY3QgKnJlY3QpCj4gICB7Cj4gICAJc3RydWN0IGNp cnJ1c19kZXZpY2UgKmNpcnJ1cyA9IHRvX2NpcnJ1cyhmYi0+ZGV2KTsKPiArCXN0cnVjdCBkbWFf YnVmX21hcCBtYXA7Cj4gICAJdm9pZCAqdm1hcDsKPiAgIAlpbnQgaWR4LCByZXQ7Cj4gICAKPiBA QCAtMzIxLDEwICszMjMsMTAgQEAgc3RhdGljIGludCBjaXJydXNfZmJfYmxpdF9yZWN0KHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ICAgCWlmICghZHJtX2Rldl9lbnRlcigmY2lycnVzLT5k ZXYsICZpZHgpKQo+ICAgCQlnb3RvIG91dDsKPiAgIAo+IC0JcmV0ID0gLUVOT01FTTsKPiAtCXZt YXAgPSBkcm1fZ2VtX3NobWVtX3ZtYXAoZmItPm9ialswXSk7Cj4gLQlpZiAoIXZtYXApCj4gKwly ZXQgPSBkcm1fZ2VtX3NobWVtX3ZtYXAoZmItPm9ialswXSwgJm1hcCk7Cj4gKwlpZiAocmV0KQo+ ICAgCQlnb3RvIG91dF9kZXZfZXhpdDsKPiArCXZtYXAgPSBtYXAudmFkZHI7IC8qIFRPRE86IFVz ZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4gICAKPiAgIAlpZiAoY2lycnVzLT5j cHAgPT0gZmItPmZvcm1hdC0+Y3BwWzBdKQo+ICAgCQlkcm1fZmJfbWVtY3B5X2RzdGNsaXAoY2ly cnVzLT52cmFtLAo+IEBAIC0zNDMsNyArMzQ1LDcgQEAgc3RhdGljIGludCBjaXJydXNfZmJfYmxp dF9yZWN0KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ICAgCWVsc2UKPiAgIAkJV0FSTl9P Tl9PTkNFKCJjcHAgbWlzbWF0Y2giKTsKPiAgIAo+IC0JZHJtX2dlbV9zaG1lbV92dW5tYXAoZmIt Pm9ialswXSwgdm1hcCk7Cj4gKwlkcm1fZ2VtX3NobWVtX3Z1bm1hcChmYi0+b2JqWzBdLCAmbWFw KTsKPiAgIAlyZXQgPSAwOwo+ICAgCj4gICBvdXRfZGV2X2V4aXQ6Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS90aW55L2dtMTJ1MzIwLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGlueS9nbTEy dTMyMC5jCj4gaW5kZXggY2MzOTc2NzFmNjg5Li4xMmE4OTBjZWE2ZTkgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3RpbnkvZ20xMnUzMjAuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90 aW55L2dtMTJ1MzIwLmMKPiBAQCAtMjQ4LDYgKzI0OCw3IEBAIHN0YXRpYyB2b2lkIGdtMTJ1MzIw X2NvcHlfZmJfdG9fYmxvY2tzKHN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwKQo+ICAg ewo+ICAgCWludCBibG9jaywgZHN0X29mZnNldCwgbGVuLCByZW1haW4sIHJldCwgeDEsIHgyLCB5 MSwgeTI7Cj4gICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4gKwlzdHJ1Y3QgZG1hX2J1 Zl9tYXAgbWFwOwo+ICAgCXZvaWQgKnZhZGRyOwo+ICAgCXU4ICpzcmM7Cj4gICAKPiBAQCAtMjYy LDExICsyNjMsMTIgQEAgc3RhdGljIHZvaWQgZ20xMnUzMjBfY29weV9mYl90b19ibG9ja3Moc3Ry dWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjApCj4gICAJeTEgPSBnbTEydTMyMC0+ZmJfdXBk YXRlLnJlY3QueTE7Cj4gICAJeTIgPSBnbTEydTMyMC0+ZmJfdXBkYXRlLnJlY3QueTI7Cj4gICAK PiAtCXZhZGRyID0gZHJtX2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0pOwo+IC0JaWYgKElTX0VS Uih2YWRkcikpIHsKPiAtCQlHTTEyVTMyMF9FUlIoImZhaWxlZCB0byB2bWFwIGZiOiAlbGRcbiIs IFBUUl9FUlIodmFkZHIpKTsKPiArCXJldCA9IGRybV9nZW1fc2htZW1fdm1hcChmYi0+b2JqWzBd LCAmbWFwKTsKPiArCWlmIChyZXQpIHsKPiArCQlHTTEyVTMyMF9FUlIoImZhaWxlZCB0byB2bWFw IGZiOiAlZFxuIiwgcmV0KTsKPiAgIAkJZ290byBwdXRfZmI7Cj4gICAJfQo+ICsJdmFkZHIgPSBt YXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4g ICAKPiAgIAlpZiAoZmItPm9ialswXS0+aW1wb3J0X2F0dGFjaCkgewo+ICAgCQlyZXQgPSBkbWFf YnVmX2JlZ2luX2NwdV9hY2Nlc3MoCj4gQEAgLTMxOCw3ICszMjAsNyBAQCBzdGF0aWMgdm9pZCBn bTEydTMyMF9jb3B5X2ZiX3RvX2Jsb2NrcyhzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMy MCkKPiAgIAkJCUdNMTJVMzIwX0VSUigiZG1hX2J1Zl9lbmRfY3B1X2FjY2VzcyBlcnI6ICVkXG4i LCByZXQpOwo+ICAgCX0KPiAgIHZ1bm1hcDoKPiAtCWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5v YmpbMF0sIHZhZGRyKTsKPiArCWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sICZtYXAp Owo+ICAgcHV0X2ZiOgo+ICAgCWRybV9mcmFtZWJ1ZmZlcl9wdXQoZmIpOwo+ICAgCWdtMTJ1MzIw LT5mYl91cGRhdGUuZmIgPSBOVUxMOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdWRs L3VkbF9tb2Rlc2V0LmMgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rlc2V0LmMKPiBpbmRl eCBmZWY0M2Y0ZTNiYWMuLjQyZWViYTFkZmRiZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vdWRsL3VkbF9tb2Rlc2V0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rl c2V0LmMKPiBAQCAtMjc2LDYgKzI3Niw3IEBAIHN0YXRpYyBpbnQgdWRsX2hhbmRsZV9kYW1hZ2Uo c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCB4LCBpbnQgeSwKPiAgIAlzdHJ1Y3QgdXJi ICp1cmI7Cj4gICAJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gICAJaW50IGxvZ19icHA7Cj4gKwlz dHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICAgCXZvaWQgKnZhZGRyOwo+ICAgCj4gICAJcmV0ID0g dWRsX2xvZ19jcHAoZmItPmZvcm1hdC0+Y3BwWzBdKTsKPiBAQCAtMjk2LDExICsyOTcsMTIgQEAg c3RhdGljIGludCB1ZGxfaGFuZGxlX2RhbWFnZShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwg aW50IHgsIGludCB5LAo+ICAgCQkJcmV0dXJuIHJldDsKPiAgIAl9Cj4gICAKPiAtCXZhZGRyID0g ZHJtX2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0pOwo+IC0JaWYgKElTX0VSUih2YWRkcikpIHsK PiArCXJldCA9IGRybV9nZW1fc2htZW1fdm1hcChmYi0+b2JqWzBdLCAmbWFwKTsKPiArCWlmIChy ZXQpIHsKPiAgIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdm1hcCBmYlxuIik7Cj4gICAJCWdvdG8g b3V0X2RtYV9idWZfZW5kX2NwdV9hY2Nlc3M7Cj4gICAJfQo+ICsJdmFkZHIgPSBtYXAudmFkZHI7 IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Blcmx5ICovCj4gICAKPiAgIAl1 cmIgPSB1ZGxfZ2V0X3VyYihkZXYpOwo+ICAgCWlmICghdXJiKQo+IEBAIC0zMzMsNyArMzM1LDcg QEAgc3RhdGljIGludCB1ZGxfaGFuZGxlX2RhbWFnZShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwgaW50IHgsIGludCB5LAo+ICAgCXJldCA9IDA7Cj4gICAKPiAgIG91dF9kcm1fZ2VtX3NobWVt X3Z1bm1hcDoKPiAtCWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sIHZhZGRyKTsKPiAr CWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sICZtYXApOwo+ICAgb3V0X2RtYV9idWZf ZW5kX2NwdV9hY2Nlc3M6Cj4gICAJaWYgKGltcG9ydF9hdHRhY2gpIHsKPiAgIAkJdG1wX3JldCA9 IGRtYV9idWZfZW5kX2NwdV9hY2Nlc3MoaW1wb3J0X2F0dGFjaC0+ZG1hYnVmLAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbW9kZS5jIGIvZHJpdmVycy9ncHUv ZHJtL3Zib3h2aWRlby92Ym94X21vZGUuYwo+IGluZGV4IDkzMWM1NTEyNjE0OC4uZjI2OGZiMjU4 YzgzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9tb2RlLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbW9kZS5jCj4gQEAgLTksNiAr OSw4IEBACj4gICAgKiAgICAgICAgICBNaWNoYWVsIFRoYXllciA8bWljaGFlbC50aGF5ZXJAb3Jh Y2xlLmNvbSwKPiAgICAqICAgICAgICAgIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5j b20+Cj4gICAgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLW1hcC5oPgo+ICAgI2lu Y2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMu aD4KPiBAQCAtMzg0LDYgKzM4Niw4IEBAIHN0YXRpYyB2b2lkIHZib3hfY3Vyc29yX2F0b21pY191 cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJdTMyIGhlaWdodCA9IHBsYW5lLT5z dGF0ZS0+Y3J0Y19oOwo+ICAgCXNpemVfdCBkYXRhX3NpemUsIG1hc2tfc2l6ZTsKPiAgIAl1MzIg ZmxhZ3M7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgbWFwOwo+ICsJaW50IHJldDsKPiAgIAl1OCAq c3JjOwo+ICAgCj4gICAJLyoKPiBAQCAtMzk3LDggKzQwMSw4IEBAIHN0YXRpYyB2b2lkIHZib3hf Y3Vyc29yX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAKPiAgIAl2 Ym94X2NydGMtPmN1cnNvcl9lbmFibGVkID0gdHJ1ZTsKPiAgIAo+IC0Jc3JjID0gZHJtX2dlbV92 cmFtX3ZtYXAoZ2JvKTsKPiAtCWlmIChJU19FUlIoc3JjKSkgewo+ICsJcmV0ID0gZHJtX2dlbV92 cmFtX3ZtYXAoZ2JvLCAmbWFwKTsKPiArCWlmIChyZXQpIHsKPiAgIAkJLyoKPiAgIAkJICogQlVH OiB3ZSBzaG91bGQgaGF2ZSBwaW5uZWQgdGhlIEJPIGluIHByZXBhcmVfZmIoKS4KPiAgIAkJICov Cj4gQEAgLTQwNiw2ICs0MTAsNyBAQCBzdGF0aWMgdm9pZCB2Ym94X2N1cnNvcl9hdG9taWNfdXBk YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCQlEUk1fV0FSTigiQ291bGQgbm90IG1h cCBjdXJzb3IgYm8sIHNraXBwaW5nIHVwZGF0ZVxuIik7Cj4gICAJCXJldHVybjsKPiAgIAl9Cj4g KwlzcmMgPSBtYXAudmFkZHI7IC8qIFRPRE86IFVzZSBtYXBwaW5nIGFic3RyYWN0aW9uIHByb3Bl cmx5ICovCj4gICAKPiAgIAkvKgo+ICAgCSAqIFRoZSBtYXNrIG11c3QgYmUgY2FsY3VsYXRlZCBi YXNlZCBvbiB0aGUgYWxwaGEKPiBAQCAtNDE2LDcgKzQyMSw3IEBAIHN0YXRpYyB2b2lkIHZib3hf Y3Vyc29yX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJZGF0YV9z aXplID0gd2lkdGggKiBoZWlnaHQgKiA0ICsgbWFza19zaXplOwo+ICAgCj4gICAJY29weV9jdXJz b3JfaW1hZ2Uoc3JjLCB2Ym94LT5jdXJzb3JfZGF0YSwgd2lkdGgsIGhlaWdodCwgbWFza19zaXpl KTsKPiAtCWRybV9nZW1fdnJhbV92dW5tYXAoZ2JvLCBzcmMpOwo+ICsJZHJtX2dlbV92cmFtX3Z1 bm1hcChnYm8sICZtYXApOwo+ICAgCj4gICAJZmxhZ3MgPSBWQk9YX01PVVNFX1BPSU5URVJfVklT SUJMRSB8IFZCT1hfTU9VU0VfUE9JTlRFUl9TSEFQRSB8Cj4gICAJCVZCT1hfTU9VU0VfUE9JTlRF Ul9BTFBIQTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfYm8uYyBiL2Ry aXZlcnMvZ3B1L2RybS92YzQvdmM0X2JvLmMKPiBpbmRleCA1NTdmMGQxZTY0MzcuLmYyOTBhOWE5 NDJkYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfYm8uYwo+IEBAIC03ODUsMTYgKzc4NSwxNiBAQCBpbnQg dmM0X3ByaW1lX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQo+ICAgCXJldHVybiBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwKG9iaiwgdm1h KTsKPiAgIH0KPiAgIAo+IC12b2lkICp2YzRfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiAraW50IHZjNF9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LCBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCkKPiAgIHsKPiAgIAlzdHJ1Y3QgdmM0X2JvICpibyA9 IHRvX3ZjNF9ibyhvYmopOwo+ICAgCj4gICAJaWYgKGJvLT52YWxpZGF0ZWRfc2hhZGVyKSB7Cj4g ICAJCURSTV9ERUJVRygibW1hcGluZyBvZiBzaGFkZXIgQk9zIG5vdCBhbGxvd2VkLlxuIik7Cj4g LQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gICAJfQo+ ICAgCj4gLQlyZXR1cm4gZHJtX2dlbV9jbWFfcHJpbWVfdm1hcChvYmopOwo+ICsJcmV0dXJuIGRy bV9nZW1fY21hX3ByaW1lX3ZtYXAob2JqLCBtYXApOwo+ICAgfQo+ICAgCj4gICBzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYu aCBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oCj4gaW5kZXggY2M3OWIxYWFhODc4Li45 MDRmMmMzNmM5NjMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaAo+IEBAIC04MDYsNyArODA2LDcg QEAgaW50IHZjNF9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Cj4gICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnZjNF9wcmlt ZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJCQkJCSBzdHJ1 Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCj4gICAJCQkJCQkgc3RydWN0IHNnX3RhYmxl ICpzZ3QpOwo+IC12b2lkICp2YzRfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aik7Cj4gK2ludCB2YzRfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3Ry dWN0IGRtYV9idWZfbWFwICptYXApOwo+ICAgaW50IHZjNF9ib19jYWNoZV9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOwo+ICAgdm9pZCB2YzRfYm9fY2FjaGVfZGVzdHJveShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKPiAgIGludCB2YzRfYm9faW5jX3VzZWNudChzdHJ1Y3QgdmM0X2JvICpi byk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmMgYi9kcml2 ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Rydi5jCj4gaW5kZXggZmE1NGE2ZDE0MDNkLi5iMmFhMjZl MWU0YTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9kcnYuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmMKPiBAQCAtMzYxLDI0ICszNjEsMzAg QEAgc3RhdGljIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqdmdlbV9wcmltZV9pbXBvcnRfc2dfdGFi bGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAlyZXR1cm4gJm9iai0+YmFzZTsKPiAgIH0K PiAgIAo+IC1zdGF0aWMgdm9pZCAqdmdlbV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqKQo+ICtzdGF0aWMgaW50IHZnZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IGRybV92 Z2VtX2dlbV9vYmplY3QgKmJvID0gdG9fdmdlbV9ibyhvYmopOwo+ICAgCWxvbmcgbl9wYWdlcyA9 IG9iai0+c2l6ZSA+PiBQQUdFX1NISUZUOwo+ICAgCXN0cnVjdCBwYWdlICoqcGFnZXM7Cj4gKwl2 b2lkICp2YWRkcjsKPiAgIAo+ICAgCXBhZ2VzID0gdmdlbV9waW5fcGFnZXMoYm8pOwo+ICAgCWlm IChJU19FUlIocGFnZXMpKQo+IC0JCXJldHVybiBOVUxMOwo+ICsJCXJldHVybiBQVFJfRVJSKHBh Z2VzKTsKPiArCj4gKwl2YWRkciA9IHZtYXAocGFnZXMsIG5fcGFnZXMsIDAsIHBncHJvdF93cml0 ZWNvbWJpbmUoUEFHRV9LRVJORUwpKTsKPiArCWlmICghdmFkZHIpCj4gKwkJcmV0dXJuIC1FTk9N RU07Cj4gKwlkbWFfYnVmX21hcF9zZXRfdmFkZHIobWFwLCB2YWRkcik7Cj4gICAKPiAtCXJldHVy biB2bWFwKHBhZ2VzLCBuX3BhZ2VzLCAwLCBwZ3Byb3Rfd3JpdGVjb21iaW5lKFBBR0VfS0VSTkVM KSk7Cj4gKwlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdm9pZCB2Z2VtX3ByaW1lX3Z1 bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpCj4gK3N0YXRpYyB2 b2lkIHZnZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qg ZG1hX2J1Zl9tYXAgKm1hcCkKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX3ZnZW1fZ2VtX29iamVjdCAq Ym8gPSB0b192Z2VtX2JvKG9iaik7Cj4gICAKPiAtCXZ1bm1hcCh2YWRkcik7Cj4gKwl2dW5tYXAo bWFwLT52YWRkcik7Cj4gICAJdmdlbV91bnBpbl9wYWdlcyhibyk7Cj4gICB9Cj4gICAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jIGIvZHJpdmVy cy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jCj4gaW5kZXggNGYzNGVmMzRiYTYwLi43 NGRiNWE4NDBiZWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zy b250X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5j Cj4gQEAgLTI5MCwyMiArMjkwLDI4IEBAIGludCB4ZW5fZHJtX2Zyb250X2dlbV9tbWFwKHN0cnVj dCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiAgIAlyZXR1cm4gZ2Vt X21tYXBfb2JqKHhlbl9vYmosIHZtYSk7Cj4gICB9Cj4gICAKPiAtdm9pZCAqeGVuX2RybV9mcm9u dF9nZW1fcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopCj4gK2ludCB4 ZW5fZHJtX2Zyb250X2dlbV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29i aiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gICAJc3RydWN0IHhlbl9nZW1fb2Jq ZWN0ICp4ZW5fb2JqID0gdG9feGVuX2dlbV9vYmooZ2VtX29iaik7Cj4gKwl2b2lkICp2YWRkcjsK PiAgIAo+ICAgCWlmICgheGVuX29iai0+cGFnZXMpCj4gLQkJcmV0dXJuIE5VTEw7Cj4gKwkJcmV0 dXJuIC1FTk9NRU07Cj4gICAKPiAgIAkvKiBQbGVhc2Ugc2VlIGNvbW1lbnQgaW4gZ2VtX21tYXBf b2JqIG9uIG1hcHBpbmcgYW5kIGF0dHJpYnV0ZXMuICovCj4gLQlyZXR1cm4gdm1hcCh4ZW5fb2Jq LT5wYWdlcywgeGVuX29iai0+bnVtX3BhZ2VzLAo+IC0JCSAgICBWTV9NQVAsIFBBR0VfS0VSTkVM KTsKPiArCXZhZGRyID0gdm1hcCh4ZW5fb2JqLT5wYWdlcywgeGVuX29iai0+bnVtX3BhZ2VzLAo+ ICsJCSAgICAgVk1fTUFQLCBQQUdFX0tFUk5FTCk7Cj4gKwlpZiAoIXZhZGRyKQo+ICsJCXJldHVy biAtRU5PTUVNOwo+ICsJZG1hX2J1Zl9tYXBfc2V0X3ZhZGRyKG1hcCwgdmFkZHIpOwo+ICsKPiAr CXJldHVybiAwOwo+ICAgfQo+ICAgCj4gICB2b2lkIHhlbl9kcm1fZnJvbnRfZ2VtX3ByaW1lX3Z1 bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmosCj4gLQkJCQkgICAgdm9pZCAqdmFk ZHIpCj4gKwkJCQkgICAgc3RydWN0IGRtYV9idWZfbWFwICptYXApCj4gICB7Cj4gLQl2dW5tYXAo dmFkZHIpOwo+ICsJdnVubWFwKG1hcC0+dmFkZHIpOwo+ICAgfQo+ICAgCj4gICBpbnQgeGVuX2Ry bV9mcm9udF9nZW1fcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmosCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uaCBiL2Ry aXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uaAo+IGluZGV4IGEzOTY3NWZhMzFi Mi4uYTRlNjdkMGExNDljIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2Ry bV9mcm9udF9nZW0uaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9n ZW0uaAo+IEBAIC0xMiw2ICsxMiw3IEBACj4gICAjZGVmaW5lIF9fWEVOX0RSTV9GUk9OVF9HRU1f SAo+ICAgCj4gICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50Owo+ICtzdHJ1Y3QgZG1hX2J1Zl9t YXA7Cj4gICBzdHJ1Y3QgZHJtX2RldmljZTsKPiAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdDsKPiAg IHN0cnVjdCBmaWxlOwo+IEBAIC0zNCwxMCArMzUsMTEgQEAgdm9pZCB4ZW5fZHJtX2Zyb250X2dl bV9mcmVlX29iamVjdF91bmxvY2tlZChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopOwo+ ICAgCj4gICBpbnQgeGVuX2RybV9mcm9udF9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICAgCj4gLXZvaWQgKnhlbl9kcm1fZnJvbnRfZ2Vt X3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKTsKPiAraW50IHhlbl9k cm1fZnJvbnRfZ2VtX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqLAo+ ICsJCQkJIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIAo+ICAgdm9pZCB4ZW5fZHJtX2Zy b250X2dlbV9wcmltZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqLAo+IC0J CQkJICAgIHZvaWQgKnZhZGRyKTsKPiArCQkJCSAgICBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCk7 Cj4gICAKPiAgIGludCB4ZW5fZHJtX2Zyb250X2dlbV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqZ2VtX29iaiwKPiAgIAkJCQkgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZ2VtLmggYi9pbmNsdWRlL2RybS9kcm1fZ2Vt LmgKPiBpbmRleCBjMzhkZDM1ZGEwMGIuLjVlNmRhYTFjOTgyZiAxMDA2NDQKPiAtLS0gYS9pbmNs dWRlL2RybS9kcm1fZ2VtLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZ2VtLmgKPiBAQCAtMzks NiArMzksNyBAQAo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybV92bWFfbWFuYWdlci5oPgo+ICAg Cj4gK3N0cnVjdCBkbWFfYnVmX21hcDsKPiAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdDsKPiAgIAo+ ICAgLyoqCj4gQEAgLTEzOCw3ICsxMzksNyBAQCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3Mg ewo+ICAgCSAqCj4gICAJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4KPiAgIAkgKi8KPiAt CXZvaWQgKigqdm1hcCkoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICsJaW50ICgqdm1h cCkoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsK PiAgIAo+ICAgCS8qKgo+ICAgCSAqIEB2dW5tYXA6Cj4gQEAgLTE0OCw3ICsxNDksNyBAQCBzdHJ1 Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3Mgewo+ICAgCSAqCj4gICAJICogVGhpcyBjYWxsYmFjayBp cyBvcHRpb25hbC4KPiAgIAkgKi8KPiAtCXZvaWQgKCp2dW5tYXApKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqLCB2b2lkICp2YWRkcik7Cj4gKwl2b2lkICgqdnVubWFwKShzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiwgc3RydWN0IGRtYV9idWZfbWFwICptYXApOwo+ICAgCj4gICAJLyoqCj4g ICAJICogQG1tYXA6Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW1fY21hX2hlbHBl ci5oIGIvaW5jbHVkZS9kcm0vZHJtX2dlbV9jbWFfaGVscGVyLmgKPiBpbmRleCBhMDY0YjBkMWM0 ODAuLmNhZjk4YjljZjRiNCAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fZ2VtX2NtYV9o ZWxwZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fY21hX2hlbHBlci5oCj4gQEAgLTEw Myw3ICsxMDMsNyBAQCBkcm1fZ2VtX2NtYV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKPiAgIAkJCQkgIHN0cnVjdCBzZ190YWJsZSAqc2d0KTsKPiAgIGludCBk cm1fZ2VtX2NtYV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkJ ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+IC12b2lkICpkcm1fZ2VtX2NtYV9wcmlt ZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAraW50IGRybV9nZW1fY21hX3By aW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAq bWFwKTsKPiAgIAo+ICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICoKPiAgIGRybV9nZW1fY21hX2Ny ZWF0ZV9vYmplY3RfZGVmYXVsdF9mdW5jcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qg c2l6ZSk7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmgg Yi9pbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oCj4gaW5kZXggNTM4MWYwYzhjZjZm Li4zNDQ5YTAzNTNmZTAgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9o ZWxwZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmgKPiBAQCAt MTEzLDggKzExMyw4IEBAIGludCBkcm1fZ2VtX3NobWVtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dl bV9zaG1lbV9vYmplY3QgKnNobWVtKTsKPiAgIHZvaWQgZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXMo c3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSk7Cj4gICBpbnQgZHJtX2dlbV9zaG1l bV9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICAgdm9pZCBkcm1fZ2VtX3NobWVt X3VucGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAtdm9pZCAqZHJtX2dlbV9zaG1l bV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAtdm9pZCBkcm1fZ2VtX3NobWVt X3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwo+ICtpbnQg ZHJtX2dlbV9zaG1lbV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3QgZG1h X2J1Zl9tYXAgKm1hcCk7Cj4gK3ZvaWQgZHJtX2dlbV9zaG1lbV92dW5tYXAoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKTsKPiAgIAo+ICAgaW50IGRy bV9nZW1fc2htZW1fbWFkdmlzZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IG1hZHYp Owo+ICAgCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaCBi L2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaAo+IGluZGV4IDEyOGY4ODE3NGQzMi4u YzBkMjhiYTBmNWM5IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxw ZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaAo+IEBAIC0xMCw2 ICsxMCw3IEBACj4gICAjaW5jbHVkZSA8ZHJtL3R0bS90dG1fYm9fYXBpLmg+Cj4gICAjaW5jbHVk ZSA8ZHJtL3R0bS90dG1fYm9fZHJpdmVyLmg+Cj4gICAKPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1i dWYtbWFwLmg+Cj4gICAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+IC8qIGZvciBjb250YWluZXJf b2YoKSAqLwo+ICAgCj4gICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWI7Cj4gQEAgLTI5LDkg KzMwLDggQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0Owo+ICAgCj4gICAvKioKPiAgICAqIHN0cnVj dCBkcm1fZ2VtX3ZyYW1fb2JqZWN0IC0gR0VNIG9iamVjdCBiYWNrZWQgYnkgVlJBTQo+IC0gKiBA Z2VtOglHRU0gb2JqZWN0Cj4gICAgKiBAYm86CQlUVE0gYnVmZmVyIG9iamVjdAo+IC0gKiBAa21h cDoJTWFwcGluZyBpbmZvcm1hdGlvbiBmb3IgQGJvCj4gKyAqIEBtYXA6CU1hcHBpbmcgaW5mb3Jt YXRpb24gZm9yIEBibwo+ICAgICogQHBsYWNlbWVudDoJVFRNIHBsYWNlbWVudCBpbmZvcm1hdGlv bi4gU3VwcG9ydGVkIHBsYWNlbWVudHMgYXJlIFwKPiAgIAklVFRNX1BMX1ZSQU0gYW5kICVUVE1f UExfU1lTVEVNCj4gICAgKiBAcGxhY2VtZW50czoJVFRNIHBsYWNlbWVudCBpbmZvcm1hdGlvbi4K PiBAQCAtNTAsMTUgKzUwLDE1IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKPiAgICAqLwo+ICAg c3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3Qgewo+ICAgCXN0cnVjdCB0dG1fYnVmZmVyX29iamVj dCBibzsKPiAtCXN0cnVjdCB0dG1fYm9fa21hcF9vYmoga21hcDsKPiArCXN0cnVjdCBkbWFfYnVm X21hcCBtYXA7Cj4gICAKPiAgIAkvKioKPiAtCSAqIEBrbWFwX3VzZV9jb3VudDoKPiArCSAqIEB2 bWFwX3VzZV9jb3VudDoKPiAgIAkgKgo+ICAgCSAqIFJlZmVyZW5jZSBjb3VudCBvbiB0aGUgdmly dHVhbCBhZGRyZXNzLgo+ICAgCSAqIFRoZSBhZGRyZXNzIGFyZSB1bi1tYXBwZWQgd2hlbiB0aGUg Y291bnQgcmVhY2hlcyB6ZXJvLgo+ICAgCSAqLwo+IC0JdW5zaWduZWQgaW50IGttYXBfdXNlX2Nv dW50Owo+ICsJdW5zaWduZWQgaW50IHZtYXBfdXNlX2NvdW50Owo+ICAgCj4gICAJLyogU3VwcG9y dGVkIHBsYWNlbWVudHMgYXJlICVUVE1fUExfVlJBTSBhbmQgJVRUTV9QTF9TWVNURU0gKi8KPiAg IAlzdHJ1Y3QgdHRtX3BsYWNlbWVudCBwbGFjZW1lbnQ7Cj4gQEAgLTk3LDggKzk3LDggQEAgdTY0 IGRybV9nZW1fdnJhbV9tbWFwX29mZnNldChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2Jv KTsKPiAgIHM2NCBkcm1fZ2VtX3ZyYW1fb2Zmc2V0KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0 ICpnYm8pOwo+ICAgaW50IGRybV9nZW1fdnJhbV9waW4oc3RydWN0IGRybV9nZW1fdnJhbV9vYmpl Y3QgKmdibywgdW5zaWduZWQgbG9uZyBwbF9mbGFnKTsKPiAgIGludCBkcm1fZ2VtX3ZyYW1fdW5w aW4oc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibyk7Cj4gLXZvaWQgKmRybV9nZW1fdnJh bV92bWFwKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8pOwo+IC12b2lkIGRybV9nZW1f dnJhbV92dW5tYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywgdm9pZCAqdmFkZHIp Owo+ICtpbnQgZHJtX2dlbV92cmFtX3ZtYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdi bywgc3RydWN0IGRtYV9idWZfbWFwICptYXApOwo+ICt2b2lkIGRybV9nZW1fdnJhbV92dW5tYXAo c3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywgc3RydWN0IGRtYV9idWZfbWFwICptYXAp Owo+ICAgCj4gICBpbnQgZHJtX2dlbV92cmFtX2ZpbGxfY3JlYXRlX2R1bWIoc3RydWN0IGRybV9m aWxlICpmaWxlLAo+ICAgCQkJCSAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0 CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=