From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9692F4D11D for ; Fri, 29 Mar 2024 08:27:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.197 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711700859; cv=none; b=OsrR+ToRX7FXSa3kr9IiC/iRvLih/A8Xi2GRBuoMDNpjwvG4m1820I3JTSlstRaMRuXprF1fcUt64Ri/1f5OHM3wxjqG5/x368MyNjuN6PDOIcGowIyFgNhajW2HnpP8dmjZBV83x+BkD3yQQbcq8f3J/SssnEwk14s4fgWSqDU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711700859; c=relaxed/simple; bh=IKMizryUl6nqPup2r0ZFVCX5Sgr1Snx4M9evGSCve9o=; h=Message-ID:Date:MIME-Version:Subject:To:References:From: In-Reply-To:Content-Type; b=Pk1gy0j1z3J9MXjY8ZDUhcEVV/jlnCcQHWYwPBikK00hydur4LjIy+fHi7YbL6BGxhe5cNuk+lf6pJ2dtHNH2vudsdwHVDnQIz3dDg4ALAH/Goha6inja7/UJcOz1QKTDRRpU7qMGlAXUWNo2PBd3KKt3/MWQ7y5cLlFqsFwcFw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ghiti.fr; spf=pass smtp.mailfrom=ghiti.fr; arc=none smtp.client-ip=217.70.183.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ghiti.fr Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ghiti.fr Received: by mail.gandi.net (Postfix) with ESMTPSA id 0BCB71C0004; Fri, 29 Mar 2024 08:27:25 +0000 (UTC) Message-ID: <8293ea8b-0a41-4bbf-8737-6fa3414af8e9@ghiti.fr> Date: Fri, 29 Mar 2024 09:27:25 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2] riscv: Call secondary mmu notifier when flushing the tlb Content-Language: en-US To: Alexandre Ghiti , Paul Walmsley , Palmer Dabbelt , Albert Ou , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org References: <20240328073838.8776-1-alexghiti@rivosinc.com> From: Alexandre Ghiti In-Reply-To: <20240328073838.8776-1-alexghiti@rivosinc.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-GND-Sasl: alex@ghiti.fr Hi Palmer, On 28/03/2024 08:38, Alexandre Ghiti wrote: > This is required to allow the IOMMU driver to correctly flush its own > TLB. > > Signed-off-by: Alexandre Ghiti > --- > > Changes in v2: > - Rebase on top of 6.9-rc1 > > arch/riscv/mm/tlbflush.c | 39 +++++++++++++++++++++++---------------- > 1 file changed, 23 insertions(+), 16 deletions(-) > > diff --git a/arch/riscv/mm/tlbflush.c b/arch/riscv/mm/tlbflush.c > index 893566e004b7..854d984deb07 100644 > --- a/arch/riscv/mm/tlbflush.c > +++ b/arch/riscv/mm/tlbflush.c > @@ -4,6 +4,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -99,11 +100,19 @@ static void __ipi_flush_tlb_range_asid(void *info) > local_flush_tlb_range_asid(d->start, d->size, d->stride, d->asid); > } > > -static void __flush_tlb_range(struct cpumask *cmask, unsigned long asid, > +static inline unsigned long get_mm_asid(struct mm_struct *mm) > +{ > + return (mm && static_branch_unlikely(&use_asid_allocator)) ? > + atomic_long_read(&mm->context.id) & asid_mask : FLUSH_TLB_NO_ASID; > +} > + > +static void __flush_tlb_range(struct mm_struct *mm, > + struct cpumask *cmask, > unsigned long start, unsigned long size, > unsigned long stride) > { > struct flush_tlb_range_data ftd; > + unsigned long asid = get_mm_asid(mm); > bool broadcast; > > if (cpumask_empty(cmask)) > @@ -137,31 +146,26 @@ static void __flush_tlb_range(struct cpumask *cmask, unsigned long asid, > > if (cmask != cpu_online_mask) > put_cpu(); > -} > > -static inline unsigned long get_mm_asid(struct mm_struct *mm) > -{ > - return static_branch_unlikely(&use_asid_allocator) ? > - atomic_long_read(&mm->context.id) & asid_mask : FLUSH_TLB_NO_ASID; > + if (mm) > + mmu_notifier_arch_invalidate_secondary_tlbs(mm, start, start + size); > } > > void flush_tlb_mm(struct mm_struct *mm) > { > - __flush_tlb_range(mm_cpumask(mm), get_mm_asid(mm), > - 0, FLUSH_TLB_MAX_SIZE, PAGE_SIZE); > + __flush_tlb_range(mm, mm_cpumask(mm), 0, FLUSH_TLB_MAX_SIZE, PAGE_SIZE); > } > > void flush_tlb_mm_range(struct mm_struct *mm, > unsigned long start, unsigned long end, > unsigned int page_size) > { > - __flush_tlb_range(mm_cpumask(mm), get_mm_asid(mm), > - start, end - start, page_size); > + __flush_tlb_range(mm, mm_cpumask(mm), start, end - start, page_size); > } > > void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr) > { > - __flush_tlb_range(mm_cpumask(vma->vm_mm), get_mm_asid(vma->vm_mm), > + __flush_tlb_range(vma->vm_mm, mm_cpumask(vma->vm_mm), > addr, PAGE_SIZE, PAGE_SIZE); > } > > @@ -194,13 +198,13 @@ void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, > } > } > > - __flush_tlb_range(mm_cpumask(vma->vm_mm), get_mm_asid(vma->vm_mm), > + __flush_tlb_range(vma->vm_mm, mm_cpumask(vma->vm_mm), > start, end - start, stride_size); > } > > void flush_tlb_kernel_range(unsigned long start, unsigned long end) > { > - __flush_tlb_range((struct cpumask *)cpu_online_mask, FLUSH_TLB_NO_ASID, > + __flush_tlb_range(NULL, (struct cpumask *)cpu_online_mask, > start, end - start, PAGE_SIZE); > } > > @@ -208,7 +212,7 @@ void flush_tlb_kernel_range(unsigned long start, unsigned long end) > void flush_pmd_tlb_range(struct vm_area_struct *vma, unsigned long start, > unsigned long end) > { > - __flush_tlb_range(mm_cpumask(vma->vm_mm), get_mm_asid(vma->vm_mm), > + __flush_tlb_range(vma->vm_mm, mm_cpumask(vma->vm_mm), > start, end - start, PMD_SIZE); > } > #endif > @@ -222,7 +226,10 @@ void arch_tlbbatch_add_pending(struct arch_tlbflush_unmap_batch *batch, > struct mm_struct *mm, > unsigned long uaddr) > { > + unsigned long start = uaddr & PAGE_MASK; > + > cpumask_or(&batch->cpumask, &batch->cpumask, mm_cpumask(mm)); > + mmu_notifier_arch_invalidate_secondary_tlbs(mm, start, start + PAGE_SIZE); > } > > void arch_flush_tlb_batched_pending(struct mm_struct *mm) > @@ -232,7 +239,7 @@ void arch_flush_tlb_batched_pending(struct mm_struct *mm) > > void arch_tlbbatch_flush(struct arch_tlbflush_unmap_batch *batch) > { > - __flush_tlb_range(&batch->cpumask, FLUSH_TLB_NO_ASID, 0, > - FLUSH_TLB_MAX_SIZE, PAGE_SIZE); > + __flush_tlb_range(NULL, &batch->cpumask, > + 0, FLUSH_TLB_MAX_SIZE, PAGE_SIZE); > cpumask_clear(&batch->cpumask); > } This will conflict with Samuel's patch https://lore.kernel.org/all/20240301201837.2826172-1-samuel.holland@sifive.com/ Here is the resolution conflict if you pull this patch as-is, otherwise I'll send a v3: diff --cc arch/riscv/mm/tlbflush.c index 07d743f87b3f,854d984deb07..000000000000 --- a/arch/riscv/mm/tlbflush.c +++ b/arch/riscv/mm/tlbflush.c @@@ -99,7 -100,14 +100,14 @@@ static void __ipi_flush_tlb_range_asid(         local_flush_tlb_range_asid(d->start, d->size, d->stride, d->asid);   } - static void __flush_tlb_range(const struct cpumask *cmask, unsigned long asid, + static inline unsigned long get_mm_asid(struct mm_struct *mm) + { +       return (mm && static_branch_unlikely(&use_asid_allocator)) ? +                       atomic_long_read(&mm->context.id) & asid_mask : FLUSH_TLB_NO_ASID; + } + + static void __flush_tlb_range(struct mm_struct *mm,  -                            struct cpumask *cmask, ++                            const struct cpumask *cmask,                               unsigned long start, unsigned long size,                               unsigned long stride)   { @@@ -200,7 -204,7 +204,7 @@@ void flush_tlb_range(struct vm_area_str   void flush_tlb_kernel_range(unsigned long start, unsigned long end)   { -       __flush_tlb_range(cpu_online_mask, FLUSH_TLB_NO_ASID,  -      __flush_tlb_range(NULL, (struct cpumask *)cpu_online_mask, ++      __flush_tlb_range(NULL, cpu_online_mask,                           start, end - start, PAGE_SIZE);   } Thanks, Alex 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 67F78CD1288 for ; Fri, 29 Mar 2024 08:27:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:To:Subject:MIME-Version: Date:Message-ID:Reply-To:Cc:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=oxAnrn2CKLdxI0feZ/a/CNcmppSzNgfcNwfnVfEjNXs=; b=KfATbVnlSOfB0yKTxmf/2Vqllg ynX5HZyn28J6eOgaP33KvpYudhNXZofjBC6t2aQitQzcTRxx63uBnG9BMeU5N7anBl9Yf6uE4/uY7 vf51npvBdEhS0EicnIavGPNzRNUe2uR1IRKgL6cshVCeGbSUaP7Odo63lT1ZMSYvYzuTMfKgkYC9h 3yF8Ex0RLFrayhY8mzLwpQ9EbOoxozzVJJY1l2d4zjwUVcVz5DxavLiLypiOC72puk6ZiL/2oGeq3 /ASit0t28gUnLQg5u8E23/X6iSjjaEtvCtO0PHF0GTeT5fhAD3WZoUDYBoGxWnmJHHpvxli+IDDuk XyyQtREQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rq7aI-0000000HJ71-3OKH; Fri, 29 Mar 2024 08:27:34 +0000 Received: from relay5-d.mail.gandi.net ([217.70.183.197]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rq7aE-0000000HJ48-3ZW6 for linux-riscv@lists.infradead.org; Fri, 29 Mar 2024 08:27:33 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 0BCB71C0004; Fri, 29 Mar 2024 08:27:25 +0000 (UTC) Message-ID: <8293ea8b-0a41-4bbf-8737-6fa3414af8e9@ghiti.fr> Date: Fri, 29 Mar 2024 09:27:25 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2] riscv: Call secondary mmu notifier when flushing the tlb Content-Language: en-US To: Alexandre Ghiti , Paul Walmsley , Palmer Dabbelt , Albert Ou , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org References: <20240328073838.8776-1-alexghiti@rivosinc.com> From: Alexandre Ghiti In-Reply-To: <20240328073838.8776-1-alexghiti@rivosinc.com> X-GND-Sasl: alex@ghiti.fr X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240329_012731_257194_042FC9F6 X-CRM114-Status: GOOD ( 17.92 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org SGkgUGFsbWVyLAoKT24gMjgvMDMvMjAyNCAwODozOCwgQWxleGFuZHJlIEdoaXRpIHdyb3RlOgo+ IFRoaXMgaXMgcmVxdWlyZWQgdG8gYWxsb3cgdGhlIElPTU1VIGRyaXZlciB0byBjb3JyZWN0bHkg Zmx1c2ggaXRzIG93bgo+IFRMQi4KPgo+IFNpZ25lZC1vZmYtYnk6IEFsZXhhbmRyZSBHaGl0aSA8 YWxleGdoaXRpQHJpdm9zaW5jLmNvbT4KPiAtLS0KPgo+IENoYW5nZXMgaW4gdjI6Cj4gLSBSZWJh c2Ugb24gdG9wIG9mIDYuOS1yYzEKPgo+ICAgYXJjaC9yaXNjdi9tbS90bGJmbHVzaC5jIHwgMzkg KysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCj4gICAxIGZpbGUgY2hhbmdl ZCwgMjMgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvYXJj aC9yaXNjdi9tbS90bGJmbHVzaC5jIGIvYXJjaC9yaXNjdi9tbS90bGJmbHVzaC5jCj4gaW5kZXgg ODkzNTY2ZTAwNGI3Li44NTRkOTg0ZGViMDcgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9yaXNjdi9tbS90 bGJmbHVzaC5jCj4gKysrIGIvYXJjaC9yaXNjdi9tbS90bGJmbHVzaC5jCj4gQEAgLTQsNiArNCw3 IEBACj4gICAjaW5jbHVkZSA8bGludXgvc21wLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvc2NoZWQu aD4KPiAgICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tbXVf bm90aWZpZXIuaD4KPiAgICNpbmNsdWRlIDxhc20vc2JpLmg+Cj4gICAjaW5jbHVkZSA8YXNtL21t dV9jb250ZXh0Lmg+Cj4gICAKPiBAQCAtOTksMTEgKzEwMCwxOSBAQCBzdGF0aWMgdm9pZCBfX2lw aV9mbHVzaF90bGJfcmFuZ2VfYXNpZCh2b2lkICppbmZvKQo+ICAgCWxvY2FsX2ZsdXNoX3RsYl9y YW5nZV9hc2lkKGQtPnN0YXJ0LCBkLT5zaXplLCBkLT5zdHJpZGUsIGQtPmFzaWQpOwo+ICAgfQo+ ICAgCj4gLXN0YXRpYyB2b2lkIF9fZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCBjcHVtYXNrICpjbWFz aywgdW5zaWduZWQgbG9uZyBhc2lkLAo+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0 X21tX2FzaWQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCj4gK3sKPiArCXJldHVybiAobW0gJiYgc3Rh dGljX2JyYW5jaF91bmxpa2VseSgmdXNlX2FzaWRfYWxsb2NhdG9yKSkgPwo+ICsJCQlhdG9taWNf bG9uZ19yZWFkKCZtbS0+Y29udGV4dC5pZCkgJiBhc2lkX21hc2sgOiBGTFVTSF9UTEJfTk9fQVNJ RDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgX19mbHVzaF90bGJfcmFuZ2Uoc3RydWN0IG1tX3N0 cnVjdCAqbW0sCj4gKwkJCSAgICAgIHN0cnVjdCBjcHVtYXNrICpjbWFzaywKPiAgIAkJCSAgICAg IHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKPiAgIAkJCSAgICAgIHVu c2lnbmVkIGxvbmcgc3RyaWRlKQo+ICAgewo+ICAgCXN0cnVjdCBmbHVzaF90bGJfcmFuZ2VfZGF0 YSBmdGQ7Cj4gKwl1bnNpZ25lZCBsb25nIGFzaWQgPSBnZXRfbW1fYXNpZChtbSk7Cj4gICAJYm9v bCBicm9hZGNhc3Q7Cj4gICAKPiAgIAlpZiAoY3B1bWFza19lbXB0eShjbWFzaykpCj4gQEAgLTEz NywzMSArMTQ2LDI2IEBAIHN0YXRpYyB2b2lkIF9fZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCBjcHVt YXNrICpjbWFzaywgdW5zaWduZWQgbG9uZyBhc2lkLAo+ICAgCj4gICAJaWYgKGNtYXNrICE9IGNw dV9vbmxpbmVfbWFzaykKPiAgIAkJcHV0X2NwdSgpOwo+IC19Cj4gICAKPiAtc3RhdGljIGlubGlu ZSB1bnNpZ25lZCBsb25nIGdldF9tbV9hc2lkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+IC17Cj4g LQlyZXR1cm4gc3RhdGljX2JyYW5jaF91bmxpa2VseSgmdXNlX2FzaWRfYWxsb2NhdG9yKSA/Cj4g LQkJCWF0b21pY19sb25nX3JlYWQoJm1tLT5jb250ZXh0LmlkKSAmIGFzaWRfbWFzayA6IEZMVVNI X1RMQl9OT19BU0lEOwo+ICsJaWYgKG1tKQo+ICsJCW1tdV9ub3RpZmllcl9hcmNoX2ludmFsaWRh dGVfc2Vjb25kYXJ5X3RsYnMobW0sIHN0YXJ0LCBzdGFydCArIHNpemUpOwo+ICAgfQo+ICAgCj4g ICB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKPiAgIHsKPiAtCV9fZmx1 c2hfdGxiX3JhbmdlKG1tX2NwdW1hc2sobW0pLCBnZXRfbW1fYXNpZChtbSksCj4gLQkJCSAgMCwg RkxVU0hfVExCX01BWF9TSVpFLCBQQUdFX1NJWkUpOwo+ICsJX19mbHVzaF90bGJfcmFuZ2UobW0s IG1tX2NwdW1hc2sobW0pLCAwLCBGTFVTSF9UTEJfTUFYX1NJWkUsIFBBR0VfU0laRSk7Cj4gICB9 Cj4gICAKPiAgIHZvaWQgZmx1c2hfdGxiX21tX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+ ICAgCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCj4gICAJCQl1bnNp Z25lZCBpbnQgcGFnZV9zaXplKQo+ICAgewo+IC0JX19mbHVzaF90bGJfcmFuZ2UobW1fY3B1bWFz ayhtbSksIGdldF9tbV9hc2lkKG1tKSwKPiAtCQkJICBzdGFydCwgZW5kIC0gc3RhcnQsIHBhZ2Vf c2l6ZSk7Cj4gKwlfX2ZsdXNoX3RsYl9yYW5nZShtbSwgbW1fY3B1bWFzayhtbSksIHN0YXJ0LCBl bmQgLSBzdGFydCwgcGFnZV9zaXplKTsKPiAgIH0KPiAgIAo+ICAgdm9pZCBmbHVzaF90bGJfcGFn ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQo+ICAgewo+ IC0JX19mbHVzaF90bGJfcmFuZ2UobW1fY3B1bWFzayh2bWEtPnZtX21tKSwgZ2V0X21tX2FzaWQo dm1hLT52bV9tbSksCj4gKwlfX2ZsdXNoX3RsYl9yYW5nZSh2bWEtPnZtX21tLCBtbV9jcHVtYXNr KHZtYS0+dm1fbW0pLAo+ICAgCQkJICBhZGRyLCBQQUdFX1NJWkUsIFBBR0VfU0laRSk7Cj4gICB9 Cj4gICAKPiBAQCAtMTk0LDEzICsxOTgsMTMgQEAgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCj4gICAJCX0KPiAgIAl9 Cj4gICAKPiAtCV9fZmx1c2hfdGxiX3JhbmdlKG1tX2NwdW1hc2sodm1hLT52bV9tbSksIGdldF9t bV9hc2lkKHZtYS0+dm1fbW0pLAo+ICsJX19mbHVzaF90bGJfcmFuZ2Uodm1hLT52bV9tbSwgbW1f Y3B1bWFzayh2bWEtPnZtX21tKSwKPiAgIAkJCSAgc3RhcnQsIGVuZCAtIHN0YXJ0LCBzdHJpZGVf c2l6ZSk7Cj4gICB9Cj4gICAKPiAgIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25l ZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKPiAgIHsKPiAtCV9fZmx1c2hfdGxiX3Jh bmdlKChzdHJ1Y3QgY3B1bWFzayAqKWNwdV9vbmxpbmVfbWFzaywgRkxVU0hfVExCX05PX0FTSUQs Cj4gKwlfX2ZsdXNoX3RsYl9yYW5nZShOVUxMLCAoc3RydWN0IGNwdW1hc2sgKiljcHVfb25saW5l X21hc2ssCj4gICAJCQkgIHN0YXJ0LCBlbmQgLSBzdGFydCwgUEFHRV9TSVpFKTsKPiAgIH0KPiAg IAo+IEBAIC0yMDgsNyArMjEyLDcgQEAgdm9pZCBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHVuc2ln bmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQo+ICAgdm9pZCBmbHVzaF9wbWRfdGxi X3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAo+ ICAgCQkJdW5zaWduZWQgbG9uZyBlbmQpCj4gICB7Cj4gLQlfX2ZsdXNoX3RsYl9yYW5nZShtbV9j cHVtYXNrKHZtYS0+dm1fbW0pLCBnZXRfbW1fYXNpZCh2bWEtPnZtX21tKSwKPiArCV9fZmx1c2hf dGxiX3JhbmdlKHZtYS0+dm1fbW0sIG1tX2NwdW1hc2sodm1hLT52bV9tbSksCj4gICAJCQkgIHN0 YXJ0LCBlbmQgLSBzdGFydCwgUE1EX1NJWkUpOwo+ICAgfQo+ICAgI2VuZGlmCj4gQEAgLTIyMiw3 ICsyMjYsMTAgQEAgdm9pZCBhcmNoX3RsYmJhdGNoX2FkZF9wZW5kaW5nKHN0cnVjdCBhcmNoX3Rs YmZsdXNoX3VubWFwX2JhdGNoICpiYXRjaCwKPiAgIAkJCSAgICAgICBzdHJ1Y3QgbW1fc3RydWN0 ICptbSwKPiAgIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIHVhZGRyKQo+ICAgewo+ICsJdW5zaWdu ZWQgbG9uZyBzdGFydCA9IHVhZGRyICYgUEFHRV9NQVNLOwo+ICsKPiAgIAljcHVtYXNrX29yKCZi YXRjaC0+Y3B1bWFzaywgJmJhdGNoLT5jcHVtYXNrLCBtbV9jcHVtYXNrKG1tKSk7Cj4gKwltbXVf bm90aWZpZXJfYXJjaF9pbnZhbGlkYXRlX3NlY29uZGFyeV90bGJzKG1tLCBzdGFydCwgc3RhcnQg KyBQQUdFX1NJWkUpOwo+ICAgfQo+ICAgCj4gICB2b2lkIGFyY2hfZmx1c2hfdGxiX2JhdGNoZWRf cGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKPiBAQCAtMjMyLDcgKzIzOSw3IEBAIHZvaWQg YXJjaF9mbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+ICAg Cj4gICB2b2lkIGFyY2hfdGxiYmF0Y2hfZmx1c2goc3RydWN0IGFyY2hfdGxiZmx1c2hfdW5tYXBf YmF0Y2ggKmJhdGNoKQo+ICAgewo+IC0JX19mbHVzaF90bGJfcmFuZ2UoJmJhdGNoLT5jcHVtYXNr LCBGTFVTSF9UTEJfTk9fQVNJRCwgMCwKPiAtCQkJICBGTFVTSF9UTEJfTUFYX1NJWkUsIFBBR0Vf U0laRSk7Cj4gKwlfX2ZsdXNoX3RsYl9yYW5nZShOVUxMLCAmYmF0Y2gtPmNwdW1hc2ssCj4gKwkJ CSAgMCwgRkxVU0hfVExCX01BWF9TSVpFLCBQQUdFX1NJWkUpOwo+ICAgCWNwdW1hc2tfY2xlYXIo JmJhdGNoLT5jcHVtYXNrKTsKPiAgIH0KCgpUaGlzIHdpbGwgY29uZmxpY3Qgd2l0aCBTYW11ZWwn cyBwYXRjaCAKaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvYWxsLzIwMjQwMzAxMjAxODM3LjI4MjYx NzItMS1zYW11ZWwuaG9sbGFuZEBzaWZpdmUuY29tLyAKPGh0dHBzOi8vbG9yZS5rZXJuZWwub3Jn L2FsbC8yMDI0MDMwMTIwMTgzNy4yODI2MTcyLTEtc2FtdWVsLmhvbGxhbmRAc2lmaXZlLmNvbS8+ CgpIZXJlIGlzIHRoZSByZXNvbHV0aW9uIGNvbmZsaWN0IGlmIHlvdSBwdWxsIHRoaXMgcGF0Y2gg YXMtaXMsIG90aGVyd2lzZSAKSSdsbCBzZW5kIGEgdjM6CgpkaWZmIC0tY2MgYXJjaC9yaXNjdi9t bS90bGJmbHVzaC5jCmluZGV4IDA3ZDc0M2Y4N2IzZiw4NTRkOTg0ZGViMDcuLjAwMDAwMDAwMDAw MAotLS0gYS9hcmNoL3Jpc2N2L21tL3RsYmZsdXNoLmMKKysrIGIvYXJjaC9yaXNjdi9tbS90bGJm bHVzaC5jCkBAQCAtOTksNyAtMTAwLDE0ICsxMDAsMTQgQEBAIHN0YXRpYyB2b2lkIF9faXBpX2Zs dXNoX3RsYl9yYW5nZV9hc2lkKAogwqDCoMKgwqDCoMKgwqAgbG9jYWxfZmx1c2hfdGxiX3Jhbmdl X2FzaWQoZC0+c3RhcnQsIGQtPnNpemUsIGQtPnN0cmlkZSwgZC0+YXNpZCk7CiDCoCB9CgotIHN0 YXRpYyB2b2lkIF9fZmx1c2hfdGxiX3JhbmdlKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjbWFzaywg dW5zaWduZWQgCmxvbmcgYXNpZCwKKyBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X21t X2FzaWQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCisgeworwqDCoMKgwqDCoMKgIHJldHVybiAobW0g JiYgc3RhdGljX2JyYW5jaF91bmxpa2VseSgmdXNlX2FzaWRfYWxsb2NhdG9yKSkgPworwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXRvbWljX2xvbmdfcmVhZCgm bW0tPmNvbnRleHQuaWQpICYgYXNpZF9tYXNrIDogCkZMVVNIX1RMQl9OT19BU0lEOworIH0KKwor IHN0YXRpYyB2b2lkIF9fZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogwqAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0 cnVjdCBjcHVtYXNrICpjbWFzaywKKyvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNtYXNrLAogwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNp Z25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUsCiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgc3Ry aWRlKQogwqAgewpAQEAgLTIwMCw3IC0yMDQsNyArMjA0LDcgQEBAIHZvaWQgZmx1c2hfdGxiX3Jh bmdlKHN0cnVjdCB2bV9hcmVhX3N0cgoKIMKgIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1 bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIMKgIHsKLcKgwqDCoMKgwqDC oCBfX2ZsdXNoX3RsYl9yYW5nZShjcHVfb25saW5lX21hc2ssIEZMVVNIX1RMQl9OT19BU0lELAog wqAtwqDCoMKgwqDCoCBfX2ZsdXNoX3RsYl9yYW5nZShOVUxMLCAoc3RydWN0IGNwdW1hc2sgKilj cHVfb25saW5lX21hc2ssCisrwqDCoMKgwqDCoCBfX2ZsdXNoX3RsYl9yYW5nZShOVUxMLCBjcHVf b25saW5lX21hc2ssCiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzdGFydCwgZW5kIC0gc3RhcnQsIFBBR0VfU0laRSk7CiDCoCB9CgpUaGFua3MsCgpB bGV4CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlu dXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yaXNjdgo=