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=-7.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,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 EDFA7C43381 for ; Sun, 3 Mar 2019 17:17:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A2D1920835 for ; Sun, 3 Mar 2019 17:17:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1551633444; bh=UYVpKf7o+iUv3VFlzRGBxn5Iu+P1MZgtNJqsh8u977U=; h=Date:From:To:Cc:Subject:In-Reply-To:References:List-ID:From; b=Jsbk+HsccKEL9eNSvaGbAROze+6uHDRh3Qy+oyrmwRJKGHuJNgfr1tqx4+5qN+zwZ byHqBd9yzpwHxMp2MPf0O8QATq3MAVN+QnZsH3XVntcD2AaZvqc2ZyiRAPmqBGzgRg ozMOqnia/Xf+R3IW2A3qzCRovnpciKUkJ0dMhKiw= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726439AbfCCRRY (ORCPT ); Sun, 3 Mar 2019 12:17:24 -0500 Received: from mail.kernel.org ([198.145.29.99]:58010 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726416AbfCCRRX (ORCPT ); Sun, 3 Mar 2019 12:17:23 -0500 Received: from archlinux (cpc91196-cmbg18-2-0-cust659.5-4.cable.virginm.net [81.96.234.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 8CC46206B8; Sun, 3 Mar 2019 17:17:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1551633442; bh=UYVpKf7o+iUv3VFlzRGBxn5Iu+P1MZgtNJqsh8u977U=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=BRuFYsv3Q0+JhcS7OF91JidoNgMv4NU7/wEwY5YV2N6IPB6+/Sy9HAhCotR4z2zab WwJ6L4HjtpntYzyJaFkY2w60O2leeNgfJRJX31iVNIiOExI089UZvrpFitieH48wke wsfFU98EuK9apY4YQgtobPpCrr9W/JFfPhiAX7vw= Date: Sun, 3 Mar 2019 17:17:14 +0000 From: Jonathan Cameron To: Ludovic Desroches Cc: Georg Ottinger , Jonathan Cameron , "eugen.hristev@microchip.com" , Stefan Etzlstorfer , Hartmut Knaack , Lars-Peter Clausen , "Peter Meerwald-Stadler" , Nicolas Ferre , Alexandre Belloni , "David S. Miller" , "Ard Biesheuvel" , Kees Cook , "linux-iio@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Maxime Ripard Subject: Re: [PATCH] iio: adc: at91: disable adc channel interrupt in timeout case Message-ID: <20190303171714.1f66d277@archlinux> In-Reply-To: <20190222095924.ald66pmei3erur2e@M43218.corp.atmel.com> References: <20190130134202.5831-1-g.ottinger@abatec.at> <20190202102021.12bb0a72@archlinux> <0974ce54b3da4d82b6bd3026a3de5ff3@abatec.at> <20190204094540.00003072@huawei.com> <040567eeda7b40b38816da2df354386f@abatec.at> <20190222095924.ald66pmei3erur2e@M43218.corp.atmel.com> X-Mailer: Claws Mail 3.17.3 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Sender: linux-iio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org On Fri, 22 Feb 2019 10:59:24 +0100 Ludovic Desroches wrote: > On Mon, Feb 04, 2019 at 11:03:18AM +0000, Georg Ottinger wrote: > > I don't know how the race condition is triggered in detail. All I know= is that if Touch Acquisition is enabled the adc_demo_error2 will provoke a= systemhang. If Touch is disabled the issue goes away. The architecture of = at91_adc.c uses (at least) two trigger mechanisms of the ADC peripheral: To= uch Trigger and Channel Trigger (started by at91_adc_read_raw() ). In my th= eory the following happens: =20 >=20 > I think you trigger this race condition because when a touchscreen > conversion is done, it performs a conversion on *all active channels*. >=20 > Regards >=20 > Ludovic This still feels like putting a band aid in the wrong place, but I'll take it and mark it for stable. Applied to the fixes-togreg branch of iio.git and marked for stable. Maybe there isn't a better way... Jonathan >=20 > >=20 > > 1.) at91_adc_read_raw is called, a ADC conversation gets started > > 2.) Touch trigger initiates a new conversation (killing the first conve= rsation) > >=20 > > .... the conversation started from at91_adc_read_raw() never finishes = -> TIMEOUT! > >=20 > > The following Email is a summary of our findings (I mailed to the micro= chip people): > >=20 > > ----- > >=20 > > I want to let you know our findings of our ADC bughunting marathon. We = put around 100 hours of work to identify this issues and I think we found 4= of them (one of them is more hardware related). Although we could develop= workarounds for this issues - not all of them are fully understood - so if= possible including someone experienced with the ADC peripheral (maybe from= the hardware team) should be considered. > >=20 > > Attached you will find our version of at91_adc.c together with a simple= error demonstrator program called adc_demo_error.c > >=20 > > * 1st issue: Unwanted PEN/NOPEN Interrupts at low temperatures > >=20 > > When in Pendetect mode we received a lot of unwanted interrupts. This i= ssue only appeared in our test settings when our board approached -20 degre= es Celsius. We suspect that the internal Pull-down Resistor connected befor= e the Pendetect-Schmitt trigger (selected by PENDETSENS), has a negative te= mperature coefficient and at low temperature the impedance might be too hig= h and so false detects are triggered by capturing surrounding noise -> we c= ould solve this issue by changing the value ts_pen_detect_sensitivity =3D = 2 to ts_pen_detect_sensitivity =3D 3. > >=20 > > This issue can be considered to be related to our specific configuratio= n, nevertheless we want to mention that the current Datasheet States on Pag= e 1711 states the following: > >=20 > > "PENDETSENS: Pen Detection Sensitivity-Modifies the pen detection input= pull-up resistor value. See the section 'Electrical Characteristics' for f= urther details." > >=20 > > There are two issues with this description. First: This resistor is a p= ull-down resistor (measured and logical). Second the 'Electrical Characteri= stics' sections is lacking the detailed description of this resistor value. > >=20 > > * 2nd issue: at91_adc_read_raw() keeps Channel and corresponding interr= upt enabled in case of timeout. > >=20 > > Having a brief look at at91_adc_read_raw() it is obvious that in the ca= se of a timeout the setting of AT91_ADC_CHDR and AT91_ADC_IDR registers is = omitted. > > If 2 different channels are queried we can end up with a situation whe= re two Interrupts are enabled - but only one Interrupt is cleared in the In= terrupt handler. Resulting in a interrupt loop and a system hang. > >=20 > > This Issue can be reproduced by compiling and running the error demonst= ration with two channel support. (-D2ND_CHANNEL) > >=20 > > $ arm-buildroot-linux-gnueabihf-gcc adc_demo_error.c -D2ND_CHANNEL -o a= dc_demo_error2 > >=20 > > * 3rd issue: Race condition between PEN/NOPEN Interrupts using periodic= trigger and ADC_START in at91_adc_read_raw() > >=20 > > This issue represents one way how timeout situations are provoked. Actu= ally we consider the architecture of at91_adc.c a bit risky because it is u= sing two trigger sources (periodic trigger for Touch, and ADC_START for rea= ding raw values). We believe that changing the trigger source during an ong= oing conversion can have unwanted side effects, like destroying an ongoing = conversion. We currently don't fully understand what is going on, but we de= veloped a workaround that is enhancing the timeout handling in at91_adc_rea= d_raw() with a simple retry mechanism. (restarting with ADC_START) > >=20 > > * 4th issue: when touch operation is enabled (TSMODE) a delay time betw= een a channel disable (AT91_ADC_CHDR) and channel enable (AT91_ADC_CHER) is= needed otherwise the following conversion will fail. > >=20 > > This issue represents the second way how timeout situations can arise. = We measured around 40 to 42 ADC Cycles (at different ADC Clocks 500khz, 1mh= z, 2mhz, 3mhz, 5mhz) of delay needed between the channel disable and the ch= annel enable. At higher adc clock frequency (10mhz, 20 mhz) the issue doesn= 't show up (most likely because the function calls are delaying already eno= ugh). We also observed that the need delay time increases further according= to the transfer time settings (TRANSFER) by 0, 2, 4 or 8 ADC cycles. > >=20 > > This Issue can be reproduced by compiling and running the error demonst= rator (single channel) and including a simple error message in the kernel m= odule in the timeout case. > >=20 > > $ arm-buildroot-linux-gnueabihf-gcc adc_demo_error.c -o adc_demo_error > >=20 > > This issue is least understood by us and I think that talking to the ha= rdware people regarding this issue can be worthwhile.=20 > > As a workaround we put at91_adc_read_raw() to sleep after the writing A= T91_ADC_CHDR for 50 to 75 ADC Cycles.=20 > >=20 > > ------------------------------------ > >=20 > > We will run another round of tests next week - and after that I would l= ike to prepare a pull request concerning the 2nd Issue. For the 3rd and the= 4th Issue I would like to hear your opinion if our modifications are sound= before I will write an pull request. > >=20 > > Thanks for your time, > > Best wishes, > > Georg Ottinger > >=20 > > ----- > >=20 > > -----Urspr=C3=BCngliche Nachricht----- > > Von: Jonathan Cameron [mailto:jonathan.cameron@huawei.com]=20 > > Gesendet: Montag, 04. Februar 2019 10:46 > > An: Georg Ottinger > > Cc: Jonathan Cameron ; eugen.hristev@microchip.com; S= tefan Etzlstorfer ; Hartmut Knaack ; Lars-Peter Clausen ; Peter Meerwald-Stadler ; Nicolas Ferre ; Alexandre Belloni <= alexandre.belloni@bootlin.com>; Ludovic Desroches ; David S. Miller ; Ard Biesheuvel ; Kees Cook ; linux-iio@vger.kernel.= org; linux-arm-kernel@lists.infradead.org; linux-kernel@vger.kernel.org; Ma= xime Ripard > > Betreff: Re: [PATCH] iio: adc: at91: disable adc channel interrupt in t= imeout case > >=20 > > On Mon, 4 Feb 2019 07:17:07 +0000 > > Georg Ottinger wrote: > > =20 > > > Actually this issue occurred to us with an concrete product, where we= experienced a system hang at -20 =C2=B0C. > > > It was triggered by a race condition between the Touch Trigger and th= e Channel Trigger of the ADC. Once triggered we got in to the situation whe= re an ongoing Channel Conversion was lost (Timeout case).When we queried a = second channel than we got a system hang. Investigating this issue we devel= oped an error demonstrator - reading alternating two channels as fast as po= ssible (when Touch is enabled). This also provokes this issue at room tempe= rature. > > >=20 > > > For the error demonstrator use following commandline to compile: > > >=20 > > > $ arm-buildroot-linux-gnueabihf-gcc adc_demo_error.c -D2ND_CHANNEL -o= =20 > > > adc_demo_error2 > > >=20 > > > ------------- > > > // adc_demo_error.c > > > #include > > > #include > > >=20 > > > #define VLEN 10 > > >=20 > > > int main() > > > { > > > int fd_adc,fd_adc2; > > > int ret; > > > char dummy[VLEN]; > > > =20 > > > fd_adc =3D open=20 > > > ("/sys/devices/platform/ahb/ahb:apb/f8018000.adc/iio:device0/in_voltag > > > e4_raw",O_RDONLY); > > > #ifdef 2ND_CHANNEL > > > fd_adc2 =3D open=20 > > > ("/sys/devices/platform/ahb/ahb:apb/f8018000.adc/iio:device0/in_voltag > > > e5_raw",O_RDONLY); > > > #endif > > >=20 > > > while(1) { > > >=20 > > > lseek(fd_adc, 0, SEEK_SET); > > > ret =3D read(fd_adc, dummy, VLEN); > > > #ifdef 2ND_CHANNEL > > > lseek(fd_adc2, 0, SEEK_SET); > > > ret =3D read(fd_adc2, dummy, VLEN); > > > #endif > > >=20 > > > } > > > } > > >=20 > > > ------------ > > >=20 > > >=20 > > > Greeting, Georg =20 > > Hi Georg, > >=20 > > Thanks for the detailed error report and reproducer. > >=20 > > What has me wondering now is where the race is that is triggering this? > > Could you talk us through it? I don't know this driver that well so pr= obably much quicker for you to fill in the gaps rather than me try to figur= e out the race path! > >=20 > > I have no problem with defense in depth (with appropriate comments) but= I'd like to close that down as well. If it really is unsolvable I'd like = at least to have some clear comments in the code explaining why. > >=20 > > Thanks, > >=20 > > Jonathan > > =20 > > >=20 > > > -----Urspr=C3=BCngliche Nachricht----- > > > Von: Jonathan Cameron [mailto:jic23@kernel.org] > > > Gesendet: Samstag, 02. Februar 2019 11:21 > > > An: Georg Ottinger > > > Cc: eugen.hristev@microchip.com; Stefan Etzlstorfer=20 > > > ; Hartmut Knaack ;=20 > > > Lars-Peter Clausen ; Peter Meerwald-Stadler=20 > > > ; Nicolas Ferre ;=20 > > > Alexandre Belloni ; Ludovic Desroches= =20 > > > ; David S. Miller=20 > > > ; Ard Biesheuvel ;=20 > > > Kees Cook ; linux-iio@vger.kernel.org;=20 > > > linux-arm-kernel@lists.infradead.org; linux-kernel@vger.kernel.org;=20 > > > Maxime Ripard > > > Betreff: Re: [PATCH] iio: adc: at91: disable adc channel interrupt in= =20 > > > timeout case > > >=20 > > > On Wed, 30 Jan 2019 14:42:02 +0100 > > > wrote: > > > =20 > > > > From: Georg Ottinger > > > >=20 > > > > Having a brief look at at91_adc_read_raw() it is obvious that in th= e=20 > > > > case of a timeout the setting of AT91_ADC_CHDR and AT91_ADC_IDR=20 > > > > registers is omitted. If 2 different channels are queried we can en= d=20 > > > > up with a situation where two interrupts are enabled, but only one= =20 > > > > interrupt is cleared in the interrupt handler. Resulting in a=20 > > > > interrupt loop and a system hang. > > > >=20 > > > > Signed-off-by: Georg Ottinger =20 > > >=20 > > > Whilst I agree this looks like a correct change, I would like Maxime = to take a look as he is obviously much more familiar with the driver than I= am. > > >=20 > > > I suspect you can only actually get there in the event of a hardware = failure as that isn't actually a timeout you should ever see. > > > Could be wrong though! > > >=20 > > > Thanks, > > >=20 > > > Jonathan > > > =20 > > > > --- > > > > drivers/iio/adc/at91_adc.c | 28 +++++++++++++++++----------- > > > > 1 file changed, 17 insertions(+), 11 deletions(-) > > > >=20 > > > > diff --git a/drivers/iio/adc/at91_adc.c b/drivers/iio/adc/at91_adc.= c=20 > > > > index 75d2f7358..596841a3c 100644 > > > > --- a/drivers/iio/adc/at91_adc.c > > > > +++ b/drivers/iio/adc/at91_adc.c > > > > @@ -704,23 +704,29 @@ static int at91_adc_read_raw(struct iio_dev *= idev, > > > > ret =3D wait_event_interruptible_timeout(st->wq_data_avail, > > > > st->done, > > > > msecs_to_jiffies(1000)); > > > > - if (ret =3D=3D 0) > > > > - ret =3D -ETIMEDOUT; > > > > - if (ret < 0) { > > > > - mutex_unlock(&st->lock); > > > > - return ret; > > > > - } > > > > - > > > > - *val =3D st->last_value; > > > > =20 > > > > + /* Disable interrupts, regardless if adc conversion was > > > > + * successful or not > > > > + */ > > > > at91_adc_writel(st, AT91_ADC_CHDR, > > > > AT91_ADC_CH(chan->channel)); > > > > at91_adc_writel(st, AT91_ADC_IDR, BIT(chan->channel)); > > > > =20 > > > > - st->last_value =3D 0; > > > > - st->done =3D false; > > > > + if (ret > 0) { > > > > + /* a valid conversion took place */ > > > > + *val =3D st->last_value; > > > > + st->last_value =3D 0; > > > > + st->done =3D false; > > > > + ret =3D IIO_VAL_INT; > > > > + } else if (ret =3D=3D 0) { > > > > + /* conversion timeout */ > > > > + dev_err(&idev->dev, "ADC Channel %d timeout.\n", > > > > + chan->channel); > > > > + ret =3D -ETIMEDOUT; > > > > + } > > > > + > > > > mutex_unlock(&st->lock); > > > > - return IIO_VAL_INT; > > > > + return ret; > > > > =20 > > > > case IIO_CHAN_INFO_SCALE: > > > > *val =3D st->vref_mv; =20 > > > =20 > >=20 > > =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 X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,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 B09B8C43381 for ; Sun, 3 Mar 2019 17:17:29 +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 7E0BE20835 for ; Sun, 3 Mar 2019 17:17:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="e7jIgXoj"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="BRuFYsv3" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7E0BE20835 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org 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: Message-ID:Subject: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=3KeT1oyjgENP9jndODm0o9sECbb8rf/APIMhg/K7Sck=; b=e7jIgXojx77/tE 7gvqGoyykebemLsBw5NpL7Gh4d99ThgxdRk8UG2PLj8CL18MKcmQOBv8mbdd0XEUD63D4BhZRyIdi NaVx4nEkDaV2LwvsRFjQb0O+U4+2HZHrJp2MCUK5YQtW3zqt25MddAlSIjudBvMomsBg9CzKcXXp6 D4G5FbYe62AoN72163x9LG6oae3EkT7ksidxC/wkSIg5KDV/eYb0iTnjAi6Ot2m6eGsaZmaD5b1jd ShJrAO0Op+ebALLpB7yDWc2PRfow0eRgVkyNjTEm4dqZXm8e/oDxmivLcVPYyEsme/VU+x/DK9QZn o/DoBSwldYYh6aZiNjtQ==; 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 1h0Ujv-0003OY-7K; Sun, 03 Mar 2019 17:17:27 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1h0Ujr-0003OF-FX for linux-arm-kernel@lists.infradead.org; Sun, 03 Mar 2019 17:17:25 +0000 Received: from archlinux (cpc91196-cmbg18-2-0-cust659.5-4.cable.virginm.net [81.96.234.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 8CC46206B8; Sun, 3 Mar 2019 17:17:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1551633442; bh=UYVpKf7o+iUv3VFlzRGBxn5Iu+P1MZgtNJqsh8u977U=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=BRuFYsv3Q0+JhcS7OF91JidoNgMv4NU7/wEwY5YV2N6IPB6+/Sy9HAhCotR4z2zab WwJ6L4HjtpntYzyJaFkY2w60O2leeNgfJRJX31iVNIiOExI089UZvrpFitieH48wke wsfFU98EuK9apY4YQgtobPpCrr9W/JFfPhiAX7vw= Date: Sun, 3 Mar 2019 17:17:14 +0000 From: Jonathan Cameron To: Ludovic Desroches Subject: Re: [PATCH] iio: adc: at91: disable adc channel interrupt in timeout case Message-ID: <20190303171714.1f66d277@archlinux> In-Reply-To: <20190222095924.ald66pmei3erur2e@M43218.corp.atmel.com> References: <20190130134202.5831-1-g.ottinger@abatec.at> <20190202102021.12bb0a72@archlinux> <0974ce54b3da4d82b6bd3026a3de5ff3@abatec.at> <20190204094540.00003072@huawei.com> <040567eeda7b40b38816da2df354386f@abatec.at> <20190222095924.ald66pmei3erur2e@M43218.corp.atmel.com> X-Mailer: Claws Mail 3.17.3 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190303_091723_561834_4E741650 X-CRM114-Status: GOOD ( 46.51 ) 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: Alexandre Belloni , Lars-Peter Clausen , Kees Cook , Ard Biesheuvel , "linux-iio@vger.kernel.org" , Jonathan Cameron , "linux-kernel@vger.kernel.org" , Georg Ottinger , Maxime Ripard , Peter Meerwald-Stadler , Hartmut Knaack , "eugen.hristev@microchip.com" , Stefan Etzlstorfer , "David S. Miller" , "linux-arm-kernel@lists.infradead.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 T24gRnJpLCAyMiBGZWIgMjAxOSAxMDo1OToyNCArMDEwMApMdWRvdmljIERlc3JvY2hlcyA8bHVk b3ZpYy5kZXNyb2NoZXNAbWljcm9jaGlwLmNvbT4gd3JvdGU6Cgo+IE9uIE1vbiwgRmViIDA0LCAy MDE5IGF0IDExOjAzOjE4QU0gKzAwMDAsIEdlb3JnIE90dGluZ2VyIHdyb3RlOgo+ID4gSSBkb24n dCBrbm93IGhvdyB0aGUgcmFjZSBjb25kaXRpb24gaXMgdHJpZ2dlcmVkIGluIGRldGFpbC4gIEFs bCBJIGtub3cgaXMgdGhhdCBpZiBUb3VjaCBBY3F1aXNpdGlvbiBpcyBlbmFibGVkIHRoZSBhZGNf ZGVtb19lcnJvcjIgd2lsbCBwcm92b2tlIGEgc3lzdGVtaGFuZy4gSWYgVG91Y2ggaXMgZGlzYWJs ZWQgdGhlIGlzc3VlIGdvZXMgYXdheS4gVGhlIGFyY2hpdGVjdHVyZSBvZiBhdDkxX2FkYy5jIHVz ZXMgKGF0IGxlYXN0KSB0d28gdHJpZ2dlciBtZWNoYW5pc21zIG9mIHRoZSBBREMgcGVyaXBoZXJh bDogVG91Y2ggVHJpZ2dlciBhbmQgQ2hhbm5lbCBUcmlnZ2VyIChzdGFydGVkIGJ5IGF0OTFfYWRj X3JlYWRfcmF3KCkgKS4gSW4gbXkgdGhlb3J5IHRoZSBmb2xsb3dpbmcgaGFwcGVuczogIAo+IAo+ IEkgdGhpbmsgeW91IHRyaWdnZXIgdGhpcyByYWNlIGNvbmRpdGlvbiBiZWNhdXNlIHdoZW4gYSB0 b3VjaHNjcmVlbgo+IGNvbnZlcnNpb24gaXMgZG9uZSwgaXQgcGVyZm9ybXMgYSBjb252ZXJzaW9u IG9uICphbGwgYWN0aXZlIGNoYW5uZWxzKi4KPiAKPiBSZWdhcmRzCj4gCj4gTHVkb3ZpYwpUaGlz IHN0aWxsIGZlZWxzIGxpa2UgcHV0dGluZyBhIGJhbmQgYWlkIGluIHRoZSB3cm9uZyBwbGFjZSwg YnV0CkknbGwgdGFrZSBpdCBhbmQgbWFyayBpdCBmb3Igc3RhYmxlLgoKQXBwbGllZCB0byB0aGUg Zml4ZXMtdG9ncmVnIGJyYW5jaCBvZiBpaW8uZ2l0IGFuZCBtYXJrZWQgZm9yIHN0YWJsZS4KCk1h eWJlIHRoZXJlIGlzbid0IGEgYmV0dGVyIHdheS4uLgoKSm9uYXRoYW4KCj4gCj4gPiAKPiA+IDEu KSBhdDkxX2FkY19yZWFkX3JhdyBpcyBjYWxsZWQsIGEgQURDIGNvbnZlcnNhdGlvbiBnZXRzIHN0 YXJ0ZWQKPiA+IDIuKSBUb3VjaCB0cmlnZ2VyIGluaXRpYXRlcyBhIG5ldyBjb252ZXJzYXRpb24g KGtpbGxpbmcgdGhlIGZpcnN0IGNvbnZlcnNhdGlvbikKPiA+IAo+ID4gLi4uLiB0aGUgY29udmVy c2F0aW9uIHN0YXJ0ZWQgZnJvbSAgYXQ5MV9hZGNfcmVhZF9yYXcoKSBuZXZlciBmaW5pc2hlcyAt PiBUSU1FT1VUIQo+ID4gCj4gPiBUaGUgZm9sbG93aW5nIEVtYWlsIGlzIGEgc3VtbWFyeSBvZiBv dXIgZmluZGluZ3MgKEkgbWFpbGVkIHRvIHRoZSBtaWNyb2NoaXAgcGVvcGxlKToKPiA+IAo+ID4g LS0tLS0KPiA+IAo+ID4gSSB3YW50IHRvIGxldCB5b3Uga25vdyBvdXIgZmluZGluZ3Mgb2Ygb3Vy IEFEQyBidWdodW50aW5nIG1hcmF0aG9uLiBXZSBwdXQgYXJvdW5kIDEwMCBob3VycyBvZiB3b3Jr IHRvIGlkZW50aWZ5IHRoaXMgaXNzdWVzIGFuZCBJIHRoaW5rIHdlIGZvdW5kIDQgIG9mIHRoZW0g KG9uZSBvZiB0aGVtIGlzIG1vcmUgaGFyZHdhcmUgcmVsYXRlZCkuIEFsdGhvdWdoIHdlIGNvdWxk IGRldmVsb3Agd29ya2Fyb3VuZHMgZm9yIHRoaXMgaXNzdWVzIC0gbm90IGFsbCBvZiB0aGVtIGFy ZSBmdWxseSB1bmRlcnN0b29kIC0gc28gaWYgcG9zc2libGUgaW5jbHVkaW5nIHNvbWVvbmUgZXhw ZXJpZW5jZWQgd2l0aCB0aGUgQURDIHBlcmlwaGVyYWwgKG1heWJlIGZyb20gdGhlIGhhcmR3YXJl IHRlYW0pIHNob3VsZCBiZSBjb25zaWRlcmVkLgo+ID4gCj4gPiBBdHRhY2hlZCB5b3Ugd2lsbCBm aW5kIG91ciB2ZXJzaW9uIG9mIGF0OTFfYWRjLmMgdG9nZXRoZXIgd2l0aCBhIHNpbXBsZSBlcnJv ciBkZW1vbnN0cmF0b3IgcHJvZ3JhbSBjYWxsZWQgYWRjX2RlbW9fZXJyb3IuYwo+ID4gCj4gPiAq IDFzdCBpc3N1ZTogVW53YW50ZWQgUEVOL05PUEVOIEludGVycnVwdHMgYXQgbG93IHRlbXBlcmF0 dXJlcwo+ID4gCj4gPiBXaGVuIGluIFBlbmRldGVjdCBtb2RlIHdlIHJlY2VpdmVkIGEgbG90IG9m IHVud2FudGVkIGludGVycnVwdHMuIFRoaXMgaXNzdWUgb25seSBhcHBlYXJlZCBpbiBvdXIgdGVz dCBzZXR0aW5ncyB3aGVuIG91ciBib2FyZCBhcHByb2FjaGVkIC0yMCBkZWdyZWVzIENlbHNpdXMu IFdlIHN1c3BlY3QgdGhhdCB0aGUgaW50ZXJuYWwgUHVsbC1kb3duIFJlc2lzdG9yIGNvbm5lY3Rl ZCBiZWZvcmUgdGhlIFBlbmRldGVjdC1TY2htaXR0IHRyaWdnZXIgKHNlbGVjdGVkIGJ5IFBFTkRF VFNFTlMpLCBoYXMgYSBuZWdhdGl2ZSB0ZW1wZXJhdHVyZSBjb2VmZmljaWVudCBhbmQgYXQgbG93 IHRlbXBlcmF0dXJlIHRoZSBpbXBlZGFuY2UgbWlnaHQgYmUgdG9vIGhpZ2ggYW5kIHNvIGZhbHNl IGRldGVjdHMgYXJlIHRyaWdnZXJlZCBieSBjYXB0dXJpbmcgc3Vycm91bmRpbmcgbm9pc2UgLT4g d2UgY291bGQgc29sdmUgdGhpcyBpc3N1ZSBieSBjaGFuZ2luZyB0aGUgdmFsdWUgIHRzX3Blbl9k ZXRlY3Rfc2Vuc2l0aXZpdHkgPSAyIHRvIHRzX3Blbl9kZXRlY3Rfc2Vuc2l0aXZpdHkgPSAzLgo+ ID4gCj4gPiBUaGlzIGlzc3VlIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlIHJlbGF0ZWQgdG8gb3Vy IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24sIG5ldmVydGhlbGVzcyB3ZSB3YW50IHRvIG1lbnRpb24g dGhhdCB0aGUgY3VycmVudCBEYXRhc2hlZXQgU3RhdGVzIG9uIFBhZ2UgMTcxMSBzdGF0ZXMgdGhl IGZvbGxvd2luZzoKPiA+IAo+ID4gIlBFTkRFVFNFTlM6IFBlbiBEZXRlY3Rpb24gU2Vuc2l0aXZp dHktTW9kaWZpZXMgdGhlIHBlbiBkZXRlY3Rpb24gaW5wdXQgcHVsbC11cCByZXNpc3RvciB2YWx1 ZS4gU2VlIHRoZSBzZWN0aW9uICdFbGVjdHJpY2FsIENoYXJhY3RlcmlzdGljcycgZm9yIGZ1cnRo ZXIgZGV0YWlscy4iCj4gPiAKPiA+IFRoZXJlIGFyZSB0d28gaXNzdWVzIHdpdGggdGhpcyBkZXNj cmlwdGlvbi4gRmlyc3Q6IFRoaXMgcmVzaXN0b3IgaXMgYSBwdWxsLWRvd24gcmVzaXN0b3IgKG1l YXN1cmVkIGFuZCBsb2dpY2FsKS4gU2Vjb25kIHRoZSAnRWxlY3RyaWNhbCBDaGFyYWN0ZXJpc3Rp Y3MnIHNlY3Rpb25zIGlzIGxhY2tpbmcgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoaXMg cmVzaXN0b3IgdmFsdWUuCj4gPiAKPiA+ICogMm5kIGlzc3VlOiBhdDkxX2FkY19yZWFkX3Jhdygp IGtlZXBzIENoYW5uZWwgYW5kIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IGVuYWJsZWQgaW4gY2Fz ZSBvZiB0aW1lb3V0Lgo+ID4gCj4gPiBIYXZpbmcgYSBicmllZiBsb29rIGF0IGF0OTFfYWRjX3Jl YWRfcmF3KCkgaXQgaXMgb2J2aW91cyB0aGF0IGluIHRoZSBjYXNlIG9mIGEgdGltZW91dCB0aGUg c2V0dGluZyBvZiBBVDkxX0FEQ19DSERSIGFuZCBBVDkxX0FEQ19JRFIgcmVnaXN0ZXJzIGlzIG9t aXR0ZWQuCj4gPiBJZiAyIGRpZmZlcmVudCBjaGFubmVscyBhcmUgcXVlcmllZCAgd2UgY2FuIGVu ZCB1cCB3aXRoIGEgc2l0dWF0aW9uIHdoZXJlIHR3byBJbnRlcnJ1cHRzIGFyZSBlbmFibGVkIC0g YnV0IG9ubHkgb25lIEludGVycnVwdCBpcyBjbGVhcmVkIGluIHRoZSBJbnRlcnJ1cHQgaGFuZGxl ci4gUmVzdWx0aW5nIGluIGEgaW50ZXJydXB0IGxvb3AgYW5kIGEgc3lzdGVtIGhhbmcuCj4gPiAK PiA+IFRoaXMgSXNzdWUgY2FuIGJlIHJlcHJvZHVjZWQgYnkgY29tcGlsaW5nIGFuZCBydW5uaW5n IHRoZSBlcnJvciBkZW1vbnN0cmF0aW9uIHdpdGggdHdvIGNoYW5uZWwgc3VwcG9ydC4gKC1EMk5E X0NIQU5ORUwpCj4gPiAKPiA+ICQgYXJtLWJ1aWxkcm9vdC1saW51eC1nbnVlYWJpaGYtZ2NjIGFk Y19kZW1vX2Vycm9yLmMgLUQyTkRfQ0hBTk5FTCAtbyBhZGNfZGVtb19lcnJvcjIKPiA+IAo+ID4g KiAzcmQgaXNzdWU6IFJhY2UgY29uZGl0aW9uIGJldHdlZW4gUEVOL05PUEVOIEludGVycnVwdHMg dXNpbmcgcGVyaW9kaWMgdHJpZ2dlciBhbmQgQURDX1NUQVJUIGluIGF0OTFfYWRjX3JlYWRfcmF3 KCkKPiA+IAo+ID4gVGhpcyBpc3N1ZSByZXByZXNlbnRzIG9uZSB3YXkgaG93IHRpbWVvdXQgc2l0 dWF0aW9ucyBhcmUgcHJvdm9rZWQuIEFjdHVhbGx5IHdlIGNvbnNpZGVyIHRoZSBhcmNoaXRlY3R1 cmUgb2YgYXQ5MV9hZGMuYyBhIGJpdCByaXNreSBiZWNhdXNlIGl0IGlzIHVzaW5nIHR3byB0cmln Z2VyIHNvdXJjZXMgKHBlcmlvZGljIHRyaWdnZXIgZm9yIFRvdWNoLCBhbmQgQURDX1NUQVJUIGZv ciByZWFkaW5nIHJhdyB2YWx1ZXMpLiBXZSBiZWxpZXZlIHRoYXQgY2hhbmdpbmcgdGhlIHRyaWdn ZXIgc291cmNlIGR1cmluZyBhbiBvbmdvaW5nIGNvbnZlcnNpb24gY2FuIGhhdmUgdW53YW50ZWQg c2lkZSBlZmZlY3RzLCBsaWtlIGRlc3Ryb3lpbmcgYW4gb25nb2luZyBjb252ZXJzaW9uLiBXZSBj dXJyZW50bHkgZG9uJ3QgZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGlzIGdvaW5nIG9uLCBidXQgd2Ug ZGV2ZWxvcGVkIGEgd29ya2Fyb3VuZCB0aGF0IGlzIGVuaGFuY2luZyB0aGUgdGltZW91dCBoYW5k bGluZyBpbiBhdDkxX2FkY19yZWFkX3JhdygpIHdpdGggYSBzaW1wbGUgcmV0cnkgbWVjaGFuaXNt LiAocmVzdGFydGluZyB3aXRoIEFEQ19TVEFSVCkKPiA+IAo+ID4gKiA0dGggaXNzdWU6IHdoZW4g dG91Y2ggb3BlcmF0aW9uIGlzIGVuYWJsZWQgKFRTTU9ERSkgYSBkZWxheSB0aW1lIGJldHdlZW4g YSBjaGFubmVsIGRpc2FibGUgKEFUOTFfQURDX0NIRFIpIGFuZCBjaGFubmVsIGVuYWJsZSAoQVQ5 MV9BRENfQ0hFUikgaXMgbmVlZGVkIG90aGVyd2lzZSB0aGUgZm9sbG93aW5nIGNvbnZlcnNpb24g d2lsbCBmYWlsLgo+ID4gCj4gPiBUaGlzIGlzc3VlIHJlcHJlc2VudHMgdGhlIHNlY29uZCB3YXkg aG93IHRpbWVvdXQgc2l0dWF0aW9ucyBjYW4gYXJpc2UuIFdlIG1lYXN1cmVkIGFyb3VuZCA0MCB0 byA0MiBBREMgQ3ljbGVzIChhdCBkaWZmZXJlbnQgQURDIENsb2NrcyA1MDBraHosIDFtaHosIDJt aHosIDNtaHosIDVtaHopIG9mIGRlbGF5IG5lZWRlZCBiZXR3ZWVuIHRoZSBjaGFubmVsIGRpc2Fi bGUgYW5kIHRoZSBjaGFubmVsIGVuYWJsZS4gQXQgaGlnaGVyIGFkYyBjbG9jayBmcmVxdWVuY3kg KDEwbWh6LCAyMCBtaHopIHRoZSBpc3N1ZSBkb2Vzbid0IHNob3cgdXAgKG1vc3QgbGlrZWx5IGJl Y2F1c2UgdGhlIGZ1bmN0aW9uIGNhbGxzIGFyZSBkZWxheWluZyBhbHJlYWR5IGVub3VnaCkuIFdl IGFsc28gb2JzZXJ2ZWQgdGhhdCB0aGUgbmVlZCBkZWxheSB0aW1lIGluY3JlYXNlcyBmdXJ0aGVy IGFjY29yZGluZyB0byB0aGUgdHJhbnNmZXIgdGltZSBzZXR0aW5ncyAoVFJBTlNGRVIpIGJ5IDAs IDIsIDQgb3IgOCAgQURDIGN5Y2xlcy4KPiA+IAo+ID4gVGhpcyBJc3N1ZSBjYW4gYmUgcmVwcm9k dWNlZCBieSBjb21waWxpbmcgYW5kIHJ1bm5pbmcgdGhlIGVycm9yIGRlbW9uc3RyYXRvciAoc2lu Z2xlIGNoYW5uZWwpIGFuZCBpbmNsdWRpbmcgYSBzaW1wbGUgZXJyb3IgbWVzc2FnZSBpbiB0aGUg a2VybmVsIG1vZHVsZSBpbiB0aGUgdGltZW91dCBjYXNlLgo+ID4gCj4gPiAkIGFybS1idWlsZHJv b3QtbGludXgtZ251ZWFiaWhmLWdjYyBhZGNfZGVtb19lcnJvci5jIC1vIGFkY19kZW1vX2Vycm9y Cj4gPiAKPiA+IFRoaXMgaXNzdWUgaXMgbGVhc3QgdW5kZXJzdG9vZCBieSB1cyBhbmQgSSB0aGlu ayB0aGF0IHRhbGtpbmcgdG8gdGhlIGhhcmR3YXJlIHBlb3BsZSByZWdhcmRpbmcgdGhpcyBpc3N1 ZSBjYW4gYmUgd29ydGh3aGlsZS4gCj4gPiBBcyBhIHdvcmthcm91bmQgd2UgcHV0IGF0OTFfYWRj X3JlYWRfcmF3KCkgdG8gc2xlZXAgYWZ0ZXIgdGhlIHdyaXRpbmcgQVQ5MV9BRENfQ0hEUiBmb3Ig NTAgdG8gNzUgQURDIEN5Y2xlcy4gCj4gPiAKPiA+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQo+ID4gCj4gPiBXZSB3aWxsIHJ1biBhbm90aGVyIHJvdW5kIG9mIHRlc3RzIG5l eHQgd2VlayAtIGFuZCBhZnRlciB0aGF0IEkgd291bGQgbGlrZSB0byBwcmVwYXJlIGEgcHVsbCBy ZXF1ZXN0IGNvbmNlcm5pbmcgdGhlIDJuZCBJc3N1ZS4gRm9yIHRoZSAzcmQgYW5kIHRoZSA0dGgg SXNzdWUgSSB3b3VsZCBsaWtlIHRvIGhlYXIgeW91ciBvcGluaW9uIGlmIG91ciBtb2RpZmljYXRp b25zIGFyZSBzb3VuZCBiZWZvcmUgSSB3aWxsIHdyaXRlIGFuIHB1bGwgcmVxdWVzdC4KPiA+IAo+ ID4gVGhhbmtzIGZvciB5b3VyIHRpbWUsCj4gPiBCZXN0IHdpc2hlcywKPiA+IEdlb3JnIE90dGlu Z2VyCj4gPiAKPiA+IC0tLS0tCj4gPiAKPiA+IC0tLS0tVXJzcHLDvG5nbGljaGUgTmFjaHJpY2h0 LS0tLS0KPiA+IFZvbjogSm9uYXRoYW4gQ2FtZXJvbiBbbWFpbHRvOmpvbmF0aGFuLmNhbWVyb25A aHVhd2VpLmNvbV0gCj4gPiBHZXNlbmRldDogTW9udGFnLCAwNC4gRmVicnVhciAyMDE5IDEwOjQ2 Cj4gPiBBbjogR2VvcmcgT3R0aW5nZXIgPGcub3R0aW5nZXJAYWJhdGVjLmF0Pgo+ID4gQ2M6IEpv bmF0aGFuIENhbWVyb24gPGppYzIzQGtlcm5lbC5vcmc+OyBldWdlbi5ocmlzdGV2QG1pY3JvY2hp cC5jb207IFN0ZWZhbiBFdHpsc3RvcmZlciA8cy5ldHpsc3RvcmZlckBhYmF0ZWMuYXQ+OyBIYXJ0 bXV0IEtuYWFjayA8a25hYWNrLmhAZ214LmRlPjsgTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1l dGFmb28uZGU+OyBQZXRlciBNZWVyd2FsZC1TdGFkbGVyIDxwbWVlcndAcG1lZXJ3Lm5ldD47IE5p Y29sYXMgRmVycmUgPG5pY29sYXMuZmVycmVAbWljcm9jaGlwLmNvbT47IEFsZXhhbmRyZSBCZWxs b25pIDxhbGV4YW5kcmUuYmVsbG9uaUBib290bGluLmNvbT47IEx1ZG92aWMgRGVzcm9jaGVzIDxs dWRvdmljLmRlc3JvY2hlc0BtaWNyb2NoaXAuY29tPjsgRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBk YXZlbWxvZnQubmV0PjsgQXJkIEJpZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc+ OyBLZWVzIENvb2sgPGtlZXNjb29rQGNocm9taXVtLm9yZz47IGxpbnV4LWlpb0B2Z2VyLmtlcm5l bC5vcmc7IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsgbGludXgta2VybmVs QHZnZXIua2VybmVsLm9yZzsgTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBib290bGluLmNv bT4KPiA+IEJldHJlZmY6IFJlOiBbUEFUQ0hdIGlpbzogYWRjOiBhdDkxOiBkaXNhYmxlIGFkYyBj aGFubmVsIGludGVycnVwdCBpbiB0aW1lb3V0IGNhc2UKPiA+IAo+ID4gT24gTW9uLCA0IEZlYiAy MDE5IDA3OjE3OjA3ICswMDAwCj4gPiBHZW9yZyBPdHRpbmdlciA8Zy5vdHRpbmdlckBhYmF0ZWMu YXQ+IHdyb3RlOgo+ID4gICAKPiA+ID4gQWN0dWFsbHkgdGhpcyBpc3N1ZSBvY2N1cnJlZCB0byB1 cyB3aXRoIGFuIGNvbmNyZXRlIHByb2R1Y3QsIHdoZXJlIHdlIGV4cGVyaWVuY2VkIGEgc3lzdGVt IGhhbmcgYXQgLTIwIMKwQy4KPiA+ID4gSXQgd2FzIHRyaWdnZXJlZCBieSBhIHJhY2UgY29uZGl0 aW9uIGJldHdlZW4gdGhlIFRvdWNoIFRyaWdnZXIgYW5kIHRoZSBDaGFubmVsIFRyaWdnZXIgb2Yg dGhlIEFEQy4gT25jZSB0cmlnZ2VyZWQgd2UgZ290IGluIHRvIHRoZSBzaXR1YXRpb24gd2hlcmUg YW4gb25nb2luZyBDaGFubmVsIENvbnZlcnNpb24gd2FzIGxvc3QgKFRpbWVvdXQgY2FzZSkuV2hl biB3ZSBxdWVyaWVkIGEgc2Vjb25kIGNoYW5uZWwgdGhhbiB3ZSBnb3QgYSBzeXN0ZW0gaGFuZy4g SW52ZXN0aWdhdGluZyB0aGlzIGlzc3VlIHdlIGRldmVsb3BlZCBhbiBlcnJvciBkZW1vbnN0cmF0 b3IgLSByZWFkaW5nIGFsdGVybmF0aW5nIHR3byBjaGFubmVscyBhcyBmYXN0IGFzIHBvc3NpYmxl ICh3aGVuIFRvdWNoIGlzIGVuYWJsZWQpLiBUaGlzIGFsc28gcHJvdm9rZXMgdGhpcyBpc3N1ZSBh dCByb29tIHRlbXBlcmF0dXJlLgo+ID4gPiAKPiA+ID4gRm9yIHRoZSBlcnJvciBkZW1vbnN0cmF0 b3IgdXNlIGZvbGxvd2luZyBjb21tYW5kbGluZSB0byBjb21waWxlOgo+ID4gPiAKPiA+ID4gJCBh cm0tYnVpbGRyb290LWxpbnV4LWdudWVhYmloZi1nY2MgYWRjX2RlbW9fZXJyb3IuYyAtRDJORF9D SEFOTkVMIC1vIAo+ID4gPiBhZGNfZGVtb19lcnJvcjIKPiA+ID4gCj4gPiA+IC0tLS0tLS0tLS0t LS0KPiA+ID4gLy8gYWRjX2RlbW9fZXJyb3IuYwo+ID4gPiAjaW5jbHVkZSA8dW5pc3RkLmg+Cj4g PiA+ICNpbmNsdWRlIDxmY250bC5oPgo+ID4gPiAKPiA+ID4gI2RlZmluZSBWTEVOIDEwCj4gPiA+ IAo+ID4gPiBpbnQgbWFpbigpCj4gPiA+IHsKPiA+ID4gICBpbnQgZmRfYWRjLGZkX2FkYzI7Cj4g PiA+ICAgaW50IHJldDsKPiA+ID4gICBjaGFyIGR1bW15W1ZMRU5dOwo+ID4gPiAgIAo+ID4gPiAg IGZkX2FkYyA9IG9wZW4gCj4gPiA+ICgiL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FoYi9haGI6YXBi L2Y4MDE4MDAwLmFkYy9paW86ZGV2aWNlMC9pbl92b2x0YWcKPiA+ID4gZTRfcmF3IixPX1JET05M WSk7Cj4gPiA+ICNpZmRlZiAyTkRfQ0hBTk5FTAo+ID4gPiAgIGZkX2FkYzIgPSBvcGVuIAo+ID4g PiAoIi9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9haGIvYWhiOmFwYi9mODAxODAwMC5hZGMvaWlvOmRl dmljZTAvaW5fdm9sdGFnCj4gPiA+IGU1X3JhdyIsT19SRE9OTFkpOwo+ID4gPiAjZW5kaWYKPiA+ ID4gCj4gPiA+ICAgd2hpbGUoMSkgewo+ID4gPiAKPiA+ID4gICAgIGxzZWVrKGZkX2FkYywgMCwg U0VFS19TRVQpOwo+ID4gPiAgICAgcmV0ID0gcmVhZChmZF9hZGMsIGR1bW15LCBWTEVOKTsKPiA+ ID4gI2lmZGVmIDJORF9DSEFOTkVMCj4gPiA+ICAgICBsc2VlayhmZF9hZGMyLCAwLCBTRUVLX1NF VCk7Cj4gPiA+ICAgICByZXQgPSByZWFkKGZkX2FkYzIsIGR1bW15LCBWTEVOKTsKPiA+ID4gI2Vu ZGlmCj4gPiA+IAo+ID4gPiAgIH0KPiA+ID4gfQo+ID4gPiAKPiA+ID4gLS0tLS0tLS0tLS0tCj4g PiA+IAo+ID4gPiAKPiA+ID4gR3JlZXRpbmcsIEdlb3JnICAKPiA+IEhpIEdlb3JnLAo+ID4gCj4g PiBUaGFua3MgZm9yIHRoZSBkZXRhaWxlZCBlcnJvciByZXBvcnQgYW5kIHJlcHJvZHVjZXIuCj4g PiAKPiA+IFdoYXQgaGFzIG1lIHdvbmRlcmluZyBub3cgaXMgd2hlcmUgdGhlIHJhY2UgaXMgdGhh dCBpcyB0cmlnZ2VyaW5nIHRoaXM/Cj4gPiBDb3VsZCB5b3UgdGFsayB1cyB0aHJvdWdoIGl0PyAg SSBkb24ndCBrbm93IHRoaXMgZHJpdmVyIHRoYXQgd2VsbCBzbyBwcm9iYWJseSBtdWNoIHF1aWNr ZXIgZm9yIHlvdSB0byBmaWxsIGluIHRoZSBnYXBzIHJhdGhlciB0aGFuIG1lIHRyeSB0byBmaWd1 cmUgb3V0IHRoZSByYWNlIHBhdGghCj4gPiAKPiA+IEkgaGF2ZSBubyBwcm9ibGVtIHdpdGggZGVm ZW5zZSBpbiBkZXB0aCAod2l0aCBhcHByb3ByaWF0ZSBjb21tZW50cykgYnV0IEknZCBsaWtlIHRv IGNsb3NlIHRoYXQgZG93biBhcyB3ZWxsLiAgSWYgaXQgcmVhbGx5IGlzIHVuc29sdmFibGUgSSdk IGxpa2UgYXQgbGVhc3QgdG8gaGF2ZSBzb21lIGNsZWFyIGNvbW1lbnRzIGluIHRoZSBjb2RlIGV4 cGxhaW5pbmcgd2h5Lgo+ID4gCj4gPiBUaGFua3MsCj4gPiAKPiA+IEpvbmF0aGFuCj4gPiAgIAo+ ID4gPiAKPiA+ID4gLS0tLS1VcnNwcsO8bmdsaWNoZSBOYWNocmljaHQtLS0tLQo+ID4gPiBWb246 IEpvbmF0aGFuIENhbWVyb24gW21haWx0bzpqaWMyM0BrZXJuZWwub3JnXQo+ID4gPiBHZXNlbmRl dDogU2Ftc3RhZywgMDIuIEZlYnJ1YXIgMjAxOSAxMToyMQo+ID4gPiBBbjogR2VvcmcgT3R0aW5n ZXIgPGcub3R0aW5nZXJAYWJhdGVjLmF0Pgo+ID4gPiBDYzogZXVnZW4uaHJpc3RldkBtaWNyb2No aXAuY29tOyBTdGVmYW4gRXR6bHN0b3JmZXIgCj4gPiA+IDxzLmV0emxzdG9yZmVyQGFiYXRlYy5h dD47IEhhcnRtdXQgS25hYWNrIDxrbmFhY2suaEBnbXguZGU+OyAKPiA+ID4gTGFycy1QZXRlciBD bGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+OyBQZXRlciBNZWVyd2FsZC1TdGFkbGVyIAo+ID4gPiA8 cG1lZXJ3QHBtZWVydy5uZXQ+OyBOaWNvbGFzIEZlcnJlIDxuaWNvbGFzLmZlcnJlQG1pY3JvY2hp cC5jb20+OyAKPiA+ID4gQWxleGFuZHJlIEJlbGxvbmkgPGFsZXhhbmRyZS5iZWxsb25pQGJvb3Rs aW4uY29tPjsgTHVkb3ZpYyBEZXNyb2NoZXMgCj4gPiA+IDxsdWRvdmljLmRlc3JvY2hlc0BtaWNy b2NoaXAuY29tPjsgRGF2aWQgUy4gTWlsbGVyIAo+ID4gPiA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD47 IEFyZCBCaWVzaGV1dmVsIDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPjsgCj4gPiA+IEtlZXMg Q29vayA8a2Vlc2Nvb2tAY2hyb21pdW0ub3JnPjsgbGludXgtaWlvQHZnZXIua2VybmVsLm9yZzsg Cj4gPiA+IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsgbGludXgta2VybmVs QHZnZXIua2VybmVsLm9yZzsgCj4gPiA+IE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAYm9v dGxpbi5jb20+Cj4gPiA+IEJldHJlZmY6IFJlOiBbUEFUQ0hdIGlpbzogYWRjOiBhdDkxOiBkaXNh YmxlIGFkYyBjaGFubmVsIGludGVycnVwdCBpbiAKPiA+ID4gdGltZW91dCBjYXNlCj4gPiA+IAo+ ID4gPiBPbiBXZWQsIDMwIEphbiAyMDE5IDE0OjQyOjAyICswMTAwCj4gPiA+IDxnLm90dGluZ2Vy QGFiYXRlYy5hdD4gd3JvdGU6Cj4gPiA+ICAgCj4gPiA+ID4gRnJvbTogR2VvcmcgT3R0aW5nZXIg PGcub3R0aW5nZXJAYWJhdGVjLmF0Pgo+ID4gPiA+IAo+ID4gPiA+IEhhdmluZyBhIGJyaWVmIGxv b2sgYXQgYXQ5MV9hZGNfcmVhZF9yYXcoKSBpdCBpcyBvYnZpb3VzIHRoYXQgaW4gdGhlIAo+ID4g PiA+IGNhc2Ugb2YgYSB0aW1lb3V0IHRoZSBzZXR0aW5nIG9mIEFUOTFfQURDX0NIRFIgYW5kIEFU OTFfQURDX0lEUiAKPiA+ID4gPiByZWdpc3RlcnMgaXMgb21pdHRlZC4gSWYgMiBkaWZmZXJlbnQg Y2hhbm5lbHMgYXJlIHF1ZXJpZWQgd2UgY2FuIGVuZCAKPiA+ID4gPiB1cCB3aXRoIGEgc2l0dWF0 aW9uIHdoZXJlIHR3byBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLCBidXQgb25seSBvbmUgCj4gPiA+ ID4gaW50ZXJydXB0IGlzIGNsZWFyZWQgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyLiBSZXN1bHRp bmcgaW4gYSAKPiA+ID4gPiBpbnRlcnJ1cHQgbG9vcCBhbmQgYSBzeXN0ZW0gaGFuZy4KPiA+ID4g PiAKPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBHZW9yZyBPdHRpbmdlciA8Zy5vdHRpbmdlckBhYmF0 ZWMuYXQ+ICAKPiA+ID4gCj4gPiA+IFdoaWxzdCBJIGFncmVlIHRoaXMgbG9va3MgbGlrZSBhIGNv cnJlY3QgY2hhbmdlLCBJIHdvdWxkIGxpa2UgTWF4aW1lIHRvIHRha2UgYSBsb29rIGFzIGhlIGlz IG9idmlvdXNseSBtdWNoIG1vcmUgZmFtaWxpYXIgd2l0aCB0aGUgZHJpdmVyIHRoYW4gSSBhbS4K PiA+ID4gCj4gPiA+IEkgc3VzcGVjdCB5b3UgY2FuIG9ubHkgYWN0dWFsbHkgZ2V0IHRoZXJlIGlu IHRoZSBldmVudCBvZiBhIGhhcmR3YXJlIGZhaWx1cmUgYXMgdGhhdCBpc24ndCBhY3R1YWxseSBh IHRpbWVvdXQgeW91IHNob3VsZCBldmVyIHNlZS4KPiA+ID4gQ291bGQgYmUgd3JvbmcgdGhvdWdo IQo+ID4gPiAKPiA+ID4gVGhhbmtzLAo+ID4gPiAKPiA+ID4gSm9uYXRoYW4KPiA+ID4gICAKPiA+ ID4gPiAtLS0KPiA+ID4gPiAgZHJpdmVycy9paW8vYWRjL2F0OTFfYWRjLmMgfCAyOCArKysrKysr KysrKysrKysrKy0tLS0tLS0tLS0tCj4gPiA+ID4gIDEgZmlsZSBjaGFuZ2VkLCAxNyBpbnNlcnRp b25zKCspLCAxMSBkZWxldGlvbnMoLSkKPiA+ID4gPiAKPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9paW8vYWRjL2F0OTFfYWRjLmMgYi9kcml2ZXJzL2lpby9hZGMvYXQ5MV9hZGMuYyAKPiA+ ID4gPiBpbmRleCA3NWQyZjczNTguLjU5Njg0MWEzYyAxMDA2NDQKPiA+ID4gPiAtLS0gYS9kcml2 ZXJzL2lpby9hZGMvYXQ5MV9hZGMuYwo+ID4gPiA+ICsrKyBiL2RyaXZlcnMvaWlvL2FkYy9hdDkx X2FkYy5jCj4gPiA+ID4gQEAgLTcwNCwyMyArNzA0LDI5IEBAIHN0YXRpYyBpbnQgYXQ5MV9hZGNf cmVhZF9yYXcoc3RydWN0IGlpb19kZXYgKmlkZXYsCj4gPiA+ID4gIAkJcmV0ID0gd2FpdF9ldmVu dF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoc3QtPndxX2RhdGFfYXZhaWwsCj4gPiA+ID4gIAkJCQkJ CSAgICAgICBzdC0+ZG9uZSwKPiA+ID4gPiAgCQkJCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMo MTAwMCkpOwo+ID4gPiA+IC0JCWlmIChyZXQgPT0gMCkKPiA+ID4gPiAtCQkJcmV0ID0gLUVUSU1F RE9VVDsKPiA+ID4gPiAtCQlpZiAocmV0IDwgMCkgewo+ID4gPiA+IC0JCQltdXRleF91bmxvY2so JnN0LT5sb2NrKTsKPiA+ID4gPiAtCQkJcmV0dXJuIHJldDsKPiA+ID4gPiAtCQl9Cj4gPiA+ID4g LQo+ID4gPiA+IC0JCSp2YWwgPSBzdC0+bGFzdF92YWx1ZTsKPiA+ID4gPiAgCj4gPiA+ID4gKwkJ LyogRGlzYWJsZSBpbnRlcnJ1cHRzLCByZWdhcmRsZXNzIGlmIGFkYyBjb252ZXJzaW9uIHdhcwo+ ID4gPiA+ICsJCSAqIHN1Y2Nlc3NmdWwgb3Igbm90Cj4gPiA+ID4gKwkJICovCj4gPiA+ID4gIAkJ YXQ5MV9hZGNfd3JpdGVsKHN0LCBBVDkxX0FEQ19DSERSLAo+ID4gPiA+ICAJCQkJQVQ5MV9BRENf Q0goY2hhbi0+Y2hhbm5lbCkpOwo+ID4gPiA+ICAJCWF0OTFfYWRjX3dyaXRlbChzdCwgQVQ5MV9B RENfSURSLCBCSVQoY2hhbi0+Y2hhbm5lbCkpOwo+ID4gPiA+ICAKPiA+ID4gPiAtCQlzdC0+bGFz dF92YWx1ZSA9IDA7Cj4gPiA+ID4gLQkJc3QtPmRvbmUgPSBmYWxzZTsKPiA+ID4gPiArCQlpZiAo cmV0ID4gMCkgewo+ID4gPiA+ICsJCQkvKiBhIHZhbGlkIGNvbnZlcnNpb24gdG9vayBwbGFjZSAq Lwo+ID4gPiA+ICsJCQkqdmFsID0gc3QtPmxhc3RfdmFsdWU7Cj4gPiA+ID4gKwkJCXN0LT5sYXN0 X3ZhbHVlID0gMDsKPiA+ID4gPiArCQkJc3QtPmRvbmUgPSBmYWxzZTsKPiA+ID4gPiArCQkJcmV0 ID0gSUlPX1ZBTF9JTlQ7Cj4gPiA+ID4gKwkJfSBlbHNlIGlmIChyZXQgPT0gMCkgewo+ID4gPiA+ ICsJCQkvKiBjb252ZXJzaW9uIHRpbWVvdXQgKi8KPiA+ID4gPiArCQkJZGV2X2VycigmaWRldi0+ ZGV2LCAiQURDIENoYW5uZWwgJWQgdGltZW91dC5cbiIsCj4gPiA+ID4gKwkJCQljaGFuLT5jaGFu bmVsKTsKPiA+ID4gPiArCQkJcmV0ID0gLUVUSU1FRE9VVDsKPiA+ID4gPiArCQl9Cj4gPiA+ID4g Kwo+ID4gPiA+ICAJCW11dGV4X3VubG9jaygmc3QtPmxvY2spOwo+ID4gPiA+IC0JCXJldHVybiBJ SU9fVkFMX0lOVDsKPiA+ID4gPiArCQlyZXR1cm4gcmV0Owo+ID4gPiA+ICAKPiA+ID4gPiAgCWNh c2UgSUlPX0NIQU5fSU5GT19TQ0FMRToKPiA+ID4gPiAgCQkqdmFsID0gc3QtPnZyZWZfbXY7ICAK PiA+ID4gICAKPiA+IAo+ID4gICAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2Vy bmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1h bi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==