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=-8.1 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 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 019DFC43331 for ; Mon, 11 Nov 2019 12:23:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B4FBD2190F for ; Mon, 11 Nov 2019 12:23:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=xenosoft.de header.i=@xenosoft.de header.b="ammtpAm+" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726959AbfKKMXF (ORCPT ); Mon, 11 Nov 2019 07:23:05 -0500 Received: from mo4-p01-ob.smtp.rzone.de ([85.215.255.52]:28517 "EHLO mo4-p01-ob.smtp.rzone.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726811AbfKKMXF (ORCPT ); Mon, 11 Nov 2019 07:23:05 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1573474981; s=strato-dkim-0002; d=xenosoft.de; h=In-Reply-To:Date:Message-ID:References:Cc:To:From:Subject: X-RZG-CLASS-ID:X-RZG-AUTH:From:Subject:Sender; bh=0btYE6YH7zy4vfCP4cntmQHWXt7IT1edhwGn9XkpfDE=; b=ammtpAm+hG8ksnT080At0cPSTVOkUFX2Tekd2Etx8W/cZUD1cXvzNi4h4jg5XZauFS 0YWGi8yFVPuxemJPhQNR8ixhXIdQkygE57oHgHYsG4OAy4S9uDl2tcrSxFrasePruOjS AVjYnN5ZnhniQQNVmW0Va23cEBDwJKmmkzouT+NyCRoGEU6AdJCuSjhEZlruTOsWhTIC LJ69en0LpcSxSix9mrL1CYTb53EQSpcL5uo5giCO4rCIB48ICQTcM9uRbvAyK0oKow8y T5wnmeI9aa3uho4b8BI/T55JIav+6MB6/mgbOwLWlgJ1jPqi/LK8aw7o4JL0DnQpCAVJ vttg== X-RZG-AUTH: ":L2QefEenb+UdBJSdRCXu93KJ1bmSGnhMdmOod1DhGM4l4Hio94KKxRySfLxnHfJ+Dkjp5DdBJSrwuuqxvPhUJhNnUaFk2zk+8cL84Q9o680Zsg==" X-RZG-CLASS-ID: mo00 Received: from [IPv6:2a02:8109:89c0:ebfc:706c:167c:ca3f:f91b] by smtp.strato.de (RZmta 44.29.0 AUTH) with ESMTPSA id q007c8vABCMtUJo (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA)) (Client did not present a certificate); Mon, 11 Nov 2019 13:22:55 +0100 (CET) Subject: Re: Bug 205201 - overflow of DMA mask and bus mask From: Christian Zigotzky To: Christoph Hellwig Cc: linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, iommu@lists.linux-foundation.org, Benjamin Herrenschmidt , paulus@samba.org, darren@stevens-zone.net, "contact@a-eon.com" , rtd2@xtra.co.nz, mad skateman , Rob Herring , linuxppc-dev , nsaenzjulienne@suse.de References: <20181213112511.GA4574@lst.de> <008c981e-bdd2-21a7-f5f7-c57e4850ae9a@xenosoft.de> <20190103073622.GA24323@lst.de> <71A251A5-FA06-4019-B324-7AED32F7B714@xenosoft.de> <1b0c5c21-2761-d3a3-651b-3687bb6ae694@xenosoft.de> <3504ee70-02de-049e-6402-2d530bf55a84@xenosoft.de> <46025f1b-db20-ac23-7dcd-10bc43bbb6ee@xenosoft.de> <20191105162856.GA15402@lst.de> <2f3c81bd-d498-066a-12c0-0a7715cda18f@xenosoft.de> <0c5a8009-d28b-601f-3d1a-9de0e869911c@xenosoft.de> Message-ID: Date: Mon, 11 Nov 2019 13:22:55 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1 MIME-Version: 1.0 In-Reply-To: <0c5a8009-d28b-601f-3d1a-9de0e869911c@xenosoft.de> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: de-DE Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11 November 2019 at 09:16 am, Christian Zigotzky wrote: > On 11 November 2019 at 09:12 am, Christian Zigotzky wrote: >> On 10 November 2019 at 08:27 am, Christian Zigotzky wrote: >>> On 07 November 2019 at 10:53 am, Christian Zigotzky wrote: >>>> On 05 November 2019 at 05:28 pm, Christoph Hellwig wrote: >>>>> On Tue, Nov 05, 2019 at 08:56:27AM +0100, Christian Zigotzky wrote: >>>>>> Hi All, >>>>>> >>>>>> We still have DMA problems with some PCI devices. Since the >>>>>> PowerPC updates >>>>>> 4.21-1 [1] we need to decrease the RAM to 3500MB (mem=3500M) if >>>>>> we want to >>>>>> work with our PCI devices. The FSL P5020 and P5040 have these >>>>>> problems >>>>>> currently. >>>>>> >>>>>> Error message: >>>>>> >>>>>> [   25.654852] bttv 1000:04:05.0: overflow >>>>>> 0x00000000fe077000+4096 of DMA >>>>>> mask ffffffff bus mask df000000 >>>>>> >>>>>> All 5.x Linux kernels can't initialize a SCSI PCI card anymore so >>>>>> booting >>>>>> of a Linux userland isn't possible. >>>>>> >>>>>> PLEASE check the DMA changes in the PowerPC updates 4.21-1 [1]. >>>>>> The kernel >>>>>> 4.20 works with all PCI devices without limitation of RAM. >>>>> Can you send me the .config and a dmesg?  And in the meantime try the >>>>> patch below? >>>>> >>>>> --- >>>>> >From 4d659b7311bd4141fdd3eeeb80fa2d7602ea01d4 Mon Sep 17 00:00:00 >>>>> 2001 >>>>> From: Nicolas Saenz Julienne >>>>> Date: Fri, 18 Oct 2019 13:00:43 +0200 >>>>> Subject: dma-direct: check for overflows on 32 bit DMA addresses >>>>> >>>>> As seen on the new Raspberry Pi 4 and sta2x11's DMA implementation >>>>> it is >>>>> possible for a device configured with 32 bit DMA addresses and a >>>>> partial >>>>> DMA mapping located at the end of the address space to overflow. It >>>>> happens when a higher physical address, not DMAable, is translated to >>>>> it's DMA counterpart. >>>>> >>>>> For example the Raspberry Pi 4, configurable up to 4 GB of memory, >>>>> has >>>>> an interconnect capable of addressing the lower 1 GB of physical >>>>> memory >>>>> with a DMA offset of 0xc0000000. It transpires that, any attempt to >>>>> translate physical addresses higher than the first GB will result >>>>> in an >>>>> overflow which dma_capable() can't detect as it only checks for >>>>> addresses bigger then the maximum allowed DMA address. >>>>> >>>>> Fix this by verifying in dma_capable() if the DMA address range >>>>> provided >>>>> is at any point lower than the minimum possible DMA address on the >>>>> bus. >>>>> >>>>> Signed-off-by: Nicolas Saenz Julienne >>>>> --- >>>>>   include/linux/dma-direct.h | 8 ++++++++ >>>>>   1 file changed, 8 insertions(+) >>>>> >>>>> diff --git a/include/linux/dma-direct.h b/include/linux/dma-direct.h >>>>> index adf993a3bd58..6ad9e9ea7564 100644 >>>>> --- a/include/linux/dma-direct.h >>>>> +++ b/include/linux/dma-direct.h >>>>> @@ -3,6 +3,7 @@ >>>>>   #define _LINUX_DMA_DIRECT_H 1 >>>>>     #include >>>>> +#include /* for min_low_pfn */ >>>>>   #include >>>>>     #ifdef CONFIG_ARCH_HAS_PHYS_TO_DMA >>>>> @@ -27,6 +28,13 @@ static inline bool dma_capable(struct device >>>>> *dev, dma_addr_t addr, size_t size) >>>>>       if (!dev->dma_mask) >>>>>           return false; >>>>>   +#ifndef CONFIG_ARCH_DMA_ADDR_T_64BIT >>>>> +    /* Check if DMA address overflowed */ >>>>> +    if (min(addr, addr + size - 1) < >>>>> +        __phys_to_dma(dev, (phys_addr_t)(min_low_pfn << >>>>> PAGE_SHIFT))) >>>>> +        return false; >>>>> +#endif >>>>> + >>>>>       return addr + size - 1 <= >>>>>           min_not_zero(*dev->dma_mask, dev->bus_dma_mask); >>>>>   } >>>> Hello Christoph, >>>> >>>> Thanks a lot for your patch! Unfortunately this patch doesn't solve >>>> the issue. >>>> >>>> Error messages: >>>> >>>> [    6.041163] bttv: driver version 0.9.19 loaded >>>> [    6.041167] bttv: using 8 buffers with 2080k (520 pages) each >>>> for capture >>>> [    6.041559] bttv: Bt8xx card found (0) >>>> [    6.041609] bttv: 0: Bt878 (rev 17) at 1000:04:05.0, irq: 19, >>>> latency: 128, mmio: 0xc20001000 >>>> [    6.041622] bttv: 0: using: Typhoon TView RDS + FM Stereo / KNC1 >>>> TV Station RDS [card=53,insmod option] >>>> [    6.042216] bttv: 0: tuner type=5 >>>> [    6.111994] bttv: 0: audio absent, no audio device found! >>>> [    6.176425] bttv: 0: Setting PLL: 28636363 => 35468950 (needs up >>>> to 100ms) >>>> [    6.200005] bttv: PLL set ok >>>> [    6.209351] bttv: 0: registered device video0 >>>> [    6.211576] bttv: 0: registered device vbi0 >>>> [    6.214897] bttv: 0: registered device radio0 >>>> [  114.218806] bttv 1000:04:05.0: overflow 0x00000000ff507000+4096 >>>> of DMA mask ffffffff bus mask df000000 >>>> [  114.218848] Modules linked in: rfcomm bnep tuner_simple >>>> tuner_types tea5767 tuner tda7432 tvaudio msp3400 bttv tea575x >>>> tveeprom videobuf_dma_sg videobuf_core rc_core videodev mc btusb >>>> btrtl btbcm btintel bluetooth uio_pdrv_genirq uio ecdh_generic ecc >>>> [  114.219012] [c0000001ecddf720] [80000000008ff6e8] >>>> .buffer_prepare+0x150/0x268 [bttv] >>>> [  114.219029] [c0000001ecddf860] [80000000008fff6c] >>>> .bttv_qbuf+0x50/0x64 [bttv] >>>> >>>> ----- >>>> >>>> Trace: >>>> >>>> [  462.783184] Call Trace: >>>> [  462.783187] [c0000001c6c67420] [c0000000000b3358] >>>> .report_addr+0xb8/0xc0 (unreliable) >>>> [  462.783192] [c0000001c6c67490] [c0000000000b351c] >>>> .dma_direct_map_page+0xf0/0x128 >>>> [  462.783195] [c0000001c6c67530] [c0000000000b35b0] >>>> .dma_direct_map_sg+0x5c/0xac >>>> [  462.783205] [c0000001c6c675e0] [8000000000862e88] >>>> .__videobuf_iolock+0x660/0x6d8 [videobuf_dma_sg] >>>> [  462.783220] [c0000001c6c676b0] [8000000000854274] >>>> .videobuf_iolock+0x98/0xb4 [videobuf_core] >>>> [  462.783271] [c0000001c6c67720] [80000000008686e8] >>>> .buffer_prepare+0x150/0x268 [bttv] >>>> [  462.783276] [c0000001c6c677c0] [8000000000854afc] >>>> .videobuf_qbuf+0x2b8/0x428 [videobuf_core] >>>> [  462.783288] [c0000001c6c67860] [8000000000868f6c] >>>> .bttv_qbuf+0x50/0x64 [bttv] >>>> [  462.783383] [c0000001c6c678e0] [80000000007bf208] >>>> .v4l_qbuf+0x54/0x60 [videodev] >>>> [  462.783402] [c0000001c6c67970] [80000000007c1eac] >>>> .__video_do_ioctl+0x30c/0x3f8 [videodev] >>>> [  462.783421] [c0000001c6c67a80] [80000000007c3c08] >>>> .video_usercopy+0x18c/0x3dc [videodev] >>>> [  462.783440] [c0000001c6c67c00] [80000000007bb14c] >>>> .v4l2_ioctl+0x60/0x78 [videodev] >>>> [  462.783460] [c0000001c6c67c90] [80000000007d3c48] >>>> .v4l2_compat_ioctl32+0x9b4/0x1850 [videodev] >>>> [  462.783468] [c0000001c6c67d70] [c0000000001ad9cc] >>>> .__se_compat_sys_ioctl+0x284/0x127c >>>> [  462.783473] [c0000001c6c67e20] [c00000000000067c] >>>> system_call+0x60/0x6c >>>> [  462.783475] Instruction dump: >>>> [  462.783477] 40fe0044 60000000 892255d0 2f890000 40fe0020 >>>> 3c82ffc5 39200001 60000000 >>>> [  462.783483] 38842029 992255d0 485ad0d9 60000000 <0fe00000> >>>> 38210070 e8010010 7c0803a6 >>>> [  462.783490] ---[ end trace b677d4a00458e277 ]--- >>>> >>>> ----- >>>> >>>> dmesg fsl p5040: https://bugzilla.kernel.org/attachment.cgi?id=285813 >>>> >>>> Kernel 5.4-rc6 config for the Cyrus+ board and for the QEMU ppce500 >>>> board (CPU: P5040 and P5020): >>>> https://bugzilla.kernel.org/attachment.cgi?id=285815 >>>> >>>> Bug report: https://bugzilla.kernel.org/show_bug.cgi?id=205201 >>>> >>>> Thanks for your help, >>>> >>>> Christian >>> >>> Christoph, >>> >>> Do you have another patch for testing or shall I bisect? >>> >>> Thanks, >>> Christian >> >> Hi Christoph, >> >> I have seen that I have activated the kernel config option >> CONFIG_ARCH_DMA_ADDR_T_64BIT. That means your code in your patch >> won't work if this kernel option is enabled. >> >> +#ifndef CONFIG_ARCH_DMA_ADDR_T_64BIT >> +    /* Check if DMA address overflowed */ >> +    if (min(addr, addr + size - 1) < >> +        __phys_to_dma(dev, (phys_addr_t)(min_low_pfn << PAGE_SHIFT))) >> +        return false; >> +#endif >> >> I will delete the lines with ifndef and endif and will try it again. >> >> Cheers, >> Christian > > Christoph, > > I have seen that the patch above isn't from you. It's from Nicolas > Saenz Julienne. > > Cheers, > Christian Christoph, Now, I can definitely say that this patch does not solve the issue. Do you have another patch for testing or shall I bisect? Thanks, Christian 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=-8.1 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=unavailable 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 312A9C43331 for ; Mon, 11 Nov 2019 12:27:20 +0000 (UTC) Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (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 521E52190F for ; Mon, 11 Nov 2019 12:27:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=xenosoft.de header.i=@xenosoft.de header.b="mXUGuVHv" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 521E52190F Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=xenosoft.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Received: from bilbo.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 47BVW74rVhzF4fL for ; Mon, 11 Nov 2019 23:27:15 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.helo=mo6-p01-ob.smtp.rzone.de (client-ip=2a01:238:20a:202:5301::11; helo=mo6-p01-ob.smtp.rzone.de; envelope-from=chzigotzky@xenosoft.de; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=none (p=none dis=none) header.from=xenosoft.de Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=xenosoft.de header.i=@xenosoft.de header.b="mXUGuVHv"; dkim-atps=neutral Received: from mo6-p01-ob.smtp.rzone.de (mo6-p01-ob.smtp.rzone.de [IPv6:2a01:238:20a:202:5301::11]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 47BVR71lDjzF0RF for ; Mon, 11 Nov 2019 23:23:46 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1573475019; s=strato-dkim-0002; d=xenosoft.de; h=In-Reply-To:Date:Message-ID:References:Cc:To:From:Subject: X-RZG-CLASS-ID:X-RZG-AUTH:From:Subject:Sender; bh=0btYE6YH7zy4vfCP4cntmQHWXt7IT1edhwGn9XkpfDE=; b=mXUGuVHvT2sNVLs8LldePvL96xEr6h7degR/1iCZNCF/9W4P30vOMn/6GiGsmBCcU4 Tz64Kv7LcagxWES4gARIiVi51mhqkaZUE20aIVJZCojrAZeaEQ8NLQKVmapOvVKPl4yq b02CFT2PzcciWahJtumkDUqekOG5vbM7T8cGqfD4qbQ4YBuH10zKbPGbQSngt51UyXpR YH3BRnOnEfxNP5Nrzmqs7cll/v/8DOK7wy4ztjauCIPExFdKgA8Fkn0JLzq8UXjIuRBr 7iCQ++P2QW7nZNxB3vmEOpE+CzFJ8sfqT5FWBQIZ7SEh10hGslaWJskW0WEi5sg+ve77 rIMA== X-RZG-AUTH: ":L2QefEenb+UdBJSdRCXu93KJ1bmSGnhMdmOod1DhGM4l4Hio94KKxRySfLxnHfJ+Dkjp5DdBJSrwuuqxvPhUJhNnUaFk2zk+8cL84Q9o680Zsg==" X-RZG-CLASS-ID: mo00 Received: from [IPv6:2a02:8109:89c0:ebfc:706c:167c:ca3f:f91b] by smtp.strato.de (RZmta 44.29.0 AUTH) with ESMTPSA id q007c8vABCMtUJo (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA)) (Client did not present a certificate); Mon, 11 Nov 2019 13:22:55 +0100 (CET) Subject: Re: Bug 205201 - overflow of DMA mask and bus mask From: Christian Zigotzky To: Christoph Hellwig References: <20181213112511.GA4574@lst.de> <008c981e-bdd2-21a7-f5f7-c57e4850ae9a@xenosoft.de> <20190103073622.GA24323@lst.de> <71A251A5-FA06-4019-B324-7AED32F7B714@xenosoft.de> <1b0c5c21-2761-d3a3-651b-3687bb6ae694@xenosoft.de> <3504ee70-02de-049e-6402-2d530bf55a84@xenosoft.de> <46025f1b-db20-ac23-7dcd-10bc43bbb6ee@xenosoft.de> <20191105162856.GA15402@lst.de> <2f3c81bd-d498-066a-12c0-0a7715cda18f@xenosoft.de> <0c5a8009-d28b-601f-3d1a-9de0e869911c@xenosoft.de> Message-ID: Date: Mon, 11 Nov 2019 13:22:55 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1 MIME-Version: 1.0 In-Reply-To: <0c5a8009-d28b-601f-3d1a-9de0e869911c@xenosoft.de> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: de-DE X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-arch@vger.kernel.org, darren@stevens-zone.net, mad skateman , linux-kernel@vger.kernel.org, linux-mm@kvack.org, iommu@lists.linux-foundation.org, Rob Herring , paulus@samba.org, rtd2@xtra.co.nz, "contact@a-eon.com" , linuxppc-dev , nsaenzjulienne@suse.de Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" On 11 November 2019 at 09:16 am, Christian Zigotzky wrote: > On 11 November 2019 at 09:12 am, Christian Zigotzky wrote: >> On 10 November 2019 at 08:27 am, Christian Zigotzky wrote: >>> On 07 November 2019 at 10:53 am, Christian Zigotzky wrote: >>>> On 05 November 2019 at 05:28 pm, Christoph Hellwig wrote: >>>>> On Tue, Nov 05, 2019 at 08:56:27AM +0100, Christian Zigotzky wrote: >>>>>> Hi All, >>>>>> >>>>>> We still have DMA problems with some PCI devices. Since the >>>>>> PowerPC updates >>>>>> 4.21-1 [1] we need to decrease the RAM to 3500MB (mem=3500M) if >>>>>> we want to >>>>>> work with our PCI devices. The FSL P5020 and P5040 have these >>>>>> problems >>>>>> currently. >>>>>> >>>>>> Error message: >>>>>> >>>>>> [   25.654852] bttv 1000:04:05.0: overflow >>>>>> 0x00000000fe077000+4096 of DMA >>>>>> mask ffffffff bus mask df000000 >>>>>> >>>>>> All 5.x Linux kernels can't initialize a SCSI PCI card anymore so >>>>>> booting >>>>>> of a Linux userland isn't possible. >>>>>> >>>>>> PLEASE check the DMA changes in the PowerPC updates 4.21-1 [1]. >>>>>> The kernel >>>>>> 4.20 works with all PCI devices without limitation of RAM. >>>>> Can you send me the .config and a dmesg?  And in the meantime try the >>>>> patch below? >>>>> >>>>> --- >>>>> >From 4d659b7311bd4141fdd3eeeb80fa2d7602ea01d4 Mon Sep 17 00:00:00 >>>>> 2001 >>>>> From: Nicolas Saenz Julienne >>>>> Date: Fri, 18 Oct 2019 13:00:43 +0200 >>>>> Subject: dma-direct: check for overflows on 32 bit DMA addresses >>>>> >>>>> As seen on the new Raspberry Pi 4 and sta2x11's DMA implementation >>>>> it is >>>>> possible for a device configured with 32 bit DMA addresses and a >>>>> partial >>>>> DMA mapping located at the end of the address space to overflow. It >>>>> happens when a higher physical address, not DMAable, is translated to >>>>> it's DMA counterpart. >>>>> >>>>> For example the Raspberry Pi 4, configurable up to 4 GB of memory, >>>>> has >>>>> an interconnect capable of addressing the lower 1 GB of physical >>>>> memory >>>>> with a DMA offset of 0xc0000000. It transpires that, any attempt to >>>>> translate physical addresses higher than the first GB will result >>>>> in an >>>>> overflow which dma_capable() can't detect as it only checks for >>>>> addresses bigger then the maximum allowed DMA address. >>>>> >>>>> Fix this by verifying in dma_capable() if the DMA address range >>>>> provided >>>>> is at any point lower than the minimum possible DMA address on the >>>>> bus. >>>>> >>>>> Signed-off-by: Nicolas Saenz Julienne >>>>> --- >>>>>   include/linux/dma-direct.h | 8 ++++++++ >>>>>   1 file changed, 8 insertions(+) >>>>> >>>>> diff --git a/include/linux/dma-direct.h b/include/linux/dma-direct.h >>>>> index adf993a3bd58..6ad9e9ea7564 100644 >>>>> --- a/include/linux/dma-direct.h >>>>> +++ b/include/linux/dma-direct.h >>>>> @@ -3,6 +3,7 @@ >>>>>   #define _LINUX_DMA_DIRECT_H 1 >>>>>     #include >>>>> +#include /* for min_low_pfn */ >>>>>   #include >>>>>     #ifdef CONFIG_ARCH_HAS_PHYS_TO_DMA >>>>> @@ -27,6 +28,13 @@ static inline bool dma_capable(struct device >>>>> *dev, dma_addr_t addr, size_t size) >>>>>       if (!dev->dma_mask) >>>>>           return false; >>>>>   +#ifndef CONFIG_ARCH_DMA_ADDR_T_64BIT >>>>> +    /* Check if DMA address overflowed */ >>>>> +    if (min(addr, addr + size - 1) < >>>>> +        __phys_to_dma(dev, (phys_addr_t)(min_low_pfn << >>>>> PAGE_SHIFT))) >>>>> +        return false; >>>>> +#endif >>>>> + >>>>>       return addr + size - 1 <= >>>>>           min_not_zero(*dev->dma_mask, dev->bus_dma_mask); >>>>>   } >>>> Hello Christoph, >>>> >>>> Thanks a lot for your patch! Unfortunately this patch doesn't solve >>>> the issue. >>>> >>>> Error messages: >>>> >>>> [    6.041163] bttv: driver version 0.9.19 loaded >>>> [    6.041167] bttv: using 8 buffers with 2080k (520 pages) each >>>> for capture >>>> [    6.041559] bttv: Bt8xx card found (0) >>>> [    6.041609] bttv: 0: Bt878 (rev 17) at 1000:04:05.0, irq: 19, >>>> latency: 128, mmio: 0xc20001000 >>>> [    6.041622] bttv: 0: using: Typhoon TView RDS + FM Stereo / KNC1 >>>> TV Station RDS [card=53,insmod option] >>>> [    6.042216] bttv: 0: tuner type=5 >>>> [    6.111994] bttv: 0: audio absent, no audio device found! >>>> [    6.176425] bttv: 0: Setting PLL: 28636363 => 35468950 (needs up >>>> to 100ms) >>>> [    6.200005] bttv: PLL set ok >>>> [    6.209351] bttv: 0: registered device video0 >>>> [    6.211576] bttv: 0: registered device vbi0 >>>> [    6.214897] bttv: 0: registered device radio0 >>>> [  114.218806] bttv 1000:04:05.0: overflow 0x00000000ff507000+4096 >>>> of DMA mask ffffffff bus mask df000000 >>>> [  114.218848] Modules linked in: rfcomm bnep tuner_simple >>>> tuner_types tea5767 tuner tda7432 tvaudio msp3400 bttv tea575x >>>> tveeprom videobuf_dma_sg videobuf_core rc_core videodev mc btusb >>>> btrtl btbcm btintel bluetooth uio_pdrv_genirq uio ecdh_generic ecc >>>> [  114.219012] [c0000001ecddf720] [80000000008ff6e8] >>>> .buffer_prepare+0x150/0x268 [bttv] >>>> [  114.219029] [c0000001ecddf860] [80000000008fff6c] >>>> .bttv_qbuf+0x50/0x64 [bttv] >>>> >>>> ----- >>>> >>>> Trace: >>>> >>>> [  462.783184] Call Trace: >>>> [  462.783187] [c0000001c6c67420] [c0000000000b3358] >>>> .report_addr+0xb8/0xc0 (unreliable) >>>> [  462.783192] [c0000001c6c67490] [c0000000000b351c] >>>> .dma_direct_map_page+0xf0/0x128 >>>> [  462.783195] [c0000001c6c67530] [c0000000000b35b0] >>>> .dma_direct_map_sg+0x5c/0xac >>>> [  462.783205] [c0000001c6c675e0] [8000000000862e88] >>>> .__videobuf_iolock+0x660/0x6d8 [videobuf_dma_sg] >>>> [  462.783220] [c0000001c6c676b0] [8000000000854274] >>>> .videobuf_iolock+0x98/0xb4 [videobuf_core] >>>> [  462.783271] [c0000001c6c67720] [80000000008686e8] >>>> .buffer_prepare+0x150/0x268 [bttv] >>>> [  462.783276] [c0000001c6c677c0] [8000000000854afc] >>>> .videobuf_qbuf+0x2b8/0x428 [videobuf_core] >>>> [  462.783288] [c0000001c6c67860] [8000000000868f6c] >>>> .bttv_qbuf+0x50/0x64 [bttv] >>>> [  462.783383] [c0000001c6c678e0] [80000000007bf208] >>>> .v4l_qbuf+0x54/0x60 [videodev] >>>> [  462.783402] [c0000001c6c67970] [80000000007c1eac] >>>> .__video_do_ioctl+0x30c/0x3f8 [videodev] >>>> [  462.783421] [c0000001c6c67a80] [80000000007c3c08] >>>> .video_usercopy+0x18c/0x3dc [videodev] >>>> [  462.783440] [c0000001c6c67c00] [80000000007bb14c] >>>> .v4l2_ioctl+0x60/0x78 [videodev] >>>> [  462.783460] [c0000001c6c67c90] [80000000007d3c48] >>>> .v4l2_compat_ioctl32+0x9b4/0x1850 [videodev] >>>> [  462.783468] [c0000001c6c67d70] [c0000000001ad9cc] >>>> .__se_compat_sys_ioctl+0x284/0x127c >>>> [  462.783473] [c0000001c6c67e20] [c00000000000067c] >>>> system_call+0x60/0x6c >>>> [  462.783475] Instruction dump: >>>> [  462.783477] 40fe0044 60000000 892255d0 2f890000 40fe0020 >>>> 3c82ffc5 39200001 60000000 >>>> [  462.783483] 38842029 992255d0 485ad0d9 60000000 <0fe00000> >>>> 38210070 e8010010 7c0803a6 >>>> [  462.783490] ---[ end trace b677d4a00458e277 ]--- >>>> >>>> ----- >>>> >>>> dmesg fsl p5040: https://bugzilla.kernel.org/attachment.cgi?id=285813 >>>> >>>> Kernel 5.4-rc6 config for the Cyrus+ board and for the QEMU ppce500 >>>> board (CPU: P5040 and P5020): >>>> https://bugzilla.kernel.org/attachment.cgi?id=285815 >>>> >>>> Bug report: https://bugzilla.kernel.org/show_bug.cgi?id=205201 >>>> >>>> Thanks for your help, >>>> >>>> Christian >>> >>> Christoph, >>> >>> Do you have another patch for testing or shall I bisect? >>> >>> Thanks, >>> Christian >> >> Hi Christoph, >> >> I have seen that I have activated the kernel config option >> CONFIG_ARCH_DMA_ADDR_T_64BIT. That means your code in your patch >> won't work if this kernel option is enabled. >> >> +#ifndef CONFIG_ARCH_DMA_ADDR_T_64BIT >> +    /* Check if DMA address overflowed */ >> +    if (min(addr, addr + size - 1) < >> +        __phys_to_dma(dev, (phys_addr_t)(min_low_pfn << PAGE_SHIFT))) >> +        return false; >> +#endif >> >> I will delete the lines with ifndef and endif and will try it again. >> >> Cheers, >> Christian > > Christoph, > > I have seen that the patch above isn't from you. It's from Nicolas > Saenz Julienne. > > Cheers, > Christian Christoph, Now, I can definitely say that this patch does not solve the issue. Do you have another patch for testing or shall I bisect? Thanks, Christian 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=-8.1 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 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 635CDC43331 for ; Mon, 11 Nov 2019 12:23:13 +0000 (UTC) Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (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 27ABD214DB for ; Mon, 11 Nov 2019 12:23:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=xenosoft.de header.i=@xenosoft.de header.b="bx+HN4XR" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 27ABD214DB Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=xenosoft.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id CB4F9ACD; Mon, 11 Nov 2019 12:23:12 +0000 (UTC) Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 4AD03A95 for ; Mon, 11 Nov 2019 12:23:11 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mo4-p01-ob.smtp.rzone.de (mo4-p01-ob.smtp.rzone.de [85.215.255.50]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 465F08AE for ; Mon, 11 Nov 2019 12:23:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1573474988; s=strato-dkim-0002; d=xenosoft.de; h=In-Reply-To:Date:Message-ID:References:Cc:To:From:Subject: X-RZG-CLASS-ID:X-RZG-AUTH:From:Subject:Sender; bh=0btYE6YH7zy4vfCP4cntmQHWXt7IT1edhwGn9XkpfDE=; b=bx+HN4XR91TTB+HwyrZu8pYNtmNkG7y6aPf5XlvxHrXSbwSRvdi8k2x6mI3zaBlGBi L0u8b/evMoW0OU1A3q+x8uxy04ma3XMf1WpP2+MRaGsLppvuMag17wLbIabkRyBG/DXE ZZP7hOm61a/ytQ5ONpNpAw//aKOhRdcMIhPE4/cLc2L+VnEVzmYxuJJhrOw1+s+c+Pnn kjBsByLvkfb4I/REiFkV6+w0s6EjaYty6r5vt2L9J5MGK0BWidqV4aE9QnhUL/8jZhMJ Gx2JsRKwvp3yhU8kq9FRPL9GWzChpyXRvmM0yPKICF2rTvOKaKRaeDb8z6rxsoUQ/BmE WzRQ== X-RZG-AUTH: ":L2QefEenb+UdBJSdRCXu93KJ1bmSGnhMdmOod1DhGM4l4Hio94KKxRySfLxnHfJ+Dkjp5DdBJSrwuuqxvPhUJhNnUaFk2zk+8cL84Q9o680Zsg==" X-RZG-CLASS-ID: mo00 Received: from [IPv6:2a02:8109:89c0:ebfc:706c:167c:ca3f:f91b] by smtp.strato.de (RZmta 44.29.0 AUTH) with ESMTPSA id q007c8vABCMtUJo (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA)) (Client did not present a certificate); Mon, 11 Nov 2019 13:22:55 +0100 (CET) Subject: Re: Bug 205201 - overflow of DMA mask and bus mask From: Christian Zigotzky To: Christoph Hellwig References: <20181213112511.GA4574@lst.de> <008c981e-bdd2-21a7-f5f7-c57e4850ae9a@xenosoft.de> <20190103073622.GA24323@lst.de> <71A251A5-FA06-4019-B324-7AED32F7B714@xenosoft.de> <1b0c5c21-2761-d3a3-651b-3687bb6ae694@xenosoft.de> <3504ee70-02de-049e-6402-2d530bf55a84@xenosoft.de> <46025f1b-db20-ac23-7dcd-10bc43bbb6ee@xenosoft.de> <20191105162856.GA15402@lst.de> <2f3c81bd-d498-066a-12c0-0a7715cda18f@xenosoft.de> <0c5a8009-d28b-601f-3d1a-9de0e869911c@xenosoft.de> Message-ID: Date: Mon, 11 Nov 2019 13:22:55 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1 MIME-Version: 1.0 In-Reply-To: <0c5a8009-d28b-601f-3d1a-9de0e869911c@xenosoft.de> Content-Language: de-DE Cc: linux-arch@vger.kernel.org, darren@stevens-zone.net, mad skateman , Benjamin Herrenschmidt , linux-kernel@vger.kernel.org, linux-mm@kvack.org, iommu@lists.linux-foundation.org, Rob Herring , paulus@samba.org, rtd2@xtra.co.nz, "contact@a-eon.com" , linuxppc-dev , nsaenzjulienne@suse.de X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: iommu-bounces@lists.linux-foundation.org Errors-To: iommu-bounces@lists.linux-foundation.org T24gMTEgTm92ZW1iZXIgMjAxOSBhdCAwOToxNiBhbSwgQ2hyaXN0aWFuIFppZ290emt5IHdyb3Rl Ogo+IE9uIDExIE5vdmVtYmVyIDIwMTkgYXQgMDk6MTIgYW0sIENocmlzdGlhbiBaaWdvdHpreSB3 cm90ZToKPj4gT24gMTAgTm92ZW1iZXIgMjAxOSBhdCAwODoyNyBhbSwgQ2hyaXN0aWFuIFppZ290 emt5IHdyb3RlOgo+Pj4gT24gMDcgTm92ZW1iZXIgMjAxOSBhdCAxMDo1MyBhbSwgQ2hyaXN0aWFu IFppZ290emt5IHdyb3RlOgo+Pj4+IE9uIDA1IE5vdmVtYmVyIDIwMTkgYXQgMDU6MjggcG0sIENo cmlzdG9waCBIZWxsd2lnIHdyb3RlOgo+Pj4+PiBPbiBUdWUsIE5vdiAwNSwgMjAxOSBhdCAwODo1 NjoyN0FNICswMTAwLCBDaHJpc3RpYW4gWmlnb3R6a3kgd3JvdGU6Cj4+Pj4+PiBIaSBBbGwsCj4+ Pj4+Pgo+Pj4+Pj4gV2Ugc3RpbGwgaGF2ZSBETUEgcHJvYmxlbXMgd2l0aCBzb21lIFBDSSBkZXZp Y2VzLiBTaW5jZSB0aGUgCj4+Pj4+PiBQb3dlclBDIHVwZGF0ZXMKPj4+Pj4+IDQuMjEtMSBbMV0g d2UgbmVlZCB0byBkZWNyZWFzZSB0aGUgUkFNIHRvIDM1MDBNQiAobWVtPTM1MDBNKSBpZiAKPj4+ Pj4+IHdlIHdhbnQgdG8KPj4+Pj4+IHdvcmsgd2l0aCBvdXIgUENJIGRldmljZXMuIFRoZSBGU0wg UDUwMjAgYW5kIFA1MDQwIGhhdmUgdGhlc2UgCj4+Pj4+PiBwcm9ibGVtcwo+Pj4+Pj4gY3VycmVu dGx5Lgo+Pj4+Pj4KPj4+Pj4+IEVycm9yIG1lc3NhZ2U6Cj4+Pj4+Pgo+Pj4+Pj4gW8KgwqAgMjUu NjU0ODUyXSBidHR2IDEwMDA6MDQ6MDUuMDogb3ZlcmZsb3cgCj4+Pj4+PiAweDAwMDAwMDAwZmUw NzcwMDArNDA5NiBvZiBETUEKPj4+Pj4+IG1hc2sgZmZmZmZmZmYgYnVzIG1hc2sgZGYwMDAwMDAK Pj4+Pj4+Cj4+Pj4+PiBBbGwgNS54IExpbnV4IGtlcm5lbHMgY2FuJ3QgaW5pdGlhbGl6ZSBhIFND U0kgUENJIGNhcmQgYW55bW9yZSBzbyAKPj4+Pj4+IGJvb3RpbmcKPj4+Pj4+IG9mIGEgTGludXgg dXNlcmxhbmQgaXNuJ3QgcG9zc2libGUuCj4+Pj4+Pgo+Pj4+Pj4gUExFQVNFIGNoZWNrIHRoZSBE TUEgY2hhbmdlcyBpbiB0aGUgUG93ZXJQQyB1cGRhdGVzIDQuMjEtMSBbMV0uIAo+Pj4+Pj4gVGhl IGtlcm5lbAo+Pj4+Pj4gNC4yMCB3b3JrcyB3aXRoIGFsbCBQQ0kgZGV2aWNlcyB3aXRob3V0IGxp bWl0YXRpb24gb2YgUkFNLgo+Pj4+PiBDYW4geW91IHNlbmQgbWUgdGhlIC5jb25maWcgYW5kIGEg ZG1lc2c/wqAgQW5kIGluIHRoZSBtZWFudGltZSB0cnkgdGhlCj4+Pj4+IHBhdGNoIGJlbG93Pwo+ Pj4+Pgo+Pj4+PiAtLS0KPj4+Pj4gPkZyb20gNGQ2NTliNzMxMWJkNDE0MWZkZDNlZWViODBmYTJk NzYwMmVhMDFkNCBNb24gU2VwIDE3IDAwOjAwOjAwIAo+Pj4+PiAyMDAxCj4+Pj4+IEZyb206IE5p Y29sYXMgU2FlbnogSnVsaWVubmUgPG5zYWVuemp1bGllbm5lQHN1c2UuZGU+Cj4+Pj4+IERhdGU6 IEZyaSwgMTggT2N0IDIwMTkgMTM6MDA6NDMgKzAyMDAKPj4+Pj4gU3ViamVjdDogZG1hLWRpcmVj dDogY2hlY2sgZm9yIG92ZXJmbG93cyBvbiAzMiBiaXQgRE1BIGFkZHJlc3Nlcwo+Pj4+Pgo+Pj4+ PiBBcyBzZWVuIG9uIHRoZSBuZXcgUmFzcGJlcnJ5IFBpIDQgYW5kIHN0YTJ4MTEncyBETUEgaW1w bGVtZW50YXRpb24gCj4+Pj4+IGl0IGlzCj4+Pj4+IHBvc3NpYmxlIGZvciBhIGRldmljZSBjb25m aWd1cmVkIHdpdGggMzIgYml0IERNQSBhZGRyZXNzZXMgYW5kIGEgCj4+Pj4+IHBhcnRpYWwKPj4+ Pj4gRE1BIG1hcHBpbmcgbG9jYXRlZCBhdCB0aGUgZW5kIG9mIHRoZSBhZGRyZXNzIHNwYWNlIHRv IG92ZXJmbG93LiBJdAo+Pj4+PiBoYXBwZW5zIHdoZW4gYSBoaWdoZXIgcGh5c2ljYWwgYWRkcmVz cywgbm90IERNQWFibGUsIGlzIHRyYW5zbGF0ZWQgdG8KPj4+Pj4gaXQncyBETUEgY291bnRlcnBh cnQuCj4+Pj4+Cj4+Pj4+IEZvciBleGFtcGxlIHRoZSBSYXNwYmVycnkgUGkgNCwgY29uZmlndXJh YmxlIHVwIHRvIDQgR0Igb2YgbWVtb3J5LCAKPj4+Pj4gaGFzCj4+Pj4+IGFuIGludGVyY29ubmVj dCBjYXBhYmxlIG9mIGFkZHJlc3NpbmcgdGhlIGxvd2VyIDEgR0Igb2YgcGh5c2ljYWwgCj4+Pj4+ IG1lbW9yeQo+Pj4+PiB3aXRoIGEgRE1BIG9mZnNldCBvZiAweGMwMDAwMDAwLiBJdCB0cmFuc3Bp cmVzIHRoYXQsIGFueSBhdHRlbXB0IHRvCj4+Pj4+IHRyYW5zbGF0ZSBwaHlzaWNhbCBhZGRyZXNz ZXMgaGlnaGVyIHRoYW4gdGhlIGZpcnN0IEdCIHdpbGwgcmVzdWx0IAo+Pj4+PiBpbiBhbgo+Pj4+ PiBvdmVyZmxvdyB3aGljaCBkbWFfY2FwYWJsZSgpIGNhbid0IGRldGVjdCBhcyBpdCBvbmx5IGNo ZWNrcyBmb3IKPj4+Pj4gYWRkcmVzc2VzIGJpZ2dlciB0aGVuIHRoZSBtYXhpbXVtIGFsbG93ZWQg RE1BIGFkZHJlc3MuCj4+Pj4+Cj4+Pj4+IEZpeCB0aGlzIGJ5IHZlcmlmeWluZyBpbiBkbWFfY2Fw YWJsZSgpIGlmIHRoZSBETUEgYWRkcmVzcyByYW5nZSAKPj4+Pj4gcHJvdmlkZWQKPj4+Pj4gaXMg YXQgYW55IHBvaW50IGxvd2VyIHRoYW4gdGhlIG1pbmltdW0gcG9zc2libGUgRE1BIGFkZHJlc3Mg b24gdGhlIAo+Pj4+PiBidXMuCj4+Pj4+Cj4+Pj4+IFNpZ25lZC1vZmYtYnk6IE5pY29sYXMgU2Fl bnogSnVsaWVubmUgPG5zYWVuemp1bGllbm5lQHN1c2UuZGU+Cj4+Pj4+IC0tLQo+Pj4+PiDCoCBp bmNsdWRlL2xpbnV4L2RtYS1kaXJlY3QuaCB8IDggKysrKysrKysKPj4+Pj4gwqAgMSBmaWxlIGNo YW5nZWQsIDggaW5zZXJ0aW9ucygrKQo+Pj4+Pgo+Pj4+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9s aW51eC9kbWEtZGlyZWN0LmggYi9pbmNsdWRlL2xpbnV4L2RtYS1kaXJlY3QuaAo+Pj4+PiBpbmRl eCBhZGY5OTNhM2JkNTguLjZhZDllOWVhNzU2NCAxMDA2NDQKPj4+Pj4gLS0tIGEvaW5jbHVkZS9s aW51eC9kbWEtZGlyZWN0LmgKPj4+Pj4gKysrIGIvaW5jbHVkZS9saW51eC9kbWEtZGlyZWN0LmgK Pj4+Pj4gQEAgLTMsNiArMyw3IEBACj4+Pj4+IMKgICNkZWZpbmUgX0xJTlVYX0RNQV9ESVJFQ1Rf SCAxCj4+Pj4+IMKgIMKgICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgo+Pj4+PiArI2lu Y2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+IC8qIGZvciBtaW5fbG93X3BmbiAqLwo+Pj4+PiDCoCAj aW5jbHVkZSA8bGludXgvbWVtX2VuY3J5cHQuaD4KPj4+Pj4gwqAgwqAgI2lmZGVmIENPTkZJR19B UkNIX0hBU19QSFlTX1RPX0RNQQo+Pj4+PiBAQCAtMjcsNiArMjgsMTMgQEAgc3RhdGljIGlubGlu ZSBib29sIGRtYV9jYXBhYmxlKHN0cnVjdCBkZXZpY2UgCj4+Pj4+ICpkZXYsIGRtYV9hZGRyX3Qg YWRkciwgc2l6ZV90IHNpemUpCj4+Pj4+IMKgwqDCoMKgwqAgaWYgKCFkZXYtPmRtYV9tYXNrKQo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGZhbHNlOwo+Pj4+PiDCoCArI2lmbmRlZiBD T05GSUdfQVJDSF9ETUFfQUREUl9UXzY0QklUCj4+Pj4+ICvCoMKgwqAgLyogQ2hlY2sgaWYgRE1B IGFkZHJlc3Mgb3ZlcmZsb3dlZCAqLwo+Pj4+PiArwqDCoMKgIGlmIChtaW4oYWRkciwgYWRkciAr IHNpemUgLSAxKSA8Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBfX3BoeXNfdG9fZG1hKGRldiwgKHBo eXNfYWRkcl90KShtaW5fbG93X3BmbiA8PCAKPj4+Pj4gUEFHRV9TSElGVCkpKQo+Pj4+PiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIGZhbHNlOwo+Pj4+PiArI2VuZGlmCj4+Pj4+ICsKPj4+Pj4gwqDC oMKgwqDCoCByZXR1cm4gYWRkciArIHNpemUgLSAxIDw9Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDC oCBtaW5fbm90X3plcm8oKmRldi0+ZG1hX21hc2ssIGRldi0+YnVzX2RtYV9tYXNrKTsKPj4+Pj4g wqAgfQo+Pj4+IEhlbGxvIENocmlzdG9waCwKPj4+Pgo+Pj4+IFRoYW5rcyBhIGxvdCBmb3IgeW91 ciBwYXRjaCEgVW5mb3J0dW5hdGVseSB0aGlzIHBhdGNoIGRvZXNuJ3Qgc29sdmUgCj4+Pj4gdGhl IGlzc3VlLgo+Pj4+Cj4+Pj4gRXJyb3IgbWVzc2FnZXM6Cj4+Pj4KPj4+PiBbwqDCoMKgIDYuMDQx MTYzXSBidHR2OiBkcml2ZXIgdmVyc2lvbiAwLjkuMTkgbG9hZGVkCj4+Pj4gW8KgwqDCoCA2LjA0 MTE2N10gYnR0djogdXNpbmcgOCBidWZmZXJzIHdpdGggMjA4MGsgKDUyMCBwYWdlcykgZWFjaCAK Pj4+PiBmb3IgY2FwdHVyZQo+Pj4+IFvCoMKgwqAgNi4wNDE1NTldIGJ0dHY6IEJ0OHh4IGNhcmQg Zm91bmQgKDApCj4+Pj4gW8KgwqDCoCA2LjA0MTYwOV0gYnR0djogMDogQnQ4NzggKHJldiAxNykg YXQgMTAwMDowNDowNS4wLCBpcnE6IDE5LCAKPj4+PiBsYXRlbmN5OiAxMjgsIG1taW86IDB4YzIw MDAxMDAwCj4+Pj4gW8KgwqDCoCA2LjA0MTYyMl0gYnR0djogMDogdXNpbmc6IFR5cGhvb24gVFZp ZXcgUkRTICsgRk0gU3RlcmVvIC8gS05DMSAKPj4+PiBUViBTdGF0aW9uIFJEUyBbY2FyZD01Myxp bnNtb2Qgb3B0aW9uXQo+Pj4+IFvCoMKgwqAgNi4wNDIyMTZdIGJ0dHY6IDA6IHR1bmVyIHR5cGU9 NQo+Pj4+IFvCoMKgwqAgNi4xMTE5OTRdIGJ0dHY6IDA6IGF1ZGlvIGFic2VudCwgbm8gYXVkaW8g ZGV2aWNlIGZvdW5kIQo+Pj4+IFvCoMKgwqAgNi4xNzY0MjVdIGJ0dHY6IDA6IFNldHRpbmcgUExM OiAyODYzNjM2MyA9PiAzNTQ2ODk1MCAobmVlZHMgdXAgCj4+Pj4gdG8gMTAwbXMpCj4+Pj4gW8Kg wqDCoCA2LjIwMDAwNV0gYnR0djogUExMIHNldCBvawo+Pj4+IFvCoMKgwqAgNi4yMDkzNTFdIGJ0 dHY6IDA6IHJlZ2lzdGVyZWQgZGV2aWNlIHZpZGVvMAo+Pj4+IFvCoMKgwqAgNi4yMTE1NzZdIGJ0 dHY6IDA6IHJlZ2lzdGVyZWQgZGV2aWNlIHZiaTAKPj4+PiBbwqDCoMKgIDYuMjE0ODk3XSBidHR2 OiAwOiByZWdpc3RlcmVkIGRldmljZSByYWRpbzAKPj4+PiBbwqAgMTE0LjIxODgwNl0gYnR0diAx MDAwOjA0OjA1LjA6IG92ZXJmbG93IDB4MDAwMDAwMDBmZjUwNzAwMCs0MDk2IAo+Pj4+IG9mIERN QSBtYXNrIGZmZmZmZmZmIGJ1cyBtYXNrIGRmMDAwMDAwCj4+Pj4gW8KgIDExNC4yMTg4NDhdIE1v ZHVsZXMgbGlua2VkIGluOiByZmNvbW0gYm5lcCB0dW5lcl9zaW1wbGUgCj4+Pj4gdHVuZXJfdHlw ZXMgdGVhNTc2NyB0dW5lciB0ZGE3NDMyIHR2YXVkaW8gbXNwMzQwMCBidHR2IHRlYTU3NXggCj4+ Pj4gdHZlZXByb20gdmlkZW9idWZfZG1hX3NnIHZpZGVvYnVmX2NvcmUgcmNfY29yZSB2aWRlb2Rl diBtYyBidHVzYiAKPj4+PiBidHJ0bCBidGJjbSBidGludGVsIGJsdWV0b290aCB1aW9fcGRydl9n ZW5pcnEgdWlvIGVjZGhfZ2VuZXJpYyBlY2MKPj4+PiBbwqAgMTE0LjIxOTAxMl0gW2MwMDAwMDAx ZWNkZGY3MjBdIFs4MDAwMDAwMDAwOGZmNmU4XSAKPj4+PiAuYnVmZmVyX3ByZXBhcmUrMHgxNTAv MHgyNjggW2J0dHZdCj4+Pj4gW8KgIDExNC4yMTkwMjldIFtjMDAwMDAwMWVjZGRmODYwXSBbODAw MDAwMDAwMDhmZmY2Y10gCj4+Pj4gLmJ0dHZfcWJ1ZisweDUwLzB4NjQgW2J0dHZdCj4+Pj4KPj4+ PiAtLS0tLQo+Pj4+Cj4+Pj4gVHJhY2U6Cj4+Pj4KPj4+PiBbwqAgNDYyLjc4MzE4NF0gQ2FsbCBU cmFjZToKPj4+PiBbwqAgNDYyLjc4MzE4N10gW2MwMDAwMDAxYzZjNjc0MjBdIFtjMDAwMDAwMDAw MGIzMzU4XSAKPj4+PiAucmVwb3J0X2FkZHIrMHhiOC8weGMwICh1bnJlbGlhYmxlKQo+Pj4+IFvC oCA0NjIuNzgzMTkyXSBbYzAwMDAwMDFjNmM2NzQ5MF0gW2MwMDAwMDAwMDAwYjM1MWNdIAo+Pj4+ IC5kbWFfZGlyZWN0X21hcF9wYWdlKzB4ZjAvMHgxMjgKPj4+PiBbwqAgNDYyLjc4MzE5NV0gW2Mw MDAwMDAxYzZjNjc1MzBdIFtjMDAwMDAwMDAwMGIzNWIwXSAKPj4+PiAuZG1hX2RpcmVjdF9tYXBf c2crMHg1Yy8weGFjCj4+Pj4gW8KgIDQ2Mi43ODMyMDVdIFtjMDAwMDAwMWM2YzY3NWUwXSBbODAw MDAwMDAwMDg2MmU4OF0gCj4+Pj4gLl9fdmlkZW9idWZfaW9sb2NrKzB4NjYwLzB4NmQ4IFt2aWRl b2J1Zl9kbWFfc2ddCj4+Pj4gW8KgIDQ2Mi43ODMyMjBdIFtjMDAwMDAwMWM2YzY3NmIwXSBbODAw MDAwMDAwMDg1NDI3NF0gCj4+Pj4gLnZpZGVvYnVmX2lvbG9jaysweDk4LzB4YjQgW3ZpZGVvYnVm X2NvcmVdCj4+Pj4gW8KgIDQ2Mi43ODMyNzFdIFtjMDAwMDAwMWM2YzY3NzIwXSBbODAwMDAwMDAw MDg2ODZlOF0gCj4+Pj4gLmJ1ZmZlcl9wcmVwYXJlKzB4MTUwLzB4MjY4IFtidHR2XQo+Pj4+IFvC oCA0NjIuNzgzMjc2XSBbYzAwMDAwMDFjNmM2NzdjMF0gWzgwMDAwMDAwMDA4NTRhZmNdIAo+Pj4+ IC52aWRlb2J1Zl9xYnVmKzB4MmI4LzB4NDI4IFt2aWRlb2J1Zl9jb3JlXQo+Pj4+IFvCoCA0NjIu NzgzMjg4XSBbYzAwMDAwMDFjNmM2Nzg2MF0gWzgwMDAwMDAwMDA4NjhmNmNdIAo+Pj4+IC5idHR2 X3FidWYrMHg1MC8weDY0IFtidHR2XQo+Pj4+IFvCoCA0NjIuNzgzMzgzXSBbYzAwMDAwMDFjNmM2 NzhlMF0gWzgwMDAwMDAwMDA3YmYyMDhdIAo+Pj4+IC52NGxfcWJ1ZisweDU0LzB4NjAgW3ZpZGVv ZGV2XQo+Pj4+IFvCoCA0NjIuNzgzNDAyXSBbYzAwMDAwMDFjNmM2Nzk3MF0gWzgwMDAwMDAwMDA3 YzFlYWNdIAo+Pj4+IC5fX3ZpZGVvX2RvX2lvY3RsKzB4MzBjLzB4M2Y4IFt2aWRlb2Rldl0KPj4+ PiBbwqAgNDYyLjc4MzQyMV0gW2MwMDAwMDAxYzZjNjdhODBdIFs4MDAwMDAwMDAwN2MzYzA4XSAK Pj4+PiAudmlkZW9fdXNlcmNvcHkrMHgxOGMvMHgzZGMgW3ZpZGVvZGV2XQo+Pj4+IFvCoCA0NjIu NzgzNDQwXSBbYzAwMDAwMDFjNmM2N2MwMF0gWzgwMDAwMDAwMDA3YmIxNGNdIAo+Pj4+IC52NGwy X2lvY3RsKzB4NjAvMHg3OCBbdmlkZW9kZXZdCj4+Pj4gW8KgIDQ2Mi43ODM0NjBdIFtjMDAwMDAw MWM2YzY3YzkwXSBbODAwMDAwMDAwMDdkM2M0OF0gCj4+Pj4gLnY0bDJfY29tcGF0X2lvY3RsMzIr MHg5YjQvMHgxODUwIFt2aWRlb2Rldl0KPj4+PiBbwqAgNDYyLjc4MzQ2OF0gW2MwMDAwMDAxYzZj NjdkNzBdIFtjMDAwMDAwMDAwMWFkOWNjXSAKPj4+PiAuX19zZV9jb21wYXRfc3lzX2lvY3RsKzB4 Mjg0LzB4MTI3Ywo+Pj4+IFvCoCA0NjIuNzgzNDczXSBbYzAwMDAwMDFjNmM2N2UyMF0gW2MwMDAw MDAwMDAwMDA2N2NdIAo+Pj4+IHN5c3RlbV9jYWxsKzB4NjAvMHg2Ywo+Pj4+IFvCoCA0NjIuNzgz NDc1XSBJbnN0cnVjdGlvbiBkdW1wOgo+Pj4+IFvCoCA0NjIuNzgzNDc3XSA0MGZlMDA0NCA2MDAw MDAwMCA4OTIyNTVkMCAyZjg5MDAwMCA0MGZlMDAyMCAKPj4+PiAzYzgyZmZjNSAzOTIwMDAwMSA2 MDAwMDAwMAo+Pj4+IFvCoCA0NjIuNzgzNDgzXSAzODg0MjAyOSA5OTIyNTVkMCA0ODVhZDBkOSA2 MDAwMDAwMCA8MGZlMDAwMDA+IAo+Pj4+IDM4MjEwMDcwIGU4MDEwMDEwIDdjMDgwM2E2Cj4+Pj4g W8KgIDQ2Mi43ODM0OTBdIC0tLVsgZW5kIHRyYWNlIGI2NzdkNGEwMDQ1OGUyNzcgXS0tLQo+Pj4+ Cj4+Pj4gLS0tLS0KPj4+Pgo+Pj4+IGRtZXNnIGZzbCBwNTA0MDogaHR0cHM6Ly9idWd6aWxsYS5r ZXJuZWwub3JnL2F0dGFjaG1lbnQuY2dpP2lkPTI4NTgxMwo+Pj4+Cj4+Pj4gS2VybmVsIDUuNC1y YzYgY29uZmlnIGZvciB0aGUgQ3lydXMrIGJvYXJkIGFuZCBmb3IgdGhlIFFFTVUgcHBjZTUwMCAK Pj4+PiBib2FyZCAoQ1BVOiBQNTA0MCBhbmQgUDUwMjApOiAKPj4+PiBodHRwczovL2J1Z3ppbGxh Lmtlcm5lbC5vcmcvYXR0YWNobWVudC5jZ2k/aWQ9Mjg1ODE1Cj4+Pj4KPj4+PiBCdWcgcmVwb3J0 OiBodHRwczovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIwMQo+Pj4+ Cj4+Pj4gVGhhbmtzIGZvciB5b3VyIGhlbHAsCj4+Pj4KPj4+PiBDaHJpc3RpYW4KPj4+Cj4+PiBD aHJpc3RvcGgsCj4+Pgo+Pj4gRG8geW91IGhhdmUgYW5vdGhlciBwYXRjaCBmb3IgdGVzdGluZyBv ciBzaGFsbCBJIGJpc2VjdD8KPj4+Cj4+PiBUaGFua3MsCj4+PiBDaHJpc3RpYW4KPj4KPj4gSGkg Q2hyaXN0b3BoLAo+Pgo+PiBJIGhhdmUgc2VlbiB0aGF0IEkgaGF2ZSBhY3RpdmF0ZWQgdGhlIGtl cm5lbCBjb25maWcgb3B0aW9uIAo+PiBDT05GSUdfQVJDSF9ETUFfQUREUl9UXzY0QklULiBUaGF0 IG1lYW5zIHlvdXIgY29kZSBpbiB5b3VyIHBhdGNoIAo+PiB3b24ndCB3b3JrIGlmIHRoaXMga2Vy bmVsIG9wdGlvbiBpcyBlbmFibGVkLgo+Pgo+PiArI2lmbmRlZiBDT05GSUdfQVJDSF9ETUFfQURE Ul9UXzY0QklUCj4+ICvCoMKgwqAgLyogQ2hlY2sgaWYgRE1BIGFkZHJlc3Mgb3ZlcmZsb3dlZCAq Lwo+PiArwqDCoMKgIGlmIChtaW4oYWRkciwgYWRkciArIHNpemUgLSAxKSA8Cj4+ICvCoMKgwqDC oMKgwqDCoCBfX3BoeXNfdG9fZG1hKGRldiwgKHBoeXNfYWRkcl90KShtaW5fbG93X3BmbiA8PCBQ QUdFX1NISUZUKSkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZmFsc2U7Cj4+ICsjZW5kaWYK Pj4KPj4gSSB3aWxsIGRlbGV0ZSB0aGUgbGluZXMgd2l0aCBpZm5kZWYgYW5kIGVuZGlmIGFuZCB3 aWxsIHRyeSBpdCBhZ2Fpbi4KPj4KPj4gQ2hlZXJzLAo+PiBDaHJpc3RpYW4KPgo+IENocmlzdG9w aCwKPgo+IEkgaGF2ZSBzZWVuIHRoYXQgdGhlIHBhdGNoIGFib3ZlIGlzbid0IGZyb20geW91LiBJ dCdzIGZyb20gTmljb2xhcyAKPiBTYWVueiBKdWxpZW5uZS4KPgo+IENoZWVycywKPiBDaHJpc3Rp YW4KCkNocmlzdG9waCwKCk5vdywgSSBjYW4gZGVmaW5pdGVseSBzYXkgdGhhdCB0aGlzIHBhdGNo IGRvZXMgbm90IHNvbHZlIHRoZSBpc3N1ZS4KCkRvIHlvdSBoYXZlIGFub3RoZXIgcGF0Y2ggZm9y IHRlc3Rpbmcgb3Igc2hhbGwgSSBiaXNlY3Q/CgpUaGFua3MsCkNocmlzdGlhbgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppb21tdSBtYWlsaW5nIGxpc3QK aW9tbXVAbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5k YXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vaW9tbXU=