+ check (CVE-2026-0861, bsc#1256766, BZ #33796) +- nss-dns-getnetbyaddr.patch: resolv: Fix NSS DNS backend for getnetbyaddr + (CVE-2026-0915, bsc#1256822, BZ #33802) +- nptl-optimize-trylock.patch: nptl: Optimize trylock for high cache + contention workloads (bsc#1256436, BZ #33704) +- wordexp-wrde-reuse.patch: posix: Reset wordexp_t fields with WRDE_REUSE + (CVE-2025-15281, bsc#1257005, BZ #33814)
51 lines
1.7 KiB
Diff
51 lines
1.7 KiB
Diff
From d861635092a5ad3499baf18b2ff955b778734a0e Mon Sep 17 00:00:00 2001
|
|
From: Sunil K Pandey <sunil.k.pandey@intel.com>
|
|
Date: Tue, 9 Dec 2025 08:57:44 -0800
|
|
Subject: [PATCH] nptl: Optimize trylock for high cache contention workloads
|
|
(BZ #33704)
|
|
|
|
Check lock availability before acquisition to reduce cache line
|
|
bouncing. Significantly improves trylock throughput on multi-core
|
|
systems under heavy contention.
|
|
|
|
Tested on x86_64.
|
|
|
|
Fixes BZ #33704.
|
|
|
|
Co-authored-by: Alex M Wells <alex.m.wells@intel.com>
|
|
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
|
|
(cherry picked from commit 63716823dbad9482e09972907ae98e9cb00f9b86)
|
|
---
|
|
nptl/pthread_mutex_trylock.c | 8 ++++++--
|
|
1 file changed, 6 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/nptl/pthread_mutex_trylock.c b/nptl/pthread_mutex_trylock.c
|
|
index 720c103f3f..6cf47403dd 100644
|
|
--- a/nptl/pthread_mutex_trylock.c
|
|
+++ b/nptl/pthread_mutex_trylock.c
|
|
@@ -48,7 +48,8 @@ ___pthread_mutex_trylock (pthread_mutex_t *mutex)
|
|
return 0;
|
|
}
|
|
|
|
- if (lll_trylock (mutex->__data.__lock) == 0)
|
|
+ if (atomic_load_relaxed (&(mutex->__data.__lock)) == 0
|
|
+ && lll_trylock (mutex->__data.__lock) == 0)
|
|
{
|
|
/* Record the ownership. */
|
|
mutex->__data.__owner = id;
|
|
@@ -71,7 +72,10 @@ ___pthread_mutex_trylock (pthread_mutex_t *mutex)
|
|
/*FALL THROUGH*/
|
|
case PTHREAD_MUTEX_ADAPTIVE_NP:
|
|
case PTHREAD_MUTEX_ERRORCHECK_NP:
|
|
- if (lll_trylock (mutex->__data.__lock) != 0)
|
|
+ /* Mutex type is already loaded, lock check overhead should
|
|
+ be minimal. */
|
|
+ if (atomic_load_relaxed (&(mutex->__data.__lock)) != 0
|
|
+ || lll_trylock (mutex->__data.__lock) != 0)
|
|
break;
|
|
|
|
/* Record the ownership. */
|
|
--
|
|
2.52.0
|
|
|