From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
To: Guenter Roeck <linux@roeck-us.net>, sparclinux@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, Boqun Feng <boqun.feng@gmail.com>,
Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Thomas Gleixner <tglx@linutronix.de>,
Waiman Long <longman@redhat.com>, Will Deacon <will@kernel.org>,
"David S. Miller" <davem@davemloft.net>,
Andreas Larsson <andreas@gaisler.com>
Subject: [PATCH] sparc/pci: Make pci_poke_lock a raw_spinlock_t.
Date: Mon, 25 Nov 2024 09:53:14 +0100 [thread overview]
Message-ID: <20241125085314.1iSDFulg@linutronix.de> (raw)
In-Reply-To: <7656395b-58fc-4874-a9f3-6d934e2ef7ee@roeck-us.net>
The pci_poke_lock is used underneath of the pci_lock. The pci_lock is a
low level lock used by the core code in sections with disabled
insterrupts. Therefore the pci_poke_lock must be a raw_spinlock_t.
Make pci_poke_lock a raw_spinlock_t.
Reported-by: Guenter Roeck <linux@roeck-us.net>
Closes: https://lore.kernel.org/7656395b-58fc-4874-a9f3-6d934e2ef7ee@roeck-us.net
Fixes: 560af5dc839ee ("lockdep: Enable PROVE_RAW_LOCK_NESTING with PROVE_LOCKING.")
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
On 2024-11-23 08:27:08 [-0800], Guenter Roeck wrote:
>
> Is this a problem with the test or with the platform ?
platform. The patch below should fix it. It makes no difference unless
used on PREEMPT_RT. Since sparc does not support it I made the fixes
where the default option changed.
Could you test it, please? I don't have a even a compiler for sparc
right now.
arch/sparc/kernel/pci.c | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/arch/sparc/kernel/pci.c b/arch/sparc/kernel/pci.c
index 50a0927a84a6f..12e0b78cded55 100644
--- a/arch/sparc/kernel/pci.c
+++ b/arch/sparc/kernel/pci.c
@@ -42,14 +42,14 @@ volatile int pci_poke_in_progress;
volatile int pci_poke_cpu = -1;
volatile int pci_poke_faulted;
-static DEFINE_SPINLOCK(pci_poke_lock);
+static DEFINE_RAW_SPINLOCK(pci_poke_lock);
void pci_config_read8(u8 *addr, u8 *ret)
{
unsigned long flags;
u8 byte;
- spin_lock_irqsave(&pci_poke_lock, flags);
+ raw_spin_lock_irqsave(&pci_poke_lock, flags);
pci_poke_cpu = smp_processor_id();
pci_poke_in_progress = 1;
pci_poke_faulted = 0;
@@ -63,7 +63,7 @@ void pci_config_read8(u8 *addr, u8 *ret)
pci_poke_cpu = -1;
if (!pci_poke_faulted)
*ret = byte;
- spin_unlock_irqrestore(&pci_poke_lock, flags);
+ raw_spin_unlock_irqrestore(&pci_poke_lock, flags);
}
void pci_config_read16(u16 *addr, u16 *ret)
@@ -71,7 +71,7 @@ void pci_config_read16(u16 *addr, u16 *ret)
unsigned long flags;
u16 word;
- spin_lock_irqsave(&pci_poke_lock, flags);
+ raw_spin_lock_irqsave(&pci_poke_lock, flags);
pci_poke_cpu = smp_processor_id();
pci_poke_in_progress = 1;
pci_poke_faulted = 0;
@@ -85,7 +85,7 @@ void pci_config_read16(u16 *addr, u16 *ret)
pci_poke_cpu = -1;
if (!pci_poke_faulted)
*ret = word;
- spin_unlock_irqrestore(&pci_poke_lock, flags);
+ raw_spin_unlock_irqrestore(&pci_poke_lock, flags);
}
void pci_config_read32(u32 *addr, u32 *ret)
@@ -93,7 +93,7 @@ void pci_config_read32(u32 *addr, u32 *ret)
unsigned long flags;
u32 dword;
- spin_lock_irqsave(&pci_poke_lock, flags);
+ raw_spin_lock_irqsave(&pci_poke_lock, flags);
pci_poke_cpu = smp_processor_id();
pci_poke_in_progress = 1;
pci_poke_faulted = 0;
@@ -107,14 +107,14 @@ void pci_config_read32(u32 *addr, u32 *ret)
pci_poke_cpu = -1;
if (!pci_poke_faulted)
*ret = dword;
- spin_unlock_irqrestore(&pci_poke_lock, flags);
+ raw_spin_unlock_irqrestore(&pci_poke_lock, flags);
}
void pci_config_write8(u8 *addr, u8 val)
{
unsigned long flags;
- spin_lock_irqsave(&pci_poke_lock, flags);
+ raw_spin_lock_irqsave(&pci_poke_lock, flags);
pci_poke_cpu = smp_processor_id();
pci_poke_in_progress = 1;
pci_poke_faulted = 0;
@@ -126,14 +126,14 @@ void pci_config_write8(u8 *addr, u8 val)
: "memory");
pci_poke_in_progress = 0;
pci_poke_cpu = -1;
- spin_unlock_irqrestore(&pci_poke_lock, flags);
+ raw_spin_unlock_irqrestore(&pci_poke_lock, flags);
}
void pci_config_write16(u16 *addr, u16 val)
{
unsigned long flags;
- spin_lock_irqsave(&pci_poke_lock, flags);
+ raw_spin_lock_irqsave(&pci_poke_lock, flags);
pci_poke_cpu = smp_processor_id();
pci_poke_in_progress = 1;
pci_poke_faulted = 0;
@@ -145,14 +145,14 @@ void pci_config_write16(u16 *addr, u16 val)
: "memory");
pci_poke_in_progress = 0;
pci_poke_cpu = -1;
- spin_unlock_irqrestore(&pci_poke_lock, flags);
+ raw_spin_unlock_irqrestore(&pci_poke_lock, flags);
}
void pci_config_write32(u32 *addr, u32 val)
{
unsigned long flags;
- spin_lock_irqsave(&pci_poke_lock, flags);
+ raw_spin_lock_irqsave(&pci_poke_lock, flags);
pci_poke_cpu = smp_processor_id();
pci_poke_in_progress = 1;
pci_poke_faulted = 0;
@@ -164,7 +164,7 @@ void pci_config_write32(u32 *addr, u32 val)
: "memory");
pci_poke_in_progress = 0;
pci_poke_cpu = -1;
- spin_unlock_irqrestore(&pci_poke_lock, flags);
+ raw_spin_unlock_irqrestore(&pci_poke_lock, flags);
}
static int ofpci_verbose;
--
2.45.2
next prev parent reply other threads:[~2024-11-25 8:53 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-09 15:45 [PATCH 0/1] lockdep: Enable PROVE_RAW_LOCK_NESTING with PROVE_LOCKING Sebastian Andrzej Siewior
2024-10-09 15:45 ` [PATCH 1/1] " Sebastian Andrzej Siewior
2024-10-09 16:50 ` Waiman Long
2024-10-09 22:47 ` Boqun Feng
2024-10-22 21:53 ` [tip: locking/core] " tip-bot2 for Sebastian Andrzej Siewior
2024-11-23 16:27 ` [PATCH 1/1] " Guenter Roeck
2024-11-25 8:53 ` Sebastian Andrzej Siewior [this message]
2024-11-25 17:01 ` [PATCH] sparc/pci: Make pci_poke_lock a raw_spinlock_t Guenter Roeck
2024-11-25 17:43 ` Sebastian Andrzej Siewior
2024-11-25 17:59 ` Guenter Roeck
2024-11-25 18:12 ` Sebastian Andrzej Siewior
2024-11-25 19:23 ` Guenter Roeck
2024-11-25 19:33 ` Waiman Long
2024-11-25 20:06 ` Guenter Roeck
2024-11-25 20:23 ` Guenter Roeck
2024-11-25 20:54 ` Waiman Long
2024-11-25 21:25 ` Guenter Roeck
2024-11-25 21:29 ` Waiman Long
2024-11-25 21:54 ` Guenter Roeck
2024-11-25 22:33 ` Waiman Long
2024-11-26 11:20 ` Sebastian Andrzej Siewior
2024-11-26 16:59 ` Waiman Long
2024-11-27 15:39 ` Andreas Larsson
2024-11-27 16:02 ` Guenter Roeck
2024-11-27 16:53 ` Sebastian Andrzej Siewior
2024-11-27 17:44 ` Guenter Roeck
2024-11-27 23:47 ` Waiman Long
2024-11-28 0:08 ` Guenter Roeck
2024-11-28 0:31 ` Waiman Long
2024-11-28 1:17 ` Guenter Roeck
2024-11-28 1:55 ` Waiman Long
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=20241125085314.1iSDFulg@linutronix.de \
--to=bigeasy@linutronix.de \
--cc=andreas@gaisler.com \
--cc=boqun.feng@gmail.com \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=longman@redhat.com \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=sparclinux@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=will@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.