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=-9.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E1AE6C4741F for ; Fri, 30 Oct 2020 14:11:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6D07A221EB for ; Fri, 30 Oct 2020 14:11:35 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="LH6iU5G+" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726781AbgJ3OLe (ORCPT ); Fri, 30 Oct 2020 10:11:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59952 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726178AbgJ3OLd (ORCPT ); Fri, 30 Oct 2020 10:11:33 -0400 Received: from mail-ej1-x644.google.com (mail-ej1-x644.google.com [IPv6:2a00:1450:4864:20::644]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2BA1FC0613CF for ; Fri, 30 Oct 2020 07:11:33 -0700 (PDT) Received: by mail-ej1-x644.google.com with SMTP id j24so8770418ejc.11 for ; Fri, 30 Oct 2020 07:11:33 -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=fGLh8FE7n+kGnPiOSCfCu+B491Brb7ePqBRZY6cItBg=; b=LH6iU5G+qAZ4T7sqXNGE44q/WiF+g2smHT8tK2NZZq846wCXnKZVs/i0NAbqwfc9xk 21Yj3MNkwi0ukryfrHB9hVgWhM+cdTTWfsDLp+g3D7Iig02N7iwYOeg6SfA5q4dylm2H zlOSbk28N2b27zmw/TwjqgMUPI5sLxmAXsXzk= 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=fGLh8FE7n+kGnPiOSCfCu+B491Brb7ePqBRZY6cItBg=; b=pYJiw8OYRAHISsNZ65S8moyhob59Nvzit5rzk16Lwpr7LcSU9Z3q9vsZsTQTMWYEzw lNbAPeGdTcS/Qm8igbzzADiT6gh77CVAA0mufcG+Xsdpiuk5DK5C82lGdTEJbaRkmzyR 8tPs0WsWLZP9V+NMOaLry/NrwuhrMWi5AuGXssBkMRrj9bOq42jKaIlU7OrTrQr2g9pH p+zYKgP2whLJHz804/8i/9P6hBIWf896vSfs4sLTuO1Xa4PuiYcmG5NRAJuYdE2k5RQE IeOQd+pMYiUm2jeRjfkkVL9BaWNz/yUApPh39gSBn0AYmtAGCgYAvrgx8lAqoUHN9FGZ xVWA== X-Gm-Message-State: AOAM533yX2mZGB2vrVdnvt0bf+lvi4/FiPudROna1pdLdhseziyfhG1P rD/eQvqsH69+RADCcKdUhoLXyyaRNmF/lg== X-Google-Smtp-Source: ABdhPJxr2uxmD5JwebWHZivfL2h5fhFHkcZdSTHFI+IyauNCZHiiYggasm5+e2w0zLuxCiV5oWRf5g== X-Received: by 2002:a17:906:cec2:: with SMTP id si2mr1880928ejb.34.1604067091497; Fri, 30 Oct 2020 07:11:31 -0700 (PDT) Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com. [209.85.221.41]) by smtp.gmail.com with ESMTPSA id e9sm922712edn.30.2020.10.30.07.11.25 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 30 Oct 2020 07:11:26 -0700 (PDT) Received: by mail-wr1-f41.google.com with SMTP id k10so5287106wrw.13 for ; Fri, 30 Oct 2020 07:11:25 -0700 (PDT) X-Received: by 2002:adf:e892:: with SMTP id d18mr3615109wrm.103.1604067085454; Fri, 30 Oct 2020 07:11:25 -0700 (PDT) MIME-Version: 1.0 References: <20201030100815.2269-1-daniel.vetter@ffwll.ch> <20201030100815.2269-6-daniel.vetter@ffwll.ch> In-Reply-To: <20201030100815.2269-6-daniel.vetter@ffwll.ch> From: Tomasz Figa Date: Fri, 30 Oct 2020 15:11:14 +0100 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v5 05/15] mm/frame-vector: Use FOLL_LONGTERM To: Daniel Vetter Cc: DRI Development , LKML , kvm , Linux MM , "list@263.net:IOMMU DRIVERS , Joerg Roedel ," , linux-samsung-soc , Linux Media Mailing List , Daniel Vetter , Jason Gunthorpe , Pawel Osciak , Marek Szyprowski , Kyungmin Park , Mauro Carvalho Chehab , Andrew Morton , John Hubbard , =?UTF-8?B?SsOpcsO0bWUgR2xpc3Nl?= , Jan Kara , Dan Williams 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 Fri, Oct 30, 2020 at 11:08 AM Daniel Vetter wro= te: > > This is used by media/videbuf2 for persistent dma mappings, not just > for a single dma operation and then freed again, so needs > FOLL_LONGTERM. > > Unfortunately current pup_locked doesn't support FOLL_LONGTERM due to > locking issues. Rework the code to pull the pup path out from the > mmap_sem critical section as suggested by Jason. > > By relying entirely on the vma checks in pin_user_pages and follow_pfn > (for vm_flags and vma_is_fsdax) we can also streamline the code a lot. > > Signed-off-by: Daniel Vetter > Cc: Jason Gunthorpe > Cc: Pawel Osciak > Cc: Marek Szyprowski > Cc: Kyungmin Park > Cc: Tomasz Figa > Cc: Mauro Carvalho Chehab > 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 > Signed-off-by: Daniel Vetter > -- > v2: Streamline the code and further simplify the loop checks (Jason) > > v5: Review from Tomasz: > - fix page counting for the follow_pfn case by resetting ret > - drop gup_flags paramater, now unused > --- > .../media/common/videobuf2/videobuf2-memops.c | 3 +- > include/linux/mm.h | 2 +- > mm/frame_vector.c | 53 ++++++------------- > 3 files changed, 19 insertions(+), 39 deletions(-) > Thanks, looks good to me now. Acked-by: Tomasz Figa >From reading the code, this is quite unlikely to introduce any behavior changes, but just to be safe, did you have a chance to test this with some V4L2 driver? Best regards, Tomasz > diff --git a/drivers/media/common/videobuf2/videobuf2-memops.c b/drivers/= media/common/videobuf2/videobuf2-memops.c > index 6e9e05153f4e..9dd6c27162f4 100644 > --- a/drivers/media/common/videobuf2/videobuf2-memops.c > +++ b/drivers/media/common/videobuf2/videobuf2-memops.c > @@ -40,7 +40,6 @@ struct frame_vector *vb2_create_framevec(unsigned long = start, > unsigned long first, last; > unsigned long nr; > struct frame_vector *vec; > - unsigned int flags =3D FOLL_FORCE | FOLL_WRITE; > > first =3D start >> PAGE_SHIFT; > last =3D (start + length - 1) >> PAGE_SHIFT; > @@ -48,7 +47,7 @@ struct frame_vector *vb2_create_framevec(unsigned long = start, > vec =3D frame_vector_create(nr); > if (!vec) > return ERR_PTR(-ENOMEM); > - ret =3D get_vaddr_frames(start & PAGE_MASK, nr, flags, vec); > + ret =3D get_vaddr_frames(start & PAGE_MASK, nr, vec); > if (ret < 0) > goto out_destroy; > /* We accept only complete set of PFNs */ > diff --git a/include/linux/mm.h b/include/linux/mm.h > index ef360fe70aaf..d6b8e30dce2e 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -1765,7 +1765,7 @@ struct frame_vector { > struct frame_vector *frame_vector_create(unsigned int nr_frames); > void frame_vector_destroy(struct frame_vector *vec); > int get_vaddr_frames(unsigned long start, unsigned int nr_pfns, > - unsigned int gup_flags, struct frame_vector *vec); > + struct frame_vector *vec); > void put_vaddr_frames(struct frame_vector *vec); > int frame_vector_to_pages(struct frame_vector *vec); > void frame_vector_to_pfns(struct frame_vector *vec); > diff --git a/mm/frame_vector.c b/mm/frame_vector.c > index 10f82d5643b6..f8c34b895c76 100644 > --- a/mm/frame_vector.c > +++ b/mm/frame_vector.c > @@ -32,13 +32,12 @@ > * This function takes care of grabbing mmap_lock as necessary. > */ > int get_vaddr_frames(unsigned long start, unsigned int nr_frames, > - unsigned int gup_flags, struct frame_vector *vec) > + struct frame_vector *vec) > { > struct mm_struct *mm =3D current->mm; > struct vm_area_struct *vma; > int ret =3D 0; > int err; > - int locked; > > if (nr_frames =3D=3D 0) > return 0; > @@ -48,40 +47,26 @@ int get_vaddr_frames(unsigned long start, unsigned in= t nr_frames, > > start =3D untagged_addr(start); > > - mmap_read_lock(mm); > - locked =3D 1; > - vma =3D find_vma_intersection(mm, start, start + 1); > - if (!vma) { > - ret =3D -EFAULT; > - goto out; > - } > - > - /* > - * While get_vaddr_frames() could be used for transient (kernel > - * controlled lifetime) pinning of memory pages all current > - * users establish long term (userspace controlled lifetime) > - * page pinning. Treat get_vaddr_frames() like > - * get_user_pages_longterm() and disallow it for filesystem-dax > - * mappings. > - */ > - if (vma_is_fsdax(vma)) { > - ret =3D -EOPNOTSUPP; > - goto out; > - } > - > - if (!(vma->vm_flags & (VM_IO | VM_PFNMAP))) { > + ret =3D pin_user_pages_fast(start, nr_frames, > + FOLL_FORCE | FOLL_WRITE | FOLL_LONGTERM= , > + (struct page **)(vec->ptrs)); > + if (ret > 0) { > vec->got_ref =3D true; > vec->is_pfns =3D false; > - ret =3D pin_user_pages_locked(start, nr_frames, > - gup_flags, (struct page **)(vec->ptrs), &locked); > - goto out; > + goto out_unlocked; > } > > + mmap_read_lock(mm); > vec->got_ref =3D false; > vec->is_pfns =3D true; > + ret =3D 0; > do { > unsigned long *nums =3D frame_vector_pfns(vec); > > + vma =3D find_vma_intersection(mm, start, start + 1); > + if (!vma) > + break; > + > while (ret < nr_frames && start + PAGE_SIZE <=3D vma->vm_= end) { > err =3D follow_pfn(vma, start, &nums[ret]); > if (err) { > @@ -92,17 +77,13 @@ int get_vaddr_frames(unsigned long start, unsigned in= t nr_frames, > start +=3D PAGE_SIZE; > ret++; > } > - /* > - * We stop if we have enough pages or if VMA doesn't comp= letely > - * cover the tail page. > - */ > - if (ret >=3D nr_frames || start < vma->vm_end) > + /* Bail out if VMA doesn't completely cover the tail page= . */ > + if (start < vma->vm_end) > break; > - vma =3D find_vma_intersection(mm, start, start + 1); > - } while (vma && vma->vm_flags & (VM_IO | VM_PFNMAP)); > + } while (ret < nr_frames); > out: > - if (locked) > - mmap_read_unlock(mm); > + mmap_read_unlock(mm); > +out_unlocked: > if (!ret) > ret =3D -EFAULT; > if (ret > 0) > -- > 2.28.0 > 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=-9.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8BF70C4363A for ; Fri, 30 Oct 2020 14:13:16 +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 E59662076E for ; Fri, 30 Oct 2020 14:13:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="fRis+PXr"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="LH6iU5G+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E59662076E 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=lBt/DT6lnW6KbTLbDUpY1cklrPfPKel5eFOG0K4LbwA=; b=fRis+PXrVae5Vt7JoWl4iWucD cPy60YE8BcMvojy9kEq1CDy1FFSF6FT7Zmthauez/HYFEMtBJ8EMFxrzWc8Xn87n69+7Q6ptm1keP GzWs9h6LlFJSCKcVyCsCAf8L0XgRaSg+zFBRDuCQGA+4SCvL88acluvm0uZi99LaolihlLf8d35mY gPv8/2lamGRhqTkHv2e/AdHY7te0UcPQxLlVLuZr2GuG8JdZpM+QM7LjicvxLSkGDoQB0OfF5wks8 TXAqNyVQrYvupdln6Ck/ybEK7KTr9Osrw+7mKyrSVBo2VaGbCfqM7sFjGoK+xhn7KLu0gs8Ae56OQ joI/a2cMw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYV7z-0005q6-0s; Fri, 30 Oct 2020 14:11:39 +0000 Received: from mail-ej1-x642.google.com ([2a00:1450:4864:20::642]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYV7v-0005or-KG for linux-arm-kernel@lists.infradead.org; Fri, 30 Oct 2020 14:11:37 +0000 Received: by mail-ej1-x642.google.com with SMTP id k3so8781637ejj.10 for ; Fri, 30 Oct 2020 07:11:32 -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=fGLh8FE7n+kGnPiOSCfCu+B491Brb7ePqBRZY6cItBg=; b=LH6iU5G+qAZ4T7sqXNGE44q/WiF+g2smHT8tK2NZZq846wCXnKZVs/i0NAbqwfc9xk 21Yj3MNkwi0ukryfrHB9hVgWhM+cdTTWfsDLp+g3D7Iig02N7iwYOeg6SfA5q4dylm2H zlOSbk28N2b27zmw/TwjqgMUPI5sLxmAXsXzk= 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=fGLh8FE7n+kGnPiOSCfCu+B491Brb7ePqBRZY6cItBg=; b=KU9RL9ypjNyUCmxtM1YzY1JftZFcN87eo4EP8JCXyUzQSkLq0ri11uTOwOG/MGGIhI l/s/FNV3PaWeJ2G7arh2fQv7Zw7k/fxVfS9GGjbs1kDLvyutOfZS7D+hF/Q+9R5oUynC s/KjIqgVR2TVGCOM2SqIEwHnD7+MicJWhSYqsdARVUIBvns89ZpZ+d42aeJKC/oLaeg0 nKF5z7TT/I4arMVqaMwJi2AnqiELwY989oafDbac4CP1t9VkawDna4SDXZBLISFnbPbw 4OxQBuTVcfUTT65qrRT8MExla2T0/J7bQooI32WiaepcxID02AydiHA1VuQf1BwE/8bZ zD5g== X-Gm-Message-State: AOAM533+FmPTHI87DT9wz7J15mF+Od3QyVmzebKnBR1vAX5fgVwwpjrS fWiybONLuU9j+PiDzOKS3MJC/MHLD/Es2w== X-Google-Smtp-Source: ABdhPJxQWeV5ZPbPvPYn1ef0DTLSF04PSQBmqwI+OweNxvrAUO5brQGHqAnUjaZXhuUKOSE4wtKEcg== X-Received: by 2002:a17:906:b216:: with SMTP id p22mr2682034ejz.228.1604067091617; Fri, 30 Oct 2020 07:11:31 -0700 (PDT) Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com. [209.85.221.41]) by smtp.gmail.com with ESMTPSA id n22sm2991928eji.106.2020.10.30.07.11.25 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 30 Oct 2020 07:11:26 -0700 (PDT) Received: by mail-wr1-f41.google.com with SMTP id y12so6626643wrp.6 for ; Fri, 30 Oct 2020 07:11:25 -0700 (PDT) X-Received: by 2002:adf:e892:: with SMTP id d18mr3615109wrm.103.1604067085454; Fri, 30 Oct 2020 07:11:25 -0700 (PDT) MIME-Version: 1.0 References: <20201030100815.2269-1-daniel.vetter@ffwll.ch> <20201030100815.2269-6-daniel.vetter@ffwll.ch> In-Reply-To: <20201030100815.2269-6-daniel.vetter@ffwll.ch> From: Tomasz Figa Date: Fri, 30 Oct 2020 15:11:14 +0100 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v5 05/15] mm/frame-vector: Use FOLL_LONGTERM To: Daniel Vetter X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201030_101135_710159_C4AD3A6B X-CRM114-Status: GOOD ( 34.23 ) 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: =?UTF-8?B?SsOpcsO0bWUgR2xpc3Nl?= , linux-samsung-soc , Jan Kara , Pawel Osciak , kvm , Jason Gunthorpe , John Hubbard , Mauro Carvalho Chehab , LKML , DRI Development , Linux MM , Kyungmin Park , Daniel Vetter , Andrew Morton , Marek Szyprowski , Dan Williams , "list@263.net:IOMMU DRIVERS , Joerg Roedel , " , Linux Media Mailing List 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 T24gRnJpLCBPY3QgMzAsIDIwMjAgYXQgMTE6MDggQU0gRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZl dHRlckBmZndsbC5jaD4gd3JvdGU6Cj4KPiBUaGlzIGlzIHVzZWQgYnkgbWVkaWEvdmlkZWJ1ZjIg Zm9yIHBlcnNpc3RlbnQgZG1hIG1hcHBpbmdzLCBub3QganVzdAo+IGZvciBhIHNpbmdsZSBkbWEg b3BlcmF0aW9uIGFuZCB0aGVuIGZyZWVkIGFnYWluLCBzbyBuZWVkcwo+IEZPTExfTE9OR1RFUk0u Cj4KPiBVbmZvcnR1bmF0ZWx5IGN1cnJlbnQgcHVwX2xvY2tlZCBkb2Vzbid0IHN1cHBvcnQgRk9M TF9MT05HVEVSTSBkdWUgdG8KPiBsb2NraW5nIGlzc3Vlcy4gUmV3b3JrIHRoZSBjb2RlIHRvIHB1 bGwgdGhlIHB1cCBwYXRoIG91dCBmcm9tIHRoZQo+IG1tYXBfc2VtIGNyaXRpY2FsIHNlY3Rpb24g YXMgc3VnZ2VzdGVkIGJ5IEphc29uLgo+Cj4gQnkgcmVseWluZyBlbnRpcmVseSBvbiB0aGUgdm1h IGNoZWNrcyBpbiBwaW5fdXNlcl9wYWdlcyBhbmQgZm9sbG93X3Bmbgo+IChmb3Igdm1fZmxhZ3Mg YW5kIHZtYV9pc19mc2RheCkgd2UgY2FuIGFsc28gc3RyZWFtbGluZSB0aGUgY29kZSBhIGxvdC4K Pgo+IFNpZ25lZC1vZmYtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50ZWwuY29t Pgo+IENjOiBKYXNvbiBHdW50aG9ycGUgPGpnZ0B6aWVwZS5jYT4KPiBDYzogUGF3ZWwgT3NjaWFr IDxwYXdlbEBvc2NpYWsuY29tPgo+IENjOiBNYXJlayBTenlwcm93c2tpIDxtLnN6eXByb3dza2lA c2Ftc3VuZy5jb20+Cj4gQ2M6IEt5dW5nbWluIFBhcmsgPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5j b20+Cj4gQ2M6IFRvbWFzeiBGaWdhIDx0ZmlnYUBjaHJvbWl1bS5vcmc+Cj4gQ2M6IE1hdXJvIENh cnZhbGhvIENoZWhhYiA8bWNoZWhhYkBrZXJuZWwub3JnPgo+IENjOiBBbmRyZXcgTW9ydG9uIDxh a3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnPgo+IENjOiBKb2huIEh1YmJhcmQgPGpodWJiYXJkQG52 aWRpYS5jb20+Cj4gQ2M6IErDqXLDtG1lIEdsaXNzZSA8amdsaXNzZUByZWRoYXQuY29tPgo+IENj OiBKYW4gS2FyYSA8amFja0BzdXNlLmN6Pgo+IENjOiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxp YW1zQGludGVsLmNvbT4KPiBDYzogbGludXgtbW1Aa3ZhY2sub3JnCj4gQ2M6IGxpbnV4LWFybS1r ZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwo+IENjOiBsaW51eC1zYW1zdW5nLXNvY0B2Z2VyLmtl cm5lbC5vcmcKPiBDYzogbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCj4gU2lnbmVkLW9mZi1i eTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KPiAtLQo+IHYyOiBTdHJl YW1saW5lIHRoZSBjb2RlIGFuZCBmdXJ0aGVyIHNpbXBsaWZ5IHRoZSBsb29wIGNoZWNrcyAoSmFz b24pCj4KPiB2NTogUmV2aWV3IGZyb20gVG9tYXN6Ogo+IC0gZml4IHBhZ2UgY291bnRpbmcgZm9y IHRoZSBmb2xsb3dfcGZuIGNhc2UgYnkgcmVzZXR0aW5nIHJldAo+IC0gZHJvcCBndXBfZmxhZ3Mg cGFyYW1hdGVyLCBub3cgdW51c2VkCj4gLS0tCj4gIC4uLi9tZWRpYS9jb21tb24vdmlkZW9idWYy L3ZpZGVvYnVmMi1tZW1vcHMuYyB8ICAzICstCj4gIGluY2x1ZGUvbGludXgvbW0uaCAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAyICstCj4gIG1tL2ZyYW1lX3ZlY3Rvci5jICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IDUzICsrKysrKy0tLS0tLS0tLS0tLS0KPiAgMyBmaWxlcyBj aGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAzOSBkZWxldGlvbnMoLSkKPgoKVGhhbmtzLCBsb29r cyBnb29kIHRvIG1lIG5vdy4KCkFja2VkLWJ5OiBUb21hc3ogRmlnYSA8dGZpZ2FAY2hyb21pdW0u b3JnPgoKRnJvbSByZWFkaW5nIHRoZSBjb2RlLCB0aGlzIGlzIHF1aXRlIHVubGlrZWx5IHRvIGlu dHJvZHVjZSBhbnkKYmVoYXZpb3IgY2hhbmdlcywgYnV0IGp1c3QgdG8gYmUgc2FmZSwgZGlkIHlv dSBoYXZlIGEgY2hhbmNlIHRvIHRlc3QKdGhpcyB3aXRoIHNvbWUgVjRMMiBkcml2ZXI/CgpCZXN0 IHJlZ2FyZHMsClRvbWFzegoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdmlk ZW9idWYyL3ZpZGVvYnVmMi1tZW1vcHMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVm Mi92aWRlb2J1ZjItbWVtb3BzLmMKPiBpbmRleCA2ZTllMDUxNTNmNGUuLjlkZDZjMjcxNjJmNCAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9idWYyLW1l bW9wcy5jCj4gKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL3ZpZGVvYnVmMi1t ZW1vcHMuYwo+IEBAIC00MCw3ICs0MCw2IEBAIHN0cnVjdCBmcmFtZV92ZWN0b3IgKnZiMl9jcmVh dGVfZnJhbWV2ZWModW5zaWduZWQgbG9uZyBzdGFydCwKPiAgICAgICAgIHVuc2lnbmVkIGxvbmcg Zmlyc3QsIGxhc3Q7Cj4gICAgICAgICB1bnNpZ25lZCBsb25nIG5yOwo+ICAgICAgICAgc3RydWN0 IGZyYW1lX3ZlY3RvciAqdmVjOwo+IC0gICAgICAgdW5zaWduZWQgaW50IGZsYWdzID0gRk9MTF9G T1JDRSB8IEZPTExfV1JJVEU7Cj4KPiAgICAgICAgIGZpcnN0ID0gc3RhcnQgPj4gUEFHRV9TSElG VDsKPiAgICAgICAgIGxhc3QgPSAoc3RhcnQgKyBsZW5ndGggLSAxKSA+PiBQQUdFX1NISUZUOwo+ IEBAIC00OCw3ICs0Nyw3IEBAIHN0cnVjdCBmcmFtZV92ZWN0b3IgKnZiMl9jcmVhdGVfZnJhbWV2 ZWModW5zaWduZWQgbG9uZyBzdGFydCwKPiAgICAgICAgIHZlYyA9IGZyYW1lX3ZlY3Rvcl9jcmVh dGUobnIpOwo+ICAgICAgICAgaWYgKCF2ZWMpCj4gICAgICAgICAgICAgICAgIHJldHVybiBFUlJf UFRSKC1FTk9NRU0pOwo+IC0gICAgICAgcmV0ID0gZ2V0X3ZhZGRyX2ZyYW1lcyhzdGFydCAmIFBB R0VfTUFTSywgbnIsIGZsYWdzLCB2ZWMpOwo+ICsgICAgICAgcmV0ID0gZ2V0X3ZhZGRyX2ZyYW1l cyhzdGFydCAmIFBBR0VfTUFTSywgbnIsIHZlYyk7Cj4gICAgICAgICBpZiAocmV0IDwgMCkKPiAg ICAgICAgICAgICAgICAgZ290byBvdXRfZGVzdHJveTsKPiAgICAgICAgIC8qIFdlIGFjY2VwdCBv bmx5IGNvbXBsZXRlIHNldCBvZiBQRk5zICovCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgv bW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAo+IGluZGV4IGVmMzYwZmU3MGFhZi4uZDZiOGUzMGRj ZTJlIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAo+ICsrKyBiL2luY2x1ZGUvbGlu dXgvbW0uaAo+IEBAIC0xNzY1LDcgKzE3NjUsNyBAQCBzdHJ1Y3QgZnJhbWVfdmVjdG9yIHsKPiAg c3RydWN0IGZyYW1lX3ZlY3RvciAqZnJhbWVfdmVjdG9yX2NyZWF0ZSh1bnNpZ25lZCBpbnQgbnJf ZnJhbWVzKTsKPiAgdm9pZCBmcmFtZV92ZWN0b3JfZGVzdHJveShzdHJ1Y3QgZnJhbWVfdmVjdG9y ICp2ZWMpOwo+ICBpbnQgZ2V0X3ZhZGRyX2ZyYW1lcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNp Z25lZCBpbnQgbnJfcGZucywKPiAtICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZ3Vw X2ZsYWdzLCBzdHJ1Y3QgZnJhbWVfdmVjdG9yICp2ZWMpOwo+ICsgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBmcmFtZV92ZWN0b3IgKnZlYyk7Cj4gIHZvaWQgcHV0X3ZhZGRyX2ZyYW1lcyhzdHJ1 Y3QgZnJhbWVfdmVjdG9yICp2ZWMpOwo+ICBpbnQgZnJhbWVfdmVjdG9yX3RvX3BhZ2VzKHN0cnVj dCBmcmFtZV92ZWN0b3IgKnZlYyk7Cj4gIHZvaWQgZnJhbWVfdmVjdG9yX3RvX3BmbnMoc3RydWN0 IGZyYW1lX3ZlY3RvciAqdmVjKTsKPiBkaWZmIC0tZ2l0IGEvbW0vZnJhbWVfdmVjdG9yLmMgYi9t bS9mcmFtZV92ZWN0b3IuYwo+IGluZGV4IDEwZjgyZDU2NDNiNi4uZjhjMzRiODk1Yzc2IDEwMDY0 NAo+IC0tLSBhL21tL2ZyYW1lX3ZlY3Rvci5jCj4gKysrIGIvbW0vZnJhbWVfdmVjdG9yLmMKPiBA QCAtMzIsMTMgKzMyLDEyIEBACj4gICAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiBncmFi YmluZyBtbWFwX2xvY2sgYXMgbmVjZXNzYXJ5Lgo+ICAgKi8KPiAgaW50IGdldF92YWRkcl9mcmFt ZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgaW50IG5yX2ZyYW1lcywKPiAtICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzLCBzdHJ1Y3QgZnJhbWVfdmVjdG9y ICp2ZWMpCj4gKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZyYW1lX3ZlY3RvciAqdmVjKQo+ ICB7Cj4gICAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwo+ICAgICAg ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Cj4gICAgICAgICBpbnQgcmV0ID0gMDsKPiAg ICAgICAgIGludCBlcnI7Cj4gLSAgICAgICBpbnQgbG9ja2VkOwo+Cj4gICAgICAgICBpZiAobnJf ZnJhbWVzID09IDApCj4gICAgICAgICAgICAgICAgIHJldHVybiAwOwo+IEBAIC00OCw0MCArNDcs MjYgQEAgaW50IGdldF92YWRkcl9mcmFtZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQg aW50IG5yX2ZyYW1lcywKPgo+ICAgICAgICAgc3RhcnQgPSB1bnRhZ2dlZF9hZGRyKHN0YXJ0KTsK Pgo+IC0gICAgICAgbW1hcF9yZWFkX2xvY2sobW0pOwo+IC0gICAgICAgbG9ja2VkID0gMTsKPiAt ICAgICAgIHZtYSA9IGZpbmRfdm1hX2ludGVyc2VjdGlvbihtbSwgc3RhcnQsIHN0YXJ0ICsgMSk7 Cj4gLSAgICAgICBpZiAoIXZtYSkgewo+IC0gICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwo+ IC0gICAgICAgICAgICAgICBnb3RvIG91dDsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICAvKgo+ IC0gICAgICAgICogV2hpbGUgZ2V0X3ZhZGRyX2ZyYW1lcygpIGNvdWxkIGJlIHVzZWQgZm9yIHRy YW5zaWVudCAoa2VybmVsCj4gLSAgICAgICAgKiBjb250cm9sbGVkIGxpZmV0aW1lKSBwaW5uaW5n IG9mIG1lbW9yeSBwYWdlcyBhbGwgY3VycmVudAo+IC0gICAgICAgICogdXNlcnMgZXN0YWJsaXNo IGxvbmcgdGVybSAodXNlcnNwYWNlIGNvbnRyb2xsZWQgbGlmZXRpbWUpCj4gLSAgICAgICAgKiBw YWdlIHBpbm5pbmcuIFRyZWF0IGdldF92YWRkcl9mcmFtZXMoKSBsaWtlCj4gLSAgICAgICAgKiBn ZXRfdXNlcl9wYWdlc19sb25ndGVybSgpIGFuZCBkaXNhbGxvdyBpdCBmb3IgZmlsZXN5c3RlbS1k YXgKPiAtICAgICAgICAqIG1hcHBpbmdzLgo+IC0gICAgICAgICovCj4gLSAgICAgICBpZiAodm1h X2lzX2ZzZGF4KHZtYSkpIHsKPiAtICAgICAgICAgICAgICAgcmV0ID0gLUVPUE5PVFNVUFA7Cj4g LSAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+IC0gICAgICAgfQo+IC0KPiAtICAgICAgIGlmICgh KHZtYS0+dm1fZmxhZ3MgJiAoVk1fSU8gfCBWTV9QRk5NQVApKSkgewo+ICsgICAgICAgcmV0ID0g cGluX3VzZXJfcGFnZXNfZmFzdChzdGFydCwgbnJfZnJhbWVzLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGT0xMX0ZPUkNFIHwgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0s Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgcGFnZSAqKikodmVj LT5wdHJzKSk7Cj4gKyAgICAgICBpZiAocmV0ID4gMCkgewo+ICAgICAgICAgICAgICAgICB2ZWMt PmdvdF9yZWYgPSB0cnVlOwo+ICAgICAgICAgICAgICAgICB2ZWMtPmlzX3BmbnMgPSBmYWxzZTsK PiAtICAgICAgICAgICAgICAgcmV0ID0gcGluX3VzZXJfcGFnZXNfbG9ja2VkKHN0YXJ0LCBucl9m cmFtZXMsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgZ3VwX2ZsYWdzLCAoc3RydWN0IHBhZ2Ug KiopKHZlYy0+cHRycyksICZsb2NrZWQpOwo+IC0gICAgICAgICAgICAgICBnb3RvIG91dDsKPiAr ICAgICAgICAgICAgICAgZ290byBvdXRfdW5sb2NrZWQ7Cj4gICAgICAgICB9Cj4KPiArICAgICAg IG1tYXBfcmVhZF9sb2NrKG1tKTsKPiAgICAgICAgIHZlYy0+Z290X3JlZiA9IGZhbHNlOwo+ICAg ICAgICAgdmVjLT5pc19wZm5zID0gdHJ1ZTsKPiArICAgICAgIHJldCA9IDA7Cj4gICAgICAgICBk byB7Cj4gICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm51bXMgPSBmcmFtZV92ZWN0b3Jf cGZucyh2ZWMpOwo+Cj4gKyAgICAgICAgICAgICAgIHZtYSA9IGZpbmRfdm1hX2ludGVyc2VjdGlv bihtbSwgc3RhcnQsIHN0YXJ0ICsgMSk7Cj4gKyAgICAgICAgICAgICAgIGlmICghdm1hKQo+ICsg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsKPiAgICAgICAgICAgICAgICAgd2hpbGUg KHJldCA8IG5yX2ZyYW1lcyAmJiBzdGFydCArIFBBR0VfU0laRSA8PSB2bWEtPnZtX2VuZCkgewo+ ICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGZvbGxvd19wZm4odm1hLCBzdGFydCwgJm51 bXNbcmV0XSk7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgewo+IEBAIC05Miwx NyArNzcsMTMgQEAgaW50IGdldF92YWRkcl9mcmFtZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5z aWduZWQgaW50IG5yX2ZyYW1lcywKPiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArPSBQ QUdFX1NJWkU7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0Kys7Cj4gICAgICAgICAgICAg ICAgIH0KPiAtICAgICAgICAgICAgICAgLyoKPiAtICAgICAgICAgICAgICAgICogV2Ugc3RvcCBp ZiB3ZSBoYXZlIGVub3VnaCBwYWdlcyBvciBpZiBWTUEgZG9lc24ndCBjb21wbGV0ZWx5Cj4gLSAg ICAgICAgICAgICAgICAqIGNvdmVyIHRoZSB0YWlsIHBhZ2UuCj4gLSAgICAgICAgICAgICAgICAq Lwo+IC0gICAgICAgICAgICAgICBpZiAocmV0ID49IG5yX2ZyYW1lcyB8fCBzdGFydCA8IHZtYS0+ dm1fZW5kKQo+ICsgICAgICAgICAgICAgICAvKiBCYWlsIG91dCBpZiBWTUEgZG9lc24ndCBjb21w bGV0ZWx5IGNvdmVyIHRoZSB0YWlsIHBhZ2UuICovCj4gKyAgICAgICAgICAgICAgIGlmIChzdGFy dCA8IHZtYS0+dm1fZW5kKQo+ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+IC0gICAg ICAgICAgICAgICB2bWEgPSBmaW5kX3ZtYV9pbnRlcnNlY3Rpb24obW0sIHN0YXJ0LCBzdGFydCAr IDEpOwo+IC0gICAgICAgfSB3aGlsZSAodm1hICYmIHZtYS0+dm1fZmxhZ3MgJiAoVk1fSU8gfCBW TV9QRk5NQVApKTsKPiArICAgICAgIH0gd2hpbGUgKHJldCA8IG5yX2ZyYW1lcyk7Cj4gIG91dDoK PiAtICAgICAgIGlmIChsb2NrZWQpCj4gLSAgICAgICAgICAgICAgIG1tYXBfcmVhZF91bmxvY2so bW0pOwo+ICsgICAgICAgbW1hcF9yZWFkX3VubG9jayhtbSk7Cj4gK291dF91bmxvY2tlZDoKPiAg ICAgICAgIGlmICghcmV0KQo+ICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwo+ICAgICAg ICAgaWYgKHJldCA+IDApCj4gLS0KPiAyLjI4LjAKPgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo= 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=-9.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 85E7FC4363A for ; Fri, 30 Oct 2020 14:11:35 +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 E1C5F206F7 for ; Fri, 30 Oct 2020 14:11:34 +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="LH6iU5G+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E1C5F206F7 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 D074E6E9AA; Fri, 30 Oct 2020 14:11:33 +0000 (UTC) Received: from mail-ej1-x642.google.com (mail-ej1-x642.google.com [IPv6:2a00:1450:4864:20::642]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1FB276E9AA for ; Fri, 30 Oct 2020 14:11:33 +0000 (UTC) Received: by mail-ej1-x642.google.com with SMTP id dk16so8225505ejb.12 for ; Fri, 30 Oct 2020 07:11:33 -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=fGLh8FE7n+kGnPiOSCfCu+B491Brb7ePqBRZY6cItBg=; b=LH6iU5G+qAZ4T7sqXNGE44q/WiF+g2smHT8tK2NZZq846wCXnKZVs/i0NAbqwfc9xk 21Yj3MNkwi0ukryfrHB9hVgWhM+cdTTWfsDLp+g3D7Iig02N7iwYOeg6SfA5q4dylm2H zlOSbk28N2b27zmw/TwjqgMUPI5sLxmAXsXzk= 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=fGLh8FE7n+kGnPiOSCfCu+B491Brb7ePqBRZY6cItBg=; b=UkBDVpyS9bP2LhZPAyT2/+P48ElA860tc/eCzIaGpVcn+zVmXtesVLLYK7kTH8x9Cr f4gVD2idR9+CAdxLXYq6EWZm66y83HgwD0bWJKuKOImgGyuVi/YkU6565YhGx+i2yp9z CaCfWJzYudj7XI92lDerFar/ROqMhNY/AILWuRGS/fc0f/rx99p+vO9oC/Z6csw2G7sd xhJtkCbr4omJF1Ue/jHLIX/4oA/xhukTS60nEnamxURwXkSE0djcDl3V8c+HWTpZO9je cpDLsEy2AQzEZLLbo3HqLVzQczVuCo8dXO6IJqtc4ZuxCpaKaizmGA6EWSMZwhNiu3ts Gm1Q== X-Gm-Message-State: AOAM533sYAusKiIxTCtAT24geFgvamaWMzoZqJNuWqeHFDs4//y3ZuKd kiY8+nOBJy3LtnMHFlBUtA4sbsgW64793A== X-Google-Smtp-Source: ABdhPJzxyv41SJ3ydeG1XDiH8zZ5B6u6l3luAaOb0bG2CwLhDB15SE9EVvzTeFAKxbaRrFAGNlvP+g== X-Received: by 2002:a17:906:84a:: with SMTP id f10mr2607122ejd.93.1604067091411; Fri, 30 Oct 2020 07:11:31 -0700 (PDT) Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com. [209.85.221.48]) by smtp.gmail.com with ESMTPSA id j3sm3207993edh.25.2020.10.30.07.11.25 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 30 Oct 2020 07:11:26 -0700 (PDT) Received: by mail-wr1-f48.google.com with SMTP id s9so6607689wro.8 for ; Fri, 30 Oct 2020 07:11:25 -0700 (PDT) X-Received: by 2002:adf:e892:: with SMTP id d18mr3615109wrm.103.1604067085454; Fri, 30 Oct 2020 07:11:25 -0700 (PDT) MIME-Version: 1.0 References: <20201030100815.2269-1-daniel.vetter@ffwll.ch> <20201030100815.2269-6-daniel.vetter@ffwll.ch> In-Reply-To: <20201030100815.2269-6-daniel.vetter@ffwll.ch> From: Tomasz Figa Date: Fri, 30 Oct 2020 15:11:14 +0100 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v5 05/15] mm/frame-vector: Use FOLL_LONGTERM To: Daniel Vetter X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?B?SsOpcsO0bWUgR2xpc3Nl?= , linux-samsung-soc , Jan Kara , Pawel Osciak , kvm , Jason Gunthorpe , John Hubbard , Mauro Carvalho Chehab , LKML , DRI Development , Linux MM , Kyungmin Park , Daniel Vetter , Andrew Morton , Marek Szyprowski , Dan Williams , "list@263.net:IOMMU DRIVERS , Joerg Roedel , " , Linux Media Mailing List Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" T24gRnJpLCBPY3QgMzAsIDIwMjAgYXQgMTE6MDggQU0gRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZl dHRlckBmZndsbC5jaD4gd3JvdGU6Cj4KPiBUaGlzIGlzIHVzZWQgYnkgbWVkaWEvdmlkZWJ1ZjIg Zm9yIHBlcnNpc3RlbnQgZG1hIG1hcHBpbmdzLCBub3QganVzdAo+IGZvciBhIHNpbmdsZSBkbWEg b3BlcmF0aW9uIGFuZCB0aGVuIGZyZWVkIGFnYWluLCBzbyBuZWVkcwo+IEZPTExfTE9OR1RFUk0u Cj4KPiBVbmZvcnR1bmF0ZWx5IGN1cnJlbnQgcHVwX2xvY2tlZCBkb2Vzbid0IHN1cHBvcnQgRk9M TF9MT05HVEVSTSBkdWUgdG8KPiBsb2NraW5nIGlzc3Vlcy4gUmV3b3JrIHRoZSBjb2RlIHRvIHB1 bGwgdGhlIHB1cCBwYXRoIG91dCBmcm9tIHRoZQo+IG1tYXBfc2VtIGNyaXRpY2FsIHNlY3Rpb24g YXMgc3VnZ2VzdGVkIGJ5IEphc29uLgo+Cj4gQnkgcmVseWluZyBlbnRpcmVseSBvbiB0aGUgdm1h IGNoZWNrcyBpbiBwaW5fdXNlcl9wYWdlcyBhbmQgZm9sbG93X3Bmbgo+IChmb3Igdm1fZmxhZ3Mg YW5kIHZtYV9pc19mc2RheCkgd2UgY2FuIGFsc28gc3RyZWFtbGluZSB0aGUgY29kZSBhIGxvdC4K Pgo+IFNpZ25lZC1vZmYtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50ZWwuY29t Pgo+IENjOiBKYXNvbiBHdW50aG9ycGUgPGpnZ0B6aWVwZS5jYT4KPiBDYzogUGF3ZWwgT3NjaWFr IDxwYXdlbEBvc2NpYWsuY29tPgo+IENjOiBNYXJlayBTenlwcm93c2tpIDxtLnN6eXByb3dza2lA c2Ftc3VuZy5jb20+Cj4gQ2M6IEt5dW5nbWluIFBhcmsgPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5j b20+Cj4gQ2M6IFRvbWFzeiBGaWdhIDx0ZmlnYUBjaHJvbWl1bS5vcmc+Cj4gQ2M6IE1hdXJvIENh cnZhbGhvIENoZWhhYiA8bWNoZWhhYkBrZXJuZWwub3JnPgo+IENjOiBBbmRyZXcgTW9ydG9uIDxh a3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnPgo+IENjOiBKb2huIEh1YmJhcmQgPGpodWJiYXJkQG52 aWRpYS5jb20+Cj4gQ2M6IErDqXLDtG1lIEdsaXNzZSA8amdsaXNzZUByZWRoYXQuY29tPgo+IENj OiBKYW4gS2FyYSA8amFja0BzdXNlLmN6Pgo+IENjOiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxp YW1zQGludGVsLmNvbT4KPiBDYzogbGludXgtbW1Aa3ZhY2sub3JnCj4gQ2M6IGxpbnV4LWFybS1r ZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwo+IENjOiBsaW51eC1zYW1zdW5nLXNvY0B2Z2VyLmtl cm5lbC5vcmcKPiBDYzogbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCj4gU2lnbmVkLW9mZi1i eTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KPiAtLQo+IHYyOiBTdHJl YW1saW5lIHRoZSBjb2RlIGFuZCBmdXJ0aGVyIHNpbXBsaWZ5IHRoZSBsb29wIGNoZWNrcyAoSmFz b24pCj4KPiB2NTogUmV2aWV3IGZyb20gVG9tYXN6Ogo+IC0gZml4IHBhZ2UgY291bnRpbmcgZm9y IHRoZSBmb2xsb3dfcGZuIGNhc2UgYnkgcmVzZXR0aW5nIHJldAo+IC0gZHJvcCBndXBfZmxhZ3Mg cGFyYW1hdGVyLCBub3cgdW51c2VkCj4gLS0tCj4gIC4uLi9tZWRpYS9jb21tb24vdmlkZW9idWYy L3ZpZGVvYnVmMi1tZW1vcHMuYyB8ICAzICstCj4gIGluY2x1ZGUvbGludXgvbW0uaCAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAyICstCj4gIG1tL2ZyYW1lX3ZlY3Rvci5jICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IDUzICsrKysrKy0tLS0tLS0tLS0tLS0KPiAgMyBmaWxlcyBj aGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAzOSBkZWxldGlvbnMoLSkKPgoKVGhhbmtzLCBsb29r cyBnb29kIHRvIG1lIG5vdy4KCkFja2VkLWJ5OiBUb21hc3ogRmlnYSA8dGZpZ2FAY2hyb21pdW0u b3JnPgoKRnJvbSByZWFkaW5nIHRoZSBjb2RlLCB0aGlzIGlzIHF1aXRlIHVubGlrZWx5IHRvIGlu dHJvZHVjZSBhbnkKYmVoYXZpb3IgY2hhbmdlcywgYnV0IGp1c3QgdG8gYmUgc2FmZSwgZGlkIHlv dSBoYXZlIGEgY2hhbmNlIHRvIHRlc3QKdGhpcyB3aXRoIHNvbWUgVjRMMiBkcml2ZXI/CgpCZXN0 IHJlZ2FyZHMsClRvbWFzegoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdmlk ZW9idWYyL3ZpZGVvYnVmMi1tZW1vcHMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVm Mi92aWRlb2J1ZjItbWVtb3BzLmMKPiBpbmRleCA2ZTllMDUxNTNmNGUuLjlkZDZjMjcxNjJmNCAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9idWYyLW1l bW9wcy5jCj4gKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL3ZpZGVvYnVmMi1t ZW1vcHMuYwo+IEBAIC00MCw3ICs0MCw2IEBAIHN0cnVjdCBmcmFtZV92ZWN0b3IgKnZiMl9jcmVh dGVfZnJhbWV2ZWModW5zaWduZWQgbG9uZyBzdGFydCwKPiAgICAgICAgIHVuc2lnbmVkIGxvbmcg Zmlyc3QsIGxhc3Q7Cj4gICAgICAgICB1bnNpZ25lZCBsb25nIG5yOwo+ICAgICAgICAgc3RydWN0 IGZyYW1lX3ZlY3RvciAqdmVjOwo+IC0gICAgICAgdW5zaWduZWQgaW50IGZsYWdzID0gRk9MTF9G T1JDRSB8IEZPTExfV1JJVEU7Cj4KPiAgICAgICAgIGZpcnN0ID0gc3RhcnQgPj4gUEFHRV9TSElG VDsKPiAgICAgICAgIGxhc3QgPSAoc3RhcnQgKyBsZW5ndGggLSAxKSA+PiBQQUdFX1NISUZUOwo+ IEBAIC00OCw3ICs0Nyw3IEBAIHN0cnVjdCBmcmFtZV92ZWN0b3IgKnZiMl9jcmVhdGVfZnJhbWV2 ZWModW5zaWduZWQgbG9uZyBzdGFydCwKPiAgICAgICAgIHZlYyA9IGZyYW1lX3ZlY3Rvcl9jcmVh dGUobnIpOwo+ICAgICAgICAgaWYgKCF2ZWMpCj4gICAgICAgICAgICAgICAgIHJldHVybiBFUlJf UFRSKC1FTk9NRU0pOwo+IC0gICAgICAgcmV0ID0gZ2V0X3ZhZGRyX2ZyYW1lcyhzdGFydCAmIFBB R0VfTUFTSywgbnIsIGZsYWdzLCB2ZWMpOwo+ICsgICAgICAgcmV0ID0gZ2V0X3ZhZGRyX2ZyYW1l cyhzdGFydCAmIFBBR0VfTUFTSywgbnIsIHZlYyk7Cj4gICAgICAgICBpZiAocmV0IDwgMCkKPiAg ICAgICAgICAgICAgICAgZ290byBvdXRfZGVzdHJveTsKPiAgICAgICAgIC8qIFdlIGFjY2VwdCBv bmx5IGNvbXBsZXRlIHNldCBvZiBQRk5zICovCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgv bW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAo+IGluZGV4IGVmMzYwZmU3MGFhZi4uZDZiOGUzMGRj ZTJlIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAo+ICsrKyBiL2luY2x1ZGUvbGlu dXgvbW0uaAo+IEBAIC0xNzY1LDcgKzE3NjUsNyBAQCBzdHJ1Y3QgZnJhbWVfdmVjdG9yIHsKPiAg c3RydWN0IGZyYW1lX3ZlY3RvciAqZnJhbWVfdmVjdG9yX2NyZWF0ZSh1bnNpZ25lZCBpbnQgbnJf ZnJhbWVzKTsKPiAgdm9pZCBmcmFtZV92ZWN0b3JfZGVzdHJveShzdHJ1Y3QgZnJhbWVfdmVjdG9y ICp2ZWMpOwo+ICBpbnQgZ2V0X3ZhZGRyX2ZyYW1lcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNp Z25lZCBpbnQgbnJfcGZucywKPiAtICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZ3Vw X2ZsYWdzLCBzdHJ1Y3QgZnJhbWVfdmVjdG9yICp2ZWMpOwo+ICsgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBmcmFtZV92ZWN0b3IgKnZlYyk7Cj4gIHZvaWQgcHV0X3ZhZGRyX2ZyYW1lcyhzdHJ1 Y3QgZnJhbWVfdmVjdG9yICp2ZWMpOwo+ICBpbnQgZnJhbWVfdmVjdG9yX3RvX3BhZ2VzKHN0cnVj dCBmcmFtZV92ZWN0b3IgKnZlYyk7Cj4gIHZvaWQgZnJhbWVfdmVjdG9yX3RvX3BmbnMoc3RydWN0 IGZyYW1lX3ZlY3RvciAqdmVjKTsKPiBkaWZmIC0tZ2l0IGEvbW0vZnJhbWVfdmVjdG9yLmMgYi9t bS9mcmFtZV92ZWN0b3IuYwo+IGluZGV4IDEwZjgyZDU2NDNiNi4uZjhjMzRiODk1Yzc2IDEwMDY0 NAo+IC0tLSBhL21tL2ZyYW1lX3ZlY3Rvci5jCj4gKysrIGIvbW0vZnJhbWVfdmVjdG9yLmMKPiBA QCAtMzIsMTMgKzMyLDEyIEBACj4gICAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiBncmFi YmluZyBtbWFwX2xvY2sgYXMgbmVjZXNzYXJ5Lgo+ICAgKi8KPiAgaW50IGdldF92YWRkcl9mcmFt ZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgaW50IG5yX2ZyYW1lcywKPiAtICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzLCBzdHJ1Y3QgZnJhbWVfdmVjdG9y ICp2ZWMpCj4gKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZyYW1lX3ZlY3RvciAqdmVjKQo+ ICB7Cj4gICAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwo+ICAgICAg ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Cj4gICAgICAgICBpbnQgcmV0ID0gMDsKPiAg ICAgICAgIGludCBlcnI7Cj4gLSAgICAgICBpbnQgbG9ja2VkOwo+Cj4gICAgICAgICBpZiAobnJf ZnJhbWVzID09IDApCj4gICAgICAgICAgICAgICAgIHJldHVybiAwOwo+IEBAIC00OCw0MCArNDcs MjYgQEAgaW50IGdldF92YWRkcl9mcmFtZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQg aW50IG5yX2ZyYW1lcywKPgo+ICAgICAgICAgc3RhcnQgPSB1bnRhZ2dlZF9hZGRyKHN0YXJ0KTsK Pgo+IC0gICAgICAgbW1hcF9yZWFkX2xvY2sobW0pOwo+IC0gICAgICAgbG9ja2VkID0gMTsKPiAt ICAgICAgIHZtYSA9IGZpbmRfdm1hX2ludGVyc2VjdGlvbihtbSwgc3RhcnQsIHN0YXJ0ICsgMSk7 Cj4gLSAgICAgICBpZiAoIXZtYSkgewo+IC0gICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwo+ IC0gICAgICAgICAgICAgICBnb3RvIG91dDsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICAvKgo+ IC0gICAgICAgICogV2hpbGUgZ2V0X3ZhZGRyX2ZyYW1lcygpIGNvdWxkIGJlIHVzZWQgZm9yIHRy YW5zaWVudCAoa2VybmVsCj4gLSAgICAgICAgKiBjb250cm9sbGVkIGxpZmV0aW1lKSBwaW5uaW5n IG9mIG1lbW9yeSBwYWdlcyBhbGwgY3VycmVudAo+IC0gICAgICAgICogdXNlcnMgZXN0YWJsaXNo IGxvbmcgdGVybSAodXNlcnNwYWNlIGNvbnRyb2xsZWQgbGlmZXRpbWUpCj4gLSAgICAgICAgKiBw YWdlIHBpbm5pbmcuIFRyZWF0IGdldF92YWRkcl9mcmFtZXMoKSBsaWtlCj4gLSAgICAgICAgKiBn ZXRfdXNlcl9wYWdlc19sb25ndGVybSgpIGFuZCBkaXNhbGxvdyBpdCBmb3IgZmlsZXN5c3RlbS1k YXgKPiAtICAgICAgICAqIG1hcHBpbmdzLgo+IC0gICAgICAgICovCj4gLSAgICAgICBpZiAodm1h X2lzX2ZzZGF4KHZtYSkpIHsKPiAtICAgICAgICAgICAgICAgcmV0ID0gLUVPUE5PVFNVUFA7Cj4g LSAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+IC0gICAgICAgfQo+IC0KPiAtICAgICAgIGlmICgh KHZtYS0+dm1fZmxhZ3MgJiAoVk1fSU8gfCBWTV9QRk5NQVApKSkgewo+ICsgICAgICAgcmV0ID0g cGluX3VzZXJfcGFnZXNfZmFzdChzdGFydCwgbnJfZnJhbWVzLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGT0xMX0ZPUkNFIHwgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0s Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgcGFnZSAqKikodmVj LT5wdHJzKSk7Cj4gKyAgICAgICBpZiAocmV0ID4gMCkgewo+ICAgICAgICAgICAgICAgICB2ZWMt PmdvdF9yZWYgPSB0cnVlOwo+ICAgICAgICAgICAgICAgICB2ZWMtPmlzX3BmbnMgPSBmYWxzZTsK PiAtICAgICAgICAgICAgICAgcmV0ID0gcGluX3VzZXJfcGFnZXNfbG9ja2VkKHN0YXJ0LCBucl9m cmFtZXMsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgZ3VwX2ZsYWdzLCAoc3RydWN0IHBhZ2Ug KiopKHZlYy0+cHRycyksICZsb2NrZWQpOwo+IC0gICAgICAgICAgICAgICBnb3RvIG91dDsKPiAr ICAgICAgICAgICAgICAgZ290byBvdXRfdW5sb2NrZWQ7Cj4gICAgICAgICB9Cj4KPiArICAgICAg IG1tYXBfcmVhZF9sb2NrKG1tKTsKPiAgICAgICAgIHZlYy0+Z290X3JlZiA9IGZhbHNlOwo+ICAg ICAgICAgdmVjLT5pc19wZm5zID0gdHJ1ZTsKPiArICAgICAgIHJldCA9IDA7Cj4gICAgICAgICBk byB7Cj4gICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm51bXMgPSBmcmFtZV92ZWN0b3Jf cGZucyh2ZWMpOwo+Cj4gKyAgICAgICAgICAgICAgIHZtYSA9IGZpbmRfdm1hX2ludGVyc2VjdGlv bihtbSwgc3RhcnQsIHN0YXJ0ICsgMSk7Cj4gKyAgICAgICAgICAgICAgIGlmICghdm1hKQo+ICsg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsKPiAgICAgICAgICAgICAgICAgd2hpbGUg KHJldCA8IG5yX2ZyYW1lcyAmJiBzdGFydCArIFBBR0VfU0laRSA8PSB2bWEtPnZtX2VuZCkgewo+ ICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGZvbGxvd19wZm4odm1hLCBzdGFydCwgJm51 bXNbcmV0XSk7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgewo+IEBAIC05Miwx NyArNzcsMTMgQEAgaW50IGdldF92YWRkcl9mcmFtZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5z aWduZWQgaW50IG5yX2ZyYW1lcywKPiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArPSBQ QUdFX1NJWkU7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0Kys7Cj4gICAgICAgICAgICAg ICAgIH0KPiAtICAgICAgICAgICAgICAgLyoKPiAtICAgICAgICAgICAgICAgICogV2Ugc3RvcCBp ZiB3ZSBoYXZlIGVub3VnaCBwYWdlcyBvciBpZiBWTUEgZG9lc24ndCBjb21wbGV0ZWx5Cj4gLSAg ICAgICAgICAgICAgICAqIGNvdmVyIHRoZSB0YWlsIHBhZ2UuCj4gLSAgICAgICAgICAgICAgICAq Lwo+IC0gICAgICAgICAgICAgICBpZiAocmV0ID49IG5yX2ZyYW1lcyB8fCBzdGFydCA8IHZtYS0+ dm1fZW5kKQo+ICsgICAgICAgICAgICAgICAvKiBCYWlsIG91dCBpZiBWTUEgZG9lc24ndCBjb21w bGV0ZWx5IGNvdmVyIHRoZSB0YWlsIHBhZ2UuICovCj4gKyAgICAgICAgICAgICAgIGlmIChzdGFy dCA8IHZtYS0+dm1fZW5kKQo+ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+IC0gICAg ICAgICAgICAgICB2bWEgPSBmaW5kX3ZtYV9pbnRlcnNlY3Rpb24obW0sIHN0YXJ0LCBzdGFydCAr IDEpOwo+IC0gICAgICAgfSB3aGlsZSAodm1hICYmIHZtYS0+dm1fZmxhZ3MgJiAoVk1fSU8gfCBW TV9QRk5NQVApKTsKPiArICAgICAgIH0gd2hpbGUgKHJldCA8IG5yX2ZyYW1lcyk7Cj4gIG91dDoK PiAtICAgICAgIGlmIChsb2NrZWQpCj4gLSAgICAgICAgICAgICAgIG1tYXBfcmVhZF91bmxvY2so bW0pOwo+ICsgICAgICAgbW1hcF9yZWFkX3VubG9jayhtbSk7Cj4gK291dF91bmxvY2tlZDoKPiAg ICAgICAgIGlmICghcmV0KQo+ICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwo+ICAgICAg ICAgaWYgKHJldCA+IDApCj4gLS0KPiAyLjI4LjAKPgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9kcmktZGV2ZWwK