From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 CB6B53A0E93 for ; Sun, 18 Oct 2026 10:39:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792319978; cv=none; b=HL6mwXQHpdPg5Q85Kf8T7Ab2Uw44EpvSSgDYSPPi5tAjwH4ZNiDYLGshfQMClyHB/eb2NvN4FvaKSvmTUGCgmt8rhlGb1NQDs/1K9SBlPyDf2sGnrtRxy5T5WiTIK/qt0VQV0dWIWYbp/HcidQ23hnmU4aUkAEbwDGadZHIZmgQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792319978; c=relaxed/simple; bh=KncDa51mZ5NDZ5BtP4vBIW1oT/C/lwnfJvClh3k3/Fc=; h=Message-ID:From:Subject:To:Cc:In-Reply-To:References:Content-Type: Date; b=N+GmcqfV4AMS/rpSUmPm6rxcrdxqcnkgQHYJ5mLg6elkNbV7QpWCkLffTzMCbTYN5PiSyLo5yP9CRcCAtoMKmid2IL7H+Ld5Rg6XQR9Hw7P7llAPQHTMA9bmGq6RlfURTPNpH+t98ZFsfvOLHJtb30sF4WTjwCypmEj+cmIiHe4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=K+WSMpkh; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="K+WSMpkh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 16C301F000C4; Sun, 18 Oct 2026 10:39:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792319975; bh=cEdhNIWomkxO2MGN6UH2nfqM93X14f0/OkWbLgko1hs=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=K+WSMpkhm+cGeSGzEbfkv0VK4EgULBbg+0nOyexjemK4k6EAijJ/rR1sEp4+jJ5Y0 DQ3eF3OTAUU46p9M+nv+mGmm3AF3Ho21ss5Z80Z+PPlpRrGCUWFID9or/yGDFm2Idx eo9BT2C37LRqF+H9eNPsQVGuZpFtRv88yGgxjJFjPCXY2wlrzBukHL8cF13D5EAye1 Xt0NLStZXEmrTxwke8QmXZzxgq7jn6E2f1zn6/XEJ1QP/Ik8HS0sGcu2+mtq8Kk8p2 L/h7aWYOHwL8J4Io0wkSdPxeToI+zS5weBDP5lA9GQZGvVb9AAALlE+FApTcxQAAmQ CSa0t99CpZBOg== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v5 4/7] ASoC: meson: add AUDIN driver Reply-To: sashiko-reviews@lists.linux.dev To: "Valerio Setti" Cc: devicetree@vger.kernel.org, linux-amlogic@lists.infradead.org, robh@kernel.org, conor+dt@kernel.org, neil.armstrong@linaro.org In-Reply-To: <20261018-audin-v5-4-4b8cc13a1b22@baylibre.com> References: <20261018-audin-v5-0-4b8cc13a1b22@baylibre.com> <20261018-audin-v5-4-4b8cc13a1b22@baylibre.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Sun, 18 Oct 2026 10:39:34 +0000 Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Thank you for your contribution! Sashiko AI review found 1 potential issue(= s) to consider: - [High] ASoC: meson: audin: sleeping mutex_lock() in atomic trigger and so= ftirq timer context -- commit f3bd154de23b0a57bb8257b40dc479a985fa6c9a Author: Valerio Setti ASoC: meson: add AUDIN driver This commit adds the AUDIN audio input driver for Amlogic GX platforms (GXBB/GXL), including FIFO capture DAIs and an I2S data formatter widget. > diff --git a/sound/soc/meson/audin-fifo.c b/sound/soc/meson/audin-fifo.c > new file mode 100644 > index 0000000000000..5b254c90c7100 > --- /dev/null > +++ b/sound/soc/meson/audin-fifo.c [ ... ] > +static enum hrtimer_restart audin_fifo_timer_cb(struct hrtimer *timer) > +{ > + struct audin_fifo_dai_data *data =3D > + container_of(timer, struct audin_fifo_dai_data, polling_timer); > + struct snd_pcm_substream *substream =3D data->substream; > + struct snd_pcm_runtime *runtime =3D substream->runtime; > + unsigned int curr_pos; > + unsigned int delta, elapsed_periods_bytes, extra_bytes, sleep_bytes; > + > + /* > + * Take the stream lock to prevent userspace from issuing a quick > + * PAUSE_PUSH -> PAUSE_RELEASE transition while we're running this > + * callback. Doing so would cause "hrtimer_forward_now()" to be called > + * (see below) while the timer is already enqueued. > + */ > + guard(pcm_stream_lock_irqsave)(substream); > + > + /* Stopped, or a trigger already re-armed the timer while we waited. */ > + if (!READ_ONCE(data->running) || hrtimer_is_queued(timer)) > + return HRTIMER_NORESTART; > + > + curr_pos =3D audin_fifo_pos(data->dai, runtime); > + delta =3D (curr_pos >=3D data->last_pos) ? > + curr_pos - data->last_pos : > + (runtime->dma_bytes - data->last_pos) + curr_pos; > + extra_bytes =3D delta % data->period_bytes; > + elapsed_periods_bytes =3D delta - extra_bytes; > + > + /* Report only when the period is completed. */ > + if (delta >=3D data->period_bytes) { > + data->last_pos =3D data->last_pos + elapsed_periods_bytes; > + if (data->last_pos >=3D runtime->dma_bytes) > + data->last_pos %=3D runtime->dma_bytes; > + snd_pcm_period_elapsed_under_stream_lock(substream); > + } [ ... ] > diff --git a/sound/soc/meson/audin-formatter-i2s.c b/sound/soc/meson/audi= n-formatter-i2s.c > new file mode 100644 > index 0000000000000..8bbb5cdb52dc8 > --- /dev/null > +++ b/sound/soc/meson/audin-formatter-i2s.c [ ... ] > +static struct gx_stream * > +audin_formatter_i2s_get_stream(struct snd_soc_dapm_widget *w) > +{ > + struct snd_soc_dai *be =3D audin_formatter_i2s_get_be(w); > + > + if (!be) > + return NULL; > + > + return snd_soc_dai_dma_data_get_capture(be); > +} [Severity: High] Does binding the AUDIN formatter to gx_stream lead to sleeping in atomic and softirq contexts during PCM trigger operations? In audin_fifo_dai_probe(), polling_timer is set up with HRTIMER_MODE_REL_SO= FT, so audin_fifo_timer_cb() runs in softirq context and acquires guard(pcm_stream_lock_irqsave)(substream). This requires substream->pcm->no= natomic to be false, otherwise _snd_pcm_stream_lock_irqsave() would attempt to acqu= ire substream->self_group.mutex from softirq context. However, with nonatomic set to false on the FE and BE substreams, PCM trigg= er operations hold spin_lock_irqsave on the PCM stream locks (for example via dpcm_be_dai_trigger()). This also occurs in softirq context when an XRUN is detected: audin_fifo_timer_cb() -> snd_pcm_period_elapsed_under_stream_lock() -> snd_pcm_update_hw_ptr0() -> snd_pcm_stop() -> dpcm_fe_dai_trigger() -> dpcm_be_dai_trigger() -> aiu_encoder_i2s_trigger() -> gx_stream_stop() Because audin_formatter_i2s_get_stream() attaches the AUDIN formatter to the backend DAI's struct gx_stream, starting or stopping the capture stream cal= ls aiu_encoder_i2s_trigger() -> gx_stream_start() or gx_stream_stop(), both of which acquire the sleeping mutex ts->lock: sound/soc/meson/gx-formatter.c:gx_stream_start() { mutex_lock(&ts->lock); /* Start all the formatters attached to the stream */ list_for_each_entry(formatter, &ts->formatter_list, list) { ret =3D gx_formatter_enable(formatter); ... } sound/soc/meson/gx-formatter.c:gx_stream_stop() { mutex_lock(&ts->lock); ts->ready =3D false; /* Stop all the formatters attached to the stream */ list_for_each_entry(formatter, &ts->formatter_list, list) { gx_formatter_disable(formatter); } mutex_unlock(&ts->lock); } Won't calling mutex_lock(&ts->lock) while holding the PCM stream spinlocks = with interrupts disabled (and from softirq context on XRUN) trigger a sleeping in atomic context bug? [ ... ] --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20261018-audin-v5-0= -4b8cc13a1b22@baylibre.com?part=3D4 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 73EE7CCF2C9 for ; Sun, 18 Oct 2026 10:39:45 +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:MIME-Version:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Date:References: In-Reply-To:Cc:To:Subject:From:Message-ID:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=rV2G2JClAGXIZarrQSYcvsk2t0PGyI1tXCQb6zZzk40=; b=yNs6k6LsTcaZZQ zT2aT3nOroa6xC4NxOVlBDuRmuGE+LdiAbp/RZc3D6Om5WMdg5nAvvok3xB2TFdA0u+f5UcOnP5ej DWz1iIwPbRrXdGHjP8b3Gjvd/Sr/6OS25Ro4OTCsLhNmUx2+C+5nbNvBoj4ZT6uc4BWvVPoyofHO4 4TVEWsi9rwCfwOpRu75s9Xr/HL/4aubD10du/NswHYRfH2PUcBEWJhY/pYAGjYIB/33rv8ULSbsUB q6yhKFIVADcEGdEwfCotvPuA8vXvEU9/7863k24GsWUOR+p7ZwXALPxwUEIX7tIPz0kJG/4W6Utdg Qu7dMkCDg7HipZDHL9zg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xIOIm-00000005lCo-02Zd; Sun, 18 Oct 2026 10:39:40 +0000 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1xIOIi-00000005lCS-36Z7 for linux-amlogic@lists.infradead.org; Sun, 18 Oct 2026 10:39:38 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 9435541B0D; Sun, 18 Oct 2026 10:39:35 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 16C301F000C4; Sun, 18 Oct 2026 10:39:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792319975; bh=cEdhNIWomkxO2MGN6UH2nfqM93X14f0/OkWbLgko1hs=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=K+WSMpkhm+cGeSGzEbfkv0VK4EgULBbg+0nOyexjemK4k6EAijJ/rR1sEp4+jJ5Y0 DQ3eF3OTAUU46p9M+nv+mGmm3AF3Ho21ss5Z80Z+PPlpRrGCUWFID9or/yGDFm2Idx eo9BT2C37LRqF+H9eNPsQVGuZpFtRv88yGgxjJFjPCXY2wlrzBukHL8cF13D5EAye1 Xt0NLStZXEmrTxwke8QmXZzxgq7jn6E2f1zn6/XEJ1QP/Ik8HS0sGcu2+mtq8Kk8p2 L/h7aWYOHwL8J4Io0wkSdPxeToI+zS5weBDP5lA9GQZGvVb9AAALlE+FApTcxQAAmQ CSa0t99CpZBOg== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v5 4/7] ASoC: meson: add AUDIN driver To: "Valerio Setti" Cc: devicetree@vger.kernel.org, linux-amlogic@lists.infradead.org, robh@kernel.org, conor+dt@kernel.org, neil.armstrong@linaro.org In-Reply-To: <20261018-audin-v5-4-4b8cc13a1b22@baylibre.com> References: <20261018-audin-v5-0-4b8cc13a1b22@baylibre.com> <20261018-audin-v5-4-4b8cc13a1b22@baylibre.com> Date: Sun, 18 Oct 2026 10:39:34 +0000 X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MSBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIEFTb0M6IG1lc29uOiBh dWRpbjogc2xlZXBpbmcgbXV0ZXhfbG9jaygpIGluIGF0b21pYyB0cmlnZ2VyIGFuZCBzb2Z0aXJx IHRpbWVyIGNvbnRleHQKLS0KCmNvbW1pdCBmM2JkMTU0ZGUyM2IwYTU3YmI4MjU3YjQwZGM0Nzlh OTg1ZmE2YzlhCkF1dGhvcjogVmFsZXJpbyBTZXR0aSA8dnNldHRpQGJheWxpYnJlLmNvbT4KCkFT b0M6IG1lc29uOiBhZGQgQVVESU4gZHJpdmVyCgpUaGlzIGNvbW1pdCBhZGRzIHRoZSBBVURJTiBh dWRpbyBpbnB1dCBkcml2ZXIgZm9yIEFtbG9naWMgR1ggcGxhdGZvcm1zCihHWEJCL0dYTCksIGlu Y2x1ZGluZyBGSUZPIGNhcHR1cmUgREFJcyBhbmQgYW4gSTJTIGRhdGEgZm9ybWF0dGVyIHdpZGdl dC4KCj4gZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9tZXNvbi9hdWRpbi1maWZvLmMgYi9zb3VuZC9z b2MvbWVzb24vYXVkaW4tZmlmby5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw MDAwMDAwMDAwLi41YjI1NGM5MGM3MTAwCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3NvdW5kL3Nv Yy9tZXNvbi9hdWRpbi1maWZvLmMKWyAuLi4gXQo+ICtzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3Rh cnQgYXVkaW5fZmlmb190aW1lcl9jYihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCj4gK3sKPiArCXN0 cnVjdCBhdWRpbl9maWZvX2RhaV9kYXRhICpkYXRhID0KPiArCQljb250YWluZXJfb2YodGltZXIs IHN0cnVjdCBhdWRpbl9maWZvX2RhaV9kYXRhLCBwb2xsaW5nX3RpbWVyKTsKPiArCXN0cnVjdCBz bmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gZGF0YS0+c3Vic3RyZWFtOwo+ICsJc3RydWN0 IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKPiArCXVuc2ln bmVkIGludCBjdXJyX3BvczsKPiArCXVuc2lnbmVkIGludCBkZWx0YSwgZWxhcHNlZF9wZXJpb2Rz X2J5dGVzLCBleHRyYV9ieXRlcywgc2xlZXBfYnl0ZXM7Cj4gKwo+ICsJLyoKPiArCSAqIFRha2Ug dGhlIHN0cmVhbSBsb2NrIHRvIHByZXZlbnQgdXNlcnNwYWNlIGZyb20gaXNzdWluZyBhIHF1aWNr Cj4gKwkgKiBQQVVTRV9QVVNIIC0+IFBBVVNFX1JFTEVBU0UgdHJhbnNpdGlvbiB3aGlsZSB3ZSdy ZSBydW5uaW5nIHRoaXMKPiArCSAqIGNhbGxiYWNrLiBEb2luZyBzbyB3b3VsZCBjYXVzZSAiaHJ0 aW1lcl9mb3J3YXJkX25vdygpIiB0byBiZSBjYWxsZWQKPiArCSAqIChzZWUgYmVsb3cpIHdoaWxl IHRoZSB0aW1lciBpcyBhbHJlYWR5IGVucXVldWVkLgo+ICsJICovCj4gKwlndWFyZChwY21fc3Ry ZWFtX2xvY2tfaXJxc2F2ZSkoc3Vic3RyZWFtKTsKPiArCj4gKwkvKiBTdG9wcGVkLCBvciBhIHRy aWdnZXIgYWxyZWFkeSByZS1hcm1lZCB0aGUgdGltZXIgd2hpbGUgd2Ugd2FpdGVkLiAqLwo+ICsJ aWYgKCFSRUFEX09OQ0UoZGF0YS0+cnVubmluZykgfHwgaHJ0aW1lcl9pc19xdWV1ZWQodGltZXIp KQo+ICsJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKPiArCj4gKwljdXJyX3BvcyA9IGF1ZGlu X2ZpZm9fcG9zKGRhdGEtPmRhaSwgcnVudGltZSk7Cj4gKwlkZWx0YSA9IChjdXJyX3BvcyA+PSBk YXRhLT5sYXN0X3BvcykgPwo+ICsJCWN1cnJfcG9zIC0gZGF0YS0+bGFzdF9wb3MgOgo+ICsJCShy dW50aW1lLT5kbWFfYnl0ZXMgLSBkYXRhLT5sYXN0X3BvcykgKyBjdXJyX3BvczsKPiArCWV4dHJh X2J5dGVzID0gZGVsdGEgJSBkYXRhLT5wZXJpb2RfYnl0ZXM7Cj4gKwllbGFwc2VkX3BlcmlvZHNf Ynl0ZXMgPSBkZWx0YSAtIGV4dHJhX2J5dGVzOwo+ICsKPiArCS8qIFJlcG9ydCBvbmx5IHdoZW4g dGhlIHBlcmlvZCBpcyBjb21wbGV0ZWQuICovCj4gKwlpZiAoZGVsdGEgPj0gZGF0YS0+cGVyaW9k X2J5dGVzKSB7Cj4gKwkJZGF0YS0+bGFzdF9wb3MgPSBkYXRhLT5sYXN0X3BvcyArIGVsYXBzZWRf cGVyaW9kc19ieXRlczsKPiArCQlpZiAoZGF0YS0+bGFzdF9wb3MgPj0gcnVudGltZS0+ZG1hX2J5 dGVzKQo+ICsJCQlkYXRhLT5sYXN0X3BvcyAlPSBydW50aW1lLT5kbWFfYnl0ZXM7Cj4gKwkJc25k X3BjbV9wZXJpb2RfZWxhcHNlZF91bmRlcl9zdHJlYW1fbG9jayhzdWJzdHJlYW0pOwo+ICsJfQpb IC4uLiBdCj4gZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9tZXNvbi9hdWRpbi1mb3JtYXR0ZXItaTJz LmMgYi9zb3VuZC9zb2MvbWVzb24vYXVkaW4tZm9ybWF0dGVyLWkycy5jCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAwLi44YmJiNWNkYjUyZGM4Cj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL3NvdW5kL3NvYy9tZXNvbi9hdWRpbi1mb3JtYXR0ZXItaTJzLmMKWyAuLi4g XQo+ICtzdGF0aWMgc3RydWN0IGd4X3N0cmVhbSAqCj4gK2F1ZGluX2Zvcm1hdHRlcl9pMnNfZ2V0 X3N0cmVhbShzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdykKPiArewo+ICsJc3RydWN0IHNu ZF9zb2NfZGFpICpiZSA9IGF1ZGluX2Zvcm1hdHRlcl9pMnNfZ2V0X2JlKHcpOwo+ICsKPiArCWlm ICghYmUpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJcmV0dXJuIHNuZF9zb2NfZGFpX2RtYV9k YXRhX2dldF9jYXB0dXJlKGJlKTsKPiArfQoKW1NldmVyaXR5OiBIaWdoXQpEb2VzIGJpbmRpbmcg dGhlIEFVRElOIGZvcm1hdHRlciB0byBneF9zdHJlYW0gbGVhZCB0byBzbGVlcGluZyBpbiBhdG9t aWMgYW5kCnNvZnRpcnEgY29udGV4dHMgZHVyaW5nIFBDTSB0cmlnZ2VyIG9wZXJhdGlvbnM/CgpJ biBhdWRpbl9maWZvX2RhaV9wcm9iZSgpLCBwb2xsaW5nX3RpbWVyIGlzIHNldCB1cCB3aXRoIEhS VElNRVJfTU9ERV9SRUxfU09GVCwKc28gYXVkaW5fZmlmb190aW1lcl9jYigpIHJ1bnMgaW4gc29m dGlycSBjb250ZXh0IGFuZCBhY3F1aXJlcwpndWFyZChwY21fc3RyZWFtX2xvY2tfaXJxc2F2ZSko c3Vic3RyZWFtKS4gVGhpcyByZXF1aXJlcyBzdWJzdHJlYW0tPnBjbS0+bm9uYXRvbWljCnRvIGJl IGZhbHNlLCBvdGhlcndpc2UgX3NuZF9wY21fc3RyZWFtX2xvY2tfaXJxc2F2ZSgpIHdvdWxkIGF0 dGVtcHQgdG8gYWNxdWlyZQpzdWJzdHJlYW0tPnNlbGZfZ3JvdXAubXV0ZXggZnJvbSBzb2Z0aXJx IGNvbnRleHQuCgpIb3dldmVyLCB3aXRoIG5vbmF0b21pYyBzZXQgdG8gZmFsc2Ugb24gdGhlIEZF IGFuZCBCRSBzdWJzdHJlYW1zLCBQQ00gdHJpZ2dlcgpvcGVyYXRpb25zIGhvbGQgc3Bpbl9sb2Nr X2lycXNhdmUgb24gdGhlIFBDTSBzdHJlYW0gbG9ja3MgKGZvciBleGFtcGxlIHZpYQpkcGNtX2Jl X2RhaV90cmlnZ2VyKCkpLiBUaGlzIGFsc28gb2NjdXJzIGluIHNvZnRpcnEgY29udGV4dCB3aGVu IGFuIFhSVU4gaXMKZGV0ZWN0ZWQ6CgphdWRpbl9maWZvX3RpbWVyX2NiKCkKICAtPiBzbmRfcGNt X3BlcmlvZF9lbGFwc2VkX3VuZGVyX3N0cmVhbV9sb2NrKCkKICAgIC0+IHNuZF9wY21fdXBkYXRl X2h3X3B0cjAoKQogICAgICAtPiBzbmRfcGNtX3N0b3AoKQogICAgICAgIC0+IGRwY21fZmVfZGFp X3RyaWdnZXIoKQogICAgICAgICAgLT4gZHBjbV9iZV9kYWlfdHJpZ2dlcigpCiAgICAgICAgICAg IC0+IGFpdV9lbmNvZGVyX2kyc190cmlnZ2VyKCkKICAgICAgICAgICAgICAtPiBneF9zdHJlYW1f c3RvcCgpCgpCZWNhdXNlIGF1ZGluX2Zvcm1hdHRlcl9pMnNfZ2V0X3N0cmVhbSgpIGF0dGFjaGVz IHRoZSBBVURJTiBmb3JtYXR0ZXIgdG8gdGhlCmJhY2tlbmQgREFJJ3Mgc3RydWN0IGd4X3N0cmVh bSwgc3RhcnRpbmcgb3Igc3RvcHBpbmcgdGhlIGNhcHR1cmUgc3RyZWFtIGNhbGxzCmFpdV9lbmNv ZGVyX2kyc190cmlnZ2VyKCkgLT4gZ3hfc3RyZWFtX3N0YXJ0KCkgb3IgZ3hfc3RyZWFtX3N0b3Ao KSwgYm90aCBvZgp3aGljaCBhY3F1aXJlIHRoZSBzbGVlcGluZyBtdXRleCB0cy0+bG9jazoKCnNv dW5kL3NvYy9tZXNvbi9neC1mb3JtYXR0ZXIuYzpneF9zdHJlYW1fc3RhcnQoKSB7CgltdXRleF9s b2NrKCZ0cy0+bG9jayk7CgoJLyogU3RhcnQgYWxsIHRoZSBmb3JtYXR0ZXJzIGF0dGFjaGVkIHRv IHRoZSBzdHJlYW0gKi8KCWxpc3RfZm9yX2VhY2hfZW50cnkoZm9ybWF0dGVyLCAmdHMtPmZvcm1h dHRlcl9saXN0LCBsaXN0KSB7CgkJcmV0ID0gZ3hfZm9ybWF0dGVyX2VuYWJsZShmb3JtYXR0ZXIp OwouLi4KfQoKc291bmQvc29jL21lc29uL2d4LWZvcm1hdHRlci5jOmd4X3N0cmVhbV9zdG9wKCkg ewoJbXV0ZXhfbG9jaygmdHMtPmxvY2spOwoJdHMtPnJlYWR5ID0gZmFsc2U7CgoJLyogU3RvcCBh bGwgdGhlIGZvcm1hdHRlcnMgYXR0YWNoZWQgdG8gdGhlIHN0cmVhbSAqLwoJbGlzdF9mb3JfZWFj aF9lbnRyeShmb3JtYXR0ZXIsICZ0cy0+Zm9ybWF0dGVyX2xpc3QsIGxpc3QpIHsKCQlneF9mb3Jt YXR0ZXJfZGlzYWJsZShmb3JtYXR0ZXIpOwoJfQoKCW11dGV4X3VubG9jaygmdHMtPmxvY2spOwp9 CgpXb24ndCBjYWxsaW5nIG11dGV4X2xvY2soJnRzLT5sb2NrKSB3aGlsZSBob2xkaW5nIHRoZSBQ Q00gc3RyZWFtIHNwaW5sb2NrcyB3aXRoCmludGVycnVwdHMgZGlzYWJsZWQgKGFuZCBmcm9tIHNv ZnRpcnEgY29udGV4dCBvbiBYUlVOKSB0cmlnZ2VyIGEgc2xlZXBpbmcgaW4KYXRvbWljIGNvbnRl eHQgYnVnPwoKWyAuLi4gXQoKLS0gClNhc2hpa28gQUkgcmV2aWV3IMK3IGh0dHBzOi8vc2FzaGlr by5kZXYvIy9wYXRjaHNldC8yMDI2MTAxOC1hdWRpbi12NS0wLTRiOGNjMTNhMWIyMkBiYXlsaWJy ZS5jb20/cGFydD00CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpsaW51eC1hbWxvZ2ljIG1haWxpbmcgbGlzdApsaW51eC1hbWxvZ2ljQGxpc3RzLmluZnJh ZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1hbWxvZ2ljCg==