public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 21/21] i386 Ldt context inline
@ 2005-11-08  4:42 Zachary Amsden
  2005-11-08  7:46 ` Ingo Molnar
  2005-11-10 14:11 ` Andi Kleen
  0 siblings, 2 replies; 3+ messages in thread
From: Zachary Amsden @ 2005-11-08  4:42 UTC (permalink / raw)
  To: Andrew Morton, Chris Wright, Linus Torvalds,
	Linux Kernel Mailing List, Virtualization Mailing List,
	H. Peter Anvin, Zwane Mwaikambo, Martin Bligh,
	Pratap Subrahmanyam, Christopher Li, Eric W. Biederman,
	Ingo Molnar, Zachary Amsden, Zachary Amsden

I was also able to get the LDT switching functionality out of the
critical path in switch_mm, which reduces the number of function calls,
potential TLB misses and code size.

Signed-off-by: Zachary Amsden <zach@vmware.com>
Index: linux-2.6.14-zach-work/include/asm-i386/desc.h
===================================================================
--- linux-2.6.14-zach-work.orig/include/asm-i386/desc.h	2005-11-05 02:30:35.000000000 -0800
+++ linux-2.6.14-zach-work/include/asm-i386/desc.h	2005-11-05 02:32:51.000000000 -0800
@@ -271,6 +271,9 @@ static inline void restore_bios_segments
 	put_cpu();
 }
 
+extern void destroy_ldt(mm_context_t *pc);
+extern int copy_ldt(mm_context_t *new, mm_context_t *old);
+
 #endif /* !__ASSEMBLY__ */
 
 #endif
Index: linux-2.6.14-zach-work/include/asm-i386/mmu_context.h
===================================================================
--- linux-2.6.14-zach-work.orig/include/asm-i386/mmu_context.h	2005-11-05 02:30:35.000000000 -0800
+++ linux-2.6.14-zach-work/include/asm-i386/mmu_context.h	2005-11-05 02:32:51.000000000 -0800
@@ -10,9 +10,28 @@
 /*
  * Used for LDT copy/destruction.
  */
-int init_new_context(struct task_struct *tsk, struct mm_struct *mm);
-void destroy_context(struct mm_struct *mm);
+static inline int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
+{
+	struct mm_struct * old_mm;
+	int retval = 0;
+
+	memset(&mm->context, 0, sizeof(mm->context));
+	init_MUTEX(&mm->context.sem);
+	old_mm = current->mm;
+	if (old_mm && unlikely(old_mm->context.ldt)) {
+		retval = copy_ldt(&mm->context, &old_mm->context);
+	}
+	return retval;
+}
 
+/*
+ * No need to lock the MM as we are the last user
+ */
+static inline void destroy_context(struct mm_struct *mm)
+{
+	if (unlikely(mm->context.ldt))
+		destroy_ldt(&mm->context);
+}
 
 static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
 {
Index: linux-2.6.14-zach-work/arch/i386/kernel/ldt.c
===================================================================
--- linux-2.6.14-zach-work.orig/arch/i386/kernel/ldt.c	2005-11-05 02:32:28.000000000 -0800
+++ linux-2.6.14-zach-work/arch/i386/kernel/ldt.c	2005-11-05 02:33:24.000000000 -0800
@@ -103,29 +103,6 @@ void destroy_ldt(mm_context_t *pc)
 	pc->ldt = NULL;
 }
 
-int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
-{
-	struct mm_struct * old_mm;
-	int retval = 0;
-
-	memset(&mm->context, 0, sizeof(mm->context));
-	init_MUTEX(&mm->context.sem);
-	old_mm = current->mm;
-	if (old_mm && unlikely(old_mm->context.ldt)) {
-		retval = copy_ldt(&mm->context, &old_mm->context);
-	}
-	return retval;
-}
-
-/*
- * No need to lock the MM as we are the last user
- */
-void destroy_context(struct mm_struct *mm)
-{
-	if (unlikely(mm->context.ldt))
-		destroy_ldt(&mm->context);
-}
-
 static int read_ldt(void __user * ptr, unsigned long bytecount)
 {
 	int err;

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH 21/21] i386 Ldt context inline
  2005-11-08  4:42 [PATCH 21/21] i386 Ldt context inline Zachary Amsden
@ 2005-11-08  7:46 ` Ingo Molnar
  2005-11-10 14:11 ` Andi Kleen
  1 sibling, 0 replies; 3+ messages in thread
From: Ingo Molnar @ 2005-11-08  7:46 UTC (permalink / raw)
  To: Zachary Amsden
  Cc: Andrew Morton, Chris Wright, Linus Torvalds,
	Linux Kernel Mailing List, Virtualization Mailing List,
	H. Peter Anvin, Zwane Mwaikambo, Martin Bligh,
	Pratap Subrahmanyam, Christopher Li, Eric W. Biederman


* Zachary Amsden <zach@vmware.com> wrote:

> +	if (old_mm && unlikely(old_mm->context.ldt)) {
> +		retval = copy_ldt(&mm->context, &old_mm->context);
> +	}

style police: remove the { }. You only moved the function, but still :-)

	Ingo

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH 21/21] i386 Ldt context inline
  2005-11-08  4:42 [PATCH 21/21] i386 Ldt context inline Zachary Amsden
  2005-11-08  7:46 ` Ingo Molnar
@ 2005-11-10 14:11 ` Andi Kleen
  1 sibling, 0 replies; 3+ messages in thread
From: Andi Kleen @ 2005-11-10 14:11 UTC (permalink / raw)
  To: virtualization
  Cc: Zachary Amsden, Andrew Morton, Chris Wright, Linus Torvalds,
	Linux Kernel Mailing List, H. Peter Anvin, Zwane Mwaikambo,
	Martin Bligh, Pratap Subrahmanyam, Christopher Li,
	Eric W. Biederman, Ingo Molnar

On Tuesday 08 November 2005 05:42, Zachary Amsden wrote:
> I was also able to get the LDT switching functionality out of the
> critical path in switch_mm, which reduces the number of function calls,
> potential TLB misses and code size.

Hmm - i don't think your description matches the patch. Or where is
the critical path here?

-Andi

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2005-11-10 14:12 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-11-08  4:42 [PATCH 21/21] i386 Ldt context inline Zachary Amsden
2005-11-08  7:46 ` Ingo Molnar
2005-11-10 14:11 ` Andi Kleen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox