From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on archive.lwn.net X-Spam-Level: X-Spam-Status: No, score=-6.0 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=unavailable autolearn_force=no version=3.4.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by archive.lwn.net (Postfix) with ESMTP id EE0A17D089 for ; Wed, 5 Dec 2018 15:10:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727177AbeLEPKH (ORCPT ); Wed, 5 Dec 2018 10:10:07 -0500 Received: from mga07.intel.com ([134.134.136.100]:24816 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727094AbeLEPKH (ORCPT ); Wed, 5 Dec 2018 10:10:07 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Dec 2018 07:10:05 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,317,1539673200"; d="scan'208";a="98869048" Received: from jinbaowa-mobl1.ccr.corp.intel.com ([10.249.170.100]) by orsmga008.jf.intel.com with ESMTP; 05 Dec 2018 07:10:02 -0800 Message-ID: <1544022595.2841.45.camel@intel.com> Subject: Re: [PATCH v2 02/11] thermal: add irq-mode configuration for trip point From: Zhang Rui To: Lukasz Luba , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Cc: edubezval@gmail.com, daniel.lezcano@linaro.org, robh+dt@kernel.org, mark.rutland@arm.com, corbet@lwn.net, b.zolnierkie@samsung.com, krzk@kernel.org Date: Wed, 05 Dec 2018 23:09:55 +0800 In-Reply-To: <1541610593-28542-3-git-send-email-l.luba@partner.samsung.com> References: <1541610593-28542-1-git-send-email-l.luba@partner.samsung.com> <1541610593-28542-3-git-send-email-l.luba@partner.samsung.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.18.5.2-0ubuntu3.2 Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-doc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-doc@vger.kernel.org On 三, 2018-11-07 at 18:09 +0100, Lukasz Luba wrote: > This patch adds support irq mode in trip point. > When that flag is set in DT, there is no need for polling > in thermal framework. Crossing the trip point will rise an IRQ. > The naming convention for tip point 'type' can be confussing > and 'passive' (whic is passive cooling) might be interpretted > wrongly. > > This mechanism prevents from missue and adds explicit setting > for hardware which support interrupts for pre-configured temperature > threshold. > > Cc: Zhang Rui > Cc: Eduardo Valentin > Cc: Daniel Lezcano > Signed-off-by: Lukasz Luba > --- >  drivers/thermal/of-thermal.c   | 17 +++++++++++++++++ >  drivers/thermal/thermal_core.c | 10 ++++++++-- >  include/linux/thermal.h        |  5 +++++ >  3 files changed, 30 insertions(+), 2 deletions(-) > > diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of- > thermal.c > index 4bfdb4a..1a75946a 100644 > --- a/drivers/thermal/of-thermal.c > +++ b/drivers/thermal/of-thermal.c > @@ -312,6 +312,20 @@ static int of_thermal_get_trip_type(struct > thermal_zone_device *tz, int trip, >   return 0; >  } >   > +static int > +of_thermal_get_trip_irq_mode(struct thermal_zone_device *tz, int > trip, > +      bool *mode) > +{ > + struct __thermal_zone *data = tz->devdata; > + > + if (trip >= data->ntrips || trip < 0) > + return -EDOM; > + > + *mode = data->trips[trip].irq_mode; > + > + return 0; > +} > + >  static int of_thermal_get_trip_temp(struct thermal_zone_device *tz, > int trip, >       int *temp) >  { > @@ -394,6 +408,7 @@ static struct thermal_zone_device_ops > of_thermal_ops = { >   .set_mode = of_thermal_set_mode, >   >   .get_trip_type = of_thermal_get_trip_type, > + .get_trip_irq_mode = of_thermal_get_trip_irq_mode, >   .get_trip_temp = of_thermal_get_trip_temp, >   .set_trip_temp = of_thermal_set_trip_temp, >   .get_trip_hyst = of_thermal_get_trip_hyst, > @@ -827,6 +842,8 @@ static int thermal_of_populate_trip(struct > device_node *np, >   return ret; >   } >   > + trip->irq_mode = of_property_read_bool(np, "irq-mode"); > + >   /* Required for cooling map matching */ >   trip->np = np; >   of_node_get(np); > diff --git a/drivers/thermal/thermal_core.c > b/drivers/thermal/thermal_core.c > index 39fc812..6d41e08 100644 > --- a/drivers/thermal/thermal_core.c > +++ b/drivers/thermal/thermal_core.c > @@ -406,6 +406,7 @@ static void handle_critical_trips(struct > thermal_zone_device *tz, >  static void handle_thermal_trip(struct thermal_zone_device *tz, int > trip) >  { >   enum thermal_trip_type type; > + bool irq_mode = false; >   >   /* Ignore disabled trip points */ >   if (test_bit(trip, &tz->trips_disabled)) > @@ -419,9 +420,14 @@ static void handle_thermal_trip(struct > thermal_zone_device *tz, int trip) >   handle_non_critical_trips(tz, trip); >   /* >    * Alright, we handled this trip successfully. > -  * So, start monitoring again. > +  * So, start monitoring in polling mode if > +  * trip is not using irq HW support. >    */ > - monitor_thermal_zone(tz); > + if (tz->ops->get_trip_irq_mode) > + tz->ops->get_trip_irq_mode(tz, trip, &irq_mode); > + > + if (!irq_mode) > + monitor_thermal_zone(tz); >  } >   handle_thermal_trip() is called from thermal_zone_device_update(), and it is invoked for every trip points. say, you have a passive trip point 1 that supports irq_mode, and another passive trip point 2 that does not support irq_mode, monitor_thermal_zone() is still called in handle_thermal_trip(tz, 2), and the passive timer will be activated anyway, do I miss something? thanks, rui >  static void update_temperature(struct thermal_zone_device *tz) > diff --git a/include/linux/thermal.h b/include/linux/thermal.h > index 5f4705f..b064565 100644 > --- a/include/linux/thermal.h > +++ b/include/linux/thermal.h > @@ -103,6 +103,7 @@ struct thermal_zone_device_ops { >   enum thermal_device_mode); >   int (*get_trip_type) (struct thermal_zone_device *, int, >   enum thermal_trip_type *); > + int (*get_trip_irq_mode) (struct thermal_zone_device *, int, > bool *); >   int (*get_trip_temp) (struct thermal_zone_device *, int, int > *); >   int (*set_trip_temp) (struct thermal_zone_device *, int, > int); >   int (*get_trip_hyst) (struct thermal_zone_device *, int, int > *); > @@ -196,6 +197,7 @@ struct thermal_zone_device { >   struct thermal_attr *trip_temp_attrs; >   struct thermal_attr *trip_type_attrs; >   struct thermal_attr *trip_hyst_attrs; > + struct thermal_attr *trip_irq_mode_attrs; >   void *devdata; >   int trips; >   unsigned long trips_disabled; /* bitmap for disabled > trips */ > @@ -364,6 +366,8 @@ struct thermal_zone_of_device_ops { >   * @temperature: temperature value in miliCelsius >   * @hysteresis: relative hysteresis in miliCelsius >   * @type: trip point type > + * @irq_mode: to not use polling in framework set support of HW irq > (which will > + *       be triggered when temperature reaches this level). >   */ >   >  struct thermal_trip { > @@ -371,6 +375,7 @@ struct thermal_trip { >   int temperature; >   int hysteresis; >   enum thermal_trip_type type; > + bool irq_mode; >  }; >   >  /* Function declarations */ 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 X-Spam-Level: X-Spam-Status: No, score=-8.7 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 37E2AC04EB9 for ; Wed, 5 Dec 2018 15:10:25 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 0648A2064D for ; Wed, 5 Dec 2018 15:10:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="YO2kKpf4" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0648A2064D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Mime-Version:References:In-Reply-To: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=OkUrwkNXplU49ZjjS47PQz7nby64ESqZfVMuMCbhm8k=; b=YO2kKpf4a15bBF mOrdidXFx/RxiqLhl09FfYR/VKQBiOYoYP8JArseZ9nQAulqskBExZC83EAcsGXDmv8eYFmTYPzOX NsEEI+ACE7of/c5NW9gZNULoym1Cc69S6hr6lXdmWX/LOIHiWGF/kywkNT4k+l6fSnzmk25v+D2Ku KipuAQq51o1PGQeQ9qVmwY0WjhaZeX95ZVjtzq7SdF8LSKVdbsnsF0rUbwY2xE2eA7AXgRKqPPMWu 0g5pHufOCiyqA03gYo4UPOvEhFGGN9lBCIDDO3HFHNWpgRmJpaChg77YPg0hstYOLg7d5fznUceI/ Qp+bPb/vDU+ljjxq5QhA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gUYof-0003fN-2t; Wed, 05 Dec 2018 15:10:21 +0000 Received: from mga17.intel.com ([192.55.52.151]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gUYob-0002z7-3b for linux-arm-kernel@lists.infradead.org; Wed, 05 Dec 2018 15:10:18 +0000 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Dec 2018 07:10:06 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,317,1539673200"; d="scan'208";a="98869048" Received: from jinbaowa-mobl1.ccr.corp.intel.com ([10.249.170.100]) by orsmga008.jf.intel.com with ESMTP; 05 Dec 2018 07:10:02 -0800 Message-ID: <1544022595.2841.45.camel@intel.com> Subject: Re: [PATCH v2 02/11] thermal: add irq-mode configuration for trip point From: Zhang Rui To: Lukasz Luba , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Date: Wed, 05 Dec 2018 23:09:55 +0800 In-Reply-To: <1541610593-28542-3-git-send-email-l.luba@partner.samsung.com> References: <1541610593-28542-1-git-send-email-l.luba@partner.samsung.com> <1541610593-28542-3-git-send-email-l.luba@partner.samsung.com> X-Mailer: Evolution 3.18.5.2-0ubuntu3.2 Mime-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181205_071017_163157_C1121F11 X-CRM114-Status: GOOD ( 23.86 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: mark.rutland@arm.com, corbet@lwn.net, b.zolnierkie@samsung.com, daniel.lezcano@linaro.org, krzk@kernel.org, edubezval@gmail.com, robh+dt@kernel.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24g5LiJLCAyMDE4LTExLTA3IGF0IDE4OjA5ICswMTAwLCBMdWthc3ogTHViYSB3cm90ZToKPiBU aGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBpcnEgbW9kZSBpbiB0cmlwIHBvaW50Lgo+IFdoZW4gdGhh dCBmbGFnIGlzIHNldCBpbiBEVCwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgcG9sbGluZwo+IGluIHRo ZXJtYWwgZnJhbWV3b3JrLiBDcm9zc2luZyB0aGUgdHJpcCBwb2ludCB3aWxsIHJpc2UgYW4gSVJR Lgo+IFRoZSBuYW1pbmcgY29udmVudGlvbiBmb3IgdGlwIHBvaW50ICd0eXBlJyBjYW4gYmUgY29u ZnVzc2luZwo+IGFuZCAncGFzc2l2ZScgKHdoaWMgaXMgcGFzc2l2ZSBjb29saW5nKSBtaWdodCBi ZSBpbnRlcnByZXR0ZWQKPiB3cm9uZ2x5Lgo+IAo+IFRoaXMgbWVjaGFuaXNtIHByZXZlbnRzIGZy b20gbWlzc3VlIGFuZCBhZGRzIGV4cGxpY2l0IHNldHRpbmcKPiBmb3IgaGFyZHdhcmUgd2hpY2gg c3VwcG9ydCBpbnRlcnJ1cHRzIGZvciBwcmUtY29uZmlndXJlZCB0ZW1wZXJhdHVyZQo+IHRocmVz aG9sZC4KPiAKPiBDYzogWmhhbmcgUnVpIDxydWkuemhhbmdAaW50ZWwuY29tPgo+IENjOiBFZHVh cmRvIFZhbGVudGluIDxlZHViZXp2YWxAZ21haWwuY29tPgo+IENjOiBEYW5pZWwgTGV6Y2FubyA8 ZGFuaWVsLmxlemNhbm9AbGluYXJvLm9yZz4KPiBTaWduZWQtb2ZmLWJ5OiBMdWthc3ogTHViYSA8 bC5sdWJhQHBhcnRuZXIuc2Ftc3VuZy5jb20+Cj4gLS0tCj4gwqBkcml2ZXJzL3RoZXJtYWwvb2Yt dGhlcm1hbC5jwqDCoMKgfCAxNyArKysrKysrKysrKysrKysrKwo+IMKgZHJpdmVycy90aGVybWFs L3RoZXJtYWxfY29yZS5jIHwgMTAgKysrKysrKystLQo+IMKgaW5jbHVkZS9saW51eC90aGVybWFs LmjCoMKgwqDCoMKgwqDCoMKgfMKgwqA1ICsrKysrCj4gwqAzIGZpbGVzIGNoYW5nZWQsIDMwIGlu c2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhl cm1hbC9vZi10aGVybWFsLmMgYi9kcml2ZXJzL3RoZXJtYWwvb2YtCj4gdGhlcm1hbC5jCj4gaW5k ZXggNGJmZGI0YS4uMWE3NTk0NmEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy90aGVybWFsL29mLXRo ZXJtYWwuYwo+ICsrKyBiL2RyaXZlcnMvdGhlcm1hbC9vZi10aGVybWFsLmMKPiBAQCAtMzEyLDYg KzMxMiwyMCBAQCBzdGF0aWMgaW50IG9mX3RoZXJtYWxfZ2V0X3RyaXBfdHlwZShzdHJ1Y3QKPiB0 aGVybWFsX3pvbmVfZGV2aWNlICp0eiwgaW50IHRyaXAsCj4gwqAJcmV0dXJuIDA7Cj4gwqB9Cj4g wqAKPiArc3RhdGljIGludAo+ICtvZl90aGVybWFsX2dldF90cmlwX2lycV9tb2RlKHN0cnVjdCB0 aGVybWFsX3pvbmVfZGV2aWNlICp0eiwgaW50Cj4gdHJpcCwKPiArCQkJwqDCoMKgwqDCoGJvb2wg Km1vZGUpCj4gK3sKPiArCXN0cnVjdCBfX3RoZXJtYWxfem9uZSAqZGF0YSA9IHR6LT5kZXZkYXRh Owo+ICsKPiArCWlmICh0cmlwID49IGRhdGEtPm50cmlwcyB8fCB0cmlwIDwgMCkKPiArCQlyZXR1 cm4gLUVET007Cj4gKwo+ICsJKm1vZGUgPSBkYXRhLT50cmlwc1t0cmlwXS5pcnFfbW9kZTsKPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiDCoHN0YXRpYyBpbnQgb2ZfdGhlcm1hbF9nZXRfdHJp cF90ZW1wKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eiwKPiBpbnQgdHJpcCwKPiDCoAkJ CQnCoMKgwqDCoGludCAqdGVtcCkKPiDCoHsKPiBAQCAtMzk0LDYgKzQwOCw3IEBAIHN0YXRpYyBz dHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZV9vcHMKPiBvZl90aGVybWFsX29wcyA9IHsKPiDCoAku c2V0X21vZGUgPSBvZl90aGVybWFsX3NldF9tb2RlLAo+IMKgCj4gwqAJLmdldF90cmlwX3R5cGUg PSBvZl90aGVybWFsX2dldF90cmlwX3R5cGUsCj4gKwkuZ2V0X3RyaXBfaXJxX21vZGUgPSBvZl90 aGVybWFsX2dldF90cmlwX2lycV9tb2RlLAo+IMKgCS5nZXRfdHJpcF90ZW1wID0gb2ZfdGhlcm1h bF9nZXRfdHJpcF90ZW1wLAo+IMKgCS5zZXRfdHJpcF90ZW1wID0gb2ZfdGhlcm1hbF9zZXRfdHJp cF90ZW1wLAo+IMKgCS5nZXRfdHJpcF9oeXN0ID0gb2ZfdGhlcm1hbF9nZXRfdHJpcF9oeXN0LAo+ IEBAIC04MjcsNiArODQyLDggQEAgc3RhdGljIGludCB0aGVybWFsX29mX3BvcHVsYXRlX3RyaXAo c3RydWN0Cj4gZGV2aWNlX25vZGUgKm5wLAo+IMKgCQlyZXR1cm4gcmV0Owo+IMKgCX0KPiDCoAo+ ICsJdHJpcC0+aXJxX21vZGUgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJpcnEtbW9kZSIp Owo+ICsKPiDCoAkvKiBSZXF1aXJlZCBmb3IgY29vbGluZyBtYXAgbWF0Y2hpbmcgKi8KPiDCoAl0 cmlwLT5ucCA9IG5wOwo+IMKgCW9mX25vZGVfZ2V0KG5wKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy90aGVybWFsL3RoZXJtYWxfY29yZS5jCj4gYi9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9jb3Jl LmMKPiBpbmRleCAzOWZjODEyLi42ZDQxZTA4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdGhlcm1h bC90aGVybWFsX2NvcmUuYwo+ICsrKyBiL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX2NvcmUuYwo+ IEBAIC00MDYsNiArNDA2LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX2NyaXRpY2FsX3RyaXBzKHN0 cnVjdAo+IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6LAo+IMKgc3RhdGljIHZvaWQgaGFuZGxlX3Ro ZXJtYWxfdHJpcChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHosIGludAo+IHRyaXApCj4g wqB7Cj4gwqAJZW51bSB0aGVybWFsX3RyaXBfdHlwZSB0eXBlOwo+ICsJYm9vbCBpcnFfbW9kZSA9 IGZhbHNlOwo+IMKgCj4gwqAJLyogSWdub3JlIGRpc2FibGVkIHRyaXAgcG9pbnRzICovCj4gwqAJ aWYgKHRlc3RfYml0KHRyaXAsICZ0ei0+dHJpcHNfZGlzYWJsZWQpKQo+IEBAIC00MTksOSArNDIw LDE0IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV90aGVybWFsX3RyaXAoc3RydWN0Cj4gdGhlcm1hbF96 b25lX2RldmljZSAqdHosIGludCB0cmlwKQo+IMKgCQloYW5kbGVfbm9uX2NyaXRpY2FsX3RyaXBz KHR6LCB0cmlwKTsKPiDCoAkvKgo+IMKgCcKgKiBBbHJpZ2h0LCB3ZSBoYW5kbGVkIHRoaXMgdHJp cCBzdWNjZXNzZnVsbHkuCj4gLQnCoCogU28sIHN0YXJ0IG1vbml0b3JpbmcgYWdhaW4uCj4gKwnC oCogU28sIHN0YXJ0IG1vbml0b3JpbmcgaW4gcG9sbGluZyBtb2RlIGlmCj4gKwnCoCogdHJpcCBp cyBub3QgdXNpbmcgaXJxIEhXIHN1cHBvcnQuCj4gwqAJwqAqLwo+IC0JbW9uaXRvcl90aGVybWFs X3pvbmUodHopOwo+ICsJaWYgKHR6LT5vcHMtPmdldF90cmlwX2lycV9tb2RlKQo+ICsJCXR6LT5v cHMtPmdldF90cmlwX2lycV9tb2RlKHR6LCB0cmlwLCAmaXJxX21vZGUpOwo+ICsKPiArCWlmICgh aXJxX21vZGUpCj4gKwkJbW9uaXRvcl90aGVybWFsX3pvbmUodHopOwo+IMKgfQo+IMKgCmhhbmRs ZV90aGVybWFsX3RyaXAoKSBpcyBjYWxsZWQgZnJvbSB0aGVybWFsX3pvbmVfZGV2aWNlX3VwZGF0 ZSgpLCBhbmQKaXQgaXMgaW52b2tlZCBmb3IgZXZlcnkgdHJpcCBwb2ludHMuCnNheSwgeW91IGhh dmUgYSBwYXNzaXZlIHRyaXAgcG9pbnQgMSB0aGF0IHN1cHBvcnRzIGlycV9tb2RlLCBhbmQKYW5v dGhlciBwYXNzaXZlIHRyaXAgcG9pbnQgMiB0aGF0IGRvZXMgbm90IHN1cHBvcnQgaXJxX21vZGUs Cm1vbml0b3JfdGhlcm1hbF96b25lKCkgaXMgc3RpbGwgY2FsbGVkIGluIGhhbmRsZV90aGVybWFs X3RyaXAodHosIDIpLAphbmQgdGhlIHBhc3NpdmUgdGltZXIgd2lsbCBiZSBhY3RpdmF0ZWQgYW55 d2F5LCBkbyBJIG1pc3Mgc29tZXRoaW5nPwoKdGhhbmtzLApydWkKCj4gwqBzdGF0aWMgdm9pZCB1 cGRhdGVfdGVtcGVyYXR1cmUoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6KQo+IGRpZmYg LS1naXQgYS9pbmNsdWRlL2xpbnV4L3RoZXJtYWwuaCBiL2luY2x1ZGUvbGludXgvdGhlcm1hbC5o Cj4gaW5kZXggNWY0NzA1Zi4uYjA2NDU2NSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xpbnV4L3Ro ZXJtYWwuaAo+ICsrKyBiL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oCj4gQEAgLTEwMyw2ICsxMDMs NyBAQCBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZV9vcHMgewo+IMKgCQllbnVtIHRoZXJtYWxf ZGV2aWNlX21vZGUpOwo+IMKgCWludCAoKmdldF90cmlwX3R5cGUpIChzdHJ1Y3QgdGhlcm1hbF96 b25lX2RldmljZSAqLCBpbnQsCj4gwqAJCWVudW0gdGhlcm1hbF90cmlwX3R5cGUgKik7Cj4gKwlp bnQgKCpnZXRfdHJpcF9pcnFfbW9kZSkgKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICosIGlu dCwKPiBib29sICopOwo+IMKgCWludCAoKmdldF90cmlwX3RlbXApIChzdHJ1Y3QgdGhlcm1hbF96 b25lX2RldmljZSAqLCBpbnQsIGludAo+ICopOwo+IMKgCWludCAoKnNldF90cmlwX3RlbXApIChz dHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqLCBpbnQsCj4gaW50KTsKPiDCoAlpbnQgKCpnZXRf dHJpcF9oeXN0KSAoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKiwgaW50LCBpbnQKPiAqKTsK PiBAQCAtMTk2LDYgKzE5Nyw3IEBAIHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlIHsKPiDCoAlz dHJ1Y3QgdGhlcm1hbF9hdHRyICp0cmlwX3RlbXBfYXR0cnM7Cj4gwqAJc3RydWN0IHRoZXJtYWxf YXR0ciAqdHJpcF90eXBlX2F0dHJzOwo+IMKgCXN0cnVjdCB0aGVybWFsX2F0dHIgKnRyaXBfaHlz dF9hdHRyczsKPiArCXN0cnVjdCB0aGVybWFsX2F0dHIgKnRyaXBfaXJxX21vZGVfYXR0cnM7Cj4g wqAJdm9pZCAqZGV2ZGF0YTsKPiDCoAlpbnQgdHJpcHM7Cj4gwqAJdW5zaWduZWQgbG9uZyB0cmlw c19kaXNhYmxlZDsJLyogYml0bWFwIGZvciBkaXNhYmxlZAo+IHRyaXBzICovCj4gQEAgLTM2NCw2 ICszNjYsOCBAQCBzdHJ1Y3QgdGhlcm1hbF96b25lX29mX2RldmljZV9vcHMgewo+IMKgICogQHRl bXBlcmF0dXJlOiB0ZW1wZXJhdHVyZSB2YWx1ZSBpbiBtaWxpQ2Vsc2l1cwo+IMKgICogQGh5c3Rl cmVzaXM6IHJlbGF0aXZlIGh5c3RlcmVzaXMgaW4gbWlsaUNlbHNpdXMKPiDCoCAqIEB0eXBlOiB0 cmlwIHBvaW50IHR5cGUKPiArICogQGlycV9tb2RlOiB0byBub3QgdXNlIHBvbGxpbmcgaW4gZnJh bWV3b3JrIHNldCBzdXBwb3J0IG9mIEhXIGlycQo+ICh3aGljaCB3aWxsCj4gKyAqCcKgwqDCoMKg wqDCoGJlIHRyaWdnZXJlZCB3aGVuIHRlbXBlcmF0dXJlIHJlYWNoZXMgdGhpcyBsZXZlbCkuCj4g wqAgKi8KPiDCoAo+IMKgc3RydWN0IHRoZXJtYWxfdHJpcCB7Cj4gQEAgLTM3MSw2ICszNzUsNyBA QCBzdHJ1Y3QgdGhlcm1hbF90cmlwIHsKPiDCoAlpbnQgdGVtcGVyYXR1cmU7Cj4gwqAJaW50IGh5 c3RlcmVzaXM7Cj4gwqAJZW51bSB0aGVybWFsX3RyaXBfdHlwZSB0eXBlOwo+ICsJYm9vbCBpcnFf bW9kZTsKPiDCoH07Cj4gwqAKPiDCoC8qIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqLwoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5l bCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6 Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=