[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20121221185115.1858ffc5@annuminas.surriel.com>
Date: Fri, 21 Dec 2012 18:51:15 -0500
From: Rik van Riel <riel@...hat.com>
To: linux-kernel@...r.kernel.org
Cc: aquini@...hat.com, walken@...gle.com, lwoodman@...hat.com,
jeremy@...p.org, Jan Beulich <JBeulich@...ell.com>,
Thomas Gleixner <tglx@...utronix.de>
Subject: [RFC PATCH 2/3] x86,smp: proportional backoff for ticket spinlocks
Subject: x86,smp: proportional backoff for ticket spinlocks
Simple fixed value proportional backoff for ticket spinlocks.
By pounding on the cacheline with the spin lock less often,
bus traffic is reduced. In cases of a data structure with
embedded spinlock, the lock holder has a better chance of
making progress.
Signed-off-by: Rik van Riel <riel@...hat.com>
---
arch/x86/kernel/smp.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c
index 20da354..4e44840 100644
--- a/arch/x86/kernel/smp.c
+++ b/arch/x86/kernel/smp.c
@@ -118,9 +118,11 @@ static bool smp_no_nmi_ipi = false;
void ticket_spin_lock_wait(arch_spinlock_t *lock, struct __raw_tickets inc)
{
for (;;) {
- cpu_relax();
- inc.head = ACCESS_ONCE(lock->tickets.head);
+ int loops = 50 * (__ticket_t)(inc.tail - inc.head);
+ while (loops--)
+ cpu_relax();
+ inc.head = ACCESS_ONCE(lock->tickets.head);
if (inc.head == inc.tail)
break;
}
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists