[PATCH] x86: vget_cycles() __always_inline - Kernel

This is a discussion on [PATCH] x86: vget_cycles() __always_inline - Kernel ; Mark vget_cycles() as __always_inline, so gcc is never tempted to make the vsyscall vread_tsc() dive into kernel text, with resulting SIGSEGV. This was a self-inflicted wound: I've not seen that happen with unhacked sources; but for debug reasons I'd changed ...

+ Reply to Thread
Results 1 to 2 of 2

Thread: [PATCH] x86: vget_cycles() __always_inline

  1. [PATCH] x86: vget_cycles() __always_inline

    Mark vget_cycles() as __always_inline, so gcc is never tempted to make
    the vsyscall vread_tsc() dive into kernel text, with resulting SIGSEGV.

    This was a self-inflicted wound: I've not seen that happen with unhacked
    sources; but for debug reasons I'd changed my x86/Makefile to compile
    no-unit-at-a-time, and that in conjunction with OPTIMIZE_INLINING=y
    ended up with vget_cycles() in kernel text. Perhaps it can happen
    in other ways: safer to use __always_inline.

    Signed-off-by: Hugh Dickins
    ---

    include/asm-x86/tsc.h | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- 2.6.25-mm1/include/asm-x86/tsc.h 2008-04-18 12:18:34.000000000 +0100
    +++ linux/include/asm-x86/tsc.h 2008-04-24 19:12:32.000000000 +0100
    @@ -32,7 +32,7 @@ static inline cycles_t get_cycles(void)
    return ret;
    }

    -static inline cycles_t vget_cycles(void)
    +static __always_inline cycles_t vget_cycles(void)
    {
    /*
    * We only do VDSOs on TSC capable CPUs, so this shouldnt
    --
    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/

  2. Re: [PATCH] x86: vget_cycles() __always_inline


    * Hugh Dickins wrote:

    > Mark vget_cycles() as __always_inline, so gcc is never tempted to make
    > the vsyscall vread_tsc() dive into kernel text, with resulting
    > SIGSEGV.
    >
    > This was a self-inflicted wound: I've not seen that happen with
    > unhacked sources; but for debug reasons I'd changed my x86/Makefile to
    > compile no-unit-at-a-time, and that in conjunction with
    > OPTIMIZE_INLINING=y ended up with vget_cycles() in kernel text.
    > Perhaps it can happen in other ways: safer to use __always_inline.


    applied, thanks Hugh - i agree that this is worth fixing.

    Ingo
    --
    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/

+ Reply to Thread