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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 09D17C982EA for ; Wed, 23 Sep 2026 03:39:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A8C0A6B008A; Tue, 22 Sep 2026 23:39:35 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A15176B008C; Tue, 22 Sep 2026 23:39:35 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8DD096B0093; Tue, 22 Sep 2026 23:39:35 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 5B0DB6B008A for ; Tue, 22 Sep 2026 23:39:35 -0400 (EDT) Received: from smtpin17.hostedemail.com (lb01a-stub [10.200.18.249]) by unirelay06.hostedemail.com (Postfix) with ESMTP id DDA23A675A for ; Wed, 23 Sep 2026 03:39:34 +0000 (UTC) X-FDA: 85243622268.17.427CA92 Received: from mta1.migadu.com (out-242.mta1.migadu.com [95.215.58.242]) by imf20.hostedemail.com (Postfix) with ESMTP id 7FFCD1C0002 for ; Wed, 23 Sep 2026 03:39:32 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=ABB4USa2; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf20.hostedemail.com: domain of ye.liu@linux.dev designates 95.215.58.242 as permitted sender) smtp.mailfrom=ye.liu@linux.dev ARC-Seal: i=1; a=rsa-sha256; d=hostedemail.com; s=arc-20220608; cv=none; t=1790134773; b=L4Flg7Q6lz4nv/L03DB1sd0K1AanA7QR2HtusZdgLdW+SNfJlT8rxl64YPvs+Tb7+r/rY2 Q9KWcvTJgYBjfX3IqXPaN4IHABkLSitddYeBa5qFOAWDiOEUenQwHvKrxvqyXwkem+GxHf w5YKQf5ko87NRAUy9teNe4Jqa+BJnOs= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=ABB4USa2; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf20.hostedemail.com: domain of ye.liu@linux.dev designates 95.215.58.242 as permitted sender) smtp.mailfrom=ye.liu@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1790134773; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=0TptEs3dVH890tylyf3i/qImne671caOdboC4cbmfnM=; b=2//oeWrSME6+K9jFsu6szqOcwFgJpLkRxqJuHNSn6eBrj1FFKa8ZlT12K/S9dn/6JgVLd7 mCSs1pH8dlNyEOdpZe1WHkioL+RW587EbksgoIV2XnsdxFPxT5jtQbaOHPKG04E1LtBtSa kLIxUs82s4VYG0KGGjXd5D3VBEV68Ks= X-Envelope-To: linux-mm@kvack.org DKIM-Signature: a=rsa-sha256; bh=QY8AVjCbcaW+wVLRtHjQxzMTz4h9U9+ldEP+b+H2GcE=; c=simple/simple; d=linux.dev; h=from:to:subject:date:message-id:mime-version:content-type; s=key1; t=1790134770; v=1; x=1790739570; b=ABB4USa2vu6w6QWM6kEX42ZQQoHM9Gxuc2x9l0bTvGcQKklfXHgbDlXtCcBNUl4++CITb+Ln 7zU8QcXZBNXjlHBsecDtE5ZQBSzqYr4npPnyBnbjWnjVo+Rfxx18VXtakgOhYCQulJi5SS1q3CH EmUa6xXOFyz5urVSgh7eXN7w= X-Envelope-To: linux-mm@kvack.org Received: by smtp.migadu.com with ESMTPS id e2387b4930517eb3; Wed, 23 Sep 2026 03:39:30 +0000 X-Mizu-Trace-ID: e2387b4930517eb3 X-Migadu-Flow: FLOW_OUT Message-ID: <19136e23-3af6-4bf5-93cf-46bb1dc46c08@linux.dev> Date: Wed, 23 Sep 2026 11:39:25 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 2/3] mm/vmalloc: fix vmalloc_dump_obj cross-zone VA lookup To: Uladzislau Rezki Cc: Andrew Morton , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, Ye Liu References: <20260921-vmalloc_dump_obj-v2-0-73fceb3ed1c8@linux.dev> <20260921-vmalloc_dump_obj-v2-2-73fceb3ed1c8@linux.dev> Content-Language: en-US From: Ye Liu In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam06 X-Stat-Signature: o1mhc9ypmwwpf77p37eg4skajpzdpqoy X-Rspam-User: X-Rspamd-Queue-Id: 7FFCD1C0002 X-HE-Tag: 1790134772-163371 X-HE-Meta: U2FsdGVkX19AM/cGdVuenjFzyTWryc1xtsls/ewrib4MtdkTT0t48PN9F15Qq71/RmN3gCvhwQWwOAT9e70vy+Ch8y3zGsgaI1aCx901nNnisK17UHuob41Aob1IXR96YXjoBNWWgr+YZJHSOm++SdYKihYkYd77WoIcYw2w+Bwlb+zjq286a3bBI6BIxoJ2gZy5htnTjEsngwf8CSNP3H9wo7avvT6xHjz/FGiyw9o4M/Ss1QfDxMiS18sQ9Lk6onXvscuphBWNJw3bd2xgdLoyDjORQapJCh4tdH+r4MbOUW0q8JnawbpO2K6GbV8OvLGtWmdafHjbwsp5b2arCex0r1vROFfzpw36NpnceQOmnHLWjs+DMwlcJdPZyNKirFu1qB3vxXX5m8gHXMzef6QjeAdf+YADeiSw1K4+T8oYwVP2dHg2cy8cboztyzmv+N/Gv4jqtv+wQ6DJtKTMCQDRAKtG4MSh8J5iLnnLbvVRRiU5OiQAiqmzPCh/eSXHV3dHGdlphtP/jQnrBJKNnIoTluW+fSca7K7dnAfaDVPqrWqNq7lNE5jBP+fNRXvH63kqk3CJFPo8/s9env8C2i3mWph5AocxaEe4HZOUgdndvR8SgBMNHeEkbegOgH48DO9AUjhYDJxeOV6gaIJsSKibvVTkdaiWm2ClBmKBS4QpOidiOIBuIzmmgjODhgKnTHvpdHXOICuHho+PmYevMWodPOF9YNGE49jfUvmw6u3g4/KExB69jKlQiAIAhF8M0sQMNoT3CeP6pEXstgGelnR72MQSwxw3lYpYXjyW43ZOksfQa5hhevlejcbWxRSuK5xOiw4AJ84cVjaTyFx1unB+cOCkwgons3sS1/YSoQS6t7lkUBH0LtCLsotWolQpZgYB+RznqAPvQT0rbp4lBWu56y9b5+ice+TR+4FSP/X7sUxJfEeqOnLwFWxeIsmoZa4goIaa+1Om6yNMeRE NYNNtK9p JmDMYwijHiV9YpadMonJkvn3pWjy21znNtWlY/sxrhfsxXsiY8/5pfnCNePr6w9sFxImYdnWHNgySvshegcJDdNBr+eiLnlGYD2mFMrWL/kD9p8Ohm5/NTDImAda0npmtpnBrkgbrpFQfUCEwzHm9+jLehG45qKLrmFuSzBwTG7KlqqcXQ/7tUPRkIJfHZd+q13EKUie/BAQUAvV4B0y+pbgIVd+d4prBH4Hw1rYoM8EzC16NgmMiQdc/nfQQK1onU03uBEYw91j0pcqV7gGlLxqZ2+wXamJ0KVRX/H0KfT2n5c+0pSiq11OACM53iTbnVsvU1JnqTw3ugV8nvPwu+dBYfWrGzdCUUtnw Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: 在 2026/9/22 20:44, Uladzislau Rezki 写道: > On Mon, Sep 21, 2026 at 09:17:22PM +0800, Ye Liu wrote: >> From: Ye Liu >> >> vmalloc_dump_obj() searches only one vmap node (addr_to_node(addr)), >> but a vmalloc allocation may span multiple vmap zones. The VA is >> stored in only one node's rb-tree (addr_to_node(va_start)), so an >> object pointer in a different zone than va_start maps to a different >> node and the search misses. This affects any allocation larger than >> vmap_zone_size (64 KiB) on multi-CPU systems. >> >> Iterate all vmap nodes using for_each_vmap_node, like find_vmap_area() >> does, but with spin_trylock instead of spin_lock as this function can >> be called from atomic dump contexts (OOM, KASAN, RCU). >> >> Signed-off-by: Ye Liu >> --- >> mm/vmalloc.c | 24 ++++++++++++++++++------ >> 1 file changed, 18 insertions(+), 6 deletions(-) >> >> diff --git a/mm/vmalloc.c b/mm/vmalloc.c >> index df42d8a6f058..30c610f678dc 100644 >> --- a/mm/vmalloc.c >> +++ b/mm/vmalloc.c >> @@ -5278,17 +5278,29 @@ bool vmalloc_dump_obj(void *object) >> unsigned long nr_pages; >> >> addr = PAGE_ALIGN_DOWN((unsigned long) object); >> - vn = addr_to_node(addr); >> >> - if (!spin_trylock(&vn->busy.lock)) >> - return false; >> + /* >> + * A vmalloc allocation may span multiple vmap zones, so the >> + * node whose rb-tree holds the VA may differ from the node >> + * the address maps to. Search all nodes. Use trylock as >> + * this function can be called from atomic dump contexts. >> + */ >> + va = NULL; >> + for_each_vmap_node(vn) { >> + if (!spin_trylock(&vn->busy.lock)) >> + continue; >> + >> + va = __find_vmap_area(addr, &vn->busy.root); >> + if (va && va->vm) >> + break; >> >> - va = __find_vmap_area(addr, &vn->busy.root); >> - if (!va || !va->vm) { >> spin_unlock(&vn->busy.lock); >> - return false; >> + va = NULL; >> } >> >> + if (!va) >> + return false; >> + >> vm = va->vm; >> addr = (unsigned long) vm->addr; >> caller = vm->caller; >> >> -- >> 2.25.1 >> > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index 89c327a6ce7d..3719dc02dcaf 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -2511,7 +2511,22 @@ static void free_unmap_vmap_area(struct vmap_area *va) > free_vmap_area_noflush(va); > } > > -struct vmap_area *find_vmap_area(unsigned long addr) > +static inline int next_vmap_node_id(int i) > +{ > + return (i + nr_vmap_nodes - 1) % nr_vmap_nodes; > +} > + > +enum vmap_lock_mode { > + VMAP_LOCK, > + VMAP_TRYLOCK, > +}; > + > +/* > + * Add a comment here. > + */ > +static struct vmap_area * > +find_vmap_area_lock(unsigned long addr, struct vmap_node **locked_vn, > + enum vmap_lock_mode mode) > { > struct vmap_node *vn; > struct vmap_area *va; > @@ -2534,16 +2549,40 @@ struct vmap_area *find_vmap_area(unsigned long addr) > * addr is within 2 or 0 nodes we should do extra work. > */ > i = j = addr_to_node_id(addr); > + > do { > vn = &vmap_nodes[i]; > > - spin_lock(&vn->busy.lock); > + if (mode == VMAP_LOCK) { > + spin_lock(&vn->busy.lock); > + } else { > + if (!spin_trylock(&vn->busy.lock)) > + continue; > + } > + > va = __find_vmap_area(addr, &vn->busy.root); > + if (va) { > + *locked_vn = vn; > + return va; > + } > + > spin_unlock(&vn->busy.lock); > + } while ((i = next_vmap_node_id(i)) != j); > > - if (va) > - return va; > - } while ((i = (i + nr_vmap_nodes - 1) % nr_vmap_nodes) != j); > + *locked_vn = NULL; > + return NULL; > +} > + > +struct vmap_area *find_vmap_area(unsigned long addr) > +{ > + struct vmap_node *vn; > + struct vmap_area *va; > + > + va = find_vmap_area_lock(addr, &vn, VMAP_LOCK); > + if (va) { > + spin_unlock(&vn->busy.lock); > + return va; > + } > > return NULL; > } > > > and we use the helper in the vmalloc_dump_obj()? Hi Uladzislau, Thanks for the suggestion. I have adopted the find_vmap_area_lock() helper approach in v3. The helper unifies the cross-node iteration logic with a mode parameter for spin_lock and spin_trylock, the latter used by vmalloc_dump_obj() for atomic dump contexts. find_unlink_vmap_area() is also simplified to use the same helper, removing a third copy of the iteration loop. The helper returns with the node's busy.lock held, so the caller can unlink_va() under the same lock before releasing it. Will send v3 shortly. > > -- > Uladzislau Rezki -- Thanks, Ye Liu 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 ED630C982FA for ; Wed, 23 Sep 2026 03:40:03 +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:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=tqfW2A62YAgKHAvKI3zMz06SSjcEgEG+L7JNDjpAP0E=; b=YNiHhDvqbwLzOy 1VHCZtRHbebk9ToX8hpw8pPmagfrVcGxCrU89wzvQkbqA3ar66ZSGBZdRSZNYVkKOl6uJvEk9FgIW gTBNfyYRiSggPEfXdKs4Sb4ps49PfxJIMJPOe/Q98dSxvu1QhtLuziWvfoxd0mdxSKT/pIhMQVQrm +PaHls+kdXbgryFXHzgNfX1d/SJT/84WuLRiDK+7CYmtyX+eXgCorvLrNYOdtNBydncDyF+wS9vpg 3ROvlwg8a9PEjwxV99l49F0owwGilq0Ac2ArvQa1R8HlcJkzOlkRvmlpcRFfd/m0rquz4/AKKURjC SeRcrZ2Izu/69tWXCSsQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x9Dpj-0000000745c-0orR; Wed, 23 Sep 2026 03:39:47 +0000 Received: from out-98.mta0.migadu.com ([2001:41d0:1004:224b::62] helo=mta0.migadu.com) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x9Dpg-0000000744Z-2U9G for linux-riscv@lists.infradead.org; Wed, 23 Sep 2026 03:39:46 +0000 X-Envelope-To: linux-riscv@lists.infradead.org DKIM-Signature: a=rsa-sha256; bh=QY8AVjCbcaW+wVLRtHjQxzMTz4h9U9+ldEP+b+H2GcE=; c=simple/simple; d=linux.dev; h=from:to:subject:date:message-id:mime-version:content-type; s=key1; t=1790134780; v=1; x=1790739580; b=xq5qrKhzE0+o64gM4M94boNT5RqrOoMc1iU/v1S+dI+Xa8+B5gIXMAP0L6qaPMed6RxtReb9 N9dgVgeovnw4lDGjtvZwei5sgML/jLGTo/YaY0hQL6TTP21136CCSibH4ARRqwJy3uUA51ic/3G kexcT/7NKGTkoNWudjN8ueVg= X-Envelope-To: linux-riscv@lists.infradead.org Received: by smtp.migadu.com with ESMTPS id e2387b4930517eb3; Wed, 23 Sep 2026 03:39:30 +0000 X-Mizu-Trace-ID: e2387b4930517eb3 X-Migadu-Flow: FLOW_OUT Message-ID: <19136e23-3af6-4bf5-93cf-46bb1dc46c08@linux.dev> Date: Wed, 23 Sep 2026 11:39:25 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 2/3] mm/vmalloc: fix vmalloc_dump_obj cross-zone VA lookup To: Uladzislau Rezki Cc: Andrew Morton , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, Ye Liu References: <20260921-vmalloc_dump_obj-v2-0-73fceb3ed1c8@linux.dev> <20260921-vmalloc_dump_obj-v2-2-73fceb3ed1c8@linux.dev> Content-Language: en-US From: Ye Liu In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260922_203944_841043_7665C049 X-CRM114-Status: GOOD ( 27.89 ) 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 CgrlnKggMjAyNi85LzIyIDIwOjQ0LCBVbGFkemlzbGF1IFJlemtpIOWGmemBkzoKPiBPbiBNb24s IFNlcCAyMSwgMjAyNiBhdCAwOToxNzoyMlBNICswODAwLCBZZSBMaXUgd3JvdGU6Cj4+IEZyb206 IFllIExpdSA8bGl1eWVAa3lsaW5vcy5jbj4KPj4KPj4gdm1hbGxvY19kdW1wX29iaigpIHNlYXJj aGVzIG9ubHkgb25lIHZtYXAgbm9kZSAoYWRkcl90b19ub2RlKGFkZHIpKSwKPj4gYnV0IGEgdm1h bGxvYyBhbGxvY2F0aW9uIG1heSBzcGFuIG11bHRpcGxlIHZtYXAgem9uZXMuICBUaGUgVkEgaXMK Pj4gc3RvcmVkIGluIG9ubHkgb25lIG5vZGUncyByYi10cmVlIChhZGRyX3RvX25vZGUodmFfc3Rh cnQpKSwgc28gYW4KPj4gb2JqZWN0IHBvaW50ZXIgaW4gYSBkaWZmZXJlbnQgem9uZSB0aGFuIHZh X3N0YXJ0IG1hcHMgdG8gYSBkaWZmZXJlbnQKPj4gbm9kZSBhbmQgdGhlIHNlYXJjaCBtaXNzZXMu ICBUaGlzIGFmZmVjdHMgYW55IGFsbG9jYXRpb24gbGFyZ2VyIHRoYW4KPj4gdm1hcF96b25lX3Np emUgKDY0IEtpQikgb24gbXVsdGktQ1BVIHN5c3RlbXMuCj4+Cj4+IEl0ZXJhdGUgYWxsIHZtYXAg bm9kZXMgdXNpbmcgZm9yX2VhY2hfdm1hcF9ub2RlLCBsaWtlIGZpbmRfdm1hcF9hcmVhKCkKPj4g ZG9lcywgYnV0IHdpdGggc3Bpbl90cnlsb2NrIGluc3RlYWQgb2Ygc3Bpbl9sb2NrIGFzIHRoaXMg ZnVuY3Rpb24gY2FuCj4+IGJlIGNhbGxlZCBmcm9tIGF0b21pYyBkdW1wIGNvbnRleHRzIChPT00s IEtBU0FOLCBSQ1UpLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBZZSBMaXUgPGxpdXllQGt5bGlub3Mu Y24+Cj4+IC0tLQo+PiAgbW0vdm1hbGxvYy5jIHwgMjQgKysrKysrKysrKysrKysrKysrLS0tLS0t Cj4+ICAxIGZpbGUgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKPj4K Pj4gZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwo+PiBpbmRleCBkZjQy ZDhhNmYwNTguLjMwYzYxMGY2NzhkYyAxMDA2NDQKPj4gLS0tIGEvbW0vdm1hbGxvYy5jCj4+ICsr KyBiL21tL3ZtYWxsb2MuYwo+PiBAQCAtNTI3OCwxNyArNTI3OCwyOSBAQCBib29sIHZtYWxsb2Nf ZHVtcF9vYmoodm9pZCAqb2JqZWN0KQo+PiAgCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7Cj4+ICAK Pj4gIAlhZGRyID0gUEFHRV9BTElHTl9ET1dOKCh1bnNpZ25lZCBsb25nKSBvYmplY3QpOwo+PiAt CXZuID0gYWRkcl90b19ub2RlKGFkZHIpOwo+PiAgCj4+IC0JaWYgKCFzcGluX3RyeWxvY2soJnZu LT5idXN5LmxvY2spKQo+PiAtCQlyZXR1cm4gZmFsc2U7Cj4+ICsJLyoKPj4gKwkgKiBBIHZtYWxs b2MgYWxsb2NhdGlvbiBtYXkgc3BhbiBtdWx0aXBsZSB2bWFwIHpvbmVzLCBzbyB0aGUKPj4gKwkg KiBub2RlIHdob3NlIHJiLXRyZWUgaG9sZHMgdGhlIFZBIG1heSBkaWZmZXIgZnJvbSB0aGUgbm9k ZQo+PiArCSAqIHRoZSBhZGRyZXNzIG1hcHMgdG8uICBTZWFyY2ggYWxsIG5vZGVzLiAgVXNlIHRy eWxvY2sgYXMKPj4gKwkgKiB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgZnJvbSBhdG9taWMg ZHVtcCBjb250ZXh0cy4KPj4gKwkgKi8KPj4gKwl2YSA9IE5VTEw7Cj4+ICsJZm9yX2VhY2hfdm1h cF9ub2RlKHZuKSB7Cj4+ICsJCWlmICghc3Bpbl90cnlsb2NrKCZ2bi0+YnVzeS5sb2NrKSkKPj4g KwkJCWNvbnRpbnVlOwo+PiArCj4+ICsJCXZhID0gX19maW5kX3ZtYXBfYXJlYShhZGRyLCAmdm4t PmJ1c3kucm9vdCk7Cj4+ICsJCWlmICh2YSAmJiB2YS0+dm0pCj4+ICsJCQlicmVhazsKPj4gIAo+ PiAtCXZhID0gX19maW5kX3ZtYXBfYXJlYShhZGRyLCAmdm4tPmJ1c3kucm9vdCk7Cj4+IC0JaWYg KCF2YSB8fCAhdmEtPnZtKSB7Cj4+ICAJCXNwaW5fdW5sb2NrKCZ2bi0+YnVzeS5sb2NrKTsKPj4g LQkJcmV0dXJuIGZhbHNlOwo+PiArCQl2YSA9IE5VTEw7Cj4+ICAJfQo+PiAgCj4+ICsJaWYgKCF2 YSkKPj4gKwkJcmV0dXJuIGZhbHNlOwo+PiArCj4+ICAJdm0gPSB2YS0+dm07Cj4+ICAJYWRkciA9 ICh1bnNpZ25lZCBsb25nKSB2bS0+YWRkcjsKPj4gIAljYWxsZXIgPSB2bS0+Y2FsbGVyOwo+Pgo+ PiAtLSAKPj4gMi4yNS4xCj4+Cj4gCj4gZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3Zt YWxsb2MuYwo+IGluZGV4IDg5YzMyN2E2Y2U3ZC4uMzcxOWRjMDJkY2FmIDEwMDY0NAo+IC0tLSBh L21tL3ZtYWxsb2MuYwo+ICsrKyBiL21tL3ZtYWxsb2MuYwo+IEBAIC0yNTExLDcgKzI1MTEsMjIg QEAgc3RhdGljIHZvaWQgZnJlZV91bm1hcF92bWFwX2FyZWEoc3RydWN0IHZtYXBfYXJlYSAqdmEp Cj4gIAlmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoKHZhKTsKPiAgfQo+ICAKPiAtc3RydWN0IHZtYXBf YXJlYSAqZmluZF92bWFwX2FyZWEodW5zaWduZWQgbG9uZyBhZGRyKQo+ICtzdGF0aWMgaW5saW5l IGludCBuZXh0X3ZtYXBfbm9kZV9pZChpbnQgaSkKPiArewo+ICsJcmV0dXJuIChpICsgbnJfdm1h cF9ub2RlcyAtIDEpICUgbnJfdm1hcF9ub2RlczsKPiArfQo+ICsKPiArZW51bSB2bWFwX2xvY2tf bW9kZSB7Cj4gKwlWTUFQX0xPQ0ssCj4gKwlWTUFQX1RSWUxPQ0ssCj4gK307Cj4gKwo+ICsvKgo+ ICsgKiBBZGQgYSBjb21tZW50IGhlcmUuCj4gKyAqLwo+ICtzdGF0aWMgc3RydWN0IHZtYXBfYXJl YSAqCj4gK2ZpbmRfdm1hcF9hcmVhX2xvY2sodW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1h cF9ub2RlICoqbG9ja2VkX3ZuLAo+ICsJCWVudW0gdm1hcF9sb2NrX21vZGUgbW9kZSkKPiAgewo+ ICAJc3RydWN0IHZtYXBfbm9kZSAqdm47Cj4gIAlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKPiBAQCAt MjUzNCwxNiArMjU0OSw0MCBAQCBzdHJ1Y3Qgdm1hcF9hcmVhICpmaW5kX3ZtYXBfYXJlYSh1bnNp Z25lZCBsb25nIGFkZHIpCj4gIAkgKiBhZGRyIGlzIHdpdGhpbiAyIG9yIDAgbm9kZXMgd2Ugc2hv dWxkIGRvIGV4dHJhIHdvcmsuCj4gIAkgKi8KPiAgCWkgPSBqID0gYWRkcl90b19ub2RlX2lkKGFk ZHIpOwo+ICsKPiAgCWRvIHsKPiAgCQl2biA9ICZ2bWFwX25vZGVzW2ldOwo+ICAKPiAtCQlzcGlu X2xvY2soJnZuLT5idXN5LmxvY2spOwo+ICsJCWlmIChtb2RlID09IFZNQVBfTE9DSykgewo+ICsJ CQlzcGluX2xvY2soJnZuLT5idXN5LmxvY2spOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWlmICghc3Bp bl90cnlsb2NrKCZ2bi0+YnVzeS5sb2NrKSkKPiArCQkJCWNvbnRpbnVlOwo+ICsJCX0KPiArCj4g IAkJdmEgPSBfX2ZpbmRfdm1hcF9hcmVhKGFkZHIsICZ2bi0+YnVzeS5yb290KTsKPiArCQlpZiAo dmEpIHsKPiArCQkJKmxvY2tlZF92biA9IHZuOwo+ICsJCQlyZXR1cm4gdmE7Cj4gKwkJfQo+ICsK PiAgCQlzcGluX3VubG9jaygmdm4tPmJ1c3kubG9jayk7Cj4gKwl9IHdoaWxlICgoaSA9IG5leHRf dm1hcF9ub2RlX2lkKGkpKSAhPSBqKTsKPiAgCj4gLQkJaWYgKHZhKQo+IC0JCQlyZXR1cm4gdmE7 Cj4gLQl9IHdoaWxlICgoaSA9IChpICsgbnJfdm1hcF9ub2RlcyAtIDEpICUgbnJfdm1hcF9ub2Rl cykgIT0gaik7Cj4gKwkqbG9ja2VkX3ZuID0gTlVMTDsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4g Kwo+ICtzdHJ1Y3Qgdm1hcF9hcmVhICpmaW5kX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIp Cj4gK3sKPiArCXN0cnVjdCB2bWFwX25vZGUgKnZuOwo+ICsJc3RydWN0IHZtYXBfYXJlYSAqdmE7 Cj4gKwo+ICsJdmEgPSBmaW5kX3ZtYXBfYXJlYV9sb2NrKGFkZHIsICZ2biwgVk1BUF9MT0NLKTsK PiArCWlmICh2YSkgewo+ICsJCXNwaW5fdW5sb2NrKCZ2bi0+YnVzeS5sb2NrKTsKPiArCQlyZXR1 cm4gdmE7Cj4gKwl9Cj4gIAo+ICAJcmV0dXJuIE5VTEw7Cj4gIH0KPiAKPiAKPiBhbmQgd2UgdXNl IHRoZSBoZWxwZXIgaW4gdGhlIHZtYWxsb2NfZHVtcF9vYmooKT8KCkhpIFVsYWR6aXNsYXUsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKVGhhbmtzIGZvciB0aGUgc3VnZ2VzdGlvbi4gIEkgaGF2ZSBhZG9wdGVkIHRoZSBm aW5kX3ZtYXBfYXJlYV9sb2NrKCkgCmhlbHBlciBhcHByb2FjaCBpbiB2My4gIFRoZSBoZWxwZXIg dW5pZmllcyB0aGUgY3Jvc3Mtbm9kZSBpdGVyYXRpb24gIApsb2dpYyB3aXRoIGEgbW9kZSBwYXJh bWV0ZXIgZm9yIHNwaW5fbG9jayBhbmQgc3Bpbl90cnlsb2NrLCB0aGUgICAgICAKbGF0dGVyIHVz ZWQgYnkgdm1hbGxvY19kdW1wX29iaigpIGZvciBhdG9taWMgZHVtcCBjb250ZXh0cy4gICAgICAg ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIApmaW5kX3VubGlua192bWFwX2FyZWEoKSBpcyBhbHNvIHNpbXBsaWZp ZWQgdG8gdXNlIHRoZSBzYW1lIGhlbHBlciwgICAKcmVtb3ZpbmcgYSB0aGlyZCBjb3B5IG9mIHRo ZSBpdGVyYXRpb24gbG9vcC4gIFRoZSBoZWxwZXIgcmV0dXJucyB3aXRoCnRoZSBub2RlJ3MgYnVz eS5sb2NrIGhlbGQsIHNvIHRoZSBjYWxsZXIgY2FuIHVubGlua192YSgpIHVuZGVyIHRoZSAgIApz YW1lIGxvY2sgYmVmb3JlIHJlbGVhc2luZyBpdC4gICAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCldpbGwgc2VuZCB2 MyBzaG9ydGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAoKPiAKPiAtLQo+IFVsYWR6aXNsYXUgUmV6a2kKCi0tIApUaGFua3MsClllIExpdQoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXJpc2N2IG1h aWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5p bmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcmlzY3YK