From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (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 5F72E745D4 for ; Tue, 20 Feb 2024 15:14:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=140.211.166.138 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708442072; cv=none; b=P8leka0CDgYelzRysRoLU0cO5Sfmr5w1B72A72BBiRBbN5KnMikbBu6zKl4eqXvRMPYqvJEYfg7NFnYiaW9MY4uewboQ8CwziH4qpFgyQdszWkzwUUgbH9NEm6FeVEQ35nM09DE4kvtNbnhXW9epi1CTolxX3mR7B196lzvmZA4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708442072; c=relaxed/simple; bh=EerVHanUz2tefY83Hs9lDDnTHX9i7fSD2ZbOIE+Yu88=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=h1YPGu/5UXwKqGwVvermHqykezOtTHDyGbRQgX95gxmpQ2Y1QlCFzrSzJf8HY4KNCLV/NROhcdz2iI+TRXKgeKB2/vDh0UyLxVqs47mbOLoTep9vDicgGf79fQnH0/xYXVHzkuTZjVzLX5NkHANS3FpccXnyaaQppgsmwVNotAU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=armlinux.org.uk header.i=@armlinux.org.uk header.b=Xy5iv0Wr; arc=none smtp.client-ip=140.211.166.138 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=armlinux.org.uk header.i=@armlinux.org.uk header.b="Xy5iv0Wr" Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id E9C7480BAC for ; Tue, 20 Feb 2024 15:14:30 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org X-Spam-Flag: NO X-Spam-Score: -2.098 X-Spam-Level: Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id vtIugQjCXh5u for ; Tue, 20 Feb 2024 15:14:24 +0000 (UTC) Received-SPF: None (mailfrom) identity=mailfrom; client-ip=2001:4d48:ad52:32c8:5054:ff:fe00:142; helo=pandora.armlinux.org.uk; envelope-from=linux+acpica-devel=lists.linuxfoundation.org@armlinux.org.uk; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp1.osuosl.org 3B9C781E86 Authentication-Results: smtp1.osuosl.org; dmarc=pass (p=none dis=none) header.from=armlinux.org.uk DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 3B9C781E86 Authentication-Results: smtp1.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=armlinux.org.uk header.i=@armlinux.org.uk header.a=rsa-sha256 header.s=pandora-2019 header.b=Xy5iv0Wr Received: from pandora.armlinux.org.uk (pandora.armlinux.org.uk [IPv6:2001:4d48:ad52:32c8:5054:ff:fe00:142]) by smtp1.osuosl.org (Postfix) with ESMTPS id 3B9C781E86 for ; Tue, 20 Feb 2024 15:14:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2019; h=Sender:In-Reply-To: Content-Transfer-Encoding:Content-Type:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date: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=qgc8OUZCtZPjwVAIjMqiHy7ikwaI1Mbu1Mp1IdFRzDs=; b=Xy5iv0WrTLeAO0Yk5KZRnMdKyj P5Il3QQ+baeCRbUTHw+M2pQGpzCvY2kVMWyp3dXDSELRc5Ju3nfd11YBuUEHjVI4tFW2/xraLQejU 8tft/vHldbP7aGpknVnTEenRzyIrR0qgmIZkTDpzWNYBWSARs/hgaqJkstanzehwL6LPfJLIeqFLo gUb/82YcOQPZlEGA8PE5OTomL+YF+FqTubxG54uf45edRw2uSwN7RfBx+Du1NGHDAZjqfMWrmpglo yS8bLYhbsuhKYbVHwDGhCbqZMUPo3WgWbTMTAIMeCbEX6XIBN4y0pMZBZKVgW6FRGfRXxX28yVi92 FpAy11Fw==; Received: from shell.armlinux.org.uk ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:45522) by pandora.armlinux.org.uk with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1rcRoq-00033P-2v; Tue, 20 Feb 2024 15:14:05 +0000 Received: from linux by shell.armlinux.org.uk with local (Exim 4.94.2) (envelope-from ) id 1rcRok-0000xX-ST; Tue, 20 Feb 2024 15:13:58 +0000 Date: Tue, 20 Feb 2024 15:13:58 +0000 From: "Russell King (Oracle)" To: "Rafael J. Wysocki" Cc: 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, linux-riscv@lists.infradead.org, kvmarm@lists.linux.dev, x86@kernel.org, acpica-devel@lists.linuxfoundation.org, linux-csky@vger.kernel.org, linux-doc@vger.kernel.org, linux-ia64@vger.kernel.org, linux-parisc@vger.kernel.org, Salil Mehta , Jean-Philippe Brucker , jianyong.wu@arm.com, justin.he@arm.com, James Morse , Jonathan Cameron Subject: Re: [PATCH RFC v4 02/15] ACPI: processor: Register all CPUs from acpi_processor_get_info() Message-ID: References: Precedence: bulk X-Mailing-List: acpica-devel@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Sender: Russell King (Oracle) On Tue, Feb 20, 2024 at 11:27:15AM +0000, Russell King (Oracle) wrote: > On Thu, Feb 15, 2024 at 08:22:29PM +0100, Rafael J. Wysocki wrote: > > On Wed, Jan 31, 2024 at 5:50 PM Russell King wrote: > > > diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c > > > index cf7c1cca69dd..a68c475cdea5 100644 > > > --- a/drivers/acpi/acpi_processor.c > > > +++ b/drivers/acpi/acpi_processor.c > > > @@ -314,6 +314,18 @@ static int acpi_processor_get_info(struct acpi_device *device) > > > cpufreq_add_device("acpi-cpufreq"); > > > } > > > > > > + /* > > > + * Register CPUs that are present. get_cpu_device() is used to skip > > > + * duplicate CPU descriptions from firmware. > > > + */ > > > + if (!invalid_logical_cpuid(pr->id) && cpu_present(pr->id) && > > > + !get_cpu_device(pr->id)) { > > > + int ret = arch_register_cpu(pr->id); > > > + > > > + if (ret) > > > + return ret; > > > + } > > > + > > > /* > > > * Extra Processor objects may be enumerated on MP systems with > > > * less than the max # of CPUs. They should be ignored _iff > > > > This is interesting, because right below there is the following code: > > > > if (invalid_logical_cpuid(pr->id) || !cpu_present(pr->id)) { > > int ret = acpi_processor_hotadd_init(pr); > > > > if (ret) > > return ret; > > } > > > > and acpi_processor_hotadd_init() essentially calls arch_register_cpu() > > with some extra things around it (more about that below). > > > > I do realize that acpi_processor_hotadd_init() is defined under > > CONFIG_ACPI_HOTPLUG_CPU, so for the sake of the argument let's > > consider an architecture where CONFIG_ACPI_HOTPLUG_CPU is set. > > > > So why are the two conditionals that almost contradict each other both > > needed? It looks like the new code could be combined with > > acpi_processor_hotadd_init() to do the right thing in all cases. > > > > Now, acpi_processor_hotadd_init() does some extra things that look > > like they should be done by the new code too. > > > > 1. It checks invalid_phys_cpuid() which appears to be a good idea to me. > > > > 2. It uses locking around arch_register_cpu() which doesn't seem > > unreasonable either. > > > > 3. It calls acpi_map_cpu() and I'm not sure why this is not done by > > the new code. > > > > The only thing that can be dropped from it is the _STA check AFAICS, > > because acpi_processor_add() won't even be called if the CPU is not > > present (and not enabled after the first patch). > > > > So why does the code not do 1 - 3 above? > > Honestly, I'm out of my depth with this and can't answer your > questions - and I really don't want to try fiddling with this code > because it's just too icky (even in its current form in mainline) > to be understandable to anyone who hasn't gained a detailed knowledge > of this code. > > It's going to require a lot of analysis - how acpi_map_cpuid() behaves > in all circumstances, what this means for invalid_logical_cpuid() and > invalid_phys_cpuid(), what paths will be taken in each case. This code > is already just too hairy for someone who isn't an experienced ACPI > hacker to be able to follow and I don't see an obvious way to make it > more readable. > > James' additions make it even more complex and less readable. As an illustration of the problems I'm having here, I was just writing a reply to this with a suggestion of transforming this code ultimately to: if (!get_cpu_device(pr->id)) { int ret; if (!invalid_logical_cpuid(pr->id) && cpu_present(pr->id)) ret = acpi_processor_make_enabled(pr); else ret = acpi_processor_make_present(pr); if (ret) return ret; } (acpi_processor_make_present() would be acpi_processor_hotadd_init() and acpi_processor_make_enabled() would be arch_register_cpu() at this point.) Then I realised that's a bad idea - because we really need to check that pr->id is valid before calling get_cpu_device() on it, so this won't work. That leaves us with: int ret; if (invalid_logical_cpuid(pr->id) || !cpu_present(pr->id)) { /* x86 et.al. path */ ret = acpi_processor_make_present(pr); } else if (!get_cpu_device(pr->id)) { /* Arm64 path */ ret = acpi_processor_make_enabled(pr); } else { ret = 0; } if (ret) return ret; Now, the next transformation would be to move !get_cpu_device(pr->id) into acpi_processor_make_enabled() which would eliminate one of those if() legs. Now, if we want to somehow make the call to arch_regster_cpu() common in these two paths, the next question is what are the _precise_ semantics of acpi_map_cpu(), particularly with respect to it modifying pr->id. Is it guaranteed to always give the same result for the same processor described in ACPI? What acpi_map_cpu() anyway, I can find no documentation for it. Then there's the question whether calling acpi_unmap_cpu() should be done on the failure path if arch_register_cpu() fails, which is done for the x86 path but not the Arm64 path. Should it be done for the Arm64 path? I've no idea, but as Arm64 doesn't implement either of these two functions, I guess they could be stubbed out and thus be no-ops - but then we open a hole where if pr->id is invalid, we end up passing that invalid value to arch_register_cpu() which I'm quite sure will explode with a negative CPU number. So, to my mind, what you're effectively asking for is a total rewrite of all the code in and called by acpi_processor_get_info()... and that is not something I am willing to do (because it's too far outside of my knowledge area.) As I said in my reply to patch 1, I think your comments on patch 2 make Arm64 vcpu hotplug unachievable in a reasonable time frame, and certainly outside the bounds of what I can do to progress this. So, at this point I'm going to stand down from further participation with this patch set as I believe I've reached the limit of what I can do to progress it. -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last! 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 EB601C48BC3 for ; Tue, 20 Feb 2024 15:14:34 +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:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=9eRWFQDDzWXVDZZBlXl6J1TvbZFxq0fCOzpTfekV0DE=; b=z4ACwPY+gMYN8R 7ZAXkT96SEqgxrtnPfY5jOlDYjAs47vuDxyShjg+tL3XXjHpGJvm0p7Wz90pmhrCYte4lovTqaCCM Ihsq8HboEZlxkFWHQcpTH8T8GxNG48u1Hc78aV6VbNP/JxrqvM1DPjNEDBjpVabBiqRSA7Q9gVKen f57OC1ZL1mPbmmGvRHFOR8qjlsd8qgXL2vOmtDK/Pbml/yW3lWro+8a66GcuGIQmqXNksJtAntDZj qexSl7UGpAB2GAOVGDr8MkxFJ8RX5D31SMtLwiuUjs/I2f2XTLpTBVWlPrp2bHyRfzpHlWm5LvncK jSu+NSzDrQ3RejM8J9LA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rcRpD-0000000FDjJ-2uyc; Tue, 20 Feb 2024 15:14:27 +0000 Received: from pandora.armlinux.org.uk ([2001:4d48:ad52:32c8:5054:ff:fe00:142]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rcRp5-0000000FDgi-30bm; Tue, 20 Feb 2024 15:14:25 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2019; h=Sender:In-Reply-To: Content-Transfer-Encoding:Content-Type:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date: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=qgc8OUZCtZPjwVAIjMqiHy7ikwaI1Mbu1Mp1IdFRzDs=; b=Xy5iv0WrTLeAO0Yk5KZRnMdKyj P5Il3QQ+baeCRbUTHw+M2pQGpzCvY2kVMWyp3dXDSELRc5Ju3nfd11YBuUEHjVI4tFW2/xraLQejU 8tft/vHldbP7aGpknVnTEenRzyIrR0qgmIZkTDpzWNYBWSARs/hgaqJkstanzehwL6LPfJLIeqFLo gUb/82YcOQPZlEGA8PE5OTomL+YF+FqTubxG54uf45edRw2uSwN7RfBx+Du1NGHDAZjqfMWrmpglo yS8bLYhbsuhKYbVHwDGhCbqZMUPo3WgWbTMTAIMeCbEX6XIBN4y0pMZBZKVgW6FRGfRXxX28yVi92 FpAy11Fw==; Received: from shell.armlinux.org.uk ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:45522) by pandora.armlinux.org.uk with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1rcRoq-00033P-2v; Tue, 20 Feb 2024 15:14:05 +0000 Received: from linux by shell.armlinux.org.uk with local (Exim 4.94.2) (envelope-from ) id 1rcRok-0000xX-ST; Tue, 20 Feb 2024 15:13:58 +0000 Date: Tue, 20 Feb 2024 15:13:58 +0000 From: "Russell King (Oracle)" To: "Rafael J. Wysocki" Cc: 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, linux-riscv@lists.infradead.org, kvmarm@lists.linux.dev, x86@kernel.org, acpica-devel@lists.linuxfoundation.org, linux-csky@vger.kernel.org, linux-doc@vger.kernel.org, linux-ia64@vger.kernel.org, linux-parisc@vger.kernel.org, Salil Mehta , Jean-Philippe Brucker , jianyong.wu@arm.com, justin.he@arm.com, James Morse , Jonathan Cameron Subject: Re: [PATCH RFC v4 02/15] ACPI: processor: Register all CPUs from acpi_processor_get_info() Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240220_071419_932651_A326AD3D X-CRM114-Status: GOOD ( 52.76 ) 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 T24gVHVlLCBGZWIgMjAsIDIwMjQgYXQgMTE6Mjc6MTVBTSArMDAwMCwgUnVzc2VsbCBLaW5nIChP cmFjbGUpIHdyb3RlOgo+IE9uIFRodSwgRmViIDE1LCAyMDI0IGF0IDA4OjIyOjI5UE0gKzAxMDAs IFJhZmFlbCBKLiBXeXNvY2tpIHdyb3RlOgo+ID4gT24gV2VkLCBKYW4gMzEsIDIwMjQgYXQgNTo1 MOKAr1BNIFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+IHdyb3RlOgo+ ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMgYi9kcml2ZXJz L2FjcGkvYWNwaV9wcm9jZXNzb3IuYwo+ID4gPiBpbmRleCBjZjdjMWNjYTY5ZGQuLmE2OGM0NzVj ZGVhNSAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMKPiA+ ID4gKysrIGIvZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMKPiA+ID4gQEAgLTMxNCw2ICsz MTQsMTggQEAgc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9nZXRfaW5mbyhzdHJ1Y3QgYWNwaV9k ZXZpY2UgKmRldmljZSkKPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgY3B1ZnJlcV9hZGRf ZGV2aWNlKCJhY3BpLWNwdWZyZXEiKTsKPiA+ID4gICAgICAgICB9Cj4gPiA+Cj4gPiA+ICsgICAg ICAgLyoKPiA+ID4gKyAgICAgICAgKiBSZWdpc3RlciBDUFVzIHRoYXQgYXJlIHByZXNlbnQuIGdl dF9jcHVfZGV2aWNlKCkgaXMgdXNlZCB0byBza2lwCj4gPiA+ICsgICAgICAgICogZHVwbGljYXRl IENQVSBkZXNjcmlwdGlvbnMgZnJvbSBmaXJtd2FyZS4KPiA+ID4gKyAgICAgICAgKi8KPiA+ID4g KyAgICAgICBpZiAoIWludmFsaWRfbG9naWNhbF9jcHVpZChwci0+aWQpICYmIGNwdV9wcmVzZW50 KHByLT5pZCkgJiYKPiA+ID4gKyAgICAgICAgICAgIWdldF9jcHVfZGV2aWNlKHByLT5pZCkpIHsK PiA+ID4gKyAgICAgICAgICAgICAgIGludCByZXQgPSBhcmNoX3JlZ2lzdGVyX2NwdShwci0+aWQp Owo+ID4gPiArCj4gPiA+ICsgICAgICAgICAgICAgICBpZiAocmV0KQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gPiArICAgICAgIH0KPiA+ID4gKwo+ID4gPiAg ICAgICAgIC8qCj4gPiA+ICAgICAgICAgICogIEV4dHJhIFByb2Nlc3NvciBvYmplY3RzIG1heSBi ZSBlbnVtZXJhdGVkIG9uIE1QIHN5c3RlbXMgd2l0aAo+ID4gPiAgICAgICAgICAqICBsZXNzIHRo YW4gdGhlIG1heCAjIG9mIENQVXMuIFRoZXkgc2hvdWxkIGJlIGlnbm9yZWQgX2lmZgo+ID4gCj4g PiBUaGlzIGlzIGludGVyZXN0aW5nLCBiZWNhdXNlIHJpZ2h0IGJlbG93IHRoZXJlIGlzIHRoZSBm b2xsb3dpbmcgY29kZToKPiA+IAo+ID4gICAgIGlmIChpbnZhbGlkX2xvZ2ljYWxfY3B1aWQocHIt PmlkKSB8fCAhY3B1X3ByZXNlbnQocHItPmlkKSkgewo+ID4gICAgICAgICBpbnQgcmV0ID0gYWNw aV9wcm9jZXNzb3JfaG90YWRkX2luaXQocHIpOwo+ID4gCj4gPiAgICAgICAgIGlmIChyZXQpCj4g PiAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gICAgIH0KPiA+IAo+ID4gYW5kIGFjcGlfcHJv Y2Vzc29yX2hvdGFkZF9pbml0KCkgZXNzZW50aWFsbHkgY2FsbHMgYXJjaF9yZWdpc3Rlcl9jcHUo KQo+ID4gd2l0aCBzb21lIGV4dHJhIHRoaW5ncyBhcm91bmQgaXQgKG1vcmUgYWJvdXQgdGhhdCBi ZWxvdykuCj4gPiAKPiA+IEkgZG8gcmVhbGl6ZSB0aGF0IGFjcGlfcHJvY2Vzc29yX2hvdGFkZF9p bml0KCkgaXMgZGVmaW5lZCB1bmRlcgo+ID4gQ09ORklHX0FDUElfSE9UUExVR19DUFUsIHNvIGZv ciB0aGUgc2FrZSBvZiB0aGUgYXJndW1lbnQgbGV0J3MKPiA+IGNvbnNpZGVyIGFuIGFyY2hpdGVj dHVyZSB3aGVyZSBDT05GSUdfQUNQSV9IT1RQTFVHX0NQVSBpcyBzZXQuCj4gPiAKPiA+IFNvIHdo eSBhcmUgdGhlIHR3byBjb25kaXRpb25hbHMgdGhhdCBhbG1vc3QgY29udHJhZGljdCBlYWNoIG90 aGVyIGJvdGgKPiA+IG5lZWRlZD8gIEl0IGxvb2tzIGxpa2UgdGhlIG5ldyBjb2RlIGNvdWxkIGJl IGNvbWJpbmVkIHdpdGgKPiA+IGFjcGlfcHJvY2Vzc29yX2hvdGFkZF9pbml0KCkgdG8gZG8gdGhl IHJpZ2h0IHRoaW5nIGluIGFsbCBjYXNlcy4KPiA+IAo+ID4gTm93LCBhY3BpX3Byb2Nlc3Nvcl9o b3RhZGRfaW5pdCgpIGRvZXMgc29tZSBleHRyYSB0aGluZ3MgdGhhdCBsb29rCj4gPiBsaWtlIHRo ZXkgc2hvdWxkIGJlIGRvbmUgYnkgdGhlIG5ldyBjb2RlIHRvby4KPiA+IAo+ID4gMS4gSXQgY2hl Y2tzIGludmFsaWRfcGh5c19jcHVpZCgpIHdoaWNoIGFwcGVhcnMgdG8gYmUgYSBnb29kIGlkZWEg dG8gbWUuCj4gPiAKPiA+IDIuIEl0IHVzZXMgbG9ja2luZyBhcm91bmQgYXJjaF9yZWdpc3Rlcl9j cHUoKSB3aGljaCBkb2Vzbid0IHNlZW0KPiA+IHVucmVhc29uYWJsZSBlaXRoZXIuCj4gPiAKPiA+ IDMuIEl0IGNhbGxzIGFjcGlfbWFwX2NwdSgpIGFuZCBJJ20gbm90IHN1cmUgd2h5IHRoaXMgaXMg bm90IGRvbmUgYnkKPiA+IHRoZSBuZXcgY29kZS4KPiA+IAo+ID4gVGhlIG9ubHkgdGhpbmcgdGhh dCBjYW4gYmUgZHJvcHBlZCBmcm9tIGl0IGlzIHRoZSBfU1RBIGNoZWNrIEFGQUlDUywKPiA+IGJl Y2F1c2UgYWNwaV9wcm9jZXNzb3JfYWRkKCkgd29uJ3QgZXZlbiBiZSBjYWxsZWQgaWYgdGhlIENQ VSBpcyBub3QKPiA+IHByZXNlbnQgKGFuZCBub3QgZW5hYmxlZCBhZnRlciB0aGUgZmlyc3QgcGF0 Y2gpLgo+ID4gCj4gPiBTbyB3aHkgZG9lcyB0aGUgY29kZSBub3QgZG8gMSAtIDMgYWJvdmU/Cj4g Cj4gSG9uZXN0bHksIEknbSBvdXQgb2YgbXkgZGVwdGggd2l0aCB0aGlzIGFuZCBjYW4ndCBhbnN3 ZXIgeW91cgo+IHF1ZXN0aW9ucyAtIGFuZCBJIHJlYWxseSBkb24ndCB3YW50IHRvIHRyeSBmaWRk bGluZyB3aXRoIHRoaXMgY29kZQo+IGJlY2F1c2UgaXQncyBqdXN0IHRvbyBpY2t5IChldmVuIGlu IGl0cyBjdXJyZW50IGZvcm0gaW4gbWFpbmxpbmUpCj4gdG8gYmUgdW5kZXJzdGFuZGFibGUgdG8g YW55b25lIHdobyBoYXNuJ3QgZ2FpbmVkIGEgZGV0YWlsZWQga25vd2xlZGdlCj4gb2YgdGhpcyBj b2RlLgo+IAo+IEl0J3MgZ29pbmcgdG8gcmVxdWlyZSBhIGxvdCBvZiBhbmFseXNpcyAtIGhvdyBh Y3BpX21hcF9jcHVpZCgpIGJlaGF2ZXMKPiBpbiBhbGwgY2lyY3Vtc3RhbmNlcywgd2hhdCB0aGlz IG1lYW5zIGZvciBpbnZhbGlkX2xvZ2ljYWxfY3B1aWQoKSBhbmQKPiBpbnZhbGlkX3BoeXNfY3B1 aWQoKSwgd2hhdCBwYXRocyB3aWxsIGJlIHRha2VuIGluIGVhY2ggY2FzZS4gVGhpcyBjb2RlCj4g aXMgYWxyZWFkeSBqdXN0IHRvbyBoYWlyeSBmb3Igc29tZW9uZSB3aG8gaXNuJ3QgYW4gZXhwZXJp ZW5jZWQgQUNQSQo+IGhhY2tlciB0byBiZSBhYmxlIHRvIGZvbGxvdyBhbmQgSSBkb24ndCBzZWUg YW4gb2J2aW91cyB3YXkgdG8gbWFrZSBpdAo+IG1vcmUgcmVhZGFibGUuCj4gCj4gSmFtZXMnIGFk ZGl0aW9ucyBtYWtlIGl0IGV2ZW4gbW9yZSBjb21wbGV4IGFuZCBsZXNzIHJlYWRhYmxlLgoKQXMg YW4gaWxsdXN0cmF0aW9uIG9mIHRoZSBwcm9ibGVtcyBJJ20gaGF2aW5nIGhlcmUsIEkgd2FzIGp1 c3Qgd3JpdGluZwphIHJlcGx5IHRvIHRoaXMgd2l0aCBhIHN1Z2dlc3Rpb24gb2YgdHJhbnNmb3Jt aW5nIHRoaXMgY29kZSB1bHRpbWF0ZWx5CnRvOgoKCWlmICghZ2V0X2NwdV9kZXZpY2UocHItPmlk KSkgewoJCWludCByZXQ7CgoJCWlmICghaW52YWxpZF9sb2dpY2FsX2NwdWlkKHByLT5pZCkgJiYg Y3B1X3ByZXNlbnQocHItPmlkKSkKCQkJcmV0ID0gYWNwaV9wcm9jZXNzb3JfbWFrZV9lbmFibGVk KHByKTsKCQllbHNlCgkJCXJldCA9IGFjcGlfcHJvY2Vzc29yX21ha2VfcHJlc2VudChwcik7CgoJ CWlmIChyZXQpCgkJCXJldHVybiByZXQ7Cgl9CgooYWNwaV9wcm9jZXNzb3JfbWFrZV9wcmVzZW50 KCkgd291bGQgYmUgYWNwaV9wcm9jZXNzb3JfaG90YWRkX2luaXQoKQphbmQgYWNwaV9wcm9jZXNz b3JfbWFrZV9lbmFibGVkKCkgd291bGQgYmUgYXJjaF9yZWdpc3Rlcl9jcHUoKSBhdCB0aGlzCnBv aW50LikKClRoZW4gSSByZWFsaXNlZCB0aGF0J3MgYSBiYWQgaWRlYSAtIGJlY2F1c2Ugd2UgcmVh bGx5IG5lZWQgdG8gY2hlY2sKdGhhdCBwci0+aWQgaXMgdmFsaWQgYmVmb3JlIGNhbGxpbmcgZ2V0 X2NwdV9kZXZpY2UoKSBvbiBpdCwgc28gdGhpcwp3b24ndCB3b3JrLiBUaGF0IGxlYXZlcyB1cyB3 aXRoOgoKCWludCByZXQ7CgoJaWYgKGludmFsaWRfbG9naWNhbF9jcHVpZChwci0+aWQpIHx8ICFj cHVfcHJlc2VudChwci0+aWQpKSB7CgkJLyogeDg2IGV0LmFsLiBwYXRoICovCgkJcmV0ID0gYWNw aV9wcm9jZXNzb3JfbWFrZV9wcmVzZW50KHByKTsKCX0gZWxzZSBpZiAoIWdldF9jcHVfZGV2aWNl KHByLT5pZCkpIHsKCQkvKiBBcm02NCBwYXRoICovCgkJcmV0ID0gYWNwaV9wcm9jZXNzb3JfbWFr ZV9lbmFibGVkKHByKTsKCX0gZWxzZSB7CgkJcmV0ID0gMDsKCX0KCglpZiAocmV0KQoJCXJldHVy biByZXQ7CgpOb3csIHRoZSBuZXh0IHRyYW5zZm9ybWF0aW9uIHdvdWxkIGJlIHRvIG1vdmUgIWdl dF9jcHVfZGV2aWNlKHByLT5pZCkKaW50byBhY3BpX3Byb2Nlc3Nvcl9tYWtlX2VuYWJsZWQoKSB3 aGljaCB3b3VsZCBlbGltaW5hdGUgb25lIG9mIHRob3NlCmlmKCkgbGVncy4KCk5vdywgaWYgd2Ug d2FudCB0byBzb21laG93IG1ha2UgdGhlIGNhbGwgdG8gYXJjaF9yZWdzdGVyX2NwdSgpIGNvbW1v bgppbiB0aGVzZSB0d28gcGF0aHMsIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIHdoYXQgYXJlIHRoZSBf cHJlY2lzZV8Kc2VtYW50aWNzIG9mIGFjcGlfbWFwX2NwdSgpLCBwYXJ0aWN1bGFybHkgd2l0aCBy ZXNwZWN0IHRvIGl0Cm1vZGlmeWluZyBwci0+aWQuIElzIGl0IGd1YXJhbnRlZWQgdG8gYWx3YXlz IGdpdmUgdGhlIHNhbWUgcmVzdWx0CmZvciB0aGUgc2FtZSBwcm9jZXNzb3IgZGVzY3JpYmVkIGlu IEFDUEk/IFdoYXQgYWNwaV9tYXBfY3B1KCkgYW55d2F5LApJIGNhbiBmaW5kIG5vIGRvY3VtZW50 YXRpb24gZm9yIGl0LgoKVGhlbiB0aGVyZSdzIHRoZSBxdWVzdGlvbiB3aGV0aGVyIGNhbGxpbmcg YWNwaV91bm1hcF9jcHUoKSBzaG91bGQgYmUKZG9uZSBvbiB0aGUgZmFpbHVyZSBwYXRoIGlmIGFy Y2hfcmVnaXN0ZXJfY3B1KCkgZmFpbHMsIHdoaWNoIGlzIGRvbmUKZm9yIHRoZSB4ODYgcGF0aCBi dXQgbm90IHRoZSBBcm02NCBwYXRoLiBTaG91bGQgaXQgYmUgZG9uZSBmb3IgdGhlCkFybTY0IHBh dGg/IEkndmUgbm8gaWRlYSwgYnV0IGFzIEFybTY0IGRvZXNuJ3QgaW1wbGVtZW50IGVpdGhlciBv Zgp0aGVzZSB0d28gZnVuY3Rpb25zLCBJIGd1ZXNzIHRoZXkgY291bGQgYmUgc3R1YmJlZCBvdXQg YW5kIHRodXMgYmUKbm8tb3BzIC0gYnV0IHRoZW4gd2Ugb3BlbiBhIGhvbGUgd2hlcmUgaWYgcHIt PmlkIGlzIGludmFsaWQsIHdlCmVuZCB1cCBwYXNzaW5nIHRoYXQgaW52YWxpZCB2YWx1ZSB0byBh cmNoX3JlZ2lzdGVyX2NwdSgpIHdoaWNoIEknbQpxdWl0ZSBzdXJlIHdpbGwgZXhwbG9kZSB3aXRo IGEgbmVnYXRpdmUgQ1BVIG51bWJlci4KClNvLCB0byBteSBtaW5kLCB3aGF0IHlvdSdyZSBlZmZl Y3RpdmVseSBhc2tpbmcgZm9yIGlzIGEgdG90YWwgcmV3cml0ZQpvZiBhbGwgdGhlIGNvZGUgaW4g YW5kIGNhbGxlZCBieSBhY3BpX3Byb2Nlc3Nvcl9nZXRfaW5mbygpLi4uIGFuZCB0aGF0CmlzIG5v dCBzb21ldGhpbmcgSSBhbSB3aWxsaW5nIHRvIGRvIChiZWNhdXNlIGl0J3MgdG9vIGZhciBvdXRz aWRlIG9mCm15IGtub3dsZWRnZSBhcmVhLikKCkFzIEkgc2FpZCBpbiBteSByZXBseSB0byBwYXRj aCAxLCBJIHRoaW5rIHlvdXIgY29tbWVudHMgb24gcGF0Y2ggMgptYWtlIEFybTY0IHZjcHUgaG90 cGx1ZyB1bmFjaGlldmFibGUgaW4gYSByZWFzb25hYmxlIHRpbWUgZnJhbWUsIGFuZApjZXJ0YWlu bHkgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHdoYXQgSSBjYW4gZG8gdG8gcHJvZ3Jlc3MgdGhpcy4K ClNvLCBhdCB0aGlzIHBvaW50IEknbSBnb2luZyB0byBzdGFuZCBkb3duIGZyb20gZnVydGhlciBw YXJ0aWNpcGF0aW9uCndpdGggdGhpcyBwYXRjaCBzZXQgYXMgSSBiZWxpZXZlIEkndmUgcmVhY2hl ZCB0aGUgbGltaXQgb2Ygd2hhdCBJIGNhbgpkbyB0byBwcm9ncmVzcyBpdC4KCi0tIApSTUsncyBQ YXRjaCBzeXN0ZW06IGh0dHBzOi8vd3d3LmFybWxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvcGF0Y2hl cy8KRlRUUCBpcyBoZXJlISA4ME1icHMgZG93biAxME1icHMgdXAuIERlY2VudCBjb25uZWN0aXZp dHkgYXQgbGFzdCEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcmlz Y3YK 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 ADAD1C48BC3 for ; Tue, 20 Feb 2024 15:14:43 +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:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=5sh7hC0vIqaC8dbwxLIZlH239tvS7XTZoQFyWaWEWm4=; b=eCdEAjD1MOT5Lo sW4/FCheI3kKLLnRmXjDTL5ZAFpneBd141wEtzuPIsZO1ahXNLH9P6XiW7qaxDz1xjgNv2kbnr0Gd hc0OjpIqVPstxDhZGot6QkBHbwac6ZM9xw+ppgbKmOZaAlodHT5ezSe5FDqdDDi8lv3RB4mDa1/AZ 2lAzHuOF119oWrKabNwnxpvIHkdZZRtnLaF9NnHeiXQLXjHCy0vg0/DevMR9pWaYbEucCDkwgJAn9 KQm6W50MYIG1insAybGk7hstdKrs0PvmiuGfSvitSpDdRX0dWiu798G2q/Z7YU+UWiMAWJjoJbp+C Bwu+KtafsXGwX/iYHYlw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rcRpD-0000000FDiy-0Klm; Tue, 20 Feb 2024 15:14:27 +0000 Received: from pandora.armlinux.org.uk ([2001:4d48:ad52:32c8:5054:ff:fe00:142]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rcRp5-0000000FDgi-30bm; Tue, 20 Feb 2024 15:14:25 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2019; h=Sender:In-Reply-To: Content-Transfer-Encoding:Content-Type:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date: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=qgc8OUZCtZPjwVAIjMqiHy7ikwaI1Mbu1Mp1IdFRzDs=; b=Xy5iv0WrTLeAO0Yk5KZRnMdKyj P5Il3QQ+baeCRbUTHw+M2pQGpzCvY2kVMWyp3dXDSELRc5Ju3nfd11YBuUEHjVI4tFW2/xraLQejU 8tft/vHldbP7aGpknVnTEenRzyIrR0qgmIZkTDpzWNYBWSARs/hgaqJkstanzehwL6LPfJLIeqFLo gUb/82YcOQPZlEGA8PE5OTomL+YF+FqTubxG54uf45edRw2uSwN7RfBx+Du1NGHDAZjqfMWrmpglo yS8bLYhbsuhKYbVHwDGhCbqZMUPo3WgWbTMTAIMeCbEX6XIBN4y0pMZBZKVgW6FRGfRXxX28yVi92 FpAy11Fw==; Received: from shell.armlinux.org.uk ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:45522) by pandora.armlinux.org.uk with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1rcRoq-00033P-2v; Tue, 20 Feb 2024 15:14:05 +0000 Received: from linux by shell.armlinux.org.uk with local (Exim 4.94.2) (envelope-from ) id 1rcRok-0000xX-ST; Tue, 20 Feb 2024 15:13:58 +0000 Date: Tue, 20 Feb 2024 15:13:58 +0000 From: "Russell King (Oracle)" To: "Rafael J. Wysocki" Cc: 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, linux-riscv@lists.infradead.org, kvmarm@lists.linux.dev, x86@kernel.org, acpica-devel@lists.linuxfoundation.org, linux-csky@vger.kernel.org, linux-doc@vger.kernel.org, linux-ia64@vger.kernel.org, linux-parisc@vger.kernel.org, Salil Mehta , Jean-Philippe Brucker , jianyong.wu@arm.com, justin.he@arm.com, James Morse , Jonathan Cameron Subject: Re: [PATCH RFC v4 02/15] ACPI: processor: Register all CPUs from acpi_processor_get_info() Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240220_071419_932651_A326AD3D X-CRM114-Status: GOOD ( 52.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 T24gVHVlLCBGZWIgMjAsIDIwMjQgYXQgMTE6Mjc6MTVBTSArMDAwMCwgUnVzc2VsbCBLaW5nIChP cmFjbGUpIHdyb3RlOgo+IE9uIFRodSwgRmViIDE1LCAyMDI0IGF0IDA4OjIyOjI5UE0gKzAxMDAs IFJhZmFlbCBKLiBXeXNvY2tpIHdyb3RlOgo+ID4gT24gV2VkLCBKYW4gMzEsIDIwMjQgYXQgNTo1 MOKAr1BNIFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+IHdyb3RlOgo+ ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMgYi9kcml2ZXJz L2FjcGkvYWNwaV9wcm9jZXNzb3IuYwo+ID4gPiBpbmRleCBjZjdjMWNjYTY5ZGQuLmE2OGM0NzVj ZGVhNSAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMKPiA+ ID4gKysrIGIvZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMKPiA+ID4gQEAgLTMxNCw2ICsz MTQsMTggQEAgc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9nZXRfaW5mbyhzdHJ1Y3QgYWNwaV9k ZXZpY2UgKmRldmljZSkKPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgY3B1ZnJlcV9hZGRf ZGV2aWNlKCJhY3BpLWNwdWZyZXEiKTsKPiA+ID4gICAgICAgICB9Cj4gPiA+Cj4gPiA+ICsgICAg ICAgLyoKPiA+ID4gKyAgICAgICAgKiBSZWdpc3RlciBDUFVzIHRoYXQgYXJlIHByZXNlbnQuIGdl dF9jcHVfZGV2aWNlKCkgaXMgdXNlZCB0byBza2lwCj4gPiA+ICsgICAgICAgICogZHVwbGljYXRl IENQVSBkZXNjcmlwdGlvbnMgZnJvbSBmaXJtd2FyZS4KPiA+ID4gKyAgICAgICAgKi8KPiA+ID4g KyAgICAgICBpZiAoIWludmFsaWRfbG9naWNhbF9jcHVpZChwci0+aWQpICYmIGNwdV9wcmVzZW50 KHByLT5pZCkgJiYKPiA+ID4gKyAgICAgICAgICAgIWdldF9jcHVfZGV2aWNlKHByLT5pZCkpIHsK PiA+ID4gKyAgICAgICAgICAgICAgIGludCByZXQgPSBhcmNoX3JlZ2lzdGVyX2NwdShwci0+aWQp Owo+ID4gPiArCj4gPiA+ICsgICAgICAgICAgICAgICBpZiAocmV0KQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gPiArICAgICAgIH0KPiA+ID4gKwo+ID4gPiAg ICAgICAgIC8qCj4gPiA+ICAgICAgICAgICogIEV4dHJhIFByb2Nlc3NvciBvYmplY3RzIG1heSBi ZSBlbnVtZXJhdGVkIG9uIE1QIHN5c3RlbXMgd2l0aAo+ID4gPiAgICAgICAgICAqICBsZXNzIHRo YW4gdGhlIG1heCAjIG9mIENQVXMuIFRoZXkgc2hvdWxkIGJlIGlnbm9yZWQgX2lmZgo+ID4gCj4g PiBUaGlzIGlzIGludGVyZXN0aW5nLCBiZWNhdXNlIHJpZ2h0IGJlbG93IHRoZXJlIGlzIHRoZSBm b2xsb3dpbmcgY29kZToKPiA+IAo+ID4gICAgIGlmIChpbnZhbGlkX2xvZ2ljYWxfY3B1aWQocHIt PmlkKSB8fCAhY3B1X3ByZXNlbnQocHItPmlkKSkgewo+ID4gICAgICAgICBpbnQgcmV0ID0gYWNw aV9wcm9jZXNzb3JfaG90YWRkX2luaXQocHIpOwo+ID4gCj4gPiAgICAgICAgIGlmIChyZXQpCj4g PiAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gICAgIH0KPiA+IAo+ID4gYW5kIGFjcGlfcHJv Y2Vzc29yX2hvdGFkZF9pbml0KCkgZXNzZW50aWFsbHkgY2FsbHMgYXJjaF9yZWdpc3Rlcl9jcHUo KQo+ID4gd2l0aCBzb21lIGV4dHJhIHRoaW5ncyBhcm91bmQgaXQgKG1vcmUgYWJvdXQgdGhhdCBi ZWxvdykuCj4gPiAKPiA+IEkgZG8gcmVhbGl6ZSB0aGF0IGFjcGlfcHJvY2Vzc29yX2hvdGFkZF9p bml0KCkgaXMgZGVmaW5lZCB1bmRlcgo+ID4gQ09ORklHX0FDUElfSE9UUExVR19DUFUsIHNvIGZv ciB0aGUgc2FrZSBvZiB0aGUgYXJndW1lbnQgbGV0J3MKPiA+IGNvbnNpZGVyIGFuIGFyY2hpdGVj dHVyZSB3aGVyZSBDT05GSUdfQUNQSV9IT1RQTFVHX0NQVSBpcyBzZXQuCj4gPiAKPiA+IFNvIHdo eSBhcmUgdGhlIHR3byBjb25kaXRpb25hbHMgdGhhdCBhbG1vc3QgY29udHJhZGljdCBlYWNoIG90 aGVyIGJvdGgKPiA+IG5lZWRlZD8gIEl0IGxvb2tzIGxpa2UgdGhlIG5ldyBjb2RlIGNvdWxkIGJl IGNvbWJpbmVkIHdpdGgKPiA+IGFjcGlfcHJvY2Vzc29yX2hvdGFkZF9pbml0KCkgdG8gZG8gdGhl IHJpZ2h0IHRoaW5nIGluIGFsbCBjYXNlcy4KPiA+IAo+ID4gTm93LCBhY3BpX3Byb2Nlc3Nvcl9o b3RhZGRfaW5pdCgpIGRvZXMgc29tZSBleHRyYSB0aGluZ3MgdGhhdCBsb29rCj4gPiBsaWtlIHRo ZXkgc2hvdWxkIGJlIGRvbmUgYnkgdGhlIG5ldyBjb2RlIHRvby4KPiA+IAo+ID4gMS4gSXQgY2hl Y2tzIGludmFsaWRfcGh5c19jcHVpZCgpIHdoaWNoIGFwcGVhcnMgdG8gYmUgYSBnb29kIGlkZWEg dG8gbWUuCj4gPiAKPiA+IDIuIEl0IHVzZXMgbG9ja2luZyBhcm91bmQgYXJjaF9yZWdpc3Rlcl9j cHUoKSB3aGljaCBkb2Vzbid0IHNlZW0KPiA+IHVucmVhc29uYWJsZSBlaXRoZXIuCj4gPiAKPiA+ IDMuIEl0IGNhbGxzIGFjcGlfbWFwX2NwdSgpIGFuZCBJJ20gbm90IHN1cmUgd2h5IHRoaXMgaXMg bm90IGRvbmUgYnkKPiA+IHRoZSBuZXcgY29kZS4KPiA+IAo+ID4gVGhlIG9ubHkgdGhpbmcgdGhh dCBjYW4gYmUgZHJvcHBlZCBmcm9tIGl0IGlzIHRoZSBfU1RBIGNoZWNrIEFGQUlDUywKPiA+IGJl Y2F1c2UgYWNwaV9wcm9jZXNzb3JfYWRkKCkgd29uJ3QgZXZlbiBiZSBjYWxsZWQgaWYgdGhlIENQ VSBpcyBub3QKPiA+IHByZXNlbnQgKGFuZCBub3QgZW5hYmxlZCBhZnRlciB0aGUgZmlyc3QgcGF0 Y2gpLgo+ID4gCj4gPiBTbyB3aHkgZG9lcyB0aGUgY29kZSBub3QgZG8gMSAtIDMgYWJvdmU/Cj4g Cj4gSG9uZXN0bHksIEknbSBvdXQgb2YgbXkgZGVwdGggd2l0aCB0aGlzIGFuZCBjYW4ndCBhbnN3 ZXIgeW91cgo+IHF1ZXN0aW9ucyAtIGFuZCBJIHJlYWxseSBkb24ndCB3YW50IHRvIHRyeSBmaWRk bGluZyB3aXRoIHRoaXMgY29kZQo+IGJlY2F1c2UgaXQncyBqdXN0IHRvbyBpY2t5IChldmVuIGlu IGl0cyBjdXJyZW50IGZvcm0gaW4gbWFpbmxpbmUpCj4gdG8gYmUgdW5kZXJzdGFuZGFibGUgdG8g YW55b25lIHdobyBoYXNuJ3QgZ2FpbmVkIGEgZGV0YWlsZWQga25vd2xlZGdlCj4gb2YgdGhpcyBj b2RlLgo+IAo+IEl0J3MgZ29pbmcgdG8gcmVxdWlyZSBhIGxvdCBvZiBhbmFseXNpcyAtIGhvdyBh Y3BpX21hcF9jcHVpZCgpIGJlaGF2ZXMKPiBpbiBhbGwgY2lyY3Vtc3RhbmNlcywgd2hhdCB0aGlz IG1lYW5zIGZvciBpbnZhbGlkX2xvZ2ljYWxfY3B1aWQoKSBhbmQKPiBpbnZhbGlkX3BoeXNfY3B1 aWQoKSwgd2hhdCBwYXRocyB3aWxsIGJlIHRha2VuIGluIGVhY2ggY2FzZS4gVGhpcyBjb2RlCj4g aXMgYWxyZWFkeSBqdXN0IHRvbyBoYWlyeSBmb3Igc29tZW9uZSB3aG8gaXNuJ3QgYW4gZXhwZXJp ZW5jZWQgQUNQSQo+IGhhY2tlciB0byBiZSBhYmxlIHRvIGZvbGxvdyBhbmQgSSBkb24ndCBzZWUg YW4gb2J2aW91cyB3YXkgdG8gbWFrZSBpdAo+IG1vcmUgcmVhZGFibGUuCj4gCj4gSmFtZXMnIGFk ZGl0aW9ucyBtYWtlIGl0IGV2ZW4gbW9yZSBjb21wbGV4IGFuZCBsZXNzIHJlYWRhYmxlLgoKQXMg YW4gaWxsdXN0cmF0aW9uIG9mIHRoZSBwcm9ibGVtcyBJJ20gaGF2aW5nIGhlcmUsIEkgd2FzIGp1 c3Qgd3JpdGluZwphIHJlcGx5IHRvIHRoaXMgd2l0aCBhIHN1Z2dlc3Rpb24gb2YgdHJhbnNmb3Jt aW5nIHRoaXMgY29kZSB1bHRpbWF0ZWx5CnRvOgoKCWlmICghZ2V0X2NwdV9kZXZpY2UocHItPmlk KSkgewoJCWludCByZXQ7CgoJCWlmICghaW52YWxpZF9sb2dpY2FsX2NwdWlkKHByLT5pZCkgJiYg Y3B1X3ByZXNlbnQocHItPmlkKSkKCQkJcmV0ID0gYWNwaV9wcm9jZXNzb3JfbWFrZV9lbmFibGVk KHByKTsKCQllbHNlCgkJCXJldCA9IGFjcGlfcHJvY2Vzc29yX21ha2VfcHJlc2VudChwcik7CgoJ CWlmIChyZXQpCgkJCXJldHVybiByZXQ7Cgl9CgooYWNwaV9wcm9jZXNzb3JfbWFrZV9wcmVzZW50 KCkgd291bGQgYmUgYWNwaV9wcm9jZXNzb3JfaG90YWRkX2luaXQoKQphbmQgYWNwaV9wcm9jZXNz b3JfbWFrZV9lbmFibGVkKCkgd291bGQgYmUgYXJjaF9yZWdpc3Rlcl9jcHUoKSBhdCB0aGlzCnBv aW50LikKClRoZW4gSSByZWFsaXNlZCB0aGF0J3MgYSBiYWQgaWRlYSAtIGJlY2F1c2Ugd2UgcmVh bGx5IG5lZWQgdG8gY2hlY2sKdGhhdCBwci0+aWQgaXMgdmFsaWQgYmVmb3JlIGNhbGxpbmcgZ2V0 X2NwdV9kZXZpY2UoKSBvbiBpdCwgc28gdGhpcwp3b24ndCB3b3JrLiBUaGF0IGxlYXZlcyB1cyB3 aXRoOgoKCWludCByZXQ7CgoJaWYgKGludmFsaWRfbG9naWNhbF9jcHVpZChwci0+aWQpIHx8ICFj cHVfcHJlc2VudChwci0+aWQpKSB7CgkJLyogeDg2IGV0LmFsLiBwYXRoICovCgkJcmV0ID0gYWNw aV9wcm9jZXNzb3JfbWFrZV9wcmVzZW50KHByKTsKCX0gZWxzZSBpZiAoIWdldF9jcHVfZGV2aWNl KHByLT5pZCkpIHsKCQkvKiBBcm02NCBwYXRoICovCgkJcmV0ID0gYWNwaV9wcm9jZXNzb3JfbWFr ZV9lbmFibGVkKHByKTsKCX0gZWxzZSB7CgkJcmV0ID0gMDsKCX0KCglpZiAocmV0KQoJCXJldHVy biByZXQ7CgpOb3csIHRoZSBuZXh0IHRyYW5zZm9ybWF0aW9uIHdvdWxkIGJlIHRvIG1vdmUgIWdl dF9jcHVfZGV2aWNlKHByLT5pZCkKaW50byBhY3BpX3Byb2Nlc3Nvcl9tYWtlX2VuYWJsZWQoKSB3 aGljaCB3b3VsZCBlbGltaW5hdGUgb25lIG9mIHRob3NlCmlmKCkgbGVncy4KCk5vdywgaWYgd2Ug d2FudCB0byBzb21laG93IG1ha2UgdGhlIGNhbGwgdG8gYXJjaF9yZWdzdGVyX2NwdSgpIGNvbW1v bgppbiB0aGVzZSB0d28gcGF0aHMsIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIHdoYXQgYXJlIHRoZSBf cHJlY2lzZV8Kc2VtYW50aWNzIG9mIGFjcGlfbWFwX2NwdSgpLCBwYXJ0aWN1bGFybHkgd2l0aCBy ZXNwZWN0IHRvIGl0Cm1vZGlmeWluZyBwci0+aWQuIElzIGl0IGd1YXJhbnRlZWQgdG8gYWx3YXlz IGdpdmUgdGhlIHNhbWUgcmVzdWx0CmZvciB0aGUgc2FtZSBwcm9jZXNzb3IgZGVzY3JpYmVkIGlu IEFDUEk/IFdoYXQgYWNwaV9tYXBfY3B1KCkgYW55d2F5LApJIGNhbiBmaW5kIG5vIGRvY3VtZW50 YXRpb24gZm9yIGl0LgoKVGhlbiB0aGVyZSdzIHRoZSBxdWVzdGlvbiB3aGV0aGVyIGNhbGxpbmcg YWNwaV91bm1hcF9jcHUoKSBzaG91bGQgYmUKZG9uZSBvbiB0aGUgZmFpbHVyZSBwYXRoIGlmIGFy Y2hfcmVnaXN0ZXJfY3B1KCkgZmFpbHMsIHdoaWNoIGlzIGRvbmUKZm9yIHRoZSB4ODYgcGF0aCBi dXQgbm90IHRoZSBBcm02NCBwYXRoLiBTaG91bGQgaXQgYmUgZG9uZSBmb3IgdGhlCkFybTY0IHBh dGg/IEkndmUgbm8gaWRlYSwgYnV0IGFzIEFybTY0IGRvZXNuJ3QgaW1wbGVtZW50IGVpdGhlciBv Zgp0aGVzZSB0d28gZnVuY3Rpb25zLCBJIGd1ZXNzIHRoZXkgY291bGQgYmUgc3R1YmJlZCBvdXQg YW5kIHRodXMgYmUKbm8tb3BzIC0gYnV0IHRoZW4gd2Ugb3BlbiBhIGhvbGUgd2hlcmUgaWYgcHIt PmlkIGlzIGludmFsaWQsIHdlCmVuZCB1cCBwYXNzaW5nIHRoYXQgaW52YWxpZCB2YWx1ZSB0byBh cmNoX3JlZ2lzdGVyX2NwdSgpIHdoaWNoIEknbQpxdWl0ZSBzdXJlIHdpbGwgZXhwbG9kZSB3aXRo IGEgbmVnYXRpdmUgQ1BVIG51bWJlci4KClNvLCB0byBteSBtaW5kLCB3aGF0IHlvdSdyZSBlZmZl Y3RpdmVseSBhc2tpbmcgZm9yIGlzIGEgdG90YWwgcmV3cml0ZQpvZiBhbGwgdGhlIGNvZGUgaW4g YW5kIGNhbGxlZCBieSBhY3BpX3Byb2Nlc3Nvcl9nZXRfaW5mbygpLi4uIGFuZCB0aGF0CmlzIG5v dCBzb21ldGhpbmcgSSBhbSB3aWxsaW5nIHRvIGRvIChiZWNhdXNlIGl0J3MgdG9vIGZhciBvdXRz aWRlIG9mCm15IGtub3dsZWRnZSBhcmVhLikKCkFzIEkgc2FpZCBpbiBteSByZXBseSB0byBwYXRj aCAxLCBJIHRoaW5rIHlvdXIgY29tbWVudHMgb24gcGF0Y2ggMgptYWtlIEFybTY0IHZjcHUgaG90 cGx1ZyB1bmFjaGlldmFibGUgaW4gYSByZWFzb25hYmxlIHRpbWUgZnJhbWUsIGFuZApjZXJ0YWlu bHkgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHdoYXQgSSBjYW4gZG8gdG8gcHJvZ3Jlc3MgdGhpcy4K ClNvLCBhdCB0aGlzIHBvaW50IEknbSBnb2luZyB0byBzdGFuZCBkb3duIGZyb20gZnVydGhlciBw YXJ0aWNpcGF0aW9uCndpdGggdGhpcyBwYXRjaCBzZXQgYXMgSSBiZWxpZXZlIEkndmUgcmVhY2hl ZCB0aGUgbGltaXQgb2Ygd2hhdCBJIGNhbgpkbyB0byBwcm9ncmVzcyBpdC4KCi0tIApSTUsncyBQ YXRjaCBzeXN0ZW06IGh0dHBzOi8vd3d3LmFybWxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvcGF0Y2hl cy8KRlRUUCBpcyBoZXJlISA4ME1icHMgZG93biAxME1icHMgdXAuIERlY2VudCBjb25uZWN0aXZp dHkgYXQgbGFzdCEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMu aW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2xpbnV4LWFybS1rZXJuZWwK