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]) by smtp.lore.kernel.org (Postfix) with ESMTP id D52F7C3601E for ; Thu, 10 Apr 2025 05:35:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1EF602800BD; Thu, 10 Apr 2025 01:35:36 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1788D2800BA; Thu, 10 Apr 2025 01:35:36 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F34582800BD; Thu, 10 Apr 2025 01:35:35 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id CB7082800BA for ; Thu, 10 Apr 2025 01:35:35 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 77854120114 for ; Thu, 10 Apr 2025 05:35:35 +0000 (UTC) X-FDA: 83317021830.02.AC14513 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf21.hostedemail.com (Postfix) with ESMTP id 2CF111C0004 for ; Thu, 10 Apr 2025 05:35:32 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=cBr1KDKl; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf21.hostedemail.com: domain of gshan@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=gshan@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744263333; a=rsa-sha256; cv=none; b=3UIEj2u3DlkRthV4ut7UOvq+zr/kZMmC5AtLbjpBjTyAdj3lqARJ8fzfFgmefgilKzRXFF OJp168brzXN5mqMF3SP+PqD5yvFNpxWKF62NfyAtefGg+h9VTkpBV7lmqlui8FlUJkmhC+ iDPtSlPeS+/3ogSRgd83vha6F1PiJ4s= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=cBr1KDKl; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf21.hostedemail.com: domain of gshan@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=gshan@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744263333; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Mls5+lxMML33VH93zvfH0NxWZJ/6vYybJfYwUA/DatM=; b=ZqyEe0VP0XIhALX8zBl+xM1u48SLDh0Jn+M/9QeupEJemsxmqHEK0lmYG77DR9LUwNwTwz zqvaeKpfhr3n+NB68ThUqmMdtEuS81Pj8kRcNn5jPQDVdDlP7nCALHwvOqE4n+9TftSbQc 4CDvwbJxdeIoy5J/DaSd0omYfF4wHKs= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744263332; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=Mls5+lxMML33VH93zvfH0NxWZJ/6vYybJfYwUA/DatM=; b=cBr1KDKlnfGV43glLUa2EQbPBY0R73lwQfXTa+EiADIwA+3SEKObmffzv3b+Q1FeFtceG2 k0e9ZXItXyXBY04QqSNVU6WpvmLqMzbiUWMnPyxC0s0IiDMkRuXzeX+ALjoAs6KGPLvloB 1rvLn0omagtVFMpo0W7pUyfVq9+cFA4= Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-144-g1qXG2v9PV-qUPGGQyXT6Q-1; Thu, 10 Apr 2025 01:35:31 -0400 X-MC-Unique: g1qXG2v9PV-qUPGGQyXT6Q-1 X-Mimecast-MFC-AGG-ID: g1qXG2v9PV-qUPGGQyXT6Q_1744263330 Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-af8d8e0689eso557994a12.2 for ; Wed, 09 Apr 2025 22:35:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744263325; x=1744868125; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=1xMzIJORSOug+zzoBhLyGnQgmlgGuUBB6BukVUxfJXc=; b=SFtkAjSSK+1n0IInoaxJGKIO2nyBgGPQfvUraWP9DyvK2htZXKEJYC2dWANFpVBokn 2mwm9fkB7Q+7qmczbkyGh7vhVlCYEgVNg/5yt2OtjMzmAAmhRE6Pi2qTh+8R2/M6NGuL 54ZiCIFSZ5S4GWcCn3Z8Scxyox9xtyG5tNBCLBYzKZ7GCFjt7HJJRqsoskMACY6iq84j NMbi6mMiLaGRl5+BxfKmDB1HVlF91A5BOfh1lAwL9ibR2NBelyoBXkEk+ESx+07AI93L cUB7xgbaVxmUGY/DzcbejTpsSL0Cz+Q0UCsdmi23h3rLr+Tr519QZOQFZBVG2OtoiFQC 0Csw== X-Gm-Message-State: AOJu0YwaLKEIfDDGvjFDxNhzFLSFNJiew+fQi6z8nbEB4O9U1zEQz134 r9xxfgMp2KHJy8gWEPavUrrC/YSwgjp/QIf85vWIJhGnxIgmbFbnwUUUdOVb41OvJ4qtGF5bplm BLvxPReGV+eoQRaqv3ojhQIPCfejA1pR+Ii6HU6kwih+zrfcJ X-Gm-Gg: ASbGncuv7LNza/eAhQNsg2ZBCFBqFKkMi+4xlWd5VQ3V9Mc6xHbGpyHOXRHNFn1ZEQW Fh1uS+KR0P0K20xbvT1l8sNGBawy9g9JzrBRhVEstzz7R64H2dcY1ZQ3q+Xm2s1RGMW7ptlAXps 66P8+nMxkGEFgdGWbHEpvRuhVvlO7cgGO95bOEW11ufYIZ9n3mOSJdSlKvd3mxbM6ID8fvqtdH5 g0aYFPak358aXjZ7No9L8n894IeObwZ/DINbUl/ixwarmXhd0K8OkimcJ97sYg+fDLBDXuiZStJ Qh2QSjm6NphU X-Received: by 2002:a05:6a20:9f08:b0:1f5:837b:186a with SMTP id adf61e73a8af0-2016cc9e2bbmr1485525637.6.1744263325247; Wed, 09 Apr 2025 22:35:25 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGbAfvqf9KTAXm8ZXaS+61WWvXVe2iFIQLdakw8AHvej8k792DdxPwkInMdteilS3JUzRwsTQ== X-Received: by 2002:a05:6a20:9f08:b0:1f5:837b:186a with SMTP id adf61e73a8af0-2016cc9e2bbmr1485494637.6.1744263324897; Wed, 09 Apr 2025 22:35:24 -0700 (PDT) Received: from [192.168.68.55] ([180.233.125.65]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b02a2d3aa63sm1849549a12.50.2025.04.09.22.35.20 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 09 Apr 2025 22:35:24 -0700 (PDT) Message-ID: Date: Thu, 10 Apr 2025 15:35:19 +1000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [REPORT] Softlockups on PowerNV with upstream To: Oscar Salvador , Aditya Gupta Cc: linux-mm@kvack.org, Andrew Morton , Danilo Krummrich , David Hildenbrand , Greg Kroah-Hartman , Mahesh J Salgaonkar , "Rafael J. Wysocki" , Sourabh Jain , linux-kernel@vger.kernel.org References: <20250409180344.477916-1-adityag@linux.ibm.com> From: Gavin Shan In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 9FrEAGdxgJkIZQBxtelAGvtcoP_fDuoCniRLGgb8fRs_1744263330 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------yA93nCaLSOuFbq850TxYzJ7D" Content-Language: en-US X-Rspamd-Queue-Id: 2CF111C0004 X-Stat-Signature: 3kmqffk4c6qzmdy76xftekosogttb7hb X-Rspam-User: X-Rspamd-Server: rspam06 X-HE-Tag: 1744263332-570077 X-HE-Meta: U2FsdGVkX1/5c/DFCf22AHKmnKEJ7zdNZ8yen6KAmhFrCUaFUFuXOwGPasGH2NVBNqqD4ePOlhih1Gpq8fUD+QC4FXk4gMjaY0t+VB7GOq3W93nx3HA4fDIHgFdJ45lewF2od5Qx9wF7HMh0Xg8TxshueCRqOJSPzoDO9MxClqsy+P0XAIi6ecDto1Ny8dtTS7X10t9WaOVMxXDS3AlLR9goXdPZnOvtGqzKJwTELaT6wwjArWTf3kwOs0laqS15wH/v4vB7PczPcA3KB42BmO9E+LymPDHDGG0CexWCicMwTW2V1XiQXHE1Rbmx/KUob3xcd+Y2TfBCLNBtf/iSxJ8ZAGiLSSRLCX8e3bLKCgtkRgX6y7mqK6DxgtOoHjY+M+ivHUTf2BUTX2jSUAGUOOE5Mh3c+YFcTWrXKpEn9kmSZskYHwNz73foSzFNauhECqFdyGxE6H1iHP+cu80F01fsc55aTo1OSOpH/s+FzIt7JZnuTZvjbj/ECN6vM84Uy3D+KKjH0ee879LWp0+Kb0lGmWkGOSTNhNnFXvDUUv3bOxSVaBrTOb70x/cOV5VZmRt5OtrWIT76rDoeTK0q3RKLVXQUD9x4aVuWUJWv9Ub7RUbSp5elxDbirvbNTf5Do7cvNAlkT4e9UHiUkBh9uUGXrgutiKS5iIKD+UzfJu61R47EdTZ0YvQ446Z4ULDu1/T6Awd+zErtzPuVUqNUXrNgSjKNkdFIXPP0pvJ/DAkR3VIaD4c3+7A7MYZMzsgkzOxE2VLsahUDlVA4ykTvcxl1zeKEGH+im45zvE8k5tceqlxn+jFLz985JzTwtv1V2beRhQBN9W3ANQkjtv5B2sBhup/5QWcy/BAYYFciAlCfE3AhPEstV+VLSMk4jXPjYKB37CNsHvayAAvZxT+kFSUT9ostl6R2FhZJpa6rro1gdOuCkgIVXYS+qlXOKMWvTD+q9Xx9ghqxDgYpzWu +chaaVcj ifjw09EbOd+ZinzTguGFmR0iiNhJBHmgB9kURdl9SEvW2/QsXYZlt/vpwg2JoODapTxWcJqRX7BusJCXaVwiDF6QP2Se7HYKa4p6fqxj4XfCV9lXgJ6vjRpGFewCpCzB6+TjYVzvC1X4pFbPev5Cc0VwKynmxwsHjxxssBxZZpjHGewVl+V6o2V4pK9GU+2CFOmxfESXFgKmP+kXMgfEHfsJMe8JeZTRgVBjCtTBipA3aHn8mSm1pTeYd+EHwwErQc/o4JQ+/Efs2Dz0QvHnUAxspDRJtB9GC1NmS/SsWXOCWWi06L5yI1KK7inud+7ZRy578r4WFLk8BBl6fySoJ0r5UVwvao9vPaEwpriRBgF2COeOB8BmE6k9DhyYbUSOti9NM91pOeRhUwtp+qavAACaG5Fuj3QP2+Wa7YkK8EhnMfYtu+DEeMIpygtwfVN0emjSkcaoNM1IQMlLDHUxBIIBxg5Xth1qXJEUfdBKG8fmd7RIn1TQND3Et4VVMGwI4Di0Ydq5CDdSs1a9wZksgBXKf8GaSUM+bd5tTC+TbJaaByYeCY7TBvHp/3b3s7buC/YuUiVFqpy+oQGHinVRptpot3YAoc7RRziRs3Q4HirdjTmSpm6lutf+6r8n0GpkkshhSWnb+LZecQpMgNEYL1SkB/cecxqt5tCRYv+qrCZilZ4AphcMU/PxuVpOkDOJ1Ro9o X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: This is a multi-part message in MIME format. --------------yA93nCaLSOuFbq850TxYzJ7D Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 4/10/25 3:25 PM, Oscar Salvador wrote: > On Wed, Apr 09, 2025 at 11:33:44PM +0530, Aditya Gupta wrote: >> Hi, >> >> While booting current upstream kernel, I consistently get "softlockups", on IBM PowerNV system. >> >> I have tested it only on PowerNV systems. But some architectures/platforms also >> might have it. PSeries systems don't have this issue though. >> >> Bisect points to the following commit: >> >> commit 61659efdb35ce6c6ac7639342098f3c4548b794b >> Author: Gavin Shan >> Date: Wed Mar 12 09:30:43 2025 +1000 >> >> drivers/base/memory: improve add_boot_memory_block() >> > ... >> Console log >> ----------- >> >> [ 2.783371] smp: Brought up 4 nodes, 256 CPUs >> [ 2.783475] numa: Node 0 CPUs: 0-63 >> [ 2.783537] numa: Node 2 CPUs: 64-127 >> [ 2.783591] numa: Node 4 CPUs: 128-191 >> [ 2.783653] numa: Node 6 CPUs: 192-255 >> [ 2.804945] Memory: 735777792K/738197504K available (17536K kernel code, 5760K rwdata, 15232K rodata, 6528K init, 2517K bss, 1369664K reserved, 0K cma-reserved) > > If I am not mistaken this is ~700GB, and PowerNV uses 16MB as section size, > and sections_per_block == 1 (I think). > > The code before the mentioned commit, was something like: > > for (nr = base_section_nr; nr < base_section_nr + sections_per_block; nr++) > if (present_section_nr(nr)) > section_count++; > > if (section_count == 0) > return 0; > return add_memory_block() > > So, in case of PowerNV , we will just check one section at a time and > either return or call add_memory_block depending whether it is present. > > Now, with the current code that is something different. > We now have > > memory_dev_init: > for(nr = 0, nr <= __highest_present_section_nr; nr += 1) > ret = add_boot_memory_block > > add_boot_memory_block: > for_each_present_section_nr(base_section_nr, nr) { > if (nr >= (base_section_nr + sections_per_block)) > break; > > return add_memory_block(); > } > return 0; > > The thing is that next_present_section_nr() (which is called in > for_each_present_section_nr()) will loop until we find a present > section. > And then we will check whether the found section is beyond > base_section_nr + sections_per_block (where sections_per_block = 1). > If so, we skip add_memory_block. > > Now, I think that the issue comes from for_each_present_section_nr > having to loop a lot until we find a present section. > And then the loop in memory_dev_init increments only by 1, which means > that the next iteration we might have to loop a lot again to find the > another present section. And so on and so forth. > > Maybe we can fix this by making memory_dev_init() remember in which > section add_boot_memory_block returns. > Something like the following (only compile-tested) > Thanks, Oscar. You're correct that the overhead is introduced by for_each_present_section_nr(). I already had the fix, working on IBM's Power9 machine, where the issue can be reproduced. Please see the attached patch. I'm having most tests on ARM64 machine for the fix. Thanks, Gavin > diff --git a/drivers/base/memory.c b/drivers/base/memory.c > index 8f3a41d9bfaa..d97635cbfd1d 100644 > --- a/drivers/base/memory.c > +++ b/drivers/base/memory.c > @@ -816,18 +816,25 @@ static int add_memory_block(unsigned long block_id, unsigned long state, > return 0; > } > > -static int __init add_boot_memory_block(unsigned long base_section_nr) > +static int __init add_boot_memory_block(unsigned long *base_section_nr) > { > + int ret; > unsigned long nr; > > - for_each_present_section_nr(base_section_nr, nr) { > - if (nr >= (base_section_nr + sections_per_block)) > + for_each_present_section_nr(*base_section_nr, nr) { > + if (nr >= (*base_section_nr + sections_per_block)) > break; > > - return add_memory_block(memory_block_id(base_section_nr), > - MEM_ONLINE, NULL, NULL); > + ret = add_memory_block(memory_block_id(*base_section_nr), > + MEM_ONLINE, NULL, NULL); > + *base_section = nr; > + return ret; > } > > + if (nr == -1) > + *base_section = __highest_present_section_nr + 1; > + else > + *base_section = nr; > return 0; > } > > @@ -973,9 +980,9 @@ void __init memory_dev_init(void) > * Create entries for memory sections that were found > * during boot and have been initialized > */ > - for (nr = 0; nr <= __highest_present_section_nr; > - nr += sections_per_block) { > - ret = add_boot_memory_block(nr); > + nr = first_present_section_nr(); > + for (; nr <= __highest_present_section_nr; nr += sections_per_block) { > + ret = add_boot_memory_block(&nr); > if (ret) > panic("%s() failed to add memory block: %d\n", __func__, > ret); > > > @Aditya: can you please give it a try? > > > --------------yA93nCaLSOuFbq850TxYzJ7D Content-Type: text/x-patch; charset=UTF-8; name="0001-drivers-base-memory-Avoid-overhead-for_each_present_.patch" Content-Disposition: attachment; filename*0="0001-drivers-base-memory-Avoid-overhead-for_each_present_.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBkNGM0M2Q1ZjZiOTYyMTQ0YzRmNDdkNDZhNjYyODRkZjkyZGEyODVlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHYXZpbiBTaGFuIDxnc2hhbkByZWRoYXQuY29tPgpEYXRlOiBU aHUsIDEwIEFwciAyMDI1IDE0OjQzOjQ2ICsxMDAwClN1YmplY3Q6IFtQQVRDSF0gZHJpdmVycy9i YXNlL21lbW9yeTogQXZvaWQgb3ZlcmhlYWQKIGZvcl9lYWNoX3ByZXNlbnRfc2VjdGlvbl9ucigp Ck1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYt OApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0Cgpmb3JfZWFjaF9wcmVzZW50X3NlY3Rp b25fbnIoKSB3YXMgaW50cm9kdWNlZCB0byBhZGRfYm9vdF9tZW1vcnlfYmxvY2soKQpieSBjb21t aXQgNjE2NTllZmRiMzVjICgiZHJpdmVycy9iYXNlL21lbW9yeTogaW1wcm92ZSBhZGRfYm9vdF9t ZW1vcnlfYmxvY2soKSIpLgpJdCBjYXVzZXMgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQgd2hlbiB0aGUg cHJlc2VudCBzZWN0aW9ucyBhcmUgcmVhbGx5CnNwYXJzZS4gbmV4dF9wcmVzZW50X3NlY3Rpb25f bnIoKSBjYWxsZWQgYnkgdGhlIG1hY3JvIGZpbmRzIHRoZSBuZXh0CnByZXNlbnQgc2VjdGlvbiwg d2hpY2ggaXMgZmFyIGF3YXkgZnJvbSB0aGUgc3Bhbm5pbmcgc2VjdGlvbnMgaW4gdGhlCnNwZWNp ZmllZCBibG9jay4gVG9vIG11Y2ggdGltZSBjb25zdW1lZCBieSBuZXh0X3ByZXNlbnRfc2VjdGlv bl9ucigpCmluIHRoaXMgY2FzZSwgd2hpY2ggY2FuIGxlYWQgdG8gc29mdGxvY2t1cCBhcyBvYnNl cnZlZCBieSBBZGl0eWEgR3VwdGEKb24gSUJNIFBvd2VyMTAgbWFjaGluZS4KCiAgd2F0Y2hkb2c6 IEJVRzogc29mdCBsb2NrdXAgLSBDUFUjMjQ4IHN0dWNrIGZvciAyMnMhIFtzd2FwcGVyLzI0ODox XQogIE1vZHVsZXMgbGlua2VkIGluOgogIENQVTogMjQ4IFVJRDogMCBQSUQ6IDEgQ29tbTogc3dh cHBlci8yNDggTm90IHRhaW50ZWQgNi4xNS4wLXJjMS1uZXh0LTIwMjUwNDA4ICMxIFZPTFVOVEFS WQogIEhhcmR3YXJlIG5hbWU6IDkxMDUtMjJBIFBPV0VSMTAgKHJhdykgMHg4MDAyMDAgb3BhbDp2 Ny4xLTEwNy1nZmRhNzVkMTIxOTQyIFBvd2VyTlYKICBOSVA6ICBjMDAwMDAwMDAyMDkyMThjIExS OiBjMDAwMDAwMDAyMDkyMjA0IENUUjogMDAwMDAwMDAwMDAwMDAwMAogIFJFR1M6IGMwMDA0MDAw MDQxOGZhMzAgVFJBUDogMDkwMCAgIE5vdCB0YWludGVkICAoNi4xNS4wLXJjMS1uZXh0LTIwMjUw NDA4KQogIE1TUjogIDkwMDAwMDAwMDIwMDkwMzMgPFNGLEhWLFZFQyxFRSxNRSxJUixEUixSSSxM RT4gIENSOiAyODAwMDQyOCAgWEVSOiAwMDAwMDAwMAogIENGQVI6IDAwMDAwMDAwMDAwMDAwMDAg SVJRTUFTSzogMAogIEdQUjAwOiBjMDAwMDAwMDAyMDkyMjA0IGMwMDA0MDAwMDQxOGZjZDAgYzAw MDAwMDAwMWIwODEwMCAwMDAwMDAwMDAwMDAwMDQwCiAgR1BSMDQ6IDAwMDAwMDAwMDAwMTNlMDAg YzAwMGMwM2ZmZWJhYmIwMCAwMDAwMDAwMDAwYzAzZmZmIGMwMDA0MDBmZmY1ODdmODAKICBHUFIw ODogMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMTE5NmY3IDAwMDAwMDAwMDAwMDAwMDAgMDAw MDAwMDAyODAwMDQyOAogIEdQUjEyOiAwMDAwMDAwMDAwMDAwMDAwIGMwMDAwMDAwMDJlODAwMDAg YzAwMDAwMDAwMDAxMDA3YyAwMDAwMDAwMDAwMDAwMDAwCiAgR1BSMTY6IDAwMDAwMDAwMDAwMDAw MDAgMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAKICBH UFIyMDogMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAg MDAwMDAwMDAwMDAwMDAwMAogIEdQUjI0OiAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAw MDAgMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwCiAgR1BSMjg6IGMwMDAwMDAwMDJk ZjdmNzAgMDAwMDAwMDAwMDAxM2RjMCBjMDAwMDAwMDAxMWRkODk4IDAwMDAwMDAwMDgwMDAwMDAK ICBOSVAgW2MwMDAwMDAwMDIwOTIxOGNdIG1lbW9yeV9kZXZfaW5pdCsweDExNC8weDFlMAogIExS IFtjMDAwMDAwMDAyMDkyMjA0XSBtZW1vcnlfZGV2X2luaXQrMHgxOGMvMHgxZTAKICBDYWxsIFRy YWNlOgogIFtjMDAwNDAwMDA0MThmY2QwXSBbYzAwMDAwMDAwMjA5MjIwNF0gbWVtb3J5X2Rldl9p bml0KzB4MThjLzB4MWUwICh1bnJlbGlhYmxlKQogIFtjMDAwNDAwMDA0MThmZDUwXSBbYzAwMDAw MDAwMjA5MTM0OF0gZHJpdmVyX2luaXQrMHg3OC8weGE0CiAgW2MwMDA0MDAwMDQxOGZkNzBdIFtj MDAwMDAwMDAyMDA2M2FjXSBrZXJuZWxfaW5pdF9mcmVlYWJsZSsweDIyYy8weDM3MAogIFtjMDAw NDAwMDA0MThmZGUwXSBbYzAwMDAwMDAwMDAxMDBhOF0ga2VybmVsX2luaXQrMHgzNC8weDI1Ywog IFtjMDAwNDAwMDA0MThmZTUwXSBbYzAwMDAwMDAwMDAwY2Q5NF0gcmV0X2Zyb21fa2VybmVsX3Vz ZXJfdGhyZWFkKzB4MTQvMHgxYwoKQXZvaWQgdGhlIG92ZXJoZWFkIGJ5IGZvbGRpbmcgZm9yX2Vh Y2hfcHJlc2VudF9zZWN0aW9uX25yKCkgdG8gdGhlIG91dGVyCmxvb3AuIGFkZF9ib290X21lbW9y eV9ibG9jaygpIGlzIGRyb3BwZWQgYWZ0ZXIgdGhhdC4KCkZpeGVzOiA2MTY1OWVmZGIzNWMgKCJk cml2ZXJzL2Jhc2UvbWVtb3J5OiBpbXByb3ZlIGFkZF9ib290X21lbW9yeV9ibG9jaygpIikKQ2xv c2VzOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9saW51eC1tbS8yMDI1MDQwOTE4MDM0NC40Nzc5 MTYtMS1hZGl0eWFnQGxpbnV4LmlibS5jb20KUmVwb3J0ZWQtYnk6IEFkaXR5YSBHdXB0YSA8YWRp dHlhZ0BsaW51eC5pYm0uY29tPgpTaWduZWQtb2ZmLWJ5OiBHYXZpbiBTaGFuIDxnc2hhbkByZWRo YXQuY29tPgotLS0KIGRyaXZlcnMvYmFzZS9tZW1vcnkuYyB8IDM0ICsrKysrKysrKysrKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCAyMiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMgYi9kcml2ZXJz L2Jhc2UvbWVtb3J5LmMKaW5kZXggOGYzYTQxZDliZmFhLi40MzNhNWZlOTYzMDQgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYworKysgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKQEAg LTgxNiwyMSArODE2LDYgQEAgc3RhdGljIGludCBhZGRfbWVtb3J5X2Jsb2NrKHVuc2lnbmVkIGxv bmcgYmxvY2tfaWQsIHVuc2lnbmVkIGxvbmcgc3RhdGUsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRp YyBpbnQgX19pbml0IGFkZF9ib290X21lbW9yeV9ibG9jayh1bnNpZ25lZCBsb25nIGJhc2Vfc2Vj dGlvbl9ucikKLXsKLQl1bnNpZ25lZCBsb25nIG5yOwotCi0JZm9yX2VhY2hfcHJlc2VudF9zZWN0 aW9uX25yKGJhc2Vfc2VjdGlvbl9uciwgbnIpIHsKLQkJaWYgKG5yID49IChiYXNlX3NlY3Rpb25f bnIgKyBzZWN0aW9uc19wZXJfYmxvY2spKQotCQkJYnJlYWs7Ci0KLQkJcmV0dXJuIGFkZF9tZW1v cnlfYmxvY2sobWVtb3J5X2Jsb2NrX2lkKGJhc2Vfc2VjdGlvbl9uciksCi0JCQkJCU1FTV9PTkxJ TkUsIE5VTEwsIE5VTEwpOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGFkZF9o b3RwbHVnX21lbW9yeV9ibG9jayh1bnNpZ25lZCBsb25nIGJsb2NrX2lkLAogCQkJCSAgICBzdHJ1 Y3Qgdm1lbV9hbHRtYXAgKmFsdG1hcCwKIAkJCQkgICAgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3Jv dXApCkBAIC05NTcsNyArOTQyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3Jv dXAgKm1lbW9yeV9yb290X2F0dHJfZ3JvdXBzW10gPSB7CiB2b2lkIF9faW5pdCBtZW1vcnlfZGV2 X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgYmxvY2tfc3osIG5yOwor CXVuc2lnbmVkIGxvbmcgYmxvY2tfc3osIGJsb2NrX2lkLCBucjsKIAogCS8qIFZhbGlkYXRlIHRo ZSBjb25maWd1cmVkIG1lbW9yeSBibG9jayBzaXplICovCiAJYmxvY2tfc3ogPSBtZW1vcnlfYmxv Y2tfc2l6ZV9ieXRlcygpOwpAQCAtOTczLDEyICs5NTgsMTcgQEAgdm9pZCBfX2luaXQgbWVtb3J5 X2Rldl9pbml0KHZvaWQpCiAJICogQ3JlYXRlIGVudHJpZXMgZm9yIG1lbW9yeSBzZWN0aW9ucyB0 aGF0IHdlcmUgZm91bmQKIAkgKiBkdXJpbmcgYm9vdCBhbmQgaGF2ZSBiZWVuIGluaXRpYWxpemVk CiAJICovCi0JZm9yIChuciA9IDA7IG5yIDw9IF9faGlnaGVzdF9wcmVzZW50X3NlY3Rpb25fbnI7 Ci0JICAgICBuciArPSBzZWN0aW9uc19wZXJfYmxvY2spIHsKLQkJcmV0ID0gYWRkX2Jvb3RfbWVt b3J5X2Jsb2NrKG5yKTsKLQkJaWYgKHJldCkKLQkJCXBhbmljKCIlcygpIGZhaWxlZCB0byBhZGQg bWVtb3J5IGJsb2NrOiAlZFxuIiwgX19mdW5jX18sCi0JCQkgICAgICByZXQpOworCWJsb2NrX2lk ID0gVUxPTkdfTUFYOworCWZvcl9lYWNoX3ByZXNlbnRfc2VjdGlvbl9ucigwLCBucikgeworCQlp ZiAoYmxvY2tfaWQgIT0gVUxPTkdfTUFYICYmIG1lbW9yeV9ibG9ja19pZChucikgPT0gYmxvY2tf aWQpCisJCQljb250aW51ZTsKKworCQlibG9ja19pZCA9IG1lbW9yeV9ibG9ja19pZChucik7CisJ CXJldCA9IGFkZF9tZW1vcnlfYmxvY2soYmxvY2tfaWQsIE1FTV9PTkxJTkUsIE5VTEwsIE5VTEwp OworCQlpZiAocmV0KSB7CisJCQlwYW5pYygiJXMoKSBmYWlsZWQgdG8gYWRkIG1lbW9yeSBibG9j azogJWRcbiIsCisJCQkgICAgICBfX2Z1bmNfXywgcmV0KTsKKwkJfQogCX0KIH0KIAotLSAKMi40 OC4xCgo= --------------yA93nCaLSOuFbq850TxYzJ7D--