From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (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 295D46A033 for ; Fri, 12 Jan 2024 11:52:15 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 9364260A47 for ; Fri, 12 Jan 2024 11:52:15 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 9364260A47 X-Virus-Scanned: amavisd-new at osuosl.org X-Spam-Flag: NO X-Spam-Score: -4.198 X-Spam-Level: Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Qax70Mv3Zp4e for ; Fri, 12 Jan 2024 11:52:13 +0000 (UTC) Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id 7F29260745 for ; Fri, 12 Jan 2024 11:52:13 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 7F29260745 Received: from mail.maildlp.com (unknown [172.18.186.31]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4TBKZd3vRHz6K8Xc; Fri, 12 Jan 2024 19:49:29 +0800 (CST) Received: from lhrpeml500005.china.huawei.com (unknown [7.191.163.240]) by mail.maildlp.com (Postfix) with ESMTPS id 350581408FF; Fri, 12 Jan 2024 19:52:08 +0800 (CST) Received: from localhost (10.202.227.76) by lhrpeml500005.china.huawei.com (7.191.163.240) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Fri, 12 Jan 2024 11:52:07 +0000 Date: Fri, 12 Jan 2024 11:52:05 +0000 From: Jonathan Cameron To: "Russell King (Oracle)" CC: "Rafael J. Wysocki" , "Rafael J. Wysocki" , , , , , , , , , , , , , , , Salil Mehta , Jean-Philippe Brucker , , , James Morse Subject: Re: [PATCH RFC v3 01/21] ACPI: Only enumerate enabled (or functional) devices Message-ID: <20240112115205.000043b0@Huawei.com> In-Reply-To: References: <20231215161539.00000940@Huawei.com> <5760569.DvuYhMxLoT@kreacher> <20240102143925.00004361@Huawei.com> <20240111101949.000075dc@Huawei.com> Organization: Huawei Technologies Research and Development (UK) Ltd. X-Mailer: Claws Mail 4.1.0 (GTK 3.24.33; x86_64-w64-mingw32) 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-Transfer-Encoding: quoted-printable X-ClientProxiedBy: lhrpeml100006.china.huawei.com (7.191.160.224) To lhrpeml500005.china.huawei.com (7.191.163.240) On Thu, 11 Jan 2024 10:26:15 +0000 "Russell King (Oracle)" wrote: > On Thu, Jan 11, 2024 at 10:19:49AM +0000, Jonathan Cameron wrote: > > On Tue, 2 Jan 2024 14:39:25 +0000 > > Jonathan Cameron wrote: > > =20 > > > On Fri, 15 Dec 2023 20:47:31 +0100 > > > "Rafael J. Wysocki" wrote: > > > =20 > > > > On Friday, December 15, 2023 5:15:39 PM CET Jonathan Cameron wrote:= =20 > > > > > On Fri, 15 Dec 2023 15:31:55 +0000 > > > > > "Russell King (Oracle)" wrote: > > > > > =20 > > > > > > On Thu, Dec 14, 2023 at 07:37:10PM +0100, Rafael J. Wysocki wro= te: =20 > > > > > > > On Thu, Dec 14, 2023 at 7:16=E2=80=AFPM Rafael J. Wysocki wrote: =20 > > > > > > > > > > > > > > > > On Thu, Dec 14, 2023 at 7:10=E2=80=AFPM Russell King (Oracl= e) > > > > > > > > wrote: =20 > > > > > > > > > I guess we need something like: > > > > > > > > > > > > > > > > > > if (device->status.present) > > > > > > > > > return device->device_type !=3D ACPI_BUS_= TYPE_PROCESSOR || > > > > > > > > > device->status.enabled; > > > > > > > > > else > > > > > > > > > return device->status.functional; > > > > > > > > > > > > > > > > > > so we only check device->status.enabled for processor-typ= e devices? =20 > > > > > > > > > > > > > > > > Yes, something like this. =20 > > > > > > >=20 > > > > > > > However, that is not sufficient, because there are > > > > > > > ACPI_BUS_TYPE_DEVICE devices representing processors. > > > > > > >=20 > > > > > > > I'm not sure about a clean way to do it ATM. =20 > > > > > >=20 > > > > > > Ok, how about: > > > > > >=20 > > > > > > static bool acpi_dev_is_processor(const struct acpi_device *dev= ice) > > > > > > { > > > > > > struct acpi_hardware_id *hwid; > > > > > >=20 > > > > > > if (device->device_type =3D=3D ACPI_BUS_TYPE_PROCESSOR) > > > > > > return true; > > > > > >=20 > > > > > > if (device->device_type !=3D ACPI_BUS_TYPE_DEVICE) > > > > > > return false; > > > > > >=20 > > > > > > list_for_each_entry(hwid, &device->pnp.ids, list) > > > > > > if (!strcmp(ACPI_PROCESSOR_OBJECT_HID, hwid->id) || > > > > > > !strcmp(ACPI_PROCESSOR_DEVICE_HID, hwid->id)) > > > > > > return true; > > > > > >=20 > > > > > > return false; > > > > > > } > > > > > >=20 > > > > > > and then: > > > > > >=20 > > > > > > if (device->status.present) > > > > > > return !acpi_dev_is_processor(device) || device->status.enabl= ed; > > > > > > else > > > > > > return device->status.functional; > > > > > >=20 > > > > > > ? > > > > > > =20 > > > > > Changing it to CPU only for now makes sense to me and I think thi= s code snippet should do the > > > > > job. Nice and simple. =20 > > > >=20 > > > > Well, except that it does checks that are done elsewhere slightly > > > > differently, which from the maintenance POV is not nice. > > > >=20 > > > > Maybe something like the appended patch (untested). =20 > > >=20 > > > Hi Rafael, > > >=20 > > > As far as I can see that's functionally equivalent, so looks good to = me. > > > I'm not set up to test this today though, so will defer to Russell on= whether > > > there is anything missing > > >=20 > > > Thanks for putting this together. =20 > >=20 > > This is rather embarrassing... > >=20 > > I span this up on a QEMU instance with some prints to find out we need > > the !acpi_device_is_processor() restriction. > > On my 'random' test setup it fails on one device. ACPI0017 - which I > > happen to know rather well. It's the weird pseudo device that lets > > a CXL aware OS know there is a CEDT table to probe. > >=20 > > Whilst I really don't like that hack (it is all about making software > > distribution of out of tree modules easier rather than something > > fundamental), I'm the CXL QEMU maintainer :( > >=20 > > Will fix that, but it shows there is at least one broken firmware out > > there. > >=20 > > On plus side, Rafael's code seems to work as expected and lets that > > buggy firwmare carry on working :) So lets pretend the bug in qemu > > is a deliberate test case! =20 >=20 > Lol, thanks for a test case and showing that Rafael's approach is > indeed necessary. >=20 > Would your test quality for a tested-by for this? For reference, this > is my current version below with Rafael's update: Sure. This matches what I have. Tested-by: Jonathan Cameron Reviewed-by: Jonathan Cameron >=20 > 8<=3D=3D=3D=3D > From: Russell King (Oracle) > Subject: [PATCH] ACPI: Only enumerate enabled (or functional) processor > devices >=20 > From: James Morse >=20 > Today the ACPI enumeration code 'visits' all devices that are present. >=20 > This is a problem for arm64, where CPUs are always present, but not > always enabled. When a device-check occurs because the firmware-policy > has changed and a CPU is now enabled, the following error occurs: > | acpi ACPI0007:48: Enumeration failure >=20 > This is ultimately because acpi_dev_ready_for_enumeration() returns > true for a device that is not enabled. The ACPI Processor driver > will not register such CPUs as they are not 'decoding their resources'. >=20 > ACPI allows a device to be functional instead of maintaining the > present and enabled bit, but we can't simply check the enabled bit > for all devices since firmware can be buggy. >=20 > If ACPI indicates that the device is present and enabled, then all well > and good, we can enumate it. However, if the device is present and not > enabled, then we also check whether the device is a processor device > to limit the impact of this new check to just processor devices. >=20 > This avoids enumerating present && functional processor devices that > are not enabled. >=20 > Signed-off-by: James Morse > Co-developed-by: Rafael J. Wysocki > Signed-off-by: Russell King (Oracle) > --- > Changes since RFC v2: > * Incorporate comment suggestion by Gavin Shan. > Changes since RFC v3: > * Fixed "sert" typo. > Changes since RFC v3 (smaller series): > * Restrict checking the enabled bit to processor devices, update > commit comments. > * Use Rafael's suggestion in > https://lore.kernel.org/r/5760569.DvuYhMxLoT@kreacher > --- > drivers/acpi/acpi_processor.c | 11 ++++++++ > drivers/acpi/device_pm.c | 2 +- > drivers/acpi/device_sysfs.c | 2 +- > drivers/acpi/internal.h | 4 ++- > drivers/acpi/property.c | 2 +- > drivers/acpi/scan.c | 49 ++++++++++++++++++++++++++++------- > 6 files changed, 56 insertions(+), 14 deletions(-) >=20 > diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c > index 4fe2ef54088c..cf7c1cca69dd 100644 > --- a/drivers/acpi/acpi_processor.c > +++ b/drivers/acpi/acpi_processor.c > @@ -626,6 +626,17 @@ static struct acpi_scan_handler processor_handler = =3D { > }, > }; > =20 > +bool acpi_device_is_processor(const struct acpi_device *adev) > +{ > + if (adev->device_type =3D=3D ACPI_BUS_TYPE_PROCESSOR) > + return true; > + > + if (adev->device_type !=3D ACPI_BUS_TYPE_DEVICE) > + return false; > + > + return acpi_scan_check_handler(adev, &processor_handler); > +} > + > static int acpi_processor_container_attach(struct acpi_device *dev, > const struct acpi_device_id *id) > { > diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c > index 3b4d048c4941..e3c80f3b3b57 100644 > --- a/drivers/acpi/device_pm.c > +++ b/drivers/acpi/device_pm.c > @@ -313,7 +313,7 @@ int acpi_bus_init_power(struct acpi_device *device) > return -EINVAL; > =20 > device->power.state =3D ACPI_STATE_UNKNOWN; > - if (!acpi_device_is_present(device)) { > + if (!acpi_dev_ready_for_enumeration(device)) { > device->flags.initialized =3D false; > return -ENXIO; > } > diff --git a/drivers/acpi/device_sysfs.c b/drivers/acpi/device_sysfs.c > index 23373faa35ec..a0256d2493a7 100644 > --- a/drivers/acpi/device_sysfs.c > +++ b/drivers/acpi/device_sysfs.c > @@ -141,7 +141,7 @@ static int create_pnp_modalias(const struct acpi_devi= ce *acpi_dev, char *modalia > struct acpi_hardware_id *id; > =20 > /* Avoid unnecessarily loading modules for non present devices. */ > - if (!acpi_device_is_present(acpi_dev)) > + if (!acpi_dev_ready_for_enumeration(acpi_dev)) > return 0; > =20 > /* > diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h > index 866c7c4ed233..9388d4c8674a 100644 > --- a/drivers/acpi/internal.h > +++ b/drivers/acpi/internal.h > @@ -62,6 +62,8 @@ void acpi_sysfs_add_hotplug_profile(struct acpi_hotplug= _profile *hotplug, > int acpi_scan_add_handler_with_hotplug(struct acpi_scan_handler *handler, > const char *hotplug_profile_name); > void acpi_scan_hotplug_enabled(struct acpi_hotplug_profile *hotplug, boo= l val); > +bool acpi_scan_check_handler(const struct acpi_device *adev, > + struct acpi_scan_handler *handler); > =20 > #ifdef CONFIG_DEBUG_FS > extern struct dentry *acpi_debugfs_dir; > @@ -107,7 +109,6 @@ int acpi_device_setup_files(struct acpi_device *dev); > void acpi_device_remove_files(struct acpi_device *dev); > void acpi_device_add_finalize(struct acpi_device *device); > void acpi_free_pnp_ids(struct acpi_device_pnp *pnp); > -bool acpi_device_is_present(const struct acpi_device *adev); > bool acpi_device_is_battery(struct acpi_device *adev); > bool acpi_device_is_first_physical_node(struct acpi_device *adev, > const struct device *dev); > @@ -119,6 +120,7 @@ int acpi_bus_register_early_device(int type); > const struct acpi_device *acpi_companion_match(const struct device *dev); > int __acpi_device_uevent_modalias(const struct acpi_device *adev, > struct kobj_uevent_env *env); > +bool acpi_device_is_processor(const struct acpi_device *adev); > =20 > /* ---------------------------------------------------------------------= ----- > Power Resource > diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c > index 6979a3f9f90a..14d6948fd88a 100644 > --- a/drivers/acpi/property.c > +++ b/drivers/acpi/property.c > @@ -1420,7 +1420,7 @@ static bool acpi_fwnode_device_is_available(const s= truct fwnode_handle *fwnode) > if (!is_acpi_device_node(fwnode)) > return false; > =20 > - return acpi_device_is_present(to_acpi_device_node(fwnode)); > + return acpi_dev_ready_for_enumeration(to_acpi_device_node(fwnode)); > } > =20 > static const void * > diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c > index 02bb2cce423f..f94d1f744bcc 100644 > --- a/drivers/acpi/scan.c > +++ b/drivers/acpi/scan.c > @@ -304,7 +304,7 @@ static int acpi_scan_device_check(struct acpi_device = *adev) > int error; > =20 > acpi_bus_get_status(adev); > - if (acpi_device_is_present(adev)) { > + if (acpi_dev_ready_for_enumeration(adev)) { > /* > * This function is only called for device objects for which > * matching scan handlers exist. The only situation in which > @@ -338,7 +338,7 @@ static int acpi_scan_bus_check(struct acpi_device *ad= ev, void *not_used) > int error; > =20 > acpi_bus_get_status(adev); > - if (!acpi_device_is_present(adev)) { > + if (!acpi_dev_ready_for_enumeration(adev)) { > acpi_scan_device_not_enumerated(adev); > return 0; > } > @@ -1913,11 +1913,6 @@ static bool acpi_device_should_be_hidden(acpi_hand= le handle) > return true; > } > =20 > -bool acpi_device_is_present(const struct acpi_device *adev) > -{ > - return adev->status.present || adev->status.functional; > -} > - > static bool acpi_scan_handler_matching(struct acpi_scan_handler *handler, > const char *idstr, > const struct acpi_device_id **matchid) > @@ -1938,6 +1933,18 @@ static bool acpi_scan_handler_matching(struct acpi= _scan_handler *handler, > return false; > } > =20 > +bool acpi_scan_check_handler(const struct acpi_device *adev, > + struct acpi_scan_handler *handler) > +{ > + struct acpi_hardware_id *hwid; > + > + list_for_each_entry(hwid, &adev->pnp.ids, list) > + if (acpi_scan_handler_matching(handler, hwid->id, NULL)) > + return true; > + > + return false; > +} > + > static struct acpi_scan_handler *acpi_scan_match_handler(const char *ids= tr, > const struct acpi_device_id **matchid) > { > @@ -2381,16 +2388,38 @@ EXPORT_SYMBOL_GPL(acpi_dev_clear_dependencies); > * acpi_dev_ready_for_enumeration - Check if the ACPI device is ready fo= r enumeration > * @device: Pointer to the &struct acpi_device to check > * > - * Check if the device is present and has no unmet dependencies. > + * Check if the device is functional or enabled and has no unmet depende= ncies. > * > - * Return true if the device is ready for enumeratino. Otherwise, return= false. > + * Return true if the device is ready for enumeration. Otherwise, return= false. > */ > bool acpi_dev_ready_for_enumeration(const struct acpi_device *device) > { > if (device->flags.honor_deps && device->dep_unmet) > return false; > =20 > - return acpi_device_is_present(device); > + /* > + * ACPI 6.5's 6.3.7 "_STA (Device Status)" allows firmware to return > + * (!present && functional) for certain types of devices that should be > + * enumerated. Note that the enabled bit should not be set unless the > + * present bit is set. > + * > + * However, limit this only to processor devices to reduce possible > + * regressions with firmware. > + */ > + if (device->status.functional) > + return true; > + > + if (!device->status.present) > + return false; > + > + /* > + * Fast path - if enabled is set, avoid the more expensive test to > + * check whether this device is a processor. > + */ > + if (device->status.enabled) > + return true; > + > + return !acpi_device_is_processor(device); > } > EXPORT_SYMBOL_GPL(acpi_dev_ready_for_enumeration); > =20 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 37D67C4707C for ; Fri, 12 Jan 2024 11:52:44 +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=t+qkrzxscC/An3Gl1p6gn9gJZRKbeON6+9y6tIPeVi0=; b=hRbpRE4ltQzxL5 xddxcm1UO9Y2wMDxWV4aDs7NKLoY8+9dU1QJCDNEUhsR5Wzxoir0Ec4CKucUohrn3cIoSyJdwXHKT hDLyK3gUAacWw6AbLFg5/lVl0/8J1X1wepP51h+uPpCSpfneXBwmsshdym1dj3kR4K5W4nMKcq0iS 0V2lSxbR1Abt5kSkqzD14BlnR4V2O7xwPIYYZ5or6GiEIaxdzuI/HR8SKO54yDuU6c0zld+1RaX5+ 8LEcIBTO/t11GLky6iDx+GTqiwVtP8tkbjx4Yl7oJtrdNLGXd1TUnDUNiOe1OU/1BJ5Xf1ul4MsZ9 lQDut8Uqr6izyKZlpy2w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rOG5Q-002g7c-1J; Fri, 12 Jan 2024 11:52:32 +0000 Received: from frasgout.his.huawei.com ([185.176.79.56]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rOG5K-002fvr-1F; Fri, 12 Jan 2024 11:52:29 +0000 Received: from mail.maildlp.com (unknown [172.18.186.31]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4TBKZd3vRHz6K8Xc; Fri, 12 Jan 2024 19:49:29 +0800 (CST) Received: from lhrpeml500005.china.huawei.com (unknown [7.191.163.240]) by mail.maildlp.com (Postfix) with ESMTPS id 350581408FF; Fri, 12 Jan 2024 19:52:08 +0800 (CST) Received: from localhost (10.202.227.76) by lhrpeml500005.china.huawei.com (7.191.163.240) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Fri, 12 Jan 2024 11:52:07 +0000 Date: Fri, 12 Jan 2024 11:52:05 +0000 From: Jonathan Cameron To: "Russell King (Oracle)" CC: "Rafael J. Wysocki" , "Rafael J. Wysocki" , , , , , , , , , , , , , , , Salil Mehta , Jean-Philippe Brucker , , , James Morse Subject: Re: [PATCH RFC v3 01/21] ACPI: Only enumerate enabled (or functional) devices Message-ID: <20240112115205.000043b0@Huawei.com> In-Reply-To: References: <20231215161539.00000940@Huawei.com> <5760569.DvuYhMxLoT@kreacher> <20240102143925.00004361@Huawei.com> <20240111101949.000075dc@Huawei.com> Organization: Huawei Technologies Research and Development (UK) Ltd. X-Mailer: Claws Mail 4.1.0 (GTK 3.24.33; x86_64-w64-mingw32) MIME-Version: 1.0 X-Originating-IP: [10.202.227.76] X-ClientProxiedBy: lhrpeml100006.china.huawei.com (7.191.160.224) 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-20240112_035226_748171_237C629F X-CRM114-Status: GOOD ( 58.43 ) 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 T24gVGh1LCAxMSBKYW4gMjAyNCAxMDoyNjoxNSArMDAwMAoiUnVzc2VsbCBLaW5nIChPcmFjbGUp IiA8bGludXhAYXJtbGludXgub3JnLnVrPiB3cm90ZToKCj4gT24gVGh1LCBKYW4gMTEsIDIwMjQg YXQgMTA6MTk6NDlBTSArMDAwMCwgSm9uYXRoYW4gQ2FtZXJvbiB3cm90ZToKPiA+IE9uIFR1ZSwg MiBKYW4gMjAyNCAxNDozOToyNSArMDAwMAo+ID4gSm9uYXRoYW4gQ2FtZXJvbiA8Sm9uYXRoYW4u Q2FtZXJvbkBIdWF3ZWkuY29tPiB3cm90ZToKPiA+ICAgCj4gPiA+IE9uIEZyaSwgMTUgRGVjIDIw MjMgMjA6NDc6MzEgKzAxMDAKPiA+ID4gIlJhZmFlbCBKLiBXeXNvY2tpIiA8cmp3QHJqd3lzb2Nr aS5uZXQ+IHdyb3RlOgo+ID4gPiAgIAo+ID4gPiA+IE9uIEZyaWRheSwgRGVjZW1iZXIgMTUsIDIw MjMgNToxNTozOSBQTSBDRVQgSm9uYXRoYW4gQ2FtZXJvbiB3cm90ZTogICAgCj4gPiA+ID4gPiBP biBGcmksIDE1IERlYyAyMDIzIDE1OjMxOjU1ICswMDAwCj4gPiA+ID4gPiAiUnVzc2VsbCBLaW5n IChPcmFjbGUpIiA8bGludXhAYXJtbGludXgub3JnLnVrPiB3cm90ZToKPiA+ID4gPiA+ICAgICAg IAo+ID4gPiA+ID4gPiBPbiBUaHUsIERlYyAxNCwgMjAyMyBhdCAwNzozNzoxMFBNICswMTAwLCBS YWZhZWwgSi4gV3lzb2NraSB3cm90ZTogICAgICAKPiA+ID4gPiA+ID4gPiBPbiBUaHUsIERlYyAx NCwgMjAyMyBhdCA3OjE24oCvUE0gUmFmYWVsIEouIFd5c29ja2kgPHJhZmFlbEBrZXJuZWwub3Jn PiB3cm90ZTogICAgICAgIAo+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+IE9uIFRodSwg RGVjIDE0LCAyMDIzIGF0IDc6MTDigK9QTSBSdXNzZWxsIEtpbmcgKE9yYWNsZSkKPiA+ID4gPiA+ ID4gPiA+IDxsaW51eEBhcm1saW51eC5vcmcudWs+IHdyb3RlOiAgICAgICAgCj4gPiA+ID4gPiA+ ID4gPiA+IEkgZ3Vlc3Mgd2UgbmVlZCBzb21ldGhpbmcgbGlrZToKPiA+ID4gPiA+ID4gPiA+ID4K PiA+ID4gPiA+ID4gPiA+ID4gICAgICAgICBpZiAoZGV2aWNlLT5zdGF0dXMucHJlc2VudCkKPiA+ ID4gPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgIHJldHVybiBkZXZpY2UtPmRldmljZV90eXBl ICE9IEFDUElfQlVTX1RZUEVfUFJPQ0VTU09SIHx8Cj4gPiA+ID4gPiA+ID4gPiA+ICAgICAgICAg ICAgICAgICAgICAgICAgZGV2aWNlLT5zdGF0dXMuZW5hYmxlZDsKPiA+ID4gPiA+ID4gPiA+ID4g ICAgICAgICBlbHNlCj4gPiA+ID4gPiA+ID4gPiA+ICAgICAgICAgICAgICAgICByZXR1cm4gZGV2 aWNlLT5zdGF0dXMuZnVuY3Rpb25hbDsKPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ ID4gc28gd2Ugb25seSBjaGVjayBkZXZpY2UtPnN0YXR1cy5lbmFibGVkIGZvciBwcm9jZXNzb3It dHlwZSBkZXZpY2VzPyAgICAgICAgCj4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gWWVz LCBzb21ldGhpbmcgbGlrZSB0aGlzLiAgICAgICAgCj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ ID4gSG93ZXZlciwgdGhhdCBpcyBub3Qgc3VmZmljaWVudCwgYmVjYXVzZSB0aGVyZSBhcmUKPiA+ ID4gPiA+ID4gPiBBQ1BJX0JVU19UWVBFX0RFVklDRSBkZXZpY2VzIHJlcHJlc2VudGluZyBwcm9j ZXNzb3JzLgo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IEknbSBub3Qgc3VyZSBhYm91dCBh IGNsZWFuIHdheSB0byBkbyBpdCBBVE0uICAgICAgICAKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ IE9rLCBob3cgYWJvdXQ6Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBzdGF0aWMgYm9vbCBhY3Bp X2Rldl9pc19wcm9jZXNzb3IoY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCj4gPiA+ ID4gPiA+IHsKPiA+ID4gPiA+ID4gCXN0cnVjdCBhY3BpX2hhcmR3YXJlX2lkICpod2lkOwo+ID4g PiA+ID4gPiAKPiA+ID4gPiA+ID4gCWlmIChkZXZpY2UtPmRldmljZV90eXBlID09IEFDUElfQlVT X1RZUEVfUFJPQ0VTU09SKQo+ID4gPiA+ID4gPiAJCXJldHVybiB0cnVlOwo+ID4gPiA+ID4gPiAK PiA+ID4gPiA+ID4gCWlmIChkZXZpY2UtPmRldmljZV90eXBlICE9IEFDUElfQlVTX1RZUEVfREVW SUNFKQo+ID4gPiA+ID4gPiAJCXJldHVybiBmYWxzZTsKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ IAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGh3aWQsICZkZXZpY2UtPnBucC5pZHMsIGxpc3QpCj4gPiA+ ID4gPiA+IAkJaWYgKCFzdHJjbXAoQUNQSV9QUk9DRVNTT1JfT0JKRUNUX0hJRCwgaHdpZC0+aWQp IHx8Cj4gPiA+ID4gPiA+IAkJICAgICFzdHJjbXAoQUNQSV9QUk9DRVNTT1JfREVWSUNFX0hJRCwg aHdpZC0+aWQpKQo+ID4gPiA+ID4gPiAJCQlyZXR1cm4gdHJ1ZTsKPiA+ID4gPiA+ID4gCj4gPiA+ ID4gPiA+IAlyZXR1cm4gZmFsc2U7Cj4gPiA+ID4gPiA+IH0KPiA+ID4gPiA+ID4gCj4gPiA+ID4g PiA+IGFuZCB0aGVuOgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gCWlmIChkZXZpY2UtPnN0YXR1 cy5wcmVzZW50KQo+ID4gPiA+ID4gPiAJCXJldHVybiAhYWNwaV9kZXZfaXNfcHJvY2Vzc29yKGRl dmljZSkgfHwgZGV2aWNlLT5zdGF0dXMuZW5hYmxlZDsKPiA+ID4gPiA+ID4gCWVsc2UKPiA+ID4g PiA+ID4gCQlyZXR1cm4gZGV2aWNlLT5zdGF0dXMuZnVuY3Rpb25hbDsKPiA+ID4gPiA+ID4gCj4g PiA+ID4gPiA+ID8KPiA+ID4gPiA+ID4gICAgICAgCj4gPiA+ID4gPiBDaGFuZ2luZyBpdCB0byBD UFUgb25seSBmb3Igbm93IG1ha2VzIHNlbnNlIHRvIG1lIGFuZCBJIHRoaW5rIHRoaXMgY29kZSBz bmlwcGV0IHNob3VsZCBkbyB0aGUKPiA+ID4gPiA+IGpvYi4gIE5pY2UgYW5kIHNpbXBsZS4gICAg ICAKPiA+ID4gPiAKPiA+ID4gPiBXZWxsLCBleGNlcHQgdGhhdCBpdCBkb2VzIGNoZWNrcyB0aGF0 IGFyZSBkb25lIGVsc2V3aGVyZSBzbGlnaHRseQo+ID4gPiA+IGRpZmZlcmVudGx5LCB3aGljaCBm cm9tIHRoZSBtYWludGVuYW5jZSBQT1YgaXMgbm90IG5pY2UuCj4gPiA+ID4gCj4gPiA+ID4gTWF5 YmUgc29tZXRoaW5nIGxpa2UgdGhlIGFwcGVuZGVkIHBhdGNoICh1bnRlc3RlZCkuICAgIAo+ID4g PiAKPiA+ID4gSGkgUmFmYWVsLAo+ID4gPiAKPiA+ID4gQXMgZmFyIGFzIEkgY2FuIHNlZSB0aGF0 J3MgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIHNvIGxvb2tzIGdvb2QgdG8gbWUuCj4gPiA+IEkn bSBub3Qgc2V0IHVwIHRvIHRlc3QgdGhpcyB0b2RheSB0aG91Z2gsIHNvIHdpbGwgZGVmZXIgdG8g UnVzc2VsbCBvbiB3aGV0aGVyCj4gPiA+IHRoZXJlIGlzIGFueXRoaW5nIG1pc3NpbmcKPiA+ID4g Cj4gPiA+IFRoYW5rcyBmb3IgcHV0dGluZyB0aGlzIHRvZ2V0aGVyLiAgCj4gPiAKPiA+IFRoaXMg aXMgcmF0aGVyIGVtYmFycmFzc2luZy4uLgo+ID4gCj4gPiBJIHNwYW4gdGhpcyB1cCBvbiBhIFFF TVUgaW5zdGFuY2Ugd2l0aCBzb21lIHByaW50cyB0byBmaW5kIG91dCB3ZSBuZWVkCj4gPiB0aGUg IWFjcGlfZGV2aWNlX2lzX3Byb2Nlc3NvcigpIHJlc3RyaWN0aW9uLgo+ID4gT24gbXkgJ3JhbmRv bScgdGVzdCBzZXR1cCBpdCBmYWlscyBvbiBvbmUgZGV2aWNlLiBBQ1BJMDAxNyAtIHdoaWNoIEkK PiA+IGhhcHBlbiB0byBrbm93IHJhdGhlciB3ZWxsLiBJdCdzIHRoZSB3ZWlyZCBwc2V1ZG8gZGV2 aWNlIHRoYXQgbGV0cwo+ID4gYSBDWEwgYXdhcmUgT1Mga25vdyB0aGVyZSBpcyBhIENFRFQgdGFi bGUgdG8gcHJvYmUuCj4gPiAKPiA+IFdoaWxzdCBJIHJlYWxseSBkb24ndCBsaWtlIHRoYXQgaGFj ayAoaXQgaXMgYWxsIGFib3V0IG1ha2luZyBzb2Z0d2FyZQo+ID4gZGlzdHJpYnV0aW9uIG9mIG91 dCBvZiB0cmVlIG1vZHVsZXMgZWFzaWVyIHJhdGhlciB0aGFuIHNvbWV0aGluZwo+ID4gZnVuZGFt ZW50YWwpLCBJJ20gdGhlIENYTCBRRU1VIG1haW50YWluZXIgOigKPiA+IAo+ID4gV2lsbCBmaXgg dGhhdCwgYnV0IGl0IHNob3dzIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBicm9rZW4gZmlybXdhcmUg b3V0Cj4gPiB0aGVyZS4KPiA+IAo+ID4gT24gcGx1cyBzaWRlLCBSYWZhZWwncyBjb2RlIHNlZW1z IHRvIHdvcmsgYXMgZXhwZWN0ZWQgYW5kIGxldHMgdGhhdAo+ID4gYnVnZ3kgZmlyd21hcmUgY2Fy cnkgb24gd29ya2luZyA6KSBTbyBsZXRzIHByZXRlbmQgdGhlIGJ1ZyBpbiBxZW11Cj4gPiBpcyBh IGRlbGliZXJhdGUgdGVzdCBjYXNlISAgCj4gCj4gTG9sLCB0aGFua3MgZm9yIGEgdGVzdCBjYXNl IGFuZCBzaG93aW5nIHRoYXQgUmFmYWVsJ3MgYXBwcm9hY2ggaXMKPiBpbmRlZWQgbmVjZXNzYXJ5 Lgo+IAo+IFdvdWxkIHlvdXIgdGVzdCBxdWFsaXR5IGZvciBhIHRlc3RlZC1ieSBmb3IgdGhpcz8g Rm9yIHJlZmVyZW5jZSwgdGhpcwo+IGlzIG15IGN1cnJlbnQgdmVyc2lvbiBiZWxvdyB3aXRoIFJh ZmFlbCdzIHVwZGF0ZToKClN1cmUuIFRoaXMgbWF0Y2hlcyB3aGF0IEkgaGF2ZS4KClRlc3RlZC1i eTogSm9uYXRoYW4gQ2FtZXJvbiA8Sm9uYXRoYW4uQ2FtZXJvbkBodWF3ZWkuY29tPgpSZXZpZXdl ZC1ieTogSm9uYXRoYW4gQ2FtZXJvbiA8Sm9uYXRoYW4uQ2FtZXJvbkBodWF3ZWkuY29tPgoKCj4g Cj4gODw9PT09Cj4gRnJvbTogUnVzc2VsbCBLaW5nIChPcmFjbGUpIDxybWsra2VybmVsQGFybWxp bnV4Lm9yZy51az4KPiBTdWJqZWN0OiBbUEFUQ0hdIEFDUEk6IE9ubHkgZW51bWVyYXRlIGVuYWJs ZWQgKG9yIGZ1bmN0aW9uYWwpIHByb2Nlc3Nvcgo+ICBkZXZpY2VzCj4gCj4gRnJvbTogSmFtZXMg TW9yc2UgPGphbWVzLm1vcnNlQGFybS5jb20+Cj4gCj4gVG9kYXkgdGhlIEFDUEkgZW51bWVyYXRp b24gY29kZSAndmlzaXRzJyBhbGwgZGV2aWNlcyB0aGF0IGFyZSBwcmVzZW50Lgo+IAo+IFRoaXMg aXMgYSBwcm9ibGVtIGZvciBhcm02NCwgd2hlcmUgQ1BVcyBhcmUgYWx3YXlzIHByZXNlbnQsIGJ1 dCBub3QKPiBhbHdheXMgZW5hYmxlZC4gV2hlbiBhIGRldmljZS1jaGVjayBvY2N1cnMgYmVjYXVz ZSB0aGUgZmlybXdhcmUtcG9saWN5Cj4gaGFzIGNoYW5nZWQgYW5kIGEgQ1BVIGlzIG5vdyBlbmFi bGVkLCB0aGUgZm9sbG93aW5nIGVycm9yIG9jY3VyczoKPiB8IGFjcGkgQUNQSTAwMDc6NDg6IEVu dW1lcmF0aW9uIGZhaWx1cmUKPiAKPiBUaGlzIGlzIHVsdGltYXRlbHkgYmVjYXVzZSBhY3BpX2Rl dl9yZWFkeV9mb3JfZW51bWVyYXRpb24oKSByZXR1cm5zCj4gdHJ1ZSBmb3IgYSBkZXZpY2UgdGhh dCBpcyBub3QgZW5hYmxlZC4gVGhlIEFDUEkgUHJvY2Vzc29yIGRyaXZlcgo+IHdpbGwgbm90IHJl Z2lzdGVyIHN1Y2ggQ1BVcyBhcyB0aGV5IGFyZSBub3QgJ2RlY29kaW5nIHRoZWlyIHJlc291cmNl cycuCj4gCj4gQUNQSSBhbGxvd3MgYSBkZXZpY2UgdG8gYmUgZnVuY3Rpb25hbCBpbnN0ZWFkIG9m IG1haW50YWluaW5nIHRoZQo+IHByZXNlbnQgYW5kIGVuYWJsZWQgYml0LCBidXQgd2UgY2FuJ3Qg c2ltcGx5IGNoZWNrIHRoZSBlbmFibGVkIGJpdAo+IGZvciBhbGwgZGV2aWNlcyBzaW5jZSBmaXJt d2FyZSBjYW4gYmUgYnVnZ3kuCj4gCj4gSWYgQUNQSSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGV2aWNl IGlzIHByZXNlbnQgYW5kIGVuYWJsZWQsIHRoZW4gYWxsIHdlbGwKPiBhbmQgZ29vZCwgd2UgY2Fu IGVudW1hdGUgaXQuIEhvd2V2ZXIsIGlmIHRoZSBkZXZpY2UgaXMgcHJlc2VudCBhbmQgbm90Cj4g ZW5hYmxlZCwgdGhlbiB3ZSBhbHNvIGNoZWNrIHdoZXRoZXIgdGhlIGRldmljZSBpcyBhIHByb2Nl c3NvciBkZXZpY2UKPiB0byBsaW1pdCB0aGUgaW1wYWN0IG9mIHRoaXMgbmV3IGNoZWNrIHRvIGp1 c3QgcHJvY2Vzc29yIGRldmljZXMuCj4gCj4gVGhpcyBhdm9pZHMgZW51bWVyYXRpbmcgcHJlc2Vu dCAmJiBmdW5jdGlvbmFsIHByb2Nlc3NvciBkZXZpY2VzIHRoYXQKPiBhcmUgbm90IGVuYWJsZWQu Cj4gCj4gU2lnbmVkLW9mZi1ieTogSmFtZXMgTW9yc2UgPGphbWVzLm1vcnNlQGFybS5jb20+Cj4g Q28tZGV2ZWxvcGVkLWJ5OiBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHJqd3lzb2NraS5uZXQ+Cj4g U2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIChPcmFjbGUpIDxybWsra2VybmVsQGFybWxpbnV4 Lm9yZy51az4KPiAtLS0KPiBDaGFuZ2VzIHNpbmNlIFJGQyB2MjoKPiAgKiBJbmNvcnBvcmF0ZSBj b21tZW50IHN1Z2dlc3Rpb24gYnkgR2F2aW4gU2hhbi4KPiBDaGFuZ2VzIHNpbmNlIFJGQyB2MzoK PiAgKiBGaXhlZCAic2VydCIgdHlwby4KPiBDaGFuZ2VzIHNpbmNlIFJGQyB2MyAoc21hbGxlciBz ZXJpZXMpOgo+ICAqIFJlc3RyaWN0IGNoZWNraW5nIHRoZSBlbmFibGVkIGJpdCB0byBwcm9jZXNz b3IgZGV2aWNlcywgdXBkYXRlCj4gICAgY29tbWl0IGNvbW1lbnRzLgo+ICAqIFVzZSBSYWZhZWwn cyBzdWdnZXN0aW9uIGluCj4gICAgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvci81NzYwNTY5LkR2 dVloTXhMb1RAa3JlYWNoZXIKPiAtLS0KPiAgZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMg fCAxMSArKysrKysrKwo+ICBkcml2ZXJzL2FjcGkvZGV2aWNlX3BtLmMgICAgICB8ICAyICstCj4g IGRyaXZlcnMvYWNwaS9kZXZpY2Vfc3lzZnMuYyAgIHwgIDIgKy0KPiAgZHJpdmVycy9hY3BpL2lu dGVybmFsLmggICAgICAgfCAgNCArKy0KPiAgZHJpdmVycy9hY3BpL3Byb3BlcnR5LmMgICAgICAg fCAgMiArLQo+ICBkcml2ZXJzL2FjcGkvc2Nhbi5jICAgICAgICAgICB8IDQ5ICsrKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tLS0tCj4gIDYgZmlsZXMgY2hhbmdlZCwgNTYgaW5zZXJ0aW9u cygrKSwgMTQgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3Bp X3Byb2Nlc3Nvci5jIGIvZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMKPiBpbmRleCA0ZmUy ZWY1NDA4OGMuLmNmN2MxY2NhNjlkZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2FjcGkvYWNwaV9w cm9jZXNzb3IuYwo+ICsrKyBiL2RyaXZlcnMvYWNwaS9hY3BpX3Byb2Nlc3Nvci5jCj4gQEAgLTYy Niw2ICs2MjYsMTcgQEAgc3RhdGljIHN0cnVjdCBhY3BpX3NjYW5faGFuZGxlciBwcm9jZXNzb3Jf aGFuZGxlciA9IHsKPiAgCX0sCj4gIH07Cj4gIAo+ICtib29sIGFjcGlfZGV2aWNlX2lzX3Byb2Nl c3Nvcihjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXYpCj4gK3sKPiArCWlmIChhZGV2LT5k ZXZpY2VfdHlwZSA9PSBBQ1BJX0JVU19UWVBFX1BST0NFU1NPUikKPiArCQlyZXR1cm4gdHJ1ZTsK PiArCj4gKwlpZiAoYWRldi0+ZGV2aWNlX3R5cGUgIT0gQUNQSV9CVVNfVFlQRV9ERVZJQ0UpCj4g KwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCXJldHVybiBhY3BpX3NjYW5fY2hlY2tfaGFuZGxlcihh ZGV2LCAmcHJvY2Vzc29yX2hhbmRsZXIpOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50IGFjcGlfcHJv Y2Vzc29yX2NvbnRhaW5lcl9hdHRhY2goc3RydWN0IGFjcGlfZGV2aWNlICpkZXYsCj4gIAkJCQkJ ICAgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkICppZCkKPiAgewo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2FjcGkvZGV2aWNlX3BtLmMgYi9kcml2ZXJzL2FjcGkvZGV2aWNlX3BtLmMKPiBpbmRl eCAzYjRkMDQ4YzQ5NDEuLmUzYzgwZjNiM2I1NyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2FjcGkv ZGV2aWNlX3BtLmMKPiArKysgYi9kcml2ZXJzL2FjcGkvZGV2aWNlX3BtLmMKPiBAQCAtMzEzLDcg KzMxMyw3IEBAIGludCBhY3BpX2J1c19pbml0X3Bvd2VyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2 aWNlKQo+ICAJCXJldHVybiAtRUlOVkFMOwo+ICAKPiAgCWRldmljZS0+cG93ZXIuc3RhdGUgPSBB Q1BJX1NUQVRFX1VOS05PV047Cj4gLQlpZiAoIWFjcGlfZGV2aWNlX2lzX3ByZXNlbnQoZGV2aWNl KSkgewo+ICsJaWYgKCFhY3BpX2Rldl9yZWFkeV9mb3JfZW51bWVyYXRpb24oZGV2aWNlKSkgewo+ ICAJCWRldmljZS0+ZmxhZ3MuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKPiAgCQlyZXR1cm4gLUVOWElP Owo+ICAJfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGV2aWNlX3N5c2ZzLmMgYi9kcml2 ZXJzL2FjcGkvZGV2aWNlX3N5c2ZzLmMKPiBpbmRleCAyMzM3M2ZhYTM1ZWMuLmEwMjU2ZDI0OTNh NyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2FjcGkvZGV2aWNlX3N5c2ZzLmMKPiArKysgYi9kcml2 ZXJzL2FjcGkvZGV2aWNlX3N5c2ZzLmMKPiBAQCAtMTQxLDcgKzE0MSw3IEBAIHN0YXRpYyBpbnQg Y3JlYXRlX3BucF9tb2RhbGlhcyhjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2LCBj aGFyICptb2RhbGlhCj4gIAlzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCAqaWQ7Cj4gIAo+ICAJLyog QXZvaWQgdW5uZWNlc3NhcmlseSBsb2FkaW5nIG1vZHVsZXMgZm9yIG5vbiBwcmVzZW50IGRldmlj ZXMuICovCj4gLQlpZiAoIWFjcGlfZGV2aWNlX2lzX3ByZXNlbnQoYWNwaV9kZXYpKQo+ICsJaWYg KCFhY3BpX2Rldl9yZWFkeV9mb3JfZW51bWVyYXRpb24oYWNwaV9kZXYpKQo+ICAJCXJldHVybiAw Owo+ICAKPiAgCS8qCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oIGIvZHJp dmVycy9hY3BpL2ludGVybmFsLmgKPiBpbmRleCA4NjZjN2M0ZWQyMzMuLjkzODhkNGM4Njc0YSAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaAo+ICsrKyBiL2RyaXZlcnMvYWNw aS9pbnRlcm5hbC5oCj4gQEAgLTYyLDYgKzYyLDggQEAgdm9pZCBhY3BpX3N5c2ZzX2FkZF9ob3Rw bHVnX3Byb2ZpbGUoc3RydWN0IGFjcGlfaG90cGx1Z19wcm9maWxlICpob3RwbHVnLAo+ICBpbnQg YWNwaV9zY2FuX2FkZF9oYW5kbGVyX3dpdGhfaG90cGx1ZyhzdHJ1Y3QgYWNwaV9zY2FuX2hhbmRs ZXIgKmhhbmRsZXIsCj4gIAkJCQkgICAgICAgY29uc3QgY2hhciAqaG90cGx1Z19wcm9maWxlX25h bWUpOwo+ICB2b2lkIGFjcGlfc2Nhbl9ob3RwbHVnX2VuYWJsZWQoc3RydWN0IGFjcGlfaG90cGx1 Z19wcm9maWxlICpob3RwbHVnLCBib29sIHZhbCk7Cj4gK2Jvb2wgYWNwaV9zY2FuX2NoZWNrX2hh bmRsZXIoY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlICphZGV2LAo+ICsJCQkgICAgIHN0cnVjdCBh Y3BpX3NjYW5faGFuZGxlciAqaGFuZGxlcik7Cj4gIAo+ICAjaWZkZWYgQ09ORklHX0RFQlVHX0ZT Cj4gIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICphY3BpX2RlYnVnZnNfZGlyOwo+IEBAIC0xMDcsNyAr MTA5LDYgQEAgaW50IGFjcGlfZGV2aWNlX3NldHVwX2ZpbGVzKHN0cnVjdCBhY3BpX2RldmljZSAq ZGV2KTsKPiAgdm9pZCBhY3BpX2RldmljZV9yZW1vdmVfZmlsZXMoc3RydWN0IGFjcGlfZGV2aWNl ICpkZXYpOwo+ICB2b2lkIGFjcGlfZGV2aWNlX2FkZF9maW5hbGl6ZShzdHJ1Y3QgYWNwaV9kZXZp Y2UgKmRldmljZSk7Cj4gIHZvaWQgYWNwaV9mcmVlX3BucF9pZHMoc3RydWN0IGFjcGlfZGV2aWNl X3BucCAqcG5wKTsKPiAtYm9vbCBhY3BpX2RldmljZV9pc19wcmVzZW50KGNvbnN0IHN0cnVjdCBh Y3BpX2RldmljZSAqYWRldik7Cj4gIGJvb2wgYWNwaV9kZXZpY2VfaXNfYmF0dGVyeShzdHJ1Y3Qg YWNwaV9kZXZpY2UgKmFkZXYpOwo+ICBib29sIGFjcGlfZGV2aWNlX2lzX2ZpcnN0X3BoeXNpY2Fs X25vZGUoc3RydWN0IGFjcGlfZGV2aWNlICphZGV2LAo+ICAJCQkJCWNvbnN0IHN0cnVjdCBkZXZp Y2UgKmRldik7Cj4gQEAgLTExOSw2ICsxMjAsNyBAQCBpbnQgYWNwaV9idXNfcmVnaXN0ZXJfZWFy bHlfZGV2aWNlKGludCB0eXBlKTsKPiAgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2Nv bXBhbmlvbl9tYXRjaChjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ICBpbnQgX19hY3BpX2Rl dmljZV91ZXZlbnRfbW9kYWxpYXMoY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlICphZGV2LAo+ICAJ CQkJICBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpOwo+ICtib29sIGFjcGlfZGV2aWNlX2lz X3Byb2Nlc3Nvcihjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXYpOwo+ICAKPiAgLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2Vy IFJlc291cmNlCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9wZXJ0eS5jIGIvZHJpdmVy cy9hY3BpL3Byb3BlcnR5LmMKPiBpbmRleCA2OTc5YTNmOWY5MGEuLjE0ZDY5NDhmZDg4YSAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2FjcGkvcHJvcGVydHkuYwo+ICsrKyBiL2RyaXZlcnMvYWNwaS9w cm9wZXJ0eS5jCj4gQEAgLTE0MjAsNyArMTQyMCw3IEBAIHN0YXRpYyBib29sIGFjcGlfZndub2Rl X2RldmljZV9pc19hdmFpbGFibGUoY29uc3Qgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSkK PiAgCWlmICghaXNfYWNwaV9kZXZpY2Vfbm9kZShmd25vZGUpKQo+ICAJCXJldHVybiBmYWxzZTsK PiAgCj4gLQlyZXR1cm4gYWNwaV9kZXZpY2VfaXNfcHJlc2VudCh0b19hY3BpX2RldmljZV9ub2Rl KGZ3bm9kZSkpOwo+ICsJcmV0dXJuIGFjcGlfZGV2X3JlYWR5X2Zvcl9lbnVtZXJhdGlvbih0b19h Y3BpX2RldmljZV9ub2RlKGZ3bm9kZSkpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgY29uc3Qgdm9pZCAq Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zY2FuLmMgYi9kcml2ZXJzL2FjcGkvc2Nhbi5j Cj4gaW5kZXggMDJiYjJjY2U0MjNmLi5mOTRkMWY3NDRiY2MgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9hY3BpL3NjYW4uYwo+ICsrKyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKPiBAQCAtMzA0LDcgKzMw NCw3IEBAIHN0YXRpYyBpbnQgYWNwaV9zY2FuX2RldmljZV9jaGVjayhzdHJ1Y3QgYWNwaV9kZXZp Y2UgKmFkZXYpCj4gIAlpbnQgZXJyb3I7Cj4gIAo+ICAJYWNwaV9idXNfZ2V0X3N0YXR1cyhhZGV2 KTsKPiAtCWlmIChhY3BpX2RldmljZV9pc19wcmVzZW50KGFkZXYpKSB7Cj4gKwlpZiAoYWNwaV9k ZXZfcmVhZHlfZm9yX2VudW1lcmF0aW9uKGFkZXYpKSB7Cj4gIAkJLyoKPiAgCQkgKiBUaGlzIGZ1 bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZvciBkZXZpY2Ugb2JqZWN0cyBmb3Igd2hpY2gKPiAgCQkg KiBtYXRjaGluZyBzY2FuIGhhbmRsZXJzIGV4aXN0LiAgVGhlIG9ubHkgc2l0dWF0aW9uIGluIHdo aWNoCj4gQEAgLTMzOCw3ICszMzgsNyBAQCBzdGF0aWMgaW50IGFjcGlfc2Nhbl9idXNfY2hlY2so c3RydWN0IGFjcGlfZGV2aWNlICphZGV2LCB2b2lkICpub3RfdXNlZCkKPiAgCWludCBlcnJvcjsK PiAgCj4gIAlhY3BpX2J1c19nZXRfc3RhdHVzKGFkZXYpOwo+IC0JaWYgKCFhY3BpX2RldmljZV9p c19wcmVzZW50KGFkZXYpKSB7Cj4gKwlpZiAoIWFjcGlfZGV2X3JlYWR5X2Zvcl9lbnVtZXJhdGlv bihhZGV2KSkgewo+ICAJCWFjcGlfc2Nhbl9kZXZpY2Vfbm90X2VudW1lcmF0ZWQoYWRldik7Cj4g IAkJcmV0dXJuIDA7Cj4gIAl9Cj4gQEAgLTE5MTMsMTEgKzE5MTMsNiBAQCBzdGF0aWMgYm9vbCBh Y3BpX2RldmljZV9zaG91bGRfYmVfaGlkZGVuKGFjcGlfaGFuZGxlIGhhbmRsZSkKPiAgCXJldHVy biB0cnVlOwo+ICB9Cj4gIAo+IC1ib29sIGFjcGlfZGV2aWNlX2lzX3ByZXNlbnQoY29uc3Qgc3Ry dWN0IGFjcGlfZGV2aWNlICphZGV2KQo+IC17Cj4gLQlyZXR1cm4gYWRldi0+c3RhdHVzLnByZXNl bnQgfHwgYWRldi0+c3RhdHVzLmZ1bmN0aW9uYWw7Cj4gLX0KPiAtCj4gIHN0YXRpYyBib29sIGFj cGlfc2Nhbl9oYW5kbGVyX21hdGNoaW5nKHN0cnVjdCBhY3BpX3NjYW5faGFuZGxlciAqaGFuZGxl ciwKPiAgCQkJCSAgICAgICBjb25zdCBjaGFyICppZHN0ciwKPiAgCQkJCSAgICAgICBjb25zdCBz dHJ1Y3QgYWNwaV9kZXZpY2VfaWQgKiptYXRjaGlkKQo+IEBAIC0xOTM4LDYgKzE5MzMsMTggQEAg c3RhdGljIGJvb2wgYWNwaV9zY2FuX2hhbmRsZXJfbWF0Y2hpbmcoc3RydWN0IGFjcGlfc2Nhbl9o YW5kbGVyICpoYW5kbGVyLAo+ICAJcmV0dXJuIGZhbHNlOwo+ICB9Cj4gIAo+ICtib29sIGFjcGlf c2Nhbl9jaGVja19oYW5kbGVyKGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZSAqYWRldiwKPiArCQkJ ICAgICBzdHJ1Y3QgYWNwaV9zY2FuX2hhbmRsZXIgKmhhbmRsZXIpCj4gK3sKPiArCXN0cnVjdCBh Y3BpX2hhcmR3YXJlX2lkICpod2lkOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoaHdpZCwg JmFkZXYtPnBucC5pZHMsIGxpc3QpCj4gKwkJaWYgKGFjcGlfc2Nhbl9oYW5kbGVyX21hdGNoaW5n KGhhbmRsZXIsIGh3aWQtPmlkLCBOVUxMKSkKPiArCQkJcmV0dXJuIHRydWU7Cj4gKwo+ICsJcmV0 dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICBzdGF0aWMgc3RydWN0IGFjcGlfc2Nhbl9oYW5kbGVyICph Y3BpX3NjYW5fbWF0Y2hfaGFuZGxlcihjb25zdCBjaGFyICppZHN0ciwKPiAgCQkJCQljb25zdCBz dHJ1Y3QgYWNwaV9kZXZpY2VfaWQgKiptYXRjaGlkKQo+ICB7Cj4gQEAgLTIzODEsMTYgKzIzODgs MzggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9kZXZfY2xlYXJfZGVwZW5kZW5jaWVzKTsKPiAg ICogYWNwaV9kZXZfcmVhZHlfZm9yX2VudW1lcmF0aW9uIC0gQ2hlY2sgaWYgdGhlIEFDUEkgZGV2 aWNlIGlzIHJlYWR5IGZvciBlbnVtZXJhdGlvbgo+ICAgKiBAZGV2aWNlOiBQb2ludGVyIHRvIHRo ZSAmc3RydWN0IGFjcGlfZGV2aWNlIHRvIGNoZWNrCj4gICAqCj4gLSAqIENoZWNrIGlmIHRoZSBk ZXZpY2UgaXMgcHJlc2VudCBhbmQgaGFzIG5vIHVubWV0IGRlcGVuZGVuY2llcy4KPiArICogQ2hl Y2sgaWYgdGhlIGRldmljZSBpcyBmdW5jdGlvbmFsIG9yIGVuYWJsZWQgYW5kIGhhcyBubyB1bm1l dCBkZXBlbmRlbmNpZXMuCj4gICAqCj4gLSAqIFJldHVybiB0cnVlIGlmIHRoZSBkZXZpY2UgaXMg cmVhZHkgZm9yIGVudW1lcmF0aW5vLiBPdGhlcndpc2UsIHJldHVybiBmYWxzZS4KPiArICogUmV0 dXJuIHRydWUgaWYgdGhlIGRldmljZSBpcyByZWFkeSBmb3IgZW51bWVyYXRpb24uIE90aGVyd2lz ZSwgcmV0dXJuIGZhbHNlLgo+ICAgKi8KPiAgYm9vbCBhY3BpX2Rldl9yZWFkeV9mb3JfZW51bWVy YXRpb24oY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCj4gIHsKPiAgCWlmIChkZXZp Y2UtPmZsYWdzLmhvbm9yX2RlcHMgJiYgZGV2aWNlLT5kZXBfdW5tZXQpCj4gIAkJcmV0dXJuIGZh bHNlOwo+ICAKPiAtCXJldHVybiBhY3BpX2RldmljZV9pc19wcmVzZW50KGRldmljZSk7Cj4gKwkv Kgo+ICsJICogQUNQSSA2LjUncyA2LjMuNyAiX1NUQSAoRGV2aWNlIFN0YXR1cykiIGFsbG93cyBm aXJtd2FyZSB0byByZXR1cm4KPiArCSAqICghcHJlc2VudCAmJiBmdW5jdGlvbmFsKSBmb3IgY2Vy dGFpbiB0eXBlcyBvZiBkZXZpY2VzIHRoYXQgc2hvdWxkIGJlCj4gKwkgKiBlbnVtZXJhdGVkLiBO b3RlIHRoYXQgdGhlIGVuYWJsZWQgYml0IHNob3VsZCBub3QgYmUgc2V0IHVubGVzcyB0aGUKPiAr CSAqIHByZXNlbnQgYml0IGlzIHNldC4KPiArCSAqCj4gKwkgKiBIb3dldmVyLCBsaW1pdCB0aGlz IG9ubHkgdG8gcHJvY2Vzc29yIGRldmljZXMgdG8gcmVkdWNlIHBvc3NpYmxlCj4gKwkgKiByZWdy ZXNzaW9ucyB3aXRoIGZpcm13YXJlLgo+ICsJICovCj4gKwlpZiAoZGV2aWNlLT5zdGF0dXMuZnVu Y3Rpb25hbCkKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwlpZiAoIWRldmljZS0+c3RhdHVzLnBy ZXNlbnQpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCS8qCj4gKwkgKiBGYXN0IHBhdGggLSBp ZiBlbmFibGVkIGlzIHNldCwgYXZvaWQgdGhlIG1vcmUgZXhwZW5zaXZlIHRlc3QgdG8KPiArCSAq IGNoZWNrIHdoZXRoZXIgdGhpcyBkZXZpY2UgaXMgYSBwcm9jZXNzb3IuCj4gKwkgKi8KPiArCWlm IChkZXZpY2UtPnN0YXR1cy5lbmFibGVkKQo+ICsJCXJldHVybiB0cnVlOwo+ICsKPiArCXJldHVy biAhYWNwaV9kZXZpY2VfaXNfcHJvY2Vzc29yKGRldmljZSk7Cj4gIH0KPiAgRVhQT1JUX1NZTUJP TF9HUEwoYWNwaV9kZXZfcmVhZHlfZm9yX2VudW1lcmF0aW9uKTsKPiAgCgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtcmlzY3YgbWFpbGluZyBs aXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yaXNjdgo= 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 9801CC4707C for ; Fri, 12 Jan 2024 11:52:59 +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=mIMQZ1Mtvcejw3KeneAllvBm96zh+5qYIUYuBYN1rW0=; b=S+7rvFEJ8pIY/z 0aAThScEbsViH0SD7Bdi74FXLGNTz5VbYszr9WarNzfVGJpYGh5btUfJbpxonctSq1HvMjEU44JC9 ht32oJ9KKA3Bz+JKWS7qt1j319p5Vz/wcjK+cqov4gjSZ97g+RHXmaIk5P+NVXENn4EVnwL7hoI8B CvLh6m3L/5wHwXy3ZEBGkSkBu/gcSeP9xTpoSYdtaL4XLsCKxtQu7PMM9GO7LB5c9qi1Z2AgP0KGe NSRXawyW+Yf9R6u2FmwdOOvsIUohnPbjEo1/ZwZ83zuTbwGrFDbVeojgIsI76J/jI/YfDSDD+D8bU rilAQL3ppXLXkmvVf4EQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rOG5P-002g6b-2C; Fri, 12 Jan 2024 11:52:31 +0000 Received: from frasgout.his.huawei.com ([185.176.79.56]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rOG5K-002fvr-1F; Fri, 12 Jan 2024 11:52:29 +0000 Received: from mail.maildlp.com (unknown [172.18.186.31]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4TBKZd3vRHz6K8Xc; Fri, 12 Jan 2024 19:49:29 +0800 (CST) Received: from lhrpeml500005.china.huawei.com (unknown [7.191.163.240]) by mail.maildlp.com (Postfix) with ESMTPS id 350581408FF; Fri, 12 Jan 2024 19:52:08 +0800 (CST) Received: from localhost (10.202.227.76) by lhrpeml500005.china.huawei.com (7.191.163.240) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Fri, 12 Jan 2024 11:52:07 +0000 Date: Fri, 12 Jan 2024 11:52:05 +0000 From: Jonathan Cameron To: "Russell King (Oracle)" CC: "Rafael J. Wysocki" , "Rafael J. Wysocki" , , , , , , , , , , , , , , , Salil Mehta , Jean-Philippe Brucker , , , James Morse Subject: Re: [PATCH RFC v3 01/21] ACPI: Only enumerate enabled (or functional) devices Message-ID: <20240112115205.000043b0@Huawei.com> In-Reply-To: References: <20231215161539.00000940@Huawei.com> <5760569.DvuYhMxLoT@kreacher> <20240102143925.00004361@Huawei.com> <20240111101949.000075dc@Huawei.com> Organization: Huawei Technologies Research and Development (UK) Ltd. X-Mailer: Claws Mail 4.1.0 (GTK 3.24.33; x86_64-w64-mingw32) MIME-Version: 1.0 X-Originating-IP: [10.202.227.76] X-ClientProxiedBy: lhrpeml100006.china.huawei.com (7.191.160.224) 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-20240112_035226_748171_237C629F X-CRM114-Status: GOOD ( 58.43 ) 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 T24gVGh1LCAxMSBKYW4gMjAyNCAxMDoyNjoxNSArMDAwMAoiUnVzc2VsbCBLaW5nIChPcmFjbGUp IiA8bGludXhAYXJtbGludXgub3JnLnVrPiB3cm90ZToKCj4gT24gVGh1LCBKYW4gMTEsIDIwMjQg YXQgMTA6MTk6NDlBTSArMDAwMCwgSm9uYXRoYW4gQ2FtZXJvbiB3cm90ZToKPiA+IE9uIFR1ZSwg MiBKYW4gMjAyNCAxNDozOToyNSArMDAwMAo+ID4gSm9uYXRoYW4gQ2FtZXJvbiA8Sm9uYXRoYW4u Q2FtZXJvbkBIdWF3ZWkuY29tPiB3cm90ZToKPiA+ICAgCj4gPiA+IE9uIEZyaSwgMTUgRGVjIDIw MjMgMjA6NDc6MzEgKzAxMDAKPiA+ID4gIlJhZmFlbCBKLiBXeXNvY2tpIiA8cmp3QHJqd3lzb2Nr aS5uZXQ+IHdyb3RlOgo+ID4gPiAgIAo+ID4gPiA+IE9uIEZyaWRheSwgRGVjZW1iZXIgMTUsIDIw MjMgNToxNTozOSBQTSBDRVQgSm9uYXRoYW4gQ2FtZXJvbiB3cm90ZTogICAgCj4gPiA+ID4gPiBP biBGcmksIDE1IERlYyAyMDIzIDE1OjMxOjU1ICswMDAwCj4gPiA+ID4gPiAiUnVzc2VsbCBLaW5n IChPcmFjbGUpIiA8bGludXhAYXJtbGludXgub3JnLnVrPiB3cm90ZToKPiA+ID4gPiA+ICAgICAg IAo+ID4gPiA+ID4gPiBPbiBUaHUsIERlYyAxNCwgMjAyMyBhdCAwNzozNzoxMFBNICswMTAwLCBS YWZhZWwgSi4gV3lzb2NraSB3cm90ZTogICAgICAKPiA+ID4gPiA+ID4gPiBPbiBUaHUsIERlYyAx NCwgMjAyMyBhdCA3OjE24oCvUE0gUmFmYWVsIEouIFd5c29ja2kgPHJhZmFlbEBrZXJuZWwub3Jn PiB3cm90ZTogICAgICAgIAo+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+IE9uIFRodSwg RGVjIDE0LCAyMDIzIGF0IDc6MTDigK9QTSBSdXNzZWxsIEtpbmcgKE9yYWNsZSkKPiA+ID4gPiA+ ID4gPiA+IDxsaW51eEBhcm1saW51eC5vcmcudWs+IHdyb3RlOiAgICAgICAgCj4gPiA+ID4gPiA+ ID4gPiA+IEkgZ3Vlc3Mgd2UgbmVlZCBzb21ldGhpbmcgbGlrZToKPiA+ID4gPiA+ID4gPiA+ID4K PiA+ID4gPiA+ID4gPiA+ID4gICAgICAgICBpZiAoZGV2aWNlLT5zdGF0dXMucHJlc2VudCkKPiA+ ID4gPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgIHJldHVybiBkZXZpY2UtPmRldmljZV90eXBl ICE9IEFDUElfQlVTX1RZUEVfUFJPQ0VTU09SIHx8Cj4gPiA+ID4gPiA+ID4gPiA+ICAgICAgICAg ICAgICAgICAgICAgICAgZGV2aWNlLT5zdGF0dXMuZW5hYmxlZDsKPiA+ID4gPiA+ID4gPiA+ID4g ICAgICAgICBlbHNlCj4gPiA+ID4gPiA+ID4gPiA+ICAgICAgICAgICAgICAgICByZXR1cm4gZGV2 aWNlLT5zdGF0dXMuZnVuY3Rpb25hbDsKPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ ID4gc28gd2Ugb25seSBjaGVjayBkZXZpY2UtPnN0YXR1cy5lbmFibGVkIGZvciBwcm9jZXNzb3It dHlwZSBkZXZpY2VzPyAgICAgICAgCj4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gWWVz LCBzb21ldGhpbmcgbGlrZSB0aGlzLiAgICAgICAgCj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ ID4gSG93ZXZlciwgdGhhdCBpcyBub3Qgc3VmZmljaWVudCwgYmVjYXVzZSB0aGVyZSBhcmUKPiA+ ID4gPiA+ID4gPiBBQ1BJX0JVU19UWVBFX0RFVklDRSBkZXZpY2VzIHJlcHJlc2VudGluZyBwcm9j ZXNzb3JzLgo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IEknbSBub3Qgc3VyZSBhYm91dCBh IGNsZWFuIHdheSB0byBkbyBpdCBBVE0uICAgICAgICAKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ IE9rLCBob3cgYWJvdXQ6Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBzdGF0aWMgYm9vbCBhY3Bp X2Rldl9pc19wcm9jZXNzb3IoY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCj4gPiA+ ID4gPiA+IHsKPiA+ID4gPiA+ID4gCXN0cnVjdCBhY3BpX2hhcmR3YXJlX2lkICpod2lkOwo+ID4g PiA+ID4gPiAKPiA+ID4gPiA+ID4gCWlmIChkZXZpY2UtPmRldmljZV90eXBlID09IEFDUElfQlVT X1RZUEVfUFJPQ0VTU09SKQo+ID4gPiA+ID4gPiAJCXJldHVybiB0cnVlOwo+ID4gPiA+ID4gPiAK PiA+ID4gPiA+ID4gCWlmIChkZXZpY2UtPmRldmljZV90eXBlICE9IEFDUElfQlVTX1RZUEVfREVW SUNFKQo+ID4gPiA+ID4gPiAJCXJldHVybiBmYWxzZTsKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ IAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGh3aWQsICZkZXZpY2UtPnBucC5pZHMsIGxpc3QpCj4gPiA+ ID4gPiA+IAkJaWYgKCFzdHJjbXAoQUNQSV9QUk9DRVNTT1JfT0JKRUNUX0hJRCwgaHdpZC0+aWQp IHx8Cj4gPiA+ID4gPiA+IAkJICAgICFzdHJjbXAoQUNQSV9QUk9DRVNTT1JfREVWSUNFX0hJRCwg aHdpZC0+aWQpKQo+ID4gPiA+ID4gPiAJCQlyZXR1cm4gdHJ1ZTsKPiA+ID4gPiA+ID4gCj4gPiA+ ID4gPiA+IAlyZXR1cm4gZmFsc2U7Cj4gPiA+ID4gPiA+IH0KPiA+ID4gPiA+ID4gCj4gPiA+ID4g PiA+IGFuZCB0aGVuOgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gCWlmIChkZXZpY2UtPnN0YXR1 cy5wcmVzZW50KQo+ID4gPiA+ID4gPiAJCXJldHVybiAhYWNwaV9kZXZfaXNfcHJvY2Vzc29yKGRl dmljZSkgfHwgZGV2aWNlLT5zdGF0dXMuZW5hYmxlZDsKPiA+ID4gPiA+ID4gCWVsc2UKPiA+ID4g PiA+ID4gCQlyZXR1cm4gZGV2aWNlLT5zdGF0dXMuZnVuY3Rpb25hbDsKPiA+ID4gPiA+ID4gCj4g PiA+ID4gPiA+ID8KPiA+ID4gPiA+ID4gICAgICAgCj4gPiA+ID4gPiBDaGFuZ2luZyBpdCB0byBD UFUgb25seSBmb3Igbm93IG1ha2VzIHNlbnNlIHRvIG1lIGFuZCBJIHRoaW5rIHRoaXMgY29kZSBz bmlwcGV0IHNob3VsZCBkbyB0aGUKPiA+ID4gPiA+IGpvYi4gIE5pY2UgYW5kIHNpbXBsZS4gICAg ICAKPiA+ID4gPiAKPiA+ID4gPiBXZWxsLCBleGNlcHQgdGhhdCBpdCBkb2VzIGNoZWNrcyB0aGF0 IGFyZSBkb25lIGVsc2V3aGVyZSBzbGlnaHRseQo+ID4gPiA+IGRpZmZlcmVudGx5LCB3aGljaCBm cm9tIHRoZSBtYWludGVuYW5jZSBQT1YgaXMgbm90IG5pY2UuCj4gPiA+ID4gCj4gPiA+ID4gTWF5 YmUgc29tZXRoaW5nIGxpa2UgdGhlIGFwcGVuZGVkIHBhdGNoICh1bnRlc3RlZCkuICAgIAo+ID4g PiAKPiA+ID4gSGkgUmFmYWVsLAo+ID4gPiAKPiA+ID4gQXMgZmFyIGFzIEkgY2FuIHNlZSB0aGF0 J3MgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIHNvIGxvb2tzIGdvb2QgdG8gbWUuCj4gPiA+IEkn bSBub3Qgc2V0IHVwIHRvIHRlc3QgdGhpcyB0b2RheSB0aG91Z2gsIHNvIHdpbGwgZGVmZXIgdG8g UnVzc2VsbCBvbiB3aGV0aGVyCj4gPiA+IHRoZXJlIGlzIGFueXRoaW5nIG1pc3NpbmcKPiA+ID4g Cj4gPiA+IFRoYW5rcyBmb3IgcHV0dGluZyB0aGlzIHRvZ2V0aGVyLiAgCj4gPiAKPiA+IFRoaXMg aXMgcmF0aGVyIGVtYmFycmFzc2luZy4uLgo+ID4gCj4gPiBJIHNwYW4gdGhpcyB1cCBvbiBhIFFF TVUgaW5zdGFuY2Ugd2l0aCBzb21lIHByaW50cyB0byBmaW5kIG91dCB3ZSBuZWVkCj4gPiB0aGUg IWFjcGlfZGV2aWNlX2lzX3Byb2Nlc3NvcigpIHJlc3RyaWN0aW9uLgo+ID4gT24gbXkgJ3JhbmRv bScgdGVzdCBzZXR1cCBpdCBmYWlscyBvbiBvbmUgZGV2aWNlLiBBQ1BJMDAxNyAtIHdoaWNoIEkK PiA+IGhhcHBlbiB0byBrbm93IHJhdGhlciB3ZWxsLiBJdCdzIHRoZSB3ZWlyZCBwc2V1ZG8gZGV2 aWNlIHRoYXQgbGV0cwo+ID4gYSBDWEwgYXdhcmUgT1Mga25vdyB0aGVyZSBpcyBhIENFRFQgdGFi bGUgdG8gcHJvYmUuCj4gPiAKPiA+IFdoaWxzdCBJIHJlYWxseSBkb24ndCBsaWtlIHRoYXQgaGFj ayAoaXQgaXMgYWxsIGFib3V0IG1ha2luZyBzb2Z0d2FyZQo+ID4gZGlzdHJpYnV0aW9uIG9mIG91 dCBvZiB0cmVlIG1vZHVsZXMgZWFzaWVyIHJhdGhlciB0aGFuIHNvbWV0aGluZwo+ID4gZnVuZGFt ZW50YWwpLCBJJ20gdGhlIENYTCBRRU1VIG1haW50YWluZXIgOigKPiA+IAo+ID4gV2lsbCBmaXgg dGhhdCwgYnV0IGl0IHNob3dzIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBicm9rZW4gZmlybXdhcmUg b3V0Cj4gPiB0aGVyZS4KPiA+IAo+ID4gT24gcGx1cyBzaWRlLCBSYWZhZWwncyBjb2RlIHNlZW1z IHRvIHdvcmsgYXMgZXhwZWN0ZWQgYW5kIGxldHMgdGhhdAo+ID4gYnVnZ3kgZmlyd21hcmUgY2Fy cnkgb24gd29ya2luZyA6KSBTbyBsZXRzIHByZXRlbmQgdGhlIGJ1ZyBpbiBxZW11Cj4gPiBpcyBh IGRlbGliZXJhdGUgdGVzdCBjYXNlISAgCj4gCj4gTG9sLCB0aGFua3MgZm9yIGEgdGVzdCBjYXNl IGFuZCBzaG93aW5nIHRoYXQgUmFmYWVsJ3MgYXBwcm9hY2ggaXMKPiBpbmRlZWQgbmVjZXNzYXJ5 Lgo+IAo+IFdvdWxkIHlvdXIgdGVzdCBxdWFsaXR5IGZvciBhIHRlc3RlZC1ieSBmb3IgdGhpcz8g Rm9yIHJlZmVyZW5jZSwgdGhpcwo+IGlzIG15IGN1cnJlbnQgdmVyc2lvbiBiZWxvdyB3aXRoIFJh ZmFlbCdzIHVwZGF0ZToKClN1cmUuIFRoaXMgbWF0Y2hlcyB3aGF0IEkgaGF2ZS4KClRlc3RlZC1i eTogSm9uYXRoYW4gQ2FtZXJvbiA8Sm9uYXRoYW4uQ2FtZXJvbkBodWF3ZWkuY29tPgpSZXZpZXdl ZC1ieTogSm9uYXRoYW4gQ2FtZXJvbiA8Sm9uYXRoYW4uQ2FtZXJvbkBodWF3ZWkuY29tPgoKCj4g Cj4gODw9PT09Cj4gRnJvbTogUnVzc2VsbCBLaW5nIChPcmFjbGUpIDxybWsra2VybmVsQGFybWxp bnV4Lm9yZy51az4KPiBTdWJqZWN0OiBbUEFUQ0hdIEFDUEk6IE9ubHkgZW51bWVyYXRlIGVuYWJs ZWQgKG9yIGZ1bmN0aW9uYWwpIHByb2Nlc3Nvcgo+ICBkZXZpY2VzCj4gCj4gRnJvbTogSmFtZXMg TW9yc2UgPGphbWVzLm1vcnNlQGFybS5jb20+Cj4gCj4gVG9kYXkgdGhlIEFDUEkgZW51bWVyYXRp b24gY29kZSAndmlzaXRzJyBhbGwgZGV2aWNlcyB0aGF0IGFyZSBwcmVzZW50Lgo+IAo+IFRoaXMg aXMgYSBwcm9ibGVtIGZvciBhcm02NCwgd2hlcmUgQ1BVcyBhcmUgYWx3YXlzIHByZXNlbnQsIGJ1 dCBub3QKPiBhbHdheXMgZW5hYmxlZC4gV2hlbiBhIGRldmljZS1jaGVjayBvY2N1cnMgYmVjYXVz ZSB0aGUgZmlybXdhcmUtcG9saWN5Cj4gaGFzIGNoYW5nZWQgYW5kIGEgQ1BVIGlzIG5vdyBlbmFi bGVkLCB0aGUgZm9sbG93aW5nIGVycm9yIG9jY3VyczoKPiB8IGFjcGkgQUNQSTAwMDc6NDg6IEVu dW1lcmF0aW9uIGZhaWx1cmUKPiAKPiBUaGlzIGlzIHVsdGltYXRlbHkgYmVjYXVzZSBhY3BpX2Rl dl9yZWFkeV9mb3JfZW51bWVyYXRpb24oKSByZXR1cm5zCj4gdHJ1ZSBmb3IgYSBkZXZpY2UgdGhh dCBpcyBub3QgZW5hYmxlZC4gVGhlIEFDUEkgUHJvY2Vzc29yIGRyaXZlcgo+IHdpbGwgbm90IHJl Z2lzdGVyIHN1Y2ggQ1BVcyBhcyB0aGV5IGFyZSBub3QgJ2RlY29kaW5nIHRoZWlyIHJlc291cmNl cycuCj4gCj4gQUNQSSBhbGxvd3MgYSBkZXZpY2UgdG8gYmUgZnVuY3Rpb25hbCBpbnN0ZWFkIG9m IG1haW50YWluaW5nIHRoZQo+IHByZXNlbnQgYW5kIGVuYWJsZWQgYml0LCBidXQgd2UgY2FuJ3Qg c2ltcGx5IGNoZWNrIHRoZSBlbmFibGVkIGJpdAo+IGZvciBhbGwgZGV2aWNlcyBzaW5jZSBmaXJt d2FyZSBjYW4gYmUgYnVnZ3kuCj4gCj4gSWYgQUNQSSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGV2aWNl IGlzIHByZXNlbnQgYW5kIGVuYWJsZWQsIHRoZW4gYWxsIHdlbGwKPiBhbmQgZ29vZCwgd2UgY2Fu IGVudW1hdGUgaXQuIEhvd2V2ZXIsIGlmIHRoZSBkZXZpY2UgaXMgcHJlc2VudCBhbmQgbm90Cj4g ZW5hYmxlZCwgdGhlbiB3ZSBhbHNvIGNoZWNrIHdoZXRoZXIgdGhlIGRldmljZSBpcyBhIHByb2Nl c3NvciBkZXZpY2UKPiB0byBsaW1pdCB0aGUgaW1wYWN0IG9mIHRoaXMgbmV3IGNoZWNrIHRvIGp1 c3QgcHJvY2Vzc29yIGRldmljZXMuCj4gCj4gVGhpcyBhdm9pZHMgZW51bWVyYXRpbmcgcHJlc2Vu dCAmJiBmdW5jdGlvbmFsIHByb2Nlc3NvciBkZXZpY2VzIHRoYXQKPiBhcmUgbm90IGVuYWJsZWQu Cj4gCj4gU2lnbmVkLW9mZi1ieTogSmFtZXMgTW9yc2UgPGphbWVzLm1vcnNlQGFybS5jb20+Cj4g Q28tZGV2ZWxvcGVkLWJ5OiBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHJqd3lzb2NraS5uZXQ+Cj4g U2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIChPcmFjbGUpIDxybWsra2VybmVsQGFybWxpbnV4 Lm9yZy51az4KPiAtLS0KPiBDaGFuZ2VzIHNpbmNlIFJGQyB2MjoKPiAgKiBJbmNvcnBvcmF0ZSBj b21tZW50IHN1Z2dlc3Rpb24gYnkgR2F2aW4gU2hhbi4KPiBDaGFuZ2VzIHNpbmNlIFJGQyB2MzoK PiAgKiBGaXhlZCAic2VydCIgdHlwby4KPiBDaGFuZ2VzIHNpbmNlIFJGQyB2MyAoc21hbGxlciBz ZXJpZXMpOgo+ICAqIFJlc3RyaWN0IGNoZWNraW5nIHRoZSBlbmFibGVkIGJpdCB0byBwcm9jZXNz b3IgZGV2aWNlcywgdXBkYXRlCj4gICAgY29tbWl0IGNvbW1lbnRzLgo+ICAqIFVzZSBSYWZhZWwn cyBzdWdnZXN0aW9uIGluCj4gICAgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvci81NzYwNTY5LkR2 dVloTXhMb1RAa3JlYWNoZXIKPiAtLS0KPiAgZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMg fCAxMSArKysrKysrKwo+ICBkcml2ZXJzL2FjcGkvZGV2aWNlX3BtLmMgICAgICB8ICAyICstCj4g IGRyaXZlcnMvYWNwaS9kZXZpY2Vfc3lzZnMuYyAgIHwgIDIgKy0KPiAgZHJpdmVycy9hY3BpL2lu dGVybmFsLmggICAgICAgfCAgNCArKy0KPiAgZHJpdmVycy9hY3BpL3Byb3BlcnR5LmMgICAgICAg fCAgMiArLQo+ICBkcml2ZXJzL2FjcGkvc2Nhbi5jICAgICAgICAgICB8IDQ5ICsrKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tLS0tCj4gIDYgZmlsZXMgY2hhbmdlZCwgNTYgaW5zZXJ0aW9u cygrKSwgMTQgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3Bp X3Byb2Nlc3Nvci5jIGIvZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMKPiBpbmRleCA0ZmUy ZWY1NDA4OGMuLmNmN2MxY2NhNjlkZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2FjcGkvYWNwaV9w cm9jZXNzb3IuYwo+ICsrKyBiL2RyaXZlcnMvYWNwaS9hY3BpX3Byb2Nlc3Nvci5jCj4gQEAgLTYy Niw2ICs2MjYsMTcgQEAgc3RhdGljIHN0cnVjdCBhY3BpX3NjYW5faGFuZGxlciBwcm9jZXNzb3Jf aGFuZGxlciA9IHsKPiAgCX0sCj4gIH07Cj4gIAo+ICtib29sIGFjcGlfZGV2aWNlX2lzX3Byb2Nl c3Nvcihjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXYpCj4gK3sKPiArCWlmIChhZGV2LT5k ZXZpY2VfdHlwZSA9PSBBQ1BJX0JVU19UWVBFX1BST0NFU1NPUikKPiArCQlyZXR1cm4gdHJ1ZTsK PiArCj4gKwlpZiAoYWRldi0+ZGV2aWNlX3R5cGUgIT0gQUNQSV9CVVNfVFlQRV9ERVZJQ0UpCj4g KwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCXJldHVybiBhY3BpX3NjYW5fY2hlY2tfaGFuZGxlcihh ZGV2LCAmcHJvY2Vzc29yX2hhbmRsZXIpOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50IGFjcGlfcHJv Y2Vzc29yX2NvbnRhaW5lcl9hdHRhY2goc3RydWN0IGFjcGlfZGV2aWNlICpkZXYsCj4gIAkJCQkJ ICAgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkICppZCkKPiAgewo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2FjcGkvZGV2aWNlX3BtLmMgYi9kcml2ZXJzL2FjcGkvZGV2aWNlX3BtLmMKPiBpbmRl eCAzYjRkMDQ4YzQ5NDEuLmUzYzgwZjNiM2I1NyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2FjcGkv ZGV2aWNlX3BtLmMKPiArKysgYi9kcml2ZXJzL2FjcGkvZGV2aWNlX3BtLmMKPiBAQCAtMzEzLDcg KzMxMyw3IEBAIGludCBhY3BpX2J1c19pbml0X3Bvd2VyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2 aWNlKQo+ICAJCXJldHVybiAtRUlOVkFMOwo+ICAKPiAgCWRldmljZS0+cG93ZXIuc3RhdGUgPSBB Q1BJX1NUQVRFX1VOS05PV047Cj4gLQlpZiAoIWFjcGlfZGV2aWNlX2lzX3ByZXNlbnQoZGV2aWNl KSkgewo+ICsJaWYgKCFhY3BpX2Rldl9yZWFkeV9mb3JfZW51bWVyYXRpb24oZGV2aWNlKSkgewo+ ICAJCWRldmljZS0+ZmxhZ3MuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKPiAgCQlyZXR1cm4gLUVOWElP Owo+ICAJfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGV2aWNlX3N5c2ZzLmMgYi9kcml2 ZXJzL2FjcGkvZGV2aWNlX3N5c2ZzLmMKPiBpbmRleCAyMzM3M2ZhYTM1ZWMuLmEwMjU2ZDI0OTNh NyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2FjcGkvZGV2aWNlX3N5c2ZzLmMKPiArKysgYi9kcml2 ZXJzL2FjcGkvZGV2aWNlX3N5c2ZzLmMKPiBAQCAtMTQxLDcgKzE0MSw3IEBAIHN0YXRpYyBpbnQg Y3JlYXRlX3BucF9tb2RhbGlhcyhjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2LCBj aGFyICptb2RhbGlhCj4gIAlzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCAqaWQ7Cj4gIAo+ICAJLyog QXZvaWQgdW5uZWNlc3NhcmlseSBsb2FkaW5nIG1vZHVsZXMgZm9yIG5vbiBwcmVzZW50IGRldmlj ZXMuICovCj4gLQlpZiAoIWFjcGlfZGV2aWNlX2lzX3ByZXNlbnQoYWNwaV9kZXYpKQo+ICsJaWYg KCFhY3BpX2Rldl9yZWFkeV9mb3JfZW51bWVyYXRpb24oYWNwaV9kZXYpKQo+ICAJCXJldHVybiAw Owo+ICAKPiAgCS8qCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oIGIvZHJp dmVycy9hY3BpL2ludGVybmFsLmgKPiBpbmRleCA4NjZjN2M0ZWQyMzMuLjkzODhkNGM4Njc0YSAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaAo+ICsrKyBiL2RyaXZlcnMvYWNw aS9pbnRlcm5hbC5oCj4gQEAgLTYyLDYgKzYyLDggQEAgdm9pZCBhY3BpX3N5c2ZzX2FkZF9ob3Rw bHVnX3Byb2ZpbGUoc3RydWN0IGFjcGlfaG90cGx1Z19wcm9maWxlICpob3RwbHVnLAo+ICBpbnQg YWNwaV9zY2FuX2FkZF9oYW5kbGVyX3dpdGhfaG90cGx1ZyhzdHJ1Y3QgYWNwaV9zY2FuX2hhbmRs ZXIgKmhhbmRsZXIsCj4gIAkJCQkgICAgICAgY29uc3QgY2hhciAqaG90cGx1Z19wcm9maWxlX25h bWUpOwo+ICB2b2lkIGFjcGlfc2Nhbl9ob3RwbHVnX2VuYWJsZWQoc3RydWN0IGFjcGlfaG90cGx1 Z19wcm9maWxlICpob3RwbHVnLCBib29sIHZhbCk7Cj4gK2Jvb2wgYWNwaV9zY2FuX2NoZWNrX2hh bmRsZXIoY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlICphZGV2LAo+ICsJCQkgICAgIHN0cnVjdCBh Y3BpX3NjYW5faGFuZGxlciAqaGFuZGxlcik7Cj4gIAo+ICAjaWZkZWYgQ09ORklHX0RFQlVHX0ZT Cj4gIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICphY3BpX2RlYnVnZnNfZGlyOwo+IEBAIC0xMDcsNyAr MTA5LDYgQEAgaW50IGFjcGlfZGV2aWNlX3NldHVwX2ZpbGVzKHN0cnVjdCBhY3BpX2RldmljZSAq ZGV2KTsKPiAgdm9pZCBhY3BpX2RldmljZV9yZW1vdmVfZmlsZXMoc3RydWN0IGFjcGlfZGV2aWNl ICpkZXYpOwo+ICB2b2lkIGFjcGlfZGV2aWNlX2FkZF9maW5hbGl6ZShzdHJ1Y3QgYWNwaV9kZXZp Y2UgKmRldmljZSk7Cj4gIHZvaWQgYWNwaV9mcmVlX3BucF9pZHMoc3RydWN0IGFjcGlfZGV2aWNl X3BucCAqcG5wKTsKPiAtYm9vbCBhY3BpX2RldmljZV9pc19wcmVzZW50KGNvbnN0IHN0cnVjdCBh Y3BpX2RldmljZSAqYWRldik7Cj4gIGJvb2wgYWNwaV9kZXZpY2VfaXNfYmF0dGVyeShzdHJ1Y3Qg YWNwaV9kZXZpY2UgKmFkZXYpOwo+ICBib29sIGFjcGlfZGV2aWNlX2lzX2ZpcnN0X3BoeXNpY2Fs X25vZGUoc3RydWN0IGFjcGlfZGV2aWNlICphZGV2LAo+ICAJCQkJCWNvbnN0IHN0cnVjdCBkZXZp Y2UgKmRldik7Cj4gQEAgLTExOSw2ICsxMjAsNyBAQCBpbnQgYWNwaV9idXNfcmVnaXN0ZXJfZWFy bHlfZGV2aWNlKGludCB0eXBlKTsKPiAgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2Nv bXBhbmlvbl9tYXRjaChjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ICBpbnQgX19hY3BpX2Rl dmljZV91ZXZlbnRfbW9kYWxpYXMoY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlICphZGV2LAo+ICAJ CQkJICBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpOwo+ICtib29sIGFjcGlfZGV2aWNlX2lz X3Byb2Nlc3Nvcihjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXYpOwo+ICAKPiAgLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2Vy IFJlc291cmNlCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9wZXJ0eS5jIGIvZHJpdmVy cy9hY3BpL3Byb3BlcnR5LmMKPiBpbmRleCA2OTc5YTNmOWY5MGEuLjE0ZDY5NDhmZDg4YSAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2FjcGkvcHJvcGVydHkuYwo+ICsrKyBiL2RyaXZlcnMvYWNwaS9w cm9wZXJ0eS5jCj4gQEAgLTE0MjAsNyArMTQyMCw3IEBAIHN0YXRpYyBib29sIGFjcGlfZndub2Rl X2RldmljZV9pc19hdmFpbGFibGUoY29uc3Qgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSkK PiAgCWlmICghaXNfYWNwaV9kZXZpY2Vfbm9kZShmd25vZGUpKQo+ICAJCXJldHVybiBmYWxzZTsK PiAgCj4gLQlyZXR1cm4gYWNwaV9kZXZpY2VfaXNfcHJlc2VudCh0b19hY3BpX2RldmljZV9ub2Rl KGZ3bm9kZSkpOwo+ICsJcmV0dXJuIGFjcGlfZGV2X3JlYWR5X2Zvcl9lbnVtZXJhdGlvbih0b19h Y3BpX2RldmljZV9ub2RlKGZ3bm9kZSkpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgY29uc3Qgdm9pZCAq Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zY2FuLmMgYi9kcml2ZXJzL2FjcGkvc2Nhbi5j Cj4gaW5kZXggMDJiYjJjY2U0MjNmLi5mOTRkMWY3NDRiY2MgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9hY3BpL3NjYW4uYwo+ICsrKyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKPiBAQCAtMzA0LDcgKzMw NCw3IEBAIHN0YXRpYyBpbnQgYWNwaV9zY2FuX2RldmljZV9jaGVjayhzdHJ1Y3QgYWNwaV9kZXZp Y2UgKmFkZXYpCj4gIAlpbnQgZXJyb3I7Cj4gIAo+ICAJYWNwaV9idXNfZ2V0X3N0YXR1cyhhZGV2 KTsKPiAtCWlmIChhY3BpX2RldmljZV9pc19wcmVzZW50KGFkZXYpKSB7Cj4gKwlpZiAoYWNwaV9k ZXZfcmVhZHlfZm9yX2VudW1lcmF0aW9uKGFkZXYpKSB7Cj4gIAkJLyoKPiAgCQkgKiBUaGlzIGZ1 bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZvciBkZXZpY2Ugb2JqZWN0cyBmb3Igd2hpY2gKPiAgCQkg KiBtYXRjaGluZyBzY2FuIGhhbmRsZXJzIGV4aXN0LiAgVGhlIG9ubHkgc2l0dWF0aW9uIGluIHdo aWNoCj4gQEAgLTMzOCw3ICszMzgsNyBAQCBzdGF0aWMgaW50IGFjcGlfc2Nhbl9idXNfY2hlY2so c3RydWN0IGFjcGlfZGV2aWNlICphZGV2LCB2b2lkICpub3RfdXNlZCkKPiAgCWludCBlcnJvcjsK PiAgCj4gIAlhY3BpX2J1c19nZXRfc3RhdHVzKGFkZXYpOwo+IC0JaWYgKCFhY3BpX2RldmljZV9p c19wcmVzZW50KGFkZXYpKSB7Cj4gKwlpZiAoIWFjcGlfZGV2X3JlYWR5X2Zvcl9lbnVtZXJhdGlv bihhZGV2KSkgewo+ICAJCWFjcGlfc2Nhbl9kZXZpY2Vfbm90X2VudW1lcmF0ZWQoYWRldik7Cj4g IAkJcmV0dXJuIDA7Cj4gIAl9Cj4gQEAgLTE5MTMsMTEgKzE5MTMsNiBAQCBzdGF0aWMgYm9vbCBh Y3BpX2RldmljZV9zaG91bGRfYmVfaGlkZGVuKGFjcGlfaGFuZGxlIGhhbmRsZSkKPiAgCXJldHVy biB0cnVlOwo+ICB9Cj4gIAo+IC1ib29sIGFjcGlfZGV2aWNlX2lzX3ByZXNlbnQoY29uc3Qgc3Ry dWN0IGFjcGlfZGV2aWNlICphZGV2KQo+IC17Cj4gLQlyZXR1cm4gYWRldi0+c3RhdHVzLnByZXNl bnQgfHwgYWRldi0+c3RhdHVzLmZ1bmN0aW9uYWw7Cj4gLX0KPiAtCj4gIHN0YXRpYyBib29sIGFj cGlfc2Nhbl9oYW5kbGVyX21hdGNoaW5nKHN0cnVjdCBhY3BpX3NjYW5faGFuZGxlciAqaGFuZGxl ciwKPiAgCQkJCSAgICAgICBjb25zdCBjaGFyICppZHN0ciwKPiAgCQkJCSAgICAgICBjb25zdCBz dHJ1Y3QgYWNwaV9kZXZpY2VfaWQgKiptYXRjaGlkKQo+IEBAIC0xOTM4LDYgKzE5MzMsMTggQEAg c3RhdGljIGJvb2wgYWNwaV9zY2FuX2hhbmRsZXJfbWF0Y2hpbmcoc3RydWN0IGFjcGlfc2Nhbl9o YW5kbGVyICpoYW5kbGVyLAo+ICAJcmV0dXJuIGZhbHNlOwo+ICB9Cj4gIAo+ICtib29sIGFjcGlf c2Nhbl9jaGVja19oYW5kbGVyKGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZSAqYWRldiwKPiArCQkJ ICAgICBzdHJ1Y3QgYWNwaV9zY2FuX2hhbmRsZXIgKmhhbmRsZXIpCj4gK3sKPiArCXN0cnVjdCBh Y3BpX2hhcmR3YXJlX2lkICpod2lkOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoaHdpZCwg JmFkZXYtPnBucC5pZHMsIGxpc3QpCj4gKwkJaWYgKGFjcGlfc2Nhbl9oYW5kbGVyX21hdGNoaW5n KGhhbmRsZXIsIGh3aWQtPmlkLCBOVUxMKSkKPiArCQkJcmV0dXJuIHRydWU7Cj4gKwo+ICsJcmV0 dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICBzdGF0aWMgc3RydWN0IGFjcGlfc2Nhbl9oYW5kbGVyICph Y3BpX3NjYW5fbWF0Y2hfaGFuZGxlcihjb25zdCBjaGFyICppZHN0ciwKPiAgCQkJCQljb25zdCBz dHJ1Y3QgYWNwaV9kZXZpY2VfaWQgKiptYXRjaGlkKQo+ICB7Cj4gQEAgLTIzODEsMTYgKzIzODgs MzggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9kZXZfY2xlYXJfZGVwZW5kZW5jaWVzKTsKPiAg ICogYWNwaV9kZXZfcmVhZHlfZm9yX2VudW1lcmF0aW9uIC0gQ2hlY2sgaWYgdGhlIEFDUEkgZGV2 aWNlIGlzIHJlYWR5IGZvciBlbnVtZXJhdGlvbgo+ICAgKiBAZGV2aWNlOiBQb2ludGVyIHRvIHRo ZSAmc3RydWN0IGFjcGlfZGV2aWNlIHRvIGNoZWNrCj4gICAqCj4gLSAqIENoZWNrIGlmIHRoZSBk ZXZpY2UgaXMgcHJlc2VudCBhbmQgaGFzIG5vIHVubWV0IGRlcGVuZGVuY2llcy4KPiArICogQ2hl Y2sgaWYgdGhlIGRldmljZSBpcyBmdW5jdGlvbmFsIG9yIGVuYWJsZWQgYW5kIGhhcyBubyB1bm1l dCBkZXBlbmRlbmNpZXMuCj4gICAqCj4gLSAqIFJldHVybiB0cnVlIGlmIHRoZSBkZXZpY2UgaXMg cmVhZHkgZm9yIGVudW1lcmF0aW5vLiBPdGhlcndpc2UsIHJldHVybiBmYWxzZS4KPiArICogUmV0 dXJuIHRydWUgaWYgdGhlIGRldmljZSBpcyByZWFkeSBmb3IgZW51bWVyYXRpb24uIE90aGVyd2lz ZSwgcmV0dXJuIGZhbHNlLgo+ICAgKi8KPiAgYm9vbCBhY3BpX2Rldl9yZWFkeV9mb3JfZW51bWVy YXRpb24oY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCj4gIHsKPiAgCWlmIChkZXZp Y2UtPmZsYWdzLmhvbm9yX2RlcHMgJiYgZGV2aWNlLT5kZXBfdW5tZXQpCj4gIAkJcmV0dXJuIGZh bHNlOwo+ICAKPiAtCXJldHVybiBhY3BpX2RldmljZV9pc19wcmVzZW50KGRldmljZSk7Cj4gKwkv Kgo+ICsJICogQUNQSSA2LjUncyA2LjMuNyAiX1NUQSAoRGV2aWNlIFN0YXR1cykiIGFsbG93cyBm aXJtd2FyZSB0byByZXR1cm4KPiArCSAqICghcHJlc2VudCAmJiBmdW5jdGlvbmFsKSBmb3IgY2Vy dGFpbiB0eXBlcyBvZiBkZXZpY2VzIHRoYXQgc2hvdWxkIGJlCj4gKwkgKiBlbnVtZXJhdGVkLiBO b3RlIHRoYXQgdGhlIGVuYWJsZWQgYml0IHNob3VsZCBub3QgYmUgc2V0IHVubGVzcyB0aGUKPiAr CSAqIHByZXNlbnQgYml0IGlzIHNldC4KPiArCSAqCj4gKwkgKiBIb3dldmVyLCBsaW1pdCB0aGlz IG9ubHkgdG8gcHJvY2Vzc29yIGRldmljZXMgdG8gcmVkdWNlIHBvc3NpYmxlCj4gKwkgKiByZWdy ZXNzaW9ucyB3aXRoIGZpcm13YXJlLgo+ICsJICovCj4gKwlpZiAoZGV2aWNlLT5zdGF0dXMuZnVu Y3Rpb25hbCkKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwlpZiAoIWRldmljZS0+c3RhdHVzLnBy ZXNlbnQpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCS8qCj4gKwkgKiBGYXN0IHBhdGggLSBp ZiBlbmFibGVkIGlzIHNldCwgYXZvaWQgdGhlIG1vcmUgZXhwZW5zaXZlIHRlc3QgdG8KPiArCSAq IGNoZWNrIHdoZXRoZXIgdGhpcyBkZXZpY2UgaXMgYSBwcm9jZXNzb3IuCj4gKwkgKi8KPiArCWlm IChkZXZpY2UtPnN0YXR1cy5lbmFibGVkKQo+ICsJCXJldHVybiB0cnVlOwo+ICsKPiArCXJldHVy biAhYWNwaV9kZXZpY2VfaXNfcHJvY2Vzc29yKGRldmljZSk7Cj4gIH0KPiAgRVhQT1JUX1NZTUJP TF9HUEwoYWNwaV9kZXZfcmVhZHlfZm9yX2VudW1lcmF0aW9uKTsKPiAgCgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWls aW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=