Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1240052 > unrolled thread
| Started by | Andy Lutomirski <luto@kernel.org> |
|---|---|
| First post | 2015-10-06 02:50 +0200 |
| Last post | 2015-10-12 20:20 +0200 |
| Articles | 7 — 5 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH v2 07/36] x86/entry/64/compat: After SYSENTER, move STI after the NT fixup Andy Lutomirski <luto@kernel.org> - 2015-10-06 02:50 +0200
[tip:x86/asm] x86/entry/64/compat: After SYSENTER, move STI after the NT fixup tip-bot for Andy Lutomirski <tipbot@zytor.com> - 2015-10-07 18:20 +0200
Re: [PATCH v2 07/36] x86/entry/64/compat: After SYSENTER, move STI after the NT fixup Denys Vlasenko <dvlasenk@redhat.com> - 2015-10-07 19:40 +0200
Re: [PATCH v2 07/36] x86/entry/64/compat: After SYSENTER, move STI after the NT fixup Andy Lutomirski <luto@amacapital.net> - 2015-10-07 21:10 +0200
Re: [PATCH v2 07/36] x86/entry/64/compat: After SYSENTER, move STI after the NT fixup Andy Lutomirski <luto@amacapital.net> - 2015-10-09 21:50 +0200
Re: [PATCH v2 07/36] x86/entry/64/compat: After SYSENTER, move STI after the NT fixup Denys Vlasenko <dvlasenk@redhat.com> - 2015-10-12 19:50 +0200
Re: [PATCH v2 07/36] x86/entry/64/compat: After SYSENTER, move STI after the NT fixup Brian Gerst <brgerst@gmail.com> - 2015-10-12 20:20 +0200
| From | Andy Lutomirski <luto@kernel.org> |
|---|---|
| Date | 2015-10-06 02:50 +0200 |
| Subject | [PATCH v2 07/36] x86/entry/64/compat: After SYSENTER, move STI after the NT fixup |
| Message-ID | <qgoC6-715-9@gated-at.bofh.it> |
We eventually want to make it all the way into C code before enabling interrupts. We need to rework our flags handling slightly to delay enabling interrupts. Signed-off-by: Andy Lutomirski <luto@kernel.org> --- arch/x86/entry/entry_64_compat.S | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_compat.S index aa76864a8a6b..1432d60a1f4a 100644 --- a/arch/x86/entry/entry_64_compat.S +++ b/arch/x86/entry/entry_64_compat.S @@ -58,14 +58,9 @@ ENDPROC(native_usergs_sysret32) * with the int 0x80 path. */ ENTRY(entry_SYSENTER_compat) - /* - * Interrupts are off on entry. - * We do not frame this tiny irq-off block with TRACE_IRQS_OFF/ON, - * it is too small to ever cause noticeable irq latency. - */ + /* Interrupts are off on entry. */ SWAPGS_UNSAFE_STACK movq PER_CPU_VAR(cpu_current_top_of_stack), %rsp - ENABLE_INTERRUPTS(CLBR_NONE) /* Zero-extending 32-bit regs, do not remove */ movl %ebp, %ebp @@ -76,7 +71,16 @@ ENTRY(entry_SYSENTER_compat) /* Construct struct pt_regs on stack */ pushq $__USER32_DS /* pt_regs->ss */ pushq %rbp /* pt_regs->sp */ - pushfq /* pt_regs->flags */ + + /* + * Push flags. This is nasty. First, interrupts are currently + * off, but we need pt_regs->flags to have IF set. Second, even + * if TF was set when SYSENTER started, it's clear by now. We fix + * that later using TIF_SINGLESTEP. + */ + pushfq /* pt_regs->flags (except IF = 0) */ + orl $X86_EFLAGS_IF, (%rsp) /* Fix saved flags */ + pushq $__USER32_CS /* pt_regs->cs */ pushq %r10 /* pt_regs->ip = thread_info->sysenter_return */ pushq %rax /* pt_regs->orig_ax */ @@ -92,12 +96,22 @@ ENTRY(entry_SYSENTER_compat) * Sysenter doesn't filter flags, so we need to clear NT * ourselves. To save a few cycles, we can check whether * NT was set instead of doing an unconditional popfq. + * This needs to happen before enabling interrupts so that + * we don't get preempted with NT set. */ testl $X86_EFLAGS_NT, EFLAGS(%rsp) jnz sysenter_fix_flags sysenter_flags_fixed: /* + * Re-enable interrupts. IRQ tracing already thinks that IRQs are + * on (since we treat user mode as having IRQs on), and the + * prologue above is too short for it to be worth adding a + * tracing round trip. + */ + ENABLE_INTERRUPTS(CLBR_NONE) + + /* * no need to do an access_ok check here because rbp has been * 32-bit zero extended */ @@ -244,7 +258,7 @@ sysexit_audit: #endif sysenter_fix_flags: - pushq $(X86_EFLAGS_IF|X86_EFLAGS_FIXED) + pushq $X86_EFLAGS_FIXED popfq jmp sysenter_flags_fixed -- 2.4.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | tip-bot for Andy Lutomirski <tipbot@zytor.com> |
|---|---|
| Date | 2015-10-07 18:20 +0200 |
| Subject | [tip:x86/asm] x86/entry/64/compat: After SYSENTER, move STI after the NT fixup |
| Message-ID | <qgZBE-1xt-21@gated-at.bofh.it> |
| In reply to | #1240052 |
Commit-ID: b611acf4736b5b00c89dcc238f640337832abcb4 Gitweb: http://git.kernel.org/tip/b611acf4736b5b00c89dcc238f640337832abcb4 Author: Andy Lutomirski <luto@kernel.org> AuthorDate: Mon, 5 Oct 2015 17:47:55 -0700 Committer: Ingo Molnar <mingo@kernel.org> CommitDate: Wed, 7 Oct 2015 11:34:08 +0200 x86/entry/64/compat: After SYSENTER, move STI after the NT fixup We eventually want to make it all the way into C code before enabling interrupts. We need to rework our flags handling slightly to delay enabling interrupts. Signed-off-by: Andy Lutomirski <luto@kernel.org> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Borislav Petkov <bp@alien8.de> Cc: Brian Gerst <brgerst@gmail.com> Cc: Denys Vlasenko <dvlasenk@redhat.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: linux-kernel@vger.kernel.org Link: http://lkml.kernel.org/r/35d24d2a9305da3182eab7b2cdfd32902e90962c.1444091584.git.luto@kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org> --- arch/x86/entry/entry_64_compat.S | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_compat.S index e2cca89..bc678f0 100644 --- a/arch/x86/entry/entry_64_compat.S +++ b/arch/x86/entry/entry_64_compat.S @@ -58,14 +58,9 @@ ENDPROC(native_usergs_sysret32) * with the int 0x80 path. */ ENTRY(entry_SYSENTER_compat) - /* - * Interrupts are off on entry. - * We do not frame this tiny irq-off block with TRACE_IRQS_OFF/ON, - * it is too small to ever cause noticeable irq latency. - */ + /* Interrupts are off on entry. */ SWAPGS_UNSAFE_STACK movq PER_CPU_VAR(cpu_current_top_of_stack), %rsp - ENABLE_INTERRUPTS(CLBR_NONE) /* Zero-extending 32-bit regs, do not remove */ movl %ebp, %ebp @@ -76,7 +71,16 @@ ENTRY(entry_SYSENTER_compat) /* Construct struct pt_regs on stack */ pushq $__USER32_DS /* pt_regs->ss */ pushq %rbp /* pt_regs->sp */ - pushfq /* pt_regs->flags */ + + /* + * Push flags. This is nasty. First, interrupts are currently + * off, but we need pt_regs->flags to have IF set. Second, even + * if TF was set when SYSENTER started, it's clear by now. We fix + * that later using TIF_SINGLESTEP. + */ + pushfq /* pt_regs->flags (except IF = 0) */ + orl $X86_EFLAGS_IF, (%rsp) /* Fix saved flags */ + pushq $__USER32_CS /* pt_regs->cs */ pushq %r10 /* pt_regs->ip = thread_info->sysenter_return */ pushq %rax /* pt_regs->orig_ax */ @@ -92,12 +96,22 @@ ENTRY(entry_SYSENTER_compat) * Sysenter doesn't filter flags, so we need to clear NT * ourselves. To save a few cycles, we can check whether * NT was set instead of doing an unconditional popfq. + * This needs to happen before enabling interrupts so that + * we don't get preempted with NT set. */ testl $X86_EFLAGS_NT, EFLAGS(%rsp) jnz sysenter_fix_flags sysenter_flags_fixed: /* + * Re-enable interrupts. IRQ tracing already thinks that IRQs are + * on (since we treat user mode as having IRQs on), and the + * prologue above is too short for it to be worth adding a + * tracing round trip. + */ + ENABLE_INTERRUPTS(CLBR_NONE) + + /* * No need to do an access_ok() check here because RBP has been * 32-bit zero extended: */ @@ -244,7 +258,7 @@ sysexit_audit: #endif sysenter_fix_flags: - pushq $(X86_EFLAGS_IF|X86_EFLAGS_FIXED) + pushq $X86_EFLAGS_FIXED popfq jmp sysenter_flags_fixed -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Denys Vlasenko <dvlasenk@redhat.com> |
|---|---|
| Date | 2015-10-07 19:40 +0200 |
| Subject | Re: [PATCH v2 07/36] x86/entry/64/compat: After SYSENTER, move STI after the NT fixup |
| Message-ID | <qh0R3-3eS-1@gated-at.bofh.it> |
| In reply to | #1240052 |
On 10/06/2015 02:47 AM, Andy Lutomirski wrote:
> We eventually want to make it all the way into C code before
> enabling interrupts. We need to rework our flags handling slightly
> to delay enabling interrupts.
>
> Signed-off-by: Andy Lutomirski <luto@kernel.org>
> ---
> arch/x86/entry/entry_64_compat.S | 30 ++++++++++++++++++++++--------
> 1 file changed, 22 insertions(+), 8 deletions(-)
>
> diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_compat.S
> index aa76864a8a6b..1432d60a1f4a 100644
> --- a/arch/x86/entry/entry_64_compat.S
> +++ b/arch/x86/entry/entry_64_compat.S
> @@ -58,14 +58,9 @@ ENDPROC(native_usergs_sysret32)
> * with the int 0x80 path.
> */
> ENTRY(entry_SYSENTER_compat)
> - /*
> - * Interrupts are off on entry.
> - * We do not frame this tiny irq-off block with TRACE_IRQS_OFF/ON,
> - * it is too small to ever cause noticeable irq latency.
> - */
> + /* Interrupts are off on entry. */
> SWAPGS_UNSAFE_STACK
> movq PER_CPU_VAR(cpu_current_top_of_stack), %rsp
> - ENABLE_INTERRUPTS(CLBR_NONE)
>
> /* Zero-extending 32-bit regs, do not remove */
> movl %ebp, %ebp
> @@ -76,7 +71,16 @@ ENTRY(entry_SYSENTER_compat)
> /* Construct struct pt_regs on stack */
> pushq $__USER32_DS /* pt_regs->ss */
> pushq %rbp /* pt_regs->sp */
> - pushfq /* pt_regs->flags */
> +
> + /*
> + * Push flags. This is nasty. First, interrupts are currently
> + * off, but we need pt_regs->flags to have IF set. Second, even
> + * if TF was set when SYSENTER started, it's clear by now. We fix
> + * that later using TIF_SINGLESTEP.
> + */
> + pushfq /* pt_regs->flags (except IF = 0) */
> + orl $X86_EFLAGS_IF, (%rsp) /* Fix saved flags */
The sequence of "push + insn_using_rsp" is a bit slow
on most CPUs because stack engine (the machinery which makes
consecutive pushes fast) needs syncronizing with register file.
It may be better to move the ORL insn here:
push, push, push
cld
sub $(10*8), %rsp /* pt_regs->r8-11, bp, bx, r12-15 not saved */
+ orl $X86_EFLAGS_IF, EFLAGS(%rsp) /* Fix saved flags to have .IF = 1 */
where we already eat that penalty.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Andy Lutomirski <luto@amacapital.net> |
|---|---|
| Date | 2015-10-07 21:10 +0200 |
| Subject | Re: [PATCH v2 07/36] x86/entry/64/compat: After SYSENTER, move STI after the NT fixup |
| Message-ID | <qh2g9-5nJ-7@gated-at.bofh.it> |
| In reply to | #1241708 |
On Wed, Oct 7, 2015 at 10:39 AM, Denys Vlasenko <dvlasenk@redhat.com> wrote: > On 10/06/2015 02:47 AM, Andy Lutomirski wrote: >> We eventually want to make it all the way into C code before >> enabling interrupts. We need to rework our flags handling slightly >> to delay enabling interrupts. >> >> Signed-off-by: Andy Lutomirski <luto@kernel.org> >> --- >> arch/x86/entry/entry_64_compat.S | 30 ++++++++++++++++++++++-------- >> 1 file changed, 22 insertions(+), 8 deletions(-) >> >> diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_compat.S >> index aa76864a8a6b..1432d60a1f4a 100644 >> --- a/arch/x86/entry/entry_64_compat.S >> +++ b/arch/x86/entry/entry_64_compat.S >> @@ -58,14 +58,9 @@ ENDPROC(native_usergs_sysret32) >> * with the int 0x80 path. >> */ >> ENTRY(entry_SYSENTER_compat) >> - /* >> - * Interrupts are off on entry. >> - * We do not frame this tiny irq-off block with TRACE_IRQS_OFF/ON, >> - * it is too small to ever cause noticeable irq latency. >> - */ >> + /* Interrupts are off on entry. */ >> SWAPGS_UNSAFE_STACK >> movq PER_CPU_VAR(cpu_current_top_of_stack), %rsp >> - ENABLE_INTERRUPTS(CLBR_NONE) >> >> /* Zero-extending 32-bit regs, do not remove */ >> movl %ebp, %ebp >> @@ -76,7 +71,16 @@ ENTRY(entry_SYSENTER_compat) >> /* Construct struct pt_regs on stack */ >> pushq $__USER32_DS /* pt_regs->ss */ >> pushq %rbp /* pt_regs->sp */ >> - pushfq /* pt_regs->flags */ >> + >> + /* >> + * Push flags. This is nasty. First, interrupts are currently >> + * off, but we need pt_regs->flags to have IF set. Second, even >> + * if TF was set when SYSENTER started, it's clear by now. We fix >> + * that later using TIF_SINGLESTEP. >> + */ >> + pushfq /* pt_regs->flags (except IF = 0) */ >> + orl $X86_EFLAGS_IF, (%rsp) /* Fix saved flags */ > > The sequence of "push + insn_using_rsp" is a bit slow > on most CPUs because stack engine (the machinery which makes > consecutive pushes fast) needs syncronizing with register file. > > It may be better to move the ORL insn here: > > push, push, push > cld > sub $(10*8), %rsp /* pt_regs->r8-11, bp, bx, r12-15 not saved */ > + orl $X86_EFLAGS_IF, EFLAGS(%rsp) /* Fix saved flags to have .IF = 1 */ > > where we already eat that penalty. > > I'll benchmark this and, if it's a win, I'll tack it on to the end of the series. -- Andy Lutomirski AMA Capital Management, LLC -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Andy Lutomirski <luto@amacapital.net> |
|---|---|
| Date | 2015-10-09 21:50 +0200 |
| Subject | Re: [PATCH v2 07/36] x86/entry/64/compat: After SYSENTER, move STI after the NT fixup |
| Message-ID | <qhLPY-3oh-9@gated-at.bofh.it> |
| In reply to | #1241708 |
On Wed, Oct 7, 2015 at 10:39 AM, Denys Vlasenko <dvlasenk@redhat.com> wrote: > On 10/06/2015 02:47 AM, Andy Lutomirski wrote: >> We eventually want to make it all the way into C code before >> enabling interrupts. We need to rework our flags handling slightly >> to delay enabling interrupts. >> >> Signed-off-by: Andy Lutomirski <luto@kernel.org> >> --- >> arch/x86/entry/entry_64_compat.S | 30 ++++++++++++++++++++++-------- >> 1 file changed, 22 insertions(+), 8 deletions(-) >> >> diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_compat.S >> index aa76864a8a6b..1432d60a1f4a 100644 >> --- a/arch/x86/entry/entry_64_compat.S >> +++ b/arch/x86/entry/entry_64_compat.S >> @@ -58,14 +58,9 @@ ENDPROC(native_usergs_sysret32) >> * with the int 0x80 path. >> */ >> ENTRY(entry_SYSENTER_compat) >> - /* >> - * Interrupts are off on entry. >> - * We do not frame this tiny irq-off block with TRACE_IRQS_OFF/ON, >> - * it is too small to ever cause noticeable irq latency. >> - */ >> + /* Interrupts are off on entry. */ >> SWAPGS_UNSAFE_STACK >> movq PER_CPU_VAR(cpu_current_top_of_stack), %rsp >> - ENABLE_INTERRUPTS(CLBR_NONE) >> >> /* Zero-extending 32-bit regs, do not remove */ >> movl %ebp, %ebp >> @@ -76,7 +71,16 @@ ENTRY(entry_SYSENTER_compat) >> /* Construct struct pt_regs on stack */ >> pushq $__USER32_DS /* pt_regs->ss */ >> pushq %rbp /* pt_regs->sp */ >> - pushfq /* pt_regs->flags */ >> + >> + /* >> + * Push flags. This is nasty. First, interrupts are currently >> + * off, but we need pt_regs->flags to have IF set. Second, even >> + * if TF was set when SYSENTER started, it's clear by now. We fix >> + * that later using TIF_SINGLESTEP. >> + */ >> + pushfq /* pt_regs->flags (except IF = 0) */ >> + orl $X86_EFLAGS_IF, (%rsp) /* Fix saved flags */ > > The sequence of "push + insn_using_rsp" is a bit slow > on most CPUs because stack engine (the machinery which makes > consecutive pushes fast) needs syncronizing with register file. > > It may be better to move the ORL insn here: > > push, push, push > cld > sub $(10*8), %rsp /* pt_regs->r8-11, bp, bx, r12-15 not saved */ > + orl $X86_EFLAGS_IF, EFLAGS(%rsp) /* Fix saved flags to have .IF = 1 */ > > where we already eat that penalty. > I played with it a bit. It seems to save one cycle, which is probably worthwhile. I think that the gain is small because neither case is particular bad. I read Agner Fog's writeup on the stack engine. I think that, with the code as written in my patch, the µops are, roughly: store $__USER32_DS to [rsp - 0] store $rcx to [rsp - 8] store flags to [rsp - 12] sync rsp (rsp -= 12) <-- wait for ALU here or $X86_EFLAGS_IF, $rsp (might be two µops) store $__USER32_CS to [rsp] ... sync rsp (rsp -= something) <-- wait for ALU here testl ... with the change, it's: store $__USER32_DS to [rsp - 0] store $rcx to [rsp - 8] store flags to [rsp - 12] store $__USER32_CS to [rsp-16] ... sync rsp (rsp -= something) sync rsp (rsp -= 12) <-- wait for ALU here or $X86_EFLAGS_IF, EFLAGS($rsp) (might be two µops) testl ... So the change removes one rsp sync and one wait. On the other hand, the ALU is probably otherwise idle for most of this sequence, so the latency is probably almost entirely hidden because the dispatcher can do the rsp syncs much earlier than they appear before reordering. Also, deferring the orl makes the code longer and adds an address calculation, and both of those may have some cost. And moving the orl right before the testl worsens that dependency. It's too bad we don't have orx on all supported CPUs. Anyway, it's still a win, but I'll keep playing. There may be even better ways to do this. --Andy -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Denys Vlasenko <dvlasenk@redhat.com> |
|---|---|
| Date | 2015-10-12 19:50 +0200 |
| Subject | Re: [PATCH v2 07/36] x86/entry/64/compat: After SYSENTER, move STI after the NT fixup |
| Message-ID | <qiPou-64e-23@gated-at.bofh.it> |
| In reply to | #1243628 |
On 10/09/2015 09:48 PM, Andy Lutomirski wrote:
> Anyway, it's still a win, but I'll keep playing. There may be even
> better ways to do this.
Such as this?
Drop OR, check for cleared IF here:
testl $X86_EFLAGS_NT, EFLAGS(%rsp)
jnz sysenter_fix_flags
testl $X86_EFLAGS_IF, EFLAGS(%rsp)
jz sysenter_fix_flags
sysenter_flags_fixed:
and make sysenter_fix_flags code set IF in addition to TF clearing.
This way, we don't even have an unconditional RMW op.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Brian Gerst <brgerst@gmail.com> |
|---|---|
| Date | 2015-10-12 20:20 +0200 |
| Subject | Re: [PATCH v2 07/36] x86/entry/64/compat: After SYSENTER, move STI after the NT fixup |
| Message-ID | <qiPRv-6RC-5@gated-at.bofh.it> |
| In reply to | #1244957 |
On Mon, Oct 12, 2015 at 1:48 PM, Denys Vlasenko <dvlasenk@redhat.com> wrote: > On 10/09/2015 09:48 PM, Andy Lutomirski wrote: >> Anyway, it's still a win, but I'll keep playing. There may be even >> better ways to do this. > > Such as this? > Drop OR, check for cleared IF here: > > testl $X86_EFLAGS_NT, EFLAGS(%rsp) > jnz sysenter_fix_flags > testl $X86_EFLAGS_IF, EFLAGS(%rsp) > jz sysenter_fix_flags > sysenter_flags_fixed: > > and make sysenter_fix_flags code set IF in addition to TF clearing. > This way, we don't even have an unconditional RMW op. IF should normally be set in userspace, but since SYSENTER doesn't save the old flags and always clears IF when entering the kernel, the flags pushed on the stack will always have IF clear. -- Brian Gerst -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web