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=-21.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 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 66C7CC4338F for ; Mon, 16 Aug 2021 06:42:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3F19561A55 for ; Mon, 16 Aug 2021 06:42:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233527AbhHPGma (ORCPT ); Mon, 16 Aug 2021 02:42:30 -0400 Received: from mail.kernel.org ([198.145.29.99]:46632 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230442AbhHPGmT (ORCPT ); Mon, 16 Aug 2021 02:42:19 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id C1C4361A51; Mon, 16 Aug 2021 06:41:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1629096108; bh=O8dpjKa3LoFhx1uZWjgWVWjFUc5corw5KPdK4GWHD80=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=gFQi9tedmh5BXSbzTqAybSYyXPQPQiC+RwW62EAbwkAFZJAozqqXviXot5x11Rmr2 F04A4gAqonO8y7aLbYYknMhgQSNmgUXZMakrU+1OEnF36bIkzoUCAM5nn7cc26Jyig Zccsd6+u3RAQqbFeIw9Q3JSXoqJd2SNf1XgkD6UvCk6KUcP5UCqDnOShBw2Ep5LCVe /CXRcMx+Jo20gM4kLPsa/nwZbwRY80h9SPFS0WrnQBowBTelvV9sW5eQHRSgu7JyHy 8XaUnCoMlIfod3zCqehpbZulwoTQIcuCPcDG7CfOS/G/cSFhI12QUkqNTXiwB0ZISr Ab25LR2V1n4RA== Subject: Re: [PATCH v6] f2fs: introduce /sys/fs/f2fs//fsck_stack node To: =?UTF-8?B?5p2O5oms6Z+s?= , jaegeuk@kernel.org Cc: linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org References: From: Chao Yu Message-ID: <2692c9c0-bb9f-0dd2-f0ca-6abb89e34c47@kernel.org> Date: Mon, 16 Aug 2021 14:41:46 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2021/8/16 12:02, 李扬韬 wrote: > HI Chao, >>> SBI_NEED_FSCK is an indicator that fsck.f2fs needs to be triggered, >>> this flag is set in too many places. For some scenes that are not very >>> reproducible, adding stack information will help locate the problem. >>> >>> Let's record all fsck stack history, I added F2FS_FSCK_STACK_TRACE >>> configuration options and sysfs nodes. After opening the configuration >>> options and enabling the node, it will start recording. The recorded >>> stack information will not be clear, and we can get information form >>> kernel log. >>> >>> Signed-off-by: Yangtao Li >>> --- >>> Documentation/ABI/testing/sysfs-fs-f2fs | 7 ++++ >>> fs/f2fs/Kconfig | 10 ++++++ >>> fs/f2fs/f2fs.h | 45 +++++++++++++++++++++++++ >>> fs/f2fs/sysfs.c | 27 +++++++++++++++ >>> 4 files changed, 89 insertions(+) >>> >>> diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs >>> index ef4b9218ae1e..047c398093cf 100644 >>> --- a/Documentation/ABI/testing/sysfs-fs-f2fs >>> +++ b/Documentation/ABI/testing/sysfs-fs-f2fs >>> @@ -493,3 +493,10 @@ Contact: "Chao Yu" >>> Description: When ATGC is on, it controls age threshold to bypass GCing young >>> candidates whose age is not beyond the threshold, by default it was >>> initialized as 604800 seconds (equals to 7 days). >>> + >>> +What: /sys/fs/f2fs//fsck_stack >>> +Date: August 2021 >>> +Contact: "Yangtao Li" >>> +Description: Controls to enable/disable fsck stack trace, you can get stack >>> + information from kernel log. Note that the recorded stack information >>> + will not be cleared. >> >> Again, please don't add this into sysfs. Oh, I missed to check the details... > > I added this node, part of the idea is to trigger the export of stack information. > There is no information transmitted through sysfs here, but the record of the stack is switched on and off. > If don't export this information through procfs and sysfs, is there a more appropriate way? Well, I doubt why we should export stack info via proc/sysfs node or sysfs switch. Those info will always be needed to troubleshoot issues no matter in user or eng version of Android, can we just print them directly into kernel message... what I concern is we may lost the bug scene due to no one can help to trigger dmesg printing via sysfs. Jaegeuk, thoughts? > >> >>> diff --git a/fs/f2fs/Kconfig b/fs/f2fs/Kconfig >>> index 7669de7b49ce..f451e567e4a8 100644 >>> --- a/fs/f2fs/Kconfig >>> +++ b/fs/f2fs/Kconfig >>> @@ -135,3 +135,13 @@ config F2FS_FS_LZORLE >>> default y >>> help >>> Support LZO-RLE compress algorithm, if unsure, say Y. >>> + >>> +config F2FS_FSCK_STACK_TRACE >> >> I don't think we need another config to wrap this functionality, may be we >> can use F2FS_CHECK_FS instead. > > OK. > >> >>> + bool "F2FS fsck stack information record" >>> + depends on F2FS_FS >>> + depends on STACKDEPOT >>> + default y >>> + help >>> + Support printing out fsck stack history. With this, you have to >>> + turn on "fsck_stack" sysfs node. Then you can get information >>> + from kernel log. >>> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h >>> index ee8eb33e2c25..b2d1d1a5a3fc 100644 >>> --- a/fs/f2fs/f2fs.h >>> +++ b/fs/f2fs/f2fs.h >>> @@ -24,6 +24,8 @@ >>> #include >>> #include >>> #include >>> +#include >>> +#include >>> >>> #include >>> #include >>> @@ -117,6 +119,8 @@ typedef u32 nid_t; >>> >>> #define COMPRESS_EXT_NUM 16 >>> >>> +#define FSCK_STACK_DEPTH 64 >> >> 16? > > OK. > >> >>> + >>> struct f2fs_mount_info { >>> unsigned int opt; >>> int write_io_size_bits; /* Write IO size bits */ >>> @@ -1748,6 +1752,11 @@ struct f2fs_sb_info { >>> unsigned int compress_watermark; /* cache page watermark */ >>> atomic_t compress_page_hit; /* cache hit count */ >>> #endif >>> +#ifdef CONFIG_F2FS_FSCK_STACK_TRACE >>> + depot_stack_handle_t *fsck_stack_history; >>> + unsigned int fsck_count; >>> + bool fsck_stack; >> >> IMO, all bug_on()s are corner cases, and catching those stacks won't cost >> much, so we can just use CONFIG_XXX to enable/disable this feature. > > F2FS_CHECK_FS ? > >> >>> +#endif >>> }; >>> >>> struct f2fs_private_dio { >>> @@ -1954,6 +1963,38 @@ static inline struct address_space *NODE_MAPPING(struct f2fs_sb_info *sbi) >>> return sbi->node_inode->i_mapping; >>> } >>> >>> +#ifdef CONFIG_F2FS_FSCK_STACK_TRACE >>> +static void fsck_stack_trace(struct f2fs_sb_info *sbi) >>> +{ >>> + unsigned long entries[FSCK_STACK_DEPTH]; >>> + depot_stack_handle_t stack, *new; >>> + unsigned int nr_entries; >>> + int i; >>> + >>> + if (!sbi->fsck_stack) >>> + return; >>> + >>> + nr_entries = stack_trace_save(entries, ARRAY_SIZE(entries), 0); >>> + nr_entries = filter_irq_stacks(entries, nr_entries); >>> + stack = stack_depot_save(entries, nr_entries, GFP_KERNEL); >>> + if (!stack) >>> + return; >>> + >>> + /* Try to find an existing entry for this backtrace */ >>> + for (i = 0; i < sbi->fsck_count; i++) >>> + if (sbi->fsck_stack_history[i] == stack) >>> + return; >>> + >>> + new = krealloc(sbi->fsck_stack_history, (sbi->fsck_count + 1) * >>> + sizeof(*sbi->fsck_stack_history), GFP_KERNEL); >>> + if (!new) >>> + return; >>> + >>> + sbi->fsck_stack_history = new; >>> + sbi->fsck_stack_history[sbi->fsck_count++] = stack; >> >> It will case memory leak after f2fs module exits. > > So let's enable this feature when f2fs is not a module and enable F2FS_CHECK_FS. I mean it needs to free .fsck_stack_history during umount(). Thanks, > >> >>> +} >>> +#endif >>> + >>> static inline bool is_sbi_flag_set(struct f2fs_sb_info *sbi, unsigned int type) >>> { >>> return test_bit(type, &sbi->s_flag); >>> @@ -1962,6 +2003,10 @@ static inline bool is_sbi_flag_set(struct f2fs_sb_info *sbi, unsigned int type) >>> static inline void set_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type) >>> { >>> set_bit(type, &sbi->s_flag); >>> +#ifdef CONFIG_F2FS_FSCK_STACK_TRACE >>> + if (unlikely(type == SBI_NEED_FSCK)) >>> + fsck_stack_trace(sbi); >>> +#endif >>> } >>> >>> static inline void clear_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type) >>> diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c >>> index 204de4c2c818..4e786bb797e7 100644 >>> --- a/fs/f2fs/sysfs.c >>> +++ b/fs/f2fs/sysfs.c >>> @@ -306,6 +306,26 @@ static ssize_t f2fs_sbi_show(struct f2fs_attr *a, >>> if (!strcmp(a->attr.name, "compr_new_inode")) >>> return sysfs_emit(buf, "%u\n", sbi->compr_new_inode); >>> #endif >>> +#ifdef CONFIG_F2FS_FSCK_STACK_TRACE >>> + if (!strcmp(a->attr.name, "fsck_stack")) { >>> + unsigned long *entries; >>> + unsigned int nr_entries; >>> + unsigned int i; >>> + int count; >>> + >>> + count = sysfs_emit(buf, "%u\n", sbi->fsck_stack); >>> + if (!sbi->fsck_stack) >>> + return count; >>> + >>> + for (i = 0; i < sbi->fsck_count; i++) { >>> + nr_entries = stack_depot_fetch(sbi->fsck_stack_history[i], &entries); >>> + if (!entries) >>> + return count; >>> + stack_trace_print(entries, nr_entries, 0); >>> + } >>> + return count; >>> + } >>> +#endif >>> >>> ui = (unsigned int *)(ptr + a->offset); >>> >>> @@ -740,6 +760,10 @@ F2FS_RW_ATTR(ATGC_INFO, atgc_management, atgc_candidate_count, max_candidate_cou >>> F2FS_RW_ATTR(ATGC_INFO, atgc_management, atgc_age_weight, age_weight); >>> F2FS_RW_ATTR(ATGC_INFO, atgc_management, atgc_age_threshold, age_threshold); >>> >>> +#ifdef CONFIG_F2FS_FSCK_STACK_TRACE >>> +F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, fsck_stack, fsck_stack); >>> +#endif >>> + >>> #define ATTR_LIST(name) (&f2fs_attr_##name.attr) >>> static struct attribute *f2fs_attrs[] = { >>> ATTR_LIST(gc_urgent_sleep_time), >>> @@ -812,6 +836,9 @@ static struct attribute *f2fs_attrs[] = { >>> ATTR_LIST(atgc_candidate_count), >>> ATTR_LIST(atgc_age_weight), >>> ATTR_LIST(atgc_age_threshold), >>> +#ifdef CONFIG_F2FS_FSCK_STACK_TRACE >>> + ATTR_LIST(fsck_stack), >>> +#endif >>> NULL, >>> }; >>> ATTRIBUTE_GROUPS(f2fs); >>> > > Thx, > Yangtao > 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=-19.0 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 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 2EAEEC4338F for ; Mon, 16 Aug 2021 06:42:09 +0000 (UTC) Received: from lists.sourceforge.net (lists.sourceforge.net [216.105.38.7]) (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 D41436140D; Mon, 16 Aug 2021 06:42:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org D41436140D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.sourceforge.net Received: from [127.0.0.1] (helo=sfs-ml-4.v29.lw.sourceforge.com) by sfs-ml-4.v29.lw.sourceforge.com with esmtp (Exim 4.90_1) (envelope-from ) id 1mFWK0-0007BB-8d; Mon, 16 Aug 2021 06:42:08 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-4.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mFWJz-0007B5-5s for linux-f2fs-devel@lists.sourceforge.net; Mon, 16 Aug 2021 06:42:07 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:Content-Type:In-Reply-To: MIME-Version:Date:Message-ID:From:References:Cc:To:Subject:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=Fq3zC6TxrJ7wnET3ctJ9AEVAzp2Vf4zNH2VUOyMj2T8=; b=IqsdHKIi3ZVEFDNnRWKrSSh2K1 MS31Wvaj5ZAkSMypW6RenBSuXf7U4rD6vgUVUP2UEtxaJLNmQFjZH/ng1a7sjfzkqO3+ackMFEFxv zEmXK19yBUtH/pxdXwe+NaptMNL2qETpUByNXJxl9WJNi5fvIYaw4moHYjwBRupraieA=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:MIME-Version:Date: Message-ID:From:References:Cc:To:Subject:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=Fq3zC6TxrJ7wnET3ctJ9AEVAzp2Vf4zNH2VUOyMj2T8=; b=W4PrjdD/D0ODMKZTI3GQrctmzf eo5jQJzK76XfNrQvU0nxcAg0jlWAfHjb5MTG9vO0Dt4Z68QBG9+ht9NVaaoEd+8DZYCKK6Db/b/2a h3tTOei9La+BvA5Vv2gALT+8G7FkBtT1o8ju77gxE5qIuNSlI364vV84XPXW9XsPUm90=; Received: from mail.kernel.org ([198.145.29.99]) by sfi-mx-1.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92.3) id 1mFWJv-007z21-QW for linux-f2fs-devel@lists.sourceforge.net; Mon, 16 Aug 2021 06:42:07 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id C1C4361A51; Mon, 16 Aug 2021 06:41:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1629096108; bh=O8dpjKa3LoFhx1uZWjgWVWjFUc5corw5KPdK4GWHD80=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=gFQi9tedmh5BXSbzTqAybSYyXPQPQiC+RwW62EAbwkAFZJAozqqXviXot5x11Rmr2 F04A4gAqonO8y7aLbYYknMhgQSNmgUXZMakrU+1OEnF36bIkzoUCAM5nn7cc26Jyig Zccsd6+u3RAQqbFeIw9Q3JSXoqJd2SNf1XgkD6UvCk6KUcP5UCqDnOShBw2Ep5LCVe /CXRcMx+Jo20gM4kLPsa/nwZbwRY80h9SPFS0WrnQBowBTelvV9sW5eQHRSgu7JyHy 8XaUnCoMlIfod3zCqehpbZulwoTQIcuCPcDG7CfOS/G/cSFhI12QUkqNTXiwB0ZISr Ab25LR2V1n4RA== To: =?UTF-8?B?5p2O5oms6Z+s?= , jaegeuk@kernel.org References: From: Chao Yu Message-ID: <2692c9c0-bb9f-0dd2-f0ca-6abb89e34c47@kernel.org> Date: Mon, 16 Aug 2021 14:41:46 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Headers-End: 1mFWJv-007z21-QW Subject: Re: [f2fs-dev] [PATCH v6] f2fs: introduce /sys/fs/f2fs//fsck_stack node X-BeenThere: linux-f2fs-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net T24gMjAyMS84LzE2IDEyOjAyLCDmnY7miazpn6wgd3JvdGU6Cj4gSEkgQ2hhbywKPj4+IFNCSV9O RUVEX0ZTQ0sgaXMgYW4gaW5kaWNhdG9yIHRoYXQgZnNjay5mMmZzIG5lZWRzIHRvIGJlIHRyaWdn ZXJlZCwKPj4+IHRoaXMgZmxhZyBpcyBzZXQgaW4gdG9vIG1hbnkgcGxhY2VzLiBGb3Igc29tZSBz Y2VuZXMgdGhhdCBhcmUgbm90IHZlcnkKPj4+IHJlcHJvZHVjaWJsZSwgYWRkaW5nIHN0YWNrIGlu Zm9ybWF0aW9uIHdpbGwgaGVscCBsb2NhdGUgdGhlIHByb2JsZW0uCj4+Pgo+Pj4gTGV0J3MgcmVj b3JkIGFsbCBmc2NrIHN0YWNrIGhpc3RvcnksIEkgYWRkZWQgRjJGU19GU0NLX1NUQUNLX1RSQUNF Cj4+PiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHN5c2ZzIG5vZGVzLiBBZnRlciBvcGVuaW5n IHRoZSBjb25maWd1cmF0aW9uCj4+PiBvcHRpb25zIGFuZCBlbmFibGluZyB0aGUgbm9kZSwgaXQg d2lsbCBzdGFydCByZWNvcmRpbmcuIFRoZSByZWNvcmRlZAo+Pj4gc3RhY2sgaW5mb3JtYXRpb24g d2lsbCBub3QgYmUgY2xlYXIsIGFuZCB3ZSBjYW4gZ2V0IGluZm9ybWF0aW9uIGZvcm0KPj4+IGtl cm5lbCBsb2cuCj4+Pgo+Pj4gU2lnbmVkLW9mZi1ieTogWWFuZ3RhbyBMaSA8ZnJhbmsubGlAdml2 by5jb20+Cj4+PiAtLS0KPj4+ICAgIERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZnMt ZjJmcyB8ICA3ICsrKysKPj4+ICAgIGZzL2YyZnMvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAg ICAgICB8IDEwICsrKysrKwo+Pj4gICAgZnMvZjJmcy9mMmZzLmggICAgICAgICAgICAgICAgICAg ICAgICAgIHwgNDUgKysrKysrKysrKysrKysrKysrKysrKysrKwo+Pj4gICAgZnMvZjJmcy9zeXNm cy5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjcgKysrKysrKysrKysrKysrCj4+PiAgICA0 IGZpbGVzIGNoYW5nZWQsIDg5IGluc2VydGlvbnMoKykKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvRG9j dW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1mcy1mMmZzIGIvRG9jdW1lbnRhdGlvbi9BQkkv dGVzdGluZy9zeXNmcy1mcy1mMmZzCj4+PiBpbmRleCBlZjRiOTIxOGFlMWUuLjA0N2MzOTgwOTNj ZiAxMDA2NDQKPj4+IC0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZnMtZjJm cwo+Pj4gKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1mcy1mMmZzCj4+PiBA QCAtNDkzLDMgKzQ5MywxMCBAQCBDb250YWN0OgkiQ2hhbyBZdSIgPHl1Y2hhbzBAaHVhd2VpLmNv bT4KPj4+ICAgIERlc2NyaXB0aW9uOglXaGVuIEFUR0MgaXMgb24sIGl0IGNvbnRyb2xzIGFnZSB0 aHJlc2hvbGQgdG8gYnlwYXNzIEdDaW5nIHlvdW5nCj4+PiAgICAJCWNhbmRpZGF0ZXMgd2hvc2Ug YWdlIGlzIG5vdCBiZXlvbmQgdGhlIHRocmVzaG9sZCwgYnkgZGVmYXVsdCBpdCB3YXMKPj4+ICAg IAkJaW5pdGlhbGl6ZWQgYXMgNjA0ODAwIHNlY29uZHMgKGVxdWFscyB0byA3IGRheXMpLgo+Pj4g Kwo+Pj4gK1doYXQ6CQkvc3lzL2ZzL2YyZnMvPGRpc2s+L2ZzY2tfc3RhY2sKPj4+ICtEYXRlOgkJ QXVndXN0IDIwMjEKPj4+ICtDb250YWN0OgkiWWFuZ3RhbyBMaSIgPGZyYW5rLmxpQHZpdm8uY29t Pgo+Pj4gK0Rlc2NyaXB0aW9uOglDb250cm9scyB0byBlbmFibGUvZGlzYWJsZSBmc2NrIHN0YWNr IHRyYWNlLCB5b3UgY2FuIGdldCBzdGFjawo+Pj4gKwkJaW5mb3JtYXRpb24gZnJvbSBrZXJuZWwg bG9nLiBOb3RlIHRoYXQgdGhlIHJlY29yZGVkIHN0YWNrIGluZm9ybWF0aW9uCj4+PiArCQl3aWxs IG5vdCBiZSBjbGVhcmVkLgo+Pgo+PiBBZ2FpbiwgcGxlYXNlIGRvbid0IGFkZCB0aGlzIGludG8g c3lzZnMuCgpPaCwgSSBtaXNzZWQgdG8gY2hlY2sgdGhlIGRldGFpbHMuLi4KCj4gCj4gSSBhZGRl ZCB0aGlzIG5vZGUsIHBhcnQgb2YgdGhlIGlkZWEgaXMgdG8gdHJpZ2dlciB0aGUgZXhwb3J0IG9m IHN0YWNrIGluZm9ybWF0aW9uLgo+IFRoZXJlIGlzIG5vIGluZm9ybWF0aW9uIHRyYW5zbWl0dGVk IHRocm91Z2ggc3lzZnMgaGVyZSwgYnV0IHRoZSByZWNvcmQgb2YgdGhlIHN0YWNrIGlzIHN3aXRj aGVkIG9uIGFuZCBvZmYuCj4gSWYgZG9uJ3QgZXhwb3J0IHRoaXMgaW5mb3JtYXRpb24gdGhyb3Vn aCBwcm9jZnMgYW5kIHN5c2ZzLCBpcyB0aGVyZSBhIG1vcmUgYXBwcm9wcmlhdGUgd2F5PwoKV2Vs bCwgSSBkb3VidCB3aHkgd2Ugc2hvdWxkIGV4cG9ydCBzdGFjayBpbmZvIHZpYSBwcm9jL3N5c2Zz IG5vZGUgb3IKc3lzZnMgc3dpdGNoLgoKVGhvc2UgaW5mbyB3aWxsIGFsd2F5cyBiZSBuZWVkZWQg dG8gdHJvdWJsZXNob290IGlzc3VlcyBubyBtYXR0ZXIgaW4KdXNlciBvciBlbmcgdmVyc2lvbiBv ZiBBbmRyb2lkLCBjYW4gd2UganVzdCBwcmludCB0aGVtIGRpcmVjdGx5IGludG8Ka2VybmVsIG1l c3NhZ2UuLi4gd2hhdCBJIGNvbmNlcm4gaXMgd2UgbWF5IGxvc3QgdGhlIGJ1ZyBzY2VuZSBkdWUg dG8Kbm8gb25lIGNhbiBoZWxwIHRvIHRyaWdnZXIgZG1lc2cgcHJpbnRpbmcgdmlhIHN5c2ZzLgoK SmFlZ2V1aywgdGhvdWdodHM/Cgo+IAo+Pgo+Pj4gZGlmZiAtLWdpdCBhL2ZzL2YyZnMvS2NvbmZp ZyBiL2ZzL2YyZnMvS2NvbmZpZwo+Pj4gaW5kZXggNzY2OWRlN2I0OWNlLi5mNDUxZTU2N2U0YTgg MTAwNjQ0Cj4+PiAtLS0gYS9mcy9mMmZzL0tjb25maWcKPj4+ICsrKyBiL2ZzL2YyZnMvS2NvbmZp Zwo+Pj4gQEAgLTEzNSwzICsxMzUsMTMgQEAgY29uZmlnIEYyRlNfRlNfTFpPUkxFCj4+PiAgICAJ ZGVmYXVsdCB5Cj4+PiAgICAJaGVscAo+Pj4gICAgCSAgU3VwcG9ydCBMWk8tUkxFIGNvbXByZXNz IGFsZ29yaXRobSwgaWYgdW5zdXJlLCBzYXkgWS4KPj4+ICsKPj4+ICtjb25maWcgRjJGU19GU0NL X1NUQUNLX1RSQUNFCj4+Cj4+IEkgZG9uJ3QgdGhpbmsgd2UgbmVlZCBhbm90aGVyIGNvbmZpZyB0 byB3cmFwIHRoaXMgZnVuY3Rpb25hbGl0eSwgbWF5IGJlIHdlCj4+IGNhbiB1c2UgRjJGU19DSEVD S19GUyBpbnN0ZWFkLgo+IAo+IE9LLgo+IAo+Pgo+Pj4gKwlib29sICJGMkZTIGZzY2sgc3RhY2sg aW5mb3JtYXRpb24gcmVjb3JkIgo+Pj4gKwlkZXBlbmRzIG9uIEYyRlNfRlMKPj4+ICsJZGVwZW5k cyBvbiBTVEFDS0RFUE9UCj4+PiArCWRlZmF1bHQgeQo+Pj4gKwloZWxwCj4+PiArCSBTdXBwb3J0 IHByaW50aW5nIG91dCBmc2NrIHN0YWNrIGhpc3RvcnkuIFdpdGggdGhpcywgeW91IGhhdmUgdG8K Pj4+ICsJIHR1cm4gb24gImZzY2tfc3RhY2siIHN5c2ZzIG5vZGUuIFRoZW4geW91IGNhbiBnZXQg aW5mb3JtYXRpb24KPj4+ICsJIGZyb20ga2VybmVsIGxvZy4KPj4+IGRpZmYgLS1naXQgYS9mcy9m MmZzL2YyZnMuaCBiL2ZzL2YyZnMvZjJmcy5oCj4+PiBpbmRleCBlZThlYjMzZTJjMjUuLmIyZDFk MWE1YTNmYyAxMDA2NDQKPj4+IC0tLSBhL2ZzL2YyZnMvZjJmcy5oCj4+PiArKysgYi9mcy9mMmZz L2YyZnMuaAo+Pj4gQEAgLTI0LDYgKzI0LDggQEAKPj4+ICAgICNpbmNsdWRlIDxsaW51eC9xdW90 YW9wcy5oPgo+Pj4gICAgI2luY2x1ZGUgPGxpbnV4L3BhcnRfc3RhdC5oPgo+Pj4gICAgI2luY2x1 ZGUgPGNyeXB0by9oYXNoLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L3N0YWNrZGVwb3QuaD4KPj4+ ICsjaW5jbHVkZSA8bGludXgvc3RhY2t0cmFjZS5oPgo+Pj4gICAgCj4+PiAgICAjaW5jbHVkZSA8 bGludXgvZnNjcnlwdC5oPgo+Pj4gICAgI2luY2x1ZGUgPGxpbnV4L2ZzdmVyaXR5Lmg+Cj4+PiBA QCAtMTE3LDYgKzExOSw4IEBAIHR5cGVkZWYgdTMyIG5pZF90Owo+Pj4gICAgCj4+PiAgICAjZGVm aW5lIENPTVBSRVNTX0VYVF9OVU0JCTE2Cj4+PiAgICAKPj4+ICsjZGVmaW5lIEZTQ0tfU1RBQ0tf REVQVEgJCTY0Cj4+Cj4+IDE2Pwo+IAo+IE9LLgo+IAo+Pgo+Pj4gKwo+Pj4gICAgc3RydWN0IGYy ZnNfbW91bnRfaW5mbyB7Cj4+PiAgICAJdW5zaWduZWQgaW50IG9wdDsKPj4+ICAgIAlpbnQgd3Jp dGVfaW9fc2l6ZV9iaXRzOwkJLyogV3JpdGUgSU8gc2l6ZSBiaXRzICovCj4+PiBAQCAtMTc0OCw2 ICsxNzUyLDExIEBAIHN0cnVjdCBmMmZzX3NiX2luZm8gewo+Pj4gICAgCXVuc2lnbmVkIGludCBj b21wcmVzc193YXRlcm1hcms7CS8qIGNhY2hlIHBhZ2Ugd2F0ZXJtYXJrICovCj4+PiAgICAJYXRv bWljX3QgY29tcHJlc3NfcGFnZV9oaXQ7CQkvKiBjYWNoZSBoaXQgY291bnQgKi8KPj4+ICAgICNl bmRpZgo+Pj4gKyNpZmRlZiBDT05GSUdfRjJGU19GU0NLX1NUQUNLX1RSQUNFCj4+PiArCWRlcG90 X3N0YWNrX2hhbmRsZV90ICpmc2NrX3N0YWNrX2hpc3Rvcnk7Cj4+PiArCXVuc2lnbmVkIGludCBm c2NrX2NvdW50Owo+Pj4gKwlib29sIGZzY2tfc3RhY2s7Cj4+Cj4+IElNTywgYWxsIGJ1Z19vbigp cyBhcmUgY29ybmVyIGNhc2VzLCBhbmQgY2F0Y2hpbmcgdGhvc2Ugc3RhY2tzIHdvbid0IGNvc3QK Pj4gbXVjaCwgc28gd2UgY2FuIGp1c3QgdXNlIENPTkZJR19YWFggdG8gZW5hYmxlL2Rpc2FibGUg dGhpcyBmZWF0dXJlLgo+IAo+IEYyRlNfQ0hFQ0tfRlMg77yfCj4gCj4+Cj4+PiArI2VuZGlmCj4+ PiAgICB9Owo+Pj4gICAgCj4+PiAgICBzdHJ1Y3QgZjJmc19wcml2YXRlX2RpbyB7Cj4+PiBAQCAt MTk1NCw2ICsxOTYzLDM4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKk5P REVfTUFQUElORyhzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkpCj4+PiAgICAJcmV0dXJuIHNiaS0+ bm9kZV9pbm9kZS0+aV9tYXBwaW5nOwo+Pj4gICAgfQo+Pj4gICAgCj4+PiArI2lmZGVmIENPTkZJ R19GMkZTX0ZTQ0tfU1RBQ0tfVFJBQ0UKPj4+ICtzdGF0aWMgdm9pZCBmc2NrX3N0YWNrX3RyYWNl KHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSkKPj4+ICt7Cj4+PiArCXVuc2lnbmVkIGxvbmcgZW50 cmllc1tGU0NLX1NUQUNLX0RFUFRIXTsKPj4+ICsJZGVwb3Rfc3RhY2tfaGFuZGxlX3Qgc3RhY2ss ICpuZXc7Cj4+PiArCXVuc2lnbmVkIGludCBucl9lbnRyaWVzOwo+Pj4gKwlpbnQgaTsKPj4+ICsK Pj4+ICsJaWYgKCFzYmktPmZzY2tfc3RhY2spCj4+PiArCQlyZXR1cm47Cj4+PiArCj4+PiArCW5y X2VudHJpZXMgPSBzdGFja190cmFjZV9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcyks IDApOwo+Pj4gKwlucl9lbnRyaWVzID0gZmlsdGVyX2lycV9zdGFja3MoZW50cmllcywgbnJfZW50 cmllcyk7Cj4+PiArCXN0YWNrID0gc3RhY2tfZGVwb3Rfc2F2ZShlbnRyaWVzLCBucl9lbnRyaWVz LCBHRlBfS0VSTkVMKTsKPj4+ICsJaWYgKCFzdGFjaykKPj4+ICsJCXJldHVybjsKPj4+ICsKPj4+ ICsJLyogVHJ5IHRvIGZpbmQgYW4gZXhpc3RpbmcgZW50cnkgZm9yIHRoaXMgYmFja3RyYWNlICov Cj4+PiArCWZvciAoaSA9IDA7IGkgPCBzYmktPmZzY2tfY291bnQ7IGkrKykKPj4+ICsJCWlmIChz YmktPmZzY2tfc3RhY2tfaGlzdG9yeVtpXSA9PSBzdGFjaykKPj4+ICsJCQlyZXR1cm47Cj4+PiAr Cj4+PiArCW5ldyA9IGtyZWFsbG9jKHNiaS0+ZnNja19zdGFja19oaXN0b3J5LCAoc2JpLT5mc2Nr X2NvdW50ICsgMSkgKgo+Pj4gKwkJICAgICAgIHNpemVvZigqc2JpLT5mc2NrX3N0YWNrX2hpc3Rv cnkpLCBHRlBfS0VSTkVMKTsKPj4+ICsJaWYgKCFuZXcpCj4+PiArCQlyZXR1cm47Cj4+PiArCj4+ PiArCXNiaS0+ZnNja19zdGFja19oaXN0b3J5ID0gbmV3Owo+Pj4gKwlzYmktPmZzY2tfc3RhY2tf aGlzdG9yeVtzYmktPmZzY2tfY291bnQrK10gPSBzdGFjazsKPj4KPj4gSXQgd2lsbCBjYXNlIG1l bW9yeSBsZWFrIGFmdGVyIGYyZnMgbW9kdWxlIGV4aXRzLgo+IAo+IFNvIGxldCdzIGVuYWJsZSB0 aGlzIGZlYXR1cmUgd2hlbiBmMmZzIGlzIG5vdCBhIG1vZHVsZSBhbmQgZW5hYmxlIEYyRlNfQ0hF Q0tfRlMuCgpJIG1lYW4gaXQgbmVlZHMgdG8gZnJlZSAuZnNja19zdGFja19oaXN0b3J5IGR1cmlu ZyB1bW91bnQoKS4KClRoYW5rcywKCj4gCj4+Cj4+PiArfQo+Pj4gKyNlbmRpZgo+Pj4gKwo+Pj4g ICAgc3RhdGljIGlubGluZSBib29sIGlzX3NiaV9mbGFnX3NldChzdHJ1Y3QgZjJmc19zYl9pbmZv ICpzYmksIHVuc2lnbmVkIGludCB0eXBlKQo+Pj4gICAgewo+Pj4gICAgCXJldHVybiB0ZXN0X2Jp dCh0eXBlLCAmc2JpLT5zX2ZsYWcpOwo+Pj4gQEAgLTE5NjIsNiArMjAwMywxMCBAQCBzdGF0aWMg aW5saW5lIGJvb2wgaXNfc2JpX2ZsYWdfc2V0KHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgdW5z aWduZWQgaW50IHR5cGUpCj4+PiAgICBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3NiaV9mbGFnKHN0 cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgdW5zaWduZWQgaW50IHR5cGUpCj4+PiAgICB7Cj4+PiAg ICAJc2V0X2JpdCh0eXBlLCAmc2JpLT5zX2ZsYWcpOwo+Pj4gKyNpZmRlZiBDT05GSUdfRjJGU19G U0NLX1NUQUNLX1RSQUNFCj4+PiArCWlmICh1bmxpa2VseSh0eXBlID09IFNCSV9ORUVEX0ZTQ0sp KQo+Pj4gKwkJZnNja19zdGFja190cmFjZShzYmkpOwo+Pj4gKyNlbmRpZgo+Pj4gICAgfQo+Pj4g ICAgCj4+PiAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc2JpX2ZsYWcoc3RydWN0IGYyZnNf c2JfaW5mbyAqc2JpLCB1bnNpZ25lZCBpbnQgdHlwZSkKPj4+IGRpZmYgLS1naXQgYS9mcy9mMmZz L3N5c2ZzLmMgYi9mcy9mMmZzL3N5c2ZzLmMKPj4+IGluZGV4IDIwNGRlNGMyYzgxOC4uNGU3ODZi Yjc5N2U3IDEwMDY0NAo+Pj4gLS0tIGEvZnMvZjJmcy9zeXNmcy5jCj4+PiArKysgYi9mcy9mMmZz L3N5c2ZzLmMKPj4+IEBAIC0zMDYsNiArMzA2LDI2IEBAIHN0YXRpYyBzc2l6ZV90IGYyZnNfc2Jp X3Nob3coc3RydWN0IGYyZnNfYXR0ciAqYSwKPj4+ICAgIAlpZiAoIXN0cmNtcChhLT5hdHRyLm5h bWUsICJjb21wcl9uZXdfaW5vZGUiKSkKPj4+ICAgIAkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAi JXVcbiIsIHNiaS0+Y29tcHJfbmV3X2lub2RlKTsKPj4+ICAgICNlbmRpZgo+Pj4gKyNpZmRlZiBD T05GSUdfRjJGU19GU0NLX1NUQUNLX1RSQUNFCj4+PiArCWlmICghc3RyY21wKGEtPmF0dHIubmFt ZSwgImZzY2tfc3RhY2siKSkgewo+Pj4gKwkJdW5zaWduZWQgbG9uZyAqZW50cmllczsKPj4+ICsJ CXVuc2lnbmVkIGludCBucl9lbnRyaWVzOwo+Pj4gKwkJdW5zaWduZWQgaW50IGk7Cj4+PiArCQlp bnQgY291bnQ7Cj4+PiArCj4+PiArCQljb3VudCA9IHN5c2ZzX2VtaXQoYnVmLCAiJXVcbiIsIHNi aS0+ZnNja19zdGFjayk7Cj4+PiArCQlpZiAoIXNiaS0+ZnNja19zdGFjaykKPj4+ICsJCQlyZXR1 cm4gY291bnQ7Cj4+PiArCj4+PiArCQlmb3IgKGkgPSAwOyBpIDwgc2JpLT5mc2NrX2NvdW50OyBp KyspIHsKPj4+ICsJCQlucl9lbnRyaWVzID0gc3RhY2tfZGVwb3RfZmV0Y2goc2JpLT5mc2NrX3N0 YWNrX2hpc3RvcnlbaV0sICZlbnRyaWVzKTsKPj4+ICsJCQlpZiAoIWVudHJpZXMpCj4+PiArCQkJ CXJldHVybiBjb3VudDsKPj4+ICsJCQlzdGFja190cmFjZV9wcmludChlbnRyaWVzLCBucl9lbnRy aWVzLCAwKTsKPj4+ICsJCX0KPj4+ICsJCXJldHVybiBjb3VudDsKPj4+ICsJfQo+Pj4gKyNlbmRp Zgo+Pj4gICAgCj4+PiAgICAJdWkgPSAodW5zaWduZWQgaW50ICopKHB0ciArIGEtPm9mZnNldCk7 Cj4+PiAgICAKPj4+IEBAIC03NDAsNiArNzYwLDEwIEBAIEYyRlNfUldfQVRUUihBVEdDX0lORk8s IGF0Z2NfbWFuYWdlbWVudCwgYXRnY19jYW5kaWRhdGVfY291bnQsIG1heF9jYW5kaWRhdGVfY291 Cj4+PiAgICBGMkZTX1JXX0FUVFIoQVRHQ19JTkZPLCBhdGdjX21hbmFnZW1lbnQsIGF0Z2NfYWdl X3dlaWdodCwgYWdlX3dlaWdodCk7Cj4+PiAgICBGMkZTX1JXX0FUVFIoQVRHQ19JTkZPLCBhdGdj X21hbmFnZW1lbnQsIGF0Z2NfYWdlX3RocmVzaG9sZCwgYWdlX3RocmVzaG9sZCk7Cj4+PiAgICAK Pj4+ICsjaWZkZWYgQ09ORklHX0YyRlNfRlNDS19TVEFDS19UUkFDRQo+Pj4gK0YyRlNfUldfQVRU UihGMkZTX1NCSSwgZjJmc19zYl9pbmZvLCBmc2NrX3N0YWNrLCBmc2NrX3N0YWNrKTsKPj4+ICsj ZW5kaWYKPj4+ICsKPj4+ICAgICNkZWZpbmUgQVRUUl9MSVNUKG5hbWUpICgmZjJmc19hdHRyXyMj bmFtZS5hdHRyKQo+Pj4gICAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmYyZnNfYXR0cnNbXSA9 IHsKPj4+ICAgIAlBVFRSX0xJU1QoZ2NfdXJnZW50X3NsZWVwX3RpbWUpLAo+Pj4gQEAgLTgxMiw2 ICs4MzYsOSBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZjJmc19hdHRyc1tdID0gewo+Pj4g ICAgCUFUVFJfTElTVChhdGdjX2NhbmRpZGF0ZV9jb3VudCksCj4+PiAgICAJQVRUUl9MSVNUKGF0 Z2NfYWdlX3dlaWdodCksCj4+PiAgICAJQVRUUl9MSVNUKGF0Z2NfYWdlX3RocmVzaG9sZCksCj4+ PiArI2lmZGVmIENPTkZJR19GMkZTX0ZTQ0tfU1RBQ0tfVFJBQ0UKPj4+ICsJQVRUUl9MSVNUKGZz Y2tfc3RhY2spLAo+Pj4gKyNlbmRpZgo+Pj4gICAgCU5VTEwsCj4+PiAgICB9Owo+Pj4gICAgQVRU UklCVVRFX0dST1VQUyhmMmZzKTsKPj4+Cj4gCj4gVGh4LAo+IFlhbmd0YW8KPiAKCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eC1mMmZzLWRldmVs IG1haWxpbmcgbGlzdApMaW51eC1mMmZzLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldApodHRw czovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9saW51eC1mMmZzLWRldmVs Cg==