All of lore.kernel.org
 help / color / mirror / Atom feed
From: wangyijing <wangyijing@huawei.com>
To: Bjorn Helgaas <bhelgaas@google.com>, David Miller <davem@davemloft.net>
Cc: <linux-pci@vger.kernel.org>, <mroos@linux.ee>,
	<sparclinux@vger.kernel.org>, <eric.snowberg@oracle.com>,
	<benh@kernel.crashing.org>
Subject: Re: [PATCH] PCI/ASPM: Fix a NULL pointer crash on sparc64
Date: Fri, 21 Aug 2015 09:48:06 +0800	[thread overview]
Message-ID: <55D68356.1060706@huawei.com> (raw)
In-Reply-To: <20150820212109.GB14810@google.com>

Hi Bjorn, David, thanks for your effort to improve the patch commit.

Thanks!
Yijing.

> commit 27ff9f3e0ab34a75a3420bffd3eb5316de2e4d92
> Author: Yijing Wang <wangyijing@huawei.com>
> Date:   Mon Aug 17 18:47:58 2015 +0800
> 
>     PCI: Tolerate hierarchies with no Root Port
>     
>     We should not assume any particular hardware topology.  Commit d0751b98dfa3
>     ("PCI: Add dev->has_secondary_link to track downstream PCIe links") relied
>     on the assumption that every PCIe hierarchy is rooted at a Root Port.  But
>     we can't rely on any assumption about what hardware we will find; we just
>     have to deal with the world as it is.
>     
>     On some platforms, PCIe devices (endpoints, switch upstream ports, etc.)
>     appear directly on the root bus, and there is no Root Port in the PCI bus
>     hierarchy.  For example, Meelis observed these top-level devices on a
>     Sparc V245:
>     
>       0000:02:00.0 PCI bridge to [bus 03-0d]    Switch Upstream Port
>       0001:02:00.0 PCI bridge to [bus 03]       PCIe to PCI/PCI-X Bridge
>     
>     These devices *look* like they have links going upstream, but there really
>     are no upstream devices.
>     
>     In set_pcie_port_type(), we used the parent device to figure out which side
>     of a switch port has a link, so if the parent device did not exist, we
>     dereferenced a NULL parent pointer.
>     
>     Check whether the parent device exists before dereferencing it.
>     
>     Meelis observed this oops on Sparc V245 and T2000.  Ben Herrenschmidt says
>     this is also possible on IBM PowerVM guests on PowerPC.
>     
>     [bhelgaas: changelog, comment]
>     Link: http://lkml.kernel.org/r/alpine.LRH.2.20.1508122118210.18637@math.ut.ee
>     Reported-by: Meelis Roos <mroos@linux.ee>
>     Tested-by: Meelis Roos <mroos@linux.ee>
>     Signed-off-by: Yijing Wang <wangyijing@huawei.com>
>     Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
> 
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index cefd636..b978bbf 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -997,7 +997,12 @@ void set_pcie_port_type(struct pci_dev *pdev)
>  	else if (type == PCI_EXP_TYPE_UPSTREAM ||
>  		 type == PCI_EXP_TYPE_DOWNSTREAM) {
>  		parent = pci_upstream_bridge(pdev);
> -		if (!parent->has_secondary_link)
> +
> +		/*
> +		 * Usually there's a parent device (Root Port or Switch
> +		 * Downstream Port), but we can't assume one exists.
> +		 */
> +		if (parent && !parent->has_secondary_link)
>  			pdev->has_secondary_link = 1;
>  	}
>  }
> 
> .
> 


WARNING: multiple messages have this Message-ID (diff)
From: wangyijing <wangyijing@huawei.com>
To: Bjorn Helgaas <bhelgaas@google.com>, David Miller <davem@davemloft.net>
Cc: linux-pci@vger.kernel.org, mroos@linux.ee,
	sparclinux@vger.kernel.org, eric.snowberg@oracle.com,
	benh@kernel.crashing.org
Subject: Re: [PATCH] PCI/ASPM: Fix a NULL pointer crash on sparc64
Date: Fri, 21 Aug 2015 01:48:06 +0000	[thread overview]
Message-ID: <55D68356.1060706@huawei.com> (raw)
In-Reply-To: <20150820212109.GB14810@google.com>

Hi Bjorn, David, thanks for your effort to improve the patch commit.

Thanks!
Yijing.

> commit 27ff9f3e0ab34a75a3420bffd3eb5316de2e4d92
> Author: Yijing Wang <wangyijing@huawei.com>
> Date:   Mon Aug 17 18:47:58 2015 +0800
> 
>     PCI: Tolerate hierarchies with no Root Port
>     
>     We should not assume any particular hardware topology.  Commit d0751b98dfa3
>     ("PCI: Add dev->has_secondary_link to track downstream PCIe links") relied
>     on the assumption that every PCIe hierarchy is rooted at a Root Port.  But
>     we can't rely on any assumption about what hardware we will find; we just
>     have to deal with the world as it is.
>     
>     On some platforms, PCIe devices (endpoints, switch upstream ports, etc.)
>     appear directly on the root bus, and there is no Root Port in the PCI bus
>     hierarchy.  For example, Meelis observed these top-level devices on a
>     Sparc V245:
>     
>       0000:02:00.0 PCI bridge to [bus 03-0d]    Switch Upstream Port
>       0001:02:00.0 PCI bridge to [bus 03]       PCIe to PCI/PCI-X Bridge
>     
>     These devices *look* like they have links going upstream, but there really
>     are no upstream devices.
>     
>     In set_pcie_port_type(), we used the parent device to figure out which side
>     of a switch port has a link, so if the parent device did not exist, we
>     dereferenced a NULL parent pointer.
>     
>     Check whether the parent device exists before dereferencing it.
>     
>     Meelis observed this oops on Sparc V245 and T2000.  Ben Herrenschmidt says
>     this is also possible on IBM PowerVM guests on PowerPC.
>     
>     [bhelgaas: changelog, comment]
>     Link: http://lkml.kernel.org/r/alpine.LRH.2.20.1508122118210.18637@math.ut.ee
>     Reported-by: Meelis Roos <mroos@linux.ee>
>     Tested-by: Meelis Roos <mroos@linux.ee>
>     Signed-off-by: Yijing Wang <wangyijing@huawei.com>
>     Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
> 
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index cefd636..b978bbf 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -997,7 +997,12 @@ void set_pcie_port_type(struct pci_dev *pdev)
>  	else if (type = PCI_EXP_TYPE_UPSTREAM ||
>  		 type = PCI_EXP_TYPE_DOWNSTREAM) {
>  		parent = pci_upstream_bridge(pdev);
> -		if (!parent->has_secondary_link)
> +
> +		/*
> +		 * Usually there's a parent device (Root Port or Switch
> +		 * Downstream Port), but we can't assume one exists.
> +		 */
> +		if (parent && !parent->has_secondary_link)
>  			pdev->has_secondary_link = 1;
>  	}
>  }
> 
> .
> 


  parent reply	other threads:[~2015-08-21  1:48 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-17 10:47 [PATCH] PCI/ASPM: Fix a NULL pointer crash on sparc64 Yijing Wang
2015-08-18 18:49 ` Bjorn Helgaas
2015-08-18 18:49   ` Bjorn Helgaas
2015-08-18 19:10   ` David Miller
2015-08-18 19:10     ` David Miller
2015-08-19 22:16     ` Bjorn Helgaas
2015-08-19 22:16       ` Bjorn Helgaas
2015-08-19 22:29       ` Benjamin Herrenschmidt
2015-08-19 22:29         ` Benjamin Herrenschmidt
2015-08-20  6:01         ` Bjorn Helgaas
2015-08-20  6:01           ` Bjorn Helgaas
2015-08-20  6:38           ` Benjamin Herrenschmidt
2015-08-20  6:38             ` Benjamin Herrenschmidt
2015-08-20  6:44           ` Kjetil Oftedal
2015-08-20  6:44             ` Kjetil Oftedal
2015-08-20 17:51             ` David Miller
2015-08-20 17:51               ` David Miller
2015-08-20 17:50           ` David Miller
2015-08-20 17:50             ` David Miller
2015-08-20  5:48 ` Bjorn Helgaas
2015-08-20  5:48   ` Bjorn Helgaas
2015-08-20 17:47   ` David Miller
2015-08-20 17:47     ` David Miller
2015-08-20 18:23     ` Bjorn Helgaas
2015-08-20 18:23       ` Bjorn Helgaas
2015-08-20 18:40       ` David Miller
2015-08-20 18:40         ` David Miller
2015-08-20 20:21         ` Bjorn Helgaas
2015-08-20 20:21           ` Bjorn Helgaas
2015-08-20 20:58           ` David Miller
2015-08-20 20:58             ` David Miller
2015-08-20 21:21             ` Bjorn Helgaas
2015-08-20 21:21               ` Bjorn Helgaas
2015-08-20 21:38               ` David Miller
2015-08-20 21:38                 ` David Miller
2015-08-21  1:48               ` wangyijing [this message]
2015-08-21  1:48                 ` wangyijing

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=55D68356.1060706@huawei.com \
    --to=wangyijing@huawei.com \
    --cc=benh@kernel.crashing.org \
    --cc=bhelgaas@google.com \
    --cc=davem@davemloft.net \
    --cc=eric.snowberg@oracle.com \
    --cc=linux-pci@vger.kernel.org \
    --cc=mroos@linux.ee \
    --cc=sparclinux@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.