From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no 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 0A61DC4727E for ; Sat, 3 Oct 2020 09:40:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 80AE2206CD for ; Sat, 3 Oct 2020 09:40:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=ffwll.ch header.i=@ffwll.ch header.b="GL35iCc9" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725827AbgJCJkf (ORCPT ); Sat, 3 Oct 2020 05:40:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34168 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725681AbgJCJke (ORCPT ); Sat, 3 Oct 2020 05:40:34 -0400 Received: from mail-ot1-x344.google.com (mail-ot1-x344.google.com [IPv6:2607:f8b0:4864:20::344]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4DD96C0613E8 for ; Sat, 3 Oct 2020 02:40:34 -0700 (PDT) Received: by mail-ot1-x344.google.com with SMTP id s66so3852954otb.2 for ; Sat, 03 Oct 2020 02:40:34 -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=1IZAi5s6+kebXuKy30pJzhrn3uVlK6wzZN8mckpc+wk=; b=GL35iCc9L9oiUfbl52pEr/agxgzU4rhePYOaPgaSpdvfft2Ih+b6BO9rUrVs+VKESO h3krhGRnnJ87U/QwQ78vNhd79cC2ElpmbWWAUdHmo0V6B+fgotJnWqTv6/OMfhxSBxEB BEX9HN1OATqeSZ+sY31qtk7NPPktObx69lSig= 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=1IZAi5s6+kebXuKy30pJzhrn3uVlK6wzZN8mckpc+wk=; b=Uw8iYBDituPxl1hFwTIOxINEjYHEVU4aEbq3vbh3it+6hbPHc13j+g+oh84+bysOZh Gkboy9R8nMGo2nTq29dLhVYiixrR0IgSMhnn2wvNloVG1oT5oCbqr9NKAiSuYzOtT13+ /yHprHskRJM/CnpQ0q35CbZ+A958g4wldPgQJwdPercAm4UH2tr6NKbzVDlkQpkk/Yi4 4sFBJIj0vYczdMx/5dvpR71IuoBVyk0tdLE6AIZIhp7fLOvKjcklRojFEy9MpiS/v2PG T6/QAgPQF1j8sYf2XFQsZKcXNFpYhYLbZT7RNgGsplqmxE/uH/5XD/zy1eyWHcZo4+Ho Ln9w== X-Gm-Message-State: AOAM532xWxvsASlmnTAmTUOXlfilk0BZLoH+mpDC+Ki/mX+J7FnUuvOs NW2fpuiVbBku3hOJENdQarO+Nha19OtBQYiLGViaGw== X-Google-Smtp-Source: ABdhPJyQ8w5gNa/gr9PqCnmPBfR+rJ2mhoqpvlr+kvRInvo5nifYfALu47116jzszjdcGvv+jDhvijH5X5aOBGv6DWE= X-Received: by 2002:a05:6830:11d8:: with SMTP id v24mr504776otq.188.1601718033491; Sat, 03 Oct 2020 02:40:33 -0700 (PDT) MIME-Version: 1.0 References: <20201002175303.390363-1-daniel.vetter@ffwll.ch> <20201002175303.390363-2-daniel.vetter@ffwll.ch> <20201002180603.GL9916@ziepe.ca> <20201002233118.GM9916@ziepe.ca> In-Reply-To: <20201002233118.GM9916@ziepe.ca> From: Daniel Vetter Date: Sat, 3 Oct 2020 11:40:22 +0200 Message-ID: Subject: Re: [PATCH 2/2] mm/frame-vec: use FOLL_LONGTERM To: Jason Gunthorpe Cc: DRI Development , LKML , Daniel Vetter , Andrew Morton , John Hubbard , =?UTF-8?B?SsOpcsO0bWUgR2xpc3Nl?= , Jan Kara , Dan Williams , Linux MM , Linux ARM , Pawel Osciak , Marek Szyprowski , Kyungmin Park , Tomasz Figa , Inki Dae , Joonyoung Shim , Seung-Woo Kim , linux-samsung-soc , "open list:DMA BUFFER SHARING FRAMEWORK" , Oded Gabbay Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, Oct 3, 2020 at 1:31 AM Jason Gunthorpe wrote: > > On Fri, Oct 02, 2020 at 08:16:48PM +0200, Daniel Vetter wrote: > > On Fri, Oct 2, 2020 at 8:06 PM Jason Gunthorpe wrote: > > > On Fri, Oct 02, 2020 at 07:53:03PM +0200, Daniel Vetter wrote: > > > > For $reasons I've stumbled over this code and I'm not sure the chan= ge > > > > to the new gup functions in 55a650c35fea ("mm/gup: frame_vector: > > > > convert get_user_pages() --> pin_user_pages()") was entirely correc= t. > > > > > > > > This here is used for long term buffers (not just quick I/O) like > > > > RDMA, and John notes this in his patch. But I thought the rule for > > > > these is that they need to add FOLL_LONGTERM, which John's patch > > > > didn't do. > > > > > > > > There is already a dax specific check (added in b7f0554a56f2 ("mm: > > > > fail get_vaddr_frames() for filesystem-dax mappings")), so this see= ms > > > > like the prudent thing to do. > > > > > > > > Signed-off-by: Daniel Vetter > > > > Cc: Andrew Morton > > > > Cc: John Hubbard > > > > Cc: J=C3=A9r=C3=B4me Glisse > > > > Cc: Jan Kara > > > > Cc: Dan Williams > > > > Cc: linux-mm@kvack.org > > > > Cc: linux-arm-kernel@lists.infradead.org > > > > Cc: linux-samsung-soc@vger.kernel.org > > > > Cc: linux-media@vger.kernel.org > > > > Hi all, > > > > > > > > I stumbled over this and figured typing this patch can't hurt. Real= ly > > > > just to maybe learn a few things about how gup/pup is supposed to b= e > > > > used (we have a bit of that in drivers/gpu), this here isn't really > > > > ralated to anything I'm doing. > > > > > > FOLL_FORCE is a pretty big clue it should be FOLL_LONGTERM, IMHO > > > > Since you're here ... I've noticed that ib sets FOLL_FORCE when the ib > > verb access mode indicates possible writes. I'm not really clear on > > why FOLL_WRITE isn't enough any why you need to be able to write > > through a vma that's write protected currently. > > Ah, FOLL_FORCE | FOLL_WRITE means *read* confusingly enough, and the > only reason you'd want this version for read is if you are doing > longterm stuff. I wrote about this recently: > > https://lore.kernel.org/linux-mm/20200928235739.GU9916@ziepe.ca/ Ah, so essentially it serves as a FOLL_GET_COW_ISSUES_OUT_OF_MY_WAY. I think documentation for this, and/or just automatically adding the flag set combination would be really good. But I see John is already on top of that it seems. Thanks for the explainer. > > > Since every driver does this wrong anything that uses this is creatin= g > > > terrifying security issues. > > > > > > IMHO this whole API should be deleted :( > > > > Yeah that part I just tried to conveniently ignore. I guess this dates > > back to a time when ioremaps where at best fixed, and there wasn't > > anything like a gpu driver dynamically managing vram around, resulting > > in random entirely unrelated things possibly being mapped to that set > > of pfns. > > No, it was always wrong. Prior to GPU like cases the lifetime of the > PTE was tied to the vma and when the vma becomes free the driver can > move the things in the PTEs to 'free'. Easy to trigger use-after-free > issues and devices like RDMA have security contexts attached to these > PTEs so it becomes a serious security bug to do something like this. > > > The underlying follow_pfn is also used in other places within > > drivers/media, so this doesn't seem to be an accident, but actually > > intentional. > > Looking closely, there are very few users, most *seem* pointless, but > maybe there is a crazy reason? > > The sequence > get_vaddr_frames(); > frame_vector_to_pages(); > sg_alloc_table_from_pages(); > > Should be written > pin_user_pages_fast(FOLL_LONGTERM); > sg_alloc_table_from_pages() Ok, that takes care of exynos and habanalabs. I'll try and wack together a patch for exynos, that driver is a bit special - first arm soc driver and we merged it fully well aware that it's full of warts, just as a show to make it clear that drivers/gpu is also interested in small gpu drivers ... > There is some 'special' code in frame_vector_to_pages() that tries to > get a struct page for things from a VM_IO or VM_PFNMAP... > > Oh snap, that is *completely* broken! If the first VMA is IO|PFNMAP > then get_vaddr_frames() iterates over all VMAs in the range, of any > kind and extracts the PTEs then blindly references them! This means it > can be used to use after free normal RAM struct pages!! Gah! > > Wow. Okay. That has to go. > > So, I *think* we can assume there is no sane cases where > frame_vector_to_pages() succeeds but pin_user_pages() wasn't called. > > That means the users here: > - habanalabs: Hey Oded can you fix this up? > > - gpu/exynos: Daniel can you get someone there to stop using it? > > - media/videobuf via vb2_dma_sg_get_userptr() > > Should all be switched to the standard pin_user_pages sequence > above. > > That leaves the only interesting places as vb2_dc_get_userptr() and > vb2_vmalloc_get_userptr() which both completely fail to follow the > REQUIRED behavior in the function's comment about checking PTEs. It > just DMA maps them. Badly broken. > > Guessing this hackery is for some embedded P2P DMA transfer? Yeah, see also the follow_pfn trickery in videobuf_dma_contig_user_get(), I think this is fully intentional and userspace abi we can't break :-/ It's mildly better than just sharing phys_addr_t through userspace and blindly trusting it, which is what all the out-of-tree crap did, but only mildly. > After he three places above should use pin_user_pages_fast(), then > this whole broken API should be moved into videobuf2-memops.c and a > big fat "THIS DOESN'T WORK" stuck on it. > > videobuf2 should probably use P2P DMA buf for this instead. Yup this should be done with dma_buf instead, and v4l has that. But old uapi and all that. This is why I said we might need a new VM_DYNAMIC_PFNMAP or so, to make follow_pfn not resolve this in the case where the driver manages the underlying iomem range (or whatever it is) dynamically and moves buffer objects around, like drm drivers do. But I looked, and we've run out of vma->vm_flags :-( The other problem is that I also have no real working clue about all the VM_* flags and what they all mean, and whether drm drivers set the right ones in all cases (they probably don't, but oh well). Documentation for this stuff in headers is a bit thin at times. -Daniel --=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=-6.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no 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 19C5EC4727E for ; Sat, 3 Oct 2020 09:42:08 +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 AC7E8206C9 for ; Sat, 3 Oct 2020 09:42:07 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="fHOZACyf"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ffwll.ch header.i=@ffwll.ch header.b="GL35iCc9" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AC7E8206C9 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=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-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=psj/3Q5GrJoSXQxyaf9Fe459k5KK3dpKdS/MOZIzGTc=; b=fHOZACyfEuqcr48Vrn0w1J7vq QmGGrUaH6rCYbYNf0J5s/XZhXOFHN29P293uTZgN178mU1dCm5w/9DyvPQHwrj1APiZQzh4Ah0T4w FGLZdSqlBSihwL4JYMmLIY5DVyuoNf4AblpejwUXQ3pOWakezdpZ1pVlShDTeXu5UIPhSVjY41//z U6sU39Wa8eGBxbBDZ6Av7Hn0BHu4B+VMVYJgYvEkOVMjKSOaRYZBdHso46i6C0rchdLhNDjs/vdq7 wJCZwdE6xC+ULeZiTalxrUwv9hryg6WvhH1U0Hz/+g1bNegCmeTE0zSExXI7hKp8cksHLQODV9spZ z5X+t76dw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kOe1v-00017p-CL; Sat, 03 Oct 2020 09:40:39 +0000 Received: from mail-ot1-x342.google.com ([2607:f8b0:4864:20::342]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kOe1s-00016Q-0W for linux-arm-kernel@lists.infradead.org; Sat, 03 Oct 2020 09:40:37 +0000 Received: by mail-ot1-x342.google.com with SMTP id s66so3852955otb.2 for ; Sat, 03 Oct 2020 02:40:35 -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=1IZAi5s6+kebXuKy30pJzhrn3uVlK6wzZN8mckpc+wk=; b=GL35iCc9L9oiUfbl52pEr/agxgzU4rhePYOaPgaSpdvfft2Ih+b6BO9rUrVs+VKESO h3krhGRnnJ87U/QwQ78vNhd79cC2ElpmbWWAUdHmo0V6B+fgotJnWqTv6/OMfhxSBxEB BEX9HN1OATqeSZ+sY31qtk7NPPktObx69lSig= 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=1IZAi5s6+kebXuKy30pJzhrn3uVlK6wzZN8mckpc+wk=; b=d2QjywWnO0eAa813mmkR2CBhDHhARrtZjg1oAmaR9dYr8OzG8R3VKQ7hWLXkchJ08w pDFyIuzolQWT8LZVbPpXdikW9hdrEIRwlwWm0SCYeWYpUKMFk5xsDTa+8d144L4ljX13 9IeYoJrYS7r4mjuowb1B+GRSflnnsT4Gw4BqlvE+597JVw/DpvmN9vskoakJW2/uwt0G 4rm38MueeP69viF3evkAsIR9rF5sjqs7AteMzbU4uUNafhsni7I98wfMSdK4yV06yeTF NIhO38U27vjNYPIASRafOtgVgn6dPTyLuLBsmQtTo2fpAvyk9+Ob4Nb25/XoyEciVqT9 PGCA== X-Gm-Message-State: AOAM531+ZdOnbwPexh+eq1WP6zKoSeU2eJEVvy2pKmKP63SXdXlACuiV 6l+6/4G33hBKArMnkzuuNPsGS5ixmzaKSuzr1C5d+Q== X-Google-Smtp-Source: ABdhPJyQ8w5gNa/gr9PqCnmPBfR+rJ2mhoqpvlr+kvRInvo5nifYfALu47116jzszjdcGvv+jDhvijH5X5aOBGv6DWE= X-Received: by 2002:a05:6830:11d8:: with SMTP id v24mr504776otq.188.1601718033491; Sat, 03 Oct 2020 02:40:33 -0700 (PDT) MIME-Version: 1.0 References: <20201002175303.390363-1-daniel.vetter@ffwll.ch> <20201002175303.390363-2-daniel.vetter@ffwll.ch> <20201002180603.GL9916@ziepe.ca> <20201002233118.GM9916@ziepe.ca> In-Reply-To: <20201002233118.GM9916@ziepe.ca> From: Daniel Vetter Date: Sat, 3 Oct 2020 11:40:22 +0200 Message-ID: Subject: Re: [PATCH 2/2] mm/frame-vec: use FOLL_LONGTERM To: Jason Gunthorpe X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201003_054036_283341_C7FA2042 X-CRM114-Status: GOOD ( 46.73 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Oded Gabbay , Inki Dae , linux-samsung-soc , Jan Kara , Joonyoung Shim , Pawel Osciak , John Hubbard , Seung-Woo Kim , LKML , DRI Development , Tomasz Figa , Kyungmin Park , Linux MM , =?UTF-8?B?SsOpcsO0bWUgR2xpc3Nl?= , Daniel Vetter , Andrew Morton , "open list:DMA BUFFER SHARING FRAMEWORK" , Dan Williams , Linux ARM , Marek Szyprowski Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gU2F0LCBPY3QgMywgMjAyMCBhdCAxOjMxIEFNIEphc29uIEd1bnRob3JwZSA8amdnQHppZXBl LmNhPiB3cm90ZToKPgo+IE9uIEZyaSwgT2N0IDAyLCAyMDIwIGF0IDA4OjE2OjQ4UE0gKzAyMDAs IERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gPiBPbiBGcmksIE9jdCAyLCAyMDIwIGF0IDg6MDYgUE0g SmFzb24gR3VudGhvcnBlIDxqZ2dAemllcGUuY2E+IHdyb3RlOgo+ID4gPiBPbiBGcmksIE9jdCAw MiwgMjAyMCBhdCAwNzo1MzowM1BNICswMjAwLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ID4gPiA+ IEZvciAkcmVhc29ucyBJJ3ZlIHN0dW1ibGVkIG92ZXIgdGhpcyBjb2RlIGFuZCBJJ20gbm90IHN1 cmUgdGhlIGNoYW5nZQo+ID4gPiA+IHRvIHRoZSBuZXcgZ3VwIGZ1bmN0aW9ucyBpbiA1NWE2NTBj MzVmZWEgKCJtbS9ndXA6IGZyYW1lX3ZlY3RvcjoKPiA+ID4gPiBjb252ZXJ0IGdldF91c2VyX3Bh Z2VzKCkgLS0+IHBpbl91c2VyX3BhZ2VzKCkiKSB3YXMgZW50aXJlbHkgY29ycmVjdC4KPiA+ID4g Pgo+ID4gPiA+IFRoaXMgaGVyZSBpcyB1c2VkIGZvciBsb25nIHRlcm0gYnVmZmVycyAobm90IGp1 c3QgcXVpY2sgSS9PKSBsaWtlCj4gPiA+ID4gUkRNQSwgYW5kIEpvaG4gbm90ZXMgdGhpcyBpbiBo aXMgcGF0Y2guIEJ1dCBJIHRob3VnaHQgdGhlIHJ1bGUgZm9yCj4gPiA+ID4gdGhlc2UgaXMgdGhh dCB0aGV5IG5lZWQgdG8gYWRkIEZPTExfTE9OR1RFUk0sIHdoaWNoIEpvaG4ncyBwYXRjaAo+ID4g PiA+IGRpZG4ndCBkby4KPiA+ID4gPgo+ID4gPiA+IFRoZXJlIGlzIGFscmVhZHkgYSBkYXggc3Bl Y2lmaWMgY2hlY2sgKGFkZGVkIGluIGI3ZjA1NTRhNTZmMiAoIm1tOgo+ID4gPiA+IGZhaWwgZ2V0 X3ZhZGRyX2ZyYW1lcygpIGZvciBmaWxlc3lzdGVtLWRheCBtYXBwaW5ncyIpKSwgc28gdGhpcyBz ZWVtcwo+ID4gPiA+IGxpa2UgdGhlIHBydWRlbnQgdGhpbmcgdG8gZG8uCj4gPiA+ID4KPiA+ID4g PiBTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNvbT4K PiA+ID4gPiBDYzogQW5kcmV3IE1vcnRvbiA8YWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZz4KPiA+ ID4gPiBDYzogSm9obiBIdWJiYXJkIDxqaHViYmFyZEBudmlkaWEuY29tPgo+ID4gPiA+IENjOiBK w6lyw7RtZSBHbGlzc2UgPGpnbGlzc2VAcmVkaGF0LmNvbT4KPiA+ID4gPiBDYzogSmFuIEthcmEg PGphY2tAc3VzZS5jej4KPiA+ID4gPiBDYzogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0Bp bnRlbC5jb20+Cj4gPiA+ID4gQ2M6IGxpbnV4LW1tQGt2YWNrLm9yZwo+ID4gPiA+IENjOiBsaW51 eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKPiA+ID4gPiBDYzogbGludXgtc2Ftc3Vu Zy1zb2NAdmdlci5rZXJuZWwub3JnCj4gPiA+ID4gQ2M6IGxpbnV4LW1lZGlhQHZnZXIua2VybmVs Lm9yZwo+ID4gPiA+IEhpIGFsbCwKPiA+ID4gPgo+ID4gPiA+IEkgc3R1bWJsZWQgb3ZlciB0aGlz IGFuZCBmaWd1cmVkIHR5cGluZyB0aGlzIHBhdGNoIGNhbid0IGh1cnQuIFJlYWxseQo+ID4gPiA+ IGp1c3QgdG8gbWF5YmUgbGVhcm4gYSBmZXcgdGhpbmdzIGFib3V0IGhvdyBndXAvcHVwIGlzIHN1 cHBvc2VkIHRvIGJlCj4gPiA+ID4gdXNlZCAod2UgaGF2ZSBhIGJpdCBvZiB0aGF0IGluIGRyaXZl cnMvZ3B1KSwgdGhpcyBoZXJlIGlzbid0IHJlYWxseQo+ID4gPiA+IHJhbGF0ZWQgdG8gYW55dGhp bmcgSSdtIGRvaW5nLgo+ID4gPgo+ID4gPiBGT0xMX0ZPUkNFIGlzIGEgcHJldHR5IGJpZyBjbHVl IGl0IHNob3VsZCBiZSBGT0xMX0xPTkdURVJNLCBJTUhPCj4gPgo+ID4gU2luY2UgeW91J3JlIGhl cmUgLi4uIEkndmUgbm90aWNlZCB0aGF0IGliIHNldHMgRk9MTF9GT1JDRSB3aGVuIHRoZSBpYgo+ ID4gdmVyYiBhY2Nlc3MgbW9kZSBpbmRpY2F0ZXMgcG9zc2libGUgd3JpdGVzLiBJJ20gbm90IHJl YWxseSBjbGVhciBvbgo+ID4gd2h5IEZPTExfV1JJVEUgaXNuJ3QgZW5vdWdoIGFueSB3aHkgeW91 IG5lZWQgdG8gYmUgYWJsZSB0byB3cml0ZQo+ID4gdGhyb3VnaCBhIHZtYSB0aGF0J3Mgd3JpdGUg cHJvdGVjdGVkIGN1cnJlbnRseS4KPgo+IEFoLCBGT0xMX0ZPUkNFIHwgRk9MTF9XUklURSBtZWFu cyAqcmVhZCogY29uZnVzaW5nbHkgZW5vdWdoLCBhbmQgdGhlCj4gb25seSByZWFzb24geW91J2Qg d2FudCB0aGlzIHZlcnNpb24gZm9yIHJlYWQgaXMgaWYgeW91IGFyZSBkb2luZwo+IGxvbmd0ZXJt IHN0dWZmLiBJIHdyb3RlIGFib3V0IHRoaXMgcmVjZW50bHk6Cj4KPiBodHRwczovL2xvcmUua2Vy bmVsLm9yZy9saW51eC1tbS8yMDIwMDkyODIzNTczOS5HVTk5MTZAemllcGUuY2EvCgpBaCwgc28g ZXNzZW50aWFsbHkgaXQgc2VydmVzIGFzIGEgRk9MTF9HRVRfQ09XX0lTU1VFU19PVVRfT0ZfTVlf V0FZLiBJCnRoaW5rIGRvY3VtZW50YXRpb24gZm9yIHRoaXMsIGFuZC9vciBqdXN0IGF1dG9tYXRp Y2FsbHkgYWRkaW5nIHRoZQpmbGFnIHNldCBjb21iaW5hdGlvbiB3b3VsZCBiZSByZWFsbHkgZ29v ZC4gQnV0IEkgc2VlIEpvaG4gaXMgYWxyZWFkeQpvbiB0b3Agb2YgdGhhdCBpdCBzZWVtcy4KClRo YW5rcyBmb3IgdGhlIGV4cGxhaW5lci4KCj4gPiA+IFNpbmNlIGV2ZXJ5IGRyaXZlciBkb2VzIHRo aXMgd3JvbmcgYW55dGhpbmcgdGhhdCB1c2VzIHRoaXMgaXMgY3JlYXRpbmcKPiA+ID4gdGVycmlm eWluZyBzZWN1cml0eSBpc3N1ZXMuCj4gPiA+Cj4gPiA+IElNSE8gdGhpcyB3aG9sZSBBUEkgc2hv dWxkIGJlIGRlbGV0ZWQgOigKPiA+Cj4gPiBZZWFoIHRoYXQgcGFydCBJIGp1c3QgdHJpZWQgdG8g Y29udmVuaWVudGx5IGlnbm9yZS4gSSBndWVzcyB0aGlzIGRhdGVzCj4gPiBiYWNrIHRvIGEgdGlt ZSB3aGVuIGlvcmVtYXBzIHdoZXJlIGF0IGJlc3QgZml4ZWQsIGFuZCB0aGVyZSB3YXNuJ3QKPiA+ IGFueXRoaW5nIGxpa2UgYSBncHUgZHJpdmVyIGR5bmFtaWNhbGx5IG1hbmFnaW5nIHZyYW0gYXJv dW5kLCByZXN1bHRpbmcKPiA+IGluIHJhbmRvbSBlbnRpcmVseSB1bnJlbGF0ZWQgdGhpbmdzIHBv c3NpYmx5IGJlaW5nIG1hcHBlZCB0byB0aGF0IHNldAo+ID4gb2YgcGZucy4KPgo+IE5vLCBpdCB3 YXMgYWx3YXlzIHdyb25nLiBQcmlvciB0byBHUFUgbGlrZSBjYXNlcyB0aGUgbGlmZXRpbWUgb2Yg dGhlCj4gUFRFIHdhcyB0aWVkIHRvIHRoZSB2bWEgYW5kIHdoZW4gdGhlIHZtYSBiZWNvbWVzIGZy ZWUgdGhlIGRyaXZlciBjYW4KPiBtb3ZlIHRoZSB0aGluZ3MgaW4gdGhlIFBURXMgdG8gJ2ZyZWUn LiBFYXN5IHRvIHRyaWdnZXIgdXNlLWFmdGVyLWZyZWUKPiBpc3N1ZXMgYW5kIGRldmljZXMgbGlr ZSBSRE1BIGhhdmUgc2VjdXJpdHkgY29udGV4dHMgYXR0YWNoZWQgdG8gdGhlc2UKPiBQVEVzIHNv IGl0IGJlY29tZXMgYSBzZXJpb3VzIHNlY3VyaXR5IGJ1ZyB0byBkbyBzb21ldGhpbmcgbGlrZSB0 aGlzLgo+Cj4gPiBUaGUgdW5kZXJseWluZyBmb2xsb3dfcGZuIGlzIGFsc28gdXNlZCBpbiBvdGhl ciBwbGFjZXMgd2l0aGluCj4gPiBkcml2ZXJzL21lZGlhLCBzbyB0aGlzIGRvZXNuJ3Qgc2VlbSB0 byBiZSBhbiBhY2NpZGVudCwgYnV0IGFjdHVhbGx5Cj4gPiBpbnRlbnRpb25hbC4KPgo+IExvb2tp bmcgY2xvc2VseSwgdGhlcmUgYXJlIHZlcnkgZmV3IHVzZXJzLCBtb3N0ICpzZWVtKiBwb2ludGxl c3MsIGJ1dAo+IG1heWJlIHRoZXJlIGlzIGEgY3JhenkgcmVhc29uPwo+Cj4gVGhlIHNlcXVlbmNl Cj4gICBnZXRfdmFkZHJfZnJhbWVzKCk7Cj4gICBmcmFtZV92ZWN0b3JfdG9fcGFnZXMoKTsKPiAg IHNnX2FsbG9jX3RhYmxlX2Zyb21fcGFnZXMoKTsKPgo+IFNob3VsZCBiZSB3cml0dGVuCj4gICBw aW5fdXNlcl9wYWdlc19mYXN0KEZPTExfTE9OR1RFUk0pOwo+ICAgc2dfYWxsb2NfdGFibGVfZnJv bV9wYWdlcygpCgpPaywgdGhhdCB0YWtlcyBjYXJlIG9mIGV4eW5vcyBhbmQgaGFiYW5hbGFicy4g SSdsbCB0cnkgYW5kIHdhY2sKdG9nZXRoZXIgYSBwYXRjaCBmb3IgZXh5bm9zLCB0aGF0IGRyaXZl ciBpcyBhIGJpdCBzcGVjaWFsIC0gZmlyc3QgYXJtCnNvYyBkcml2ZXIgYW5kIHdlIG1lcmdlZCBp dCBmdWxseSB3ZWxsIGF3YXJlIHRoYXQgaXQncyBmdWxsIG9mIHdhcnRzLApqdXN0IGFzIGEgc2hv dyB0byBtYWtlIGl0IGNsZWFyIHRoYXQgZHJpdmVycy9ncHUgaXMgYWxzbyBpbnRlcmVzdGVkIGlu CnNtYWxsIGdwdSBkcml2ZXJzIC4uLgoKPiBUaGVyZSBpcyBzb21lICdzcGVjaWFsJyBjb2RlIGlu IGZyYW1lX3ZlY3Rvcl90b19wYWdlcygpIHRoYXQgdHJpZXMgdG8KPiBnZXQgYSBzdHJ1Y3QgcGFn ZSBmb3IgdGhpbmdzIGZyb20gYSBWTV9JTyBvciBWTV9QRk5NQVAuLi4KPgo+IE9oIHNuYXAsIHRo YXQgaXMgKmNvbXBsZXRlbHkqIGJyb2tlbiEgSWYgdGhlIGZpcnN0IFZNQSBpcyBJT3xQRk5NQVAK PiB0aGVuIGdldF92YWRkcl9mcmFtZXMoKSBpdGVyYXRlcyBvdmVyIGFsbCBWTUFzIGluIHRoZSBy YW5nZSwgb2YgYW55Cj4ga2luZCBhbmQgZXh0cmFjdHMgdGhlIFBURXMgdGhlbiBibGluZGx5IHJl ZmVyZW5jZXMgdGhlbSEgVGhpcyBtZWFucyBpdAo+IGNhbiBiZSB1c2VkIHRvIHVzZSBhZnRlciBm cmVlIG5vcm1hbCBSQU0gc3RydWN0IHBhZ2VzISEgR2FoIQo+Cj4gV293LiBPa2F5LiBUaGF0IGhh cyB0byBnby4KPgo+IFNvLCBJICp0aGluayogd2UgY2FuIGFzc3VtZSB0aGVyZSBpcyBubyBzYW5l IGNhc2VzIHdoZXJlCj4gZnJhbWVfdmVjdG9yX3RvX3BhZ2VzKCkgc3VjY2VlZHMgYnV0IHBpbl91 c2VyX3BhZ2VzKCkgd2Fzbid0IGNhbGxlZC4KPgo+IFRoYXQgbWVhbnMgdGhlIHVzZXJzIGhlcmU6 Cj4gIC0gaGFiYW5hbGFiczogIEhleSBPZGVkIGNhbiB5b3UgZml4IHRoaXMgdXA/Cj4KPiAgLSBn cHUvZXh5bm9zOiBEYW5pZWwgY2FuIHlvdSBnZXQgc29tZW9uZSB0aGVyZSB0byBzdG9wIHVzaW5n IGl0Pwo+Cj4gIC0gbWVkaWEvdmlkZW9idWYgdmlhIHZiMl9kbWFfc2dfZ2V0X3VzZXJwdHIoKQo+ Cj4gU2hvdWxkIGFsbCBiZSBzd2l0Y2hlZCB0byB0aGUgc3RhbmRhcmQgcGluX3VzZXJfcGFnZXMg c2VxdWVuY2UKPiBhYm92ZS4KPgo+IFRoYXQgbGVhdmVzIHRoZSBvbmx5IGludGVyZXN0aW5nIHBs YWNlcyBhcyB2YjJfZGNfZ2V0X3VzZXJwdHIoKSBhbmQKPiB2YjJfdm1hbGxvY19nZXRfdXNlcnB0 cigpIHdoaWNoIGJvdGggY29tcGxldGVseSBmYWlsIHRvIGZvbGxvdyB0aGUKPiBSRVFVSVJFRCBi ZWhhdmlvciBpbiB0aGUgZnVuY3Rpb24ncyBjb21tZW50IGFib3V0IGNoZWNraW5nIFBURXMuIEl0 Cj4ganVzdCBETUEgbWFwcyB0aGVtLiBCYWRseSBicm9rZW4uCj4KPiBHdWVzc2luZyB0aGlzIGhh Y2tlcnkgaXMgZm9yIHNvbWUgZW1iZWRkZWQgUDJQIERNQSB0cmFuc2Zlcj8KClllYWgsIHNlZSBh bHNvIHRoZSBmb2xsb3dfcGZuIHRyaWNrZXJ5IGluCnZpZGVvYnVmX2RtYV9jb250aWdfdXNlcl9n ZXQoKSwgSSB0aGluayB0aGlzIGlzIGZ1bGx5IGludGVudGlvbmFsIGFuZAp1c2Vyc3BhY2UgYWJp IHdlIGNhbid0IGJyZWFrIDotLwoKSXQncyBtaWxkbHkgYmV0dGVyIHRoYW4ganVzdCBzaGFyaW5n IHBoeXNfYWRkcl90IHRocm91Z2ggdXNlcnNwYWNlIGFuZApibGluZGx5IHRydXN0aW5nIGl0LCB3 aGljaCBpcyB3aGF0IGFsbCB0aGUgb3V0LW9mLXRyZWUgY3JhcCBkaWQsIGJ1dApvbmx5IG1pbGRs eS4KCj4gQWZ0ZXIgaGUgdGhyZWUgcGxhY2VzIGFib3ZlIHNob3VsZCB1c2UgcGluX3VzZXJfcGFn ZXNfZmFzdCgpLCB0aGVuCj4gdGhpcyB3aG9sZSBicm9rZW4gQVBJIHNob3VsZCBiZSBtb3ZlZCBp bnRvIHZpZGVvYnVmMi1tZW1vcHMuYyBhbmQgYQo+IGJpZyBmYXQgIlRISVMgRE9FU04nVCBXT1JL IiBzdHVjayBvbiBpdC4KPgo+IHZpZGVvYnVmMiBzaG91bGQgcHJvYmFibHkgdXNlIFAyUCBETUEg YnVmIGZvciB0aGlzIGluc3RlYWQuCgpZdXAgdGhpcyBzaG91bGQgYmUgZG9uZSB3aXRoIGRtYV9i dWYgaW5zdGVhZCwgYW5kIHY0bCBoYXMgdGhhdC4gQnV0Cm9sZCB1YXBpIGFuZCBhbGwgdGhhdC4g VGhpcyBpcyB3aHkgSSBzYWlkIHdlIG1pZ2h0IG5lZWQgYSBuZXcKVk1fRFlOQU1JQ19QRk5NQVAg b3Igc28sIHRvIG1ha2UgZm9sbG93X3BmbiBub3QgcmVzb2x2ZSB0aGlzIGluIHRoZQpjYXNlIHdo ZXJlIHRoZSBkcml2ZXIgbWFuYWdlcyB0aGUgdW5kZXJseWluZyBpb21lbSByYW5nZSAob3Igd2hh dGV2ZXIKaXQgaXMpIGR5bmFtaWNhbGx5IGFuZCBtb3ZlcyBidWZmZXIgb2JqZWN0cyBhcm91bmQs IGxpa2UgZHJtIGRyaXZlcnMKZG8uIEJ1dCBJIGxvb2tlZCwgYW5kIHdlJ3ZlIHJ1biBvdXQgb2Yg dm1hLT52bV9mbGFncyA6LSgKClRoZSBvdGhlciBwcm9ibGVtIGlzIHRoYXQgSSBhbHNvIGhhdmUg bm8gcmVhbCB3b3JraW5nIGNsdWUgYWJvdXQgYWxsCnRoZSBWTV8qIGZsYWdzIGFuZCB3aGF0IHRo ZXkgYWxsIG1lYW4sIGFuZCB3aGV0aGVyIGRybSBkcml2ZXJzIHNldCB0aGUKcmlnaHQgb25lcyBp biBhbGwgY2FzZXMgKHRoZXkgcHJvYmFibHkgZG9uJ3QsIGJ1dCBvaCB3ZWxsKS4KRG9jdW1lbnRh dGlvbiBmb3IgdGhpcyBzdHVmZiBpbiBoZWFkZXJzIGlzIGEgYml0IHRoaW4gYXQgdGltZXMuCi1E YW5pZWwKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0 aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0t a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no 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 8E998C41604 for ; Sat, 3 Oct 2020 09:40:36 +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 03A982067C for ; Sat, 3 Oct 2020 09:40:35 +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="GL35iCc9" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 03A982067C Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch 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 4F3EC6E114; Sat, 3 Oct 2020 09:40:35 +0000 (UTC) Received: from mail-ot1-x342.google.com (mail-ot1-x342.google.com [IPv6:2607:f8b0:4864:20::342]) by gabe.freedesktop.org (Postfix) with ESMTPS id 549156E114 for ; Sat, 3 Oct 2020 09:40:34 +0000 (UTC) Received: by mail-ot1-x342.google.com with SMTP id m13so3833716otl.9 for ; Sat, 03 Oct 2020 02:40:34 -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=1IZAi5s6+kebXuKy30pJzhrn3uVlK6wzZN8mckpc+wk=; b=GL35iCc9L9oiUfbl52pEr/agxgzU4rhePYOaPgaSpdvfft2Ih+b6BO9rUrVs+VKESO h3krhGRnnJ87U/QwQ78vNhd79cC2ElpmbWWAUdHmo0V6B+fgotJnWqTv6/OMfhxSBxEB BEX9HN1OATqeSZ+sY31qtk7NPPktObx69lSig= 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=1IZAi5s6+kebXuKy30pJzhrn3uVlK6wzZN8mckpc+wk=; b=EBIpIMRea1VC1/pg3Ur+A28cNuocUThjnB/a2Zu8c9MppRG1Z2Dmli+FU9effNqOTK f4WCk78K3vXrR/Uo3qy+ZVGCcvBKb3yUvJudEKBo9eBHwCsXokUZvHAhuVimB9vd3ER4 wFEJujHGgVplUVBsh1snbN5bkDpKMJ59p7qEKstpxOeGKA0FMHy9k0cyDfAVnTvH3qFp WJoV+I6iSQQuh65j1UV9U5oR1kmfJhdMe83bWKP/0T/mtqaw7arw8nshIubcdXUWwpgk 67avhkYbRGv9jlCeKLo5VBaL39n4RE5WbKKrebdpZ2Auj3mTOuGddhhgTVDh6ekb86Om 0o0g== X-Gm-Message-State: AOAM533KJPvT6md/WKxKR83FW6elnksjN9ypDWqQku9CRtkNyno0IHYj WBqLDXzFyeEI2guN6WrleDA41qysw7nfV9k4ajWEXw== X-Google-Smtp-Source: ABdhPJyQ8w5gNa/gr9PqCnmPBfR+rJ2mhoqpvlr+kvRInvo5nifYfALu47116jzszjdcGvv+jDhvijH5X5aOBGv6DWE= X-Received: by 2002:a05:6830:11d8:: with SMTP id v24mr504776otq.188.1601718033491; Sat, 03 Oct 2020 02:40:33 -0700 (PDT) MIME-Version: 1.0 References: <20201002175303.390363-1-daniel.vetter@ffwll.ch> <20201002175303.390363-2-daniel.vetter@ffwll.ch> <20201002180603.GL9916@ziepe.ca> <20201002233118.GM9916@ziepe.ca> In-Reply-To: <20201002233118.GM9916@ziepe.ca> From: Daniel Vetter Date: Sat, 3 Oct 2020 11:40:22 +0200 Message-ID: Subject: Re: [PATCH 2/2] mm/frame-vec: use FOLL_LONGTERM To: Jason Gunthorpe 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 , Jan Kara , Joonyoung Shim , Pawel Osciak , John Hubbard , Seung-Woo Kim , LKML , DRI Development , Tomasz Figa , Kyungmin Park , Linux MM , =?UTF-8?B?SsOpcsO0bWUgR2xpc3Nl?= , Daniel Vetter , Andrew Morton , "open list:DMA BUFFER SHARING FRAMEWORK" , Dan Williams , Linux ARM , Marek Szyprowski Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" T24gU2F0LCBPY3QgMywgMjAyMCBhdCAxOjMxIEFNIEphc29uIEd1bnRob3JwZSA8amdnQHppZXBl LmNhPiB3cm90ZToKPgo+IE9uIEZyaSwgT2N0IDAyLCAyMDIwIGF0IDA4OjE2OjQ4UE0gKzAyMDAs IERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gPiBPbiBGcmksIE9jdCAyLCAyMDIwIGF0IDg6MDYgUE0g SmFzb24gR3VudGhvcnBlIDxqZ2dAemllcGUuY2E+IHdyb3RlOgo+ID4gPiBPbiBGcmksIE9jdCAw MiwgMjAyMCBhdCAwNzo1MzowM1BNICswMjAwLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ID4gPiA+ IEZvciAkcmVhc29ucyBJJ3ZlIHN0dW1ibGVkIG92ZXIgdGhpcyBjb2RlIGFuZCBJJ20gbm90IHN1 cmUgdGhlIGNoYW5nZQo+ID4gPiA+IHRvIHRoZSBuZXcgZ3VwIGZ1bmN0aW9ucyBpbiA1NWE2NTBj MzVmZWEgKCJtbS9ndXA6IGZyYW1lX3ZlY3RvcjoKPiA+ID4gPiBjb252ZXJ0IGdldF91c2VyX3Bh Z2VzKCkgLS0+IHBpbl91c2VyX3BhZ2VzKCkiKSB3YXMgZW50aXJlbHkgY29ycmVjdC4KPiA+ID4g Pgo+ID4gPiA+IFRoaXMgaGVyZSBpcyB1c2VkIGZvciBsb25nIHRlcm0gYnVmZmVycyAobm90IGp1 c3QgcXVpY2sgSS9PKSBsaWtlCj4gPiA+ID4gUkRNQSwgYW5kIEpvaG4gbm90ZXMgdGhpcyBpbiBo aXMgcGF0Y2guIEJ1dCBJIHRob3VnaHQgdGhlIHJ1bGUgZm9yCj4gPiA+ID4gdGhlc2UgaXMgdGhh dCB0aGV5IG5lZWQgdG8gYWRkIEZPTExfTE9OR1RFUk0sIHdoaWNoIEpvaG4ncyBwYXRjaAo+ID4g PiA+IGRpZG4ndCBkby4KPiA+ID4gPgo+ID4gPiA+IFRoZXJlIGlzIGFscmVhZHkgYSBkYXggc3Bl Y2lmaWMgY2hlY2sgKGFkZGVkIGluIGI3ZjA1NTRhNTZmMiAoIm1tOgo+ID4gPiA+IGZhaWwgZ2V0 X3ZhZGRyX2ZyYW1lcygpIGZvciBmaWxlc3lzdGVtLWRheCBtYXBwaW5ncyIpKSwgc28gdGhpcyBz ZWVtcwo+ID4gPiA+IGxpa2UgdGhlIHBydWRlbnQgdGhpbmcgdG8gZG8uCj4gPiA+ID4KPiA+ID4g PiBTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNvbT4K PiA+ID4gPiBDYzogQW5kcmV3IE1vcnRvbiA8YWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZz4KPiA+ ID4gPiBDYzogSm9obiBIdWJiYXJkIDxqaHViYmFyZEBudmlkaWEuY29tPgo+ID4gPiA+IENjOiBK w6lyw7RtZSBHbGlzc2UgPGpnbGlzc2VAcmVkaGF0LmNvbT4KPiA+ID4gPiBDYzogSmFuIEthcmEg PGphY2tAc3VzZS5jej4KPiA+ID4gPiBDYzogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0Bp bnRlbC5jb20+Cj4gPiA+ID4gQ2M6IGxpbnV4LW1tQGt2YWNrLm9yZwo+ID4gPiA+IENjOiBsaW51 eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKPiA+ID4gPiBDYzogbGludXgtc2Ftc3Vu Zy1zb2NAdmdlci5rZXJuZWwub3JnCj4gPiA+ID4gQ2M6IGxpbnV4LW1lZGlhQHZnZXIua2VybmVs Lm9yZwo+ID4gPiA+IEhpIGFsbCwKPiA+ID4gPgo+ID4gPiA+IEkgc3R1bWJsZWQgb3ZlciB0aGlz IGFuZCBmaWd1cmVkIHR5cGluZyB0aGlzIHBhdGNoIGNhbid0IGh1cnQuIFJlYWxseQo+ID4gPiA+ IGp1c3QgdG8gbWF5YmUgbGVhcm4gYSBmZXcgdGhpbmdzIGFib3V0IGhvdyBndXAvcHVwIGlzIHN1 cHBvc2VkIHRvIGJlCj4gPiA+ID4gdXNlZCAod2UgaGF2ZSBhIGJpdCBvZiB0aGF0IGluIGRyaXZl cnMvZ3B1KSwgdGhpcyBoZXJlIGlzbid0IHJlYWxseQo+ID4gPiA+IHJhbGF0ZWQgdG8gYW55dGhp bmcgSSdtIGRvaW5nLgo+ID4gPgo+ID4gPiBGT0xMX0ZPUkNFIGlzIGEgcHJldHR5IGJpZyBjbHVl IGl0IHNob3VsZCBiZSBGT0xMX0xPTkdURVJNLCBJTUhPCj4gPgo+ID4gU2luY2UgeW91J3JlIGhl cmUgLi4uIEkndmUgbm90aWNlZCB0aGF0IGliIHNldHMgRk9MTF9GT1JDRSB3aGVuIHRoZSBpYgo+ ID4gdmVyYiBhY2Nlc3MgbW9kZSBpbmRpY2F0ZXMgcG9zc2libGUgd3JpdGVzLiBJJ20gbm90IHJl YWxseSBjbGVhciBvbgo+ID4gd2h5IEZPTExfV1JJVEUgaXNuJ3QgZW5vdWdoIGFueSB3aHkgeW91 IG5lZWQgdG8gYmUgYWJsZSB0byB3cml0ZQo+ID4gdGhyb3VnaCBhIHZtYSB0aGF0J3Mgd3JpdGUg cHJvdGVjdGVkIGN1cnJlbnRseS4KPgo+IEFoLCBGT0xMX0ZPUkNFIHwgRk9MTF9XUklURSBtZWFu cyAqcmVhZCogY29uZnVzaW5nbHkgZW5vdWdoLCBhbmQgdGhlCj4gb25seSByZWFzb24geW91J2Qg d2FudCB0aGlzIHZlcnNpb24gZm9yIHJlYWQgaXMgaWYgeW91IGFyZSBkb2luZwo+IGxvbmd0ZXJt IHN0dWZmLiBJIHdyb3RlIGFib3V0IHRoaXMgcmVjZW50bHk6Cj4KPiBodHRwczovL2xvcmUua2Vy bmVsLm9yZy9saW51eC1tbS8yMDIwMDkyODIzNTczOS5HVTk5MTZAemllcGUuY2EvCgpBaCwgc28g ZXNzZW50aWFsbHkgaXQgc2VydmVzIGFzIGEgRk9MTF9HRVRfQ09XX0lTU1VFU19PVVRfT0ZfTVlf V0FZLiBJCnRoaW5rIGRvY3VtZW50YXRpb24gZm9yIHRoaXMsIGFuZC9vciBqdXN0IGF1dG9tYXRp Y2FsbHkgYWRkaW5nIHRoZQpmbGFnIHNldCBjb21iaW5hdGlvbiB3b3VsZCBiZSByZWFsbHkgZ29v ZC4gQnV0IEkgc2VlIEpvaG4gaXMgYWxyZWFkeQpvbiB0b3Agb2YgdGhhdCBpdCBzZWVtcy4KClRo YW5rcyBmb3IgdGhlIGV4cGxhaW5lci4KCj4gPiA+IFNpbmNlIGV2ZXJ5IGRyaXZlciBkb2VzIHRo aXMgd3JvbmcgYW55dGhpbmcgdGhhdCB1c2VzIHRoaXMgaXMgY3JlYXRpbmcKPiA+ID4gdGVycmlm eWluZyBzZWN1cml0eSBpc3N1ZXMuCj4gPiA+Cj4gPiA+IElNSE8gdGhpcyB3aG9sZSBBUEkgc2hv dWxkIGJlIGRlbGV0ZWQgOigKPiA+Cj4gPiBZZWFoIHRoYXQgcGFydCBJIGp1c3QgdHJpZWQgdG8g Y29udmVuaWVudGx5IGlnbm9yZS4gSSBndWVzcyB0aGlzIGRhdGVzCj4gPiBiYWNrIHRvIGEgdGlt ZSB3aGVuIGlvcmVtYXBzIHdoZXJlIGF0IGJlc3QgZml4ZWQsIGFuZCB0aGVyZSB3YXNuJ3QKPiA+ IGFueXRoaW5nIGxpa2UgYSBncHUgZHJpdmVyIGR5bmFtaWNhbGx5IG1hbmFnaW5nIHZyYW0gYXJv dW5kLCByZXN1bHRpbmcKPiA+IGluIHJhbmRvbSBlbnRpcmVseSB1bnJlbGF0ZWQgdGhpbmdzIHBv c3NpYmx5IGJlaW5nIG1hcHBlZCB0byB0aGF0IHNldAo+ID4gb2YgcGZucy4KPgo+IE5vLCBpdCB3 YXMgYWx3YXlzIHdyb25nLiBQcmlvciB0byBHUFUgbGlrZSBjYXNlcyB0aGUgbGlmZXRpbWUgb2Yg dGhlCj4gUFRFIHdhcyB0aWVkIHRvIHRoZSB2bWEgYW5kIHdoZW4gdGhlIHZtYSBiZWNvbWVzIGZy ZWUgdGhlIGRyaXZlciBjYW4KPiBtb3ZlIHRoZSB0aGluZ3MgaW4gdGhlIFBURXMgdG8gJ2ZyZWUn LiBFYXN5IHRvIHRyaWdnZXIgdXNlLWFmdGVyLWZyZWUKPiBpc3N1ZXMgYW5kIGRldmljZXMgbGlr ZSBSRE1BIGhhdmUgc2VjdXJpdHkgY29udGV4dHMgYXR0YWNoZWQgdG8gdGhlc2UKPiBQVEVzIHNv IGl0IGJlY29tZXMgYSBzZXJpb3VzIHNlY3VyaXR5IGJ1ZyB0byBkbyBzb21ldGhpbmcgbGlrZSB0 aGlzLgo+Cj4gPiBUaGUgdW5kZXJseWluZyBmb2xsb3dfcGZuIGlzIGFsc28gdXNlZCBpbiBvdGhl ciBwbGFjZXMgd2l0aGluCj4gPiBkcml2ZXJzL21lZGlhLCBzbyB0aGlzIGRvZXNuJ3Qgc2VlbSB0 byBiZSBhbiBhY2NpZGVudCwgYnV0IGFjdHVhbGx5Cj4gPiBpbnRlbnRpb25hbC4KPgo+IExvb2tp bmcgY2xvc2VseSwgdGhlcmUgYXJlIHZlcnkgZmV3IHVzZXJzLCBtb3N0ICpzZWVtKiBwb2ludGxl c3MsIGJ1dAo+IG1heWJlIHRoZXJlIGlzIGEgY3JhenkgcmVhc29uPwo+Cj4gVGhlIHNlcXVlbmNl Cj4gICBnZXRfdmFkZHJfZnJhbWVzKCk7Cj4gICBmcmFtZV92ZWN0b3JfdG9fcGFnZXMoKTsKPiAg IHNnX2FsbG9jX3RhYmxlX2Zyb21fcGFnZXMoKTsKPgo+IFNob3VsZCBiZSB3cml0dGVuCj4gICBw aW5fdXNlcl9wYWdlc19mYXN0KEZPTExfTE9OR1RFUk0pOwo+ICAgc2dfYWxsb2NfdGFibGVfZnJv bV9wYWdlcygpCgpPaywgdGhhdCB0YWtlcyBjYXJlIG9mIGV4eW5vcyBhbmQgaGFiYW5hbGFicy4g SSdsbCB0cnkgYW5kIHdhY2sKdG9nZXRoZXIgYSBwYXRjaCBmb3IgZXh5bm9zLCB0aGF0IGRyaXZl ciBpcyBhIGJpdCBzcGVjaWFsIC0gZmlyc3QgYXJtCnNvYyBkcml2ZXIgYW5kIHdlIG1lcmdlZCBp dCBmdWxseSB3ZWxsIGF3YXJlIHRoYXQgaXQncyBmdWxsIG9mIHdhcnRzLApqdXN0IGFzIGEgc2hv dyB0byBtYWtlIGl0IGNsZWFyIHRoYXQgZHJpdmVycy9ncHUgaXMgYWxzbyBpbnRlcmVzdGVkIGlu CnNtYWxsIGdwdSBkcml2ZXJzIC4uLgoKPiBUaGVyZSBpcyBzb21lICdzcGVjaWFsJyBjb2RlIGlu IGZyYW1lX3ZlY3Rvcl90b19wYWdlcygpIHRoYXQgdHJpZXMgdG8KPiBnZXQgYSBzdHJ1Y3QgcGFn ZSBmb3IgdGhpbmdzIGZyb20gYSBWTV9JTyBvciBWTV9QRk5NQVAuLi4KPgo+IE9oIHNuYXAsIHRo YXQgaXMgKmNvbXBsZXRlbHkqIGJyb2tlbiEgSWYgdGhlIGZpcnN0IFZNQSBpcyBJT3xQRk5NQVAK PiB0aGVuIGdldF92YWRkcl9mcmFtZXMoKSBpdGVyYXRlcyBvdmVyIGFsbCBWTUFzIGluIHRoZSBy YW5nZSwgb2YgYW55Cj4ga2luZCBhbmQgZXh0cmFjdHMgdGhlIFBURXMgdGhlbiBibGluZGx5IHJl ZmVyZW5jZXMgdGhlbSEgVGhpcyBtZWFucyBpdAo+IGNhbiBiZSB1c2VkIHRvIHVzZSBhZnRlciBm cmVlIG5vcm1hbCBSQU0gc3RydWN0IHBhZ2VzISEgR2FoIQo+Cj4gV293LiBPa2F5LiBUaGF0IGhh cyB0byBnby4KPgo+IFNvLCBJICp0aGluayogd2UgY2FuIGFzc3VtZSB0aGVyZSBpcyBubyBzYW5l IGNhc2VzIHdoZXJlCj4gZnJhbWVfdmVjdG9yX3RvX3BhZ2VzKCkgc3VjY2VlZHMgYnV0IHBpbl91 c2VyX3BhZ2VzKCkgd2Fzbid0IGNhbGxlZC4KPgo+IFRoYXQgbWVhbnMgdGhlIHVzZXJzIGhlcmU6 Cj4gIC0gaGFiYW5hbGFiczogIEhleSBPZGVkIGNhbiB5b3UgZml4IHRoaXMgdXA/Cj4KPiAgLSBn cHUvZXh5bm9zOiBEYW5pZWwgY2FuIHlvdSBnZXQgc29tZW9uZSB0aGVyZSB0byBzdG9wIHVzaW5n IGl0Pwo+Cj4gIC0gbWVkaWEvdmlkZW9idWYgdmlhIHZiMl9kbWFfc2dfZ2V0X3VzZXJwdHIoKQo+ Cj4gU2hvdWxkIGFsbCBiZSBzd2l0Y2hlZCB0byB0aGUgc3RhbmRhcmQgcGluX3VzZXJfcGFnZXMg c2VxdWVuY2UKPiBhYm92ZS4KPgo+IFRoYXQgbGVhdmVzIHRoZSBvbmx5IGludGVyZXN0aW5nIHBs YWNlcyBhcyB2YjJfZGNfZ2V0X3VzZXJwdHIoKSBhbmQKPiB2YjJfdm1hbGxvY19nZXRfdXNlcnB0 cigpIHdoaWNoIGJvdGggY29tcGxldGVseSBmYWlsIHRvIGZvbGxvdyB0aGUKPiBSRVFVSVJFRCBi ZWhhdmlvciBpbiB0aGUgZnVuY3Rpb24ncyBjb21tZW50IGFib3V0IGNoZWNraW5nIFBURXMuIEl0 Cj4ganVzdCBETUEgbWFwcyB0aGVtLiBCYWRseSBicm9rZW4uCj4KPiBHdWVzc2luZyB0aGlzIGhh Y2tlcnkgaXMgZm9yIHNvbWUgZW1iZWRkZWQgUDJQIERNQSB0cmFuc2Zlcj8KClllYWgsIHNlZSBh bHNvIHRoZSBmb2xsb3dfcGZuIHRyaWNrZXJ5IGluCnZpZGVvYnVmX2RtYV9jb250aWdfdXNlcl9n ZXQoKSwgSSB0aGluayB0aGlzIGlzIGZ1bGx5IGludGVudGlvbmFsIGFuZAp1c2Vyc3BhY2UgYWJp IHdlIGNhbid0IGJyZWFrIDotLwoKSXQncyBtaWxkbHkgYmV0dGVyIHRoYW4ganVzdCBzaGFyaW5n IHBoeXNfYWRkcl90IHRocm91Z2ggdXNlcnNwYWNlIGFuZApibGluZGx5IHRydXN0aW5nIGl0LCB3 aGljaCBpcyB3aGF0IGFsbCB0aGUgb3V0LW9mLXRyZWUgY3JhcCBkaWQsIGJ1dApvbmx5IG1pbGRs eS4KCj4gQWZ0ZXIgaGUgdGhyZWUgcGxhY2VzIGFib3ZlIHNob3VsZCB1c2UgcGluX3VzZXJfcGFn ZXNfZmFzdCgpLCB0aGVuCj4gdGhpcyB3aG9sZSBicm9rZW4gQVBJIHNob3VsZCBiZSBtb3ZlZCBp bnRvIHZpZGVvYnVmMi1tZW1vcHMuYyBhbmQgYQo+IGJpZyBmYXQgIlRISVMgRE9FU04nVCBXT1JL IiBzdHVjayBvbiBpdC4KPgo+IHZpZGVvYnVmMiBzaG91bGQgcHJvYmFibHkgdXNlIFAyUCBETUEg YnVmIGZvciB0aGlzIGluc3RlYWQuCgpZdXAgdGhpcyBzaG91bGQgYmUgZG9uZSB3aXRoIGRtYV9i dWYgaW5zdGVhZCwgYW5kIHY0bCBoYXMgdGhhdC4gQnV0Cm9sZCB1YXBpIGFuZCBhbGwgdGhhdC4g VGhpcyBpcyB3aHkgSSBzYWlkIHdlIG1pZ2h0IG5lZWQgYSBuZXcKVk1fRFlOQU1JQ19QRk5NQVAg b3Igc28sIHRvIG1ha2UgZm9sbG93X3BmbiBub3QgcmVzb2x2ZSB0aGlzIGluIHRoZQpjYXNlIHdo ZXJlIHRoZSBkcml2ZXIgbWFuYWdlcyB0aGUgdW5kZXJseWluZyBpb21lbSByYW5nZSAob3Igd2hh dGV2ZXIKaXQgaXMpIGR5bmFtaWNhbGx5IGFuZCBtb3ZlcyBidWZmZXIgb2JqZWN0cyBhcm91bmQs IGxpa2UgZHJtIGRyaXZlcnMKZG8uIEJ1dCBJIGxvb2tlZCwgYW5kIHdlJ3ZlIHJ1biBvdXQgb2Yg dm1hLT52bV9mbGFncyA6LSgKClRoZSBvdGhlciBwcm9ibGVtIGlzIHRoYXQgSSBhbHNvIGhhdmUg bm8gcmVhbCB3b3JraW5nIGNsdWUgYWJvdXQgYWxsCnRoZSBWTV8qIGZsYWdzIGFuZCB3aGF0IHRo ZXkgYWxsIG1lYW4sIGFuZCB3aGV0aGVyIGRybSBkcml2ZXJzIHNldCB0aGUKcmlnaHQgb25lcyBp biBhbGwgY2FzZXMgKHRoZXkgcHJvYmFibHkgZG9uJ3QsIGJ1dCBvaCB3ZWxsKS4KRG9jdW1lbnRh dGlvbiBmb3IgdGhpcyBzdHVmZiBpbiBoZWFkZXJzIGlzIGEgYml0IHRoaW4gYXQgdGltZXMuCi1E YW5pZWwKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0 aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2RyaS1kZXZlbAo=