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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 659C7ECAAD1 for ; Wed, 31 Aug 2022 16:41:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232281AbiHaQlp (ORCPT ); Wed, 31 Aug 2022 12:41:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38092 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231733AbiHaQlm (ORCPT ); Wed, 31 Aug 2022 12:41:42 -0400 Received: from mail-qt1-x82c.google.com (mail-qt1-x82c.google.com [IPv6:2607:f8b0:4864:20::82c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DBB6A6F253 for ; Wed, 31 Aug 2022 09:41:41 -0700 (PDT) Received: by mail-qt1-x82c.google.com with SMTP id x5so11400860qtv.9 for ; Wed, 31 Aug 2022 09:41:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc; bh=1G1xSWfmfr1YBvtDVKOBLCFkOKdgEIYTug4kna7QRCM=; b=yspNSuxqrCcgBFcHPcu+G2ZvubWMqNwOdB0mtes6i4pEsPHt0OgXzj5+XFkmh/bYY1 4dlx36w6d18YMcT23GQw8+2kjSkLQdR47gWAe+9TjphwclQ4Lc4XMopCVG2h0UgGVoYg EoXtKN2dUPv2eE5eOX36ynWujAwH2p+Sg24R0OLDCQUeZYb5gru6QP1CWqZPddgSDezG vbBqtslphksBHa7sOs/nbLEj+ka/NU4YWmKOff9OdlS4Ya1fm1ScN8s3OEMlmnJOMdkb 5iyi8axnuIKEH1NcKRrQzPxW4AkknwiBgfjfCHScBhf9tpitTUuXZFM1y4eJSi/L5F1Q OyqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc; bh=1G1xSWfmfr1YBvtDVKOBLCFkOKdgEIYTug4kna7QRCM=; b=TgqSbcEjM4H92gvFSul5jb6R5R0rJAxv1JCWv87rLlTEuPEcHZZ2ltfC9ckLZ37Y9T Q2jKv6ylxrsX9KI8ujnOEJv9wWN8uJRxjp8dtnUpCxVzBl2lc2JtiuSmkM7Pbvayl0vK KtLNXBLTdpqFx710dQhLwaL0GU6wHWxFMHJ/NTnzwqldASpCAEzAiGNpfBbdLq6a8n/w oAD3xNNTVdFpQ/ihvErCL27H0BM8B6l2SMfIW+lj6P1HgldaC0zvRAXhgZRHv+UD7QHf zQbUUkG3AQwnpx7m0ZcbbDMB13aPjdzOYSHN6sTGkVXDqIfiC9L/cAfhngB/3BIUO3X6 xP7A== X-Gm-Message-State: ACgBeo3xzNpYd2f9a3jk1mzQx0yrPkIBcHxY/tkKPOs2KYLy1wfV/lgU NEYsJTh0McNFzjntxu4tqQoTNESIqoTFJdeXkdwS/Q== X-Google-Smtp-Source: AA6agR5wd9JjWwb12m2Ng/8FvHwP3ObMSs/4YavfZo4YeehPCH/KClCWcrOHIOy6l2QSGWHqJ3JAUH5IPFDqJCnpPac= X-Received: by 2002:a05:622a:206:b0:344:a554:e555 with SMTP id b6-20020a05622a020600b00344a554e555mr20456486qtx.187.1661964100951; Wed, 31 Aug 2022 09:41:40 -0700 (PDT) MIME-Version: 1.0 References: <20220421141300.GC20492@lst.de> <665d2b46-c9e2-2543-cad5-9adf022e4bcb@arm.com> <9ec5ba90-150a-c675-d95b-b13e3a4e9e10@arm.com> <5c617d66-f04b-df26-bf7a-7f479d081ac2@arm.com> In-Reply-To: <5c617d66-f04b-df26-bf7a-7f479d081ac2@arm.com> From: Yongqin Liu Date: Thu, 1 Sep 2022 00:41:29 +0800 Message-ID: Subject: Re: [PATCH 0/3] More ARM DMA ops cleanup To: Robin Murphy Cc: Christoph Hellwig , linux@armlinux.org.uk, linux-arm-kernel@lists.infradead.org, m.szyprowski@samsung.com, arnd@kernel.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, "Bajjuri, Praneeth" , Sumit Semwal Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, Robin On Tue, 30 Aug 2022 at 23:37, Robin Murphy wrote: > > On 2022-08-30 16:19, Yongqin Liu wrote: > > Hi, Robin > > > > Thanks for the kind reply! > > > > On Tue, 30 Aug 2022 at 17:48, Robin Murphy wrote= : > >> > >> On 2022-08-27 13:24, Yongqin Liu wrote: > >>> Hi, Robin, Christoph > >>> > >>> With the changes landed in the mainline kernel, > >>> one problem is exposed with our out of tree pvr module. > >>> Like the source here[1], arm_dma_ops.sync_single_for_cpu is called in > >>> the format like the following: > >>> arm_dma_ops.sync_single_for_cpu(NULL, pStart, pEnd - pStart, > >>> DMA_FROM_DEVICE); > >>> > >>> Not sure if you could give some suggestions on what I should do next > >>> to make the pvr module work again. > >> > >> Wow, that driver reinvents so many standard APIs for no apparent reaso= n > >> it's not even funny. > >> > >> Anyway, from a brief look it seemingly already knows how to call the D= MA > >> API semi-correctly, so WTF that's doing behind an #ifdef, who knows? > >> However it's still so completely wrong in general - fundamentally brok= en > >> AArch64 set/way cache maintenance!? - that it looks largely beyond hel= p. > >> "Throw CONFIG_DMA_API_DEBUG at it and cry" is about the extent of > >> support I'm prepared to provide for that mess. > > > > For the moment, I do not care about the AArch64 lines, like if we only > > say the following two lines: > > arm_dma_ops.sync_single_for_device(NULL, pStart, pEnd - pStart, > > DMA_TO_DEVICE); > > arm_dma_ops.sync_single_for_cpu(NULL, pStart, pEnd - pStart, > > DMA_FROM_DEVICE); > > > > Could you please give some suggestions for that? > > Remove them. Then remove the #ifdef __arch64__ too, since the code under > there is doing a passable impression of generic DMA API usage, as long > as one ignores the bigger picture. I tried with this method, and found that if I only update for the pvr_flush_range and the pvr_clean_range functions, the build still could boot to the home screen. but if I update all the pvr_flush_range, pvr_clean_range and pvr_invalidate_range functions with this method(remove the arm_dma_ops lines and the #ifdef __arch64__ lines), then a "Unable to handle kernel NULL pointer dereference at virtual address 0000003c" error is reported like here: http://ix.io/49gu Not sure if you have any idea from the log, or could you please give some suggestions on how to debug it. > arm64 already uses dma-direct. To say you don't care about the arm64 > code when asking how to deal with ARM having now been converted to use > dma-direct as well is supremely missing the point. Sorry for that, I am not familiar with the dma part, and just know "dma-direct" from here, will check how "dma-direct" should be used next, and check if there is something wrong in the pvr source code. It would be appreciated if you could suggest some links on "dma-direct" I can study with. Thanks, Yongqin Liu > > > > > >>> Thanks in advance! > >>> > >>> [1]: https://android-git.linaro.org/kernel/omap-modules.git/tree/pvr/= services4/srvkm/env/linux/osfunc.c?h=3Dandroid-mainline#n4615 > >>> > >>> Thanks, > >>> Yongqin Liu > >>> > >>> On Thu, 21 Apr 2022 at 22:35, Robin Murphy wro= te: > >>>> > >>>> On 2022-04-21 15:13, Christoph Hellwig wrote: > >>>>> On Thu, Apr 21, 2022 at 12:36:56PM +0100, Robin Murphy wrote: > >>>>>> Hi all, > >>>>>> > >>>>>> Thanks to Christoph's latest series, I'm reminded that, if we're g= oing > >>>>>> to give the ARM DMA ops some cleanup this cycle, it's as good a ti= me as > >>>>>> any to dust off these old patches and add them on top as well. I'v= e > >>>>>> based these on the arm-dma-direct branch which I assume matches th= e > >>>>>> patches posted at [1]. > >>>>> > >>>>> All these do look sensible to me. But weren't you working on repla= cing > >>>>> the ARM iommu dma_ops with dma-=D1=96ommu anyway? > >>>> > >>>> Yes, that's somewhat entangled with the IOMMU bus ops stuff, so I'll > >>>> probably get to the point of having to revisit it in a couple of mon= ths > >>>> or so. These patches are off the bottom of that stack from my first > >>>> attempt, where the aim was to make the current ops the same shape fi= rst > >>>> so that the switch is then easier to reason about (particularly in t= erms > >>>> of sounding out any issues with the hooking up of dev->dma_coherent, > >>>> although your series will now be taking most of the load off there). > >>>> > >>>> Cheers, > >>>> Robin. > >>> > >>> > >>> > > > > > > --=20 Best Regards, Yongqin Liu --------------------------------------------------------------- #mailing list linaro-android@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-android 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 4C9EBECAAD1 for ; Wed, 31 Aug 2022 16:42:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=SbydBPe0MjoLXmC/rwt54OcNx84NXGXeTogk8OibEYk=; b=vWzdjqrtuhKIPZ RnVCycfQqUTc4ej+wbbmP9d4iVDZ7HpYTAvbX4VGFO4UQMPRuqg0oe//EYjTVvkvJYkH7c1V5lYOI XgRG2knOasRfdCtNAB5uyjIqNzRI3Fc1YOVamt1ahCeEk0ge0Kw5XXSJPgVKHAV13pDxhVxIOt/1Z EcugaxVHOdZoX1GsXyafuUevTkTpJkjKLrxjWX/9AzuFn5VCpR4EE8NMz08wlYeRcTQKdw/kLBc3v co6ePWBCeHuAwKu1U6Rr0G2AX3JM/VMfPuFwRQ6KuT5hf9sg2+hC0CY9TleYY/o9A/GNRbfz7VYDG F00vIe2aNh5/eZwF3Tng==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oTQmh-007Fc1-PY; Wed, 31 Aug 2022 16:41:47 +0000 Received: from mail-qt1-x831.google.com ([2607:f8b0:4864:20::831]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oTQme-007FbF-7Z for linux-arm-kernel@lists.infradead.org; Wed, 31 Aug 2022 16:41:46 +0000 Received: by mail-qt1-x831.google.com with SMTP id e28so11413408qts.1 for ; Wed, 31 Aug 2022 09:41:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc; bh=1G1xSWfmfr1YBvtDVKOBLCFkOKdgEIYTug4kna7QRCM=; b=yspNSuxqrCcgBFcHPcu+G2ZvubWMqNwOdB0mtes6i4pEsPHt0OgXzj5+XFkmh/bYY1 4dlx36w6d18YMcT23GQw8+2kjSkLQdR47gWAe+9TjphwclQ4Lc4XMopCVG2h0UgGVoYg EoXtKN2dUPv2eE5eOX36ynWujAwH2p+Sg24R0OLDCQUeZYb5gru6QP1CWqZPddgSDezG vbBqtslphksBHa7sOs/nbLEj+ka/NU4YWmKOff9OdlS4Ya1fm1ScN8s3OEMlmnJOMdkb 5iyi8axnuIKEH1NcKRrQzPxW4AkknwiBgfjfCHScBhf9tpitTUuXZFM1y4eJSi/L5F1Q OyqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc; bh=1G1xSWfmfr1YBvtDVKOBLCFkOKdgEIYTug4kna7QRCM=; b=bw8IsmuxIv+LQnVKwBXtDwJB1WwBBwwZN5nkTqBhKRLaYtWd56q02al8/v1k4KLrQe cE2OCLR55jBRQTZO4kZydbCVQsVdrxcQcSTaClaJ/EftjG03sxZLVMW9DaVQJ3mbugfo X38iAw1QnK8d4FwhlHQCDJc9X4kiNkd6kJ7LE9ErJjIpIsjRjy1uRJSQ8zciuYAGucZA knAQ8WeR1qEmbwhHYVJ3lpi6Ih9WL6Y/4ckRHY/P+iZgNw6EcfpbR3sDiy1lpHg8Kgj2 /0EodOtJSznnVSUtIoAgSmVmFfHBQ4HWFoMppZDhbPxDXF0ZrzkoW+g6kkBoJqGQMjgw pEFg== X-Gm-Message-State: ACgBeo2Y6iFgMoKcOBfirD2MUByG2gzPFm9u1GFy+pgjgAw7wIl7JSip OFf9htENIHWkx6OOjhTyKNGozRrKzHHz5Vf0llgNRA== X-Google-Smtp-Source: AA6agR5wd9JjWwb12m2Ng/8FvHwP3ObMSs/4YavfZo4YeehPCH/KClCWcrOHIOy6l2QSGWHqJ3JAUH5IPFDqJCnpPac= X-Received: by 2002:a05:622a:206:b0:344:a554:e555 with SMTP id b6-20020a05622a020600b00344a554e555mr20456486qtx.187.1661964100951; Wed, 31 Aug 2022 09:41:40 -0700 (PDT) MIME-Version: 1.0 References: <20220421141300.GC20492@lst.de> <665d2b46-c9e2-2543-cad5-9adf022e4bcb@arm.com> <9ec5ba90-150a-c675-d95b-b13e3a4e9e10@arm.com> <5c617d66-f04b-df26-bf7a-7f479d081ac2@arm.com> In-Reply-To: <5c617d66-f04b-df26-bf7a-7f479d081ac2@arm.com> From: Yongqin Liu Date: Thu, 1 Sep 2022 00:41:29 +0800 Message-ID: Subject: Re: [PATCH 0/3] More ARM DMA ops cleanup To: Robin Murphy Cc: Christoph Hellwig , linux@armlinux.org.uk, linux-arm-kernel@lists.infradead.org, m.szyprowski@samsung.com, arnd@kernel.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, "Bajjuri, Praneeth" , Sumit Semwal X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220831_094144_298993_FF0482E5 X-CRM114-Status: GOOD ( 45.90 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGksIFJvYmluCgpPbiBUdWUsIDMwIEF1ZyAyMDIyIGF0IDIzOjM3LCBSb2JpbiBNdXJwaHkgPHJv YmluLm11cnBoeUBhcm0uY29tPiB3cm90ZToKPgo+IE9uIDIwMjItMDgtMzAgMTY6MTksIFlvbmdx aW4gTGl1IHdyb3RlOgo+ID4gSGksIFJvYmluCj4gPgo+ID4gVGhhbmtzIGZvciB0aGUga2luZCBy ZXBseSEKPiA+Cj4gPiBPbiBUdWUsIDMwIEF1ZyAyMDIyIGF0IDE3OjQ4LCBSb2JpbiBNdXJwaHkg PHJvYmluLm11cnBoeUBhcm0uY29tPiB3cm90ZToKPiA+Pgo+ID4+IE9uIDIwMjItMDgtMjcgMTM6 MjQsIFlvbmdxaW4gTGl1IHdyb3RlOgo+ID4+PiBIaSwgUm9iaW4sIENocmlzdG9waAo+ID4+Pgo+ ID4+PiBXaXRoIHRoZSBjaGFuZ2VzIGxhbmRlZCBpbiB0aGUgbWFpbmxpbmUga2VybmVsLAo+ID4+ PiBvbmUgcHJvYmxlbSBpcyBleHBvc2VkIHdpdGggb3VyIG91dCBvZiB0cmVlIHB2ciBtb2R1bGUu Cj4gPj4+IExpa2UgdGhlIHNvdXJjZSBoZXJlWzFdLCBhcm1fZG1hX29wcy5zeW5jX3NpbmdsZV9m b3JfY3B1IGlzIGNhbGxlZCBpbgo+ID4+PiB0aGUgZm9ybWF0IGxpa2UgdGhlIGZvbGxvd2luZzoK PiA+Pj4gICAgICAgYXJtX2RtYV9vcHMuc3luY19zaW5nbGVfZm9yX2NwdShOVUxMLCBwU3RhcnQs IHBFbmQgLSBwU3RhcnQsCj4gPj4+IERNQV9GUk9NX0RFVklDRSk7Cj4gPj4+Cj4gPj4+IE5vdCBz dXJlIGlmIHlvdSBjb3VsZCBnaXZlIHNvbWUgc3VnZ2VzdGlvbnMgb24gd2hhdCBJIHNob3VsZCBk byBuZXh0Cj4gPj4+IHRvIG1ha2UgdGhlIHB2ciBtb2R1bGUgd29yayBhZ2Fpbi4KPiA+Pgo+ID4+ IFdvdywgdGhhdCBkcml2ZXIgcmVpbnZlbnRzIHNvIG1hbnkgc3RhbmRhcmQgQVBJcyBmb3Igbm8g YXBwYXJlbnQgcmVhc29uCj4gPj4gaXQncyBub3QgZXZlbiBmdW5ueS4KPiA+Pgo+ID4+IEFueXdh eSwgZnJvbSBhIGJyaWVmIGxvb2sgaXQgc2VlbWluZ2x5IGFscmVhZHkga25vd3MgaG93IHRvIGNh bGwgdGhlIERNQQo+ID4+IEFQSSBzZW1pLWNvcnJlY3RseSwgc28gV1RGIHRoYXQncyBkb2luZyBi ZWhpbmQgYW4gI2lmZGVmLCB3aG8ga25vd3M/Cj4gPj4gSG93ZXZlciBpdCdzIHN0aWxsIHNvIGNv bXBsZXRlbHkgd3JvbmcgaW4gZ2VuZXJhbCAtIGZ1bmRhbWVudGFsbHkgYnJva2VuCj4gPj4gQUFy Y2g2NCBzZXQvd2F5IGNhY2hlIG1haW50ZW5hbmNlIT8gLSB0aGF0IGl0IGxvb2tzIGxhcmdlbHkg YmV5b25kIGhlbHAuCj4gPj4gIlRocm93IENPTkZJR19ETUFfQVBJX0RFQlVHIGF0IGl0IGFuZCBj cnkiIGlzIGFib3V0IHRoZSBleHRlbnQgb2YKPiA+PiBzdXBwb3J0IEknbSBwcmVwYXJlZCB0byBw cm92aWRlIGZvciB0aGF0IG1lc3MuCj4gPgo+ID4gRm9yIHRoZSBtb21lbnQsIEkgZG8gbm90IGNh cmUgYWJvdXQgdGhlIEFBcmNoNjQgbGluZXMsIGxpa2UgaWYgd2Ugb25seQo+ID4gc2F5IHRoZSBm b2xsb3dpbmcgdHdvIGxpbmVzOgo+ID4gICAgICBhcm1fZG1hX29wcy5zeW5jX3NpbmdsZV9mb3Jf ZGV2aWNlKE5VTEwsIHBTdGFydCwgcEVuZCAtIHBTdGFydCwKPiA+IERNQV9UT19ERVZJQ0UpOwo+ ID4gICAgICBhcm1fZG1hX29wcy5zeW5jX3NpbmdsZV9mb3JfY3B1KE5VTEwsIHBTdGFydCwgcEVu ZCAtIHBTdGFydCwKPiA+IERNQV9GUk9NX0RFVklDRSk7Cj4gPgo+ID4gQ291bGQgeW91IHBsZWFz ZSBnaXZlIHNvbWUgc3VnZ2VzdGlvbnMgZm9yIHRoYXQ/Cj4KPiBSZW1vdmUgdGhlbS4gVGhlbiBy ZW1vdmUgdGhlICNpZmRlZiBfX2FyY2g2NF9fIHRvbywgc2luY2UgdGhlIGNvZGUgdW5kZXIKPiB0 aGVyZSBpcyBkb2luZyBhIHBhc3NhYmxlIGltcHJlc3Npb24gb2YgZ2VuZXJpYyBETUEgQVBJIHVz YWdlLCBhcyBsb25nCj4gYXMgb25lIGlnbm9yZXMgdGhlIGJpZ2dlciBwaWN0dXJlLgoKSSB0cmll ZCB3aXRoIHRoaXMgbWV0aG9kLCBhbmQgZm91bmQgdGhhdCBpZiBJIG9ubHkgdXBkYXRlIGZvciB0 aGUKcHZyX2ZsdXNoX3JhbmdlCmFuZCB0aGUgcHZyX2NsZWFuX3JhbmdlIGZ1bmN0aW9ucywgdGhl IGJ1aWxkIHN0aWxsIGNvdWxkIGJvb3QgdG8gdGhlCmhvbWUgc2NyZWVuLgoKYnV0IGlmIEkgdXBk YXRlIGFsbCB0aGUgcHZyX2ZsdXNoX3JhbmdlLCBwdnJfY2xlYW5fcmFuZ2UgYW5kCnB2cl9pbnZh bGlkYXRlX3JhbmdlCmZ1bmN0aW9ucyB3aXRoIHRoaXMgbWV0aG9kKHJlbW92ZSB0aGUgYXJtX2Rt YV9vcHMgbGluZXMgYW5kIHRoZSAjaWZkZWYKX19hcmNoNjRfXyBsaW5lcyksCnRoZW4gYSAiVW5h YmxlIHRvIGhhbmRsZSBrZXJuZWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGF0IHZpcnR1YWwK YWRkcmVzcyAwMDAwMDAzYyIKZXJyb3IgaXMgcmVwb3J0ZWQgbGlrZSBoZXJlOiBodHRwOi8vaXgu aW8vNDlndQoKTm90IHN1cmUgaWYgeW91IGhhdmUgYW55IGlkZWEgZnJvbSB0aGUgbG9nLCBvciBj b3VsZCB5b3UgcGxlYXNlIGdpdmUKc29tZSBzdWdnZXN0aW9ucwpvbiBob3cgdG8gZGVidWcgaXQu Cgo+IGFybTY0IGFscmVhZHkgdXNlcyBkbWEtZGlyZWN0LiBUbyBzYXkgeW91IGRvbid0IGNhcmUg YWJvdXQgdGhlIGFybTY0Cj4gY29kZSB3aGVuIGFza2luZyBob3cgdG8gZGVhbCB3aXRoIEFSTSBo YXZpbmcgbm93IGJlZW4gY29udmVydGVkIHRvIHVzZQo+IGRtYS1kaXJlY3QgYXMgd2VsbCBpcyBz dXByZW1lbHkgbWlzc2luZyB0aGUgcG9pbnQuCgpTb3JyeSBmb3IgdGhhdCwgSSBhbSBub3QgZmFt aWxpYXIgd2l0aCB0aGUgZG1hIHBhcnQsIGFuZCBqdXN0IGtub3cKImRtYS1kaXJlY3QiIGZyb20g aGVyZSwKd2lsbCBjaGVjayBob3cgImRtYS1kaXJlY3QiIHNob3VsZCBiZSB1c2VkIG5leHQsIGFu ZCBjaGVjayBpZiB0aGVyZSBpcwpzb21ldGhpbmcgd3JvbmcgaW4KdGhlIHB2ciBzb3VyY2UgY29k ZS4KSXQgd291bGQgYmUgYXBwcmVjaWF0ZWQgaWYgeW91IGNvdWxkIHN1Z2dlc3Qgc29tZSBsaW5r cyBvbgoiZG1hLWRpcmVjdCIgSSBjYW4gc3R1ZHkgd2l0aC4KClRoYW5rcywKWW9uZ3FpbiBMaXUK PiA+Cj4gPgo+ID4+PiBUaGFua3MgaW4gYWR2YW5jZSEKPiA+Pj4KPiA+Pj4gWzFdOiBodHRwczov L2FuZHJvaWQtZ2l0LmxpbmFyby5vcmcva2VybmVsL29tYXAtbW9kdWxlcy5naXQvdHJlZS9wdnIv c2VydmljZXM0L3NydmttL2Vudi9saW51eC9vc2Z1bmMuYz9oPWFuZHJvaWQtbWFpbmxpbmUjbjQ2 MTUKPiA+Pj4KPiA+Pj4gVGhhbmtzLAo+ID4+PiBZb25ncWluIExpdQo+ID4+Pgo+ID4+PiBPbiBU aHUsIDIxIEFwciAyMDIyIGF0IDIyOjM1LCBSb2JpbiBNdXJwaHkgPHJvYmluLm11cnBoeUBhcm0u Y29tPiB3cm90ZToKPiA+Pj4+Cj4gPj4+PiBPbiAyMDIyLTA0LTIxIDE1OjEzLCBDaHJpc3RvcGgg SGVsbHdpZyB3cm90ZToKPiA+Pj4+PiBPbiBUaHUsIEFwciAyMSwgMjAyMiBhdCAxMjozNjo1NlBN ICswMTAwLCBSb2JpbiBNdXJwaHkgd3JvdGU6Cj4gPj4+Pj4+IEhpIGFsbCwKPiA+Pj4+Pj4KPiA+ Pj4+Pj4gVGhhbmtzIHRvIENocmlzdG9waCdzIGxhdGVzdCBzZXJpZXMsIEknbSByZW1pbmRlZCB0 aGF0LCBpZiB3ZSdyZSBnb2luZwo+ID4+Pj4+PiB0byBnaXZlIHRoZSBBUk0gRE1BIG9wcyBzb21l IGNsZWFudXAgdGhpcyBjeWNsZSwgaXQncyBhcyBnb29kIGEgdGltZSBhcwo+ID4+Pj4+PiBhbnkg dG8gZHVzdCBvZmYgdGhlc2Ugb2xkIHBhdGNoZXMgYW5kIGFkZCB0aGVtIG9uIHRvcCBhcyB3ZWxs LiBJJ3ZlCj4gPj4+Pj4+IGJhc2VkIHRoZXNlIG9uIHRoZSBhcm0tZG1hLWRpcmVjdCBicmFuY2gg d2hpY2ggSSBhc3N1bWUgbWF0Y2hlcyB0aGUKPiA+Pj4+Pj4gcGF0Y2hlcyBwb3N0ZWQgYXQgWzFd Lgo+ID4+Pj4+Cj4gPj4+Pj4gQWxsIHRoZXNlIGRvIGxvb2sgc2Vuc2libGUgdG8gbWUuICBCdXQg d2VyZW4ndCB5b3Ugd29ya2luZyBvbiByZXBsYWNpbmcKPiA+Pj4+PiB0aGUgQVJNIGlvbW11IGRt YV9vcHMgd2l0aCBkbWEt0ZZvbW11IGFueXdheT8KPiA+Pj4+Cj4gPj4+PiBZZXMsIHRoYXQncyBz b21ld2hhdCBlbnRhbmdsZWQgd2l0aCB0aGUgSU9NTVUgYnVzIG9wcyBzdHVmZiwgc28gSSdsbAo+ ID4+Pj4gcHJvYmFibHkgZ2V0IHRvIHRoZSBwb2ludCBvZiBoYXZpbmcgdG8gcmV2aXNpdCBpdCBp biBhIGNvdXBsZSBvZiBtb250aHMKPiA+Pj4+IG9yIHNvLiBUaGVzZSBwYXRjaGVzIGFyZSBvZmYg dGhlIGJvdHRvbSBvZiB0aGF0IHN0YWNrIGZyb20gbXkgZmlyc3QKPiA+Pj4+IGF0dGVtcHQsIHdo ZXJlIHRoZSBhaW0gd2FzIHRvIG1ha2UgdGhlIGN1cnJlbnQgb3BzIHRoZSBzYW1lIHNoYXBlIGZp cnN0Cj4gPj4+PiBzbyB0aGF0IHRoZSBzd2l0Y2ggaXMgdGhlbiBlYXNpZXIgdG8gcmVhc29uIGFi b3V0IChwYXJ0aWN1bGFybHkgaW4gdGVybXMKPiA+Pj4+IG9mIHNvdW5kaW5nIG91dCBhbnkgaXNz dWVzIHdpdGggdGhlIGhvb2tpbmcgdXAgb2YgZGV2LT5kbWFfY29oZXJlbnQsCj4gPj4+PiBhbHRo b3VnaCB5b3VyIHNlcmllcyB3aWxsIG5vdyBiZSB0YWtpbmcgbW9zdCBvZiB0aGUgbG9hZCBvZmYg dGhlcmUpLgo+ID4+Pj4KPiA+Pj4+IENoZWVycywKPiA+Pj4+IFJvYmluLgo+ID4+Pgo+ID4+Pgo+ ID4+Pgo+ID4KPiA+Cj4gPgoKCgotLSAKQmVzdCBSZWdhcmRzLApZb25ncWluIExpdQotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K I21haWxpbmcgbGlzdApsaW5hcm8tYW5kcm9pZEBsaXN0cy5saW5hcm8ub3JnCmh0dHA6Ly9saXN0 cy5saW5hcm8ub3JnL21haWxtYW4vbGlzdGluZm8vbGluYXJvLWFuZHJvaWQKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFp bGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlz dHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK