Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 5 Aug 2012 22:03:13 +0000 (UTC)
From:      Marius Strobl <marius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r239079 - in head/sys/sparc64: include sparc64
Message-ID:  <201208052203.q75M3DfU031424@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marius
Date: Sun Aug  5 22:03:13 2012
New Revision: 239079
URL: http://svn.freebsd.org/changeset/base/239079

Log:
  Merge r236494 from x86:
  
  Isolate the global TTE list lock from data and other locks to prevent false
  sharing within the cache.
  
  MFC after:	3 days

Modified:
  head/sys/sparc64/include/pmap.h
  head/sys/sparc64/sparc64/pmap.c

Modified: head/sys/sparc64/include/pmap.h
==============================================================================
--- head/sys/sparc64/include/pmap.h	Sun Aug  5 21:13:21 2012	(r239078)
+++ head/sys/sparc64/include/pmap.h	Sun Aug  5 22:03:13 2012	(r239079)
@@ -68,6 +68,11 @@ struct pmap {
 	struct	pmap_statistics pm_stats;
 };
 
+struct tte_list_lock {
+	struct rwlock lock;
+	char padding[CACHE_LINE_SIZE - sizeof(struct rwlock)];
+};
+
 #define	PMAP_LOCK(pmap)		mtx_lock(&(pmap)->pm_mtx)
 #define	PMAP_LOCK_ASSERT(pmap, type)					\
 				mtx_assert(&(pmap)->pm_mtx, (type))
@@ -103,7 +108,8 @@ void	pmap_set_kctx(void);
 
 extern	struct pmap kernel_pmap_store;
 #define	kernel_pmap	(&kernel_pmap_store)
-extern	struct rwlock tte_list_global_lock;
+extern	struct tte_list_lock tte_list_global;
+#define	tte_list_global_lock	tte_list_global.lock
 extern	vm_paddr_t phys_avail[];
 extern	vm_offset_t virtual_avail;
 extern	vm_offset_t virtual_end;

Modified: head/sys/sparc64/sparc64/pmap.c
==============================================================================
--- head/sys/sparc64/sparc64/pmap.c	Sun Aug  5 21:13:21 2012	(r239078)
+++ head/sys/sparc64/sparc64/pmap.c	Sun Aug  5 22:03:13 2012	(r239079)
@@ -135,9 +135,11 @@ vm_offset_t vm_max_kernel_address;
 struct pmap kernel_pmap_store;
 
 /*
- * Global tte list lock
+ * Isolate the global TTE list lock from data and other locks to prevent
+ * false sharing within the cache (see also the declaration of struct
+ * tte_list_lock).
  */
-struct rwlock tte_list_global_lock;
+struct tte_list_lock tte_list_global __aligned(CACHE_LINE_SIZE);
 
 /*
  * Allocate physical memory for use in pmap_bootstrap.
@@ -672,7 +674,7 @@ pmap_bootstrap(u_int cpu_impl)
 		pm->pm_context[i] = TLB_CTX_KERNEL;
 	CPU_FILL(&pm->pm_active);
 
- 	/*
+	/*
 	 * Initialize the global tte list lock, which is more commonly
 	 * known as the pmap pv global lock.
 	 */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201208052203.q75M3DfU031424>