From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pandora.armlinux.org.uk (pandora.armlinux.org.uk [78.32.30.218]) (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 EC35B1514D1 for ; Fri, 12 Apr 2024 20:16:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=78.32.30.218 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712952998; cv=none; b=XErqg+qnHDRmmz7zF5rORBMrYV1M498rOqQEXSZMnpEYy6hAIxYilzeKXp8AYDkX5PeBEi9HkaU2RWwZagBE7Z6Xqw/ol2UaOyVbOk/CULieTmWv4lA8azR0bgY5ovDc3Y3UKNLViO9A/+zttJwCj8YNaIYG8L8TpQDbiEvnwmA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712952998; c=relaxed/simple; bh=dKNPqsjHMrgzMlxgRL62bo+88LDPLk0E891/+IWrzZQ=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=maD+aNd+nNrrLjWpmH7XeAyL33avzjgl3ZQy6mMor7GK72JQYpuJ6GknXaXBcQamppaIPpKUzmXoER6UbxyYfqu8Wu+VcH/K9L/apEVh4l5fWbqtauPPt8w7/o4LrdifWIJHNu2vKVBwGQ35I8c1eV4n+2V71cAhVrFxPOGR/CE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=armlinux.org.uk; spf=none smtp.mailfrom=armlinux.org.uk; dkim=pass (2048-bit key) header.d=armlinux.org.uk header.i=@armlinux.org.uk header.b=Kz3jwuZA; arc=none smtp.client-ip=78.32.30.218 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=armlinux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=armlinux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=armlinux.org.uk header.i=@armlinux.org.uk header.b="Kz3jwuZA" 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=ZGFvoma46BCyiMvqt+9PA9y7NlciWRVDAvZYb656yOE=; b=Kz3jwuZAGR4BAUvKYthmWGt7zK 86TtebZmpad+x2kmBlT0FQJRoroGh6xBN22wxTgWoYLN0QUU2TAEzf9wwYNt4VcwidIi1ZZP8NfV+ wGEq98FH6Eh2SVV2bpMFHKawXebvQF+a00O0xwrlH2depUqecvkemMa9PnVaszuHfP2Hi3E45dxrz AP+SVehvxgJYoj1dijJpNlfLmOGXUNtMQcawDCre4DnDAqnatxi4EiF8s8fkacM9Ug42J7jL9F2e2 Z1chwhvtUSuRrnUcSkOPknR5P7RuKcXEGmuFCijvvZ8TJDaH2mLZqPmud+uEsdsMjI8ivzWunEML1 RnOAQEYA==; Received: from shell.armlinux.org.uk ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:52314) by pandora.armlinux.org.uk with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1rvNJr-0002wV-1V; Fri, 12 Apr 2024 21:16:19 +0100 Received: from linux by shell.armlinux.org.uk with local (Exim 4.94.2) (envelope-from ) id 1rvNJo-00086J-Cq; Fri, 12 Apr 2024 21:16:16 +0100 Date: Fri, 12 Apr 2024 21:16:16 +0100 From: "Russell King (Oracle)" To: "Rafael J. Wysocki" Cc: Jonathan Cameron , 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, Miguel Luis , James Morse , Salil Mehta , Jean-Philippe Brucker , Catalin Marinas , Will Deacon , linuxarm@huawei.com, justin.he@arm.com, jianyong.wu@arm.com Subject: Re: [PATCH v5 03/18] ACPI: processor: Register deferred CPUs from acpi_processor_get_info() Message-ID: References: <20240412143719.11398-1-Jonathan.Cameron@huawei.com> <20240412143719.11398-4-Jonathan.Cameron@huawei.com> Precedence: bulk X-Mailing-List: kvmarm@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 Fri, Apr 12, 2024 at 08:30:40PM +0200, Rafael J. Wysocki wrote: > On Fri, Apr 12, 2024 at 4:38 PM Jonathan Cameron > wrote: > > > > From: James Morse > > > > The arm64 specific arch_register_cpu() call may defer CPU registration > > 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=off', 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_processor.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_device *device) > > > > c = &per_cpu(cpu_devices, pr->id); > > ACPI_COMPANION_SET(&c->dev, device); > > + /* > > + * 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 > > -- > > I am still unsure why there need to be two paths calling > arch_register_cpu() in acpi_processor_get_info(). > > 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 = 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 (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 = acpi_map_cpu(pr->handle, pr->phys_id, pr->acpi_id, &pr->id); > if (ret) { > cpus_write_unlock(); > cpu_maps_update_done(); > return ret; > } > ret = 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 = 1; > > 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. It is over this that I walked away from progressing this code, because I don't think it's quite as simple as you make it out to be. Yes, acpi_map_cpu() and acpi_unmap_cpu() are already arch implemented functions, so Arm64 can easily provide stubs for these that do nothing. That never caused me any concern. What does cause me great concern though are the finer details. For example, above you seem to drop the evaluation of _STA for the "make_present" case - I've no idea whether that is something that should be deleted or not (if it is something that can be deleted, then why not delete it now?) As for the cpu locking, I couldn't find anything in arch_register_cpu() that depends on the cpu_maps_update stuff nor needs the cpus_write_lock being taken - so I've no idea why the "make_present" case takes these locks. Finally, the "pr->flags.need_hotplug_init = 1" thing... it's not obvious that this is required - remember that with Arm64's "enabled" toggling, the "processor" is a slice of the system and doesn't actually go away - it's just "not enabled" for use. Again, as "processors" in Arm64 are slices of the system, they have to be fully described in ACPI before the OS boots, and they will be marked as being "present", which means they will be enumerated, and the driver will be probed. Any processor that is not to be used will not have its enabled bit set. It is my understanding that every processor will result in the ACPI processor driver being bound to it whether its enabled or not. The difference between real hotplug and Arm64 hotplug is that real hotplug makes stuff not-present (and thus unenumerable). Arm64 hotplug makes stuff not-enabled which is still enumerable. ... or at least that is my understanding which may not be entirely correct (which is why I stepped down because I feel totally out of my depth with ACPI stuff.) -- 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 AF1ABC00A94 for ; Fri, 12 Apr 2024 20:16:58 +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=qCGTQ+GDik/e99N4LQIW1G0XsPvH26csVKkUsnn6zQg=; b=2tcFaDynSJSz3w bVywLdm84LzfFbli0trx1eC0hRqLiV13GbsFZzPohbcd2eYIbEDUo1J8Z7xhaSV5YPXL07BdtnFQM CwUNrE0O5fFoovKaJNkaJ++FCqfZbJ227h5ADcswQXlV+qnX1QlrF9reoMKyk0EVSjseSkdYhofm9 t1EyGozfraIv2gTMFTUTWeQtkKw24AsoKn3ZX6ggVT9fKNs3QArwbUtnFVAKmgmUL4Fv4r97D/Z43 xZ5pVjPDvFcJvWDb7Pgi3e2YWVjtLpKBuBnmk4ApKXCaHg0FgIkDSh7MX2dG5x7uh4jTnHA40l1Eq 9WFx96MIc85Z4raJAH2g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rvNKH-00000001A0V-283t; Fri, 12 Apr 2024 20:16:45 +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 1rvNKA-000000019xN-1v8g for linux-arm-kernel@lists.infradead.org; Fri, 12 Apr 2024 20:16:42 +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=ZGFvoma46BCyiMvqt+9PA9y7NlciWRVDAvZYb656yOE=; b=Kz3jwuZAGR4BAUvKYthmWGt7zK 86TtebZmpad+x2kmBlT0FQJRoroGh6xBN22wxTgWoYLN0QUU2TAEzf9wwYNt4VcwidIi1ZZP8NfV+ wGEq98FH6Eh2SVV2bpMFHKawXebvQF+a00O0xwrlH2depUqecvkemMa9PnVaszuHfP2Hi3E45dxrz AP+SVehvxgJYoj1dijJpNlfLmOGXUNtMQcawDCre4DnDAqnatxi4EiF8s8fkacM9Ug42J7jL9F2e2 Z1chwhvtUSuRrnUcSkOPknR5P7RuKcXEGmuFCijvvZ8TJDaH2mLZqPmud+uEsdsMjI8ivzWunEML1 RnOAQEYA==; Received: from shell.armlinux.org.uk ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:52314) by pandora.armlinux.org.uk with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1rvNJr-0002wV-1V; Fri, 12 Apr 2024 21:16:19 +0100 Received: from linux by shell.armlinux.org.uk with local (Exim 4.94.2) (envelope-from ) id 1rvNJo-00086J-Cq; Fri, 12 Apr 2024 21:16:16 +0100 Date: Fri, 12 Apr 2024 21:16:16 +0100 From: "Russell King (Oracle)" To: "Rafael J. Wysocki" Cc: Jonathan Cameron , 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, Miguel Luis , James Morse , Salil Mehta , Jean-Philippe Brucker , Catalin Marinas , Will Deacon , linuxarm@huawei.com, justin.he@arm.com, jianyong.wu@arm.com Subject: Re: [PATCH v5 03/18] ACPI: processor: Register deferred CPUs from acpi_processor_get_info() Message-ID: References: <20240412143719.11398-1-Jonathan.Cameron@huawei.com> <20240412143719.11398-4-Jonathan.Cameron@huawei.com> 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-20240412_131638_794999_355370C6 X-CRM114-Status: GOOD ( 48.47 ) 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 T24gRnJpLCBBcHIgMTIsIDIwMjQgYXQgMDg6MzA6NDBQTSArMDIwMCwgUmFmYWVsIEouIFd5c29j a2kgd3JvdGU6Cj4gT24gRnJpLCBBcHIgMTIsIDIwMjQgYXQgNDozOOKAr1BNIEpvbmF0aGFuIENh bWVyb24KPiA8Sm9uYXRoYW4uQ2FtZXJvbkBodWF3ZWkuY29tPiB3cm90ZToKPiA+Cj4gPiBGcm9t OiBKYW1lcyBNb3JzZSA8amFtZXMubW9yc2VAYXJtLmNvbT4KPiA+Cj4gPiBUaGUgYXJtNjQgc3Bl Y2lmaWMgYXJjaF9yZWdpc3Rlcl9jcHUoKSBjYWxsIG1heSBkZWZlciBDUFUgcmVnaXN0cmF0aW9u Cj4gPiB1bnRpbCB0aGUgQUNQSSBpbnRlcnByZXRlciBpcyBhdmFpbGFibGUgYW5kIHRoZSBfU1RB IG1ldGhvZCBjYW4KPiA+IGJlIGV2YWx1YXRlZC4KPiA+Cj4gPiBJZiB0aGlzIG9jY3VycywgdGhl biBhIHNlY29uZCBhdHRlbXB0IGlzIG1hZGUgaW4KPiA+IGFjcGlfcHJvY2Vzc29yX2dldF9pbmZv KCkuIE5vdGUgdGhhdCB0aGUgYXJtNjQgc3BlY2lmaWMgY2FsbCBoYXMKPiA+IG5vdCB5ZXQgYmVl biBhZGRlZCBzbyBmb3Igbm93IHRoaXMgd2lsbCBuZXZlciBiZSBzdWNjZXNzZnVsbHkKPiA+IGNh bGxlZC4KPiA+Cj4gPiBTeXN0ZW1zIGNhbiBzdGlsbCBiZSBib290ZWQgd2l0aCAnYWNwaT1vZmYn LCBvciBub3QgaW5jbHVkZSBhbgo+ID4gQUNQSSBkZXNjcmlwdGlvbiBhdCBhbGwgYXMgaW4gdGhl c2UgY2FzZXMgYXJjaF9yZWdpc3Rlcl9jcHUoKQo+ID4gd2lsbCBub3QgaGF2ZSBkZWZlcnJlZCBy ZWdpc3RyYXRpb24gd2hlbiBmaXJzdCBjYWxsZWQuCj4gPgo+ID4gVGhpcyBtb3ZlcyB0aGUgQ1BV IHJlZ2lzdGVyIGxvZ2ljIGJhY2sgdG8gYSBzdWJzeXNfaW5pdGNhbGwoKSwKPiA+IHdoaWxlIHRo ZSBtZW1vcnkgbm9kZXMgd2lsbCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBlYXJsaWVyLgo+ID4gTm90 ZSB0aGlzIGlzIHdoZXJlIHRoZSBjYWxsIHdhcyBwcmlvciB0byB0aGUgY2xlYW51cCBzZXJpZXMg c28KPiA+IHRoZXJlIHNob3VsZCBiZSBubyBzaWRlIGVmZmVjdHMgb2YgbW92aW5nIGl0IGJhY2sg YWdhaW4gZm9yIHRoaXMKPiA+IHNwZWNpZmljIGNhc2UuCj4gPgo+ID4gW1BBVENIIDAwLzIxXSBJ bml0aWFsIGNsZWFudXBzIGZvciB2Q1BVIEhQLgo+ID4gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcv YWxsL1pWeXolMkZWZTVwUHU4QVdvQUBzaGVsbC5hcm1saW51eC5vcmcudWsvCj4gPgo+ID4gZS5n LiA1Yjk1Zjk0YzNiOWYgKCJ4ODYvdG9wb2xvZ3k6IFN3aXRjaCBvdmVyIHRvIEdFTkVSSUNfQ1BV X0RFVklDRVMiKQo+ID4KPiA+IFNpZ25lZC1vZmYtYnk6IEphbWVzIE1vcnNlIDxqYW1lcy5tb3Jz ZUBhcm0uY29tPgo+ID4gUmV2aWV3ZWQtYnk6IEdhdmluIFNoYW4gPGdzaGFuQHJlZGhhdC5jb20+ Cj4gPiBUZXN0ZWQtYnk6IE1pZ3VlbCBMdWlzIDxtaWd1ZWwubHVpc0BvcmFjbGUuY29tPgo+ID4g VGVzdGVkLWJ5OiBWaXNobnUgUGFqanVyaSA8dmlzaG51QG9zLmFtcGVyZWNvbXB1dGluZy5jb20+ Cj4gPiBUZXN0ZWQtYnk6IEppYW55b25nIFd1IDxqaWFueW9uZy53dUBhcm0uY29tPgo+ID4gU2ln bmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIChPcmFjbGUpIDxybWsra2VybmVsQGFybWxpbnV4Lm9y Zy51az4KPiA+IENvLWRldmVsb3BlZC1ieTogSm9uYXRoYW4gQ2FtZXJvbiA8Sm9uYXRoYW4uQ2Ft ZXJvbkBodWF3ZWkuY29tPgo+ID4gU2lnbmVkLW9mZi1ieTogSm9hbnRoYW4gQ2FtZXJvbiA8Sm9u YXRoYW4uQ2FtZXJvbkBodWF3ZWkuY29tPgo+ID4gLS0tCj4gPiB2NTogVXBkYXRlIGNvbW1pdCBt ZXNzYWdlIHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBpcyBtb3ZpbmcgdGhlCj4gPiAgICAgaW5pdCBi YWNrIHRvIHdoZXJlIGl0IHdhcyB1bnRpbCB2ZXJ5IHJlY2VudGx5Lgo+ID4KPiA+ICAgICBObyBs b25nZXIgY2hhbmdlIHRoZSBjb25kaXRpb24gaW4gdGhlIGVhcmxpZXIgcmVnaXN0cmF0aW9uIHBv aW50Cj4gPiAgICAgYXMgdGhhdCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIGFybTY0IHJlZ2lzdHJh dGlvbiByb3V0aW5lCj4gPiAgICAgZGVmZXJyaW5nIHVudGlsIGNhbGxlZCBhZ2FpbiBoZXJlLgo+ ID4gLS0tCj4gPiAgZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMgfCAxMiArKysrKysrKysr KysKPiA+ICAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQo+ID4KPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2FjcGkvYWNwaV9wcm9jZXNzb3IuYyBiL2RyaXZlcnMvYWNwaS9hY3BpX3By b2Nlc3Nvci5jCj4gPiBpbmRleCA5M2UwMjk0MDNkMDUuLmM3ODM5OGNkZDA2MCAxMDA2NDQKPiA+ IC0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpX3Byb2Nlc3Nvci5jCj4gPiArKysgYi9kcml2ZXJzL2Fj cGkvYWNwaV9wcm9jZXNzb3IuYwo+ID4gQEAgLTMxNyw2ICszMTcsMTggQEAgc3RhdGljIGludCBh Y3BpX3Byb2Nlc3Nvcl9nZXRfaW5mbyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKPiA+Cj4g PiAgICAgICAgIGMgPSAmcGVyX2NwdShjcHVfZGV2aWNlcywgcHItPmlkKTsKPiA+ICAgICAgICAg QUNQSV9DT01QQU5JT05fU0VUKCZjLT5kZXYsIGRldmljZSk7Cj4gPiArICAgICAgIC8qCj4gPiAr ICAgICAgICAqIFJlZ2lzdGVyIENQVXMgdGhhdCBhcmUgcHJlc2VudC4gZ2V0X2NwdV9kZXZpY2Uo KSBpcyB1c2VkIHRvIHNraXAKPiA+ICsgICAgICAgICogZHVwbGljYXRlIENQVSBkZXNjcmlwdGlv bnMgZnJvbSBmaXJtd2FyZS4KPiA+ICsgICAgICAgICovCj4gPiArICAgICAgIGlmICghaW52YWxp ZF9sb2dpY2FsX2NwdWlkKHByLT5pZCkgJiYgY3B1X3ByZXNlbnQocHItPmlkKSAmJgo+ID4gKyAg ICAgICAgICAgIWdldF9jcHVfZGV2aWNlKHByLT5pZCkpIHsKPiA+ICsgICAgICAgICAgICAgICBp bnQgcmV0ID0gYXJjaF9yZWdpc3Rlcl9jcHUocHItPmlkKTsKPiA+ICsKPiA+ICsgICAgICAgICAg ICAgICBpZiAocmV0KQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+ ICsgICAgICAgfQo+ID4gKwo+ID4gICAgICAgICAvKgo+ID4gICAgICAgICAgKiAgRXh0cmEgUHJv Y2Vzc29yIG9iamVjdHMgbWF5IGJlIGVudW1lcmF0ZWQgb24gTVAgc3lzdGVtcyB3aXRoCj4gPiAg ICAgICAgICAqICBsZXNzIHRoYW4gdGhlIG1heCAjIG9mIENQVXMuIFRoZXkgc2hvdWxkIGJlIGln bm9yZWQgX2lmZgo+ID4gLS0KPiAKPiBJIGFtIHN0aWxsIHVuc3VyZSB3aHkgdGhlcmUgbmVlZCB0 byBiZSB0d28gcGF0aHMgY2FsbGluZwo+IGFyY2hfcmVnaXN0ZXJfY3B1KCkgaW4gYWNwaV9wcm9j ZXNzb3JfZ2V0X2luZm8oKS4KPiAKPiBKdXN0IGJlbG93IHRoZSBjb21tZW50IHBhcnRpYWxseSBw dWxsZWQgaW50byB0aGUgcGF0Y2ggY29udGV4dCBhYm92ZSwKPiB0aGVyZSBpcyB0aGlzIGNvZGU6 Cj4gCj4gaWYgKGludmFsaWRfbG9naWNhbF9jcHVpZChwci0+aWQpIHx8ICFjcHVfcHJlc2VudChw ci0+aWQpKSB7Cj4gICAgICAgICAgaW50IHJldCA9IGFjcGlfcHJvY2Vzc29yX2hvdGFkZF9pbml0 KHByKTsKPiAKPiAgICAgICAgIGlmIChyZXQpCj4gICAgICAgICAgICAgICAgIHJldHVybiByZXQ7 Cj4gfQo+IAo+IEZvciB0aGUgc2FrZSBvZiB0aGUgYXJndW1lbnQsIGZvbGQgYWNwaV9wcm9jZXNz b3JfaG90YWRkX2luaXQoKSBpbnRvCj4gaXQgYW5kIGRyb3AgdGhlIHJlZHVuZGFudCBfU1RBIGNo ZWNrIGZyb20gaXQ6Cj4gCj4gaWYgKGludmFsaWRfbG9naWNhbF9jcHVpZChwci0+aWQpIHx8ICFj cHVfcHJlc2VudChwci0+aWQpKSB7Cj4gICAgICAgICBpZiAoaW52YWxpZF9waHlzX2NwdWlkKHBy LT5waHlzX2lkKSkKPiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Cj4gCj4gICAgICAg ICBjcHVfbWFwc191cGRhdGVfYmVnaW4oKTsKPiAgICAgICAgIGNwdXNfd3JpdGVfbG9jaygpOwo+ IAo+ICAgICAgICByZXQgPSBhY3BpX21hcF9jcHUocHItPmhhbmRsZSwgcHItPnBoeXNfaWQsIHBy LT5hY3BpX2lkLCAmcHItPmlkKTsKPiAgICAgICAgaWYgKHJldCkgewo+ICAgICAgICAgICAgICAg ICBjcHVzX3dyaXRlX3VubG9jaygpOwo+ICAgICAgICAgICAgICAgICBjcHVfbWFwc191cGRhdGVf ZG9uZSgpOwo+ICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ICAgICAgICB9Cj4gICAgICAg IHJldCA9IGFyY2hfcmVnaXN0ZXJfY3B1KHByLT5pZCk7Cj4gICAgICAgIGlmIChyZXQpIHsKPiAg ICAgICAgICAgICAgICAgYWNwaV91bm1hcF9jcHUocHItPmlkKTsKPiAKPiAgICAgICAgICAgICAg ICAgY3B1c193cml0ZV91bmxvY2soKTsKPiAgICAgICAgICAgICAgICAgY3B1X21hcHNfdXBkYXRl X2RvbmUoKTsKPiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiAgICAgICAgfQo+ICAgICAg IHByX2luZm8oIkNQVSVkIGhhcyBiZWVuIGhvdC1hZGRlZFxuIiwgcHItPmlkKTsKPiAgICAgICBw ci0+ZmxhZ3MubmVlZF9ob3RwbHVnX2luaXQgPSAxOwo+IAo+ICAgICAgIGNwdXNfd3JpdGVfdW5s b2NrKCk7Cj4gICAgICAgY3B1X21hcHNfdXBkYXRlX2RvbmUoKTsKPiB9Cj4gCj4gc28gSSdtIG5v dCBzdXJlIHdoeSB0aGlzIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIHRoZSBuZXcgY29kZS4KPiAK PiBTYXkgYWNwaV9tYXBfY3B1KSAvIGFjcGlfdW5tYXBfY3B1KCkgYXJlIHR1cm5lZCBpbnRvIGFy Y2ggY2FsbHMuCj4gV2hhdCdzIHRoZSBkaWZmZXJlbmNlIHRoZW4/ICBUaGUgbG9ja2luZywgd2hp Y2ggc2hvdWxkIGJlIGZpbmUgaWYgSSdtCj4gbm90IG1pc3Rha2VuIGFuZCBuZWVkX2hvdHBsdWdf aW5pdCB0aGF0IG5lZWRzIHRvIGJlIHNldCBpZiB0aGlzIGNvZGUKPiBydW5zIGFmdGVyIHRoZSBw cm9jZXNzb3IgZHJpdmVyIGhhcyBsb2FkZWQgQUZBSUNTLgoKSXQgaXMgb3ZlciB0aGlzIHRoYXQg SSB3YWxrZWQgYXdheSBmcm9tIHByb2dyZXNzaW5nIHRoaXMgY29kZSwgYmVjYXVzZQpJIGRvbid0 IHRoaW5rIGl0J3MgcXVpdGUgYXMgc2ltcGxlIGFzIHlvdSBtYWtlIGl0IG91dCB0byBiZS4KClll cywgYWNwaV9tYXBfY3B1KCkgYW5kIGFjcGlfdW5tYXBfY3B1KCkgYXJlIGFscmVhZHkgYXJjaCBp bXBsZW1lbnRlZApmdW5jdGlvbnMsIHNvIEFybTY0IGNhbiBlYXNpbHkgcHJvdmlkZSBzdHVicyBm b3IgdGhlc2UgdGhhdCBkbyBub3RoaW5nLgpUaGF0IG5ldmVyIGNhdXNlZCBtZSBhbnkgY29uY2Vy bi4KCldoYXQgZG9lcyBjYXVzZSBtZSBncmVhdCBjb25jZXJuIHRob3VnaCBhcmUgdGhlIGZpbmVy IGRldGFpbHMuIEZvcgpleGFtcGxlLCBhYm92ZSB5b3Ugc2VlbSB0byBkcm9wIHRoZSBldmFsdWF0 aW9uIG9mIF9TVEEgZm9yIHRoZQoibWFrZV9wcmVzZW50IiBjYXNlIC0gSSd2ZSBubyBpZGVhIHdo ZXRoZXIgdGhhdCBpcyBzb21ldGhpbmcgdGhhdApzaG91bGQgYmUgZGVsZXRlZCBvciBub3QgKGlm IGl0IGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBkZWxldGVkLAp0aGVuIHdoeSBub3QgZGVsZXRl IGl0IG5vdz8pCgpBcyBmb3IgdGhlIGNwdSBsb2NraW5nLCBJIGNvdWxkbid0IGZpbmQgYW55dGhp bmcgaW4gYXJjaF9yZWdpc3Rlcl9jcHUoKQp0aGF0IGRlcGVuZHMgb24gdGhlIGNwdV9tYXBzX3Vw ZGF0ZSBzdHVmZiBub3IgbmVlZHMgdGhlIGNwdXNfd3JpdGVfbG9jawpiZWluZyB0YWtlbiAtIHNv IEkndmUgbm8gaWRlYSB3aHkgdGhlICJtYWtlX3ByZXNlbnQiIGNhc2UgdGFrZXMgdGhlc2UKbG9j a3MuCgpGaW5hbGx5LCB0aGUgInByLT5mbGFncy5uZWVkX2hvdHBsdWdfaW5pdCA9IDEiIHRoaW5n Li4uIGl0J3Mgbm90Cm9idmlvdXMgdGhhdCB0aGlzIGlzIHJlcXVpcmVkIC0gcmVtZW1iZXIgdGhh dCB3aXRoIEFybTY0J3MgImVuYWJsZWQiCnRvZ2dsaW5nLCB0aGUgInByb2Nlc3NvciIgaXMgYSBz bGljZSBvZiB0aGUgc3lzdGVtIGFuZCBkb2Vzbid0CmFjdHVhbGx5IGdvIGF3YXkgLSBpdCdzIGp1 c3QgIm5vdCBlbmFibGVkIiBmb3IgdXNlLgoKQWdhaW4sIGFzICJwcm9jZXNzb3JzIiBpbiBBcm02 NCBhcmUgc2xpY2VzIG9mIHRoZSBzeXN0ZW0sIHRoZXkgaGF2ZQp0byBiZSBmdWxseSBkZXNjcmli ZWQgaW4gQUNQSSBiZWZvcmUgdGhlIE9TIGJvb3RzLCBhbmQgdGhleSB3aWxsIGJlCm1hcmtlZCBh cyBiZWluZyAicHJlc2VudCIsIHdoaWNoIG1lYW5zIHRoZXkgd2lsbCBiZSBlbnVtZXJhdGVkLCBh bmQKdGhlIGRyaXZlciB3aWxsIGJlIHByb2JlZC4gQW55IHByb2Nlc3NvciB0aGF0IGlzIG5vdCB0 byBiZSB1c2VkIHdpbGwKbm90IGhhdmUgaXRzIGVuYWJsZWQgYml0IHNldC4gSXQgaXMgbXkgdW5k ZXJzdGFuZGluZyB0aGF0IGV2ZXJ5CnByb2Nlc3NvciB3aWxsIHJlc3VsdCBpbiB0aGUgQUNQSSBw cm9jZXNzb3IgZHJpdmVyIGJlaW5nIGJvdW5kIHRvIGl0CndoZXRoZXIgaXRzIGVuYWJsZWQgb3Ig bm90LgoKVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiByZWFsIGhvdHBsdWcgYW5kIEFybTY0IGhvdHBs dWcgaXMgdGhhdCByZWFsCmhvdHBsdWcgbWFrZXMgc3R1ZmYgbm90LXByZXNlbnQgKGFuZCB0aHVz IHVuZW51bWVyYWJsZSkuIEFybTY0IGhvdHBsdWcKbWFrZXMgc3R1ZmYgbm90LWVuYWJsZWQgd2hp Y2ggaXMgc3RpbGwgZW51bWVyYWJsZS4KCi4uLiBvciBhdCBsZWFzdCB0aGF0IGlzIG15IHVuZGVy c3RhbmRpbmcgd2hpY2ggbWF5IG5vdCBiZSBlbnRpcmVseQpjb3JyZWN0ICh3aGljaCBpcyB3aHkg SSBzdGVwcGVkIGRvd24gYmVjYXVzZSBJIGZlZWwgdG90YWxseSBvdXQgb2YKbXkgZGVwdGggd2l0 aCBBQ1BJIHN0dWZmLikKCi0tIApSTUsncyBQYXRjaCBzeXN0ZW06IGh0dHBzOi8vd3d3LmFybWxp bnV4Lm9yZy51ay9kZXZlbG9wZXIvcGF0Y2hlcy8KRlRUUCBpcyBoZXJlISA4ME1icHMgZG93biAx ME1icHMgdXAuIERlY2VudCBjb25uZWN0aXZpdHkgYXQgbGFzdCEKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBs aXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5m cmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK