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=-6.7 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,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 3A64FC5DF60 for ; Tue, 5 Nov 2019 16:45:24 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) (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 B207221929 for ; Tue, 5 Nov 2019 16:45:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=alsa-project.org header.i=@alsa-project.org header.b="X3HXSlU8" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B207221929 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=alsa-devel-bounces@alsa-project.org Received: from alsa1.perex.cz (alsa1.perex.cz [207.180.221.201]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by alsa0.perex.cz (Postfix) with ESMTPS id 93ED816DC; Tue, 5 Nov 2019 17:44:31 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa0.perex.cz 93ED816DC DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alsa-project.org; s=default; t=1572972321; bh=XnzJUuMNw879yMr3lG/uyFk0o9oQISp8i7XNN67envk=; h=Date:From:To:In-Reply-To:References:Cc:Subject:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From; b=X3HXSlU8Zge2VxL9VPwiuToi75AtdLWSwsGynGIrMPIWoU0Ev4SXo/2t32SIY7Yzs ZoSxv9wd7qUf0teBCKJ5BzFj1wwvV2ZW4VOCfH8n0IX24JMc+SZoqMkyIFznMeXqLC H9UhBWPWuIea13tVBYWAgPIdL12sBvNLoQCZI3eM= Received: from alsa1.perex.cz (localhost.localdomain [127.0.0.1]) by alsa1.perex.cz (Postfix) with ESMTP id 2759DF80446; Tue, 5 Nov 2019 17:44:31 +0100 (CET) Received: by alsa1.perex.cz (Postfix, from userid 50401) id 9304EF8049B; Tue, 5 Nov 2019 17:44:30 +0100 (CET) Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by alsa1.perex.cz (Postfix) with ESMTPS id 1C205F8015B for ; Tue, 5 Nov 2019 17:44:27 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa1.perex.cz 1C205F8015B X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id B8634ABA0; Tue, 5 Nov 2019 16:44:26 +0000 (UTC) Date: Tue, 05 Nov 2019 17:44:26 +0100 Message-ID: From: Takashi Iwai To: Russell King - ARM Linux admin In-Reply-To: References: <6ad19121-c0e3-d278-2943-ff93ef80353b@baylibre.com> <20191105160215.GQ25745@shell.armlinux.org.uk> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.8 Emacs/25.3 (x86_64-suse-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Cc: Jernej Skrabec , Jonas Karlman , Neil Armstrong , alsa-devel@alsa-project.org, dri-devel@lists.freedesktop.org, Andrzej Hajda , Laurent Pinchart , Philipp Zabel Subject: Re: [alsa-devel] Incorrect buffer handling in dw-hdmi bridge audio X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: alsa-devel-bounces@alsa-project.org Sender: "Alsa-devel" On Tue, 05 Nov 2019 17:33:44 +0100, Takashi Iwai wrote: > > On Tue, 05 Nov 2019 17:02:15 +0100, > Russell King - ARM Linux admin wrote: > > > > On Tue, Nov 05, 2019 at 09:07:43AM +0100, Neil Armstrong wrote: > > > Hi, > > > > > > On 05/11/2019 08:55, Takashi Iwai wrote: > > > > Hi, > > > > > > > > while recently working on the ALSA memory allocator API cleanup, I > > > > noticed that dw-hdmi bridge driver seems doing weird about the buffer > > > > management. It pre-allocates the usual device buffers fully at the > > > > probe time, while each stream allocates the buffer via the vmalloc > > > > helpers and replaces with it at each open. > > > > > > > > I guess it's no expected behavior? It's basically a full waste of > > > > resources, and the vmalloc buffer isn't guaranteed to work well for > > > > mmap on every architecture. > > > > > > > > Below is the patch to address it. Can anyone check whether this still > > > > works? > > > > > > I don't have the setup to check, but this has been pushed by Russell I Added in CC. > > > > > > I also added the imx maintainer since it's (AFAIK) only used on iMX SoCs. > > > > > > Neil > > > > > > > > > > > Since I have a cleanup series and this is involved, I'd like to take > > > > the fix through my tree once after it's confirmed (and get ACK if > > > > possible). > > > > > > > > > > > > Thanks! > > > > > > > > Takashi > > > > > > > > -- 8< -- > > > > From: Takashi Iwai > > > > Subject: [PATCH] drm/bridge: dw-hdmi: Fix the incorrect buffer allocations > > > > > > > > The driver sets up the buffer preallocation with SNDRV_DMA_TYPE_DEV, > > > > while it re-allocates and releases vmalloc pages. This is not only a > > > > lot of waste resources but also causes the mmap malfunction. > > > > > > > > Change / drop the vmalloc-related code and use the standard buffer > > > > allocation / release code instead. > > > > I think getting rid of the vmalloc code here is a mistake - I seem to > > remember using the standard buffer allocation causes failures, due to > > memory fragmentation. Since the hardware is limited to DMA from at > > most one page, there is no reason for this driver to require contiguous > > pages, hence why it's using - and should use - vmalloc pages. vmalloc > > is way kinder to the MM subsystem than trying to request large order > > contiguous pages. > > > > So, NAK on this patch. > > OK, then we should do other way round, rather drop the buffer > preallocation instead. Currently vmalloc buffer is always allocated > at each open and overrides the preallocated buffer, so the whole 64k > and more are wasted for no use. > > (BTW, the current code has this snippet: > > /* Limit the buffer size to the size of the preallocated buffer */ > ret = snd_pcm_hw_constraint_minmax(runtime, > SNDRV_PCM_HW_PARAM_BUFFER_SIZE, > 0, substream->dma_buffer.bytes); > > ... and this would have to limit the buffer size only to the > preallocated size -- which essentially makes the argument above > invalid. However, this check looks actually bogus, the constraint > parameter should be SNDRV_PCM_HW_PARAM_BUFFER_BYTES, not _SIZE. It > might be the reason it worked somehow...) > > So below is the revised patch. Could you guys check it again? > > There I copied the comment as is, although the 512k mentioned there > looks inconsistent with the actual code. Should it be 1M? ... and reading the patch again, I found that the hw constraint call can be dropped as well. The dw_hdmi_hw definition already contains the max buffer size. Below is the re-revised patch. Please check it. thanks, Takashi -- 8< -- From: Takashi Iwai Subject: [PATCH] drm/bridge: dw-hdmi: Drop superfluous buffer preallocation The driver sets up the buffer preallocation with SNDRV_DMA_TYPE_DEV, while it always re-allocates and releases vmalloc pages, hence the preallocated pages are never used. Also, the current code contains the hw constraint to limit the buffer size to the preallocated size. It doesn't work as expected, however, because it's applying to an incorrect parameter (SNDRV_PCM_HW_PARAM_BUFFER_SIZE instead of _BUFFER_BYTES). This patch tries to address these issues: drop the unnecessary buffer preallocation and also drop the unnecessary hw constriant. Without the buffer preallocation, the hw constraint becomes superfluous, as dw_hdmi_hw definition already contains the buffer byte size constraints. Signed-off-by: Takashi Iwai --- drivers/gpu/drm/bridge/synopsys/dw-hdmi-ahb-audio.c | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-ahb-audio.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-ahb-audio.c index 2b7539701b42..2778d6bcc14e 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-ahb-audio.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-ahb-audio.c @@ -337,13 +337,6 @@ static int dw_hdmi_open(struct snd_pcm_substream *substream) if (ret < 0) return ret; - /* Limit the buffer size to the size of the preallocated buffer */ - ret = snd_pcm_hw_constraint_minmax(runtime, - SNDRV_PCM_HW_PARAM_BUFFER_SIZE, - 0, substream->dma_buffer.bytes); - if (ret < 0) - return ret; - /* Clear FIFO */ writeb_relaxed(HDMI_AHB_DMA_CONF0_SW_FIFO_RST, base + HDMI_AHB_DMA_CONF0); @@ -560,13 +553,6 @@ static int snd_dw_hdmi_probe(struct platform_device *pdev) strlcpy(pcm->name, DRIVER_NAME, sizeof(pcm->name)); snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_dw_hdmi_ops); - /* - * To support 8-channel 96kHz audio reliably, we need 512k - * to satisfy alsa with our restricted period (ERR004323). - */ - snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, - dev, 128 * 1024, 1024 * 1024); - ret = snd_card_register(card); if (ret < 0) goto err; -- 2.16.4 _______________________________________________ Alsa-devel mailing list Alsa-devel@alsa-project.org https://mailman.alsa-project.org/mailman/listinfo/alsa-devel From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: Incorrect buffer handling in dw-hdmi bridge audio Date: Tue, 05 Nov 2019 17:44:26 +0100 Message-ID: References: <6ad19121-c0e3-d278-2943-ff93ef80353b@baylibre.com> <20191105160215.GQ25745@shell.armlinux.org.uk> Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 596576EB03 for ; Tue, 5 Nov 2019 16:44:28 +0000 (UTC) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Russell King - ARM Linux admin Cc: Jernej Skrabec , Jonas Karlman , Neil Armstrong , alsa-devel@alsa-project.org, dri-devel@lists.freedesktop.org, Laurent Pinchart List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCAwNSBOb3YgMjAxOSAxNzozMzo0NCArMDEwMCwKVGFrYXNoaSBJd2FpIHdyb3RlOgo+ IAo+IE9uIFR1ZSwgMDUgTm92IDIwMTkgMTc6MDI6MTUgKzAxMDAsCj4gUnVzc2VsbCBLaW5nIC0g QVJNIExpbnV4IGFkbWluIHdyb3RlOgo+ID4gCj4gPiBPbiBUdWUsIE5vdiAwNSwgMjAxOSBhdCAw OTowNzo0M0FNICswMTAwLCBOZWlsIEFybXN0cm9uZyB3cm90ZToKPiA+ID4gSGksCj4gPiA+IAo+ ID4gPiBPbiAwNS8xMS8yMDE5IDA4OjU1LCBUYWthc2hpIEl3YWkgd3JvdGU6Cj4gPiA+ID4gSGks Cj4gPiA+ID4gCj4gPiA+ID4gd2hpbGUgcmVjZW50bHkgd29ya2luZyBvbiB0aGUgQUxTQSBtZW1v cnkgYWxsb2NhdG9yIEFQSSBjbGVhbnVwLCBJCj4gPiA+ID4gbm90aWNlZCB0aGF0IGR3LWhkbWkg YnJpZGdlIGRyaXZlciBzZWVtcyBkb2luZyB3ZWlyZCBhYm91dCB0aGUgYnVmZmVyCj4gPiA+ID4g bWFuYWdlbWVudC4gIEl0IHByZS1hbGxvY2F0ZXMgdGhlIHVzdWFsIGRldmljZSBidWZmZXJzIGZ1 bGx5IGF0IHRoZQo+ID4gPiA+IHByb2JlIHRpbWUsIHdoaWxlIGVhY2ggc3RyZWFtIGFsbG9jYXRl cyB0aGUgYnVmZmVyIHZpYSB0aGUgdm1hbGxvYwo+ID4gPiA+IGhlbHBlcnMgYW5kIHJlcGxhY2Vz IHdpdGggaXQgYXQgZWFjaCBvcGVuLgo+ID4gPiA+IAo+ID4gPiA+IEkgZ3Vlc3MgaXQncyBubyBl eHBlY3RlZCBiZWhhdmlvcj8gIEl0J3MgYmFzaWNhbGx5IGEgZnVsbCB3YXN0ZSBvZgo+ID4gPiA+ IHJlc291cmNlcywgYW5kIHRoZSB2bWFsbG9jIGJ1ZmZlciBpc24ndCBndWFyYW50ZWVkIHRvIHdv cmsgd2VsbCBmb3IKPiA+ID4gPiBtbWFwIG9uIGV2ZXJ5IGFyY2hpdGVjdHVyZS4KPiA+ID4gPiAK PiA+ID4gPiBCZWxvdyBpcyB0aGUgcGF0Y2ggdG8gYWRkcmVzcyBpdC4gIENhbiBhbnlvbmUgY2hl Y2sgd2hldGhlciB0aGlzIHN0aWxsCj4gPiA+ID4gd29ya3M/Cj4gPiA+IAo+ID4gPiBJIGRvbid0 IGhhdmUgdGhlIHNldHVwIHRvIGNoZWNrLCBidXQgdGhpcyBoYXMgYmVlbiBwdXNoZWQgYnkgUnVz c2VsbCBJIEFkZGVkIGluIENDLgo+ID4gPiAKPiA+ID4gSSBhbHNvIGFkZGVkIHRoZSBpbXggbWFp bnRhaW5lciBzaW5jZSBpdCdzIChBRkFJSykgb25seSB1c2VkIG9uIGlNWCBTb0NzLgo+ID4gPiAK PiA+ID4gTmVpbAo+ID4gPiAKPiA+ID4gPiAKPiA+ID4gPiBTaW5jZSBJIGhhdmUgYSBjbGVhbnVw IHNlcmllcyBhbmQgdGhpcyBpcyBpbnZvbHZlZCwgSSdkIGxpa2UgdG8gdGFrZQo+ID4gPiA+IHRo ZSBmaXggdGhyb3VnaCBteSB0cmVlIG9uY2UgYWZ0ZXIgaXQncyBjb25maXJtZWQgKGFuZCBnZXQg QUNLIGlmCj4gPiA+ID4gcG9zc2libGUpLgo+ID4gPiA+IAo+ID4gPiA+IAo+ID4gPiA+IFRoYW5r cyEKPiA+ID4gPiAKPiA+ID4gPiBUYWthc2hpCj4gPiA+ID4gCj4gPiA+ID4gLS0gODwgLS0KPiA+ ID4gPiBGcm9tOiBUYWthc2hpIEl3YWkgPHRpd2FpQHN1c2UuZGU+Cj4gPiA+ID4gU3ViamVjdDog W1BBVENIXSBkcm0vYnJpZGdlOiBkdy1oZG1pOiBGaXggdGhlIGluY29ycmVjdCBidWZmZXIgYWxs b2NhdGlvbnMKPiA+ID4gPiAKPiA+ID4gPiBUaGUgZHJpdmVyIHNldHMgdXAgdGhlIGJ1ZmZlciBw cmVhbGxvY2F0aW9uIHdpdGggU05EUlZfRE1BX1RZUEVfREVWLAo+ID4gPiA+IHdoaWxlIGl0IHJl LWFsbG9jYXRlcyBhbmQgcmVsZWFzZXMgdm1hbGxvYyBwYWdlcy4gIFRoaXMgaXMgbm90IG9ubHkg YQo+ID4gPiA+IGxvdCBvZiB3YXN0ZSByZXNvdXJjZXMgYnV0IGFsc28gY2F1c2VzIHRoZSBtbWFw IG1hbGZ1bmN0aW9uLgo+ID4gPiA+IAo+ID4gPiA+IENoYW5nZSAvIGRyb3AgdGhlIHZtYWxsb2Mt cmVsYXRlZCBjb2RlIGFuZCB1c2UgdGhlIHN0YW5kYXJkIGJ1ZmZlcgo+ID4gPiA+IGFsbG9jYXRp b24gLyByZWxlYXNlIGNvZGUgaW5zdGVhZC4KPiA+IAo+ID4gSSB0aGluayBnZXR0aW5nIHJpZCBv ZiB0aGUgdm1hbGxvYyBjb2RlIGhlcmUgaXMgYSBtaXN0YWtlIC0gSSBzZWVtIHRvCj4gPiByZW1l bWJlciB1c2luZyB0aGUgc3RhbmRhcmQgYnVmZmVyIGFsbG9jYXRpb24gY2F1c2VzIGZhaWx1cmVz LCBkdWUgdG8KPiA+IG1lbW9yeSBmcmFnbWVudGF0aW9uLiAgU2luY2UgdGhlIGhhcmR3YXJlIGlz IGxpbWl0ZWQgdG8gRE1BIGZyb20gYXQKPiA+IG1vc3Qgb25lIHBhZ2UsIHRoZXJlIGlzIG5vIHJl YXNvbiBmb3IgdGhpcyBkcml2ZXIgdG8gcmVxdWlyZSBjb250aWd1b3VzCj4gPiBwYWdlcywgaGVu Y2Ugd2h5IGl0J3MgdXNpbmcgLSBhbmQgc2hvdWxkIHVzZSAtIHZtYWxsb2MgcGFnZXMuICB2bWFs bG9jCj4gPiBpcyB3YXkga2luZGVyIHRvIHRoZSBNTSBzdWJzeXN0ZW0gdGhhbiB0cnlpbmcgdG8g cmVxdWVzdCBsYXJnZSBvcmRlcgo+ID4gY29udGlndW91cyBwYWdlcy4KPiA+IAo+ID4gU28sIE5B SyBvbiB0aGlzIHBhdGNoLgo+IAo+IE9LLCB0aGVuIHdlIHNob3VsZCBkbyBvdGhlciB3YXkgcm91 bmQsIHJhdGhlciBkcm9wIHRoZSBidWZmZXIKPiBwcmVhbGxvY2F0aW9uIGluc3RlYWQuICBDdXJy ZW50bHkgdm1hbGxvYyBidWZmZXIgaXMgYWx3YXlzIGFsbG9jYXRlZAo+IGF0IGVhY2ggb3BlbiBh bmQgb3ZlcnJpZGVzIHRoZSBwcmVhbGxvY2F0ZWQgYnVmZmVyLCBzbyB0aGUgd2hvbGUgNjRrCj4g YW5kIG1vcmUgYXJlIHdhc3RlZCBmb3Igbm8gdXNlLgo+IAo+IChCVFcsIHRoZSBjdXJyZW50IGNv ZGUgaGFzIHRoaXMgc25pcHBldDoKPiAKPiAJLyogTGltaXQgdGhlIGJ1ZmZlciBzaXplIHRvIHRo ZSBzaXplIG9mIHRoZSBwcmVhbGxvY2F0ZWQgYnVmZmVyICovCj4gCXJldCA9IHNuZF9wY21faHdf Y29uc3RyYWludF9taW5tYXgocnVudGltZSwKPiAJCQkJCSAgIFNORFJWX1BDTV9IV19QQVJBTV9C VUZGRVJfU0laRSwKPiAJCQkJCSAgIDAsIHN1YnN0cmVhbS0+ZG1hX2J1ZmZlci5ieXRlcyk7Cj4g Cj4gLi4uIGFuZCB0aGlzIHdvdWxkIGhhdmUgdG8gbGltaXQgdGhlIGJ1ZmZlciBzaXplIG9ubHkg dG8gdGhlCj4gcHJlYWxsb2NhdGVkIHNpemUgLS0gd2hpY2ggZXNzZW50aWFsbHkgbWFrZXMgdGhl IGFyZ3VtZW50IGFib3ZlCj4gaW52YWxpZC4gIEhvd2V2ZXIsIHRoaXMgY2hlY2sgbG9va3MgYWN0 dWFsbHkgYm9ndXMsIHRoZSBjb25zdHJhaW50Cj4gcGFyYW1ldGVyIHNob3VsZCBiZSBTTkRSVl9Q Q01fSFdfUEFSQU1fQlVGRkVSX0JZVEVTLCBub3QgX1NJWkUuICBJdAo+IG1pZ2h0IGJlIHRoZSBy ZWFzb24gaXQgd29ya2VkIHNvbWVob3cuLi4pCj4gCj4gU28gYmVsb3cgaXMgdGhlIHJldmlzZWQg cGF0Y2guICBDb3VsZCB5b3UgZ3V5cyBjaGVjayBpdCBhZ2Fpbj8KPiAKPiBUaGVyZSBJIGNvcGll ZCB0aGUgY29tbWVudCBhcyBpcywgYWx0aG91Z2ggdGhlIDUxMmsgbWVudGlvbmVkIHRoZXJlCj4g bG9va3MgaW5jb25zaXN0ZW50IHdpdGggdGhlIGFjdHVhbCBjb2RlLiAgU2hvdWxkIGl0IGJlIDFN PwoKLi4uIGFuZCByZWFkaW5nIHRoZSBwYXRjaCBhZ2FpbiwgSSBmb3VuZCB0aGF0IHRoZSBodyBj b25zdHJhaW50IGNhbGwKY2FuIGJlIGRyb3BwZWQgYXMgd2VsbC4gIFRoZSBkd19oZG1pX2h3IGRl ZmluaXRpb24gYWxyZWFkeSBjb250YWlucwp0aGUgbWF4IGJ1ZmZlciBzaXplLgoKQmVsb3cgaXMg dGhlIHJlLXJldmlzZWQgcGF0Y2guICBQbGVhc2UgY2hlY2sgaXQuCgoKdGhhbmtzLAoKVGFrYXNo aQoKLS0gODwgLS0KRnJvbTogVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNlLmRlPgpTdWJqZWN0OiBb UEFUQ0hdIGRybS9icmlkZ2U6IGR3LWhkbWk6IERyb3Agc3VwZXJmbHVvdXMgYnVmZmVyIHByZWFs bG9jYXRpb24KClRoZSBkcml2ZXIgc2V0cyB1cCB0aGUgYnVmZmVyIHByZWFsbG9jYXRpb24gd2l0 aCBTTkRSVl9ETUFfVFlQRV9ERVYsCndoaWxlIGl0IGFsd2F5cyByZS1hbGxvY2F0ZXMgYW5kIHJl bGVhc2VzIHZtYWxsb2MgcGFnZXMsIGhlbmNlIHRoZQpwcmVhbGxvY2F0ZWQgcGFnZXMgYXJlIG5l dmVyIHVzZWQuICBBbHNvLCB0aGUgY3VycmVudCBjb2RlIGNvbnRhaW5zCnRoZSBodyBjb25zdHJh aW50IHRvIGxpbWl0IHRoZSBidWZmZXIgc2l6ZSB0byB0aGUgcHJlYWxsb2NhdGVkIHNpemUuCkl0 IGRvZXNuJ3Qgd29yayBhcyBleHBlY3RlZCwgaG93ZXZlciwgYmVjYXVzZSBpdCdzIGFwcGx5aW5n IHRvIGFuCmluY29ycmVjdCBwYXJhbWV0ZXIgKFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfU0la RSBpbnN0ZWFkIG9mCl9CVUZGRVJfQllURVMpLgoKVGhpcyBwYXRjaCB0cmllcyB0byBhZGRyZXNz IHRoZXNlIGlzc3VlczogZHJvcCB0aGUgdW5uZWNlc3NhcnkgYnVmZmVyCnByZWFsbG9jYXRpb24g YW5kIGFsc28gZHJvcCB0aGUgdW5uZWNlc3NhcnkgaHcgY29uc3RyaWFudC4gIFdpdGhvdXQKdGhl IGJ1ZmZlciBwcmVhbGxvY2F0aW9uLCB0aGUgaHcgY29uc3RyYWludCBiZWNvbWVzIHN1cGVyZmx1 b3VzLCBhcwpkd19oZG1pX2h3IGRlZmluaXRpb24gYWxyZWFkeSBjb250YWlucyB0aGUgYnVmZmVy IGJ5dGUgc2l6ZQpjb25zdHJhaW50cy4KClNpZ25lZC1vZmYtYnk6IFRha2FzaGkgSXdhaSA8dGl3 YWlAc3VzZS5kZT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3LWhkbWkt YWhiLWF1ZGlvLmMgfCAxNCAtLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE0IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvZHct aGRtaS1haGItYXVkaW8uYyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvZHctaGRt aS1haGItYXVkaW8uYwppbmRleCAyYjc1Mzk3MDFiNDIuLjI3NzhkNmJjYzE0ZSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9kdy1oZG1pLWFoYi1hdWRpby5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvZHctaGRtaS1haGItYXVkaW8uYwpA QCAtMzM3LDEzICszMzcsNiBAQCBzdGF0aWMgaW50IGR3X2hkbWlfb3BlbihzdHJ1Y3Qgc25kX3Bj bV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAot CS8qIExpbWl0IHRoZSBidWZmZXIgc2l6ZSB0byB0aGUgc2l6ZSBvZiB0aGUgcHJlYWxsb2NhdGVk IGJ1ZmZlciAqLwotCXJldCA9IHNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgocnVudGltZSwK LQkJCQkJICAgU05EUlZfUENNX0hXX1BBUkFNX0JVRkZFUl9TSVpFLAotCQkJCQkgICAwLCBzdWJz dHJlYW0tPmRtYV9idWZmZXIuYnl0ZXMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0Owot CiAJLyogQ2xlYXIgRklGTyAqLwogCXdyaXRlYl9yZWxheGVkKEhETUlfQUhCX0RNQV9DT05GMF9T V19GSUZPX1JTVCwKIAkJICAgICAgIGJhc2UgKyBIRE1JX0FIQl9ETUFfQ09ORjApOwpAQCAtNTYw LDEzICs1NTMsNiBAQCBzdGF0aWMgaW50IHNuZF9kd19oZG1pX3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCiAJc3RybGNweShwY20tPm5hbWUsIERSSVZFUl9OQU1FLCBzaXplb2Yo cGNtLT5uYW1lKSk7CiAJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZ QkFDSywgJnNuZF9kd19oZG1pX29wcyk7CiAKLQkvKgotCSAqIFRvIHN1cHBvcnQgOC1jaGFubmVs IDk2a0h6IGF1ZGlvIHJlbGlhYmx5LCB3ZSBuZWVkIDUxMmsKLQkgKiB0byBzYXRpc2Z5IGFsc2Eg d2l0aCBvdXIgcmVzdHJpY3RlZCBwZXJpb2QgKEVSUjAwNDMyMykuCi0JICovCi0Jc25kX3BjbV9s aWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKLQkJ CWRldiwgMTI4ICogMTAyNCwgMTAyNCAqIDEwMjQpOwotCiAJcmV0ID0gc25kX2NhcmRfcmVnaXN0 ZXIoY2FyZCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyOwotLSAKMi4xNi40CgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGlu ZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=