From: Brian Gerst <bgerst@quark.didntduck.org>
To: Linus Torvalds <torvalds@transmeta.com>
Cc: Andi Kleen <ak@suse.de>,
mingo@elte.hu, linux-kernel@vger.kernel.org, davej@suse.de
Subject: Re: Intel P6 vs P7 system call performance
Date: Wed, 18 Dec 2002 00:25:38 -0500 [thread overview]
Message-ID: <3E0006D2.3000907@quark.didntduck.org> (raw)
In-Reply-To: <Pine.LNX.4.44.0212170850250.2702-100000@home.transmeta.com>
[-- Attachment #1: Type: text/plain, Size: 1538 bytes --]
Linus Torvalds wrote:
>
> On 17 Dec 2002, Andi Kleen wrote:
>
>>Linus Torvalds <torvalds@transmeta.com> writes:
>>
>>>That NMI problem is pretty fundamentally unfixable due to the stupid
>>>sysenter semantics, but we could just make the NMI handlers be real
>>>careful about it and fix it up if it happens.
>>
>>You just have to make the NMI a task gate with an own TSS, then the
>>microcode will set up an own stack for you.
>
>
> Actually, I came up with a much simpler solution (which I didn't yet
> implement, but should be just a few lines).
>
> The simpler solution is to just make the temporary ESP stack _look_ like
> it's a real process - ie make it 8kB per CPU (instead of the current 4kB)
> and put a fake "thread_info" at the bottom of it with the right CPU
> number etc. That way if an NMI comes in (in the _extremely_ tiny window),
> it will still see a sane picture of the system. It will basically think
> that we had a micro-task-switch between two instructions.
>
> It's also entirely possible that the NMI window may not actually even
> exist, since I'm not even sure that Intel checks for pending interrupt
> before the first instruction of a trap handler.
How about this patch? Instead of making a per-cpu trampoline, write to
the msr during each context switch. This means that the stack pointer
is valid at all times, and also saves memory and a cache line bounce. I
also included some misc cleanups.
Tested on an Athlon XP.
sysenter: 158.854423 cycles
int80: 273.658134 cycles
--
Brian Gerst
[-- Attachment #2: sysenter-1 --]
[-- Type: text/plain, Size: 5572 bytes --]
diff -urN linux-2.5.52-bk2/arch/i386/kernel/cpu/common.c linux/arch/i386/kernel/cpu/common.c
--- linux-2.5.52-bk2/arch/i386/kernel/cpu/common.c Sat Dec 14 12:32:00 2002
+++ linux/arch/i386/kernel/cpu/common.c Tue Dec 17 23:21:55 2002
@@ -487,7 +487,7 @@
BUG();
enter_lazy_tlb(&init_mm, current, cpu);
- t->esp0 = thread->esp0;
+ load_esp0(t, thread->esp0);
set_tss_desc(cpu,t);
cpu_gdt_table[cpu][GDT_ENTRY_TSS].b &= 0xfffffdff;
load_TR_desc();
diff -urN linux-2.5.52-bk2/arch/i386/kernel/process.c linux/arch/i386/kernel/process.c
--- linux-2.5.52-bk2/arch/i386/kernel/process.c Sat Dec 14 12:32:04 2002
+++ linux/arch/i386/kernel/process.c Tue Dec 17 23:29:54 2002
@@ -440,7 +440,7 @@
/*
* Reload esp0, LDT and the page table pointer:
*/
- tss->esp0 = next->esp0;
+ load_esp0(tss, next->esp0);
/*
* Load the per-thread Thread-Local Storage descriptor.
diff -urN linux-2.5.52-bk2/arch/i386/kernel/sysenter.c linux/arch/i386/kernel/sysenter.c
--- linux-2.5.52-bk2/arch/i386/kernel/sysenter.c Tue Dec 17 23:21:45 2002
+++ linux/arch/i386/kernel/sysenter.c Tue Dec 17 23:31:01 2002
@@ -20,22 +20,12 @@
static void __init enable_sep_cpu(void *info)
{
- unsigned long page = __get_free_page(GFP_ATOMIC);
int cpu = get_cpu();
- unsigned long *esp0_ptr = &(init_tss + cpu)->esp0;
- unsigned long rel32;
+ struct tss_struct *tss = init_tss + cpu;
- rel32 = (unsigned long) sysenter_entry - (page+11);
-
-
- *(short *) (page+0) = 0x258b; /* movl xxxxx,%esp */
- *(long **) (page+2) = esp0_ptr;
- *(char *) (page+6) = 0xe9; /* jmp rl32 */
- *(long *) (page+7) = rel32;
-
- wrmsr(0x174, __KERNEL_CS, 0); /* SYSENTER_CS_MSR */
- wrmsr(0x175, page+PAGE_SIZE, 0); /* SYSENTER_ESP_MSR */
- wrmsr(0x176, page, 0); /* SYSENTER_EIP_MSR */
+ wrmsr(MSR_IA32_SYSENTER_CS, __KERNEL_CS, 0);
+ wrmsr(MSR_IA32_SYSENTER_ESP, tss->esp0, 0);
+ wrmsr(MSR_IA32_SYSENTER_EIP, (unsigned long) sysenter_entry, 0);
printk("Enabling SEP on CPU %d\n", cpu);
put_cpu();
@@ -60,14 +50,15 @@
};
unsigned long page = get_zeroed_page(GFP_ATOMIC);
+ if (cpu_has_sep) {
+ memcpy((void *) page, sysent, sizeof(sysent));
+ enable_sep_cpu(NULL);
+ smp_call_function(enable_sep_cpu, NULL, 1, 1);
+ } else
+ memcpy((void *) page, int80, sizeof(int80));
+
__set_fixmap(FIX_VSYSCALL, __pa(page), PAGE_READONLY);
- memcpy((void *) page, int80, sizeof(int80));
- if (!boot_cpu_has(X86_FEATURE_SEP))
- return 0;
-
- memcpy((void *) page, sysent, sizeof(sysent));
- enable_sep_cpu(NULL);
- smp_call_function(enable_sep_cpu, NULL, 1, 1);
+
return 0;
}
diff -urN linux-2.5.52-bk2/arch/i386/kernel/vm86.c linux/arch/i386/kernel/vm86.c
--- linux-2.5.52-bk2/arch/i386/kernel/vm86.c Sat Dec 14 12:32:02 2002
+++ linux/arch/i386/kernel/vm86.c Tue Dec 17 23:21:55 2002
@@ -113,7 +113,7 @@
do_exit(SIGSEGV);
}
tss = init_tss + smp_processor_id();
- tss->esp0 = current->thread.esp0 = current->thread.saved_esp0;
+ load_esp0(tss, current->thread.saved_esp0);
current->thread.saved_esp0 = 0;
ret = KVM86->regs32;
return ret;
@@ -283,7 +283,8 @@
info->regs32->eax = 0;
tsk->thread.saved_esp0 = tsk->thread.esp0;
tss = init_tss + smp_processor_id();
- tss->esp0 = tsk->thread.esp0 = (unsigned long) &info->VM86_TSS_ESP0;
+ tsk->thread.esp0 = (unsigned long) &info->VM86_TSS_ESP0;
+ load_esp0(tss, tsk->thread.esp0);
tsk->thread.screen_bitmap = info->screen_bitmap;
if (info->flags & VM86_SCREEN_BITMAP)
diff -urN linux-2.5.52-bk2/include/asm-i386/cpufeature.h linux/include/asm-i386/cpufeature.h
--- linux-2.5.52-bk2/include/asm-i386/cpufeature.h Sun Sep 15 22:18:22 2002
+++ linux/include/asm-i386/cpufeature.h Tue Dec 17 23:29:27 2002
@@ -7,6 +7,8 @@
#ifndef __ASM_I386_CPUFEATURE_H
#define __ASM_I386_CPUFEATURE_H
+#include <linux/bitops.h>
+
#define NCAPINTS 4 /* Currently we have 4 32-bit words worth of info */
/* Intel-defined CPU features, CPUID level 0x00000001, word 0 */
@@ -74,6 +76,7 @@
#define cpu_has_pae boot_cpu_has(X86_FEATURE_PAE)
#define cpu_has_pge boot_cpu_has(X86_FEATURE_PGE)
#define cpu_has_apic boot_cpu_has(X86_FEATURE_APIC)
+#define cpu_has_sep boot_cpu_has(X86_FEATURE_SEP)
#define cpu_has_mtrr boot_cpu_has(X86_FEATURE_MTRR)
#define cpu_has_mmx boot_cpu_has(X86_FEATURE_MMX)
#define cpu_has_fxsr boot_cpu_has(X86_FEATURE_FXSR)
diff -urN linux-2.5.52-bk2/include/asm-i386/msr.h linux/include/asm-i386/msr.h
--- linux-2.5.52-bk2/include/asm-i386/msr.h Sat Dec 14 12:32:05 2002
+++ linux/include/asm-i386/msr.h Tue Dec 17 23:21:55 2002
@@ -53,6 +53,10 @@
#define MSR_IA32_BBL_CR_CTL 0x119
+#define MSR_IA32_SYSENTER_CS 0x174
+#define MSR_IA32_SYSENTER_ESP 0x175
+#define MSR_IA32_SYSENTER_EIP 0x176
+
#define MSR_IA32_MCG_CAP 0x179
#define MSR_IA32_MCG_STATUS 0x17a
#define MSR_IA32_MCG_CTL 0x17b
diff -urN linux-2.5.52-bk2/include/asm-i386/processor.h linux/include/asm-i386/processor.h
--- linux-2.5.52-bk2/include/asm-i386/processor.h Sat Dec 14 12:32:08 2002
+++ linux/include/asm-i386/processor.h Tue Dec 17 23:26:16 2002
@@ -14,6 +14,7 @@
#include <asm/types.h>
#include <asm/sigcontext.h>
#include <asm/cpufeature.h>
+#include <asm/msr.h>
#include <linux/cache.h>
#include <linux/config.h>
#include <linux/threads.h>
@@ -416,6 +417,13 @@
{~0, } /* ioperm */ \
}
+static inline void load_esp0(struct tss_struct *tss, unsigned long esp0)
+{
+ tss->esp0 = esp0;
+ if (cpu_has_sep)
+ wrmsr(MSR_IA32_SYSENTER_ESP, esp0, 0);
+}
+
#define start_thread(regs, new_eip, new_esp) do { \
__asm__("movl %0,%%fs ; movl %0,%%gs": :"r" (0)); \
set_fs(USER_DS); \
next prev parent reply other threads:[~2002-12-18 5:17 UTC|newest]
Thread overview: 268+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20021209193649.GC10316@suse.de.suse.lists.linux.kernel>
[not found] ` <Pine.LNX.4.44.0212161639310.1623-100000@penguin.transmeta.com.suse.lists.linux.kernel>
2002-12-17 8:56 ` Andi Kleen
2002-12-17 16:57 ` Linus Torvalds
2002-12-18 5:25 ` Brian Gerst [this message]
2002-12-18 6:06 ` Linus Torvalds
2002-12-21 11:24 ` Ingo Molnar
2002-12-21 17:28 ` Jamie Lokier
2002-12-21 16:07 ` Christian Leber
2003-01-10 18:08 Gabriel Paubert
-- strict thread matches above, loose matches on Subject: below --
2002-12-30 13:06 Manfred Spraul
2002-12-30 14:54 ` Andi Kleen
2002-12-22 15:45 Nakajima, Jun
2002-12-22 12:33 Mikael Pettersson
2002-12-22 16:00 ` Jamie Lokier
2002-12-19 18:46 billyrose
2002-12-19 16:10 billyrose
2002-12-19 15:20 bart
2002-12-19 14:57 bart
2002-12-19 14:40 billyrose
2002-12-19 15:11 ` Richard B. Johnson
2002-12-19 13:55 bart
2002-12-19 19:37 ` Linus Torvalds
2002-12-19 22:10 ` Jamie Lokier
2002-12-19 22:16 ` H. Peter Anvin
2002-12-19 22:22 ` Linus Torvalds
2002-12-19 22:26 ` H. Peter Anvin
2002-12-19 22:49 ` Linus Torvalds
2002-12-19 23:30 ` Linus Torvalds
2002-12-22 11:08 ` James H. Cloos Jr.
2002-12-22 18:49 ` Linus Torvalds
2002-12-22 19:07 ` Ulrich Drepper
2002-12-22 19:34 ` Linus Torvalds
2002-12-22 19:51 ` Ulrich Drepper
2002-12-22 20:50 ` James H. Cloos Jr.
2002-12-22 20:56 ` Ulrich Drepper
2002-12-22 19:17 ` Ulrich Drepper
2002-12-20 10:08 ` Ulrich Drepper
2002-12-20 12:06 ` Jamie Lokier
2002-12-20 16:47 ` Linus Torvalds
2002-12-20 23:38 ` Jamie Lokier
2002-12-20 23:50 ` H. Peter Anvin
2002-12-21 0:09 ` Linus Torvalds
2002-12-21 17:18 ` Jamie Lokier
2002-12-21 19:39 ` Linus Torvalds
2002-12-22 2:18 ` Jamie Lokier
2002-12-22 3:11 ` Linus Torvalds
2002-12-22 10:13 ` Ingo Molnar
2002-12-22 15:32 ` Jamie Lokier
2002-12-22 18:53 ` Linus Torvalds
2002-12-23 5:03 ` Linus Torvalds
2002-12-23 7:14 ` Ulrich Drepper
2002-12-23 23:27 ` Petr Vandrovec
2002-12-24 0:22 ` Stephen Rothwell
2002-12-24 4:10 ` Linus Torvalds
2002-12-24 8:05 ` Rogier Wolff
2002-12-24 18:51 ` Linus Torvalds
2002-12-24 21:10 ` Rogier Wolff
2002-12-27 16:14 ` Kai Henningsen
2002-12-24 19:36 ` Linus Torvalds
2002-12-24 20:20 ` Ingo Molnar
2002-12-24 20:27 ` Linus Torvalds
2002-12-24 20:31 ` Ingo Molnar
2002-12-24 20:39 ` Linus Torvalds
2002-12-28 2:05 ` H. Peter Anvin
2002-12-28 2:04 ` H. Peter Anvin
2002-12-26 7:47 ` Pavel Machek
2003-01-10 11:30 ` Gabriel Paubert
2003-01-10 17:11 ` Linus Torvalds
2002-12-22 10:23 ` Ingo Molnar
2002-12-19 13:22 bart
2002-12-19 13:38 ` Dave Jones
2002-12-19 14:22 ` Jamie Lokier
2002-12-19 16:56 ` Dave Jones
2002-12-19 19:29 ` H. Peter Anvin
2002-12-18 23:51 billyrose
2002-12-19 13:10 ` Richard B. Johnson
2002-12-18 12:55 Terje Eggestad
2002-12-18 20:14 ` H. Peter Anvin
2002-12-18 20:25 ` Richard B. Johnson
2002-12-18 20:26 ` H. Peter Anvin
2002-12-18 22:28 ` Jamie Lokier
2002-12-18 22:37 ` Linus Torvalds
2002-12-18 22:57 ` Linus Torvalds
2002-12-20 0:53 ` Daniel Jacobowitz
2002-12-20 1:47 ` Linus Torvalds
2002-12-20 2:37 ` Daniel Jacobowitz
2002-12-18 22:39 ` H. Peter Anvin
2002-12-18 1:30 Nakajima, Jun
2002-12-18 1:54 ` Ulrich Drepper
2002-12-18 3:36 ` H. Peter Anvin
2002-12-18 4:05 ` Linus Torvalds
2002-12-18 4:36 ` H. Peter Anvin
2002-12-18 4:07 ` Linus Torvalds
2002-12-18 4:40 ` Stephen Rothwell
2002-12-18 4:52 ` Linus Torvalds
2002-12-18 4:53 ` Andrew Morton
2002-12-18 19:12 ` Andrew Morton
2002-12-18 23:45 ` Pavel Machek
2002-12-20 3:05 ` Alan Cox
2002-12-20 4:03 ` Stephen Rothwell
2002-12-18 6:00 ` Brian Gerst
2002-12-17 16:32 Manfred Spraul
2002-12-17 17:13 ` Richard B. Johnson
2002-12-17 17:19 ` Richard B. Johnson
2002-12-17 17:37 ` Mikael Pettersson
2002-12-17 16:14 John Reiser
2002-12-17 16:01 John Reiser
2002-12-15 8:43 scott thomason
2002-12-15 4:06 Albert D. Cahalan
2002-12-15 22:01 ` Pavel Machek
2002-12-16 7:33 ` Albert D. Cahalan
2002-12-16 11:17 ` Pavel Machek
2002-12-16 17:54 ` Mark Mielke
2002-12-16 16:07 ` Jonah Sherman
2002-12-17 4:10 ` David Schwartz
2002-12-17 8:02 ` Helge Hafting
2002-12-16 19:55 ` H. Peter Anvin
2002-12-13 21:52 Margit Schubert-While
2002-12-13 19:32 Dieter Nützel
2002-12-13 17:51 Margit Schubert-While
2002-12-11 12:48 Terje Eggestad
2002-12-11 18:50 ` H. Peter Anvin
2002-12-12 9:42 ` Terje Eggestad
2002-12-12 10:06 ` Arjan van de Ven
2002-12-12 10:31 ` Terje Eggestad
2002-12-12 19:03 ` H. Peter Anvin
2002-12-12 20:36 ` Mark Mielke
2002-12-12 20:56 ` J.A. Magallon
2002-12-12 20:12 ` Zac Hansen
2002-12-13 9:21 ` Terje Eggestad
2002-12-13 15:58 ` Ville Herva
2002-12-13 21:57 ` Terje Eggestad
2002-12-13 22:53 ` H. Peter Anvin
2002-12-12 20:56 ` Vojtech Pavlik
2002-12-09 8:30 Mike Hayward
2002-12-09 15:40 ` erich
2002-12-09 17:48 ` Linus Torvalds
2002-12-09 19:36 ` Dave Jones
2002-12-09 19:46 ` H. Peter Anvin
2002-12-28 20:37 ` Ville Herva
2002-12-29 2:05 ` Christian Leber
2002-12-30 18:22 ` Christian Leber
2002-12-30 21:22 ` Linus Torvalds
2002-12-30 11:29 ` Dave Jones
2002-12-17 0:47 ` Linus Torvalds
2002-12-17 1:03 ` Dave Jones
2002-12-17 2:36 ` Linus Torvalds
2002-12-17 5:55 ` Linus Torvalds
2002-12-17 6:09 ` Linus Torvalds
2002-12-17 6:18 ` Linus Torvalds
2002-12-19 14:03 ` Shuji YAMAMURA
2002-12-17 6:19 ` GrandMasterLee
2002-12-17 6:43 ` dean gaudet
2002-12-17 16:50 ` Linus Torvalds
2002-12-17 19:11 ` H. Peter Anvin
2002-12-17 21:39 ` Benjamin LaHaise
2002-12-17 21:41 ` H. Peter Anvin
2002-12-17 21:53 ` Benjamin LaHaise
2002-12-18 23:53 ` Pavel Machek
2002-12-19 22:18 ` H. Peter Anvin
2002-12-19 22:21 ` Pavel Machek
2002-12-19 22:23 ` H. Peter Anvin
2002-12-19 22:26 ` Pavel Machek
2002-12-19 22:30 ` H. Peter Anvin
2002-12-19 22:34 ` Pavel Machek
2002-12-19 22:36 ` H. Peter Anvin
2002-12-17 19:12 ` H. Peter Anvin
2002-12-17 19:26 ` Martin J. Bligh
2002-12-17 20:51 ` Alan Cox
2002-12-17 20:16 ` H. Peter Anvin
2002-12-17 20:49 ` Alan Cox
2002-12-17 20:12 ` H. Peter Anvin
2002-12-17 9:45 ` Andre Hedrick
2002-12-17 12:40 ` Dave Jones
2002-12-17 23:18 ` Andre Hedrick
2002-12-17 15:12 ` Alan Cox
2002-12-18 23:55 ` Pavel Machek
2002-12-19 22:17 ` H. Peter Anvin
2002-12-17 10:53 ` Ulrich Drepper
2002-12-17 11:17 ` dada1
2002-12-17 17:33 ` Ulrich Drepper
2002-12-17 17:06 ` Linus Torvalds
2002-12-17 17:55 ` Ulrich Drepper
2002-12-17 18:01 ` Linus Torvalds
2002-12-17 19:23 ` Alan Cox
2002-12-17 18:48 ` Ulrich Drepper
2002-12-17 19:19 ` H. Peter Anvin
2002-12-17 19:44 ` Alan Cox
2002-12-17 19:52 ` Richard B. Johnson
2002-12-17 19:54 ` H. Peter Anvin
2002-12-17 19:58 ` Linus Torvalds
2002-12-18 7:20 ` Kai Henningsen
2002-12-17 18:49 ` Linus Torvalds
2002-12-17 19:09 ` Ross Biro
2002-12-17 21:34 ` Benjamin LaHaise
2002-12-17 21:36 ` H. Peter Anvin
2002-12-17 21:50 ` Benjamin LaHaise
2002-12-18 23:59 ` Pavel Machek
2002-12-17 16:12 ` Hugh Dickins
2002-12-17 16:33 ` Richard B. Johnson
2002-12-17 17:47 ` Linus Torvalds
2002-12-17 16:54 ` Hugh Dickins
2002-12-17 17:07 ` Linus Torvalds
2002-12-17 17:19 ` Matti Aarnio
2002-12-17 17:55 ` Linus Torvalds
2002-12-17 18:24 ` Linus Torvalds
2002-12-17 18:33 ` Ulrich Drepper
2002-12-17 18:30 ` Ulrich Drepper
2002-12-17 19:04 ` Linus Torvalds
2002-12-17 19:19 ` Ulrich Drepper
2002-12-17 19:28 ` Linus Torvalds
2002-12-17 19:32 ` H. Peter Anvin
2002-12-17 19:44 ` Linus Torvalds
2002-12-17 19:53 ` Ulrich Drepper
2002-12-17 20:01 ` Linus Torvalds
2002-12-17 20:17 ` Ulrich Drepper
2002-12-18 4:15 ` Linus Torvalds
2002-12-18 4:15 ` Linus Torvalds
2002-12-18 4:39 ` H. Peter Anvin
2002-12-18 4:49 ` Linus Torvalds
2002-12-18 6:38 ` Linus Torvalds
2002-12-18 13:17 ` Richard B. Johnson
2002-12-18 13:40 ` Horst von Brand
2002-12-18 13:47 ` Sean Neakums
2002-12-18 14:10 ` Horst von Brand
2002-12-18 14:51 ` dada1
2002-12-18 19:12 ` Mark Mielke
2002-12-18 15:52 ` Alan Cox
2002-12-18 16:41 ` Dave Jones
2002-12-18 18:41 ` Horst von Brand
2002-12-17 19:26 ` Alan Cox
2002-12-17 18:57 ` Ulrich Drepper
2002-12-17 19:10 ` Linus Torvalds
2002-12-17 19:21 ` H. Peter Anvin
2002-12-17 19:37 ` Linus Torvalds
2002-12-17 19:43 ` H. Peter Anvin
2002-12-17 20:07 ` Matti Aarnio
2002-12-17 20:10 ` H. Peter Anvin
2002-12-17 19:59 ` Matti Aarnio
2002-12-17 20:06 ` Ulrich Drepper
2002-12-17 20:35 ` Daniel Jacobowitz
2002-12-18 0:20 ` Linus Torvalds
2002-12-18 0:38 ` Ulrich Drepper
2002-12-18 7:41 ` Kai Henningsen
2002-12-18 13:00 ` Rogier Wolff
2002-12-17 19:47 ` Dave Jones
2002-12-18 12:57 ` Rogier Wolff
2002-12-19 0:14 ` Pavel Machek
2002-12-17 21:38 ` Benjamin LaHaise
2002-12-17 21:41 ` H. Peter Anvin
2002-12-17 18:39 ` Jeff Dike
2002-12-17 19:05 ` Linus Torvalds
2002-12-18 5:34 ` Jeremy Fitzhardinge
2002-12-18 5:38 ` H. Peter Anvin
2002-12-18 15:50 ` Alan Cox
2002-12-18 23:51 ` Pavel Machek
2002-12-13 15:45 ` William Lee Irwin III
2002-12-13 16:49 ` Mike Hayward
2002-12-14 0:55 ` GrandMasterLee
2002-12-14 4:41 ` Mike Dresser
2002-12-14 4:53 ` Mike Dresser
2002-12-14 10:01 ` Dave Jones
2002-12-14 17:48 ` Mike Dresser
2002-12-14 18:36 ` GrandMasterLee
2002-12-15 2:03 ` J.A. Magallon
2002-12-15 21:59 ` Pavel Machek
2002-12-15 22:37 ` William Lee Irwin III
2002-12-15 22:43 ` Pavel Machek
2002-12-09 7:01 Samium Gromoff
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=3E0006D2.3000907@quark.didntduck.org \
--to=bgerst@quark.didntduck.org \
--cc=ak@suse.de \
--cc=davej@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=torvalds@transmeta.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome