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=-7.6 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, 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 C6024C4363D for ; Wed, 7 Oct 2020 13:06:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6C59720789 for ; Wed, 7 Oct 2020 13:06:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="IVfaH4Or" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728375AbgJGNGh (ORCPT ); Wed, 7 Oct 2020 09:06:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47016 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728177AbgJGNGg (ORCPT ); Wed, 7 Oct 2020 09:06:36 -0400 Received: from mail-ej1-x643.google.com (mail-ej1-x643.google.com [IPv6:2a00:1450:4864:20::643]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 771AFC061755 for ; Wed, 7 Oct 2020 06:06:36 -0700 (PDT) Received: by mail-ej1-x643.google.com with SMTP id u21so2864569eja.2 for ; Wed, 07 Oct 2020 06:06:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=JtiTAC1lCqywnD4Z2Vg4zVbVRlofQtOWuMfZmgMPCws=; b=IVfaH4OrbWAN6uzg0UIk/strWAow/Q6FzTRKahgOrF9EF7kqJXUGjYDmctFaBHvyOo FYBn0VINGYPuQRP0p46AU6UBnVUkbrZOzWZ9Ys2I27aCChyOeG+vJ8llmAULxl7kC8wj mqztEpzuIt/NtFC/8GqwQM3qEJxAHpZi5HRdE= 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=JtiTAC1lCqywnD4Z2Vg4zVbVRlofQtOWuMfZmgMPCws=; b=J1K9Hc19/8pZH4TqiEEaLPJT+OTddlXTauJ9boi0FJrtP1wvzkfH148Ijemp2oyM5j jJvqW/I64QKK/35aiH6bHhncawyBQ+5LB6xIkVoSAJAgJnRcDZpvInNkEtbP1yHLfEXQ V4k3meg5r2NQVdOn5TEEqZ0q+oaz2rV1cV0KixNKh/lKZ69qPF+oVC7yto8rNY630MmF gUXHe7JstxpeqYMqr83xyKdymKhcVZ6B0wjRJWxzDcf9N6zoqx0gUrHdo5eQPs6+1Hlb ULj7Qx+hIza2dKSNfSODy3r+bjkVb0BOHDPwgZpZ7WjpgmX7QIsVkDx9aNMlImNdHydY lKxA== X-Gm-Message-State: AOAM5324kw43PP3I/+BgTjr+1zzkH9QGVQC75h8of7o5Pvr1ZxhrazZq /IkfXIxvCSddSJP4pN+6jOKkWegJ7QKHGA== X-Google-Smtp-Source: ABdhPJxARwdBHkIWN98qScZtvGKIdE/82iKDjxJgs6kT+hjD+HW3p8XLU3Te+IInEXCekAsitj/l8w== X-Received: by 2002:a17:906:f119:: with SMTP id gv25mr3185482ejb.373.1602075992578; Wed, 07 Oct 2020 06:06:32 -0700 (PDT) Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com. [209.85.128.44]) by smtp.gmail.com with ESMTPSA id ba6sm1447690edb.61.2020.10.07.06.06.30 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 07 Oct 2020 06:06:31 -0700 (PDT) Received: by mail-wm1-f44.google.com with SMTP id p15so2222339wmi.4 for ; Wed, 07 Oct 2020 06:06:30 -0700 (PDT) X-Received: by 2002:a1c:2d85:: with SMTP id t127mr3180500wmt.22.1602075989680; Wed, 07 Oct 2020 06:06:29 -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: Tomasz Figa Date: Wed, 7 Oct 2020 15:06:17 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 2/2] mm/frame-vec: use FOLL_LONGTERM To: Jason Gunthorpe Cc: Daniel Vetter , 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 , 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/ > > > > 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() > > 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. Note that vb2_vmalloc is only used for in-kernel CPU usage, e.g. the contents being copied by the driver between vb2 buffers and some hardware FIFO or other dedicated buffers. The memory does not go to any hardware DMA. Could you elaborate on what "the REQUIRED behavior is"? I can see that both follow the get_vaddr_frames() -> frame_vector_to_pages() flow, as you mentioned. Perhaps the only change needed is switching to pin_user_pages after all? > > Guessing this hackery is for some embedded P2P DMA transfer? > That's not the case. There are two usage scenarios: 1) Regular user pointer support, i.e. using malloc()ed memory as a video input or output buffer. This is deemed to be deprecated, but still used quite widely by various applications. Quite common for video decoder input and video encoder output, because the other side of the pipeline is CPU, e.g. network stack. 2) Sharing carveout buffers (without struct pages attached) between two devices. I believe this predates DMA-buf and CMA (which enabled carveouts with struct pages) and I'm not sure how commonly it is used these days. > 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. See above. Best regards, Tomasz 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=-7.5 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 1C737C4363D for ; Wed, 7 Oct 2020 13:13:43 +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 77902206F4 for ; Wed, 7 Oct 2020 13:13:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="uC6khgRV"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="IVfaH4Or" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 77902206F4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org 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=fvzB//CAecHeBEDcJVZZtaVD0wAHSZCQF+emmX47dhw=; b=uC6khgRVswSVYRYS6pGE1fBn8 QX7k3PXRdsrh09yLU0eUyN4qV61TkKEO7IH7CNwYvQEBuyoekeecTAVP/8oMGzloz6oxrDqrImGz6 slTqwTSBVC3TN+goDxJQz7OqM2lZlaQG1QItTwyXxkIbHu8Y7jESu38Av6pgBQi3hCjtRvr8wxHpv QFCcc5S2ViBIJrMTKabpG3yXeHqOqHZwlBf27OOnh1qRWwM4M48SbFeyeTW+ekdBZFQZbhvtoumwj HVReoFiQcnk9gOmVl3eXI7deejvr+0FvWKiOgCDwzXSrIyqpYEb3PKJ5dnxdPZl3hBdP/jvpJoDrt O9JJhJggg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kQ9EX-0000Wq-Fg; Wed, 07 Oct 2020 13:11:53 +0000 Received: from mail-ed1-x542.google.com ([2a00:1450:4864:20::542]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kQ9EU-0000Vm-2i for linux-arm-kernel@lists.infradead.org; Wed, 07 Oct 2020 13:11:50 +0000 Received: by mail-ed1-x542.google.com with SMTP id cq12so2121874edb.2 for ; Wed, 07 Oct 2020 06:11:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=JtiTAC1lCqywnD4Z2Vg4zVbVRlofQtOWuMfZmgMPCws=; b=IVfaH4OrbWAN6uzg0UIk/strWAow/Q6FzTRKahgOrF9EF7kqJXUGjYDmctFaBHvyOo FYBn0VINGYPuQRP0p46AU6UBnVUkbrZOzWZ9Ys2I27aCChyOeG+vJ8llmAULxl7kC8wj mqztEpzuIt/NtFC/8GqwQM3qEJxAHpZi5HRdE= 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=JtiTAC1lCqywnD4Z2Vg4zVbVRlofQtOWuMfZmgMPCws=; b=TTLD8DpfchGyqeUXklvaCx0K33kaYfMACgSJfQ1Yrwr05yc/d0QRJaDyhZ/Twi/Gtz T2+x4gKxs/RmHGPM5ADebFEuRJtLBcjokaDjPvUXAfKIbyXU61WdVYoZg0WfGbcQ8J79 beE0ojKg5sst+wwHCKSxZ6JN9at5JE3/p2AB09VLCjX2DnwG3ahDtjLxw13jt9Q2/V+N wJWebl/wjZl6G3aYHKh7I5RbkY5pV8y/ssvWwUMgbZ/Eew1tmzFyeMG8cxzTAjKaeA4f 3K3qUWis1NVLb+mMFa/8xlw4Jzx13ouugnYao+NVv6iKyqrPcCAdrQNqKdSJb6AaA6qF cchw== X-Gm-Message-State: AOAM530bMkF6etkljg8ZLIWiO76rzv6IEhVCrWxItpzaDvb/O10/AgQR 5l0JSv3qxMQ0TyXpk1LNSn41G4NTEPjkZg== X-Google-Smtp-Source: ABdhPJyIwlaV1w4qbW1GfdntzW+4mexkNQAqMsuTnPMQpzeaELpgxpmSj14mtvMK5FApDNcxEFNh/w== X-Received: by 2002:a50:e042:: with SMTP id g2mr3555685edl.314.1602076308101; Wed, 07 Oct 2020 06:11:48 -0700 (PDT) Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com. [209.85.128.45]) by smtp.gmail.com with ESMTPSA id j11sm1497722ejk.63.2020.10.07.06.11.47 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 07 Oct 2020 06:11:47 -0700 (PDT) Received: by mail-wm1-f45.google.com with SMTP id k18so2276434wmj.5 for ; Wed, 07 Oct 2020 06:11:47 -0700 (PDT) X-Received: by 2002:a1c:2d85:: with SMTP id t127mr3180500wmt.22.1602075989680; Wed, 07 Oct 2020 06:06:29 -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: Tomasz Figa Date: Wed, 7 Oct 2020 15:06:17 +0200 X-Gmail-Original-Message-ID: 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-20201007_091150_184906_9E240C4C X-CRM114-Status: GOOD ( 45.48 ) 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 , Daniel Vetter , Seung-Woo Kim , LKML , DRI Development , Kyungmin Park , Linux MM , =?UTF-8?B?SsOpcsO0bWUgR2xpc3Nl?= , John Hubbard , 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 bmVsLm9yZy9saW51eC1tbS8yMDIwMDkyODIzNTczOS5HVTk5MTZAemllcGUuY2EvCj4KPiA+ID4g U2luY2UgZXZlcnkgZHJpdmVyIGRvZXMgdGhpcyB3cm9uZyBhbnl0aGluZyB0aGF0IHVzZXMgdGhp cyBpcyBjcmVhdGluZwo+ID4gPiB0ZXJyaWZ5aW5nIHNlY3VyaXR5IGlzc3Vlcy4KPiA+ID4KPiA+ ID4gSU1ITyB0aGlzIHdob2xlIEFQSSBzaG91bGQgYmUgZGVsZXRlZCA6KAo+ID4KPiA+IFllYWgg dGhhdCBwYXJ0IEkganVzdCB0cmllZCB0byBjb252ZW5pZW50bHkgaWdub3JlLiBJIGd1ZXNzIHRo aXMgZGF0ZXMKPiA+IGJhY2sgdG8gYSB0aW1lIHdoZW4gaW9yZW1hcHMgd2hlcmUgYXQgYmVzdCBm aXhlZCwgYW5kIHRoZXJlIHdhc24ndAo+ID4gYW55dGhpbmcgbGlrZSBhIGdwdSBkcml2ZXIgZHlu YW1pY2FsbHkgbWFuYWdpbmcgdnJhbSBhcm91bmQsIHJlc3VsdGluZwo+ID4gaW4gcmFuZG9tIGVu dGlyZWx5IHVucmVsYXRlZCB0aGluZ3MgcG9zc2libHkgYmVpbmcgbWFwcGVkIHRvIHRoYXQgc2V0 Cj4gPiBvZiBwZm5zLgo+Cj4gTm8sIGl0IHdhcyBhbHdheXMgd3JvbmcuIFByaW9yIHRvIEdQVSBs aWtlIGNhc2VzIHRoZSBsaWZldGltZSBvZiB0aGUKPiBQVEUgd2FzIHRpZWQgdG8gdGhlIHZtYSBh bmQgd2hlbiB0aGUgdm1hIGJlY29tZXMgZnJlZSB0aGUgZHJpdmVyIGNhbgo+IG1vdmUgdGhlIHRo aW5ncyBpbiB0aGUgUFRFcyB0byAnZnJlZScuIEVhc3kgdG8gdHJpZ2dlciB1c2UtYWZ0ZXItZnJl ZQo+IGlzc3VlcyBhbmQgZGV2aWNlcyBsaWtlIFJETUEgaGF2ZSBzZWN1cml0eSBjb250ZXh0cyBh dHRhY2hlZCB0byB0aGVzZQo+IFBURXMgc28gaXQgYmVjb21lcyBhIHNlcmlvdXMgc2VjdXJpdHkg YnVnIHRvIGRvIHNvbWV0aGluZyBsaWtlIHRoaXMuCj4KPiA+IFRoZSB1bmRlcmx5aW5nIGZvbGxv d19wZm4gaXMgYWxzbyB1c2VkIGluIG90aGVyIHBsYWNlcyB3aXRoaW4KPiA+IGRyaXZlcnMvbWVk aWEsIHNvIHRoaXMgZG9lc24ndCBzZWVtIHRvIGJlIGFuIGFjY2lkZW50LCBidXQgYWN0dWFsbHkK PiA+IGludGVudGlvbmFsLgo+Cj4gTG9va2luZyBjbG9zZWx5LCB0aGVyZSBhcmUgdmVyeSBmZXcg dXNlcnMsIG1vc3QgKnNlZW0qIHBvaW50bGVzcywgYnV0Cj4gbWF5YmUgdGhlcmUgaXMgYSBjcmF6 eSByZWFzb24/Cj4KPiBUaGUgc2VxdWVuY2UKPiAgIGdldF92YWRkcl9mcmFtZXMoKTsKPiAgIGZy YW1lX3ZlY3Rvcl90b19wYWdlcygpOwo+ICAgc2dfYWxsb2NfdGFibGVfZnJvbV9wYWdlcygpOwo+ Cj4gU2hvdWxkIGJlIHdyaXR0ZW4KPiAgIHBpbl91c2VyX3BhZ2VzX2Zhc3QoRk9MTF9MT05HVEVS TSk7Cj4gICBzZ19hbGxvY190YWJsZV9mcm9tX3BhZ2VzKCkKPgo+IFRoZXJlIGlzIHNvbWUgJ3Nw ZWNpYWwnIGNvZGUgaW4gZnJhbWVfdmVjdG9yX3RvX3BhZ2VzKCkgdGhhdCB0cmllcyB0bwo+IGdl dCBhIHN0cnVjdCBwYWdlIGZvciB0aGluZ3MgZnJvbSBhIFZNX0lPIG9yIFZNX1BGTk1BUC4uLgo+ Cj4gT2ggc25hcCwgdGhhdCBpcyAqY29tcGxldGVseSogYnJva2VuISBJZiB0aGUgZmlyc3QgVk1B IGlzIElPfFBGTk1BUAo+IHRoZW4gZ2V0X3ZhZGRyX2ZyYW1lcygpIGl0ZXJhdGVzIG92ZXIgYWxs IFZNQXMgaW4gdGhlIHJhbmdlLCBvZiBhbnkKPiBraW5kIGFuZCBleHRyYWN0cyB0aGUgUFRFcyB0 aGVuIGJsaW5kbHkgcmVmZXJlbmNlcyB0aGVtISBUaGlzIG1lYW5zIGl0Cj4gY2FuIGJlIHVzZWQg dG8gdXNlIGFmdGVyIGZyZWUgbm9ybWFsIFJBTSBzdHJ1Y3QgcGFnZXMhISBHYWghCj4KPiBXb3cu IE9rYXkuIFRoYXQgaGFzIHRvIGdvLgo+Cj4gU28sIEkgKnRoaW5rKiB3ZSBjYW4gYXNzdW1lIHRo ZXJlIGlzIG5vIHNhbmUgY2FzZXMgd2hlcmUKPiBmcmFtZV92ZWN0b3JfdG9fcGFnZXMoKSBzdWNj ZWVkcyBidXQgcGluX3VzZXJfcGFnZXMoKSB3YXNuJ3QgY2FsbGVkLgo+Cj4gVGhhdCBtZWFucyB0 aGUgdXNlcnMgaGVyZToKPiAgLSBoYWJhbmFsYWJzOiAgSGV5IE9kZWQgY2FuIHlvdSBmaXggdGhp cyB1cD8KPgo+ICAtIGdwdS9leHlub3M6IERhbmllbCBjYW4geW91IGdldCBzb21lb25lIHRoZXJl IHRvIHN0b3AgdXNpbmcgaXQ/Cj4KPiAgLSBtZWRpYS92aWRlb2J1ZiB2aWEgdmIyX2RtYV9zZ19n ZXRfdXNlcnB0cigpCj4KPiBTaG91bGQgYWxsIGJlIHN3aXRjaGVkIHRvIHRoZSBzdGFuZGFyZCBw aW5fdXNlcl9wYWdlcyBzZXF1ZW5jZQo+IGFib3ZlLgo+Cj4gVGhhdCBsZWF2ZXMgdGhlIG9ubHkg aW50ZXJlc3RpbmcgcGxhY2VzIGFzIHZiMl9kY19nZXRfdXNlcnB0cigpIGFuZAo+IHZiMl92bWFs bG9jX2dldF91c2VycHRyKCkgd2hpY2ggYm90aCBjb21wbGV0ZWx5IGZhaWwgdG8gZm9sbG93IHRo ZQo+IFJFUVVJUkVEIGJlaGF2aW9yIGluIHRoZSBmdW5jdGlvbidzIGNvbW1lbnQgYWJvdXQgY2hl Y2tpbmcgUFRFcy4gSXQKPiBqdXN0IERNQSBtYXBzIHRoZW0uIEJhZGx5IGJyb2tlbi4KCk5vdGUg dGhhdCB2YjJfdm1hbGxvYyBpcyBvbmx5IHVzZWQgZm9yIGluLWtlcm5lbCBDUFUgdXNhZ2UsIGUu Zy4gdGhlCmNvbnRlbnRzIGJlaW5nIGNvcGllZCBieSB0aGUgZHJpdmVyIGJldHdlZW4gdmIyIGJ1 ZmZlcnMgYW5kIHNvbWUKaGFyZHdhcmUgRklGTyBvciBvdGhlciBkZWRpY2F0ZWQgYnVmZmVycy4g VGhlIG1lbW9yeSBkb2VzIG5vdCBnbyB0bwphbnkgaGFyZHdhcmUgRE1BLgoKQ291bGQgeW91IGVs YWJvcmF0ZSBvbiB3aGF0ICJ0aGUgUkVRVUlSRUQgYmVoYXZpb3IgaXMiPyBJIGNhbiBzZWUgdGhh dApib3RoIGZvbGxvdyB0aGUgZ2V0X3ZhZGRyX2ZyYW1lcygpIC0+IGZyYW1lX3ZlY3Rvcl90b19w YWdlcygpIGZsb3csIGFzCnlvdSBtZW50aW9uZWQuIFBlcmhhcHMgdGhlIG9ubHkgY2hhbmdlIG5l ZWRlZCBpcyBzd2l0Y2hpbmcgdG8KcGluX3VzZXJfcGFnZXMgYWZ0ZXIgYWxsPwoKPgo+IEd1ZXNz aW5nIHRoaXMgaGFja2VyeSBpcyBmb3Igc29tZSBlbWJlZGRlZCBQMlAgRE1BIHRyYW5zZmVyPwo+ CgpUaGF0J3Mgbm90IHRoZSBjYXNlLiBUaGVyZSBhcmUgdHdvIHVzYWdlIHNjZW5hcmlvczoKCjEp IFJlZ3VsYXIgdXNlciBwb2ludGVyIHN1cHBvcnQsIGkuZS4gdXNpbmcgbWFsbG9jKCllZCBtZW1v cnkgYXMgYQp2aWRlbyBpbnB1dCBvciBvdXRwdXQgYnVmZmVyLiBUaGlzIGlzIGRlZW1lZCB0byBi ZSBkZXByZWNhdGVkLCBidXQKc3RpbGwgdXNlZCBxdWl0ZSB3aWRlbHkgYnkgdmFyaW91cyBhcHBs aWNhdGlvbnMuIFF1aXRlIGNvbW1vbiBmb3IKdmlkZW8gZGVjb2RlciBpbnB1dCBhbmQgdmlkZW8g ZW5jb2RlciBvdXRwdXQsIGJlY2F1c2UgdGhlIG90aGVyIHNpZGUKb2YgdGhlIHBpcGVsaW5lIGlz IENQVSwgZS5nLiBuZXR3b3JrIHN0YWNrLgoKMikgU2hhcmluZyBjYXJ2ZW91dCBidWZmZXJzICh3 aXRob3V0IHN0cnVjdCBwYWdlcyBhdHRhY2hlZCkgYmV0d2Vlbgp0d28gZGV2aWNlcy4gSSBiZWxp ZXZlIHRoaXMgcHJlZGF0ZXMgRE1BLWJ1ZiBhbmQgQ01BICh3aGljaCBlbmFibGVkCmNhcnZlb3V0 cyB3aXRoIHN0cnVjdCBwYWdlcykgYW5kIEknbSBub3Qgc3VyZSBob3cgY29tbW9ubHkgaXQgaXMg dXNlZAp0aGVzZSBkYXlzLgoKPiBBZnRlciBoZSB0aHJlZSBwbGFjZXMgYWJvdmUgc2hvdWxkIHVz ZSBwaW5fdXNlcl9wYWdlc19mYXN0KCksIHRoZW4KPiB0aGlzIHdob2xlIGJyb2tlbiBBUEkgc2hv dWxkIGJlIG1vdmVkIGludG8gdmlkZW9idWYyLW1lbW9wcy5jIGFuZCBhCj4gYmlnIGZhdCAiVEhJ UyBET0VTTidUIFdPUksiIHN0dWNrIG9uIGl0Lgo+Cj4gdmlkZW9idWYyIHNob3VsZCBwcm9iYWJs eSB1c2UgUDJQIERNQSBidWYgZm9yIHRoaXMgaW5zdGVhZC4KClNlZSBhYm92ZS4KCkJlc3QgcmVn YXJkcywKVG9tYXN6CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3Rz LmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1hcm0ta2VybmVsCg== 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 478F3C47095 for ; Wed, 7 Oct 2020 13:06:40 +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 C3CF4206F4 for ; Wed, 7 Oct 2020 13:06:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="IVfaH4Or" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C3CF4206F4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org 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 A23186E8DB; Wed, 7 Oct 2020 13:06:38 +0000 (UTC) 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 71CF46E8DB for ; Wed, 7 Oct 2020 13:06:37 +0000 (UTC) Received: by mail-ed1-x543.google.com with SMTP id l17so2059256edq.12 for ; Wed, 07 Oct 2020 06:06:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=JtiTAC1lCqywnD4Z2Vg4zVbVRlofQtOWuMfZmgMPCws=; b=IVfaH4OrbWAN6uzg0UIk/strWAow/Q6FzTRKahgOrF9EF7kqJXUGjYDmctFaBHvyOo FYBn0VINGYPuQRP0p46AU6UBnVUkbrZOzWZ9Ys2I27aCChyOeG+vJ8llmAULxl7kC8wj mqztEpzuIt/NtFC/8GqwQM3qEJxAHpZi5HRdE= 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=JtiTAC1lCqywnD4Z2Vg4zVbVRlofQtOWuMfZmgMPCws=; b=o21/ypajP7SgjRkghMxz+fOJWyP35EHlwyxFZ+YoGdgtaFEfG22TSuE0xM3JorXtMz VnUmUxtAuRybPVdFlN0ltTIgn2VAfzwCkG9THx9kfqZRhGxa9agpsDQw8Cb2nHIYCn29 ymcAy6h3b9I80qeVrbpAfjiY2vcxJsj+RJCmvLOD/FuvSTAMtD5uysEf9k2MNrjJ1Xh1 o9qWDQH983r+rb1QCs2qDSiSZlX0Zqf1xB7gUYBFbeW9Ka56pYlGBd9GC95leju3ldER geDe10IP/tUG/kxZ5ueRMvPJaCeGA/DQRI9jjZTiB1o3nrfEDNKJ/UXC7tqQuH7CwbGP sTJQ== X-Gm-Message-State: AOAM533swPTLg16ruQFMV8bwam7oDEWbpMcygep92cDoDTjgi5GEPJiS FaTQeuJl9dCdx2z4aBigP76xN4EpBBuBjg== X-Google-Smtp-Source: ABdhPJxbUHcF53N56B76mF81XT42MJfqLQca9TLczKMT+FFh23l+lDLkcsvgQNi2CBNy4BCWrR6g8g== X-Received: by 2002:aa7:d782:: with SMTP id s2mr3397789edq.111.1602075995261; Wed, 07 Oct 2020 06:06:35 -0700 (PDT) Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com. [209.85.128.47]) by smtp.gmail.com with ESMTPSA id p11sm1455284edu.93.2020.10.07.06.06.30 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 07 Oct 2020 06:06:31 -0700 (PDT) Received: by mail-wm1-f47.google.com with SMTP id j136so2271780wmj.2 for ; Wed, 07 Oct 2020 06:06:30 -0700 (PDT) X-Received: by 2002:a1c:2d85:: with SMTP id t127mr3180500wmt.22.1602075989680; Wed, 07 Oct 2020 06:06:29 -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: Tomasz Figa Date: Wed, 7 Oct 2020 15:06:17 +0200 X-Gmail-Original-Message-ID: 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 , Daniel Vetter , Seung-Woo Kim , LKML , DRI Development , Kyungmin Park , Linux MM , =?UTF-8?B?SsOpcsO0bWUgR2xpc3Nl?= , John Hubbard , 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 bmVsLm9yZy9saW51eC1tbS8yMDIwMDkyODIzNTczOS5HVTk5MTZAemllcGUuY2EvCj4KPiA+ID4g U2luY2UgZXZlcnkgZHJpdmVyIGRvZXMgdGhpcyB3cm9uZyBhbnl0aGluZyB0aGF0IHVzZXMgdGhp cyBpcyBjcmVhdGluZwo+ID4gPiB0ZXJyaWZ5aW5nIHNlY3VyaXR5IGlzc3Vlcy4KPiA+ID4KPiA+ ID4gSU1ITyB0aGlzIHdob2xlIEFQSSBzaG91bGQgYmUgZGVsZXRlZCA6KAo+ID4KPiA+IFllYWgg dGhhdCBwYXJ0IEkganVzdCB0cmllZCB0byBjb252ZW5pZW50bHkgaWdub3JlLiBJIGd1ZXNzIHRo aXMgZGF0ZXMKPiA+IGJhY2sgdG8gYSB0aW1lIHdoZW4gaW9yZW1hcHMgd2hlcmUgYXQgYmVzdCBm aXhlZCwgYW5kIHRoZXJlIHdhc24ndAo+ID4gYW55dGhpbmcgbGlrZSBhIGdwdSBkcml2ZXIgZHlu YW1pY2FsbHkgbWFuYWdpbmcgdnJhbSBhcm91bmQsIHJlc3VsdGluZwo+ID4gaW4gcmFuZG9tIGVu dGlyZWx5IHVucmVsYXRlZCB0aGluZ3MgcG9zc2libHkgYmVpbmcgbWFwcGVkIHRvIHRoYXQgc2V0 Cj4gPiBvZiBwZm5zLgo+Cj4gTm8sIGl0IHdhcyBhbHdheXMgd3JvbmcuIFByaW9yIHRvIEdQVSBs aWtlIGNhc2VzIHRoZSBsaWZldGltZSBvZiB0aGUKPiBQVEUgd2FzIHRpZWQgdG8gdGhlIHZtYSBh bmQgd2hlbiB0aGUgdm1hIGJlY29tZXMgZnJlZSB0aGUgZHJpdmVyIGNhbgo+IG1vdmUgdGhlIHRo aW5ncyBpbiB0aGUgUFRFcyB0byAnZnJlZScuIEVhc3kgdG8gdHJpZ2dlciB1c2UtYWZ0ZXItZnJl ZQo+IGlzc3VlcyBhbmQgZGV2aWNlcyBsaWtlIFJETUEgaGF2ZSBzZWN1cml0eSBjb250ZXh0cyBh dHRhY2hlZCB0byB0aGVzZQo+IFBURXMgc28gaXQgYmVjb21lcyBhIHNlcmlvdXMgc2VjdXJpdHkg YnVnIHRvIGRvIHNvbWV0aGluZyBsaWtlIHRoaXMuCj4KPiA+IFRoZSB1bmRlcmx5aW5nIGZvbGxv d19wZm4gaXMgYWxzbyB1c2VkIGluIG90aGVyIHBsYWNlcyB3aXRoaW4KPiA+IGRyaXZlcnMvbWVk aWEsIHNvIHRoaXMgZG9lc24ndCBzZWVtIHRvIGJlIGFuIGFjY2lkZW50LCBidXQgYWN0dWFsbHkK PiA+IGludGVudGlvbmFsLgo+Cj4gTG9va2luZyBjbG9zZWx5LCB0aGVyZSBhcmUgdmVyeSBmZXcg dXNlcnMsIG1vc3QgKnNlZW0qIHBvaW50bGVzcywgYnV0Cj4gbWF5YmUgdGhlcmUgaXMgYSBjcmF6 eSByZWFzb24/Cj4KPiBUaGUgc2VxdWVuY2UKPiAgIGdldF92YWRkcl9mcmFtZXMoKTsKPiAgIGZy YW1lX3ZlY3Rvcl90b19wYWdlcygpOwo+ICAgc2dfYWxsb2NfdGFibGVfZnJvbV9wYWdlcygpOwo+ Cj4gU2hvdWxkIGJlIHdyaXR0ZW4KPiAgIHBpbl91c2VyX3BhZ2VzX2Zhc3QoRk9MTF9MT05HVEVS TSk7Cj4gICBzZ19hbGxvY190YWJsZV9mcm9tX3BhZ2VzKCkKPgo+IFRoZXJlIGlzIHNvbWUgJ3Nw ZWNpYWwnIGNvZGUgaW4gZnJhbWVfdmVjdG9yX3RvX3BhZ2VzKCkgdGhhdCB0cmllcyB0bwo+IGdl dCBhIHN0cnVjdCBwYWdlIGZvciB0aGluZ3MgZnJvbSBhIFZNX0lPIG9yIFZNX1BGTk1BUC4uLgo+ Cj4gT2ggc25hcCwgdGhhdCBpcyAqY29tcGxldGVseSogYnJva2VuISBJZiB0aGUgZmlyc3QgVk1B IGlzIElPfFBGTk1BUAo+IHRoZW4gZ2V0X3ZhZGRyX2ZyYW1lcygpIGl0ZXJhdGVzIG92ZXIgYWxs IFZNQXMgaW4gdGhlIHJhbmdlLCBvZiBhbnkKPiBraW5kIGFuZCBleHRyYWN0cyB0aGUgUFRFcyB0 aGVuIGJsaW5kbHkgcmVmZXJlbmNlcyB0aGVtISBUaGlzIG1lYW5zIGl0Cj4gY2FuIGJlIHVzZWQg dG8gdXNlIGFmdGVyIGZyZWUgbm9ybWFsIFJBTSBzdHJ1Y3QgcGFnZXMhISBHYWghCj4KPiBXb3cu IE9rYXkuIFRoYXQgaGFzIHRvIGdvLgo+Cj4gU28sIEkgKnRoaW5rKiB3ZSBjYW4gYXNzdW1lIHRo ZXJlIGlzIG5vIHNhbmUgY2FzZXMgd2hlcmUKPiBmcmFtZV92ZWN0b3JfdG9fcGFnZXMoKSBzdWNj ZWVkcyBidXQgcGluX3VzZXJfcGFnZXMoKSB3YXNuJ3QgY2FsbGVkLgo+Cj4gVGhhdCBtZWFucyB0 aGUgdXNlcnMgaGVyZToKPiAgLSBoYWJhbmFsYWJzOiAgSGV5IE9kZWQgY2FuIHlvdSBmaXggdGhp cyB1cD8KPgo+ICAtIGdwdS9leHlub3M6IERhbmllbCBjYW4geW91IGdldCBzb21lb25lIHRoZXJl IHRvIHN0b3AgdXNpbmcgaXQ/Cj4KPiAgLSBtZWRpYS92aWRlb2J1ZiB2aWEgdmIyX2RtYV9zZ19n ZXRfdXNlcnB0cigpCj4KPiBTaG91bGQgYWxsIGJlIHN3aXRjaGVkIHRvIHRoZSBzdGFuZGFyZCBw aW5fdXNlcl9wYWdlcyBzZXF1ZW5jZQo+IGFib3ZlLgo+Cj4gVGhhdCBsZWF2ZXMgdGhlIG9ubHkg aW50ZXJlc3RpbmcgcGxhY2VzIGFzIHZiMl9kY19nZXRfdXNlcnB0cigpIGFuZAo+IHZiMl92bWFs bG9jX2dldF91c2VycHRyKCkgd2hpY2ggYm90aCBjb21wbGV0ZWx5IGZhaWwgdG8gZm9sbG93IHRo ZQo+IFJFUVVJUkVEIGJlaGF2aW9yIGluIHRoZSBmdW5jdGlvbidzIGNvbW1lbnQgYWJvdXQgY2hl Y2tpbmcgUFRFcy4gSXQKPiBqdXN0IERNQSBtYXBzIHRoZW0uIEJhZGx5IGJyb2tlbi4KCk5vdGUg dGhhdCB2YjJfdm1hbGxvYyBpcyBvbmx5IHVzZWQgZm9yIGluLWtlcm5lbCBDUFUgdXNhZ2UsIGUu Zy4gdGhlCmNvbnRlbnRzIGJlaW5nIGNvcGllZCBieSB0aGUgZHJpdmVyIGJldHdlZW4gdmIyIGJ1 ZmZlcnMgYW5kIHNvbWUKaGFyZHdhcmUgRklGTyBvciBvdGhlciBkZWRpY2F0ZWQgYnVmZmVycy4g VGhlIG1lbW9yeSBkb2VzIG5vdCBnbyB0bwphbnkgaGFyZHdhcmUgRE1BLgoKQ291bGQgeW91IGVs YWJvcmF0ZSBvbiB3aGF0ICJ0aGUgUkVRVUlSRUQgYmVoYXZpb3IgaXMiPyBJIGNhbiBzZWUgdGhh dApib3RoIGZvbGxvdyB0aGUgZ2V0X3ZhZGRyX2ZyYW1lcygpIC0+IGZyYW1lX3ZlY3Rvcl90b19w YWdlcygpIGZsb3csIGFzCnlvdSBtZW50aW9uZWQuIFBlcmhhcHMgdGhlIG9ubHkgY2hhbmdlIG5l ZWRlZCBpcyBzd2l0Y2hpbmcgdG8KcGluX3VzZXJfcGFnZXMgYWZ0ZXIgYWxsPwoKPgo+IEd1ZXNz aW5nIHRoaXMgaGFja2VyeSBpcyBmb3Igc29tZSBlbWJlZGRlZCBQMlAgRE1BIHRyYW5zZmVyPwo+ CgpUaGF0J3Mgbm90IHRoZSBjYXNlLiBUaGVyZSBhcmUgdHdvIHVzYWdlIHNjZW5hcmlvczoKCjEp IFJlZ3VsYXIgdXNlciBwb2ludGVyIHN1cHBvcnQsIGkuZS4gdXNpbmcgbWFsbG9jKCllZCBtZW1v cnkgYXMgYQp2aWRlbyBpbnB1dCBvciBvdXRwdXQgYnVmZmVyLiBUaGlzIGlzIGRlZW1lZCB0byBi ZSBkZXByZWNhdGVkLCBidXQKc3RpbGwgdXNlZCBxdWl0ZSB3aWRlbHkgYnkgdmFyaW91cyBhcHBs aWNhdGlvbnMuIFF1aXRlIGNvbW1vbiBmb3IKdmlkZW8gZGVjb2RlciBpbnB1dCBhbmQgdmlkZW8g ZW5jb2RlciBvdXRwdXQsIGJlY2F1c2UgdGhlIG90aGVyIHNpZGUKb2YgdGhlIHBpcGVsaW5lIGlz IENQVSwgZS5nLiBuZXR3b3JrIHN0YWNrLgoKMikgU2hhcmluZyBjYXJ2ZW91dCBidWZmZXJzICh3 aXRob3V0IHN0cnVjdCBwYWdlcyBhdHRhY2hlZCkgYmV0d2Vlbgp0d28gZGV2aWNlcy4gSSBiZWxp ZXZlIHRoaXMgcHJlZGF0ZXMgRE1BLWJ1ZiBhbmQgQ01BICh3aGljaCBlbmFibGVkCmNhcnZlb3V0 cyB3aXRoIHN0cnVjdCBwYWdlcykgYW5kIEknbSBub3Qgc3VyZSBob3cgY29tbW9ubHkgaXQgaXMg dXNlZAp0aGVzZSBkYXlzLgoKPiBBZnRlciBoZSB0aHJlZSBwbGFjZXMgYWJvdmUgc2hvdWxkIHVz ZSBwaW5fdXNlcl9wYWdlc19mYXN0KCksIHRoZW4KPiB0aGlzIHdob2xlIGJyb2tlbiBBUEkgc2hv dWxkIGJlIG1vdmVkIGludG8gdmlkZW9idWYyLW1lbW9wcy5jIGFuZCBhCj4gYmlnIGZhdCAiVEhJ UyBET0VTTidUIFdPUksiIHN0dWNrIG9uIGl0Lgo+Cj4gdmlkZW9idWYyIHNob3VsZCBwcm9iYWJs eSB1c2UgUDJQIERNQSBidWYgZm9yIHRoaXMgaW5zdGVhZC4KClNlZSBhYm92ZS4KCkJlc3QgcmVn YXJkcywKVG9tYXN6Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bAo=