Re: [PATCH] staging: mt7621-pci: avoid to request pci bus resources

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Greg,

On Mon, Nov 2, 2020 at 9:25 PM Sergio Paracuellos
<sergio.paracuellos@xxxxxxxxx> wrote:
>
> After upgrading kernel to version 5.9.x the driver was not
> working anymore showing the following kernel trace:
>
> ...
> mt7621-pci 1e140000.pcie: resource collision:
> [mem 0x60000000-0x6fffffff] conflicts with pcie@1e140000 [mem 0x60000000-0x6fffffff]
> ------------[ cut here ]------------
> WARNING: CPU: 2 PID: 73 at kernel/resource.c:1400
> devm_request_resource+0xfc/0x10c
> Modules linked in:
> CPU: 2 PID: 73 Comm: kworker/2:1 Not tainted 5.9.2 #0
> Workqueue: events deferred_probe_work_func
> Stack : 00000000 81590000 807d0a1c 808a0000 8fd49080
>         807d0000 00000009 808ac820
>         00000001 808338d0 7fff0001 800839dc 00000049
>         00000001 8fe51b00 367204ab
>         00000000 00000000 807d0a1c 807c0000 00000001
>         80082358 8fe50000 00559000
>         00000000 8fe519f1 ffffffff 00000005 00000000
>         00000001 00000000 807d0000
>         00000009 808ac820 00000001 808338d0 00000001
>         803bf1b0 00000008 81390008
>
> Call Trace:
> [<8000d018>] show_stack+0x30/0x100
> [<8032e66c>] dump_stack+0xa4/0xd4
> [<8002db1c>] __warn+0xc0/0x134
> [<8002dbec>] warn_slowpath_fmt+0x5c/0xac
> [<80033b34>] devm_request_resource+0xfc/0x10c
> [<80365ff8>] devm_request_pci_bus_resources+0x58/0xdc
> [<8048e13c>] mt7621_pci_probe+0x8dc/0xe48
> [<803d2140>] platform_drv_probe+0x40/0x94
> [<803cfd94>] really_probe+0x108/0x4ec
> [<803cd958>] bus_for_each_drv+0x70/0xb0
> [<803d0388>] __device_attach+0xec/0x164
> [<803cec8c>] bus_probe_device+0xa4/0xc0
> [<803cf1c4>] deferred_probe_work_func+0x80/0xc4
> [<80048444>] process_one_work+0x260/0x510
> [<80048a4c>] worker_thread+0x358/0x5cc
> [<8004f7d0>] kthread+0x134/0x13c
> [<80007478>] ret_from_kernel_thread+0x14/0x1c
> ---[ end trace a9dd2e37537510d3 ]---
> mt7621-pci 1e140000.pcie: Error requesting resources
> mt7621-pci: probe of 1e140000.pcie failed with error -16
> ...
>
> With commit 669cbc708122 ("PCI: Move DT resource setup into
> devm_pci_alloc_host_bridge()"), the DT 'ranges' is parsed and populated
> into resources when the host bridge is allocated. The resources are
> requested as well, but that happens a 2nd time for this driver in
> mt7621_pcie_request_resources(). Hence we should avoid this second
> request.
>
> Also, the bus ranges was also populated by default, so we can remove
> it from mt7621_pcie_request_resources() to avoid the following trace
> if we don't avoid it:
>
> pci_bus 0000:00: busn_res: can not insert [bus 00-ff]
> under domain [bus 00-ff] (conflicts with (null) [bus 00-ff])
>
> Function 'mt7621_pcie_request_resources' has been renamed into
> 'mt7621_pcie_add_resources' which now is a more accurate name
> for this function.
>
> Cc: stable@xxxxxxxxxxxxxxx#5.9.x-
> Signed-off-by: Sergio Paracuellos <sergio.paracuellos@xxxxxxxxx>

This patch have to be added also for stable 5.9.x because driver is
broken in all kernel 5.9.x releases. I noticed a new stable release
comes three days ago (5.9.8) and this was not added. I was wondering
if the way I marked this patch to be included is wrong.

Thanks in advance for your time.

Best regards,
    Sergio Paracuellos

> ---
>  drivers/staging/mt7621-pci/pci-mt7621.c | 15 +++------------
>  1 file changed, 3 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/staging/mt7621-pci/pci-mt7621.c b/drivers/staging/mt7621-pci/pci-mt7621.c
> index f961b353c22e..8831db383fad 100644
> --- a/drivers/staging/mt7621-pci/pci-mt7621.c
> +++ b/drivers/staging/mt7621-pci/pci-mt7621.c
> @@ -653,16 +653,11 @@ static int mt7621_pcie_init_virtual_bridges(struct mt7621_pcie *pcie)
>         return 0;
>  }
>
> -static int mt7621_pcie_request_resources(struct mt7621_pcie *pcie,
> -                                        struct list_head *res)
> +static void mt7621_pcie_add_resources(struct mt7621_pcie *pcie,
> +                                     struct list_head *res)
>  {
> -       struct device *dev = pcie->dev;
> -
>         pci_add_resource_offset(res, &pcie->io, pcie->offset.io);
>         pci_add_resource_offset(res, &pcie->mem, pcie->offset.mem);
> -       pci_add_resource(res, &pcie->busn);
> -
> -       return devm_request_pci_bus_resources(dev, res);
>  }
>
>  static int mt7621_pcie_register_host(struct pci_host_bridge *host,
> @@ -738,11 +733,7 @@ static int mt7621_pci_probe(struct platform_device *pdev)
>
>         setup_cm_memory_region(pcie);
>
> -       err = mt7621_pcie_request_resources(pcie, &res);
> -       if (err) {
> -               dev_err(dev, "Error requesting resources\n");
> -               return err;
> -       }
> +       mt7621_pcie_add_resources(pcie, &res);
>
>         err = mt7621_pcie_register_host(bridge, &res);
>         if (err) {
> --
> 2.25.1
>



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux