All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bjorn Helgaas <helgaas@kernel.org>
To: Niklas Cassel <niklas.cassel@axis.com>
Cc: bhelgaas@google.com, jingoohan1@gmail.com,
	Joao.Pinto@synopsys.com, kishon@ti.com,
	linux-arm-kernel@axis.com, linux-pci@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] PCI: dwc: fix crash seen due to missing ops
Date: Tue, 4 Apr 2017 08:54:26 -0500	[thread overview]
Message-ID: <20170404135426.GA27692@bhelgaas-glaptop.roam.corp.google.com> (raw)
In-Reply-To: <5f1e5394-26fc-b533-b78c-89e409e9e1cf@axis.com>

On Tue, Apr 04, 2017 at 09:54:25AM +0200, Niklas Cassel wrote:
> On 04/04/2017 01:15 AM, Bjorn Helgaas wrote:
> > On Tue, Mar 21, 2017 at 03:43:54PM +0100, Niklas Cassel wrote:
> >> From: Niklas Cassel <niklas.cassel@axis.com>
> >>
> >> Fix the following crash, seen in dwc/pcie-artpec6.
> >>
> >>   Unable to handle kernel NULL pointer dereference at virtual address 00000004
> >>   pgd = c0204000
> >>   [00000004] *pgd=00000000
> >>   Internal error: Oops: 5 [#1] SMP ARM
> >>   Modules linked in:
> >>   CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.11.0-rc3-next-20170321 #1
> >>   Hardware name: Axis ARTPEC-6 Platform
> >>   task: db098000 task.stack: db096000
> >>   PC is at dw_pcie_writel_dbi+0x2c/0xd0
> >>   ...
> >>
> >> While at it, fix the same problem for pcie-designware-plat.
> >>
> >> Fixes: 442ec4c04d12 ("PCI: dwc: all: Split struct pcie_port into host-only and core structures")
> >> Signed-off-by: Niklas Cassel <niklas.cassel@axis.com>
> > 
> > For artpec6, I think this has already been fixed by Kishon's "PCI: dwc:
> > artpec6: Populate cpu_addr_fixup ops".
> 
> Agreed.
> 
> > 
> > Since both the artpec6 and designware-plat issues were introduced by
> > 442ec4c04d12, which we merged in the v4.11 merge window, I moved Kishon's
> > fix and the designware-plat part of this patch to for-linus for v4.11.
> 
> I didn't think that including "PCI: dwc: designware: Add new *ops* for
> CPU addr fixup" was an option, but doing so is a cleaner solution imo.
> 
> > 
> > Please double-check my for-linus branch to make sure it has what we need.
> 
> The branch looks good. I did test it, and it works marvelously.

Thanks a lot for testing it.  I had already reconsidered this and
decided that I don't really like patches that do two things at once,
i.e., the "CPU addr fixup" patch both fixes the CPU addr thing and
fixes the NULL pointer dereference as an unintended side effect.

So I ended up putting your original patch on for-linus, then rebasing
pci/host-designware on top of for-linus.  That way we have your simple
patch for v4.11 that fixes the NULL pointer problems, and the CPU addr
fixups will go in v4.12 along with the rest of that series.  It's much
ado about nothing, really, and could go either way.

> >> ---
> >>  drivers/pci/dwc/pcie-artpec6.c         | 4 ++++
> >>  drivers/pci/dwc/pcie-designware-plat.c | 4 ++++
> >>  2 files changed, 8 insertions(+)
> >>
> >> diff --git a/drivers/pci/dwc/pcie-artpec6.c b/drivers/pci/dwc/pcie-artpec6.c
> >> index fcd3ef845883..6d23683c0892 100644
> >> --- a/drivers/pci/dwc/pcie-artpec6.c
> >> +++ b/drivers/pci/dwc/pcie-artpec6.c
> >> @@ -234,6 +234,9 @@ static int artpec6_add_pcie_port(struct artpec6_pcie *artpec6_pcie,
> >>  	return 0;
> >>  }
> >>  
> >> +static const struct dw_pcie_ops dw_pcie_ops = {
> >> +};
> >> +
> >>  static int artpec6_pcie_probe(struct platform_device *pdev)
> >>  {
> >>  	struct device *dev = &pdev->dev;
> >> @@ -252,6 +255,7 @@ static int artpec6_pcie_probe(struct platform_device *pdev)
> >>  		return -ENOMEM;
> >>  
> >>  	pci->dev = dev;
> >> +	pci->ops = &dw_pcie_ops;
> >>  
> >>  	artpec6_pcie->pci = pci;
> >>  
> >> diff --git a/drivers/pci/dwc/pcie-designware-plat.c b/drivers/pci/dwc/pcie-designware-plat.c
> >> index b6c832ba39dd..f20d494922ab 100644
> >> --- a/drivers/pci/dwc/pcie-designware-plat.c
> >> +++ b/drivers/pci/dwc/pcie-designware-plat.c
> >> @@ -86,6 +86,9 @@ static int dw_plat_add_pcie_port(struct pcie_port *pp,
> >>  	return 0;
> >>  }
> >>  
> >> +static const struct dw_pcie_ops dw_pcie_ops = {
> >> +};
> >> +
> >>  static int dw_plat_pcie_probe(struct platform_device *pdev)
> >>  {
> >>  	struct device *dev = &pdev->dev;
> >> @@ -103,6 +106,7 @@ static int dw_plat_pcie_probe(struct platform_device *pdev)
> >>  		return -ENOMEM;
> >>  
> >>  	pci->dev = dev;
> >> +	pci->ops = &dw_pcie_ops;
> >>  
> >>  	dw_plat_pcie->pci = pci;
> >>  
> >> -- 
> >> 2.11.0
> >>

      reply	other threads:[~2017-04-04 13:54 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-21 14:43 [PATCH] PCI: dwc: fix crash seen due to missing ops Niklas Cassel
2017-03-22 15:47 ` Joao Pinto
2017-03-23  7:40   ` Niklas Cassel
2017-03-27  5:43     ` Kishon Vijay Abraham I
2017-03-29 11:21       ` Niklas Cassel
     [not found]   ` <e6cf73c0-f930-c29a-8caa-843320ec5f8a@axis.com>
2017-03-27 16:26     ` Joao Pinto
2017-04-03 23:15 ` Bjorn Helgaas
2017-04-04  7:54   ` Niklas Cassel
2017-04-04 13:54     ` Bjorn Helgaas [this message]

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=20170404135426.GA27692@bhelgaas-glaptop.roam.corp.google.com \
    --to=helgaas@kernel.org \
    --cc=Joao.Pinto@synopsys.com \
    --cc=bhelgaas@google.com \
    --cc=jingoohan1@gmail.com \
    --cc=kishon@ti.com \
    --cc=linux-arm-kernel@axis.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=niklas.cassel@axis.com \
    /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.