From patchwork Sun Jul 15 16:08:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergei Shtylyov X-Patchwork-Id: 10525077 X-Patchwork-Delegate: bhelgaas@google.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id B0676602B3 for ; Sun, 15 Jul 2018 16:08:20 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 92723288F3 for ; Sun, 15 Jul 2018 16:08:20 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8455228904; Sun, 15 Jul 2018 16:08:20 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F380C288F3 for ; Sun, 15 Jul 2018 16:08:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726455AbeGOQbn (ORCPT ); Sun, 15 Jul 2018 12:31:43 -0400 Received: from mail-lj1-f194.google.com ([209.85.208.194]:39722 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726277AbeGOQbn (ORCPT ); Sun, 15 Jul 2018 12:31:43 -0400 Received: by mail-lj1-f194.google.com with SMTP id l15-v6so7815103lji.6 for ; Sun, 15 Jul 2018 09:08:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cogentembedded-com.20150623.gappssmtp.com; s=20150623; h=subject:from:to:cc:references:organization:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=7c/cTb/A0gee6uOudBI8iEzFydXbUnP8oGM8pPLz620=; b=Fhm9P2HTObujq2nCvBw9JG0Pwjb66Q79xLByr9gf/Gi1AJFAd0jO0J3wtV7YqB5/zY uEDTI729L7DmeiluTrE6Sn1Mwi51wTpKYISSDeV2B+Sl/WaZLtrfq9RxSVEy+tTP7Z7z h6m/u+3KIZBSuRRsMeTU4gwQsEhsrDxH8h97o8kDNRiGKmkChWJ2GQ9CH4l1PNFVjwmT loPNnELPhnzIBODGJMuqSYBdAl2zxb4s6ScZby+Dlc2H+JrWOlUkW9aXqhBu3XaUwUu5 H0yhGpJlMc8A35Ip8euy8qHLZ68/7ymu4Me18FgIHgSqZoHeJiczQyZWK8rVfYsm4mQQ zGwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:organization :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=7c/cTb/A0gee6uOudBI8iEzFydXbUnP8oGM8pPLz620=; b=QnWsmghXP+b5NC6iQRkMU0wmNpAD3H/GPmlaGUxajRem15i0qks/cJFiWrZF7Qyccb 44aIosjHqbngOgvZ+ZFns4X9ypStOpb3j4rPVdNUBMivyR4XzDNZqyt6w5+XaZ9XlczT LPOxdIxGQG339Hpc2iPFHugJBahcO1wzMThvh3kl5Xx+nH/LBZ8UGpIenSA+Tm5T6+66 Sb2uP6mM0QRr8TXVKMxA/lqKRD7klRoPhqy/MGZw/kDkfUEx7XOQuEf90WmyHRkSPm5L XuUDVcfYDqV7FPthz2RlxOPGQ4T2ftdc8lcxVSgryf8rUNgULhoIsku20JDg/66lR0C9 BAyg== X-Gm-Message-State: AOUpUlHqqcaa0uHJ9Y+EEjiif6HL9rTrNzPwEr/iJO15XsonGdMO2nfc XJJRdG+wYk7uu1Hvok9/FxQMpQ== X-Google-Smtp-Source: AAOMgpedGVj3XaoGWF2h+LvVEiizLs8K2ASw4vltExVo0gbz0DIH0Mkr6pJBu0BMA+GkJP6CPKBdHA== X-Received: by 2002:a2e:534e:: with SMTP id t14-v6mr7790947ljd.26.1531670896071; Sun, 15 Jul 2018 09:08:16 -0700 (PDT) Received: from wasted.cogentembedded.com ([31.173.81.22]) by smtp.gmail.com with ESMTPSA id j7-v6sm4431897ljg.48.2018.07.15.09.08.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 15 Jul 2018 09:08:15 -0700 (PDT) Subject: [PATCH 3/8] PCI: versatile: Fix I/O space page leak From: Sergei Shtylyov To: Bjorn Helgaas , linux-pci@vger.kernel.org, Lorenzo Pieralisi , Rob Herring Cc: linux-arm-kernel@lists.infradead.org References: <3e862a05-084a-d732-3060-6e2b234e9718@cogentembedded.com> Organization: Cogent Embedded Message-ID: <6e75e0be-eee4-9a92-4d33-994ae393d2db@cogentembedded.com> Date: Sun, 15 Jul 2018 19:08:14 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: <3e862a05-084a-d732-3060-6e2b234e9718@cogentembedded.com> Content-Language: en-MW Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP When testing the R-Car PCIe driver on the Condor board, I noticed that iff I left the PCIe PHY driver disabled, the kernel crashed with this BUG: [ 1.225819] kernel BUG at lib/ioremap.c:72! [ 1.230007] Internal error: Oops - BUG: 0 [#1] PREEMPT SMP [ 1.235496] Modules linked in: [ 1.238561] CPU: 0 PID: 39 Comm: kworker/0:1 Not tainted 4.17.0-dirty #1092 [ 1.245526] Hardware name: Renesas Condor board based on r8a77980 (DT) [ 1.252075] Workqueue: events deferred_probe_work_func [ 1.257220] pstate: 80000005 (Nzcv daif -PAN -UAO) [ 1.262024] pc : ioremap_page_range+0x370/0x3c8 [ 1.266558] lr : ioremap_page_range+0x40/0x3c8 [ 1.271002] sp : ffff000008da39e0 [ 1.274317] x29: ffff000008da39e0 x28: 00e8000000000f07 [ 1.279636] x27: ffff7dfffee00000 x26: 0140000000000000 [ 1.284954] x25: ffff7dfffef00000 x24: 00000000000fe100 [ 1.290272] x23: ffff80007b906000 x22: ffff000008ab8000 [ 1.295590] x21: ffff000008bb1d58 x20: ffff7dfffef00000 [ 1.300909] x19: ffff800009c30fb8 x18: 0000000000000001 [ 1.306226] x17: 00000000000152d0 x16: 00000000014012d0 [ 1.311544] x15: 0000000000000000 x14: 0720072007200720 [ 1.316862] x13: 0720072007200720 x12: 0720072007200720 [ 1.322180] x11: 0720072007300730 x10: 00000000000000ae [ 1.327498] x9 : 0000000000000000 x8 : ffff7dffff000000 [ 1.332816] x7 : 0000000000000000 x6 : 0000000000000100 [ 1.338134] x5 : 0000000000000000 x4 : 000000007b906000 [ 1.343452] x3 : ffff80007c61a880 x2 : ffff7dfffeefffff [ 1.348770] x1 : 0000000040000000 x0 : 00e80000fe100f07 [ 1.354090] Process kworker/0:1 (pid: 39, stack limit = 0x (ptrval)) [ 1.361056] Call trace: [ 1.363504] ioremap_page_range+0x370/0x3c8 [ 1.367695] pci_remap_iospace+0x7c/0xac [ 1.371624] pci_parse_request_of_pci_ranges+0x13c/0x190 [ 1.376945] rcar_pcie_probe+0x4c/0xb04 [ 1.380786] platform_drv_probe+0x50/0xbc [ 1.384799] driver_probe_device+0x21c/0x308 [ 1.389072] __device_attach_driver+0x98/0xc8 [ 1.393431] bus_for_each_drv+0x54/0x94 [ 1.397269] __device_attach+0xc4/0x12c [ 1.401107] device_initial_probe+0x10/0x18 [ 1.405292] bus_probe_device+0x90/0x98 [ 1.409130] deferred_probe_work_func+0xb0/0x150 [ 1.413756] process_one_work+0x12c/0x29c [ 1.417768] worker_thread+0x200/0x3fc [ 1.421522] kthread+0x108/0x134 [ 1.424755] ret_from_fork+0x10/0x18 [ 1.428334] Code: f9004ba2 54000080 aa0003fb 17ffff48 (d4210000) It turned out that pci_remap_iospace() wasn't undone when the driver's probe failed, and since devm_phy_optional_get() returned -EPROBE_DEFER, the probe was retried, finally causing the BUG due to trying to remap already remapped pages. The Versatile PCIe driver has the same issue. The most feasible solution seemed to introduce devm_pci_remap_iospace() -- which was done in the XGene PCIe driver patch posted earlier... Fixes: b7e78170efd4 ("PCI: versatile: Add DT-based ARM Versatile PB PCIe host driver") Signed-off-by: Sergei Shtylyov Reviewed-by: Linus Walleij Acked-by: Bjorn Helgaas --- drivers/pci/controller/pci-versatile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: pci/drivers/pci/controller/pci-versatile.c =================================================================== --- pci.orig/drivers/pci/controller/pci-versatile.c +++ pci/drivers/pci/controller/pci-versatile.c @@ -82,7 +82,7 @@ static int versatile_pci_parse_request_o switch (resource_type(res)) { case IORESOURCE_IO: - err = pci_remap_iospace(res, iobase); + err = devm_pci_remap_iospace(dev, res, iobase); if (err) { dev_warn(dev, "error %d: failed to map resource %pR\n", err, res);