Patchwork arch/powerpc: Don't release eeh_mutex in eeh_phb_pe_get

login
register
mail settings
Submitter Aneesh Kumar K.V
Date Sept. 21, 2012, 9:29 a.m.
Message ID <1348219786-31221-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com>
Download mbox | patch
Permalink /patch/185640/
State Accepted, archived
Headers show

Comments

Aneesh Kumar K.V - Sept. 21, 2012, 9:29 a.m.
From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
Gavin Shan - Sept. 21, 2012, 10:58 a.m.
On Fri, Sep 21, 2012 at 02:59:46PM +0530, Aneesh Kumar K.V wrote:
>From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
>
>=====================================
>[ BUG: bad unlock balance detected! ]
>3.6.0-rc5-00338-gcaa1d63-dirty #6 Not tainted
>-------------------------------------
>swapper/0/1 is trying to release lock (eeh_mutex) at:
>[<c000000000058218>] .eeh_add_to_parent_pe+0x318/0x410
>but there are no more locks to release!
>
>other info that might help us debug this:
>no locks held by swapper/0/1.
>
>stack backtrace:
>Call Trace:
>[c00000003e483870] [c000000000013310] .show_stack+0x70/0x1c0 (unreliable)
>[c00000003e483920] [c0000000000d8310] .print_unlock_inbalance_bug+0x110/0x120
>[c00000003e4839b0] [c0000000000d9a50] .lock_release+0x1d0/0x240
>[c00000003e483a60] [c000000000778064] .__mutex_unlock_slowpath+0xb4/0x250
>[c00000003e483b10] [c000000000058218] .eeh_add_to_parent_pe+0x318/0x410
>[c00000003e483bc0] [c00000000005a118] .pseries_eeh_of_probe+0x258/0x2f0
>[c00000003e483cc0] [c000000000032528] .traverse_pci_devices+0xa8/0x150
>[c00000003e483d70] [c000000000aa7288] .eeh_init+0xd4/0x140
>[c00000003e483e00] [c00000000000abc4] .do_one_initcall+0x64/0x1e0
>[c00000003e483ec0] [c000000000a90418] .kernel_init+0x1e8/0x2bc
>[c00000003e483f90] [c00000000002048c] .kernel_thread+0x54/0x70
>EEH: PCI Enhanced I/O Error Handling Enabled
>
>Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>

Acked-by: Gavin Shan <shangw@linux.vnet.ibm.com>

Thanks,
Gavin

>---
> arch/powerpc/platforms/pseries/eeh_pe.c |    5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
>diff --git a/arch/powerpc/platforms/pseries/eeh_pe.c b/arch/powerpc/platforms/pseries/eeh_pe.c
>index 9d35543..797cd18 100644
>--- a/arch/powerpc/platforms/pseries/eeh_pe.c
>+++ b/arch/powerpc/platforms/pseries/eeh_pe.c
>@@ -105,11 +105,8 @@ static struct eeh_pe *eeh_phb_pe_get(struct pci_controller *phb)
> 		 * the PE for PHB has been determined when that
> 		 * was created.
> 		 */
>-		if ((pe->type & EEH_PE_PHB) &&
>-		    pe->phb == phb) {
>-			eeh_unlock();
>+		if ((pe->type & EEH_PE_PHB) && pe->phb == phb)
> 			return pe;
>-		}
> 	}
>
> 	return NULL;
>-- 
>1.7.10
>

Patch

=====================================
[ BUG: bad unlock balance detected! ]
3.6.0-rc5-00338-gcaa1d63-dirty #6 Not tainted
-------------------------------------
swapper/0/1 is trying to release lock (eeh_mutex) at:
[<c000000000058218>] .eeh_add_to_parent_pe+0x318/0x410
but there are no more locks to release!

other info that might help us debug this:
no locks held by swapper/0/1.

stack backtrace:
Call Trace:
[c00000003e483870] [c000000000013310] .show_stack+0x70/0x1c0 (unreliable)
[c00000003e483920] [c0000000000d8310] .print_unlock_inbalance_bug+0x110/0x120
[c00000003e4839b0] [c0000000000d9a50] .lock_release+0x1d0/0x240
[c00000003e483a60] [c000000000778064] .__mutex_unlock_slowpath+0xb4/0x250
[c00000003e483b10] [c000000000058218] .eeh_add_to_parent_pe+0x318/0x410
[c00000003e483bc0] [c00000000005a118] .pseries_eeh_of_probe+0x258/0x2f0
[c00000003e483cc0] [c000000000032528] .traverse_pci_devices+0xa8/0x150
[c00000003e483d70] [c000000000aa7288] .eeh_init+0xd4/0x140
[c00000003e483e00] [c00000000000abc4] .do_one_initcall+0x64/0x1e0
[c00000003e483ec0] [c000000000a90418] .kernel_init+0x1e8/0x2bc
[c00000003e483f90] [c00000000002048c] .kernel_thread+0x54/0x70
EEH: PCI Enhanced I/O Error Handling Enabled

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
---
 arch/powerpc/platforms/pseries/eeh_pe.c |    5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/arch/powerpc/platforms/pseries/eeh_pe.c b/arch/powerpc/platforms/pseries/eeh_pe.c
index 9d35543..797cd18 100644
--- a/arch/powerpc/platforms/pseries/eeh_pe.c
+++ b/arch/powerpc/platforms/pseries/eeh_pe.c
@@ -105,11 +105,8 @@  static struct eeh_pe *eeh_phb_pe_get(struct pci_controller *phb)
 		 * the PE for PHB has been determined when that
 		 * was created.
 		 */
-		if ((pe->type & EEH_PE_PHB) &&
-		    pe->phb == phb) {
-			eeh_unlock();
+		if ((pe->type & EEH_PE_PHB) && pe->phb == phb)
 			return pe;
-		}
 	}
 
 	return NULL;