From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 82A27664AB; Mon, 15 Apr 2024 11:52:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713181969; cv=none; b=jYd+LheeuNwheZp/FZAGIh/gquUblaQCQdfrlZAmJziPE4d8asnN7aRN3GD2DXtGTJxnGfaxVV7x583zjKhVxtXK9w5J36rJhUpRWOd3R5ZEfVeLJHFokLUebkWjExs2VUsU5yFJelMqiooD9BgOtR7Ks+oZUW6Dt+3ki1ibIuo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713181969; c=relaxed/simple; bh=KDOa3WMhDZdCJkFOdWTeMccO2m7M+we4CfSTwKFdtC8=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=Ra1Fcbi+nlF1ttI1df1p8rauowE0yAkqMXh6EBuegRyZqtLknFEIquBzjFFEr1oKa43JHavxZRG3hC8db+joT+u8Hj31G+AAugjIAm+6J0FtejSMHDU9VVGL7g8rsXkG9y/otJIPbNDDktn/iEis0RuzXlgyjcbBdwaVjCkuFMI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=oIBNFBEq; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="oIBNFBEq" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 34221C4AF08; Mon, 15 Apr 2024 11:52:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1713181969; bh=KDOa3WMhDZdCJkFOdWTeMccO2m7M+we4CfSTwKFdtC8=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=oIBNFBEqx27wE7YnGIQL5va6oghRoZsIBk7dZ6Y5YkGZkdDFq4eDbeUPvBrLFcHn4 g5NJ7sRS4UXG4ffu2FelF0itZGK5ioO5lI3bMll3lxU1khEN2T5lW3rgtIOrN4ZeXf TJwahAR67LD6xbc3xp9ohfJnvmGcu68Qva+e6KZQiiqao8LrBDnKwqX7kJtZzFdb0b /HMr7hn7XF/tO/Isb1UBK2KM8WEDXrc+UD0L8n+VDZ/QnuFX+f6s1RgaJGUSt4Kpzu Qoaucfj4WbGqk5fQy/mxpDk0TDnsX4JMuDMlNS5sSPFw04yeHQv2hVUpa6NJVWAMKe ut7WP5Mi6Hu4Q== Received: by mail-oi1-f173.google.com with SMTP id 5614622812f47-3c6febc1506so339349b6e.1; Mon, 15 Apr 2024 04:52:49 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCVVC97vZ/pAjRm847xsihsorRTnYhSn/LM47mIY3aLwMAlIsb7j/k1bP3OLBD6fO24xWlnDmISG1bCuSevirthGVvYqIpPg3J6sCP4L0md0Z3i0lgL4wZkL9amTVL76a7CtfSx/jsSPdMrz0kBgPY+HG/wrpUOIU9sxOBPDxNskWMFQBKRZGxvwK2QW1EYsbiKOy+ZegbSIDNH6wjcI8A== X-Gm-Message-State: AOJu0YzLCQAgka9iUqnh8IP35OZbh1kvyLhHne9gIFZ7PYRFvU3yc/Um B6hhrWxoqGQW2lYAAeRYEiF4AafJ5muuSc+b6VtwRKWXDc19mbPhgxtmMuLtynAaCFsOClWMKmr fYQH692beLNeazPWn/8zK7CK1cDI= X-Google-Smtp-Source: AGHT+IHAqEAgDmmyxpmlL7R5uR0Ay/up7sqUWFs77wqXP3g7U1JKzh9PgyufuKdVSAZm4f9VaPPIEoUIWvDgb5wmreo= X-Received: by 2002:a05:6871:460a:b0:22e:d06b:5d8f with SMTP id nf10-20020a056871460a00b0022ed06b5d8fmr11074172oab.3.1713181968497; Mon, 15 Apr 2024 04:52:48 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20240412143719.11398-1-Jonathan.Cameron@huawei.com> <20240412143719.11398-4-Jonathan.Cameron@huawei.com> <20240415115203.0000011b@Huawei.com> In-Reply-To: <20240415115203.0000011b@Huawei.com> From: "Rafael J. Wysocki" Date: Mon, 15 Apr 2024 13:52:33 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v5 03/18] ACPI: processor: Register deferred CPUs from acpi_processor_get_info() To: Jonathan Cameron Cc: "Rafael J. Wysocki" , linux-pm@vger.kernel.org, loongarch@lists.linux.dev, linux-acpi@vger.kernel.org, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, x86@kernel.org, Russell King , Miguel Luis , James Morse , Salil Mehta , Jean-Philippe Brucker , Catalin Marinas , Will Deacon , linuxarm@huawei.com, justin.he@arm.com, jianyong.wu@arm.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Apr 15, 2024 at 12:52=E2=80=AFPM Jonathan Cameron wrote: > > On Fri, 12 Apr 2024 20:30:40 +0200 > "Rafael J. Wysocki" wrote: > > > On Fri, Apr 12, 2024 at 4:38=E2=80=AFPM Jonathan Cameron > > wrote: > > > > > > From: James Morse > > > > > > The arm64 specific arch_register_cpu() call may defer CPU registratio= n > > > until the ACPI interpreter is available and the _STA method can > > > be evaluated. > > > > > > If this occurs, then a second attempt is made in > > > acpi_processor_get_info(). Note that the arm64 specific call has > > > not yet been added so for now this will never be successfully > > > called. > > > > > > Systems can still be booted with 'acpi=3Doff', or not include an > > > ACPI description at all as in these cases arch_register_cpu() > > > will not have deferred registration when first called. > > > > > > This moves the CPU register logic back to a subsys_initcall(), > > > while the memory nodes will have been registered earlier. > > > Note this is where the call was prior to the cleanup series so > > > there should be no side effects of moving it back again for this > > > specific case. > > > > > > [PATCH 00/21] Initial cleanups for vCPU HP. > > > https://lore.kernel.org/all/ZVyz%2FVe5pPu8AWoA@shell.armlinux.org.uk/ > > > > > > e.g. 5b95f94c3b9f ("x86/topology: Switch over to GENERIC_CPU_DEVICES"= ) > > > > > > Signed-off-by: James Morse > > > Reviewed-by: Gavin Shan > > > Tested-by: Miguel Luis > > > Tested-by: Vishnu Pajjuri > > > Tested-by: Jianyong Wu > > > Signed-off-by: Russell King (Oracle) > > > Co-developed-by: Jonathan Cameron > > > Signed-off-by: Joanthan Cameron > > > --- > > > v5: Update commit message to make it clear this is moving the > > > init back to where it was until very recently. > > > > > > No longer change the condition in the earlier registration point > > > as that will be handled by the arm64 registration routine > > > deferring until called again here. > > > --- > > > drivers/acpi/acpi_processor.c | 12 ++++++++++++ > > > 1 file changed, 12 insertions(+) > > > > > > diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_proces= sor.c > > > index 93e029403d05..c78398cdd060 100644 > > > --- a/drivers/acpi/acpi_processor.c > > > +++ b/drivers/acpi/acpi_processor.c > > > @@ -317,6 +317,18 @@ static int acpi_processor_get_info(struct acpi_d= evice *device) > > > > > > c =3D &per_cpu(cpu_devices, pr->id); > > > ACPI_COMPANION_SET(&c->dev, device); > > > + /* > > > + * Register CPUs that are present. get_cpu_device() is used t= o skip > > > + * duplicate CPU descriptions from firmware. > > > + */ > > > + if (!invalid_logical_cpuid(pr->id) && cpu_present(pr->id) && > > > + !get_cpu_device(pr->id)) { > > > + int ret =3D arch_register_cpu(pr->id); > > > + > > > + if (ret) > > > + return ret; > > > + } > > > + > > > /* > > > * Extra Processor objects may be enumerated on MP systems w= ith > > > * less than the max # of CPUs. They should be ignored _iff > > > -- > > > > I am still unsure why there need to be two paths calling > > arch_register_cpu() in acpi_processor_get_info(). > > I replied further down the thread, but the key point was to maintain > the strong distinction between 'what' was done in a real hotplug > path vs one where onlining was all. We can relax that but it goes > contrary to the careful dance that was needed to get any agreement > to the ARM architecture aspects of this. This seems to go beyond technical territory. As a general rule, we tend to combine code paths that look similar instead of making them separate on purpose. Especially with a little to no explanation of the technical reason. > > > > Just below the comment partially pulled into the patch context above, > > there is this code: > > > > if (invalid_logical_cpuid(pr->id) || !cpu_present(pr->id)) { > > int ret =3D acpi_processor_hotadd_init(pr); > > > > if (ret) > > return ret; > > } > > > > For the sake of the argument, fold acpi_processor_hotadd_init() into > > it and drop the redundant _STA check from it: > > If we combine these, the _STA check is necessary because we will call thi= s > path for delayed onlining of ARM64 CPUs (if the earlier registration code > call or arch_register_cpu() returned -EPROBE defer). That's the only way > we know that a given CPU is online capable but firmware is saying we can'= t > bring it online yet (it may be be vHP later). Ignoring the above as per the other message. > > > > if (invalid_logical_cpuid(pr->id) || !cpu_present(pr->id)) { > > if (invalid_phys_cpuid(pr->phys_id)) > > return -ENODEV; > > > > cpu_maps_update_begin(); > > cpus_write_lock(); > > > > ret =3D acpi_map_cpu(pr->handle, pr->phys_id, pr->acpi_id, &pr->= id); > > I read that call as > acpi_map_cpu_for_physical_cpu_hotplug() > but we could make it equivalent of. > acpi_map_cpu_for_whatever_cpu_hotplug() Yes. > (I'm not proposing those names though ;) Sure. > in which case it is fine to just stub it out on ARM64. > > if (ret) { > > cpus_write_unlock(); > > cpu_maps_update_done(); > > return ret; > > } > > ret =3D arch_register_cpu(pr->id); > > if (ret) { > > acpi_unmap_cpu(pr->id); > > > > cpus_write_unlock(); > > cpu_maps_update_done(); > > return ret; > > } > > pr_info("CPU%d has been hot-added\n", pr->id); > > pr->flags.need_hotplug_init =3D 1; > This one needs more careful handling because we are calling this > for non hotplug cases on arm64 in which case we end up setting this > for initially online CPUs - thus if we offline and online them > again via sysfs /sys/bus/cpu/device/cpuX/online it goes through the > hotplug path and should not. > > So I need a way to detect if we are hotplugging the cpu or not. > Is there a standard way to do this? If you mean physical hot-add, I don't think so. What exactly do you need to do differently in the two cases? > I haven't figured out how to use flags in drivers to communicate this st= ate. > > > > > cpus_write_unlock(); > > cpu_maps_update_done(); > > } > > > > so I'm not sure why this cannot be combined with the new code. > > > > Say acpi_map_cpu) / acpi_unmap_cpu() are turned into arch calls. > > What's the difference then? The locking, which should be fine if I'm > > not mistaken and need_hotplug_init that needs to be set if this code > > runs after the processor driver has loaded AFAICS. > > That's the bit that I'm currently finding a challenge. Is there a clean > way to detect that? If you mean the need_hotplug_init flag, I'm currently a bit struggling to convince myself that it is really needed. 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 0F001C4345F for ; Mon, 15 Apr 2024 11:53:07 +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:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=4/lxB48n1HwYKZoVRYKzN0ObtVQoVgv1XA3xFvNPb9w=; b=DxqxyrTuAEfh2d dMcjjlQDK5yLMVnSrM/GeDKBqcSb8yQvsF8n2uopErO5wQZjZM1F9j9JaqgbxxURV7KndPzIIiqNv JCSS4VfPDs8GkO6RHHCGi/oSZ6lE/akmQtMJM0lvW0pqvA/ARmLFl6bk7nl8U6yEx59gZX9cELXcL tw3ygZMcrI9/4OAVvoMVjdAsoQdCM/h3AwK0EqSHDvh92voC+uylftm20LVLjXMWyENRaLAW3eSDk azkXXUqkoWdW+ChvP8vkYnt7aKRKPZn3MizxXGv2CpbusnQ06kKRY8+CRsGz+EH+SKAzZvESe3U7n TykusN/kkZEUdEFoTa3g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rwKtL-0000000860E-26fD; Mon, 15 Apr 2024 11:52:55 +0000 Received: from sin.source.kernel.org ([2604:1380:40e1:4800::1]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rwKtJ-000000085zG-00cQ for linux-arm-kernel@lists.infradead.org; Mon, 15 Apr 2024 11:52:54 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id EAEF7CE0B52 for ; Mon, 15 Apr 2024 11:52:49 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 384A1C4AF09 for ; Mon, 15 Apr 2024 11:52:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1713181969; bh=KDOa3WMhDZdCJkFOdWTeMccO2m7M+we4CfSTwKFdtC8=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=oIBNFBEqx27wE7YnGIQL5va6oghRoZsIBk7dZ6Y5YkGZkdDFq4eDbeUPvBrLFcHn4 g5NJ7sRS4UXG4ffu2FelF0itZGK5ioO5lI3bMll3lxU1khEN2T5lW3rgtIOrN4ZeXf TJwahAR67LD6xbc3xp9ohfJnvmGcu68Qva+e6KZQiiqao8LrBDnKwqX7kJtZzFdb0b /HMr7hn7XF/tO/Isb1UBK2KM8WEDXrc+UD0L8n+VDZ/QnuFX+f6s1RgaJGUSt4Kpzu Qoaucfj4WbGqk5fQy/mxpDk0TDnsX4JMuDMlNS5sSPFw04yeHQv2hVUpa6NJVWAMKe ut7WP5Mi6Hu4Q== Received: by mail-ot1-f50.google.com with SMTP id 46e09a7af769-6eb6e24bc36so214637a34.1 for ; Mon, 15 Apr 2024 04:52:49 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCVc5dhvNRdmwrgSayreTZJSm6IM0Fi9fprVBiN57xrVMeTY9xsK+XWYVvYp+UsnPcrTQhDJBcNPo388ICmY521mbEFWaIvEK6KH4GolUcYsCWuUwQs= X-Gm-Message-State: AOJu0Yz6N2Zmhr+sOVE5zM/1HYsOGIchNQzeQUJUvwzTR188hmBJIdsj VvpAzcDW7bGVXkbvvFCh+QQWncICyINdLxLyNJJ9LwSrBsl5j4GR1pOQrAwkADeYpEx6HVWEw6r wI5akYgp3wjARDFM5S+EX9CFj3Lk= X-Google-Smtp-Source: AGHT+IHAqEAgDmmyxpmlL7R5uR0Ay/up7sqUWFs77wqXP3g7U1JKzh9PgyufuKdVSAZm4f9VaPPIEoUIWvDgb5wmreo= X-Received: by 2002:a05:6871:460a:b0:22e:d06b:5d8f with SMTP id nf10-20020a056871460a00b0022ed06b5d8fmr11074172oab.3.1713181968497; Mon, 15 Apr 2024 04:52:48 -0700 (PDT) MIME-Version: 1.0 References: <20240412143719.11398-1-Jonathan.Cameron@huawei.com> <20240412143719.11398-4-Jonathan.Cameron@huawei.com> <20240415115203.0000011b@Huawei.com> In-Reply-To: <20240415115203.0000011b@Huawei.com> From: "Rafael J. Wysocki" Date: Mon, 15 Apr 2024 13:52:33 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v5 03/18] ACPI: processor: Register deferred CPUs from acpi_processor_get_info() To: Jonathan Cameron Cc: "Rafael J. Wysocki" , linux-pm@vger.kernel.org, loongarch@lists.linux.dev, linux-acpi@vger.kernel.org, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, x86@kernel.org, Russell King , Miguel Luis , James Morse , Salil Mehta , Jean-Philippe Brucker , Catalin Marinas , Will Deacon , linuxarm@huawei.com, justin.he@arm.com, jianyong.wu@arm.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240415_045253_415161_1F11028A X-CRM114-Status: GOOD ( 60.76 ) X-BeenThere: linux-arm-kernel@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-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gTW9uLCBBcHIgMTUsIDIwMjQgYXQgMTI6NTLigK9QTSBKb25hdGhhbiBDYW1lcm9uCjxKb25h dGhhbi5DYW1lcm9uQGh1YXdlaS5jb20+IHdyb3RlOgo+Cj4gT24gRnJpLCAxMiBBcHIgMjAyNCAy MDozMDo0MCArMDIwMAo+ICJSYWZhZWwgSi4gV3lzb2NraSIgPHJhZmFlbEBrZXJuZWwub3JnPiB3 cm90ZToKPgo+ID4gT24gRnJpLCBBcHIgMTIsIDIwMjQgYXQgNDozOOKAr1BNIEpvbmF0aGFuIENh bWVyb24KPiA+IDxKb25hdGhhbi5DYW1lcm9uQGh1YXdlaS5jb20+IHdyb3RlOgo+ID4gPgo+ID4g PiBGcm9tOiBKYW1lcyBNb3JzZSA8amFtZXMubW9yc2VAYXJtLmNvbT4KPiA+ID4KPiA+ID4gVGhl IGFybTY0IHNwZWNpZmljIGFyY2hfcmVnaXN0ZXJfY3B1KCkgY2FsbCBtYXkgZGVmZXIgQ1BVIHJl Z2lzdHJhdGlvbgo+ID4gPiB1bnRpbCB0aGUgQUNQSSBpbnRlcnByZXRlciBpcyBhdmFpbGFibGUg YW5kIHRoZSBfU1RBIG1ldGhvZCBjYW4KPiA+ID4gYmUgZXZhbHVhdGVkLgo+ID4gPgo+ID4gPiBJ ZiB0aGlzIG9jY3VycywgdGhlbiBhIHNlY29uZCBhdHRlbXB0IGlzIG1hZGUgaW4KPiA+ID4gYWNw aV9wcm9jZXNzb3JfZ2V0X2luZm8oKS4gTm90ZSB0aGF0IHRoZSBhcm02NCBzcGVjaWZpYyBjYWxs IGhhcwo+ID4gPiBub3QgeWV0IGJlZW4gYWRkZWQgc28gZm9yIG5vdyB0aGlzIHdpbGwgbmV2ZXIg YmUgc3VjY2Vzc2Z1bGx5Cj4gPiA+IGNhbGxlZC4KPiA+ID4KPiA+ID4gU3lzdGVtcyBjYW4gc3Rp bGwgYmUgYm9vdGVkIHdpdGggJ2FjcGk9b2ZmJywgb3Igbm90IGluY2x1ZGUgYW4KPiA+ID4gQUNQ SSBkZXNjcmlwdGlvbiBhdCBhbGwgYXMgaW4gdGhlc2UgY2FzZXMgYXJjaF9yZWdpc3Rlcl9jcHUo KQo+ID4gPiB3aWxsIG5vdCBoYXZlIGRlZmVycmVkIHJlZ2lzdHJhdGlvbiB3aGVuIGZpcnN0IGNh bGxlZC4KPiA+ID4KPiA+ID4gVGhpcyBtb3ZlcyB0aGUgQ1BVIHJlZ2lzdGVyIGxvZ2ljIGJhY2sg dG8gYSBzdWJzeXNfaW5pdGNhbGwoKSwKPiA+ID4gd2hpbGUgdGhlIG1lbW9yeSBub2RlcyB3aWxs IGhhdmUgYmVlbiByZWdpc3RlcmVkIGVhcmxpZXIuCj4gPiA+IE5vdGUgdGhpcyBpcyB3aGVyZSB0 aGUgY2FsbCB3YXMgcHJpb3IgdG8gdGhlIGNsZWFudXAgc2VyaWVzIHNvCj4gPiA+IHRoZXJlIHNo b3VsZCBiZSBubyBzaWRlIGVmZmVjdHMgb2YgbW92aW5nIGl0IGJhY2sgYWdhaW4gZm9yIHRoaXMK PiA+ID4gc3BlY2lmaWMgY2FzZS4KPiA+ID4KPiA+ID4gW1BBVENIIDAwLzIxXSBJbml0aWFsIGNs ZWFudXBzIGZvciB2Q1BVIEhQLgo+ID4gPiBodHRwczovL2xvcmUua2VybmVsLm9yZy9hbGwvWlZ5 eiUyRlZlNXBQdThBV29BQHNoZWxsLmFybWxpbnV4Lm9yZy51ay8KPiA+ID4KPiA+ID4gZS5nLiA1 Yjk1Zjk0YzNiOWYgKCJ4ODYvdG9wb2xvZ3k6IFN3aXRjaCBvdmVyIHRvIEdFTkVSSUNfQ1BVX0RF VklDRVMiKQo+ID4gPgo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBKYW1lcyBNb3JzZSA8amFtZXMubW9y c2VAYXJtLmNvbT4KPiA+ID4gUmV2aWV3ZWQtYnk6IEdhdmluIFNoYW4gPGdzaGFuQHJlZGhhdC5j b20+Cj4gPiA+IFRlc3RlZC1ieTogTWlndWVsIEx1aXMgPG1pZ3VlbC5sdWlzQG9yYWNsZS5jb20+ Cj4gPiA+IFRlc3RlZC1ieTogVmlzaG51IFBhamp1cmkgPHZpc2hudUBvcy5hbXBlcmVjb21wdXRp bmcuY29tPgo+ID4gPiBUZXN0ZWQtYnk6IEppYW55b25nIFd1IDxqaWFueW9uZy53dUBhcm0uY29t Pgo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgKE9yYWNsZSkgPHJtaytrZXJuZWxA YXJtbGludXgub3JnLnVrPgo+ID4gPiBDby1kZXZlbG9wZWQtYnk6IEpvbmF0aGFuIENhbWVyb24g PEpvbmF0aGFuLkNhbWVyb25AaHVhd2VpLmNvbT4KPiA+ID4gU2lnbmVkLW9mZi1ieTogSm9hbnRo YW4gQ2FtZXJvbiA8Sm9uYXRoYW4uQ2FtZXJvbkBodWF3ZWkuY29tPgo+ID4gPiAtLS0KPiA+ID4g djU6IFVwZGF0ZSBjb21taXQgbWVzc2FnZSB0byBtYWtlIGl0IGNsZWFyIHRoaXMgaXMgbW92aW5n IHRoZQo+ID4gPiAgICAgaW5pdCBiYWNrIHRvIHdoZXJlIGl0IHdhcyB1bnRpbCB2ZXJ5IHJlY2Vu dGx5Lgo+ID4gPgo+ID4gPiAgICAgTm8gbG9uZ2VyIGNoYW5nZSB0aGUgY29uZGl0aW9uIGluIHRo ZSBlYXJsaWVyIHJlZ2lzdHJhdGlvbiBwb2ludAo+ID4gPiAgICAgYXMgdGhhdCB3aWxsIGJlIGhh bmRsZWQgYnkgdGhlIGFybTY0IHJlZ2lzdHJhdGlvbiByb3V0aW5lCj4gPiA+ICAgICBkZWZlcnJp bmcgdW50aWwgY2FsbGVkIGFnYWluIGhlcmUuCj4gPiA+IC0tLQo+ID4gPiAgZHJpdmVycy9hY3Bp L2FjcGlfcHJvY2Vzc29yLmMgfCAxMiArKysrKysrKysrKysKPiA+ID4gIDEgZmlsZSBjaGFuZ2Vk LCAxMiBpbnNlcnRpb25zKCspCj4gPiA+Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkv YWNwaV9wcm9jZXNzb3IuYyBiL2RyaXZlcnMvYWNwaS9hY3BpX3Byb2Nlc3Nvci5jCj4gPiA+IGlu ZGV4IDkzZTAyOTQwM2QwNS4uYzc4Mzk4Y2RkMDYwIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJz L2FjcGkvYWNwaV9wcm9jZXNzb3IuYwo+ID4gPiArKysgYi9kcml2ZXJzL2FjcGkvYWNwaV9wcm9j ZXNzb3IuYwo+ID4gPiBAQCAtMzE3LDYgKzMxNywxOCBAQCBzdGF0aWMgaW50IGFjcGlfcHJvY2Vz c29yX2dldF9pbmZvKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQo+ID4gPgo+ID4gPiAgICAg ICAgIGMgPSAmcGVyX2NwdShjcHVfZGV2aWNlcywgcHItPmlkKTsKPiA+ID4gICAgICAgICBBQ1BJ X0NPTVBBTklPTl9TRVQoJmMtPmRldiwgZGV2aWNlKTsKPiA+ID4gKyAgICAgICAvKgo+ID4gPiAr ICAgICAgICAqIFJlZ2lzdGVyIENQVXMgdGhhdCBhcmUgcHJlc2VudC4gZ2V0X2NwdV9kZXZpY2Uo KSBpcyB1c2VkIHRvIHNraXAKPiA+ID4gKyAgICAgICAgKiBkdXBsaWNhdGUgQ1BVIGRlc2NyaXB0 aW9ucyBmcm9tIGZpcm13YXJlLgo+ID4gPiArICAgICAgICAqLwo+ID4gPiArICAgICAgIGlmICgh aW52YWxpZF9sb2dpY2FsX2NwdWlkKHByLT5pZCkgJiYgY3B1X3ByZXNlbnQocHItPmlkKSAmJgo+ ID4gPiArICAgICAgICAgICAhZ2V0X2NwdV9kZXZpY2UocHItPmlkKSkgewo+ID4gPiArICAgICAg ICAgICAgICAgaW50IHJldCA9IGFyY2hfcmVnaXN0ZXJfY3B1KHByLT5pZCk7Cj4gPiA+ICsKPiA+ ID4gKyAgICAgICAgICAgICAgIGlmIChyZXQpCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiByZXQ7Cj4gPiA+ICsgICAgICAgfQo+ID4gPiArCj4gPiA+ICAgICAgICAgLyoKPiA+ ID4gICAgICAgICAgKiAgRXh0cmEgUHJvY2Vzc29yIG9iamVjdHMgbWF5IGJlIGVudW1lcmF0ZWQg b24gTVAgc3lzdGVtcyB3aXRoCj4gPiA+ICAgICAgICAgICogIGxlc3MgdGhhbiB0aGUgbWF4ICMg b2YgQ1BVcy4gVGhleSBzaG91bGQgYmUgaWdub3JlZCBfaWZmCj4gPiA+IC0tCj4gPgo+ID4gSSBh bSBzdGlsbCB1bnN1cmUgd2h5IHRoZXJlIG5lZWQgdG8gYmUgdHdvIHBhdGhzIGNhbGxpbmcKPiA+ IGFyY2hfcmVnaXN0ZXJfY3B1KCkgaW4gYWNwaV9wcm9jZXNzb3JfZ2V0X2luZm8oKS4KPgo+IEkg cmVwbGllZCBmdXJ0aGVyIGRvd24gdGhlIHRocmVhZCwgYnV0IHRoZSBrZXkgcG9pbnQgd2FzIHRv IG1haW50YWluCj4gdGhlIHN0cm9uZyBkaXN0aW5jdGlvbiBiZXR3ZWVuICd3aGF0JyB3YXMgZG9u ZSBpbiBhIHJlYWwgaG90cGx1Zwo+IHBhdGggdnMgb25lIHdoZXJlIG9ubGluaW5nIHdhcyBhbGwu ICBXZSBjYW4gcmVsYXggdGhhdCBidXQgaXQgZ29lcwo+IGNvbnRyYXJ5IHRvIHRoZSBjYXJlZnVs IGRhbmNlIHRoYXQgd2FzIG5lZWRlZCB0byBnZXQgYW55IGFncmVlbWVudAo+IHRvIHRoZSBBUk0g YXJjaGl0ZWN0dXJlIGFzcGVjdHMgb2YgdGhpcy4KClRoaXMgc2VlbXMgdG8gZ28gYmV5b25kIHRl Y2huaWNhbCB0ZXJyaXRvcnkuCgpBcyBhIGdlbmVyYWwgcnVsZSwgd2UgdGVuZCB0byBjb21iaW5l IGNvZGUgcGF0aHMgdGhhdCBsb29rIHNpbWlsYXIKaW5zdGVhZCBvZiBtYWtpbmcgdGhlbSBzZXBh cmF0ZSBvbiBwdXJwb3NlLiAgRXNwZWNpYWxseSB3aXRoIGEgbGl0dGxlCnRvIG5vIGV4cGxhbmF0 aW9uIG9mIHRoZSB0ZWNobmljYWwgcmVhc29uLgoKPiA+Cj4gPiBKdXN0IGJlbG93IHRoZSBjb21t ZW50IHBhcnRpYWxseSBwdWxsZWQgaW50byB0aGUgcGF0Y2ggY29udGV4dCBhYm92ZSwKPiA+IHRo ZXJlIGlzIHRoaXMgY29kZToKPiA+Cj4gPiBpZiAoaW52YWxpZF9sb2dpY2FsX2NwdWlkKHByLT5p ZCkgfHwgIWNwdV9wcmVzZW50KHByLT5pZCkpIHsKPiA+ICAgICAgICAgIGludCByZXQgPSBhY3Bp X3Byb2Nlc3Nvcl9ob3RhZGRfaW5pdChwcik7Cj4gPgo+ID4gICAgICAgICBpZiAocmV0KQo+ID4g ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiB9Cj4gPgo+ID4gRm9yIHRoZSBzYWtlIG9m IHRoZSBhcmd1bWVudCwgZm9sZCBhY3BpX3Byb2Nlc3Nvcl9ob3RhZGRfaW5pdCgpIGludG8KPiA+ IGl0IGFuZCBkcm9wIHRoZSByZWR1bmRhbnQgX1NUQSBjaGVjayBmcm9tIGl0Ogo+Cj4gSWYgd2Ug Y29tYmluZSB0aGVzZSwgdGhlIF9TVEEgY2hlY2sgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2Ugd2ls bCBjYWxsIHRoaXMKPiBwYXRoIGZvciBkZWxheWVkIG9ubGluaW5nIG9mIEFSTTY0IENQVXMgKGlm IHRoZSBlYXJsaWVyIHJlZ2lzdHJhdGlvbiBjb2RlCj4gY2FsbCBvciBhcmNoX3JlZ2lzdGVyX2Nw dSgpIHJldHVybmVkIC1FUFJPQkUgZGVmZXIpLiBUaGF0J3MgdGhlIG9ubHkgd2F5Cj4gd2Uga25v dyB0aGF0IGEgZ2l2ZW4gQ1BVIGlzIG9ubGluZSBjYXBhYmxlIGJ1dCBmaXJtd2FyZSBpcyBzYXlp bmcgd2UgY2FuJ3QKPiBicmluZyBpdCBvbmxpbmUgeWV0IChpdCBtYXkgYmUgYmUgdkhQIGxhdGVy KS4KCklnbm9yaW5nIHRoZSBhYm92ZSBhcyBwZXIgdGhlIG90aGVyIG1lc3NhZ2UuCgo+ID4KPiA+ IGlmIChpbnZhbGlkX2xvZ2ljYWxfY3B1aWQocHItPmlkKSB8fCAhY3B1X3ByZXNlbnQocHItPmlk KSkgewo+ID4gICAgICAgICBpZiAoaW52YWxpZF9waHlzX2NwdWlkKHByLT5waHlzX2lkKSkKPiA+ ICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKPiA+Cj4gPiAgICAgICAgIGNwdV9tYXBz X3VwZGF0ZV9iZWdpbigpOwo+ID4gICAgICAgICBjcHVzX3dyaXRlX2xvY2soKTsKPiA+Cj4gPiAg ICAgICAgcmV0ID0gYWNwaV9tYXBfY3B1KHByLT5oYW5kbGUsIHByLT5waHlzX2lkLCBwci0+YWNw aV9pZCwgJnByLT5pZCk7Cj4KPiBJIHJlYWQgdGhhdCBjYWxsIGFzCj4gICAgICAgICBhY3BpX21h cF9jcHVfZm9yX3BoeXNpY2FsX2NwdV9ob3RwbHVnKCkKPiBidXQgd2UgY291bGQgbWFrZSBpdCBl cXVpdmFsZW50IG9mLgo+ICAgICAgICAgYWNwaV9tYXBfY3B1X2Zvcl93aGF0ZXZlcl9jcHVfaG90 cGx1ZygpCgpZZXMuCgo+IChJJ20gbm90IHByb3Bvc2luZyB0aG9zZSBuYW1lcyB0aG91Z2ggOykK ClN1cmUuCgo+IGluIHdoaWNoIGNhc2UgaXQgaXMgZmluZSB0byBqdXN0IHN0dWIgaXQgb3V0IG9u IEFSTTY0Lgo+ID4gICAgICAgIGlmIChyZXQpIHsKPiA+ICAgICAgICAgICAgICAgICBjcHVzX3dy aXRlX3VubG9jaygpOwo+ID4gICAgICAgICAgICAgICAgIGNwdV9tYXBzX3VwZGF0ZV9kb25lKCk7 Cj4gPiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+ICAgICAgICB9Cj4gPiAgICAgICAg cmV0ID0gYXJjaF9yZWdpc3Rlcl9jcHUocHItPmlkKTsKPiA+ICAgICAgICBpZiAocmV0KSB7Cj4g PiAgICAgICAgICAgICAgICAgYWNwaV91bm1hcF9jcHUocHItPmlkKTsKPiA+Cj4gPiAgICAgICAg ICAgICAgICAgY3B1c193cml0ZV91bmxvY2soKTsKPiA+ICAgICAgICAgICAgICAgICBjcHVfbWFw c191cGRhdGVfZG9uZSgpOwo+ID4gICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiAgICAg ICAgfQo+ID4gICAgICAgcHJfaW5mbygiQ1BVJWQgaGFzIGJlZW4gaG90LWFkZGVkXG4iLCBwci0+ aWQpOwo+ID4gICAgICAgcHItPmZsYWdzLm5lZWRfaG90cGx1Z19pbml0ID0gMTsKPiBUaGlzIG9u ZSBuZWVkcyBtb3JlIGNhcmVmdWwgaGFuZGxpbmcgYmVjYXVzZSB3ZSBhcmUgY2FsbGluZyB0aGlz Cj4gZm9yIG5vbiBob3RwbHVnIGNhc2VzIG9uIGFybTY0IGluIHdoaWNoIGNhc2Ugd2UgZW5kIHVw IHNldHRpbmcgdGhpcwo+IGZvciBpbml0aWFsbHkgb25saW5lIENQVXMgLSB0aHVzIGlmIHdlIG9m ZmxpbmUgYW5kIG9ubGluZSB0aGVtCj4gYWdhaW4gdmlhIHN5c2ZzIC9zeXMvYnVzL2NwdS9kZXZp Y2UvY3B1WC9vbmxpbmUgaXQgZ29lcyB0aHJvdWdoIHRoZQo+IGhvdHBsdWcgcGF0aCBhbmQgc2hv dWxkIG5vdC4KPgo+IFNvIEkgbmVlZCBhIHdheSB0byBkZXRlY3QgaWYgd2UgYXJlIGhvdHBsdWdn aW5nIHRoZSBjcHUgb3Igbm90Lgo+IElzIHRoZXJlIGEgc3RhbmRhcmQgd2F5IHRvIGRvIHRoaXM/ CgpJZiB5b3UgbWVhbiBwaHlzaWNhbCBob3QtYWRkLCBJIGRvbid0IHRoaW5rIHNvLgoKV2hhdCBl eGFjdGx5IGRvIHlvdSBuZWVkIHRvIGRvIGRpZmZlcmVudGx5IGluIHRoZSB0d28gY2FzZXM/Cgo+ ICBJIGhhdmVuJ3QgZmlndXJlZCBvdXQgaG93IHRvIHVzZSBmbGFncyBpbiBkcml2ZXJzIHRvIGNv bW11bmljYXRlIHRoaXMgc3RhdGUuCj4KPiA+Cj4gPiAgICAgICBjcHVzX3dyaXRlX3VubG9jaygp Owo+ID4gICAgICAgY3B1X21hcHNfdXBkYXRlX2RvbmUoKTsKPiA+IH0KPiA+Cj4gPiBzbyBJJ20g bm90IHN1cmUgd2h5IHRoaXMgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggdGhlIG5ldyBjb2RlLgo+ ID4KPiA+IFNheSBhY3BpX21hcF9jcHUpIC8gYWNwaV91bm1hcF9jcHUoKSBhcmUgdHVybmVkIGlu dG8gYXJjaCBjYWxscy4KPiA+IFdoYXQncyB0aGUgZGlmZmVyZW5jZSB0aGVuPyAgVGhlIGxvY2tp bmcsIHdoaWNoIHNob3VsZCBiZSBmaW5lIGlmIEknbQo+ID4gbm90IG1pc3Rha2VuIGFuZCBuZWVk X2hvdHBsdWdfaW5pdCB0aGF0IG5lZWRzIHRvIGJlIHNldCBpZiB0aGlzIGNvZGUKPiA+IHJ1bnMg YWZ0ZXIgdGhlIHByb2Nlc3NvciBkcml2ZXIgaGFzIGxvYWRlZCBBRkFJQ1MuCj4KPiBUaGF0J3Mg dGhlIGJpdCB0aGF0IEknbSBjdXJyZW50bHkgZmluZGluZyBhIGNoYWxsZW5nZS4gSXMgdGhlcmUg YSBjbGVhbgo+IHdheSB0byBkZXRlY3QgdGhhdD8KCklmIHlvdSBtZWFuIHRoZSBuZWVkX2hvdHBs dWdfaW5pdCBmbGFnLCBJJ20gY3VycmVudGx5IGEgYml0IHN0cnVnZ2xpbmcKdG8gY29udmluY2Ug bXlzZWxmIHRoYXQgaXQgaXMgcmVhbGx5IG5lZWRlZC4KCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0Cmxp bnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK