From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 62FF415E811 for ; Wed, 10 Apr 2024 13:30:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.45 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712755814; cv=none; b=W0kTQ/aJ96eZBmWn5ioSyE4G5Z/FWPb6m4H25svQLJVYACcYXCiOQahY/OBgFC1f/60b+ODq4DBzozpPl+E2v2SSo7r5tr6mjuooN0oVm52GDHjIdBkIpDPirIFU89NVSZRoqPtjrNcMHXEPVGtDIuy1PjSOShzmLnhGLhac1NI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712755814; c=relaxed/simple; bh=QeB9OfJMdtuu+MeX+UDHBiMoyw3H56X3ot4ZLiDwEVo=; h=Message-ID:Date:MIME-Version:Subject:To:References:From: In-Reply-To:Content-Type; b=iANPelnelnMdoj0aggaZdo9H/41TWDuGwXFVrRgu8YYwLyjN+uaLSOGLd6WVsS5oEj5GxS5aV6ZBeV7nXFH6O3RlIr04NBOVIAD4KeO3VFnlvkHSiR2M8VXe+C/RLHH0W8ExGs8zWJ67GQtkaiz7Z81e5F/s62JGHZkdYjwM/nc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=NSlvbMzk; arc=none smtp.client-ip=209.85.221.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="NSlvbMzk" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-346407b8c9aso627971f8f.0 for ; Wed, 10 Apr 2024 06:30:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1712755809; x=1713360609; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id:from :to:cc:subject:date:message-id:reply-to; bh=32iJp15PcGuZHbPnwm0RSMu5nUcxak1d7iCEjmrlYwI=; b=NSlvbMzkmQoWWCXbPZRcE6/c+z12dgFzN/P7OGjEjqyfESXEtkhzk31bAmMHQWOdiK 4Qnpsgi+p7NMjNkSEuPtHTOcWpaj4XuOmEEVLFeqJNftZEXKYqw+bXS/6garqXG9RoH7 3c/mJX5Ou/JbEctxzIRsfjTr2MqoWA5jt+erbYeWVd93x19Mv/I4OlkE0UGS7xbNELDB 4MaVP+3L37Pxsby2apKh03UQGIksUuwmOGfyJrMtfKK1LpvM6sGiCVv++tdSdvkJf1R/ tNGnb2pcw/yZDjcLHfF8NEg06SS2MErUl+3h2wyd4Zee8VEQT/oeUz0YWUormlLcAe2o k3Lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712755809; x=1713360609; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=32iJp15PcGuZHbPnwm0RSMu5nUcxak1d7iCEjmrlYwI=; b=cG7zdOw+JzxAHYXjQIM4572yq64CWLF1OCy5a+VBNPzA1H9MiDpjHtrSRebQJ/0hqy nQ9UXcIygpM3GZaZ6Ue4iWe6+PCdiiONcwukWI8lFuqCheS59IV+W4+Ia9vGow1P/uMs E+nvi55sPDJvSvT775m9G8oU4fSvyXbPTNGgohpxNRlbfTB4zMftlytesQd37N3sKbCg m5sdpEyGp0jGjPfi8j1y+BfQqDsPKCYOrRt16MK3mlzc6bSmQ3d3NRGT34Fd/CxP23MC nYqG+nlK0QuGjuT7yUnwuqkuhxpFYLeKOYXvDialoqLH8MKzcOUfv4dsIQg/sLcsKokP i52Q== X-Forwarded-Encrypted: i=1; AJvYcCXEd0AggZCl2tquUO9pS5LK92q4rjGfhUoz9/8vKSQpBUH934KLgQtea17xv1hEb1wWyxFgOkddJWPqvBBkTZXawp00n2H7+YtcAHSu X-Gm-Message-State: AOJu0YyETuAa8WLhJIBxd9WpWOrSVKcMpEaihY69wEkLzarLONnUqafD frrg/YKpdrquNaiNhvEH4rklGZkOMWBx3U38hlPWtIhMPU2XtSTENm+VkIiRrpk= X-Google-Smtp-Source: AGHT+IEQhbdT5IHPax2HDjZgCdrhEdBpQ4lhA3SmQHGmfssPRjRA4igWvzVJELZqULIYdxKtSy/7FQ== X-Received: by 2002:a05:600c:35d5:b0:416:648f:9a6d with SMTP id r21-20020a05600c35d500b00416648f9a6dmr1900769wmq.1.1712755809450; Wed, 10 Apr 2024 06:30:09 -0700 (PDT) Received: from ?IPV6:2a01:e0a:999:a3a0:d4a6:5856:3e6c:3dff? ([2a01:e0a:999:a3a0:d4a6:5856:3e6c:3dff]) by smtp.gmail.com with ESMTPSA id bd12-20020a05600c1f0c00b00416645e7e47sm2300102wmb.13.2024.04.10.06.30.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 10 Apr 2024 06:30:08 -0700 (PDT) Message-ID: Date: Wed, 10 Apr 2024 15:30:08 +0200 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 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> Content-Language: en-US From: =?UTF-8?B?Q2zDqW1lbnQgTMOpZ2Vy?= In-Reply-To: <20240328073838.8776-1-alexghiti@rivosinc.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) Hi Alex, Nit: the inline attribute is probably useless. > +{ > + 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); > } Other than that, looks good to me, Reviewed-by: Clément Léger Thanks, Clément 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 D941CCD128A for ; Wed, 10 Apr 2024 13:30:21 +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-Transfer-Encoding:Content-Type: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=gLCPflM5wqdOJ0gloGaEYAlcC/v6vFJ8iAJM6ldOFwE=; b=XVbULHeyXAPFkd 9l0Y7NTPLXjY3twLPSYPdCRmuLZkSYEN5F9TK6KUz9YsfeGPyeex1Wl1A/jwwUkN+LjJzXw0ev0Dk n7V45yx0WBNfSjxN0e1c5ryXTxQ/D/Xv4i6aiFWYp8TEP9ab5NRS0xvqEbxEnxGbE0p/VA7gX8ASo 2dDPk2H+/7lngAZkk7uSNl4FWoGon6vItnOHhecXM96n4eI7jFSTgSecCe9OwhpVBTe3sln9cHd4a YkzbhBbAvBDfo2HuWiaXhhuSU9qHZ/YtfFD3EWU+s5Kuqk2E5YKEdTCLokRx4AbLPzFEl/MQee1cM /WIZS9hykMVmS3c/I8VA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1ruY1o-00000007AjB-3xdk; Wed, 10 Apr 2024 13:30:16 +0000 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1ruY1k-00000007Afa-3brr for linux-riscv@lists.infradead.org; Wed, 10 Apr 2024 13:30:15 +0000 Received: by mail-wr1-x436.google.com with SMTP id ffacd0b85a97d-34602c11302so278843f8f.1 for ; Wed, 10 Apr 2024 06:30:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1712755809; x=1713360609; darn=lists.infradead.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id:from :to:cc:subject:date:message-id:reply-to; bh=32iJp15PcGuZHbPnwm0RSMu5nUcxak1d7iCEjmrlYwI=; b=A+gDaxchzjqOjce6804w/rvghjgFPwBxNywO/cmaCpxWl4Pamrr6LjXVM94X2wqPIU V+ALtqiRAGIGAKxw5ymVsb2phP7cap+1/VBcswnYew5enrEt/5xFxL9EBvnOkcbwzRjD 4jWFeHGRU3K98UkKM14o1VJ+UasRZomMnHv+x3evoM/apzq3FxARuakwbeLnP+fDXPNu QgeWo9diLVQnxQf8Lrmk/BkvjPXXn7X5lzZzsnFy1ILmCpjK1I31qMsv9AKWzdbrpzd9 IUk4/4ebYck6QmbZL2P0ZC24BGT311t4Hp6LtRtmoATOqrtsApX9TCi3YB5c9ExWmhRS L0Zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712755809; x=1713360609; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=32iJp15PcGuZHbPnwm0RSMu5nUcxak1d7iCEjmrlYwI=; b=NExKnnT7NQyMicRnnlWvLjdowjnaduu2DtG0gx+62J05Y/t4siqRBB0RizaV+o1UVe Tcjg9X62wSsxUpHKu6aiDn96YFCLpnch9GlUhX+e6dxyxFEC3EI0bNteK+qU/JRJSRQ2 O/Y+rvxBnFPO66YnWauknLVINk1JC2gV7V8EIIi7POQTS/i7xw6ZoA2XWFYRqHCg3Xsw 6RpILDzBVLOR60C6h3NO16id5SA9qOtARDxV+tMN1uyQD7esVz5DGTa3n/fctalq8hKf 3ulU5On8+L2ScOQrqKjmmLUcA3tlGfMHoOwLf13sPowaoz8afCgsJsBspZh98qmAAACq jV9g== X-Forwarded-Encrypted: i=1; AJvYcCVNKP9fX2mGTDWW0IeOcklEeh22VojKbuEP6jrM26tc13gB+SMVI1P3MBYii7cBQxEvjrxviMD2ZiBotLB5FmfmJra9xuBMMTkq6DL1PdwJ X-Gm-Message-State: AOJu0Yzmi5ktG2tMK82Da0ie1sOmvqyp4MTSv3eijXwflZwkA8BbjhWg 4amouuFIetAaFjhMLObhRC+q4dLlwSjOBG43uxof9NX9SBSVTv8fhTChi57I5/k= X-Google-Smtp-Source: AGHT+IEQhbdT5IHPax2HDjZgCdrhEdBpQ4lhA3SmQHGmfssPRjRA4igWvzVJELZqULIYdxKtSy/7FQ== X-Received: by 2002:a05:600c:35d5:b0:416:648f:9a6d with SMTP id r21-20020a05600c35d500b00416648f9a6dmr1900769wmq.1.1712755809450; Wed, 10 Apr 2024 06:30:09 -0700 (PDT) Received: from ?IPV6:2a01:e0a:999:a3a0:d4a6:5856:3e6c:3dff? ([2a01:e0a:999:a3a0:d4a6:5856:3e6c:3dff]) by smtp.gmail.com with ESMTPSA id bd12-20020a05600c1f0c00b00416645e7e47sm2300102wmb.13.2024.04.10.06.30.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 10 Apr 2024 06:30:08 -0700 (PDT) Message-ID: Date: Wed, 10 Apr 2024 15:30:08 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2] riscv: Call secondary mmu notifier when flushing the tlb 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> Content-Language: en-US From: =?UTF-8?B?Q2zDqW1lbnQgTMOpZ2Vy?= In-Reply-To: <20240328073838.8776-1-alexghiti@rivosinc.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240410_063013_063960_BF6E5207 X-CRM114-Status: GOOD ( 16.81 ) 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org CgpPbiAyOC8wMy8yMDI0IDA4OjM4LCBBbGV4YW5kcmUgR2hpdGkgd3JvdGU6Cj4gVGhpcyBpcyBy ZXF1aXJlZCB0byBhbGxvdyB0aGUgSU9NTVUgZHJpdmVyIHRvIGNvcnJlY3RseSBmbHVzaCBpdHMg b3duCj4gVExCLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEFsZXhhbmRyZSBHaGl0aSA8YWxleGdoaXRp QHJpdm9zaW5jLmNvbT4KPiAtLS0KPiAKPiBDaGFuZ2VzIGluIHYyOgo+IC0gUmViYXNlIG9uIHRv cCBvZiA2LjktcmMxCj4gCj4gIGFyY2gvcmlzY3YvbW0vdGxiZmx1c2guYyB8IDM5ICsrKysrKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQo+ICAxIGZpbGUgY2hhbmdlZCwgMjMgaW5z ZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yv bW0vdGxiZmx1c2guYyBiL2FyY2gvcmlzY3YvbW0vdGxiZmx1c2guYwo+IGluZGV4IDg5MzU2NmUw MDRiNy4uODU0ZDk4NGRlYjA3IDEwMDY0NAo+IC0tLSBhL2FyY2gvcmlzY3YvbW0vdGxiZmx1c2gu Ywo+ICsrKyBiL2FyY2gvcmlzY3YvbW0vdGxiZmx1c2guYwo+IEBAIC00LDYgKzQsNyBAQAo+ICAj aW5jbHVkZSA8bGludXgvc21wLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgo+ICAjaW5j bHVkZSA8bGludXgvaHVnZXRsYi5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW11X25vdGlmaWVyLmg+ Cj4gICNpbmNsdWRlIDxhc20vc2JpLmg+Cj4gICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4K PiAgCj4gQEAgLTk5LDExICsxMDAsMTkgQEAgc3RhdGljIHZvaWQgX19pcGlfZmx1c2hfdGxiX3Jh bmdlX2FzaWQodm9pZCAqaW5mbykKPiAgCWxvY2FsX2ZsdXNoX3RsYl9yYW5nZV9hc2lkKGQtPnN0 YXJ0LCBkLT5zaXplLCBkLT5zdHJpZGUsIGQtPmFzaWQpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9p ZCBfX2ZsdXNoX3RsYl9yYW5nZShzdHJ1Y3QgY3B1bWFzayAqY21hc2ssIHVuc2lnbmVkIGxvbmcg YXNpZCwKPiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9tbV9hc2lkKHN0cnVjdCBt bV9zdHJ1Y3QgKm1tKQoKSGkgQWxleCwKCk5pdDogdGhlIGlubGluZSBhdHRyaWJ1dGUgaXMgcHJv YmFibHkgdXNlbGVzcy4KCj4gK3sKPiArCXJldHVybiAobW0gJiYgc3RhdGljX2JyYW5jaF91bmxp a2VseSgmdXNlX2FzaWRfYWxsb2NhdG9yKSkgPwo+ICsJCQlhdG9taWNfbG9uZ19yZWFkKCZtbS0+ Y29udGV4dC5pZCkgJiBhc2lkX21hc2sgOiBGTFVTSF9UTEJfTk9fQVNJRDsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgX19mbHVzaF90bGJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCj4gKwkJ CSAgICAgIHN0cnVjdCBjcHVtYXNrICpjbWFzaywKPiAgCQkJICAgICAgdW5zaWduZWQgbG9uZyBz dGFydCwgdW5zaWduZWQgbG9uZyBzaXplLAo+ICAJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0cmlk ZSkKPiAgewo+ICAJc3RydWN0IGZsdXNoX3RsYl9yYW5nZV9kYXRhIGZ0ZDsKPiArCXVuc2lnbmVk IGxvbmcgYXNpZCA9IGdldF9tbV9hc2lkKG1tKTsKPiAgCWJvb2wgYnJvYWRjYXN0Owo+ICAKPiAg CWlmIChjcHVtYXNrX2VtcHR5KGNtYXNrKSkKPiBAQCAtMTM3LDMxICsxNDYsMjYgQEAgc3RhdGlj IHZvaWQgX19mbHVzaF90bGJfcmFuZ2Uoc3RydWN0IGNwdW1hc2sgKmNtYXNrLCB1bnNpZ25lZCBs b25nIGFzaWQsCj4gIAo+ICAJaWYgKGNtYXNrICE9IGNwdV9vbmxpbmVfbWFzaykKPiAgCQlwdXRf Y3B1KCk7Cj4gLX0KPiAgCj4gLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbW1fYXNp ZChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKPiAtewo+IC0JcmV0dXJuIHN0YXRpY19icmFuY2hfdW5s aWtlbHkoJnVzZV9hc2lkX2FsbG9jYXRvcikgPwo+IC0JCQlhdG9taWNfbG9uZ19yZWFkKCZtbS0+ Y29udGV4dC5pZCkgJiBhc2lkX21hc2sgOiBGTFVTSF9UTEJfTk9fQVNJRDsKPiArCWlmIChtbSkK PiArCQltbXVfbm90aWZpZXJfYXJjaF9pbnZhbGlkYXRlX3NlY29uZGFyeV90bGJzKG1tLCBzdGFy dCwgc3RhcnQgKyBzaXplKTsKPiAgfQo+ICAKPiAgdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1t X3N0cnVjdCAqbW0pCj4gIHsKPiAtCV9fZmx1c2hfdGxiX3JhbmdlKG1tX2NwdW1hc2sobW0pLCBn ZXRfbW1fYXNpZChtbSksCj4gLQkJCSAgMCwgRkxVU0hfVExCX01BWF9TSVpFLCBQQUdFX1NJWkUp Owo+ICsJX19mbHVzaF90bGJfcmFuZ2UobW0sIG1tX2NwdW1hc2sobW0pLCAwLCBGTFVTSF9UTEJf TUFYX1NJWkUsIFBBR0VfU0laRSk7Cj4gIH0KPiAgCj4gIHZvaWQgZmx1c2hfdGxiX21tX3Jhbmdl KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+ICAJCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25l ZCBsb25nIGVuZCwKPiAgCQkJdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSkKPiAgewo+IC0JX19mbHVz aF90bGJfcmFuZ2UobW1fY3B1bWFzayhtbSksIGdldF9tbV9hc2lkKG1tKSwKPiAtCQkJICBzdGFy dCwgZW5kIC0gc3RhcnQsIHBhZ2Vfc2l6ZSk7Cj4gKwlfX2ZsdXNoX3RsYl9yYW5nZShtbSwgbW1f Y3B1bWFzayhtbSksIHN0YXJ0LCBlbmQgLSBzdGFydCwgcGFnZV9zaXplKTsKPiAgfQo+ICAKPiAg dm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQg bG9uZyBhZGRyKQo+ICB7Cj4gLQlfX2ZsdXNoX3RsYl9yYW5nZShtbV9jcHVtYXNrKHZtYS0+dm1f bW0pLCBnZXRfbW1fYXNpZCh2bWEtPnZtX21tKSwKPiArCV9fZmx1c2hfdGxiX3JhbmdlKHZtYS0+ dm1fbW0sIG1tX2NwdW1hc2sodm1hLT52bV9tbSksCj4gIAkJCSAgYWRkciwgUEFHRV9TSVpFLCBQ QUdFX1NJWkUpOwo+ICB9Cj4gIAo+IEBAIC0xOTQsMTMgKzE5OCwxMyBAQCB2b2lkIGZsdXNoX3Rs Yl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwK PiAgCQl9Cj4gIAl9Cj4gIAo+IC0JX19mbHVzaF90bGJfcmFuZ2UobW1fY3B1bWFzayh2bWEtPnZt X21tKSwgZ2V0X21tX2FzaWQodm1hLT52bV9tbSksCj4gKwlfX2ZsdXNoX3RsYl9yYW5nZSh2bWEt PnZtX21tLCBtbV9jcHVtYXNrKHZtYS0+dm1fbW0pLAo+ICAJCQkgIHN0YXJ0LCBlbmQgLSBzdGFy dCwgc3RyaWRlX3NpemUpOwo+ICB9Cj4gIAo+ICB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uo dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCj4gIHsKPiAtCV9fZmx1c2hf dGxiX3JhbmdlKChzdHJ1Y3QgY3B1bWFzayAqKWNwdV9vbmxpbmVfbWFzaywgRkxVU0hfVExCX05P X0FTSUQsCj4gKwlfX2ZsdXNoX3RsYl9yYW5nZShOVUxMLCAoc3RydWN0IGNwdW1hc2sgKiljcHVf b25saW5lX21hc2ssCj4gIAkJCSAgc3RhcnQsIGVuZCAtIHN0YXJ0LCBQQUdFX1NJWkUpOwo+ICB9 Cj4gIAo+IEBAIC0yMDgsNyArMjEyLDcgQEAgdm9pZCBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHVu c2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQo+ICB2b2lkIGZsdXNoX3BtZF90 bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQs Cj4gIAkJCXVuc2lnbmVkIGxvbmcgZW5kKQo+ICB7Cj4gLQlfX2ZsdXNoX3RsYl9yYW5nZShtbV9j cHVtYXNrKHZtYS0+dm1fbW0pLCBnZXRfbW1fYXNpZCh2bWEtPnZtX21tKSwKPiArCV9fZmx1c2hf dGxiX3JhbmdlKHZtYS0+dm1fbW0sIG1tX2NwdW1hc2sodm1hLT52bV9tbSksCj4gIAkJCSAgc3Rh cnQsIGVuZCAtIHN0YXJ0LCBQTURfU0laRSk7Cj4gIH0KPiAgI2VuZGlmCj4gQEAgLTIyMiw3ICsy MjYsMTAgQEAgdm9pZCBhcmNoX3RsYmJhdGNoX2FkZF9wZW5kaW5nKHN0cnVjdCBhcmNoX3RsYmZs dXNoX3VubWFwX2JhdGNoICpiYXRjaCwKPiAgCQkJICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1t LAo+ICAJCQkgICAgICAgdW5zaWduZWQgbG9uZyB1YWRkcikKPiAgewo+ICsJdW5zaWduZWQgbG9u ZyBzdGFydCA9IHVhZGRyICYgUEFHRV9NQVNLOwo+ICsKPiAgCWNwdW1hc2tfb3IoJmJhdGNoLT5j cHVtYXNrLCAmYmF0Y2gtPmNwdW1hc2ssIG1tX2NwdW1hc2sobW0pKTsKPiArCW1tdV9ub3RpZmll cl9hcmNoX2ludmFsaWRhdGVfc2Vjb25kYXJ5X3RsYnMobW0sIHN0YXJ0LCBzdGFydCArIFBBR0Vf U0laRSk7Cj4gIH0KPiAgCj4gIHZvaWQgYXJjaF9mbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+IEBAIC0yMzIsNyArMjM5LDcgQEAgdm9pZCBhcmNoX2ZsdXNo X3RsYl9iYXRjaGVkX3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pCj4gIAo+ICB2b2lkIGFy Y2hfdGxiYmF0Y2hfZmx1c2goc3RydWN0IGFyY2hfdGxiZmx1c2hfdW5tYXBfYmF0Y2ggKmJhdGNo KQo+ICB7Cj4gLQlfX2ZsdXNoX3RsYl9yYW5nZSgmYmF0Y2gtPmNwdW1hc2ssIEZMVVNIX1RMQl9O T19BU0lELCAwLAo+IC0JCQkgIEZMVVNIX1RMQl9NQVhfU0laRSwgUEFHRV9TSVpFKTsKPiArCV9f Zmx1c2hfdGxiX3JhbmdlKE5VTEwsICZiYXRjaC0+Y3B1bWFzaywKPiArCQkJICAwLCBGTFVTSF9U TEJfTUFYX1NJWkUsIFBBR0VfU0laRSk7Cj4gIAljcHVtYXNrX2NsZWFyKCZiYXRjaC0+Y3B1bWFz ayk7Cj4gIH0KCk90aGVyIHRoYW4gdGhhdCwgbG9va3MgZ29vZCB0byBtZSwKClJldmlld2VkLWJ5 OiBDbMOpbWVudCBMw6lnZXIgPGNsZWdlckByaXZvc2luYy5jb20+CgpUaGFua3MsCgpDbMOpbWVu dAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4 LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6 Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcmlzY3YK