From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) (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 E2D485C8E6; Mon, 15 Apr 2024 11:11:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.176.79.56 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713179505; cv=none; b=lV8OyYnpzx9O15e4RwkbIpJ+jTH42u0VrhNBNW39uTCID5IAwsIpYjjHQ3IGbf2av09ocxGmFz4t91Dnp249Ii+Hg0tS5oh5TNejUNbRbr7upwXLUbMtwxDoTxcYjaosbmlSl3DZbhjW8Z4Gv8kOvKwROnQE3qFJdYY4IvKmr9s= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713179505; c=relaxed/simple; bh=kS+1QAOTVoycQvIh0KEGN55kyIWIw1t53L8ZDJk/ubI=; h=Date:From:To:CC:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=l2VVEy4ZzRPekm/J4uhwtT1ej2JPBwPWVVGr5819uCG8IPx4fPaZmE3tQRaU49Xoyr2a53vFK3VoszWA30mIaNAGOTcECE3Fefi5geLX2YyTYYAZo+QddrmKNw+kf7U6oTTEgF+HdpaSJZgxBDp3m8vA6RDPgU9mHnaNA1o5Bgw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=185.176.79.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.18.186.231]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4VJ4FS2BBfz6K68f; Mon, 15 Apr 2024 19:09:48 +0800 (CST) Received: from lhrpeml500005.china.huawei.com (unknown [7.191.163.240]) by mail.maildlp.com (Postfix) with ESMTPS id BA5231400E7; Mon, 15 Apr 2024 19:11:41 +0800 (CST) Received: from localhost (10.122.247.231) by lhrpeml500005.china.huawei.com (7.191.163.240) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Mon, 15 Apr 2024 12:11:41 +0100 Date: Mon, 15 Apr 2024 12:11:40 +0100 From: Jonathan Cameron To: "Rafael J. Wysocki" CC: , , , , , , , , Russell King , Miguel Luis , James Morse , Salil Mehta , "Jean-Philippe Brucker" , Catalin Marinas , Will Deacon , , , Subject: Re: [PATCH v5 03/18] ACPI: processor: Register deferred CPUs from acpi_processor_get_info() Message-ID: <20240415121140.00006bc7@huawei.com> In-Reply-To: <20240415115203.0000011b@Huawei.com> References: <20240412143719.11398-1-Jonathan.Cameron@huawei.com> <20240412143719.11398-4-Jonathan.Cameron@huawei.com> <20240415115203.0000011b@Huawei.com> Organization: Huawei Technologies R&D (UK) Ltd. X-Mailer: Claws Mail 4.0.0 (GTK+ 3.24.29; x86_64-w64-mingw32) 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-Transfer-Encoding: quoted-printable X-ClientProxiedBy: lhrpeml500004.china.huawei.com (7.191.163.9) To lhrpeml500005.china.huawei.com (7.191.163.240) On Mon, 15 Apr 2024 11:52:03 +0100 Jonathan Cameron wrote: > On Fri, 12 Apr 2024 20:30:40 +0200 > "Rafael J. Wysocki" wrote: >=20 > > On Fri, Apr 12, 2024 at 4:38=E2=80=AFPM Jonathan Cameron > > wrote: =20 > > > > > > 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=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 > > > -- =20 > >=20 > > I am still unsure why there need to be two paths calling > > arch_register_cpu() in acpi_processor_get_info(). =20 >=20 > 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. >=20 > >=20 > > Just below the comment partially pulled into the patch context above, > > there is this code: > >=20 > > if (invalid_logical_cpuid(pr->id) || !cpu_present(pr->id)) { > > int ret =3D acpi_processor_hotadd_init(pr); > >=20 > > if (ret) > > return ret; > > } > >=20 > > For the sake of the argument, fold acpi_processor_hotadd_init() into > > it and drop the redundant _STA check from it: =20 >=20 > If we combine these, the _STA check is necessary because we will call this > 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). For arm64 ignore this comment. I'd forgotten we moved it into the arch specific code last week. May need similar on x86 I'm not 100% sure. >=20 > >=20 > > if (invalid_logical_cpuid(pr->id) || !cpu_present(pr->id)) { > > if (invalid_phys_cpuid(pr->phys_id)) > > return -ENODEV; > >=20 > > cpu_maps_update_begin(); > > cpus_write_lock(); > >=20 > > ret =3D acpi_map_cpu(pr->handle, pr->phys_id, pr->acpi_id, &pr->= id); =20 >=20 > 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() > (I'm not proposing those names though ;) >=20 > 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); > >=20 > > 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; =20 > 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. >=20 > So I need a way to detect if we are hotplugging the cpu or not. > Is there a standard way to do this? I haven't figured out how > to use flags in drivers to communicate this state. >=20 > >=20 > > cpus_write_unlock(); > > cpu_maps_update_done(); > > } > >=20 > > so I'm not sure why this cannot be combined with the new code. > >=20 > > 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. =20 >=20 > That's the bit that I'm currently finding a challenge. Is there a clean > way to detect that? >=20 > Jonathan >=20 >=20 >=20 >=20 >=20 >=20 > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel 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 3B2E8C00A94 for ; Mon, 15 Apr 2024 11:12:06 +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:MIME-Version:References:In-Reply-To: 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=Cs4YmtN78Wd9CNqJmYY2GwyhedYB+puhQI6Tc0si++Y=; b=jCUBjKendpZocB 8w57+7E6GPW3p+GU+tUdz2M0OiKb/6PfWCTJLqS9EWNrKxFAlHWM0kNxVJKlcttVblj9zD3hXPU9m HmGFu4MFCjJvxp99KoltH1L4UzQRzhOgZtgP8IhI2qf25nfW3fGdrsIBd+3C0Cv9nRnaMMcUGle/e oaLJ2+IxrcYq5JLxYScsDRsEOQAZDCn95XiPw0R43iPiW7ATtKEY8isAF9/criRdh7DKT2zXyT5u3 OuSsgNjS+lCAbuH7lbmWpgIpBigy4duu621c9JHRRWqi2SN4MguuMY4s0tAlISby4oHeuEQzG9QsQ YUu5iOoYJ7HQEVD+Fb9g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rwKFc-0000000809i-1EZ1; Mon, 15 Apr 2024 11:11:52 +0000 Received: from frasgout.his.huawei.com ([185.176.79.56]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rwKFZ-0000000808t-1tJG for linux-arm-kernel@lists.infradead.org; Mon, 15 Apr 2024 11:11:51 +0000 Received: from mail.maildlp.com (unknown [172.18.186.231]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4VJ4FS2BBfz6K68f; Mon, 15 Apr 2024 19:09:48 +0800 (CST) Received: from lhrpeml500005.china.huawei.com (unknown [7.191.163.240]) by mail.maildlp.com (Postfix) with ESMTPS id BA5231400E7; Mon, 15 Apr 2024 19:11:41 +0800 (CST) Received: from localhost (10.122.247.231) by lhrpeml500005.china.huawei.com (7.191.163.240) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Mon, 15 Apr 2024 12:11:41 +0100 Date: Mon, 15 Apr 2024 12:11:40 +0100 From: Jonathan Cameron To: "Rafael J. Wysocki" CC: , , , , , , , , Russell King , Miguel Luis , James Morse , Salil Mehta , "Jean-Philippe Brucker" , Catalin Marinas , Will Deacon , , , Subject: Re: [PATCH v5 03/18] ACPI: processor: Register deferred CPUs from acpi_processor_get_info() Message-ID: <20240415121140.00006bc7@huawei.com> In-Reply-To: <20240415115203.0000011b@Huawei.com> References: <20240412143719.11398-1-Jonathan.Cameron@huawei.com> <20240412143719.11398-4-Jonathan.Cameron@huawei.com> <20240415115203.0000011b@Huawei.com> Organization: Huawei Technologies R&D (UK) Ltd. X-Mailer: Claws Mail 4.0.0 (GTK+ 3.24.29; x86_64-w64-mingw32) MIME-Version: 1.0 X-Originating-IP: [10.122.247.231] X-ClientProxiedBy: lhrpeml500004.china.huawei.com (7.191.163.9) To lhrpeml500005.china.huawei.com (7.191.163.240) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240415_041149_788669_B62837A2 X-CRM114-Status: GOOD ( 58.14 ) 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 T24gTW9uLCAxNSBBcHIgMjAyNCAxMTo1MjowMyArMDEwMApKb25hdGhhbiBDYW1lcm9uIDxKb25h dGhhbi5DYW1lcm9uQEh1YXdlaS5jb20+IHdyb3RlOgoKPiBPbiBGcmksIDEyIEFwciAyMDI0IDIw OjMwOjQwICswMjAwCj4gIlJhZmFlbCBKLiBXeXNvY2tpIiA8cmFmYWVsQGtlcm5lbC5vcmc+IHdy b3RlOgo+IAo+ID4gT24gRnJpLCBBcHIgMTIsIDIwMjQgYXQgNDozOOKAr1BNIEpvbmF0aGFuIENh bWVyb24KPiA+IDxKb25hdGhhbi5DYW1lcm9uQGh1YXdlaS5jb20+IHdyb3RlOiAgCj4gPiA+Cj4g PiA+IEZyb206IEphbWVzIE1vcnNlIDxqYW1lcy5tb3JzZUBhcm0uY29tPgo+ID4gPgo+ID4gPiBU aGUgYXJtNjQgc3BlY2lmaWMgYXJjaF9yZWdpc3Rlcl9jcHUoKSBjYWxsIG1heSBkZWZlciBDUFUg cmVnaXN0cmF0aW9uCj4gPiA+IHVudGlsIHRoZSBBQ1BJIGludGVycHJldGVyIGlzIGF2YWlsYWJs ZSBhbmQgdGhlIF9TVEEgbWV0aG9kIGNhbgo+ID4gPiBiZSBldmFsdWF0ZWQuCj4gPiA+Cj4gPiA+ IElmIHRoaXMgb2NjdXJzLCB0aGVuIGEgc2Vjb25kIGF0dGVtcHQgaXMgbWFkZSBpbgo+ID4gPiBh Y3BpX3Byb2Nlc3Nvcl9nZXRfaW5mbygpLiBOb3RlIHRoYXQgdGhlIGFybTY0IHNwZWNpZmljIGNh bGwgaGFzCj4gPiA+IG5vdCB5ZXQgYmVlbiBhZGRlZCBzbyBmb3Igbm93IHRoaXMgd2lsbCBuZXZl ciBiZSBzdWNjZXNzZnVsbHkKPiA+ID4gY2FsbGVkLgo+ID4gPgo+ID4gPiBTeXN0ZW1zIGNhbiBz dGlsbCBiZSBib290ZWQgd2l0aCAnYWNwaT1vZmYnLCBvciBub3QgaW5jbHVkZSBhbgo+ID4gPiBB Q1BJIGRlc2NyaXB0aW9uIGF0IGFsbCBhcyBpbiB0aGVzZSBjYXNlcyBhcmNoX3JlZ2lzdGVyX2Nw dSgpCj4gPiA+IHdpbGwgbm90IGhhdmUgZGVmZXJyZWQgcmVnaXN0cmF0aW9uIHdoZW4gZmlyc3Qg Y2FsbGVkLgo+ID4gPgo+ID4gPiBUaGlzIG1vdmVzIHRoZSBDUFUgcmVnaXN0ZXIgbG9naWMgYmFj ayB0byBhIHN1YnN5c19pbml0Y2FsbCgpLAo+ID4gPiB3aGlsZSB0aGUgbWVtb3J5IG5vZGVzIHdp bGwgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgZWFybGllci4KPiA+ID4gTm90ZSB0aGlzIGlzIHdoZXJl IHRoZSBjYWxsIHdhcyBwcmlvciB0byB0aGUgY2xlYW51cCBzZXJpZXMgc28KPiA+ID4gdGhlcmUg c2hvdWxkIGJlIG5vIHNpZGUgZWZmZWN0cyBvZiBtb3ZpbmcgaXQgYmFjayBhZ2FpbiBmb3IgdGhp cwo+ID4gPiBzcGVjaWZpYyBjYXNlLgo+ID4gPgo+ID4gPiBbUEFUQ0ggMDAvMjFdIEluaXRpYWwg Y2xlYW51cHMgZm9yIHZDUFUgSFAuCj4gPiA+IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2FsbC9a Vnl6JTJGVmU1cFB1OEFXb0FAc2hlbGwuYXJtbGludXgub3JnLnVrLwo+ID4gPgo+ID4gPiBlLmcu IDViOTVmOTRjM2I5ZiAoIng4Ni90b3BvbG9neTogU3dpdGNoIG92ZXIgdG8gR0VORVJJQ19DUFVf REVWSUNFUyIpCj4gPiA+Cj4gPiA+IFNpZ25lZC1vZmYtYnk6IEphbWVzIE1vcnNlIDxqYW1lcy5t b3JzZUBhcm0uY29tPgo+ID4gPiBSZXZpZXdlZC1ieTogR2F2aW4gU2hhbiA8Z3NoYW5AcmVkaGF0 LmNvbT4KPiA+ID4gVGVzdGVkLWJ5OiBNaWd1ZWwgTHVpcyA8bWlndWVsLmx1aXNAb3JhY2xlLmNv bT4KPiA+ID4gVGVzdGVkLWJ5OiBWaXNobnUgUGFqanVyaSA8dmlzaG51QG9zLmFtcGVyZWNvbXB1 dGluZy5jb20+Cj4gPiA+IFRlc3RlZC1ieTogSmlhbnlvbmcgV3UgPGppYW55b25nLnd1QGFybS5j b20+Cj4gPiA+IFNpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyAoT3JhY2xlKSA8cm1rK2tlcm5l bEBhcm1saW51eC5vcmcudWs+Cj4gPiA+IENvLWRldmVsb3BlZC1ieTogSm9uYXRoYW4gQ2FtZXJv biA8Sm9uYXRoYW4uQ2FtZXJvbkBodWF3ZWkuY29tPgo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBKb2Fu dGhhbiBDYW1lcm9uIDxKb25hdGhhbi5DYW1lcm9uQGh1YXdlaS5jb20+Cj4gPiA+IC0tLQo+ID4g PiB2NTogVXBkYXRlIGNvbW1pdCBtZXNzYWdlIHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBpcyBtb3Zp bmcgdGhlCj4gPiA+ICAgICBpbml0IGJhY2sgdG8gd2hlcmUgaXQgd2FzIHVudGlsIHZlcnkgcmVj ZW50bHkuCj4gPiA+Cj4gPiA+ICAgICBObyBsb25nZXIgY2hhbmdlIHRoZSBjb25kaXRpb24gaW4g dGhlIGVhcmxpZXIgcmVnaXN0cmF0aW9uIHBvaW50Cj4gPiA+ICAgICBhcyB0aGF0IHdpbGwgYmUg aGFuZGxlZCBieSB0aGUgYXJtNjQgcmVnaXN0cmF0aW9uIHJvdXRpbmUKPiA+ID4gICAgIGRlZmVy cmluZyB1bnRpbCBjYWxsZWQgYWdhaW4gaGVyZS4KPiA+ID4gLS0tCj4gPiA+ICBkcml2ZXJzL2Fj cGkvYWNwaV9wcm9jZXNzb3IuYyB8IDEyICsrKysrKysrKysrKwo+ID4gPiAgMSBmaWxlIGNoYW5n ZWQsIDEyIGluc2VydGlvbnMoKykKPiA+ID4KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNw aS9hY3BpX3Byb2Nlc3Nvci5jIGIvZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMKPiA+ID4g aW5kZXggOTNlMDI5NDAzZDA1Li5jNzgzOThjZGQwNjAgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZl cnMvYWNwaS9hY3BpX3Byb2Nlc3Nvci5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvYWNwaS9hY3BpX3By b2Nlc3Nvci5jCj4gPiA+IEBAIC0zMTcsNiArMzE3LDE4IEBAIHN0YXRpYyBpbnQgYWNwaV9wcm9j ZXNzb3JfZ2V0X2luZm8oc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCj4gPiA+Cj4gPiA+ICAg ICAgICAgYyA9ICZwZXJfY3B1KGNwdV9kZXZpY2VzLCBwci0+aWQpOwo+ID4gPiAgICAgICAgIEFD UElfQ09NUEFOSU9OX1NFVCgmYy0+ZGV2LCBkZXZpY2UpOwo+ID4gPiArICAgICAgIC8qCj4gPiA+ ICsgICAgICAgICogUmVnaXN0ZXIgQ1BVcyB0aGF0IGFyZSBwcmVzZW50LiBnZXRfY3B1X2Rldmlj ZSgpIGlzIHVzZWQgdG8gc2tpcAo+ID4gPiArICAgICAgICAqIGR1cGxpY2F0ZSBDUFUgZGVzY3Jp cHRpb25zIGZyb20gZmlybXdhcmUuCj4gPiA+ICsgICAgICAgICovCj4gPiA+ICsgICAgICAgaWYg KCFpbnZhbGlkX2xvZ2ljYWxfY3B1aWQocHItPmlkKSAmJiBjcHVfcHJlc2VudChwci0+aWQpICYm Cj4gPiA+ICsgICAgICAgICAgICFnZXRfY3B1X2RldmljZShwci0+aWQpKSB7Cj4gPiA+ICsgICAg ICAgICAgICAgICBpbnQgcmV0ID0gYXJjaF9yZWdpc3Rlcl9jcHUocHItPmlkKTsKPiA+ID4gKwo+ ID4gPiArICAgICAgICAgICAgICAgaWYgKHJldCkKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIHJldDsKPiA+ID4gKyAgICAgICB9Cj4gPiA+ICsKPiA+ID4gICAgICAgICAvKgo+ ID4gPiAgICAgICAgICAqICBFeHRyYSBQcm9jZXNzb3Igb2JqZWN0cyBtYXkgYmUgZW51bWVyYXRl ZCBvbiBNUCBzeXN0ZW1zIHdpdGgKPiA+ID4gICAgICAgICAgKiAgbGVzcyB0aGFuIHRoZSBtYXgg IyBvZiBDUFVzLiBUaGV5IHNob3VsZCBiZSBpZ25vcmVkIF9pZmYKPiA+ID4gLS0gICAgCj4gPiAK PiA+IEkgYW0gc3RpbGwgdW5zdXJlIHdoeSB0aGVyZSBuZWVkIHRvIGJlIHR3byBwYXRocyBjYWxs aW5nCj4gPiBhcmNoX3JlZ2lzdGVyX2NwdSgpIGluIGFjcGlfcHJvY2Vzc29yX2dldF9pbmZvKCku ICAKPiAKPiBJIHJlcGxpZWQgZnVydGhlciBkb3duIHRoZSB0aHJlYWQsIGJ1dCB0aGUga2V5IHBv aW50IHdhcyB0byBtYWludGFpbgo+IHRoZSBzdHJvbmcgZGlzdGluY3Rpb24gYmV0d2VlbiAnd2hh dCcgd2FzIGRvbmUgaW4gYSByZWFsIGhvdHBsdWcKPiBwYXRoIHZzIG9uZSB3aGVyZSBvbmxpbmlu ZyB3YXMgYWxsLiAgV2UgY2FuIHJlbGF4IHRoYXQgYnV0IGl0IGdvZXMKPiBjb250cmFyeSB0byB0 aGUgY2FyZWZ1bCBkYW5jZSB0aGF0IHdhcyBuZWVkZWQgdG8gZ2V0IGFueSBhZ3JlZW1lbnQKPiB0 byB0aGUgQVJNIGFyY2hpdGVjdHVyZSBhc3BlY3RzIG9mIHRoaXMuCj4gCj4gPiAKPiA+IEp1c3Qg YmVsb3cgdGhlIGNvbW1lbnQgcGFydGlhbGx5IHB1bGxlZCBpbnRvIHRoZSBwYXRjaCBjb250ZXh0 IGFib3ZlLAo+ID4gdGhlcmUgaXMgdGhpcyBjb2RlOgo+ID4gCj4gPiBpZiAoaW52YWxpZF9sb2dp Y2FsX2NwdWlkKHByLT5pZCkgfHwgIWNwdV9wcmVzZW50KHByLT5pZCkpIHsKPiA+ICAgICAgICAg IGludCByZXQgPSBhY3BpX3Byb2Nlc3Nvcl9ob3RhZGRfaW5pdChwcik7Cj4gPiAKPiA+ICAgICAg ICAgaWYgKHJldCkKPiA+ICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gfQo+ID4gCj4g PiBGb3IgdGhlIHNha2Ugb2YgdGhlIGFyZ3VtZW50LCBmb2xkIGFjcGlfcHJvY2Vzc29yX2hvdGFk ZF9pbml0KCkgaW50bwo+ID4gaXQgYW5kIGRyb3AgdGhlIHJlZHVuZGFudCBfU1RBIGNoZWNrIGZy b20gaXQ6ICAKPiAKPiBJZiB3ZSBjb21iaW5lIHRoZXNlLCB0aGUgX1NUQSBjaGVjayBpcyBuZWNl c3NhcnkgYmVjYXVzZSB3ZSB3aWxsIGNhbGwgdGhpcwo+IHBhdGggZm9yIGRlbGF5ZWQgb25saW5p bmcgb2YgQVJNNjQgQ1BVcyAoaWYgdGhlIGVhcmxpZXIgcmVnaXN0cmF0aW9uIGNvZGUKPiBjYWxs IG9yIGFyY2hfcmVnaXN0ZXJfY3B1KCkgcmV0dXJuZWQgLUVQUk9CRSBkZWZlcikuIFRoYXQncyB0 aGUgb25seSB3YXkKPiB3ZSBrbm93IHRoYXQgYSBnaXZlbiBDUFUgaXMgb25saW5lIGNhcGFibGUg YnV0IGZpcm13YXJlIGlzIHNheWluZyB3ZSBjYW4ndAo+IGJyaW5nIGl0IG9ubGluZSB5ZXQgKGl0 IG1heSBiZSBiZSB2SFAgbGF0ZXIpLgoKRm9yIGFybTY0IGlnbm9yZSB0aGlzIGNvbW1lbnQuIEkn ZCBmb3Jnb3R0ZW4gd2UgbW92ZWQgaXQgaW50byB0aGUgYXJjaApzcGVjaWZpYyBjb2RlIGxhc3Qg d2Vlay4gIE1heSBuZWVkIHNpbWlsYXIgb24geDg2IEknbSBub3QgMTAwJSBzdXJlLgoKPiAKPiA+ IAo+ID4gaWYgKGludmFsaWRfbG9naWNhbF9jcHVpZChwci0+aWQpIHx8ICFjcHVfcHJlc2VudChw ci0+aWQpKSB7Cj4gPiAgICAgICAgIGlmIChpbnZhbGlkX3BoeXNfY3B1aWQocHItPnBoeXNfaWQp KQo+ID4gICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwo+ID4gCj4gPiAgICAgICAgIGNw dV9tYXBzX3VwZGF0ZV9iZWdpbigpOwo+ID4gICAgICAgICBjcHVzX3dyaXRlX2xvY2soKTsKPiA+ IAo+ID4gICAgICAgIHJldCA9IGFjcGlfbWFwX2NwdShwci0+aGFuZGxlLCBwci0+cGh5c19pZCwg cHItPmFjcGlfaWQsICZwci0+aWQpOyAgCj4gCj4gSSByZWFkIHRoYXQgY2FsbCBhcwo+IAlhY3Bp X21hcF9jcHVfZm9yX3BoeXNpY2FsX2NwdV9ob3RwbHVnKCkKPiBidXQgd2UgY291bGQgbWFrZSBp dCBlcXVpdmFsZW50IG9mLgo+IAlhY3BpX21hcF9jcHVfZm9yX3doYXRldmVyX2NwdV9ob3RwbHVn KCkKPiAoSSdtIG5vdCBwcm9wb3NpbmcgdGhvc2UgbmFtZXMgdGhvdWdoIDspCj4gCj4gaW4gd2hp Y2ggY2FzZSBpdCBpcyBmaW5lIHRvIGp1c3Qgc3R1YiBpdCBvdXQgb24gQVJNNjQuCj4gPiAgICAg ICAgaWYgKHJldCkgewo+ID4gICAgICAgICAgICAgICAgIGNwdXNfd3JpdGVfdW5sb2NrKCk7Cj4g PiAgICAgICAgICAgICAgICAgY3B1X21hcHNfdXBkYXRlX2RvbmUoKTsKPiA+ICAgICAgICAgICAg ICAgICByZXR1cm4gcmV0Owo+ID4gICAgICAgIH0KPiA+ICAgICAgICByZXQgPSBhcmNoX3JlZ2lz dGVyX2NwdShwci0+aWQpOwo+ID4gICAgICAgIGlmIChyZXQpIHsKPiA+ICAgICAgICAgICAgICAg ICBhY3BpX3VubWFwX2NwdShwci0+aWQpOwo+ID4gCj4gPiAgICAgICAgICAgICAgICAgY3B1c193 cml0ZV91bmxvY2soKTsKPiA+ICAgICAgICAgICAgICAgICBjcHVfbWFwc191cGRhdGVfZG9uZSgp Owo+ID4gICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiAgICAgICAgfQo+ID4gICAgICAg cHJfaW5mbygiQ1BVJWQgaGFzIGJlZW4gaG90LWFkZGVkXG4iLCBwci0+aWQpOwo+ID4gICAgICAg cHItPmZsYWdzLm5lZWRfaG90cGx1Z19pbml0ID0gMTsgIAo+IFRoaXMgb25lIG5lZWRzIG1vcmUg Y2FyZWZ1bCBoYW5kbGluZyBiZWNhdXNlIHdlIGFyZSBjYWxsaW5nIHRoaXMKPiBmb3Igbm9uIGhv dHBsdWcgY2FzZXMgb24gYXJtNjQgaW4gd2hpY2ggY2FzZSB3ZSBlbmQgdXAgc2V0dGluZyB0aGlz Cj4gZm9yIGluaXRpYWxseSBvbmxpbmUgQ1BVcyAtIHRodXMgaWYgd2Ugb2ZmbGluZSBhbmQgb25s aW5lIHRoZW0KPiBhZ2FpbiB2aWEgc3lzZnMgL3N5cy9idXMvY3B1L2RldmljZS9jcHVYL29ubGlu ZSBpdCBnb2VzIHRocm91Z2ggdGhlCj4gaG90cGx1ZyBwYXRoIGFuZCBzaG91bGQgbm90Lgo+IAo+ IFNvIEkgbmVlZCBhIHdheSB0byBkZXRlY3QgaWYgd2UgYXJlIGhvdHBsdWdnaW5nIHRoZSBjcHUg b3Igbm90Lgo+IElzIHRoZXJlIGEgc3RhbmRhcmQgd2F5IHRvIGRvIHRoaXM/ICBJIGhhdmVuJ3Qg ZmlndXJlZCBvdXQgaG93Cj4gdG8gdXNlIGZsYWdzIGluIGRyaXZlcnMgdG8gY29tbXVuaWNhdGUg dGhpcyBzdGF0ZS4KPiAKPiA+IAo+ID4gICAgICAgY3B1c193cml0ZV91bmxvY2soKTsKPiA+ICAg ICAgIGNwdV9tYXBzX3VwZGF0ZV9kb25lKCk7Cj4gPiB9Cj4gPiAKPiA+IHNvIEknbSBub3Qgc3Vy ZSB3aHkgdGhpcyBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCB0aGUgbmV3IGNvZGUuCj4gPiAKPiA+ IFNheSBhY3BpX21hcF9jcHUpIC8gYWNwaV91bm1hcF9jcHUoKSBhcmUgdHVybmVkIGludG8gYXJj aCBjYWxscy4KPiA+IFdoYXQncyB0aGUgZGlmZmVyZW5jZSB0aGVuPyAgVGhlIGxvY2tpbmcsIHdo aWNoIHNob3VsZCBiZSBmaW5lIGlmIEknbQo+ID4gbm90IG1pc3Rha2VuIGFuZCBuZWVkX2hvdHBs dWdfaW5pdCB0aGF0IG5lZWRzIHRvIGJlIHNldCBpZiB0aGlzIGNvZGUKPiA+IHJ1bnMgYWZ0ZXIg dGhlIHByb2Nlc3NvciBkcml2ZXIgaGFzIGxvYWRlZCBBRkFJQ1MuICAKPiAKPiBUaGF0J3MgdGhl IGJpdCB0aGF0IEknbSBjdXJyZW50bHkgZmluZGluZyBhIGNoYWxsZW5nZS4gSXMgdGhlcmUgYSBj bGVhbgo+IHdheSB0byBkZXRlY3QgdGhhdD8KPiAKPiBKb25hdGhhbgo+IAo+IAo+IAo+IAo+IAo+ IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gbGlu dXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKPiBsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJh ZGVhZC5vcmcKPiBodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LWFybS1rZXJuZWwKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hcm0ta2VybmVsCg==