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=-13.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 28511C432BE for ; Fri, 23 Jul 2021 08:21:24 +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 C280860E77 for ; Fri, 23 Jul 2021 08:21:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org C280860E77 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 230D06E9C3; Fri, 23 Jul 2021 08:21:23 +0000 (UTC) Received: from mail-ot1-x331.google.com (mail-ot1-x331.google.com [IPv6:2607:f8b0:4864:20::331]) by gabe.freedesktop.org (Postfix) with ESMTPS id A110F6E9C3 for ; Fri, 23 Jul 2021 08:21:21 +0000 (UTC) Received: by mail-ot1-x331.google.com with SMTP id 48-20020a9d0bb30000b02904cd671b911bso1371129oth.1 for ; Fri, 23 Jul 2021 01:21:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=dyosij4uetTaOKYJdoRUCx8uK6Y+Pk1yK6Y86bo5prA=; b=RO4UXO6pWy71XWFDt3xQnjNscW97+2ODsznFrEmN3uGp1gb2lRpWXKp5BvEEtYcebN 52QWTWEd7QNTZw6FtkphqyWjotkWjee9B/v0ZmLLn0dMiG8w74t0OBGu+npO11GsReic Zcbo49nL7ZuhTOdsOAA+y5X0RJIjCwm0KYpFk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=dyosij4uetTaOKYJdoRUCx8uK6Y+Pk1yK6Y86bo5prA=; b=oB91W1BTOnhgbMIicavZaIadWin0roSslgTbN5BgexDZb8j98TNux9Ex0xg3oVibzr B1uh2tTJYLn8/jmCVKBGg1FwC5dF0jTwLvKvJBlUTPrxso/O42ZsNNxEkgePreN+QZMs nh1G+obwwwQtkb4Sf8bZv/mvrvfBf3MJNgWXRM3bd3xhK4tFbnBsQl6h3lCwoACbJMUn 8Q0pmm2NAy6Z7ss+5A08c3KyHdRtkiUMTWh+bTjMDOqztCbxegkFpqRW0v99+K5hVtqF hCNdtWvkqrdIH+cNkfG3MseVs/JNB6ysHT6qTSu2ZN9kN8g6Yt4QmaEurlqDQf9/nGG+ /aLw== X-Gm-Message-State: AOAM5338He9cCd2C4OboBExYy8LA9ymizcKAf7uaviKZo1h4KP1WZULY ljffbYFFMr135ghGtGQgaD2QdXeUN4pa7jnjKTT2oQ== X-Google-Smtp-Source: ABdhPJzRb0LMyGhTtSu3Xw7G5poCanJ1XyxArvodWr/KFw3tPt1FpddaS6wYK1+CVI1/OkWG26UQMZO9V0EM2dZa7i8= X-Received: by 2002:a05:6830:2802:: with SMTP id w2mr2239059otu.303.1627028480891; Fri, 23 Jul 2021 01:21:20 -0700 (PDT) MIME-Version: 1.0 References: <20210712220636.475675-1-Felix.Kuehling@amd.com> <1dd35814-c2bb-6e71-6259-e9d4f77d8969@amd.com> In-Reply-To: <1dd35814-c2bb-6e71-6259-e9d4f77d8969@amd.com> From: Daniel Vetter Date: Fri, 23 Jul 2021 10:21:09 +0200 Message-ID: Subject: Re: [PATCH v3 1/1] drm/ttm: Fix COW check To: =?UTF-8?Q?Christian_K=C3=B6nig?= , Thomas Zimmermann Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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: =?UTF-8?Q?Christian_K=C3=B6nig?= , Felix Kuehling , amd-gfx list , Alex Deucher , Maling list - DRI developers Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On Wed, Jul 14, 2021 at 10:51 AM Christian K=C3=B6nig wrote: > > > > Am 13.07.21 um 17:28 schrieb Alex Deucher: > > On Tue, Jul 13, 2021 at 2:57 AM Christian K=C3=B6nig > > wrote: > >> > >> > >> Am 13.07.21 um 00:06 schrieb Felix Kuehling: > >>> KFD Thunk maps invisible VRAM BOs with PROT_NONE, MAP_PRIVATE. > >>> is_cow_mapping returns true for these mappings. Add a check for > >>> vm_flags & VM_WRITE to avoid mmap failures on private read-only or > >>> PROT_NONE mappings. > >>> > >>> v2: protect against mprotect making a mapping writable after the fact > >>> v3: update driver-specific vm_operations_structs > >>> > >>> Fixes: f91142c62161 ("drm/ttm: nuke VM_MIXEDMAP on BO mappings v3") > >>> Signed-off-by: Felix Kuehling > >>> Signed-off-by: Alex Deucher > >> Reviewed-by: Christian K=C3=B6nig > > Are you planning to push this to drm-misc? > > Yes, just didn't found time yesterday. This is pushed to the wrong tree drm-misc-next-fixes, should have been in drm-misc-fixes. Please be careful with that because every time that goes wrong the script gets confused about which the current tree is, and pushes the wrong tree to linux-next branches. I'm going to hard-reset drm-misc-next-fixes now and hope that's good enough to fix things up (since Thomas is not around all the time for this merge window). -Daniel > > Christian. > > > > > Alex > > > >>> --- > >>> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 3 ++- > >>> drivers/gpu/drm/nouveau/nouveau_gem.c | 3 ++- > >>> drivers/gpu/drm/radeon/radeon_gem.c | 3 ++- > >>> drivers/gpu/drm/ttm/ttm_bo_vm.c | 14 +++++++++++++- > >>> drivers/gpu/drm/vmwgfx/vmwgfx_ttm_glue.c | 1 + > >>> include/drm/ttm/ttm_bo_api.h | 4 ++++ > >>> 6 files changed, 24 insertions(+), 4 deletions(-) > >>> > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/dr= m/amd/amdgpu/amdgpu_gem.c > >>> index b3404c43a911..1aa750a6a5d2 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > >>> @@ -79,7 +79,8 @@ static const struct vm_operations_struct amdgpu_gem= _vm_ops =3D { > >>> .fault =3D amdgpu_gem_fault, > >>> .open =3D ttm_bo_vm_open, > >>> .close =3D ttm_bo_vm_close, > >>> - .access =3D ttm_bo_vm_access > >>> + .access =3D ttm_bo_vm_access, > >>> + .mprotect =3D ttm_bo_vm_mprotect > >>> }; > >>> > >>> static void amdgpu_gem_object_free(struct drm_gem_object *gobj) > >>> diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/= nouveau/nouveau_gem.c > >>> index 5b27845075a1..164ea564bb7a 100644 > >>> --- a/drivers/gpu/drm/nouveau/nouveau_gem.c > >>> +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c > >>> @@ -70,7 +70,8 @@ static const struct vm_operations_struct nouveau_tt= m_vm_ops =3D { > >>> .fault =3D nouveau_ttm_fault, > >>> .open =3D ttm_bo_vm_open, > >>> .close =3D ttm_bo_vm_close, > >>> - .access =3D ttm_bo_vm_access > >>> + .access =3D ttm_bo_vm_access, > >>> + .mprotect =3D ttm_bo_vm_mprotect > >>> }; > >>> > >>> void > >>> diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/ra= deon/radeon_gem.c > >>> index 458f92a70887..c19ad07eb7b5 100644 > >>> --- a/drivers/gpu/drm/radeon/radeon_gem.c > >>> +++ b/drivers/gpu/drm/radeon/radeon_gem.c > >>> @@ -77,7 +77,8 @@ static const struct vm_operations_struct radeon_gem= _vm_ops =3D { > >>> .fault =3D radeon_gem_fault, > >>> .open =3D ttm_bo_vm_open, > >>> .close =3D ttm_bo_vm_close, > >>> - .access =3D ttm_bo_vm_access > >>> + .access =3D ttm_bo_vm_access, > >>> + .mprotect =3D ttm_bo_vm_mprotect > >>> }; > >>> > >>> static void radeon_gem_object_free(struct drm_gem_object *gobj) > >>> diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/tt= m_bo_vm.c > >>> index f56be5bc0861..fb325bad5db6 100644 > >>> --- a/drivers/gpu/drm/ttm/ttm_bo_vm.c > >>> +++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c > >>> @@ -542,17 +542,29 @@ int ttm_bo_vm_access(struct vm_area_struct *vma= , unsigned long addr, > >>> } > >>> EXPORT_SYMBOL(ttm_bo_vm_access); > >>> > >>> +int ttm_bo_vm_mprotect(struct vm_area_struct *vma, unsigned long sta= rt, > >>> + unsigned long end, unsigned long newflags) > >>> +{ > >>> + /* Enforce no COW since would have really strange behavior with= it. */ > >>> + if (is_cow_mapping(newflags) && (newflags & VM_WRITE)) > >>> + return -EINVAL; > >>> + > >>> + return 0; > >>> +} > >>> +EXPORT_SYMBOL(ttm_bo_vm_mprotect); > >>> + > >>> static const struct vm_operations_struct ttm_bo_vm_ops =3D { > >>> .fault =3D ttm_bo_vm_fault, > >>> .open =3D ttm_bo_vm_open, > >>> .close =3D ttm_bo_vm_close, > >>> .access =3D ttm_bo_vm_access, > >>> + .mprotect =3D ttm_bo_vm_mprotect, > >>> }; > >>> > >>> int ttm_bo_mmap_obj(struct vm_area_struct *vma, struct ttm_buffer_= object *bo) > >>> { > >>> /* Enforce no COW since would have really strange behavior wit= h it. */ > >>> - if (is_cow_mapping(vma->vm_flags)) > >>> + if (is_cow_mapping(vma->vm_flags) && (vma->vm_flags & VM_WRITE)= ) > >>> return -EINVAL; > >>> > >>> ttm_bo_get(bo); > >>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_glue.c b/drivers/gpu/d= rm/vmwgfx/vmwgfx_ttm_glue.c > >>> index e6b1f98ec99f..e4bf7dc99320 100644 > >>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_glue.c > >>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_glue.c > >>> @@ -61,6 +61,7 @@ int vmw_mmap(struct file *filp, struct vm_area_stru= ct *vma) > >>> .fault =3D vmw_bo_vm_fault, > >>> .open =3D ttm_bo_vm_open, > >>> .close =3D ttm_bo_vm_close, > >>> + .mprotect =3D ttm_bo_vm_mprotect, > >>> #ifdef CONFIG_TRANSPARENT_HUGEPAGE > >>> .huge_fault =3D vmw_bo_vm_huge_fault, > >>> #endif > >>> diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_ap= i.h > >>> index f681bbdbc698..40eb95875355 100644 > >>> --- a/include/drm/ttm/ttm_bo_api.h > >>> +++ b/include/drm/ttm/ttm_bo_api.h > >>> @@ -605,6 +605,10 @@ void ttm_bo_vm_close(struct vm_area_struct *vma)= ; > >>> > >>> int ttm_bo_vm_access(struct vm_area_struct *vma, unsigned long add= r, > >>> void *buf, int len, int write); > >>> + > >>> +int ttm_bo_vm_mprotect(struct vm_area_struct *vma, unsigned long sta= rt, > >>> + unsigned long end, unsigned long newflags); > >>> + > >>> bool ttm_bo_delayed_delete(struct ttm_device *bdev, bool remove_al= l); > >>> > >>> vm_fault_t ttm_bo_vm_dummy_page(struct vm_fault *vmf, pgprot_t pro= t); > --=20 Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch 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=-13.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 33754C4338F for ; Fri, 23 Jul 2021 08:21:23 +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 B1BCD60E8E for ; Fri, 23 Jul 2021 08:21:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org B1BCD60E8E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 65F596E043; Fri, 23 Jul 2021 08:21:22 +0000 (UTC) Received: from mail-ot1-x32f.google.com (mail-ot1-x32f.google.com [IPv6:2607:f8b0:4864:20::32f]) by gabe.freedesktop.org (Postfix) with ESMTPS id 98A0C6E043 for ; Fri, 23 Jul 2021 08:21:21 +0000 (UTC) Received: by mail-ot1-x32f.google.com with SMTP id x15-20020a05683000cfb02904d1f8b9db81so1264602oto.12 for ; Fri, 23 Jul 2021 01:21:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=dyosij4uetTaOKYJdoRUCx8uK6Y+Pk1yK6Y86bo5prA=; b=RO4UXO6pWy71XWFDt3xQnjNscW97+2ODsznFrEmN3uGp1gb2lRpWXKp5BvEEtYcebN 52QWTWEd7QNTZw6FtkphqyWjotkWjee9B/v0ZmLLn0dMiG8w74t0OBGu+npO11GsReic Zcbo49nL7ZuhTOdsOAA+y5X0RJIjCwm0KYpFk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=dyosij4uetTaOKYJdoRUCx8uK6Y+Pk1yK6Y86bo5prA=; b=SQO2c6QRSIrkeeAV7eTtQWEPDUoTsFXH6pwfyw21xsbOEbDBu12bxaHLOzYmdaMhKc 2VXIN4+L4FABLOryf33/vCQ1sKhwuYTblYf4JkMVe77ed9ljXMgQHIQIEh1ZWcWJnS7+ S7Ty7Z4YC8O8+4jZt7H+iP+zVN9YKM2q6Hr4zKDN5ZV2szPQiBtf9nfXise1Uj0U7DC1 rdfvpv54zuwCyIqSgMtqdbibM5WeYOiWpyQu6tGlsK06cBM0GV0cLZOyw8wXdYzTq/9W 5qRps2W8/e9nKMFU/RTtcGsvu7zAuIRfBYmmmRHIKdvXkjlsKzzLynXqLGutkIoTwsaE chGQ== X-Gm-Message-State: AOAM531ecyXROSFoqu4bXi8+/QeL99SACnNIWuXjiZAZvQ4rIngGLN9l qfNUbevj73PGRRbqSRIBz26Hr4tQ+rt4Em2p59KZWQ== X-Google-Smtp-Source: ABdhPJzRb0LMyGhTtSu3Xw7G5poCanJ1XyxArvodWr/KFw3tPt1FpddaS6wYK1+CVI1/OkWG26UQMZO9V0EM2dZa7i8= X-Received: by 2002:a05:6830:2802:: with SMTP id w2mr2239059otu.303.1627028480891; Fri, 23 Jul 2021 01:21:20 -0700 (PDT) MIME-Version: 1.0 References: <20210712220636.475675-1-Felix.Kuehling@amd.com> <1dd35814-c2bb-6e71-6259-e9d4f77d8969@amd.com> In-Reply-To: <1dd35814-c2bb-6e71-6259-e9d4f77d8969@amd.com> From: Daniel Vetter Date: Fri, 23 Jul 2021 10:21:09 +0200 Message-ID: Subject: Re: [PATCH v3 1/1] drm/ttm: Fix COW check To: =?UTF-8?Q?Christian_K=C3=B6nig?= , Thomas Zimmermann 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: =?UTF-8?Q?Christian_K=C3=B6nig?= , Felix Kuehling , amd-gfx list , Alex Deucher , Maling list - DRI developers , Alex Deucher Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" T24gV2VkLCBKdWwgMTQsIDIwMjEgYXQgMTA6NTEgQU0gQ2hyaXN0aWFuIEvDtm5pZwo8Y2hyaXN0 aWFuLmtvZW5pZ0BhbWQuY29tPiB3cm90ZToKPgo+Cj4KPiBBbSAxMy4wNy4yMSB1bSAxNzoyOCBz Y2hyaWViIEFsZXggRGV1Y2hlcjoKPiA+IE9uIFR1ZSwgSnVsIDEzLCAyMDIxIGF0IDI6NTcgQU0g Q2hyaXN0aWFuIEvDtm5pZwo+ID4gPGNrb2VuaWcubGVpY2h0enVtZXJrZW5AZ21haWwuY29tPiB3 cm90ZToKPiA+Pgo+ID4+Cj4gPj4gQW0gMTMuMDcuMjEgdW0gMDA6MDYgc2NocmllYiBGZWxpeCBL dWVobGluZzoKPiA+Pj4gS0ZEIFRodW5rIG1hcHMgaW52aXNpYmxlIFZSQU0gQk9zIHdpdGggUFJP VF9OT05FLCBNQVBfUFJJVkFURS4KPiA+Pj4gaXNfY293X21hcHBpbmcgcmV0dXJucyB0cnVlIGZv ciB0aGVzZSBtYXBwaW5ncy4gQWRkIGEgY2hlY2sgZm9yCj4gPj4+IHZtX2ZsYWdzICYgVk1fV1JJ VEUgdG8gYXZvaWQgbW1hcCBmYWlsdXJlcyBvbiBwcml2YXRlIHJlYWQtb25seSBvcgo+ID4+PiBQ Uk9UX05PTkUgbWFwcGluZ3MuCj4gPj4+Cj4gPj4+IHYyOiBwcm90ZWN0IGFnYWluc3QgbXByb3Rl Y3QgbWFraW5nIGEgbWFwcGluZyB3cml0YWJsZSBhZnRlciB0aGUgZmFjdAo+ID4+PiB2MzogdXBk YXRlIGRyaXZlci1zcGVjaWZpYyB2bV9vcGVyYXRpb25zX3N0cnVjdHMKPiA+Pj4KPiA+Pj4gRml4 ZXM6IGY5MTE0MmM2MjE2MSAoImRybS90dG06IG51a2UgVk1fTUlYRURNQVAgb24gQk8gbWFwcGlu Z3MgdjMiKQo+ID4+PiBTaWduZWQtb2ZmLWJ5OiBGZWxpeCBLdWVobGluZyA8RmVsaXguS3VlaGxp bmdAYW1kLmNvbT4KPiA+Pj4gU2lnbmVkLW9mZi1ieTogQWxleCBEZXVjaGVyIDxhbGV4YW5kZXIu ZGV1Y2hlckBhbWQuY29tPgo+ID4+IFJldmlld2VkLWJ5OiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJp c3RpYW4ua29lbmlnQGFtZC5jb20+Cj4gPiBBcmUgeW91IHBsYW5uaW5nIHRvIHB1c2ggdGhpcyB0 byBkcm0tbWlzYz8KPgo+IFllcywganVzdCBkaWRuJ3QgZm91bmQgdGltZSB5ZXN0ZXJkYXkuCgpU aGlzIGlzIHB1c2hlZCB0byB0aGUgd3JvbmcgdHJlZSBkcm0tbWlzYy1uZXh0LWZpeGVzLCBzaG91 bGQgaGF2ZSBiZWVuCmluIGRybS1taXNjLWZpeGVzLiBQbGVhc2UgYmUgY2FyZWZ1bCB3aXRoIHRo YXQgYmVjYXVzZSBldmVyeSB0aW1lIHRoYXQKZ29lcyB3cm9uZyB0aGUgc2NyaXB0IGdldHMgY29u ZnVzZWQgYWJvdXQgd2hpY2ggdGhlIGN1cnJlbnQgdHJlZSBpcywKYW5kIHB1c2hlcyB0aGUgd3Jv bmcgdHJlZSB0byBsaW51eC1uZXh0IGJyYW5jaGVzLgoKSSdtIGdvaW5nIHRvIGhhcmQtcmVzZXQg ZHJtLW1pc2MtbmV4dC1maXhlcyBub3cgYW5kIGhvcGUgdGhhdCdzIGdvb2QKZW5vdWdoIHRvIGZp eCB0aGluZ3MgdXAgKHNpbmNlIFRob21hcyBpcyBub3QgYXJvdW5kIGFsbCB0aGUgdGltZSBmb3IK dGhpcyBtZXJnZSB3aW5kb3cpLgotRGFuaWVsCgoKPgo+IENocmlzdGlhbi4KPgo+ID4KPiA+IEFs ZXgKPiA+Cj4gPj4+IC0tLQo+ID4+PiAgICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRn cHVfZ2VtLmMgIHwgIDMgKystCj4gPj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZl YXVfZ2VtLmMgICAgfCAgMyArKy0KPiA+Pj4gICAgZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRl b25fZ2VtLmMgICAgICB8ICAzICsrLQo+ID4+PiAgICBkcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9i b192bS5jICAgICAgICAgIHwgMTQgKysrKysrKysrKysrKy0KPiA+Pj4gICAgZHJpdmVycy9ncHUv ZHJtL3Ztd2dmeC92bXdnZnhfdHRtX2dsdWUuYyB8ICAxICsKPiA+Pj4gICAgaW5jbHVkZS9kcm0v dHRtL3R0bV9ib19hcGkuaCAgICAgICAgICAgICB8ICA0ICsrKysKPiA+Pj4gICAgNiBmaWxlcyBj aGFuZ2VkLCAyNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQo+ID4+Pgo+ID4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jCj4gPj4+IGluZGV4IGIzNDA0YzQzYTkx MS4uMWFhNzUwYTZhNWQyIDEwMDY0NAo+ID4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfZ2VtLmMKPiA+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X2dlbS5jCj4gPj4+IEBAIC03OSw3ICs3OSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg dm1fb3BlcmF0aW9uc19zdHJ1Y3QgYW1kZ3B1X2dlbV92bV9vcHMgPSB7Cj4gPj4+ICAgICAgICAu ZmF1bHQgPSBhbWRncHVfZ2VtX2ZhdWx0LAo+ID4+PiAgICAgICAgLm9wZW4gPSB0dG1fYm9fdm1f b3BlbiwKPiA+Pj4gICAgICAgIC5jbG9zZSA9IHR0bV9ib192bV9jbG9zZSwKPiA+Pj4gLSAgICAg LmFjY2VzcyA9IHR0bV9ib192bV9hY2Nlc3MKPiA+Pj4gKyAgICAgLmFjY2VzcyA9IHR0bV9ib192 bV9hY2Nlc3MsCj4gPj4+ICsgICAgIC5tcHJvdGVjdCA9IHR0bV9ib192bV9tcHJvdGVjdAo+ID4+ PiAgICB9Owo+ID4+Pgo+ID4+PiAgICBzdGF0aWMgdm9pZCBhbWRncHVfZ2VtX29iamVjdF9mcmVl KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29iaikKPiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9u b3V2ZWF1X2dlbS5jCj4gPj4+IGluZGV4IDViMjc4NDUwNzVhMS4uMTY0ZWE1NjRiYjdhIDEwMDY0 NAo+ID4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCj4gPj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKPiA+Pj4gQEAgLTcw LDcgKzcwLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBub3V2 ZWF1X3R0bV92bV9vcHMgPSB7Cj4gPj4+ICAgICAgICAuZmF1bHQgPSBub3V2ZWF1X3R0bV9mYXVs dCwKPiA+Pj4gICAgICAgIC5vcGVuID0gdHRtX2JvX3ZtX29wZW4sCj4gPj4+ICAgICAgICAuY2xv c2UgPSB0dG1fYm9fdm1fY2xvc2UsCj4gPj4+IC0gICAgIC5hY2Nlc3MgPSB0dG1fYm9fdm1fYWNj ZXNzCj4gPj4+ICsgICAgIC5hY2Nlc3MgPSB0dG1fYm9fdm1fYWNjZXNzLAo+ID4+PiArICAgICAu bXByb3RlY3QgPSB0dG1fYm9fdm1fbXByb3RlY3QKPiA+Pj4gICAgfTsKPiA+Pj4KPiA+Pj4gICAg dm9pZAo+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2Vt LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwo+ID4+PiBpbmRleCA0NThm OTJhNzA4ODcuLmMxOWFkMDdlYjdiNSAxMDA2NDQKPiA+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L3JhZGVvbi9yYWRlb25fZ2VtLmMKPiA+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9y YWRlb25fZ2VtLmMKPiA+Pj4gQEAgLTc3LDcgKzc3LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2 bV9vcGVyYXRpb25zX3N0cnVjdCByYWRlb25fZ2VtX3ZtX29wcyA9IHsKPiA+Pj4gICAgICAgIC5m YXVsdCA9IHJhZGVvbl9nZW1fZmF1bHQsCj4gPj4+ICAgICAgICAub3BlbiA9IHR0bV9ib192bV9v cGVuLAo+ID4+PiAgICAgICAgLmNsb3NlID0gdHRtX2JvX3ZtX2Nsb3NlLAo+ID4+PiAtICAgICAu YWNjZXNzID0gdHRtX2JvX3ZtX2FjY2Vzcwo+ID4+PiArICAgICAuYWNjZXNzID0gdHRtX2JvX3Zt X2FjY2VzcywKPiA+Pj4gKyAgICAgLm1wcm90ZWN0ID0gdHRtX2JvX3ZtX21wcm90ZWN0Cj4gPj4+ ICAgIH07Cj4gPj4+Cj4gPj4+ICAgIHN0YXRpYyB2b2lkIHJhZGVvbl9nZW1fb2JqZWN0X2ZyZWUo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqKQo+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3R0bS90dG1fYm9fdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3ZtLmMK PiA+Pj4gaW5kZXggZjU2YmU1YmMwODYxLi5mYjMyNWJhZDVkYjYgMTAwNjQ0Cj4gPj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3ZtLmMKPiA+Pj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL3R0bS90dG1fYm9fdm0uYwo+ID4+PiBAQCAtNTQyLDE3ICs1NDIsMjkgQEAgaW50IHR0bV9i b192bV9hY2Nlc3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRk ciwKPiA+Pj4gICAgfQo+ID4+PiAgICBFWFBPUlRfU1lNQk9MKHR0bV9ib192bV9hY2Nlc3MpOwo+ ID4+Pgo+ID4+PiAraW50IHR0bV9ib192bV9tcHJvdGVjdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgbmV3ZmxhZ3MpCj4gPj4+ICt7Cj4gPj4+ICsg ICAgIC8qIEVuZm9yY2Ugbm8gQ09XIHNpbmNlIHdvdWxkIGhhdmUgcmVhbGx5IHN0cmFuZ2UgYmVo YXZpb3Igd2l0aCBpdC4gKi8KPiA+Pj4gKyAgICAgaWYgKGlzX2Nvd19tYXBwaW5nKG5ld2ZsYWdz KSAmJiAobmV3ZmxhZ3MgJiBWTV9XUklURSkpCj4gPj4+ICsgICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7Cj4gPj4+ICsKPiA+Pj4gKyAgICAgcmV0dXJuIDA7Cj4gPj4+ICt9Cj4gPj4+ICtFWFBP UlRfU1lNQk9MKHR0bV9ib192bV9tcHJvdGVjdCk7Cj4gPj4+ICsKPiA+Pj4gICAgc3RhdGljIGNv bnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB0dG1fYm9fdm1fb3BzID0gewo+ID4+PiAg ICAgICAgLmZhdWx0ID0gdHRtX2JvX3ZtX2ZhdWx0LAo+ID4+PiAgICAgICAgLm9wZW4gPSB0dG1f Ym9fdm1fb3BlbiwKPiA+Pj4gICAgICAgIC5jbG9zZSA9IHR0bV9ib192bV9jbG9zZSwKPiA+Pj4g ICAgICAgIC5hY2Nlc3MgPSB0dG1fYm9fdm1fYWNjZXNzLAo+ID4+PiArICAgICAubXByb3RlY3Qg PSB0dG1fYm9fdm1fbXByb3RlY3QsCj4gPj4+ICAgIH07Cj4gPj4+Cj4gPj4+ICAgIGludCB0dG1f Ym9fbW1hcF9vYmooc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB0dG1fYnVmZmVy X29iamVjdCAqYm8pCj4gPj4+ICAgIHsKPiA+Pj4gICAgICAgIC8qIEVuZm9yY2Ugbm8gQ09XIHNp bmNlIHdvdWxkIGhhdmUgcmVhbGx5IHN0cmFuZ2UgYmVoYXZpb3Igd2l0aCBpdC4gKi8KPiA+Pj4g LSAgICAgaWYgKGlzX2Nvd19tYXBwaW5nKHZtYS0+dm1fZmxhZ3MpKQo+ID4+PiArICAgICBpZiAo aXNfY293X21hcHBpbmcodm1hLT52bV9mbGFncykgJiYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklU RSkpCj4gPj4+ICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4+Pgo+ID4+PiAgICAg ICAgdHRtX2JvX2dldChibyk7Cj4gPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13 Z2Z4L3Ztd2dmeF90dG1fZ2x1ZS5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfdHRt X2dsdWUuYwo+ID4+PiBpbmRleCBlNmIxZjk4ZWM5OWYuLmU0YmY3ZGM5OTMyMCAxMDA2NDQKPiA+ Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfdHRtX2dsdWUuYwo+ID4+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF90dG1fZ2x1ZS5jCj4gPj4+IEBAIC02 MSw2ICs2MSw3IEBAIGludCB2bXdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpCj4gPj4+ICAgICAgICAgICAgICAgIC5mYXVsdCA9IHZtd19ib192bV9m YXVsdCwKPiA+Pj4gICAgICAgICAgICAgICAgLm9wZW4gPSB0dG1fYm9fdm1fb3BlbiwKPiA+Pj4g ICAgICAgICAgICAgICAgLmNsb3NlID0gdHRtX2JvX3ZtX2Nsb3NlLAo+ID4+PiArICAgICAgICAg ICAgIC5tcHJvdGVjdCA9IHR0bV9ib192bV9tcHJvdGVjdCwKPiA+Pj4gICAgI2lmZGVmIENPTkZJ R19UUkFOU1BBUkVOVF9IVUdFUEFHRQo+ID4+PiAgICAgICAgICAgICAgICAuaHVnZV9mYXVsdCA9 IHZtd19ib192bV9odWdlX2ZhdWx0LAo+ID4+PiAgICAjZW5kaWYKPiA+Pj4gZGlmZiAtLWdpdCBh L2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fYXBpLmggYi9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2Fw aS5oCj4gPj4+IGluZGV4IGY2ODFiYmRiYzY5OC4uNDBlYjk1ODc1MzU1IDEwMDY0NAo+ID4+PiAt LS0gYS9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2FwaS5oCj4gPj4+ICsrKyBiL2luY2x1ZGUvZHJt L3R0bS90dG1fYm9fYXBpLmgKPiA+Pj4gQEAgLTYwNSw2ICs2MDUsMTAgQEAgdm9pZCB0dG1fYm9f dm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ID4+Pgo+ID4+PiAgICBpbnQg dHRtX2JvX3ZtX2FjY2VzcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9u ZyBhZGRyLAo+ID4+PiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50 IHdyaXRlKTsKPiA+Pj4gKwo+ID4+PiAraW50IHR0bV9ib192bV9tcHJvdGVjdChzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKPiA+Pj4gKyAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgbmV3ZmxhZ3MpOwo+ID4+ PiArCj4gPj4+ICAgIGJvb2wgdHRtX2JvX2RlbGF5ZWRfZGVsZXRlKHN0cnVjdCB0dG1fZGV2aWNl ICpiZGV2LCBib29sIHJlbW92ZV9hbGwpOwo+ID4+Pgo+ID4+PiAgICB2bV9mYXVsdF90IHR0bV9i b192bV9kdW1teV9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBwZ3Byb3RfdCBwcm90KTsKPgoK Ci0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpo dHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1n ZngK