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,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, 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 89E5FC4727D for ; Sat, 3 Oct 2020 08:34:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3F39620754 for ; Sat, 3 Oct 2020 08:34:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="s2B2+iZ2" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725772AbgJCIea (ORCPT ); Sat, 3 Oct 2020 04:34:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52226 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725601AbgJCIea (ORCPT ); Sat, 3 Oct 2020 04:34:30 -0400 Received: from mail-oi1-x243.google.com (mail-oi1-x243.google.com [IPv6:2607:f8b0:4864:20::243]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 021BDC0613D0; Sat, 3 Oct 2020 01:34:29 -0700 (PDT) Received: by mail-oi1-x243.google.com with SMTP id m7so3688817oie.0; Sat, 03 Oct 2020 01:34:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=MwiC6YyUZFKsR0OxsiL5dqCxbE9WNpSWpYmDHi3uZb4=; b=s2B2+iZ2DS5bAdFajuwTOZbSgIS0kvKB9eFuoSekzKVBfHj6VYFZcLuQc7DFDKFRCh 0CzYQdJqdyNjQ4+AaYAD+BcfFg6UYJwfzDTabb5ckgFbh9G5tbV/b3a8Tb8IaHYrXK9e YgjqWIYUIHDI9NisNeGL+94NPhn5X4ZU0t2nCZ97bNiFv5fdQPbyjjcVbsXDTTkWWBS0 dPHhV578Mo38EZCUj2h3XEEx/Q7Onc584hjVNjFimVQJrJaXv4PvgfPdCovKR3YG2ZqV bCyL8nTePjit6Q7hnm+hTCotVghPI21Ao+zOAy3SfUT52mcspFE34Tjxj+XjcX2EPsmH xyfw== 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=MwiC6YyUZFKsR0OxsiL5dqCxbE9WNpSWpYmDHi3uZb4=; b=R2keyKu6YxFHYjPi/BJzqLIoUQIHwwo6itGsgO2v075eMYVbBDBXRaOMcc9WCHWBVH bTF4O4CFHDr1Kpafj6IfBYdiewPft/kR+iBnnKxQSjlRfFwjObUYTEoLJmklk4kiCKTB CiFKodyZ04FXs5PFLqvCzZLOQpiVLD+deWuEzS8HjZkBT9kr/iyTbvBZQsKR5pOO4Jdw 1AWlTzSSpzL1al3/ddtI6izX1pcsOS5UiuF/rODEiDGaQ+LOWCq+VREKfsZqhbAIqG3y N6DjVSAj5EcbUPZRYqJglzVVIVr6zh+doNjdihgF0AZGW0ehNesYAIDq9I/5pdt4rZGP xkBg== X-Gm-Message-State: AOAM533oJ36Tmz/SaIBSxhMW6h/uCWmQS0vYViSUfwxJ/YV+z2olpFwh XPGmAcK/40PMRZSRrTjS1jvqqliR9Aetk8s14Js= X-Google-Smtp-Source: ABdhPJwz6YDv9Y3Szh9uKYhc8PvVg5MEbm5BaRdTqy54FwkGbFwyabTSxzLcQSKtnQ+lvxanp34yvku05esUVnF4kVA= X-Received: by 2002:a05:6808:3bb:: with SMTP id n27mr3285560oie.130.1601714069143; Sat, 03 Oct 2020 01:34: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: Oded Gabbay Date: Sat, 3 Oct 2020 11:34:01 +0300 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 , Tomasz Figa , Inki Dae , Joonyoung Shim , Seung-Woo Kim , linux-samsung-soc , "open list:DMA BUFFER SHARING FRAMEWORK" 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 2: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? Yes, no problem, I'll do it very soon. Thanks, Oded > > - 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? > > 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. > > Jason 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.7 required=3.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, 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 1935FC4363D for ; Sat, 3 Oct 2020 08:36: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 9E87D206DB for ; Sat, 3 Oct 2020 08:36: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="B7jEtnZD"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="s2B2+iZ2" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9E87D206DB Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com 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=rvaMUgA+GUSJpfdXfvMhtwziKSjTiECvlWrUqt7d7tc=; b=B7jEtnZDEnqwD9c7DiD9PV3h3 ZBNYo8mgz/Tty8c+8VtWywrmbHoxLekbcm6CFtqXRGsaw4mNyZ/RlljXGF7Na9mLPlFgEQPAk53Qi ODS/9tDuWOiJpygZmcfwjRZPZoFYfRV5iATptPx0M5KPaE5/JGqZo2l2O+UWVN5VTSy7j4N8oRsIC suszyUXv3KqURvA5nfqmVdmTKQgkVWAtoFF8n6IGeHwGk8IC+rJUVgsum7g9uGRpqKnCaRU0D6m5i yn3AZ1XpanR6BWj2xZL2bTxZPvvqa8QbVKcIb8uYjhKuBrZ7Knozy1xdK/UD8REGAp+2R5kBIVr5T bC+nJcVLg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kOczy-0005Cf-8r; Sat, 03 Oct 2020 08:34:34 +0000 Received: from mail-oi1-x243.google.com ([2607:f8b0:4864:20::243]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kOczv-0005Bv-G0 for linux-arm-kernel@lists.infradead.org; Sat, 03 Oct 2020 08:34:32 +0000 Received: by mail-oi1-x243.google.com with SMTP id v20so3664047oiv.3 for ; Sat, 03 Oct 2020 01:34:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=MwiC6YyUZFKsR0OxsiL5dqCxbE9WNpSWpYmDHi3uZb4=; b=s2B2+iZ2DS5bAdFajuwTOZbSgIS0kvKB9eFuoSekzKVBfHj6VYFZcLuQc7DFDKFRCh 0CzYQdJqdyNjQ4+AaYAD+BcfFg6UYJwfzDTabb5ckgFbh9G5tbV/b3a8Tb8IaHYrXK9e YgjqWIYUIHDI9NisNeGL+94NPhn5X4ZU0t2nCZ97bNiFv5fdQPbyjjcVbsXDTTkWWBS0 dPHhV578Mo38EZCUj2h3XEEx/Q7Onc584hjVNjFimVQJrJaXv4PvgfPdCovKR3YG2ZqV bCyL8nTePjit6Q7hnm+hTCotVghPI21Ao+zOAy3SfUT52mcspFE34Tjxj+XjcX2EPsmH xyfw== 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=MwiC6YyUZFKsR0OxsiL5dqCxbE9WNpSWpYmDHi3uZb4=; b=O+WMsedLfX1gB+oq+JpKFCg3qOR803L+DwK3eWVSmMj5466eivPwN9YUzm97An458n m+pHXpRsOR1+FoJkg/xDfF0itBfUiqar9zI+Z8CAqOQRDncWnMUEUn4PirsrAoRugH4m 51+yRLvJmx2WRRvDJ4t4ay0b4ujV1ZZOxxVwQOlt2D4f/6WVtM+UYRWhJhq3U5FiGtJx uCVMUv8xbsBWIdOFNxcAk0x8CGApKFc38sOkLNlBiBqidKTnpOXUxUPqDWgusM2neAsW rq8LZsCdV6Cpz3XQca+l8NAscSNQfR+WNX8c2QGpNU5WmqLH1OfEZGTBuanI+KRba05p wfUA== X-Gm-Message-State: AOAM5303cCNtez3mm+2p4dKYBK6IlIS0wTlk2tKIhhxOd3ZWv1Zde00/ 0In3s0jHUZvPI97Qw8Xo0/qY0EpqhkYiftK4tlw= X-Google-Smtp-Source: ABdhPJwz6YDv9Y3Szh9uKYhc8PvVg5MEbm5BaRdTqy54FwkGbFwyabTSxzLcQSKtnQ+lvxanp34yvku05esUVnF4kVA= X-Received: by 2002:a05:6808:3bb:: with SMTP id n27mr3285560oie.130.1601714069143; Sat, 03 Oct 2020 01:34: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: Oded Gabbay Date: Sat, 3 Oct 2020 11:34:01 +0300 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_043431_583482_AE998156 X-CRM114-Status: GOOD ( 41.27 ) 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: Inki Dae , linux-samsung-soc , Jan Kara , Joonyoung Shim , Pawel Osciak , Daniel Vetter , Seung-Woo Kim , LKML , DRI Development , Tomasz Figa , 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 T24gU2F0LCBPY3QgMywgMjAyMCBhdCAyOjMxIEFNIEphc29uIEd1bnRob3JwZSA8amdnQHppZXBl 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 cyB1cD8KWWVzLCBubyBwcm9ibGVtLCBJJ2xsIGRvIGl0IHZlcnkgc29vbi4KVGhhbmtzLApPZGVk Cgo+Cj4gIC0gZ3B1L2V4eW5vczogRGFuaWVsIGNhbiB5b3UgZ2V0IHNvbWVvbmUgdGhlcmUgdG8g c3RvcCB1c2luZyBpdD8KPgo+ICAtIG1lZGlhL3ZpZGVvYnVmIHZpYSB2YjJfZG1hX3NnX2dldF91 c2VycHRyKCkKPgo+IFNob3VsZCBhbGwgYmUgc3dpdGNoZWQgdG8gdGhlIHN0YW5kYXJkIHBpbl91 c2VyX3BhZ2VzIHNlcXVlbmNlCj4gYWJvdmUuCj4KPiBUaGF0IGxlYXZlcyB0aGUgb25seSBpbnRl cmVzdGluZyBwbGFjZXMgYXMgdmIyX2RjX2dldF91c2VycHRyKCkgYW5kCj4gdmIyX3ZtYWxsb2Nf Z2V0X3VzZXJwdHIoKSB3aGljaCBib3RoIGNvbXBsZXRlbHkgZmFpbCB0byBmb2xsb3cgdGhlCj4g UkVRVUlSRUQgYmVoYXZpb3IgaW4gdGhlIGZ1bmN0aW9uJ3MgY29tbWVudCBhYm91dCBjaGVja2lu ZyBQVEVzLiBJdAo+IGp1c3QgRE1BIG1hcHMgdGhlbS4gQmFkbHkgYnJva2VuLgo+Cj4gR3Vlc3Np bmcgdGhpcyBoYWNrZXJ5IGlzIGZvciBzb21lIGVtYmVkZGVkIFAyUCBETUEgdHJhbnNmZXI/Cj4K PiBBZnRlciBoZSB0aHJlZSBwbGFjZXMgYWJvdmUgc2hvdWxkIHVzZSBwaW5fdXNlcl9wYWdlc19m YXN0KCksIHRoZW4KPiB0aGlzIHdob2xlIGJyb2tlbiBBUEkgc2hvdWxkIGJlIG1vdmVkIGludG8g dmlkZW9idWYyLW1lbW9wcy5jIGFuZCBhCj4gYmlnIGZhdCAiVEhJUyBET0VTTidUIFdPUksiIHN0 dWNrIG9uIGl0Lgo+Cj4gdmlkZW9idWYyIHNob3VsZCBwcm9iYWJseSB1c2UgUDJQIERNQSBidWYg Zm9yIHRoaXMgaW5zdGVhZC4KPgo+IEphc29uCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1h cm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg== 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_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, 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 D403DC4727E for ; Sat, 3 Oct 2020 08:34:31 +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 717AB206F8 for ; Sat, 3 Oct 2020 08:34:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="s2B2+iZ2" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 717AB206F8 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C3C606E125; Sat, 3 Oct 2020 08:34:30 +0000 (UTC) Received: from mail-oi1-x244.google.com (mail-oi1-x244.google.com [IPv6:2607:f8b0:4864:20::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id EF75D6E125 for ; Sat, 3 Oct 2020 08:34:29 +0000 (UTC) Received: by mail-oi1-x244.google.com with SMTP id x14so3643655oic.9 for ; Sat, 03 Oct 2020 01:34:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=MwiC6YyUZFKsR0OxsiL5dqCxbE9WNpSWpYmDHi3uZb4=; b=s2B2+iZ2DS5bAdFajuwTOZbSgIS0kvKB9eFuoSekzKVBfHj6VYFZcLuQc7DFDKFRCh 0CzYQdJqdyNjQ4+AaYAD+BcfFg6UYJwfzDTabb5ckgFbh9G5tbV/b3a8Tb8IaHYrXK9e YgjqWIYUIHDI9NisNeGL+94NPhn5X4ZU0t2nCZ97bNiFv5fdQPbyjjcVbsXDTTkWWBS0 dPHhV578Mo38EZCUj2h3XEEx/Q7Onc584hjVNjFimVQJrJaXv4PvgfPdCovKR3YG2ZqV bCyL8nTePjit6Q7hnm+hTCotVghPI21Ao+zOAy3SfUT52mcspFE34Tjxj+XjcX2EPsmH xyfw== 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=MwiC6YyUZFKsR0OxsiL5dqCxbE9WNpSWpYmDHi3uZb4=; b=iTZKt/y05CX58EzgZhOq9uHiFfW9cztl0JObcuIK98uFP9o+VPqiWzozRe3A4u2L6/ 4mQap0nY1fz7+D7lFmiG4q/J0feW2EbWE5P4e7NniSp+Rht/YMJA8hyg49b9p/4LbfkI bhc8r1RYloOELkPuH42g5vGW7GzHBBtJTyXdclenWoyCTZDTi2pTj/Hy6+r9z8Cl2w0m ZkStn7/rXEJoi7Bie/nWHxd6NWslmJ9VTTSJYoSW2nvM3EtTNCoeI8u+4yXDRht8jV3J fG+2MZ/XNPgHR8XWvVeAdw6OP2MrPiZXaogPMykcChfvvUQwPo+HVoXW8TiC1XZY0tS2 wNzg== X-Gm-Message-State: AOAM531B1YxmOytlhdKSk1HUiACekVVkRaKVM+GycsjQndJiPl3zwl6Y +sLTDhHbQCzuaVZnE6FH8CPt6hpcwfdp+jpROhk= X-Google-Smtp-Source: ABdhPJwz6YDv9Y3Szh9uKYhc8PvVg5MEbm5BaRdTqy54FwkGbFwyabTSxzLcQSKtnQ+lvxanp34yvku05esUVnF4kVA= X-Received: by 2002:a05:6808:3bb:: with SMTP id n27mr3285560oie.130.1601714069143; Sat, 03 Oct 2020 01:34: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: Oded Gabbay Date: Sat, 3 Oct 2020 11:34:01 +0300 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 , Tomasz Figa , 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" T24gU2F0LCBPY3QgMywgMjAyMCBhdCAyOjMxIEFNIEphc29uIEd1bnRob3JwZSA8amdnQHppZXBl 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 cyB1cD8KWWVzLCBubyBwcm9ibGVtLCBJJ2xsIGRvIGl0IHZlcnkgc29vbi4KVGhhbmtzLApPZGVk Cgo+Cj4gIC0gZ3B1L2V4eW5vczogRGFuaWVsIGNhbiB5b3UgZ2V0IHNvbWVvbmUgdGhlcmUgdG8g c3RvcCB1c2luZyBpdD8KPgo+ICAtIG1lZGlhL3ZpZGVvYnVmIHZpYSB2YjJfZG1hX3NnX2dldF91 c2VycHRyKCkKPgo+IFNob3VsZCBhbGwgYmUgc3dpdGNoZWQgdG8gdGhlIHN0YW5kYXJkIHBpbl91 c2VyX3BhZ2VzIHNlcXVlbmNlCj4gYWJvdmUuCj4KPiBUaGF0IGxlYXZlcyB0aGUgb25seSBpbnRl cmVzdGluZyBwbGFjZXMgYXMgdmIyX2RjX2dldF91c2VycHRyKCkgYW5kCj4gdmIyX3ZtYWxsb2Nf Z2V0X3VzZXJwdHIoKSB3aGljaCBib3RoIGNvbXBsZXRlbHkgZmFpbCB0byBmb2xsb3cgdGhlCj4g UkVRVUlSRUQgYmVoYXZpb3IgaW4gdGhlIGZ1bmN0aW9uJ3MgY29tbWVudCBhYm91dCBjaGVja2lu ZyBQVEVzLiBJdAo+IGp1c3QgRE1BIG1hcHMgdGhlbS4gQmFkbHkgYnJva2VuLgo+Cj4gR3Vlc3Np bmcgdGhpcyBoYWNrZXJ5IGlzIGZvciBzb21lIGVtYmVkZGVkIFAyUCBETUEgdHJhbnNmZXI/Cj4K PiBBZnRlciBoZSB0aHJlZSBwbGFjZXMgYWJvdmUgc2hvdWxkIHVzZSBwaW5fdXNlcl9wYWdlc19m YXN0KCksIHRoZW4KPiB0aGlzIHdob2xlIGJyb2tlbiBBUEkgc2hvdWxkIGJlIG1vdmVkIGludG8g dmlkZW9idWYyLW1lbW9wcy5jIGFuZCBhCj4gYmlnIGZhdCAiVEhJUyBET0VTTidUIFdPUksiIHN0 dWNrIG9uIGl0Lgo+Cj4gdmlkZW9idWYyIHNob3VsZCBwcm9iYWJseSB1c2UgUDJQIERNQSBidWYg Zm9yIHRoaXMgaW5zdGVhZC4KPgo+IEphc29uCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAo=