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=-8.3 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED,USER_AGENT_MUTT 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 8DEC1C282DD for ; Wed, 17 Apr 2019 14:26:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 48AE520872 for ; Wed, 17 Apr 2019 14:26:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ffwll.ch header.i=@ffwll.ch header.b="DwxmMsU0" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732542AbfDQO0j (ORCPT ); Wed, 17 Apr 2019 10:26:39 -0400 Received: from mail-ed1-f67.google.com ([209.85.208.67]:42871 "EHLO mail-ed1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732359AbfDQO0i (ORCPT ); Wed, 17 Apr 2019 10:26:38 -0400 Received: by mail-ed1-f67.google.com with SMTP id x61so21138411edc.9 for ; Wed, 17 Apr 2019 07:26:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=sender:date:from:to:cc:subject:message-id:mail-followup-to :references:mime-version:content-disposition :content-transfer-encoding:in-reply-to:user-agent; bh=SfnoMrLiozTDsuobQ+BHEbZOSf/41WBWWV1hkJ5nCIk=; b=DwxmMsU0WmTVWWPOl6gwMyw+iCMfQGcKW6Wx1yh5x66YVp/vImIZEzHEY00W8ESNxU 4xYEk78F+c2mArIEkx5rKTZNuu4M/BrzY69xE1ENFXPo2XqrKG8OnCFOFGtxa2BI7+H2 ACVJchCD5VdTb3azKS8zAu3qsTE7im3W3LeSk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :mail-followup-to:references:mime-version:content-disposition :content-transfer-encoding:in-reply-to:user-agent; bh=SfnoMrLiozTDsuobQ+BHEbZOSf/41WBWWV1hkJ5nCIk=; b=Sxv4ZY/SjNR6h65uU3iX2p26ODzVS9G3qsJsAVzFteVURRGVL7J+g+2A/6B6wgkwR4 OsCcMlmr+FM0ueuzno21zRBQoH6njk6EH6mMGHpIoKqZhtj7QF3xr0+TZOPh+71mnL/N yQhn2ZrUB/xeSeGRQb8UWA0kjNB+IsFfMRR4CPVTQaz95RROXATp8dhJZACfeB6tZevW lKOh67+fFbMDrxnWnBlS9MTcVDKnRO/efG+ELxjnzAIZoVrHrVpmOQWDlWWCwHBKUogq vymyH/k5mTkgWU9V0ilc9yadAiGzcfblBW/+/dVYFtlznkm87ybBllWyLv/2Y1qRXBRT Tguw== X-Gm-Message-State: APjAAAWJkmo1cDf2KeR2EpJupeyo3uvoS8YFGusDWUpkAT0Otfe2mIQ3 Vs54ELx148mrBOHeWyh9a2cNMg== X-Google-Smtp-Source: APXvYqwu0QgVKfBpH9MV0EpYAfYEeED6y1FDUVnIHk1gj/BpjE28v/H5UhTKRdAHVMyXyo/Ak+SkGg== X-Received: by 2002:aa7:dc4d:: with SMTP id g13mr13268281edu.216.1555511194957; Wed, 17 Apr 2019 07:26:34 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:569e:0:3106:d637:d723:e855]) by smtp.gmail.com with ESMTPSA id q56sm4492848edd.80.2019.04.17.07.26.33 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 17 Apr 2019 07:26:34 -0700 (PDT) Date: Wed, 17 Apr 2019 16:26:32 +0200 From: Daniel Vetter To: christian.koenig@amd.com Cc: sumit.semwal@linaro.org, linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org Subject: Re: [PATCH 03/12] dma-buf: lock the reservation object during (un)map_dma_buf v3 Message-ID: <20190417142632.GF13337@phenom.ffwll.local> Mail-Followup-To: christian.koenig@amd.com, sumit.semwal@linaro.org, linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org References: <20190416183841.1577-1-christian.koenig@amd.com> <20190416183841.1577-4-christian.koenig@amd.com> <20190417140804.GD13337@phenom.ffwll.local> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Operating-System: Linux phenom 4.19.0-1-amd64 User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Apr 17, 2019 at 04:14:32PM +0200, Christian König wrote: > Am 17.04.19 um 16:08 schrieb Daniel Vetter: > > On Tue, Apr 16, 2019 at 08:38:32PM +0200, Christian König wrote: > > > Make it mandatory for dynamic dma-buf callbacks to be called with the > > > reservation lock held. > > > > > > For static dma-buf exporters we still have the fallback of using cached sgt. > > > > > > v2: reordered > > > v3: rebased on sgt caching > > > v4: use the cached sgt when possible > > > > > > Signed-off-by: Christian König > > I think there's a bit a rebase chaos going on: > > - some comments left behind with no_sgt_cache, which I can't find anymore > > - the function signature rework of dma_buf_attach should imo be split out > > Ah, crap thought I've got all of those. Going to fix that. > > > Next issue is that the reservation object locking is still in the path of > > dma_buf_map, so probably still going to result in tons of lockdep splats. > > Except the i915+amdgpu path should now work due to the fastpath. > > I actually found a solution for that :) > > The idea is now that we always cache the sgt in the attachment unless the > dynamic flag (previously no_sgt_cache flag) is set. And this cached sgt is > created without holding the lock. Yeah I think that idea works. > We either need to document that really well or maybe split the mapping > callbacks into map/unmap and map_lock/unmap_locked. Opinions? I think the implementation doesn't. Exporter can't decide on its own whether dynamic/static is what's needed, we need to decide that for each attachment, taking both exporter and importer capabilities into account. I think if we do that, then it should work out. I replied on the pin/unpin interface patch with some more concrete thoughts. Maybe best to continue that discussion there, with more context. -Daniel > > Not sure that's a solution that really works, just hides that > > fundamentally we still have that issue of incompatible locking chains > > between different drivers. > > We can now make a slow transition between static and dynamic DMA-buf > handling, so only driver who can do the locking will be affected. > > Christian. > > > -Daniel > > > > > --- > > > drivers/dma-buf/dma-buf.c | 24 ++++++++++--------- > > > drivers/gpu/drm/armada/armada_gem.c | 6 ++++- > > > drivers/gpu/drm/drm_prime.c | 6 ++++- > > > drivers/gpu/drm/i915/i915_gem_dmabuf.c | 6 ++++- > > > drivers/gpu/drm/tegra/gem.c | 6 ++++- > > > drivers/gpu/drm/udl/udl_dmabuf.c | 6 ++++- > > > .../common/videobuf2/videobuf2-dma-contig.c | 6 ++++- > > > .../media/common/videobuf2/videobuf2-dma-sg.c | 6 ++++- > > > drivers/staging/media/tegra-vde/tegra-vde.c | 6 ++++- > > > include/linux/dma-buf.h | 23 ++++++++++++++++-- > > > 10 files changed, 74 insertions(+), 21 deletions(-) > > > > > > diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c > > > index ef480e5fb239..83c92bfd964c 100644 > > > --- a/drivers/dma-buf/dma-buf.c > > > +++ b/drivers/dma-buf/dma-buf.c > > > @@ -532,8 +532,9 @@ EXPORT_SYMBOL_GPL(dma_buf_put); > > > /** > > > * dma_buf_attach - Add the device to dma_buf's attachments list; optionally, > > > * calls attach() of dma_buf_ops to allow device-specific attach functionality > > > - * @dmabuf: [in] buffer to attach device to. > > > - * @dev: [in] device to be attached. > > > + * @info: [in] holds all the attach related information provided > > > + * by the importer. see &struct dma_buf_attach_info > > > + * for further details. > > > * > > > * Returns struct dma_buf_attachment pointer for this attachment. Attachments > > > * must be cleaned up by calling dma_buf_detach(). > > > @@ -547,20 +548,20 @@ EXPORT_SYMBOL_GPL(dma_buf_put); > > > * accessible to @dev, and cannot be moved to a more suitable place. This is > > > * indicated with the error code -EBUSY. > > > */ > > > -struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf, > > > - struct device *dev) > > > +struct dma_buf_attachment *dma_buf_attach(const struct dma_buf_attach_info *info) > > > { > > > + struct dma_buf *dmabuf = info->dmabuf; > > > struct dma_buf_attachment *attach; > > > int ret; > > > - if (WARN_ON(!dmabuf || !dev)) > > > + if (WARN_ON(!dmabuf || !info->dev)) > > > return ERR_PTR(-EINVAL); > > > attach = kzalloc(sizeof(*attach), GFP_KERNEL); > > > if (!attach) > > > return ERR_PTR(-ENOMEM); > > > - attach->dev = dev; > > > + attach->dev = info->dev; > > > attach->dmabuf = dmabuf; > > > mutex_lock(&dmabuf->lock); > > > @@ -688,9 +689,9 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach, > > > if (attach->sgt) > > > return attach->sgt; > > > - sg_table = attach->dmabuf->ops->map_dma_buf(attach, direction); > > > - if (!sg_table) > > > - sg_table = ERR_PTR(-ENOMEM); > > > + reservation_object_lock(attach->dmabuf->resv, NULL); > > > + sg_table = dma_buf_map_attachment_locked(attach, direction); > > > + reservation_object_unlock(attach->dmabuf->resv); > > > return sg_table; > > > } > > > @@ -744,8 +745,9 @@ void dma_buf_unmap_attachment(struct dma_buf_attachment *attach, > > > if (attach->sgt == sg_table) > > > return; > > > - attach->dmabuf->ops->unmap_dma_buf(attach, sg_table, > > > - direction); > > > + reservation_object_lock(attach->dmabuf->resv, NULL); > > > + dma_buf_unmap_attachment_locked(attach, sg_table, direction); > > > + reservation_object_unlock(attach->dmabuf->resv); > > > } > > > EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment); > > > diff --git a/drivers/gpu/drm/armada/armada_gem.c b/drivers/gpu/drm/armada/armada_gem.c > > > index 642d0e70d0f8..19c47821032f 100644 > > > --- a/drivers/gpu/drm/armada/armada_gem.c > > > +++ b/drivers/gpu/drm/armada/armada_gem.c > > > @@ -501,6 +501,10 @@ armada_gem_prime_export(struct drm_device *dev, struct drm_gem_object *obj, > > > struct drm_gem_object * > > > armada_gem_prime_import(struct drm_device *dev, struct dma_buf *buf) > > > { > > > + struct dma_buf_attach_info attach_info = { > > > + .dev = dev->dev, > > > + .dmabuf = buf > > > + }; > > > struct dma_buf_attachment *attach; > > > struct armada_gem_object *dobj; > > > @@ -516,7 +520,7 @@ armada_gem_prime_import(struct drm_device *dev, struct dma_buf *buf) > > > } > > > } > > > - attach = dma_buf_attach(buf, dev->dev); > > > + attach = dma_buf_attach(&attach_info); > > > if (IS_ERR(attach)) > > > return ERR_CAST(attach); > > > diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c > > > index 231e3f6d5f41..1fadf5d5ed33 100644 > > > --- a/drivers/gpu/drm/drm_prime.c > > > +++ b/drivers/gpu/drm/drm_prime.c > > > @@ -709,6 +709,10 @@ struct drm_gem_object *drm_gem_prime_import_dev(struct drm_device *dev, > > > struct dma_buf *dma_buf, > > > struct device *attach_dev) > > > { > > > + struct dma_buf_attach_info attach_info = { > > > + .dev = attach_dev, > > > + .dmabuf = dma_buf > > > + }; > > > struct dma_buf_attachment *attach; > > > struct sg_table *sgt; > > > struct drm_gem_object *obj; > > > @@ -729,7 +733,7 @@ struct drm_gem_object *drm_gem_prime_import_dev(struct drm_device *dev, > > > if (!dev->driver->gem_prime_import_sg_table) > > > return ERR_PTR(-EINVAL); > > > - attach = dma_buf_attach(dma_buf, attach_dev); > > > + attach = dma_buf_attach(&attach_info); > > > if (IS_ERR(attach)) > > > return ERR_CAST(attach); > > > diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c > > > index 82e2ca17a441..aa7f685bd6ca 100644 > > > --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c > > > +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c > > > @@ -277,6 +277,10 @@ static const struct drm_i915_gem_object_ops i915_gem_object_dmabuf_ops = { > > > struct drm_gem_object *i915_gem_prime_import(struct drm_device *dev, > > > struct dma_buf *dma_buf) > > > { > > > + struct dma_buf_attach_info attach_info = { > > > + .dev = dev->dev, > > > + .dmabuf = dma_buf > > > + }; > > > struct dma_buf_attachment *attach; > > > struct drm_i915_gem_object *obj; > > > int ret; > > > @@ -295,7 +299,7 @@ struct drm_gem_object *i915_gem_prime_import(struct drm_device *dev, > > > } > > > /* need to attach */ > > > - attach = dma_buf_attach(dma_buf, dev->dev); > > > + attach = dma_buf_attach(&attach_info); > > > if (IS_ERR(attach)) > > > return ERR_CAST(attach); > > > diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c > > > index 4f80100ff5f3..8e6b6c879add 100644 > > > --- a/drivers/gpu/drm/tegra/gem.c > > > +++ b/drivers/gpu/drm/tegra/gem.c > > > @@ -332,6 +332,10 @@ struct tegra_bo *tegra_bo_create_with_handle(struct drm_file *file, > > > static struct tegra_bo *tegra_bo_import(struct drm_device *drm, > > > struct dma_buf *buf) > > > { > > > + struct dma_buf_attach_info attach_info = { > > > + .dev = drm->dev, > > > + .dmabuf = buf > > > + }; > > > struct tegra_drm *tegra = drm->dev_private; > > > struct dma_buf_attachment *attach; > > > struct tegra_bo *bo; > > > @@ -341,7 +345,7 @@ static struct tegra_bo *tegra_bo_import(struct drm_device *drm, > > > if (IS_ERR(bo)) > > > return bo; > > > - attach = dma_buf_attach(buf, drm->dev); > > > + attach = dma_buf_attach(&attach_info); > > > if (IS_ERR(attach)) { > > > err = PTR_ERR(attach); > > > goto free; > > > diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c > > > index 556f62662aa9..86b928f9742f 100644 > > > --- a/drivers/gpu/drm/udl/udl_dmabuf.c > > > +++ b/drivers/gpu/drm/udl/udl_dmabuf.c > > > @@ -226,6 +226,10 @@ static int udl_prime_create(struct drm_device *dev, > > > struct drm_gem_object *udl_gem_prime_import(struct drm_device *dev, > > > struct dma_buf *dma_buf) > > > { > > > + struct dma_buf_attach_info attach_info = { > > > + .dev = dev->dev, > > > + .dmabuf = dma_buf > > > + }; > > > struct dma_buf_attachment *attach; > > > struct sg_table *sg; > > > struct udl_gem_object *uobj; > > > @@ -233,7 +237,7 @@ struct drm_gem_object *udl_gem_prime_import(struct drm_device *dev, > > > /* need to attach */ > > > get_device(dev->dev); > > > - attach = dma_buf_attach(dma_buf, dev->dev); > > > + attach = dma_buf_attach(&attach_info); > > > if (IS_ERR(attach)) { > > > put_device(dev->dev); > > > return ERR_CAST(attach); > > > diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c > > > index aff0ab7bf83d..1f2687b5eb0e 100644 > > > --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c > > > +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c > > > @@ -676,6 +676,10 @@ static void vb2_dc_detach_dmabuf(void *mem_priv) > > > static void *vb2_dc_attach_dmabuf(struct device *dev, struct dma_buf *dbuf, > > > unsigned long size, enum dma_data_direction dma_dir) > > > { > > > + struct dma_buf_attach_info attach_info = { > > > + .dev = dev, > > > + .dmabuf = dbuf > > > + }; > > > struct vb2_dc_buf *buf; > > > struct dma_buf_attachment *dba; > > > @@ -691,7 +695,7 @@ static void *vb2_dc_attach_dmabuf(struct device *dev, struct dma_buf *dbuf, > > > buf->dev = dev; > > > /* create attachment for the dmabuf with the user device */ > > > - dba = dma_buf_attach(dbuf, buf->dev); > > > + dba = dma_buf_attach(&attach_info); > > > if (IS_ERR(dba)) { > > > pr_err("failed to attach dmabuf\n"); > > > kfree(buf); > > > diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c > > > index 015e737095cd..cbd626d2393a 100644 > > > --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c > > > +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c > > > @@ -608,6 +608,10 @@ static void vb2_dma_sg_detach_dmabuf(void *mem_priv) > > > static void *vb2_dma_sg_attach_dmabuf(struct device *dev, struct dma_buf *dbuf, > > > unsigned long size, enum dma_data_direction dma_dir) > > > { > > > + struct dma_buf_attach_info attach_info = { > > > + .dev = dev, > > > + .dmabuf = dbuf > > > + }; > > > struct vb2_dma_sg_buf *buf; > > > struct dma_buf_attachment *dba; > > > @@ -623,7 +627,7 @@ static void *vb2_dma_sg_attach_dmabuf(struct device *dev, struct dma_buf *dbuf, > > > buf->dev = dev; > > > /* create attachment for the dmabuf with the user device */ > > > - dba = dma_buf_attach(dbuf, buf->dev); > > > + dba = dma_buf_attach(&attach_info); > > > if (IS_ERR(dba)) { > > > pr_err("failed to attach dmabuf\n"); > > > kfree(buf); > > > diff --git a/drivers/staging/media/tegra-vde/tegra-vde.c b/drivers/staging/media/tegra-vde/tegra-vde.c > > > index aa6c6bba961e..5a10c1facc27 100644 > > > --- a/drivers/staging/media/tegra-vde/tegra-vde.c > > > +++ b/drivers/staging/media/tegra-vde/tegra-vde.c > > > @@ -568,6 +568,10 @@ static int tegra_vde_attach_dmabuf(struct device *dev, > > > size_t *size, > > > enum dma_data_direction dma_dir) > > > { > > > + struct dma_buf_attach_info attach_info = { > > > + .dev = dev, > > > + .dmabuf = dmabuf > > > + }; > > > struct dma_buf_attachment *attachment; > > > struct dma_buf *dmabuf; > > > struct sg_table *sgt; > > > @@ -591,7 +595,7 @@ static int tegra_vde_attach_dmabuf(struct device *dev, > > > return -EINVAL; > > > } > > > - attachment = dma_buf_attach(dmabuf, dev); > > > + attachment = dma_buf_attach(&attach_info); > > > if (IS_ERR(attachment)) { > > > dev_err(dev, "Failed to attach dmabuf\n"); > > > err = PTR_ERR(attachment); > > > diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h > > > index 18a78be53541..7e23758db3a4 100644 > > > --- a/include/linux/dma-buf.h > > > +++ b/include/linux/dma-buf.h > > > @@ -128,6 +128,9 @@ struct dma_buf_ops { > > > * any other kind of sharing that the exporter might wish to make > > > * available to buffer-users. > > > * > > > + * This is always called with the dmabuf->resv object locked when > > > + * no_sgt_cache is true. > > > + * > > > * Returns: > > > * > > > * A &sg_table scatter list of or the backing storage of the DMA buffer, > > > @@ -148,6 +151,9 @@ struct dma_buf_ops { > > > * It should also unpin the backing storage if this is the last mapping > > > * of the DMA buffer, it the exporter supports backing storage > > > * migration. > > > + * > > > + * This is always called with the dmabuf->resv object locked when > > > + * no_sgt_cache is true. > > > */ > > > void (*unmap_dma_buf)(struct dma_buf_attachment *, > > > struct sg_table *, > > > @@ -370,6 +376,19 @@ struct dma_buf_export_info { > > > struct dma_buf_export_info name = { .exp_name = KBUILD_MODNAME, \ > > > .owner = THIS_MODULE } > > > +/** > > > + * struct dma_buf_attach_info - holds information needed to attach to a dma_buf > > > + * @dmabuf: the exported dma_buf > > > + * @dev: the device which wants to import the attachment > > > + * > > > + * This structure holds the information required to attach to a buffer. Used > > > + * with dma_buf_attach() only. > > > + */ > > > +struct dma_buf_attach_info { > > > + struct dma_buf *dmabuf; > > > + struct device *dev; > > > +}; > > > + > > > /** > > > * get_dma_buf - convenience wrapper for get_file. > > > * @dmabuf: [in] pointer to dma_buf > > > @@ -384,8 +403,8 @@ static inline void get_dma_buf(struct dma_buf *dmabuf) > > > get_file(dmabuf->file); > > > } > > > -struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf, > > > - struct device *dev); > > > +struct dma_buf_attachment * > > > +dma_buf_attach(const struct dma_buf_attach_info *info); > > > void dma_buf_detach(struct dma_buf *dmabuf, > > > struct dma_buf_attachment *dmabuf_attach); > > > -- > > > 2.17.1 > > > > > > _______________________________________________ > > > dri-devel mailing list > > > dri-devel@lists.freedesktop.org > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 03/12] dma-buf: lock the reservation object during (un)map_dma_buf v3 Date: Wed, 17 Apr 2019 16:26:32 +0200 Message-ID: <20190417142632.GF13337@phenom.ffwll.local> References: <20190416183841.1577-1-christian.koenig@amd.com> <20190416183841.1577-4-christian.koenig@amd.com> <20190417140804.GD13337@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x543.google.com (mail-ed1-x543.google.com [IPv6:2a00:1450:4864:20::543]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5F28C6E05E for ; Wed, 17 Apr 2019 14:26:36 +0000 (UTC) Received: by mail-ed1-x543.google.com with SMTP id g6so17198117edc.8 for ; Wed, 17 Apr 2019 07:26:36 -0700 (PDT) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: christian.koenig@amd.com Cc: linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBBcHIgMTcsIDIwMTkgYXQgMDQ6MTQ6MzJQTSArMDIwMCwgQ2hyaXN0aWFuIEvDtm5p ZyB3cm90ZToKPiBBbSAxNy4wNC4xOSB1bSAxNjowOCBzY2hyaWViIERhbmllbCBWZXR0ZXI6Cj4g PiBPbiBUdWUsIEFwciAxNiwgMjAxOSBhdCAwODozODozMlBNICswMjAwLCBDaHJpc3RpYW4gS8O2 bmlnIHdyb3RlOgo+ID4gPiBNYWtlIGl0IG1hbmRhdG9yeSBmb3IgZHluYW1pYyBkbWEtYnVmIGNh bGxiYWNrcyB0byBiZSBjYWxsZWQgd2l0aCB0aGUKPiA+ID4gcmVzZXJ2YXRpb24gbG9jayBoZWxk Lgo+ID4gPiAKPiA+ID4gRm9yIHN0YXRpYyBkbWEtYnVmIGV4cG9ydGVycyB3ZSBzdGlsbCBoYXZl IHRoZSBmYWxsYmFjayBvZiB1c2luZyBjYWNoZWQgc2d0Lgo+ID4gPiAKPiA+ID4gdjI6IHJlb3Jk ZXJlZAo+ID4gPiB2MzogcmViYXNlZCBvbiBzZ3QgY2FjaGluZwo+ID4gPiB2NDogdXNlIHRoZSBj YWNoZWQgc2d0IHdoZW4gcG9zc2libGUKPiA+ID4gCj4gPiA+IFNpZ25lZC1vZmYtYnk6IENocmlz dGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KPiA+IEkgdGhpbmsgdGhlcmUn cyBhIGJpdCBhIHJlYmFzZSBjaGFvcyBnb2luZyBvbjoKPiA+IC0gc29tZSBjb21tZW50cyBsZWZ0 IGJlaGluZCB3aXRoIG5vX3NndF9jYWNoZSwgd2hpY2ggSSBjYW4ndCBmaW5kIGFueW1vcmUKPiA+ IC0gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSByZXdvcmsgb2YgZG1hX2J1Zl9hdHRhY2ggc2hvdWxk IGltbyBiZSBzcGxpdCBvdXQKPiAKPiBBaCwgY3JhcCB0aG91Z2h0IEkndmUgZ290IGFsbCBvZiB0 aG9zZS4gR29pbmcgdG8gZml4IHRoYXQuCj4gCj4gPiBOZXh0IGlzc3VlIGlzIHRoYXQgdGhlIHJl c2VydmF0aW9uIG9iamVjdCBsb2NraW5nIGlzIHN0aWxsIGluIHRoZSBwYXRoIG9mCj4gPiBkbWFf YnVmX21hcCwgc28gcHJvYmFibHkgc3RpbGwgZ29pbmcgdG8gcmVzdWx0IGluIHRvbnMgb2YgbG9j a2RlcCBzcGxhdHMuCj4gPiBFeGNlcHQgdGhlIGk5MTUrYW1kZ3B1IHBhdGggc2hvdWxkIG5vdyB3 b3JrIGR1ZSB0byB0aGUgZmFzdHBhdGguCj4gCj4gSSBhY3R1YWxseSBmb3VuZCBhIHNvbHV0aW9u IGZvciB0aGF0IDopCj4gCj4gVGhlIGlkZWEgaXMgbm93IHRoYXQgd2UgYWx3YXlzIGNhY2hlIHRo ZSBzZ3QgaW4gdGhlIGF0dGFjaG1lbnQgdW5sZXNzIHRoZQo+IGR5bmFtaWMgZmxhZyAocHJldmlv dXNseSBub19zZ3RfY2FjaGUgZmxhZykgaXMgc2V0LiBBbmQgdGhpcyBjYWNoZWQgc2d0IGlzCj4g Y3JlYXRlZCB3aXRob3V0IGhvbGRpbmcgdGhlIGxvY2suCgpZZWFoIEkgdGhpbmsgdGhhdCBpZGVh IHdvcmtzLgoKPiBXZSBlaXRoZXIgbmVlZCB0byBkb2N1bWVudCB0aGF0IHJlYWxseSB3ZWxsIG9y IG1heWJlIHNwbGl0IHRoZSBtYXBwaW5nCj4gY2FsbGJhY2tzIGludG8gbWFwL3VubWFwIGFuZCBt YXBfbG9jay91bm1hcF9sb2NrZWQuIE9waW5pb25zPwoKSSB0aGluayB0aGUgaW1wbGVtZW50YXRp b24gZG9lc24ndC4gRXhwb3J0ZXIgY2FuJ3QgZGVjaWRlIG9uIGl0cyBvd24Kd2hldGhlciBkeW5h bWljL3N0YXRpYyBpcyB3aGF0J3MgbmVlZGVkLCB3ZSBuZWVkIHRvIGRlY2lkZSB0aGF0IGZvciBl YWNoCmF0dGFjaG1lbnQsIHRha2luZyBib3RoIGV4cG9ydGVyIGFuZCBpbXBvcnRlciBjYXBhYmls aXRpZXMgaW50byBhY2NvdW50LgoKSSB0aGluayBpZiB3ZSBkbyB0aGF0LCB0aGVuIGl0IHNob3Vs ZCB3b3JrIG91dC4gSSByZXBsaWVkIG9uIHRoZSBwaW4vdW5waW4KaW50ZXJmYWNlIHBhdGNoIHdp dGggc29tZSBtb3JlIGNvbmNyZXRlIHRob3VnaHRzLiBNYXliZSBiZXN0IHRvIGNvbnRpbnVlCnRo YXQgZGlzY3Vzc2lvbiB0aGVyZSwgd2l0aCBtb3JlIGNvbnRleHQuCi1EYW5pZWwKCj4gPiBOb3Qg c3VyZSB0aGF0J3MgYSBzb2x1dGlvbiB0aGF0IHJlYWxseSB3b3JrcywganVzdCBoaWRlcyB0aGF0 Cj4gPiBmdW5kYW1lbnRhbGx5IHdlIHN0aWxsIGhhdmUgdGhhdCBpc3N1ZSBvZiBpbmNvbXBhdGli bGUgbG9ja2luZyBjaGFpbnMKPiA+IGJldHdlZW4gZGlmZmVyZW50IGRyaXZlcnMuCj4gCj4gV2Ug Y2FuIG5vdyBtYWtlIGEgc2xvdyB0cmFuc2l0aW9uIGJldHdlZW4gc3RhdGljIGFuZCBkeW5hbWlj IERNQS1idWYKPiBoYW5kbGluZywgc28gb25seSBkcml2ZXIgd2hvIGNhbiBkbyB0aGUgbG9ja2lu ZyB3aWxsIGJlIGFmZmVjdGVkLgo+IAo+IENocmlzdGlhbi4KPiAKPiA+IC1EYW5pZWwKPiA+IAo+ ID4gPiAtLS0KPiA+ID4gICBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jICAgICAgICAgICAgICAg ICAgICAgfCAyNCArKysrKysrKysrLS0tLS0tLS0tCj4gPiA+ICAgZHJpdmVycy9ncHUvZHJtL2Fy bWFkYS9hcm1hZGFfZ2VtLmMgICAgICAgICAgIHwgIDYgKysrKy0KPiA+ID4gICBkcml2ZXJzL2dw dS9kcm0vZHJtX3ByaW1lLmMgICAgICAgICAgICAgICAgICAgfCAgNiArKysrLQo+ID4gPiAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RtYWJ1Zi5jICAgICAgICB8ICA2ICsrKystCj4g PiA+ICAgZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jICAgICAgICAgICAgICAgICAgIHwgIDYg KysrKy0KPiA+ID4gICBkcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9kbWFidWYuYyAgICAgICAgICAg ICAgfCAgNiArKysrLQo+ID4gPiAgIC4uLi9jb21tb24vdmlkZW9idWYyL3ZpZGVvYnVmMi1kbWEt Y29udGlnLmMgICB8ICA2ICsrKystCj4gPiA+ICAgLi4uL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIv dmlkZW9idWYyLWRtYS1zZy5jIHwgIDYgKysrKy0KPiA+ID4gICBkcml2ZXJzL3N0YWdpbmcvbWVk aWEvdGVncmEtdmRlL3RlZ3JhLXZkZS5jICAgfCAgNiArKysrLQo+ID4gPiAgIGluY2x1ZGUvbGlu dXgvZG1hLWJ1Zi5oICAgICAgICAgICAgICAgICAgICAgICB8IDIzICsrKysrKysrKysrKysrKyst LQo+ID4gPiAgIDEwIGZpbGVzIGNoYW5nZWQsIDc0IGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9u cygtKQo+ID4gPiAKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMg Yi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4gPiA+IGluZGV4IGVmNDgwZTVmYjIzOS4uODNj OTJiZmQ5NjRjIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4g PiA+ICsrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKPiA+ID4gQEAgLTUzMiw4ICs1MzIs OSBAQCBFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX3B1dCk7Cj4gPiA+ICAgLyoqCj4gPiA+ICAg ICogZG1hX2J1Zl9hdHRhY2ggLSBBZGQgdGhlIGRldmljZSB0byBkbWFfYnVmJ3MgYXR0YWNobWVu dHMgbGlzdDsgb3B0aW9uYWxseSwKPiA+ID4gICAgKiBjYWxscyBhdHRhY2goKSBvZiBkbWFfYnVm X29wcyB0byBhbGxvdyBkZXZpY2Utc3BlY2lmaWMgYXR0YWNoIGZ1bmN0aW9uYWxpdHkKPiA+ID4g LSAqIEBkbWFidWY6CVtpbl0JYnVmZmVyIHRvIGF0dGFjaCBkZXZpY2UgdG8uCj4gPiA+IC0gKiBA ZGV2OglbaW5dCWRldmljZSB0byBiZSBhdHRhY2hlZC4KPiA+ID4gKyAqIEBpbmZvOglbaW5dCWhv bGRzIGFsbCB0aGUgYXR0YWNoIHJlbGF0ZWQgaW5mb3JtYXRpb24gcHJvdmlkZWQKPiA+ID4gKyAq CQkJYnkgdGhlIGltcG9ydGVyLiBzZWUgJnN0cnVjdCBkbWFfYnVmX2F0dGFjaF9pbmZvCj4gPiA+ ICsgKgkJCWZvciBmdXJ0aGVyIGRldGFpbHMuCj4gPiA+ICAgICoKPiA+ID4gICAgKiBSZXR1cm5z IHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgcG9pbnRlciBmb3IgdGhpcyBhdHRhY2htZW50LiBB dHRhY2htZW50cwo+ID4gPiAgICAqIG11c3QgYmUgY2xlYW5lZCB1cCBieSBjYWxsaW5nIGRtYV9i dWZfZGV0YWNoKCkuCj4gPiA+IEBAIC01NDcsMjAgKzU0OCwyMCBAQCBFWFBPUlRfU1lNQk9MX0dQ TChkbWFfYnVmX3B1dCk7Cj4gPiA+ICAgICogYWNjZXNzaWJsZSB0byBAZGV2LCBhbmQgY2Fubm90 IGJlIG1vdmVkIHRvIGEgbW9yZSBzdWl0YWJsZSBwbGFjZS4gVGhpcyBpcwo+ID4gPiAgICAqIGlu ZGljYXRlZCB3aXRoIHRoZSBlcnJvciBjb2RlIC1FQlVTWS4KPiA+ID4gICAgKi8KPiA+ID4gLXN0 cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmRtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpk bWFidWYsCj4gPiA+IC0JCQkJCSAgc3RydWN0IGRldmljZSAqZGV2KQo+ID4gPiArc3RydWN0IGRt YV9idWZfYXR0YWNobWVudCAqZG1hX2J1Zl9hdHRhY2goY29uc3Qgc3RydWN0IGRtYV9idWZfYXR0 YWNoX2luZm8gKmluZm8pCj4gPiA+ICAgewo+ID4gPiArCXN0cnVjdCBkbWFfYnVmICpkbWFidWYg PSBpbmZvLT5kbWFidWY7Cj4gPiA+ICAgCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFj aDsKPiA+ID4gICAJaW50IHJldDsKPiA+ID4gLQlpZiAoV0FSTl9PTighZG1hYnVmIHx8ICFkZXYp KQo+ID4gPiArCWlmIChXQVJOX09OKCFkbWFidWYgfHwgIWluZm8tPmRldikpCj4gPiA+ICAgCQly ZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiA+ID4gICAJYXR0YWNoID0ga3phbGxvYyhzaXplb2Yo KmF0dGFjaCksIEdGUF9LRVJORUwpOwo+ID4gPiAgIAlpZiAoIWF0dGFjaCkKPiA+ID4gICAJCXJl dHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ID4gPiAtCWF0dGFjaC0+ZGV2ID0gZGV2Owo+ID4gPiAr CWF0dGFjaC0+ZGV2ID0gaW5mby0+ZGV2Owo+ID4gPiAgIAlhdHRhY2gtPmRtYWJ1ZiA9IGRtYWJ1 ZjsKPiA+ID4gICAJbXV0ZXhfbG9jaygmZG1hYnVmLT5sb2NrKTsKPiA+ID4gQEAgLTY4OCw5ICs2 ODksOSBAQCBzdHJ1Y3Qgc2dfdGFibGUgKmRtYV9idWZfbWFwX2F0dGFjaG1lbnQoc3RydWN0IGRt YV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+ID4gPiAgIAlpZiAoYXR0YWNoLT5zZ3QpCj4gPiA+ ICAgCQlyZXR1cm4gYXR0YWNoLT5zZ3Q7Cj4gPiA+IC0Jc2dfdGFibGUgPSBhdHRhY2gtPmRtYWJ1 Zi0+b3BzLT5tYXBfZG1hX2J1ZihhdHRhY2gsIGRpcmVjdGlvbik7Cj4gPiA+IC0JaWYgKCFzZ190 YWJsZSkKPiA+ID4gLQkJc2dfdGFibGUgPSBFUlJfUFRSKC1FTk9NRU0pOwo+ID4gPiArCXJlc2Vy dmF0aW9uX29iamVjdF9sb2NrKGF0dGFjaC0+ZG1hYnVmLT5yZXN2LCBOVUxMKTsKPiA+ID4gKwlz Z190YWJsZSA9IGRtYV9idWZfbWFwX2F0dGFjaG1lbnRfbG9ja2VkKGF0dGFjaCwgZGlyZWN0aW9u KTsKPiA+ID4gKwlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGF0dGFjaC0+ZG1hYnVmLT5yZXN2 KTsKPiA+ID4gICAJcmV0dXJuIHNnX3RhYmxlOwo+ID4gPiAgIH0KPiA+ID4gQEAgLTc0NCw4ICs3 NDUsOSBAQCB2b2lkIGRtYV9idWZfdW5tYXBfYXR0YWNobWVudChzdHJ1Y3QgZG1hX2J1Zl9hdHRh Y2htZW50ICphdHRhY2gsCj4gPiA+ICAgCWlmIChhdHRhY2gtPnNndCA9PSBzZ190YWJsZSkKPiA+ ID4gICAJCXJldHVybjsKPiA+ID4gLQlhdHRhY2gtPmRtYWJ1Zi0+b3BzLT51bm1hcF9kbWFfYnVm KGF0dGFjaCwgc2dfdGFibGUsCj4gPiA+IC0JCQkJCQlkaXJlY3Rpb24pOwo+ID4gPiArCXJlc2Vy dmF0aW9uX29iamVjdF9sb2NrKGF0dGFjaC0+ZG1hYnVmLT5yZXN2LCBOVUxMKTsKPiA+ID4gKwlk bWFfYnVmX3VubWFwX2F0dGFjaG1lbnRfbG9ja2VkKGF0dGFjaCwgc2dfdGFibGUsIGRpcmVjdGlv bik7Cj4gPiA+ICsJcmVzZXJ2YXRpb25fb2JqZWN0X3VubG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVz dik7Cj4gPiA+ICAgfQo+ID4gPiAgIEVYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfdW5tYXBfYXR0 YWNobWVudCk7Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtYWRhL2FybWFk YV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hcm1hZGEvYXJtYWRhX2dlbS5jCj4gPiA+IGluZGV4 IDY0MmQwZTcwZDBmOC4uMTljNDc4MjEwMzJmIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vYXJtYWRhL2FybWFkYV9nZW0uYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJt YWRhL2FybWFkYV9nZW0uYwo+ID4gPiBAQCAtNTAxLDYgKzUwMSwxMCBAQCBhcm1hZGFfZ2VtX3By aW1lX2V4cG9ydChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaiwKPiA+ID4gICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKgo+ID4gPiAgIGFybWFkYV9nZW1f cHJpbWVfaW1wb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkbWFfYnVmICpidWYp Cj4gPiA+ICAgewo+ID4gPiArCXN0cnVjdCBkbWFfYnVmX2F0dGFjaF9pbmZvIGF0dGFjaF9pbmZv ID0gewo+ID4gPiArCQkuZGV2ID0gZGV2LT5kZXYsCj4gPiA+ICsJCS5kbWFidWYgPSBidWYKPiA+ ID4gKwl9Owo+ID4gPiAgIAlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2g7Cj4gPiA+ ICAgCXN0cnVjdCBhcm1hZGFfZ2VtX29iamVjdCAqZG9iajsKPiA+ID4gQEAgLTUxNiw3ICs1MjAs NyBAQCBhcm1hZGFfZ2VtX3ByaW1lX2ltcG9ydChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1 Y3QgZG1hX2J1ZiAqYnVmKQo+ID4gPiAgIAkJfQo+ID4gPiAgIAl9Cj4gPiA+IC0JYXR0YWNoID0g ZG1hX2J1Zl9hdHRhY2goYnVmLCBkZXYtPmRldik7Cj4gPiA+ICsJYXR0YWNoID0gZG1hX2J1Zl9h dHRhY2goJmF0dGFjaF9pbmZvKTsKPiA+ID4gICAJaWYgKElTX0VSUihhdHRhY2gpKQo+ID4gPiAg IAkJcmV0dXJuIEVSUl9DQVNUKGF0dGFjaCk7Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZHJtX3ByaW1lLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ByaW1lLmMKPiA+ID4gaW5k ZXggMjMxZTNmNmQ1ZjQxLi4xZmFkZjVkNWVkMzMgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9kcm1fcHJpbWUuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ByaW1l LmMKPiA+ID4gQEAgLTcwOSw2ICs3MDksMTAgQEAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpkcm1f Z2VtX3ByaW1lX2ltcG9ydF9kZXYoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ID4gICAJCQkJ CSAgICBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwKPiA+ID4gICAJCQkJCSAgICBzdHJ1Y3QgZGV2 aWNlICphdHRhY2hfZGV2KQo+ID4gPiAgIHsKPiA+ID4gKwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hf aW5mbyBhdHRhY2hfaW5mbyA9IHsKPiA+ID4gKwkJLmRldiA9IGF0dGFjaF9kZXYsCj4gPiA+ICsJ CS5kbWFidWYgPSBkbWFfYnVmCj4gPiA+ICsJfTsKPiA+ID4gICAJc3RydWN0IGRtYV9idWZfYXR0 YWNobWVudCAqYXR0YWNoOwo+ID4gPiAgIAlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKPiA+ID4gICAJ c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gPiA+IEBAIC03MjksNyArNzMzLDcgQEAgc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpkcm1fZ2VtX3ByaW1lX2ltcG9ydF9kZXYoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKPiA+ID4gICAJaWYgKCFkZXYtPmRyaXZlci0+Z2VtX3ByaW1lX2ltcG9ydF9z Z190YWJsZSkKPiA+ID4gICAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ID4gPiAtCWF0dGFj aCA9IGRtYV9idWZfYXR0YWNoKGRtYV9idWYsIGF0dGFjaF9kZXYpOwo+ID4gPiArCWF0dGFjaCA9 IGRtYV9idWZfYXR0YWNoKCZhdHRhY2hfaW5mbyk7Cj4gPiA+ICAgCWlmIChJU19FUlIoYXR0YWNo KSkKPiA+ID4gICAJCXJldHVybiBFUlJfQ0FTVChhdHRhY2gpOwo+ID4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZG1hYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9kbWFidWYuYwo+ID4gPiBpbmRleCA4MmUyY2ExN2E0NDEuLmFhN2Y2ODVi ZDZjYSAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZG1h YnVmLmMKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZG1hYnVmLmMK PiA+ID4gQEAgLTI3Nyw2ICsyNzcsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0X29wcyBpOTE1X2dlbV9vYmplY3RfZG1hYnVmX29wcyA9IHsKPiA+ID4gICBzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKmk5MTVfZ2VtX3ByaW1lX2ltcG9ydChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAo+ID4gPiAgIAkJCQkJICAgICBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZikKPiA+ID4g ICB7Cj4gPiA+ICsJc3RydWN0IGRtYV9idWZfYXR0YWNoX2luZm8gYXR0YWNoX2luZm8gPSB7Cj4g PiA+ICsJCS5kZXYgPSBkZXYtPmRldiwKPiA+ID4gKwkJLmRtYWJ1ZiA9IGRtYV9idWYKPiA+ID4g Kwl9Owo+ID4gPiAgIAlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2g7Cj4gPiA+ICAg CXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gPiA+ICAgCWludCByZXQ7Cj4gPiA+ IEBAIC0yOTUsNyArMjk5LDcgQEAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICppOTE1X2dlbV9wcmlt ZV9pbXBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ID4gICAJfQo+ID4gPiAgIAkvKiBu ZWVkIHRvIGF0dGFjaCAqLwo+ID4gPiAtCWF0dGFjaCA9IGRtYV9idWZfYXR0YWNoKGRtYV9idWYs IGRldi0+ZGV2KTsKPiA+ID4gKwlhdHRhY2ggPSBkbWFfYnVmX2F0dGFjaCgmYXR0YWNoX2luZm8p Owo+ID4gPiAgIAlpZiAoSVNfRVJSKGF0dGFjaCkpCj4gPiA+ICAgCQlyZXR1cm4gRVJSX0NBU1Qo YXR0YWNoKTsKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uYyBi L2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uYwo+ID4gPiBpbmRleCA0ZjgwMTAwZmY1ZjMuLjhl NmI2Yzg3OWFkZCAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5j Cj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uYwo+ID4gPiBAQCAtMzMyLDYg KzMzMiwxMCBAQCBzdHJ1Y3QgdGVncmFfYm8gKnRlZ3JhX2JvX2NyZWF0ZV93aXRoX2hhbmRsZShz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCj4gPiA+ICAgc3RhdGljIHN0cnVjdCB0ZWdyYV9ibyAqdGVn cmFfYm9faW1wb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCj4gPiA+ICAgCQkJCQlzdHJ1Y3Qg ZG1hX2J1ZiAqYnVmKQo+ID4gPiAgIHsKPiA+ID4gKwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfaW5m byBhdHRhY2hfaW5mbyA9IHsKPiA+ID4gKwkJLmRldiA9IGRybS0+ZGV2LAo+ID4gPiArCQkuZG1h YnVmID0gYnVmCj4gPiA+ICsJfTsKPiA+ID4gICAJc3RydWN0IHRlZ3JhX2RybSAqdGVncmEgPSBk cm0tPmRldl9wcml2YXRlOwo+ID4gPiAgIAlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRh Y2g7Cj4gPiA+ICAgCXN0cnVjdCB0ZWdyYV9ibyAqYm87Cj4gPiA+IEBAIC0zNDEsNyArMzQ1LDcg QEAgc3RhdGljIHN0cnVjdCB0ZWdyYV9ibyAqdGVncmFfYm9faW1wb3J0KHN0cnVjdCBkcm1fZGV2 aWNlICpkcm0sCj4gPiA+ICAgCWlmIChJU19FUlIoYm8pKQo+ID4gPiAgIAkJcmV0dXJuIGJvOwo+ ID4gPiAtCWF0dGFjaCA9IGRtYV9idWZfYXR0YWNoKGJ1ZiwgZHJtLT5kZXYpOwo+ID4gPiArCWF0 dGFjaCA9IGRtYV9idWZfYXR0YWNoKCZhdHRhY2hfaW5mbyk7Cj4gPiA+ICAgCWlmIChJU19FUlIo YXR0YWNoKSkgewo+ID4gPiAgIAkJZXJyID0gUFRSX0VSUihhdHRhY2gpOwo+ID4gPiAgIAkJZ290 byBmcmVlOwo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfZG1hYnVm LmMgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9kbWFidWYuYwo+ID4gPiBpbmRleCA1NTZmNjI2 NjJhYTkuLjg2YjkyOGY5NzQyZiAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Vk bC91ZGxfZG1hYnVmLmMKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfZG1hYnVm LmMKPiA+ID4gQEAgLTIyNiw2ICsyMjYsMTAgQEAgc3RhdGljIGludCB1ZGxfcHJpbWVfY3JlYXRl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiA+ICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICp1 ZGxfZ2VtX3ByaW1lX2ltcG9ydChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gPiAgIAkJCQlz dHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZikKPiA+ID4gICB7Cj4gPiA+ICsJc3RydWN0IGRtYV9idWZf YXR0YWNoX2luZm8gYXR0YWNoX2luZm8gPSB7Cj4gPiA+ICsJCS5kZXYgPSBkZXYtPmRldiwKPiA+ ID4gKwkJLmRtYWJ1ZiA9IGRtYV9idWYKPiA+ID4gKwl9Owo+ID4gPiAgIAlzdHJ1Y3QgZG1hX2J1 Zl9hdHRhY2htZW50ICphdHRhY2g7Cj4gPiA+ICAgCXN0cnVjdCBzZ190YWJsZSAqc2c7Cj4gPiA+ ICAgCXN0cnVjdCB1ZGxfZ2VtX29iamVjdCAqdW9iajsKPiA+ID4gQEAgLTIzMyw3ICsyMzcsNyBA QCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnVkbF9nZW1fcHJpbWVfaW1wb3J0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gPiA+ICAgCS8qIG5lZWQgdG8gYXR0YWNoICovCj4gPiA+ICAgCWdldF9k ZXZpY2UoZGV2LT5kZXYpOwo+ID4gPiAtCWF0dGFjaCA9IGRtYV9idWZfYXR0YWNoKGRtYV9idWYs IGRldi0+ZGV2KTsKPiA+ID4gKwlhdHRhY2ggPSBkbWFfYnVmX2F0dGFjaCgmYXR0YWNoX2luZm8p Owo+ID4gPiAgIAlpZiAoSVNfRVJSKGF0dGFjaCkpIHsKPiA+ID4gICAJCXB1dF9kZXZpY2UoZGV2 LT5kZXYpOwo+ID4gPiAgIAkJcmV0dXJuIEVSUl9DQVNUKGF0dGFjaCk7Cj4gPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9idWYyLWRtYS1jb250aWcu YyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi92aWRlb2J1ZjItZG1hLWNvbnRpZy5j Cj4gPiA+IGluZGV4IGFmZjBhYjdiZjgzZC4uMWYyNjg3YjVlYjBlIDEwMDY0NAo+ID4gPiAtLS0g YS9kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9idWYyLWRtYS1jb250aWcuYwo+ ID4gPiArKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9idWYyLWRtYS1j b250aWcuYwo+ID4gPiBAQCAtNjc2LDYgKzY3NiwxMCBAQCBzdGF0aWMgdm9pZCB2YjJfZGNfZGV0 YWNoX2RtYWJ1Zih2b2lkICptZW1fcHJpdikKPiA+ID4gICBzdGF0aWMgdm9pZCAqdmIyX2RjX2F0 dGFjaF9kbWFidWYoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZG1hX2J1ZiAqZGJ1ZiwKPiA+ ID4gICAJdW5zaWduZWQgbG9uZyBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFfZGly KQo+ID4gPiAgIHsKPiA+ID4gKwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfaW5mbyBhdHRhY2hfaW5m byA9IHsKPiA+ID4gKwkJLmRldiA9IGRldiwKPiA+ID4gKwkJLmRtYWJ1ZiA9IGRidWYKPiA+ID4g Kwl9Owo+ID4gPiAgIAlzdHJ1Y3QgdmIyX2RjX2J1ZiAqYnVmOwo+ID4gPiAgIAlzdHJ1Y3QgZG1h X2J1Zl9hdHRhY2htZW50ICpkYmE7Cj4gPiA+IEBAIC02OTEsNyArNjk1LDcgQEAgc3RhdGljIHZv aWQgKnZiMl9kY19hdHRhY2hfZG1hYnVmKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRtYV9i dWYgKmRidWYsCj4gPiA+ICAgCWJ1Zi0+ZGV2ID0gZGV2Owo+ID4gPiAgIAkvKiBjcmVhdGUgYXR0 YWNobWVudCBmb3IgdGhlIGRtYWJ1ZiB3aXRoIHRoZSB1c2VyIGRldmljZSAqLwo+ID4gPiAtCWRi YSA9IGRtYV9idWZfYXR0YWNoKGRidWYsIGJ1Zi0+ZGV2KTsKPiA+ID4gKwlkYmEgPSBkbWFfYnVm X2F0dGFjaCgmYXR0YWNoX2luZm8pOwo+ID4gPiAgIAlpZiAoSVNfRVJSKGRiYSkpIHsKPiA+ID4g ICAJCXByX2VycigiZmFpbGVkIHRvIGF0dGFjaCBkbWFidWZcbiIpOwo+ID4gPiAgIAkJa2ZyZWUo YnVmKTsKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi92 aWRlb2J1ZjItZG1hLXNnLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9i dWYyLWRtYS1zZy5jCj4gPiA+IGluZGV4IDAxNWU3MzcwOTVjZC4uY2JkNjI2ZDIzOTNhIDEwMDY0 NAo+ID4gPiAtLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9idWYyLWRt YS1zZy5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi92aWRlb2J1 ZjItZG1hLXNnLmMKPiA+ID4gQEAgLTYwOCw2ICs2MDgsMTAgQEAgc3RhdGljIHZvaWQgdmIyX2Rt YV9zZ19kZXRhY2hfZG1hYnVmKHZvaWQgKm1lbV9wcml2KQo+ID4gPiAgIHN0YXRpYyB2b2lkICp2 YjJfZG1hX3NnX2F0dGFjaF9kbWFidWYoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZG1hX2J1 ZiAqZGJ1ZiwKPiA+ID4gICAJdW5zaWduZWQgbG9uZyBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVj dGlvbiBkbWFfZGlyKQo+ID4gPiAgIHsKPiA+ID4gKwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfaW5m byBhdHRhY2hfaW5mbyA9IHsKPiA+ID4gKwkJLmRldiA9IGRldiwKPiA+ID4gKwkJLmRtYWJ1ZiA9 IGRidWYKPiA+ID4gKwl9Owo+ID4gPiAgIAlzdHJ1Y3QgdmIyX2RtYV9zZ19idWYgKmJ1ZjsKPiA+ ID4gICAJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqZGJhOwo+ID4gPiBAQCAtNjIzLDcgKzYy Nyw3IEBAIHN0YXRpYyB2b2lkICp2YjJfZG1hX3NnX2F0dGFjaF9kbWFidWYoc3RydWN0IGRldmlj ZSAqZGV2LCBzdHJ1Y3QgZG1hX2J1ZiAqZGJ1ZiwKPiA+ID4gICAJYnVmLT5kZXYgPSBkZXY7Cj4g PiA+ICAgCS8qIGNyZWF0ZSBhdHRhY2htZW50IGZvciB0aGUgZG1hYnVmIHdpdGggdGhlIHVzZXIg ZGV2aWNlICovCj4gPiA+IC0JZGJhID0gZG1hX2J1Zl9hdHRhY2goZGJ1ZiwgYnVmLT5kZXYpOwo+ ID4gPiArCWRiYSA9IGRtYV9idWZfYXR0YWNoKCZhdHRhY2hfaW5mbyk7Cj4gPiA+ICAgCWlmIChJ U19FUlIoZGJhKSkgewo+ID4gPiAgIAkJcHJfZXJyKCJmYWlsZWQgdG8gYXR0YWNoIGRtYWJ1Zlxu Iik7Cj4gPiA+ICAgCQlrZnJlZShidWYpOwo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFn aW5nL21lZGlhL3RlZ3JhLXZkZS90ZWdyYS12ZGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90 ZWdyYS12ZGUvdGVncmEtdmRlLmMKPiA+ID4gaW5kZXggYWE2YzZiYmE5NjFlLi41YTEwYzFmYWNj MjcgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS12ZGUvdGVn cmEtdmRlLmMKPiA+ID4gKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhLXZkZS90ZWdy YS12ZGUuYwo+ID4gPiBAQCAtNTY4LDYgKzU2OCwxMCBAQCBzdGF0aWMgaW50IHRlZ3JhX3ZkZV9h dHRhY2hfZG1hYnVmKHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ID4gICAJCQkJICAgc2l6ZV90ICpz aXplLAo+ID4gPiAgIAkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFfZGlyKQo+ID4g PiAgIHsKPiA+ID4gKwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfaW5mbyBhdHRhY2hfaW5mbyA9IHsK PiA+ID4gKwkJLmRldiA9IGRldiwKPiA+ID4gKwkJLmRtYWJ1ZiA9IGRtYWJ1Zgo+ID4gPiArCX07 Cj4gPiA+ICAgCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQ7Cj4gPiA+ICAg CXN0cnVjdCBkbWFfYnVmICpkbWFidWY7Cj4gPiA+ICAgCXN0cnVjdCBzZ190YWJsZSAqc2d0Owo+ ID4gPiBAQCAtNTkxLDcgKzU5NSw3IEBAIHN0YXRpYyBpbnQgdGVncmFfdmRlX2F0dGFjaF9kbWFi dWYoc3RydWN0IGRldmljZSAqZGV2LAo+ID4gPiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ICAg CX0KPiA+ID4gLQlhdHRhY2htZW50ID0gZG1hX2J1Zl9hdHRhY2goZG1hYnVmLCBkZXYpOwo+ID4g PiArCWF0dGFjaG1lbnQgPSBkbWFfYnVmX2F0dGFjaCgmYXR0YWNoX2luZm8pOwo+ID4gPiAgIAlp ZiAoSVNfRVJSKGF0dGFjaG1lbnQpKSB7Cj4gPiA+ICAgCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0 byBhdHRhY2ggZG1hYnVmXG4iKTsKPiA+ID4gICAJCWVyciA9IFBUUl9FUlIoYXR0YWNobWVudCk7 Cj4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaCBiL2luY2x1ZGUvbGlu dXgvZG1hLWJ1Zi5oCj4gPiA+IGluZGV4IDE4YTc4YmU1MzU0MS4uN2UyMzc1OGRiM2E0IDEwMDY0 NAo+ID4gPiAtLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaAo+ID4gPiArKysgYi9pbmNsdWRl L2xpbnV4L2RtYS1idWYuaAo+ID4gPiBAQCAtMTI4LDYgKzEyOCw5IEBAIHN0cnVjdCBkbWFfYnVm X29wcyB7Cj4gPiA+ICAgCSAqIGFueSBvdGhlciBraW5kIG9mIHNoYXJpbmcgdGhhdCB0aGUgZXhw b3J0ZXIgbWlnaHQgd2lzaCB0byBtYWtlCj4gPiA+ICAgCSAqIGF2YWlsYWJsZSB0byBidWZmZXIt dXNlcnMuCj4gPiA+ICAgCSAqCj4gPiA+ICsJICogVGhpcyBpcyBhbHdheXMgY2FsbGVkIHdpdGgg dGhlIGRtYWJ1Zi0+cmVzdiBvYmplY3QgbG9ja2VkIHdoZW4KPiA+ID4gKwkgKiBub19zZ3RfY2Fj aGUgaXMgdHJ1ZS4KPiA+ID4gKwkgKgo+ID4gPiAgIAkgKiBSZXR1cm5zOgo+ID4gPiAgIAkgKgo+ ID4gPiAgIAkgKiBBICZzZ190YWJsZSBzY2F0dGVyIGxpc3Qgb2Ygb3IgdGhlIGJhY2tpbmcgc3Rv cmFnZSBvZiB0aGUgRE1BIGJ1ZmZlciwKPiA+ID4gQEAgLTE0OCw2ICsxNTEsOSBAQCBzdHJ1Y3Qg ZG1hX2J1Zl9vcHMgewo+ID4gPiAgIAkgKiBJdCBzaG91bGQgYWxzbyB1bnBpbiB0aGUgYmFja2lu ZyBzdG9yYWdlIGlmIHRoaXMgaXMgdGhlIGxhc3QgbWFwcGluZwo+ID4gPiAgIAkgKiBvZiB0aGUg RE1BIGJ1ZmZlciwgaXQgdGhlIGV4cG9ydGVyIHN1cHBvcnRzIGJhY2tpbmcgc3RvcmFnZQo+ID4g PiAgIAkgKiBtaWdyYXRpb24uCj4gPiA+ICsJICoKPiA+ID4gKwkgKiBUaGlzIGlzIGFsd2F5cyBj YWxsZWQgd2l0aCB0aGUgZG1hYnVmLT5yZXN2IG9iamVjdCBsb2NrZWQgd2hlbgo+ID4gPiArCSAq IG5vX3NndF9jYWNoZSBpcyB0cnVlLgo+ID4gPiAgIAkgKi8KPiA+ID4gICAJdm9pZCAoKnVubWFw X2RtYV9idWYpKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKiwKPiA+ID4gICAJCQkgICAgICBz dHJ1Y3Qgc2dfdGFibGUgKiwKPiA+ID4gQEAgLTM3MCw2ICszNzYsMTkgQEAgc3RydWN0IGRtYV9i dWZfZXhwb3J0X2luZm8gewo+ID4gPiAgIAlzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyBuYW1l ID0geyAuZXhwX25hbWUgPSBLQlVJTERfTU9ETkFNRSwgXAo+ID4gPiAgIAkJCQkJIC5vd25lciA9 IFRISVNfTU9EVUxFIH0KPiA+ID4gKy8qKgo+ID4gPiArICogc3RydWN0IGRtYV9idWZfYXR0YWNo X2luZm8gLSBob2xkcyBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gYXR0YWNoIHRvIGEgZG1hX2J1Zgo+ ID4gPiArICogQGRtYWJ1ZjoJdGhlIGV4cG9ydGVkIGRtYV9idWYKPiA+ID4gKyAqIEBkZXY6CXRo ZSBkZXZpY2Ugd2hpY2ggd2FudHMgdG8gaW1wb3J0IHRoZSBhdHRhY2htZW50Cj4gPiA+ICsgKgo+ ID4gPiArICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRv IGF0dGFjaCB0byBhIGJ1ZmZlci4gVXNlZAo+ID4gPiArICogd2l0aCBkbWFfYnVmX2F0dGFjaCgp IG9ubHkuCj4gPiA+ICsgKi8KPiA+ID4gK3N0cnVjdCBkbWFfYnVmX2F0dGFjaF9pbmZvIHsKPiA+ ID4gKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmOwo+ID4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsK PiA+ID4gK307Cj4gPiA+ICsKPiA+ID4gICAvKioKPiA+ID4gICAgKiBnZXRfZG1hX2J1ZiAtIGNv bnZlbmllbmNlIHdyYXBwZXIgZm9yIGdldF9maWxlLgo+ID4gPiAgICAqIEBkbWFidWY6CVtpbl0J cG9pbnRlciB0byBkbWFfYnVmCj4gPiA+IEBAIC0zODQsOCArNDAzLDggQEAgc3RhdGljIGlubGlu ZSB2b2lkIGdldF9kbWFfYnVmKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCj4gPiA+ICAgCWdldF9m aWxlKGRtYWJ1Zi0+ZmlsZSk7Cj4gPiA+ICAgfQo+ID4gPiAtc3RydWN0IGRtYV9idWZfYXR0YWNo bWVudCAqZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKPiA+ID4gLQkJCQkJ CQlzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ID4gPiArc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAq Cj4gPiA+ICtkbWFfYnVmX2F0dGFjaChjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfaW5mbyAq aW5mbyk7Cj4gPiA+ICAgdm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVm LAo+ID4gPiAgIAkJCQlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICpkbWFidWZfYXR0YWNoKTsK PiA+ID4gLS0gCj4gPiA+IDIuMTcuMQo+ID4gPiAKPiA+ID4gX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KPiA+ID4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+ ID4gPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gPiA+IGh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCj4gCj4gX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBkcmktZGV2ZWwgbWFpbGlu ZyBsaXN0Cj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCgotLSAKRGFuaWVsIFZl dHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3 bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs