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=-11.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING, SPF_HELO_NONE,SPF_PASS 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 B9AB0C48BC2 for ; Mon, 7 Jun 2021 03:19:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A419960240 for ; Mon, 7 Jun 2021 03:19:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230245AbhFGDVK (ORCPT ); Sun, 6 Jun 2021 23:21:10 -0400 Received: from mail.kernel.org ([198.145.29.99]:47834 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230256AbhFGDVH (ORCPT ); Sun, 6 Jun 2021 23:21:07 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id C3B7F61245; Mon, 7 Jun 2021 03:19:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1623035956; bh=0p29jn++tsF+vUnK/OLUKwo6pJis8eT6cbc/e0CPuzk=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=B3DZEPCFHj/v5Wh0eE3Hrq81HmDqteDzAiErp79q286leKgx+z/elA3Gbf72nRXQB zaixflaXhEyrZss+CvXpW9BjFbENrt3H+Yq34C8eXLfPkdv0KNozsbGtTdJ9FHIoZr loQz21dNQobrRvPsJV4pJOpvl89V0jvJ8ydPmziQosrL0I6FATFynyjTISeHWJ/Wha EahD8/MbLA6lAQs90DU0SaXc6zzssLCcIO7uTcvFu+d8xmysLhAYpKZUT6pm+SMjne 4hdXgZZesmaKVv2kqk6NDesMBFJvyw5Wzkxtg+Y8oQyd52Ko04rnb+WC3xdryV93pd A5hPljwlG1kRg== Received: by mail-lj1-f177.google.com with SMTP id m3so20074026lji.12; Sun, 06 Jun 2021 20:19:16 -0700 (PDT) X-Gm-Message-State: AOAM530J8fhciu2GVo+VgGgUgvWxuvybf3q73Q9M5Sz/yeyriVwuE0wU J91HvIiUnwDlxlblBrKsn+0ZAZT03BUeiTd2a8Q= X-Google-Smtp-Source: ABdhPJw+Lf6RNVJ73c+UaqPihugKlQLGVtOJWsQyqACS35169cmAKldJM+82/gsj1c1RaDuUMLbnT9jy5ePND/KI3k8= X-Received: by 2002:a05:651c:1314:: with SMTP id u20mr13696451lja.18.1623035954992; Sun, 06 Jun 2021 20:19:14 -0700 (PDT) MIME-Version: 1.0 References: <1621400656-25678-1-git-send-email-guoren@kernel.org> <20210519052048.GA24853@lst.de> <20210519064435.GA3076809@x1> <20210519065352.GA31590@lst.de> <29733b0931d9dd6a2f0b6919067c7efe@mailhost.ics.forth.gr> In-Reply-To: From: Guo Ren Date: Mon, 7 Jun 2021 11:19:03 +0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH RFC 0/3] riscv: Add DMA_COHERENT support To: Nick Kossifidis Cc: Christoph Hellwig , Drew Fustini , Anup Patel , Palmer Dabbelt , wefu@redhat.com, =?UTF-8?B?V2VpIFd1ICjlkLTkvJ8p?= , linux-riscv , Linux Kernel Mailing List , linux-arch , linux-sunxi@lists.linux.dev, Guo Ren , Paul Walmsley , Benjamin Koch , Matteo Croce , Wei Fu Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jun 7, 2021 at 10:16 AM Nick Kossifidis wrote: > > =CE=A3=CF=84=CE=B9=CF=82 2021-06-07 03:04, Guo Ren =CE=AD=CE=B3=CF=81=CE= =B1=CF=88=CE=B5: > > On Mon, Jun 7, 2021 at 2:14 AM Nick Kossifidis > > wrote: > >> > >> =CE=A3=CF=84=CE=B9=CF=82 2021-05-20 04:45, Guo Ren =CE=AD=CE=B3=CF=81= =CE=B1=CF=88=CE=B5: > >> > On Wed, May 19, 2021 at 2:53 PM Christoph Hellwig wrote= : > >> >> > >> >> On Tue, May 18, 2021 at 11:44:35PM -0700, Drew Fustini wrote: > >> >> > This patch series looks like it might be useful for the StarFive = JH7100 > >> >> > [1] [2] too as it has peripherals on a non-coherent interconnect.= GMAC, > >> >> > USB and SDIO require that the L2 cache must be manually flushed a= fter > >> >> > DMA operations if the data is intended to be shared with U74 core= s [2]. > >> >> > >> >> Not too much, given that the SiFive lineage CPUs have an uncached > >> >> window, that is a totally different way to allocate uncached memory= . > >> > It's a very big MIPS smell. What's the attribute of the uncached > >> > window? (uncached + strong-order/ uncached + weak, most vendors stil= l > >> > use AXI interconnect, how to deal with a bufferable attribute?) In > >> > fact, customers' drivers use different ways to deal with DMA memory = in > >> > non-coherent SOC. Most riscv SOC vendors are from ARM, so giving the= m > >> > the same way in DMA memory is a smart choice. So using PTE attribute= s > >> > is more suitable. > >> > > >> > See: > >> > https://github.com/riscv/virtual-memory/blob/main/specs/611-virtual-= memory-diff.pdf > >> > 4.4.1 > >> > The draft supports custom attribute bits in PTE. > >> > > >> > >> Not only it doesn't support custom attributes on PTEs: > >> > >> "Bits63=E2=80=9354 are reserved for future standard use and must be ze= roed by > >> software for forward compatibility." > >> > >> It also goes further to say that: > >> > >> "if any of these bits are set, a page-fault exception is raised" > > > > In RISC-V VM TG, A C-bit discussion is raised. So it's a comm idea to > > support it. > > > > The C-bit was recently dropped, there is a new proposal for Page Based > Memory Attributes (PBMT) that we can work on / push for. C-bit still needs discussion, we shouldn't drop it directly. > > > Let Linux support custom PTE attributes won't get any side effect in > > practice. > > > > IMO: > > We needn't waste a bit in PTE, but the custom idea in PTE reserved > > bits is necessary. Because Allwinner D1 needs custom PTE bits in > > reserved bits to work around. > > So I recommend just remove the "C" bit in PTE, but allow vendors to > > define their own PTE attributes in reserved bits. I've found a way to > > compact different PTE attributes of different vendors during the Linux > > boot stage. That means we still could use One Image for all vendors in > > Linux > > The spec is clear, those attributes are for standard use only, not for > custom/platform use. It's one thing to implement custom CMOs where the > ISA doesn't have anything for it and doesn't prevent you to do so (so > you are not violating anything, it's just a custom extension), and we > can hide them behind SBI calls etc, and another to violate the current > Privilege Spec by using bits on PTEs that are reserved for standard use > only. The intentions of the VM TG are clear, not only those bits are > reserved but if software uses them the hw will result a page fault in > future revisions of the spec. What's the idea here, to support > non-compliant implementations on mainline ? Raise a page fault won't solve anything. We still need access to the page with proper performance. > I'm sure you have a good > idea on how to make this work, but as long as it violates the spec it > can't go in IMHO. We need PTEs to provide a non-coherency solution, and only CMO instructions are not enough. We can't modify so many Linux drivers to fit it. >From Linux non-coherency view, we need: - Non-cache + Strong Order PTE attributes to deal with drivers' DMA descri= ptors - Non-cache + weak order to deal with framebuffer drivers - CMO dma_sync to sync cache with DMA devices - Userspace icache_sync solution, which prevents calls to S-mode with IPI fence.i. (Necessary to JIT java scenarios.) All above are not in spec, but the real chips are done. (Actually, these have been talked about for more than five years, we still haven't the uniform idea.) The idea of C-bit is really important for us which prevents our chips violates the spec. --=20 Best Regards Guo Ren ML: https://lore.kernel.org/linux-csky/ 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=-9.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE, SPF_PASS 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 1648EC4743D for ; Mon, 7 Jun 2021 03:19:43 +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 CC13161208 for ; Mon, 7 Jun 2021 03:19:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CC13161208 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-riscv-bounces+linux-riscv=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.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=8pcXC65vz4QKsrfiJ5UVIH1Ru3v3JCigWbBjyC0h82w=; b=PPk+yyka3JM6IF cvpKJ7tiwIFHWt8gmLXCfyZ3v8WDJPSBZw7GKlqAGfgYQB5C1oBp61AkB74l24y/WzY/BKYStbT7o R3uIIcNPs7yV4nMHJi8nllByWsNfAzquj0Yt+yxMqIt8ijJgToVhSQI5rEq5zV897rI8NdG9GOZ6F Clwqm2v+pkDmBE9m2RalcWzvks9CBJRTX6GBb6Amac/hRb4hx86tYvwGO0O6IMlrrjqkhWXYSX+YQ dewrexi1Ftoxnjl1rbO05hG4DbkKJN/NihRfWywTSh1MMGlmeWyqpn6qnksdkciHKVe05QmHL1iQh 5vspQsfzgIn+lYSrVoDQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lq5nM-001Lhx-Dh; Mon, 07 Jun 2021 03:19:20 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1lq5nJ-001LgT-Bw for linux-riscv@lists.infradead.org; Mon, 07 Jun 2021 03:19:19 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 9DDDD61209 for ; Mon, 7 Jun 2021 03:19:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1623035956; bh=0p29jn++tsF+vUnK/OLUKwo6pJis8eT6cbc/e0CPuzk=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=B3DZEPCFHj/v5Wh0eE3Hrq81HmDqteDzAiErp79q286leKgx+z/elA3Gbf72nRXQB zaixflaXhEyrZss+CvXpW9BjFbENrt3H+Yq34C8eXLfPkdv0KNozsbGtTdJ9FHIoZr loQz21dNQobrRvPsJV4pJOpvl89V0jvJ8ydPmziQosrL0I6FATFynyjTISeHWJ/Wha EahD8/MbLA6lAQs90DU0SaXc6zzssLCcIO7uTcvFu+d8xmysLhAYpKZUT6pm+SMjne 4hdXgZZesmaKVv2kqk6NDesMBFJvyw5Wzkxtg+Y8oQyd52Ko04rnb+WC3xdryV93pd A5hPljwlG1kRg== Received: by mail-lj1-f175.google.com with SMTP id r14so955376ljd.10 for ; Sun, 06 Jun 2021 20:19:16 -0700 (PDT) X-Gm-Message-State: AOAM533D1Hb3iiNuiKsjzyQoOxEb4YNTcUYYiSpb97ROhD+MXEhXjH/9 V2n2bTn4nXISbQVGsQcurobZu7er82ldreX+x8A= X-Google-Smtp-Source: ABdhPJw+Lf6RNVJ73c+UaqPihugKlQLGVtOJWsQyqACS35169cmAKldJM+82/gsj1c1RaDuUMLbnT9jy5ePND/KI3k8= X-Received: by 2002:a05:651c:1314:: with SMTP id u20mr13696451lja.18.1623035954992; Sun, 06 Jun 2021 20:19:14 -0700 (PDT) MIME-Version: 1.0 References: <1621400656-25678-1-git-send-email-guoren@kernel.org> <20210519052048.GA24853@lst.de> <20210519064435.GA3076809@x1> <20210519065352.GA31590@lst.de> <29733b0931d9dd6a2f0b6919067c7efe@mailhost.ics.forth.gr> In-Reply-To: From: Guo Ren Date: Mon, 7 Jun 2021 11:19:03 +0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH RFC 0/3] riscv: Add DMA_COHERENT support To: Nick Kossifidis Cc: Christoph Hellwig , Drew Fustini , Anup Patel , Palmer Dabbelt , wefu@redhat.com, =?UTF-8?B?V2VpIFd1ICjlkLTkvJ8p?= , linux-riscv , Linux Kernel Mailing List , linux-arch , linux-sunxi@lists.linux.dev, Guo Ren , Paul Walmsley , Benjamin Koch , Matteo Croce , Wei Fu X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210606_201917_471711_22E5FABD X-CRM114-Status: GOOD ( 39.51 ) X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gTW9uLCBKdW4gNywgMjAyMSBhdCAxMDoxNiBBTSBOaWNrIEtvc3NpZmlkaXMgPG1pY2tAaWNz LmZvcnRoLmdyPiB3cm90ZToKPgo+IM6jz4TOuc+CIDIwMjEtMDYtMDcgMDM6MDQsIEd1byBSZW4g zq3Os8+BzrHPiM61Ogo+ID4gT24gTW9uLCBKdW4gNywgMjAyMSBhdCAyOjE0IEFNIE5pY2sgS29z c2lmaWRpcyA8bWlja0BpY3MuZm9ydGguZ3I+Cj4gPiB3cm90ZToKPiA+Pgo+ID4+IM6jz4TOuc+C IDIwMjEtMDUtMjAgMDQ6NDUsIEd1byBSZW4gzq3Os8+BzrHPiM61Ogo+ID4+ID4gT24gV2VkLCBN YXkgMTksIDIwMjEgYXQgMjo1MyBQTSBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4gd3Jv dGU6Cj4gPj4gPj4KPiA+PiA+PiBPbiBUdWUsIE1heSAxOCwgMjAyMSBhdCAxMTo0NDozNVBNIC0w NzAwLCBEcmV3IEZ1c3Rpbmkgd3JvdGU6Cj4gPj4gPj4gPiBUaGlzIHBhdGNoIHNlcmllcyBsb29r cyBsaWtlIGl0IG1pZ2h0IGJlIHVzZWZ1bCBmb3IgdGhlIFN0YXJGaXZlIEpINzEwMAo+ID4+ID4+ ID4gWzFdIFsyXSB0b28gYXMgaXQgaGFzIHBlcmlwaGVyYWxzIG9uIGEgbm9uLWNvaGVyZW50IGlu dGVyY29ubmVjdC4gR01BQywKPiA+PiA+PiA+IFVTQiBhbmQgU0RJTyByZXF1aXJlIHRoYXQgdGhl IEwyIGNhY2hlIG11c3QgYmUgbWFudWFsbHkgZmx1c2hlZCBhZnRlcgo+ID4+ID4+ID4gRE1BIG9w ZXJhdGlvbnMgaWYgdGhlIGRhdGEgaXMgaW50ZW5kZWQgdG8gYmUgc2hhcmVkIHdpdGggVTc0IGNv cmVzIFsyXS4KPiA+PiA+Pgo+ID4+ID4+IE5vdCB0b28gbXVjaCwgZ2l2ZW4gdGhhdCB0aGUgU2lG aXZlIGxpbmVhZ2UgQ1BVcyBoYXZlIGFuIHVuY2FjaGVkCj4gPj4gPj4gd2luZG93LCB0aGF0IGlz IGEgdG90YWxseSBkaWZmZXJlbnQgd2F5IHRvIGFsbG9jYXRlIHVuY2FjaGVkIG1lbW9yeS4KPiA+ PiA+IEl0J3MgYSB2ZXJ5IGJpZyBNSVBTIHNtZWxsLiBXaGF0J3MgdGhlIGF0dHJpYnV0ZSBvZiB0 aGUgdW5jYWNoZWQKPiA+PiA+IHdpbmRvdz8gKHVuY2FjaGVkICsgc3Ryb25nLW9yZGVyLyB1bmNh Y2hlZCArIHdlYWssIG1vc3QgdmVuZG9ycyBzdGlsbAo+ID4+ID4gdXNlIEFYSSBpbnRlcmNvbm5l Y3QsIGhvdyB0byBkZWFsIHdpdGggYSBidWZmZXJhYmxlIGF0dHJpYnV0ZT8pIEluCj4gPj4gPiBm YWN0LCBjdXN0b21lcnMnIGRyaXZlcnMgdXNlIGRpZmZlcmVudCB3YXlzIHRvIGRlYWwgd2l0aCBE TUEgbWVtb3J5IGluCj4gPj4gPiBub24tY29oZXJlbnQgU09DLiBNb3N0IHJpc2N2IFNPQyB2ZW5k b3JzIGFyZSBmcm9tIEFSTSwgc28gZ2l2aW5nIHRoZW0KPiA+PiA+IHRoZSBzYW1lIHdheSBpbiBE TUEgbWVtb3J5IGlzIGEgc21hcnQgY2hvaWNlLiBTbyB1c2luZyBQVEUgYXR0cmlidXRlcwo+ID4+ ID4gaXMgbW9yZSBzdWl0YWJsZS4KPiA+PiA+Cj4gPj4gPiBTZWU6Cj4gPj4gPiBodHRwczovL2dp dGh1Yi5jb20vcmlzY3YvdmlydHVhbC1tZW1vcnkvYmxvYi9tYWluL3NwZWNzLzYxMS12aXJ0dWFs LW1lbW9yeS1kaWZmLnBkZgo+ID4+ID4gNC40LjEKPiA+PiA+IFRoZSBkcmFmdCBzdXBwb3J0cyBj dXN0b20gYXR0cmlidXRlIGJpdHMgaW4gUFRFLgo+ID4+ID4KPiA+Pgo+ID4+IE5vdCBvbmx5IGl0 IGRvZXNuJ3Qgc3VwcG9ydCBjdXN0b20gYXR0cmlidXRlcyBvbiBQVEVzOgo+ID4+Cj4gPj4gIkJp dHM2M+KAkzU0IGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHN0YW5kYXJkIHVzZSBhbmQgbXVzdCBi ZSB6ZXJvZWQgYnkKPiA+PiBzb2Z0d2FyZSBmb3IgZm9yd2FyZCBjb21wYXRpYmlsaXR5LiIKPiA+ Pgo+ID4+IEl0IGFsc28gZ29lcyBmdXJ0aGVyIHRvIHNheSB0aGF0Ogo+ID4+Cj4gPj4gImlmIGFu eSBvZiB0aGVzZSBiaXRzIGFyZSBzZXQsIGEgcGFnZS1mYXVsdCBleGNlcHRpb24gaXMgcmFpc2Vk Igo+ID4KPiA+IEluIFJJU0MtViBWTSBURywgQSBDLWJpdCBkaXNjdXNzaW9uIGlzIHJhaXNlZC4g U28gaXQncyBhIGNvbW0gaWRlYSB0bwo+ID4gc3VwcG9ydCBpdC4KPiA+Cj4KPiBUaGUgQy1iaXQg d2FzIHJlY2VudGx5IGRyb3BwZWQsIHRoZXJlIGlzIGEgbmV3IHByb3Bvc2FsIGZvciBQYWdlIEJh c2VkCj4gTWVtb3J5IEF0dHJpYnV0ZXMgKFBCTVQpIHRoYXQgd2UgY2FuIHdvcmsgb24gLyBwdXNo IGZvci4KQy1iaXQgc3RpbGwgbmVlZHMgZGlzY3Vzc2lvbiwgd2Ugc2hvdWxkbid0IGRyb3AgaXQg ZGlyZWN0bHkuCgo+Cj4gPiBMZXQgTGludXggc3VwcG9ydCBjdXN0b20gUFRFIGF0dHJpYnV0ZXMg d29uJ3QgZ2V0IGFueSBzaWRlIGVmZmVjdCBpbgo+ID4gcHJhY3RpY2UuCj4gPgo+ID4gSU1POgo+ ID4gV2UgbmVlZG4ndCB3YXN0ZSBhIGJpdCBpbiBQVEUsIGJ1dCB0aGUgY3VzdG9tIGlkZWEgaW4g UFRFIHJlc2VydmVkCj4gPiBiaXRzIGlzIG5lY2Vzc2FyeS4gQmVjYXVzZSBBbGx3aW5uZXIgRDEg bmVlZHMgY3VzdG9tIFBURSBiaXRzIGluCj4gPiByZXNlcnZlZCBiaXRzIHRvIHdvcmsgYXJvdW5k Lgo+ID4gU28gSSByZWNvbW1lbmQganVzdCByZW1vdmUgdGhlICJDIiBiaXQgaW4gUFRFLCBidXQg YWxsb3cgdmVuZG9ycyB0bwo+ID4gZGVmaW5lIHRoZWlyIG93biBQVEUgYXR0cmlidXRlcyBpbiBy ZXNlcnZlZCBiaXRzLiBJJ3ZlIGZvdW5kIGEgd2F5IHRvCj4gPiBjb21wYWN0IGRpZmZlcmVudCBQ VEUgYXR0cmlidXRlcyBvZiBkaWZmZXJlbnQgdmVuZG9ycyBkdXJpbmcgdGhlIExpbnV4Cj4gPiBi b290IHN0YWdlLiBUaGF0IG1lYW5zIHdlIHN0aWxsIGNvdWxkIHVzZSBPbmUgSW1hZ2UgZm9yIGFs bCB2ZW5kb3JzIGluCj4gPiBMaW51eAo+Cj4gVGhlIHNwZWMgaXMgY2xlYXIsIHRob3NlIGF0dHJp YnV0ZXMgYXJlIGZvciBzdGFuZGFyZCB1c2Ugb25seSwgbm90IGZvcgo+IGN1c3RvbS9wbGF0Zm9y bSB1c2UuIEl0J3Mgb25lIHRoaW5nIHRvIGltcGxlbWVudCBjdXN0b20gQ01PcyB3aGVyZSB0aGUK PiBJU0EgZG9lc24ndCBoYXZlIGFueXRoaW5nIGZvciBpdCBhbmQgZG9lc24ndCBwcmV2ZW50IHlv dSB0byBkbyBzbyAoc28KPiB5b3UgYXJlIG5vdCB2aW9sYXRpbmcgYW55dGhpbmcsIGl0J3MganVz dCBhIGN1c3RvbSBleHRlbnNpb24pLCBhbmQgd2UKPiBjYW4gaGlkZSB0aGVtIGJlaGluZCBTQkkg Y2FsbHMgZXRjLCBhbmQgYW5vdGhlciB0byB2aW9sYXRlIHRoZSBjdXJyZW50Cj4gUHJpdmlsZWdl IFNwZWMgYnkgdXNpbmcgYml0cyBvbiBQVEVzIHRoYXQgYXJlIHJlc2VydmVkIGZvciBzdGFuZGFy ZCB1c2UKPiBvbmx5LiBUaGUgaW50ZW50aW9ucyBvZiB0aGUgVk0gVEcgYXJlIGNsZWFyLCBub3Qg b25seSB0aG9zZSBiaXRzIGFyZQo+IHJlc2VydmVkIGJ1dCBpZiBzb2Z0d2FyZSB1c2VzIHRoZW0g dGhlIGh3IHdpbGwgcmVzdWx0IGEgcGFnZSBmYXVsdCBpbgo+IGZ1dHVyZSByZXZpc2lvbnMgb2Yg dGhlIHNwZWMuIFdoYXQncyB0aGUgaWRlYSBoZXJlLCB0byBzdXBwb3J0Cj4gbm9uLWNvbXBsaWFu dCBpbXBsZW1lbnRhdGlvbnMgb24gbWFpbmxpbmUgPwpSYWlzZSBhIHBhZ2UgZmF1bHQgd29uJ3Qg c29sdmUgYW55dGhpbmcuIFdlIHN0aWxsIG5lZWQgYWNjZXNzIHRvIHRoZQpwYWdlIHdpdGggcHJv cGVyIHBlcmZvcm1hbmNlLgoKPiBJJ20gc3VyZSB5b3UgaGF2ZSBhIGdvb2QKPiBpZGVhIG9uIGhv dyB0byBtYWtlIHRoaXMgd29yaywgYnV0IGFzIGxvbmcgYXMgaXQgdmlvbGF0ZXMgdGhlIHNwZWMg aXQKPiBjYW4ndCBnbyBpbiBJTUhPLgoKV2UgbmVlZCBQVEVzIHRvIHByb3ZpZGUgYSBub24tY29o ZXJlbmN5IHNvbHV0aW9uLCBhbmQgb25seSBDTU8KaW5zdHJ1Y3Rpb25zIGFyZSBub3QgZW5vdWdo LiBXZSBjYW4ndCBtb2RpZnkgc28gbWFueSBMaW51eCBkcml2ZXJzIHRvCmZpdCBpdC4KRnJvbSBM aW51eCBub24tY29oZXJlbmN5IHZpZXcsIHdlIG5lZWQ6CiAtIE5vbi1jYWNoZSArIFN0cm9uZyBP cmRlciBQVEUgYXR0cmlidXRlcyB0byBkZWFsIHdpdGggZHJpdmVycycgRE1BIGRlc2NyaXB0b3Jz CiAtIE5vbi1jYWNoZSArIHdlYWsgb3JkZXIgdG8gZGVhbCB3aXRoIGZyYW1lYnVmZmVyIGRyaXZl cnMKIC0gQ01PIGRtYV9zeW5jIHRvIHN5bmMgY2FjaGUgd2l0aCBETUEgZGV2aWNlcwogLSBVc2Vy c3BhY2UgaWNhY2hlX3N5bmMgc29sdXRpb24sIHdoaWNoIHByZXZlbnRzIGNhbGxzIHRvIFMtbW9k ZSB3aXRoCklQSSBmZW5jZS5pLiAoTmVjZXNzYXJ5IHRvIEpJVCBqYXZhIHNjZW5hcmlvcy4pCgpB bGwgYWJvdmUgYXJlIG5vdCBpbiBzcGVjLCBidXQgdGhlIHJlYWwgY2hpcHMgYXJlIGRvbmUuCihB Y3R1YWxseSwgdGhlc2UgaGF2ZSBiZWVuIHRhbGtlZCBhYm91dCBmb3IgbW9yZSB0aGFuIGZpdmUg eWVhcnMsIHdlCnN0aWxsIGhhdmVuJ3QgdGhlIHVuaWZvcm0gaWRlYS4pCgpUaGUgaWRlYSBvZiBD LWJpdCBpcyByZWFsbHkgaW1wb3J0YW50IGZvciB1cyB3aGljaCBwcmV2ZW50cyBvdXIgY2hpcHMK dmlvbGF0ZXMgdGhlIHNwZWMuCgotLSAKQmVzdCBSZWdhcmRzCiBHdW8gUmVuCgpNTDogaHR0cHM6 Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgtY3NreS8KCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNj dkBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4v bGlzdGluZm8vbGludXgtcmlzY3YK