From patchwork Sun Jul 15 16:13:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergei Shtylyov X-Patchwork-Id: 10525081 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 530FF602B3 for ; Sun, 15 Jul 2018 16:13:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3446027F91 for ; Sun, 15 Jul 2018 16:13:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 269D328904; Sun, 15 Jul 2018 16:13:10 +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 A1FE927F91 for ; Sun, 15 Jul 2018 16:13:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726485AbeGOQge (ORCPT ); Sun, 15 Jul 2018 12:36:34 -0400 Received: from mail-lj1-f193.google.com ([209.85.208.193]:36435 "EHLO mail-lj1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726455AbeGOQge (ORCPT ); Sun, 15 Jul 2018 12:36:34 -0400 Received: by mail-lj1-f193.google.com with SMTP id u7-v6so25310162lji.3 for ; Sun, 15 Jul 2018 09:13:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cogentembedded-com.20150623.gappssmtp.com; s=20150623; h=subject:from:to:references:organization:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=VFYYc4OFUQ0JQcr/wRvwa0s67yubokp1h2gfHdWz/Jo=; b=CTEOkjPAKx4RWywz9LBAkdqM6Mqz2YFFLfM4pJneBvrB29jGQ4u/ZJfT5zGZwsoo6K 9XToLwAO7VdXykjsSg52MZmUU9yf0bkw+144Ywwdn1sH4Jt4VhOqmRK5JUob2I3/zE3T i0bfNTqa+bmgg1GgHUZ4svIi08Hm0TBFiAQHYB4m7kj4QDDtIfcxootYYn3mo0isUstv H85ZhW0rP+DuloL/xiHzntsv57Dy2FFaa5Z2W+0226SkxMPhojuqIg7g3asGnQkkDrKp usiMzkQJGknWOZvwYUy+Fee7hljQie1ue6Tt64X3UG338XGeuxbT/8+vqhbrsehIX3AM RvYQ== 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:references:organization :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=VFYYc4OFUQ0JQcr/wRvwa0s67yubokp1h2gfHdWz/Jo=; b=ZcgxpL37eZmmdkQxSQZG170L9Uc/dS7YWLGp8jzyuAIfGjNOR/KKxrmB2JlfhwP2pw oCFXJg5BbJBKxduBgybxzOEv0BmjcsEKAlCg9uIe85OcWyE6eJKQXUlz8oC9RUpXMsRQ YgfwhUyofejaXu2Kk/63GfSj0xsOb1d9ZD3fQzmLv7OcWoeVQV7LmyAPUv9hf7NbvM4E 6Or+NNmL4KPOk6jR8DFl6sLHrsL2vbu/IDPO7cFq7jXGUGOv4X6GzBluqXFGUv3ZAt+5 CvacvYcUsAe51IMTzfNLo9UQfnJoFGsGkT/qLpC73QozJmvC1EUoA92b3BKgoPF52QJA 22gQ== X-Gm-Message-State: AOUpUlHRId6MRjDo5/YyB7tkWW9jattfe0JzOxVVsUwoJ2mZOaWyPk6u AmlpqDzwjJ3NBsNecJNuHfVmXg== X-Google-Smtp-Source: AAOMgpccCpm7ubTqtg1BTg0rzUF+ejP5QZwEkkShq84uqiL3UTz1ml1rtvHcsI5OPkOnTbMIit0ibA== X-Received: by 2002:a2e:5012:: with SMTP id e18-v6mr8418184ljb.22.1531671186111; Sun, 15 Jul 2018 09:13:06 -0700 (PDT) Received: from wasted.cogentembedded.com ([31.173.81.22]) by smtp.gmail.com with ESMTPSA id g28-v6sm6159427lfh.92.2018.07.15.09.13.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 15 Jul 2018 09:13:05 -0700 (PDT) Subject: [PATCH 4/8] PCI: designware: Fix I/O space page leak From: Sergei Shtylyov To: Bjorn Helgaas , linux-pci@vger.kernel.org, Jingoo Han , Joao Pinto , Lorenzo Pieralisi References: <3e862a05-084a-d732-3060-6e2b234e9718@cogentembedded.com> Organization: Cogent Embedded Message-ID: <8cf81034-6404-5d7b-59bd-9dae2e14470b@cogentembedded.com> Date: Sun, 15 Jul 2018 19:13:04 +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 if 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 DesignWare 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: cbce7900598c ("PCI: designware: Make driver arch-agnostic") Signed-off-by: Sergei Shtylyov Acked-by: Jingoo Han Reviewed-by: Linus Walleij Acked-by: Bjorn Helgaas --- drivers/pci/controller/dwc/pcie-designware-host.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) Index: pci/drivers/pci/controller/dwc/pcie-designware-host.c =================================================================== --- pci.orig/drivers/pci/controller/dwc/pcie-designware-host.c +++ pci/drivers/pci/controller/dwc/pcie-designware-host.c @@ -363,7 +363,8 @@ int dw_pcie_host_init(struct pcie_port * resource_list_for_each_entry_safe(win, tmp, &bridge->windows) { switch (resource_type(win->res)) { case IORESOURCE_IO: - ret = pci_remap_iospace(win->res, pp->io_base); + ret = devm_pci_remap_iospace(dev, win->res, + pp->io_base); if (ret) { dev_warn(dev, "Error %d: failed to map resource %pR\n", ret, win->res);