This series bases on the series: https://patchwork.ozlabs.org/patch/713513.
This series fixes couple of issues:
* Remove WARN_ON() in pnv_php_put_slot(). The parent slot's refcount
is decreased when releasing PCI slot. The parent slot can be NULL
and no need to give a warning.
* The MSI (or MSIx) could be enabled prior to load pnv-php.ko. A
backtrace is thrown when phv-php.ko attempts to enable MSI again.
PATCH[2/3] skips enabling surprise hotplug if MSI has been enabled
by other driver.
* PATCH[3/3] doesn't disable MSI that was enabled by other dirver.
Also, the upstream port of the PCI slot is disabled when it's
destroyed.
Gavin Shan (3):
pci/hotplug/pnv-php: Remove WARN_ON() in pnv_php_put_slot()
pci/hotplug/pnv-php: Disable surprise hotplug capability on conflicts
pci/hotplug/pnv-php: Disable MSI and PCI device properly
drivers/pci/hotplug/pnv_php.c | 32 +++++++++++++++++++++++---------
1 file changed, 23 insertions(+), 9 deletions(-)
--
2.7.4
The root port or PCIe switch downstream port might have been associated
with driver other than pnv-php. The MSI or MSIx might also have been
enabled by that driver (e.g. pcieport_drv). Attempt to enable MSI incurs
below backtrace:
PowerPC PowerNV PCI Hotplug Driver version: 0.1
------------[ cut here ]------------
WARNING: CPU: 19 PID: 1004 at drivers/pci/msi.c:1071 \
__pci_enable_msi_range+0x84/0x4e0
NIP [c000000000665c34] __pci_enable_msi_range+0x84/0x4e0
LR [c000000000665c24] __pci_enable_msi_range+0x74/0x4e0
Call Trace:
[c000000384d67600] [c000000000665c24] __pci_enable_msi_range+0x74/0x4e0
[c000000384d676e0] [d00000000aa31b04] pnv_php_register+0x564/0x5a0 [pnv_php]
[c000000384d677c0] [d00000000aa31658] pnv_php_register+0xb8/0x5a0 [pnv_php]
[c000000384d678a0] [d00000000aa31658] pnv_php_register+0xb8/0x5a0 [pnv_php]
[c000000384d67980] [d00000000aa31dfc] pnv_php_init+0x60/0x98 [pnv_php]
[c000000384d679f0] [c00000000000cfdc] do_one_initcall+0x6c/0x1d0
[c000000384d67ab0] [c000000000b92354] do_init_module+0x94/0x254
[c000000384d67b40] [c00000000019719c] load_module+0x258c/0x2c60
[c000000384d67d30] [c000000000197bb0] SyS_finit_module+0xf0/0x170
[c000000384d67e30] [c00000000000b184] system_call+0x38/0xe0
This fixes the issue by skipping enabling the surprise hotplug
capability if the MSI or MSIx on the PCI slot's upstream port has
been enabled by other driver.
Cc: <redacted> # v4.9+
Fixes: 360aebd85a4c ("drivers/pci/hotplug: Support surprise hotplug in powernv driver")
Signed-off-by: Gavin Shan <redacted>
---
drivers/pci/hotplug/pnv_php.c | 8 ++++++++
1 file changed, 8 insertions(+)
pnv_php_disable_irq() can be called in two paths: Bailing path in
pnv_php_enable_irq() or releasing slot. The MSI (or MSIx) interrupts
is disabled unconditionally in pnv_php_disable_irq(). It's wrong
because that might be enabled by drivers other than pnv-php.
This disables MSI (or MSIx) interrupts and the PCI device only if
it was enabled by pnv-php. In the error path of pnv_php_enable_irq(),
we rely on the newly added parameter @disable_device. In the path
of releasing slot, @pnv_php->irq is checked.
Cc: <redacted> # v4.9+
Fixes: 360aebd85a4c ("drivers/pci/hotplug: Support surprise hotplug in powernv driver")
Signed-off-by: Gavin Shan <redacted>
---
drivers/pci/hotplug/pnv_php.c | 22 ++++++++++++++--------
1 file changed, 14 insertions(+), 8 deletions(-)
From: Andrew Donnellan <hidden> Date: 2017-02-16 04:32:52
On 16/02/17 10:22, Gavin Shan wrote:
The root port or PCIe switch downstream port might have been associated
with driver other than pnv-php. The MSI or MSIx might also have been
enabled by that driver (e.g. pcieport_drv). Attempt to enable MSI incurs
below backtrace:
PowerPC PowerNV PCI Hotplug Driver version: 0.1
------------[ cut here ]------------
WARNING: CPU: 19 PID: 1004 at drivers/pci/msi.c:1071 \
__pci_enable_msi_range+0x84/0x4e0
NIP [c000000000665c34] __pci_enable_msi_range+0x84/0x4e0
LR [c000000000665c24] __pci_enable_msi_range+0x74/0x4e0
Call Trace:
[c000000384d67600] [c000000000665c24] __pci_enable_msi_range+0x74/0x4e0
[c000000384d676e0] [d00000000aa31b04] pnv_php_register+0x564/0x5a0 [pnv_php]
[c000000384d677c0] [d00000000aa31658] pnv_php_register+0xb8/0x5a0 [pnv_php]
[c000000384d678a0] [d00000000aa31658] pnv_php_register+0xb8/0x5a0 [pnv_php]
[c000000384d67980] [d00000000aa31dfc] pnv_php_init+0x60/0x98 [pnv_php]
[c000000384d679f0] [c00000000000cfdc] do_one_initcall+0x6c/0x1d0
[c000000384d67ab0] [c000000000b92354] do_init_module+0x94/0x254
[c000000384d67b40] [c00000000019719c] load_module+0x258c/0x2c60
[c000000384d67d30] [c000000000197bb0] SyS_finit_module+0xf0/0x170
[c000000384d67e30] [c00000000000b184] system_call+0x38/0xe0
360aebd85a4c
This fixes the issue by skipping enabling the surprise hotplug
capability if the MSI or MSIx on the PCI slot's upstream port has
been enabled by other driver.
Cc: <redacted> # v4.9+
Fixes: 360aebd85a4c ("drivers/pci/hotplug: Support surprise hotplug in powernv driver")
Signed-off-by: Gavin Shan <redacted>
Should this print something to the kernel log to indicate that surprise
hotplug is unavailable?
Otherwise:
Reviewed-by: Andrew Donnellan <redacted>
--
Andrew Donnellan OzLabs, ADL Canberra
andrew.donnellan@au1.ibm.com IBM Australia Limited
From: Andrew Donnellan <hidden> Date: 2017-02-16 04:46:02
On 16/02/17 10:22, Gavin Shan wrote:
pnv_php_disable_irq() can be called in two paths: Bailing path in
pnv_php_enable_irq() or releasing slot. The MSI (or MSIx) interrupts
is disabled unconditionally in pnv_php_disable_irq(). It's wrong
because that might be enabled by drivers other than pnv-php.
This disables MSI (or MSIx) interrupts and the PCI device only if
it was enabled by pnv-php. In the error path of pnv_php_enable_irq(),
we rely on the newly added parameter @disable_device. In the path
of releasing slot, @pnv_php->irq is checked.
Cc: <redacted> # v4.9+
Fixes: 360aebd85a4c ("drivers/pci/hotplug: Support surprise hotplug in powernv driver")
Signed-off-by: Gavin Shan <redacted>
Reviewed-by: Andrew Donnellan <redacted>
--
Andrew Donnellan OzLabs, ADL Canberra
andrew.donnellan@au1.ibm.com IBM Australia Limited
On Thu, Feb 16, 2017 at 03:31:48PM +1100, Andrew Donnellan wrote:
On 16/02/17 10:22, Gavin Shan wrote:
quoted
The root port or PCIe switch downstream port might have been associated
with driver other than pnv-php. The MSI or MSIx might also have been
enabled by that driver (e.g. pcieport_drv). Attempt to enable MSI incurs
below backtrace:
PowerPC PowerNV PCI Hotplug Driver version: 0.1
------------[ cut here ]------------
WARNING: CPU: 19 PID: 1004 at drivers/pci/msi.c:1071 \
__pci_enable_msi_range+0x84/0x4e0
NIP [c000000000665c34] __pci_enable_msi_range+0x84/0x4e0
LR [c000000000665c24] __pci_enable_msi_range+0x74/0x4e0
Call Trace:
[c000000384d67600] [c000000000665c24] __pci_enable_msi_range+0x74/0x4e0
[c000000384d676e0] [d00000000aa31b04] pnv_php_register+0x564/0x5a0 [pnv_php]
[c000000384d677c0] [d00000000aa31658] pnv_php_register+0xb8/0x5a0 [pnv_php]
[c000000384d678a0] [d00000000aa31658] pnv_php_register+0xb8/0x5a0 [pnv_php]
[c000000384d67980] [d00000000aa31dfc] pnv_php_init+0x60/0x98 [pnv_php]
[c000000384d679f0] [c00000000000cfdc] do_one_initcall+0x6c/0x1d0
[c000000384d67ab0] [c000000000b92354] do_init_module+0x94/0x254
[c000000384d67b40] [c00000000019719c] load_module+0x258c/0x2c60
[c000000384d67d30] [c000000000197bb0] SyS_finit_module+0xf0/0x170
[c000000384d67e30] [c00000000000b184] system_call+0x38/0xe0
360aebd85a4c
This fixes the issue by skipping enabling the surprise hotplug
capability if the MSI or MSIx on the PCI slot's upstream port has
been enabled by other driver.
Cc: <redacted> # v4.9+
Fixes: 360aebd85a4c ("drivers/pci/hotplug: Support surprise hotplug in powernv driver")
Signed-off-by: Gavin Shan <redacted>
Should this print something to the kernel log to indicate that surprise
hotplug is unavailable?
I don't think it's necessary as the situation can be known from lspci
and /proc/interrupts easily. Otherwise, we could add pr_warn_once()
to print the warning message for once, not on all slots.
Thanks,
Gavin
On Thu, Feb 16, 2017 at 10:22:31AM +1100, Gavin Shan wrote:
This series bases on the series: https://patchwork.ozlabs.org/patch/713513.
This series fixes couple of issues:
* Remove WARN_ON() in pnv_php_put_slot(). The parent slot's refcount
is decreased when releasing PCI slot. The parent slot can be NULL
and no need to give a warning.
* The MSI (or MSIx) could be enabled prior to load pnv-php.ko. A
backtrace is thrown when phv-php.ko attempts to enable MSI again.
PATCH[2/3] skips enabling surprise hotplug if MSI has been enabled
by other driver.
* PATCH[3/3] doesn't disable MSI that was enabled by other dirver.
Also, the upstream port of the PCI slot is disabled when it's
destroyed.
Gavin Shan (3):
pci/hotplug/pnv-php: Remove WARN_ON() in pnv_php_put_slot()
pci/hotplug/pnv-php: Disable surprise hotplug capability on conflicts
pci/hotplug/pnv-php: Disable MSI and PCI device properly
drivers/pci/hotplug/pnv_php.c | 32 +++++++++++++++++++++++---------
1 file changed, 23 insertions(+), 9 deletions(-)
Since this is specific to pnv_php.c and depends on a previous series
applied by Michael, I assume he'll handle this series as well.
On Thu, Feb 16, 2017 at 08:09:26AM -0600, Bjorn Helgaas wrote:
On Thu, Feb 16, 2017 at 10:22:31AM +1100, Gavin Shan wrote:
quoted
This series bases on the series: https://patchwork.ozlabs.org/patch/713513.
This series fixes couple of issues:
* Remove WARN_ON() in pnv_php_put_slot(). The parent slot's refcount
is decreased when releasing PCI slot. The parent slot can be NULL
and no need to give a warning.
* The MSI (or MSIx) could be enabled prior to load pnv-php.ko. A
backtrace is thrown when phv-php.ko attempts to enable MSI again.
PATCH[2/3] skips enabling surprise hotplug if MSI has been enabled
by other driver.
* PATCH[3/3] doesn't disable MSI that was enabled by other dirver.
Also, the upstream port of the PCI slot is disabled when it's
destroyed.
Gavin Shan (3):
pci/hotplug/pnv-php: Remove WARN_ON() in pnv_php_put_slot()
pci/hotplug/pnv-php: Disable surprise hotplug capability on conflicts
pci/hotplug/pnv-php: Disable MSI and PCI device properly
drivers/pci/hotplug/pnv_php.c | 32 +++++++++++++++++++++++---------
1 file changed, 23 insertions(+), 9 deletions(-)
Since this is specific to pnv_php.c and depends on a previous series
applied by Michael, I assume he'll handle this series as well.
Bjorn, yes, I think Michael will take care of this series and all
changes to pnv_php.c in future, as we all agreed previously. I was
asked by Michael to copy linux-pci@ and you when posting patches for
this component.
Thanks,
Gavin
On Fri, Feb 17, 2017 at 09:38:08AM +1100, Gavin Shan wrote:
On Thu, Feb 16, 2017 at 08:09:26AM -0600, Bjorn Helgaas wrote:
quoted
On Thu, Feb 16, 2017 at 10:22:31AM +1100, Gavin Shan wrote:
quoted
This series bases on the series: https://patchwork.ozlabs.org/patch/713513.
This series fixes couple of issues:
* Remove WARN_ON() in pnv_php_put_slot(). The parent slot's refcount
is decreased when releasing PCI slot. The parent slot can be NULL
and no need to give a warning.
* The MSI (or MSIx) could be enabled prior to load pnv-php.ko. A
backtrace is thrown when phv-php.ko attempts to enable MSI again.
PATCH[2/3] skips enabling surprise hotplug if MSI has been enabled
by other driver.
* PATCH[3/3] doesn't disable MSI that was enabled by other dirver.
Also, the upstream port of the PCI slot is disabled when it's
destroyed.
Gavin Shan (3):
pci/hotplug/pnv-php: Remove WARN_ON() in pnv_php_put_slot()
pci/hotplug/pnv-php: Disable surprise hotplug capability on conflicts
pci/hotplug/pnv-php: Disable MSI and PCI device properly
drivers/pci/hotplug/pnv_php.c | 32 +++++++++++++++++++++++---------
1 file changed, 23 insertions(+), 9 deletions(-)
Since this is specific to pnv_php.c and depends on a previous series
applied by Michael, I assume he'll handle this series as well.
Bjorn, yes, I think Michael will take care of this series and all
changes to pnv_php.c in future, as we all agreed previously. I was
asked by Michael to copy linux-pci@ and you when posting patches for
this component.
Thanks, I appreciate at least seeing the changes! If you mention in
the cover letter that you expect Michael to merge it, then I will
immediately know to ignore it unless I object for some reason.
Bjorn
On Thu, Feb 16, 2017 at 05:28:54PM -0600, Bjorn Helgaas wrote:
On Fri, Feb 17, 2017 at 09:38:08AM +1100, Gavin Shan wrote:
quoted
On Thu, Feb 16, 2017 at 08:09:26AM -0600, Bjorn Helgaas wrote:
quoted
On Thu, Feb 16, 2017 at 10:22:31AM +1100, Gavin Shan wrote:
quoted
This series bases on the series: https://patchwork.ozlabs.org/patch/713513.
This series fixes couple of issues:
* Remove WARN_ON() in pnv_php_put_slot(). The parent slot's refcount
is decreased when releasing PCI slot. The parent slot can be NULL
and no need to give a warning.
* The MSI (or MSIx) could be enabled prior to load pnv-php.ko. A
backtrace is thrown when phv-php.ko attempts to enable MSI again.
PATCH[2/3] skips enabling surprise hotplug if MSI has been enabled
by other driver.
* PATCH[3/3] doesn't disable MSI that was enabled by other dirver.
Also, the upstream port of the PCI slot is disabled when it's
destroyed.
Gavin Shan (3):
pci/hotplug/pnv-php: Remove WARN_ON() in pnv_php_put_slot()
pci/hotplug/pnv-php: Disable surprise hotplug capability on conflicts
pci/hotplug/pnv-php: Disable MSI and PCI device properly
drivers/pci/hotplug/pnv_php.c | 32 +++++++++++++++++++++++---------
1 file changed, 23 insertions(+), 9 deletions(-)
Since this is specific to pnv_php.c and depends on a previous series
applied by Michael, I assume he'll handle this series as well.
Bjorn, yes, I think Michael will take care of this series and all
changes to pnv_php.c in future, as we all agreed previously. I was
asked by Michael to copy linux-pci@ and you when posting patches for
this component.
Thanks, I appreciate at least seeing the changes! If you mention in
the cover letter that you expect Michael to merge it, then I will
immediately know to ignore it unless I object for some reason.
Yep, thanks for the good suggestion. I will put one words about that
next time :-)
Thanks,
Gavin
From: Michael Ellerman <mpe@ellerman.id.au> Date: 2017-02-17 11:13:02
Bjorn Helgaas [off-list ref] writes:
On Fri, Feb 17, 2017 at 09:38:08AM +1100, Gavin Shan wrote:
quoted
On Thu, Feb 16, 2017 at 08:09:26AM -0600, Bjorn Helgaas wrote:
quoted
On Thu, Feb 16, 2017 at 10:22:31AM +1100, Gavin Shan wrote:
quoted
This series bases on the series: https://patchwork.ozlabs.org/patch/713513.
This series fixes couple of issues:
* Remove WARN_ON() in pnv_php_put_slot(). The parent slot's refcount
is decreased when releasing PCI slot. The parent slot can be NULL
and no need to give a warning.
* The MSI (or MSIx) could be enabled prior to load pnv-php.ko. A
backtrace is thrown when phv-php.ko attempts to enable MSI again.
PATCH[2/3] skips enabling surprise hotplug if MSI has been enabled
by other driver.
* PATCH[3/3] doesn't disable MSI that was enabled by other dirver.
Also, the upstream port of the PCI slot is disabled when it's
destroyed.
Gavin Shan (3):
pci/hotplug/pnv-php: Remove WARN_ON() in pnv_php_put_slot()
pci/hotplug/pnv-php: Disable surprise hotplug capability on conflicts
pci/hotplug/pnv-php: Disable MSI and PCI device properly
Since this is specific to pnv_php.c and depends on a previous series
applied by Michael, I assume he'll handle this series as well.
Bjorn, yes, I think Michael will take care of this series and all
changes to pnv_php.c in future, as we all agreed previously. I was
asked by Michael to copy linux-pci@ and you when posting patches for
this component.
Thanks, I appreciate at least seeing the changes! If you mention in
the cover letter that you expect Michael to merge it, then I will
immediately know to ignore it unless I object for some reason.
Thanks Bjorn.
I guess I'll plan to merge all small to medium changes to this driver,
unless you object to them.
If there's something big or that looks like it interacts more than usual
with the PCI code I'll ping you for an ack.
cheers