From: Mike Qiu <qiudayu@linux.vnet.ibm.com>
To: Gavin Shan <gwshan@linux.vnet.ibm.com>
Cc: benh@au1.ibm.com, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v2] Bugfix: powerpc/eeh: Wrong place to call pci_get_slot()
Date: Tue, 15 Jul 2014 13:15:58 +0800 [thread overview]
Message-ID: <53C4B90E.7060807@linux.vnet.ibm.com> (raw)
In-Reply-To: <20140715050707.GA17089@shangw>
On 07/15/2014 01:07 PM, Gavin Shan wrote:
> On Mon, Jul 14, 2014 at 10:33:48PM -0400, Mike Qiu wrote:
>> pci_get_slot() is called with hold of PCI bus semaphore and it's not
>> safe to be called in interrupt context. However, we possibly checks
>> EEH error and calls the function in interrupt context. To avoid using
>> pci_get_slot(), we turn into device tree for fetching location code.
>> Otherwise, we might run into WARN_ON() as following messages indicate:
>>
>> WARNING: at drivers/pci/search.c:223
>> CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.16.0-rc3+ #72
>> task: c000000001367af0 ti: c000000001444000 task.ti: c000000001444000
>> NIP: c000000000497b70 LR: c000000000037530 CTR: 000000003003d114
>> REGS: c000000001446fa0 TRAP: 0700 Not tainted (3.16.0-rc3+)
>> MSR: 9000000000029032 <SF,HV,EE,ME,IR,DR,RI> CR: 48002422 XER: 20000000
>> CFAR: c00000000003752c SOFTE: 0
>> :
>> NIP [c000000000497b70] .pci_get_slot+0x40/0x110
>> LR [c000000000037530] .eeh_pe_loc_get+0x150/0x190
>> Call Trace:
>> .of_get_property+0x30/0x60 (unreliable)
>> .eeh_pe_loc_get+0x150/0x190
>> .eeh_dev_check_failure+0x1b4/0x550
>> .eeh_check_failure+0x90/0xf0
>> .lpfc_sli_check_eratt+0x504/0x7c0 [lpfc]
>> .lpfc_poll_eratt+0x64/0x100 [lpfc]
>> .call_timer_fn+0x64/0x190
>> .run_timer_softirq+0x2cc/0x3e0
>>
>> Signed-off-by: Mike Qiu <qiudayu@linux.vnet.ibm.com>
>> ---
>> Changelog[v2]:
>> Check the child device_node of root bus for root port
>> directly instead of search pdev from device-tree and
>> then translate it to device-node
>>
> I run into following warning with your patch. Please test the attached
> one. If no problem found, send that one please.
>
> arch/powerpc/kernel/eeh_pe.c: In function 'eeh_pe_loc_get':
> arch/powerpc/kernel/eeh_pe.c:806:18: warning: unused variable 'pdev'
OK, I will remove unused variable.
Thanks,
Mike
> Thanks,
> Gavin
>
>> arch/powerpc/kernel/eeh_pe.c | 24 ++++++------------------
>> 1 file changed, 6 insertions(+), 18 deletions(-)
>>
>> diff --git a/arch/powerpc/kernel/eeh_pe.c b/arch/powerpc/kernel/eeh_pe.c
>> index fbd01eb..f96c10f 100644
>> --- a/arch/powerpc/kernel/eeh_pe.c
>> +++ b/arch/powerpc/kernel/eeh_pe.c
>> @@ -802,7 +802,6 @@ void eeh_pe_restore_bars(struct eeh_pe *pe)
>> */
>> const char *eeh_pe_loc_get(struct eeh_pe *pe)
>> {
>> - struct pci_controller *hose;
>> struct pci_bus *bus = eeh_pe_bus_get(pe);
>> struct pci_dev *pdev;
>> struct device_node *dn;
>> @@ -811,29 +810,20 @@ const char *eeh_pe_loc_get(struct eeh_pe *pe)
>> if (!bus)
>> return "N/A";
>>
>> + dn = pci_bus_to_OF_node(bus);
>> /* PHB PE or root PE ? */
>> - if (pci_is_root_bus(bus)) {
>> - hose = pci_bus_to_host(bus);
>> - loc = of_get_property(hose->dn,
>> - "ibm,loc-code", NULL);
>> + if (dn && pci_is_root_bus(bus)) {
>> + loc = of_get_property(dn, "ibm,loc-code", NULL);
>> if (loc)
>> return loc;
>> - loc = of_get_property(hose->dn,
>> - "ibm,io-base-loc-code", NULL);
>> + loc = of_get_property(dn, "ibm,io-base-loc-code", NULL);
>> if (loc)
>> return loc;
>>
>> - pdev = pci_get_slot(bus, 0x0);
>> - } else {
>> - pdev = bus->self;
>> - }
>> -
>> - if (!pdev) {
>> - loc = "N/A";
>> - goto out;
>> + /* Check the root port */
>> + dn = dn->child;
>> }
>>
>> - dn = pci_device_to_OF_node(pdev);
>> if (!dn) {
>> loc = "N/A";
>> goto out;
>> @@ -846,8 +836,6 @@ const char *eeh_pe_loc_get(struct eeh_pe *pe)
>> loc = "N/A";
>>
>> out:
>> - if (pci_is_root_bus(bus) && pdev)
>> - pci_dev_put(pdev);
>> return loc;
>> }
>>
>> --
>> 1.8.1.4
>>
prev parent reply other threads:[~2014-07-15 5:16 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-15 2:33 [PATCH v2] Bugfix: powerpc/eeh: Wrong place to call pci_get_slot() Mike Qiu
2014-07-15 5:07 ` Gavin Shan
2014-07-15 5:15 ` Mike Qiu [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=53C4B90E.7060807@linux.vnet.ibm.com \
--to=qiudayu@linux.vnet.ibm.com \
--cc=benh@au1.ibm.com \
--cc=gwshan@linux.vnet.ibm.com \
--cc=linuxppc-dev@lists.ozlabs.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.