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=-2.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=no 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 C1CDEC4338F for ; Thu, 29 Jul 2021 10:17:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A5E7660EFD for ; Thu, 29 Jul 2021 10:17:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235544AbhG2KR1 (ORCPT ); Thu, 29 Jul 2021 06:17:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56592 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235155AbhG2KRZ (ORCPT ); Thu, 29 Jul 2021 06:17:25 -0400 Received: from mail-lf1-x129.google.com (mail-lf1-x129.google.com [IPv6:2a00:1450:4864:20::129]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F0687C061757 for ; Thu, 29 Jul 2021 03:17:21 -0700 (PDT) Received: by mail-lf1-x129.google.com with SMTP id r17so10028661lfe.2 for ; Thu, 29 Jul 2021 03:17:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=kXIpgpDKWbPbcNkG2dNNt5Cm/6h4seJQ12NmUxex3VI=; b=ixDe9DEzvJT3GNrG6sd8nZ0dMqhEBzRdvDa2qi1gcvZPMQuLiyUYGrBZkHMiYzDc4q MVK00Tch8pEyNp5CCkOL2juHmsHHMj/mGQ/r+yTIJy3ayEVmx9PrGDNjvybuMw6p0kAI KkALVoLLgisef8ftDy3kY+lF8dp4ec9xJs8ULTVhYu6kT93lxPnmH8kyRkqv0+b5CqxF Oll6V/zPYc2xFDbtBUsdC2cfW8Swe7F53sKGiESCTI+tgVnV3Ko3XTz6s6lbzEdCIfwN l3pxNMoUzl9ibAd9b7uxw5gc78FJK3uyfWVRMwaZS9VmWI8+x7cni/PHCcdvqmGE7B2M QpiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=kXIpgpDKWbPbcNkG2dNNt5Cm/6h4seJQ12NmUxex3VI=; b=UHnkWnoUyO+5MPRMiUppjK/GXv71vmlN9XMODiIFrumPVHaRQTHDkOY1cNZt+LJAoL WrUNlMxh5yVG7X94EFJy8+yI5qO8NIHwKjpPrXO2Jzf5/e5wl6HGR9LSfuV9eeH17lFf 6UP/JXf1Q8FCkdJlyy8QdIxZB9H7hZSgxy2nwoaQxbEF1QwZvevLgILTuQIC/aG8DROM 5X+MRNcFUZqgXB3Q6NmytjnAVfsUJx90763LFRXnw9VSTOE6NRhD7hmA9QmLbC7vwj+E aZEXkaF3GNujTfxXQAZoaYX3daMhUi9o67mIvUJaH/09tFCmDU9EfegVvyPx2Scp/73z xVzQ== X-Gm-Message-State: AOAM5319yp44BMNU6jGFpp1aLbX708tQ9pnOmpdfek4isa/9y/Xv/YQx e24xlfMavPmiDrGAkqX2F/bPjUwd72LUeemlEVE= X-Google-Smtp-Source: ABdhPJxOC4twswUSAFRe3iPHlwAeCnVaeZ0RUAwFCHfdasp6unUrsj1RSp870lwZLb8qEPCJX8Vb9ioXQMptGuXCAgM= X-Received: by 2002:a05:6512:321c:: with SMTP id d28mr3190353lfe.203.1627553840300; Thu, 29 Jul 2021 03:17:20 -0700 (PDT) MIME-Version: 1.0 References: <957943ce-c50e-1560-6f1b-aea0a1c9a114@oracle.com> In-Reply-To: From: Roman Skakun Date: Thu, 29 Jul 2021 13:17:09 +0300 Message-ID: Subject: Re: [GIT PULL] dma-mapping fix for Linux 5.14 To: Stefano Stabellini Cc: Linus Torvalds , Christoph Hellwig , Linux Kernel Mailing List , iommu , Roman Skakun , Roman Skakun 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, Stefano! > I don't know on which platform Roman Skakun (CC'ed) found the problem. > But if we look at arch/arm/mm/dma-mapping.c:__dma_alloc, one of the > possible options is the "remap_allocator", which calls > __alloc_remap_buffer, which calls dma_common_contiguous_remap, which > calls vmap. Using Renesas R-car H3 platform. I have tested this case on 1:1 dom0 with < 4GB memory, but this case still exists. I'm still wondering why xen-swiotlb mapped vmalloc'ed addresses for low memory DMA addresses. =D0=BF=D0=BD, 26 =D0=B8=D1=8E=D0=BB. 2021 =D0=B3. =D0=B2 23:03, Stefano Sta= bellini : > > On Mon, 26 Jul 2021, Boris Ostrovsky wrote: > > On 7/25/21 12:50 PM, Linus Torvalds wrote: > > > On Sat, Jul 24, 2021 at 11:03 PM Christoph Hellwig wrote: > > > > > >> - handle vmalloc addresses in dma_common_{mmap,get_sgtable} > > >> (Roman Skakun) > > > I've pulled this, but my reaction is that we've tried to avoid this i= n > > > the past. Why is Xen using vmalloc'ed addresses and passing those in > > > to the dma mapping routines? > > > > > > It *smells* to me like a Xen-swiotlb bug, and it would have been > > > better to try to fix it there. Was that just too painful? > > > > > > Stefano will probably know better but this appears to have something to= do with how Pi (and possibly more ARM systems?) manage DMA memory: https:/= /lore.kernel.org/xen-devel/CADz_WD5Ln7Pe1WAFp73d2Mz9wxspzTE3WgAJusp5S8LX4= =3D83Bw@mail.gmail.com/. > > The original issue was found on the Raspberry Pi 4, and the fix was in > swiotlb-xen.c, commit 8b1e868f6. More recently, Roman realized that > dma_common_mmap might also end up calling virt_to_page on a vmalloc > address. This is the fix for that. > > > Why is Xen using vmalloc'ed addresses with dma routines at all? > > Xen is actually just calling the regular dma_direct_alloc to allocate > pages (xen_swiotlb_alloc_coherent -> xen_alloc_coherent_pages -> > dma_direct_alloc). dma_direct_alloc is the generic implementation. Back > when the original issue was found, dma_direct_alloc returned a vmalloc > address on RPi4. > > The original analysis was "xen_alloc_coherent_pages() eventually calls > arch_dma_alloc() in remap.c which successfully allocates pages from > atomic pool." See https://marc.info/?l=3Dxen-devel&m=3D158878173207775. > > > I don't know on which platform Roman Skakun (CC'ed) found the problem. > But if we look at arch/arm/mm/dma-mapping.c:__dma_alloc, one of the > possible options is the "remap_allocator", which calls > __alloc_remap_buffer, which calls dma_common_contiguous_remap, which > calls vmap. > > So unfortunately it seems that on certain arch/platforms > dma_alloc_coherent can return a vmap'ed address. So I would imagine this > issue could also happen on native (without Xen), at least in theory. --=20 Best Regards, Roman. 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=-0.5 required=3.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=no 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 A257CC432BE for ; Thu, 29 Jul 2021 10:17:27 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.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 4338260E09 for ; Thu, 29 Jul 2021 10:17:27 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 4338260E09 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 0972D40025; Thu, 29 Jul 2021 10:17:27 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id YHRCJQdQiMa6; Thu, 29 Jul 2021 10:17:25 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp2.osuosl.org (Postfix) with ESMTPS id 5500C400D8; Thu, 29 Jul 2021 10:17:25 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2E551C001A; Thu, 29 Jul 2021 10:17:25 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) by lists.linuxfoundation.org (Postfix) with ESMTP id F2EF8C000E for ; Thu, 29 Jul 2021 10:17:23 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id CCA7440025 for ; Thu, 29 Jul 2021 10:17:23 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id SJQA1U-qRRcb for ; Thu, 29 Jul 2021 10:17:22 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.8.0 Received: from mail-lf1-x12f.google.com (mail-lf1-x12f.google.com [IPv6:2a00:1450:4864:20::12f]) by smtp2.osuosl.org (Postfix) with ESMTPS id 8E3FA400D8 for ; Thu, 29 Jul 2021 10:17:22 +0000 (UTC) Received: by mail-lf1-x12f.google.com with SMTP id y34so9983174lfa.8 for ; Thu, 29 Jul 2021 03:17:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=kXIpgpDKWbPbcNkG2dNNt5Cm/6h4seJQ12NmUxex3VI=; b=ixDe9DEzvJT3GNrG6sd8nZ0dMqhEBzRdvDa2qi1gcvZPMQuLiyUYGrBZkHMiYzDc4q MVK00Tch8pEyNp5CCkOL2juHmsHHMj/mGQ/r+yTIJy3ayEVmx9PrGDNjvybuMw6p0kAI KkALVoLLgisef8ftDy3kY+lF8dp4ec9xJs8ULTVhYu6kT93lxPnmH8kyRkqv0+b5CqxF Oll6V/zPYc2xFDbtBUsdC2cfW8Swe7F53sKGiESCTI+tgVnV3Ko3XTz6s6lbzEdCIfwN l3pxNMoUzl9ibAd9b7uxw5gc78FJK3uyfWVRMwaZS9VmWI8+x7cni/PHCcdvqmGE7B2M QpiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=kXIpgpDKWbPbcNkG2dNNt5Cm/6h4seJQ12NmUxex3VI=; b=iBbmlIRP9n6iIq37IDHSE08UWBlbd11vLktSNJM6YouEkt4nO7tGH8ImNUyMQSmh5X G4m6s6ZeGBkH6Qg6RfeWVAO0f1QHVuR7EGGxIqbHewDmBiURJU6Nf8GLaga0xR8v1LKL fe+iW/ioDCB7OYF9pRt7QGCZhYdN5GHec3sYms0gz89ELyoL0hnvN6MWkTRyvHczJ+8c aHyK+tzk/CBRAIPbogJj+bHa8IOvVKYlNckR9ZWcr9bj0ehuB3PPrDa3gRsm0Wg2o4CC yh70xLm1FYWp3XkiAmb/ro0mM1ccHCh8GQKXuMe3R4qDQi9QjXo1TWXAf3tykrmPvbSA FAvw== X-Gm-Message-State: AOAM530BmpEgJh+SbYwXz6xXME6CTfuXVtr5Z3LDKFcRFnTDtwqa7hSK PX3Qlp112Yh8ka21k2R1Y2wT/yMRDLDAo2JpPac= X-Google-Smtp-Source: ABdhPJxOC4twswUSAFRe3iPHlwAeCnVaeZ0RUAwFCHfdasp6unUrsj1RSp870lwZLb8qEPCJX8Vb9ioXQMptGuXCAgM= X-Received: by 2002:a05:6512:321c:: with SMTP id d28mr3190353lfe.203.1627553840300; Thu, 29 Jul 2021 03:17:20 -0700 (PDT) MIME-Version: 1.0 References: <957943ce-c50e-1560-6f1b-aea0a1c9a114@oracle.com> In-Reply-To: From: Roman Skakun Date: Thu, 29 Jul 2021 13:17:09 +0300 Message-ID: Subject: Re: [GIT PULL] dma-mapping fix for Linux 5.14 To: Stefano Stabellini Cc: Roman Skakun , Linux Kernel Mailing List , Christoph Hellwig , iommu , Roman Skakun , Linus Torvalds X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: iommu-bounces@lists.linux-foundation.org Sender: "iommu" SGksIFN0ZWZhbm8hCgo+IEkgZG9uJ3Qga25vdyBvbiB3aGljaCBwbGF0Zm9ybSBSb21hbiBTa2Fr dW4gKENDJ2VkKSBmb3VuZCB0aGUgcHJvYmxlbS4KPiBCdXQgaWYgd2UgbG9vayBhdCBhcmNoL2Fy bS9tbS9kbWEtbWFwcGluZy5jOl9fZG1hX2FsbG9jLCBvbmUgb2YgdGhlCj4gcG9zc2libGUgb3B0 aW9ucyBpcyB0aGUgInJlbWFwX2FsbG9jYXRvciIsIHdoaWNoIGNhbGxzCj4gX19hbGxvY19yZW1h cF9idWZmZXIsIHdoaWNoIGNhbGxzIGRtYV9jb21tb25fY29udGlndW91c19yZW1hcCwgd2hpY2gK PiBjYWxscyB2bWFwLgoKVXNpbmcgIFJlbmVzYXMgUi1jYXIgSDMgcGxhdGZvcm0uCkkgaGF2ZSB0 ZXN0ZWQgdGhpcyBjYXNlIG9uIDE6MSBkb20wIHdpdGggPCA0R0IgbWVtb3J5LCBidXQgdGhpcyBj YXNlCnN0aWxsIGV4aXN0cy4KSSdtIHN0aWxsIHdvbmRlcmluZyB3aHkgeGVuLXN3aW90bGIgbWFw cGVkIHZtYWxsb2MnZWQgYWRkcmVzc2VzIGZvcgpsb3cgbWVtb3J5IERNQSBhZGRyZXNzZXMuCgrQ v9C9LCAyNiDQuNGO0LsuIDIwMjEg0LMuINCyIDIzOjAzLCBTdGVmYW5vIFN0YWJlbGxpbmkgPHNz dGFiZWxsaW5pQGtlcm5lbC5vcmc+Ogo+Cj4gT24gTW9uLCAyNiBKdWwgMjAyMSwgQm9yaXMgT3N0 cm92c2t5IHdyb3RlOgo+ID4gT24gNy8yNS8yMSAxMjo1MCBQTSwgTGludXMgVG9ydmFsZHMgd3Jv dGU6Cj4gPiA+IE9uIFNhdCwgSnVsIDI0LCAyMDIxIGF0IDExOjAzIFBNIENocmlzdG9waCBIZWxs d2lnIDxoY2hAaW5mcmFkZWFkLm9yZz4gd3JvdGU6Cj4gPiA+Cj4gPiA+PiAgIC0gaGFuZGxlIHZt YWxsb2MgYWRkcmVzc2VzIGluIGRtYV9jb21tb25fe21tYXAsZ2V0X3NndGFibGV9Cj4gPiA+PiAg ICAgKFJvbWFuIFNrYWt1bikKPiA+ID4gSSd2ZSBwdWxsZWQgdGhpcywgYnV0IG15IHJlYWN0aW9u IGlzIHRoYXQgd2UndmUgdHJpZWQgdG8gYXZvaWQgdGhpcyBpbgo+ID4gPiB0aGUgcGFzdC4gV2h5 IGlzIFhlbiB1c2luZyB2bWFsbG9jJ2VkIGFkZHJlc3NlcyBhbmQgcGFzc2luZyB0aG9zZSBpbgo+ ID4gPiB0byB0aGUgZG1hIG1hcHBpbmcgcm91dGluZXM/Cj4gPiA+Cj4gPiA+IEl0ICpzbWVsbHMq IHRvIG1lIGxpa2UgYSBYZW4tc3dpb3RsYiBidWcsIGFuZCBpdCB3b3VsZCBoYXZlIGJlZW4KPiA+ ID4gYmV0dGVyIHRvIHRyeSB0byBmaXggaXQgdGhlcmUuIFdhcyB0aGF0IGp1c3QgdG9vIHBhaW5m dWw/Cj4gPgo+ID4KPiA+IFN0ZWZhbm8gd2lsbCBwcm9iYWJseSBrbm93IGJldHRlciBidXQgdGhp cyBhcHBlYXJzIHRvIGhhdmUgc29tZXRoaW5nIHRvIGRvIHdpdGggaG93IFBpIChhbmQgcG9zc2li bHkgbW9yZSBBUk0gc3lzdGVtcz8pIG1hbmFnZSBETUEgbWVtb3J5OiBodHRwczovL2xvcmUua2Vy bmVsLm9yZy94ZW4tZGV2ZWwvQ0FEel9XRDVMbjdQZTFXQUZwNzNkMk16OXd4c3B6VEUzV2dBSnVz cDVTOExYND04M0J3QG1haWwuZ21haWwuY29tLy4KPgo+IFRoZSBvcmlnaW5hbCBpc3N1ZSB3YXMg Zm91bmQgb24gdGhlIFJhc3BiZXJyeSBQaSA0LCBhbmQgdGhlIGZpeCB3YXMgaW4KPiBzd2lvdGxi LXhlbi5jLCBjb21taXQgOGIxZTg2OGY2LiBNb3JlIHJlY2VudGx5LCBSb21hbiByZWFsaXplZCB0 aGF0Cj4gZG1hX2NvbW1vbl9tbWFwIG1pZ2h0IGFsc28gZW5kIHVwIGNhbGxpbmcgdmlydF90b19w YWdlIG9uIGEgdm1hbGxvYwo+IGFkZHJlc3MuIFRoaXMgaXMgdGhlIGZpeCBmb3IgdGhhdC4KPgo+ Cj4gV2h5IGlzIFhlbiB1c2luZyB2bWFsbG9jJ2VkIGFkZHJlc3NlcyB3aXRoIGRtYSByb3V0aW5l cyBhdCBhbGw/Cj4KPiBYZW4gaXMgYWN0dWFsbHkganVzdCBjYWxsaW5nIHRoZSByZWd1bGFyIGRt YV9kaXJlY3RfYWxsb2MgdG8gYWxsb2NhdGUKPiBwYWdlcyAoeGVuX3N3aW90bGJfYWxsb2NfY29o ZXJlbnQgLT4geGVuX2FsbG9jX2NvaGVyZW50X3BhZ2VzIC0+Cj4gZG1hX2RpcmVjdF9hbGxvYyku IGRtYV9kaXJlY3RfYWxsb2MgaXMgdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24uIEJhY2sKPiB3 aGVuIHRoZSBvcmlnaW5hbCBpc3N1ZSB3YXMgZm91bmQsIGRtYV9kaXJlY3RfYWxsb2MgcmV0dXJu ZWQgYSB2bWFsbG9jCj4gYWRkcmVzcyBvbiBSUGk0Lgo+Cj4gVGhlIG9yaWdpbmFsIGFuYWx5c2lz IHdhcyAieGVuX2FsbG9jX2NvaGVyZW50X3BhZ2VzKCkgZXZlbnR1YWxseSBjYWxscwo+IGFyY2hf ZG1hX2FsbG9jKCkgaW4gcmVtYXAuYyB3aGljaCBzdWNjZXNzZnVsbHkgYWxsb2NhdGVzIHBhZ2Vz IGZyb20KPiBhdG9taWMgcG9vbC4iIFNlZSBodHRwczovL21hcmMuaW5mby8/bD14ZW4tZGV2ZWwm bT0xNTg4NzgxNzMyMDc3NzUuCj4KPgo+IEkgZG9uJ3Qga25vdyBvbiB3aGljaCBwbGF0Zm9ybSBS b21hbiBTa2FrdW4gKENDJ2VkKSBmb3VuZCB0aGUgcHJvYmxlbS4KPiBCdXQgaWYgd2UgbG9vayBh dCBhcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jOl9fZG1hX2FsbG9jLCBvbmUgb2YgdGhlCj4gcG9z c2libGUgb3B0aW9ucyBpcyB0aGUgInJlbWFwX2FsbG9jYXRvciIsIHdoaWNoIGNhbGxzCj4gX19h bGxvY19yZW1hcF9idWZmZXIsIHdoaWNoIGNhbGxzIGRtYV9jb21tb25fY29udGlndW91c19yZW1h cCwgd2hpY2gKPiBjYWxscyB2bWFwLgo+Cj4gU28gdW5mb3J0dW5hdGVseSBpdCBzZWVtcyB0aGF0 IG9uIGNlcnRhaW4gYXJjaC9wbGF0Zm9ybXMKPiBkbWFfYWxsb2NfY29oZXJlbnQgY2FuIHJldHVy biBhIHZtYXAnZWQgYWRkcmVzcy4gU28gSSB3b3VsZCBpbWFnaW5lIHRoaXMKPiBpc3N1ZSBjb3Vs ZCBhbHNvIGhhcHBlbiBvbiBuYXRpdmUgKHdpdGhvdXQgWGVuKSwgYXQgbGVhc3QgaW4gdGhlb3J5 LgoKCgotLSAKQmVzdCBSZWdhcmRzLCBSb21hbi4KX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KaW9tbXUgbWFpbGluZyBsaXN0CmlvbW11QGxpc3RzLmxpbnV4 LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2lvbW11