lkml.org 
[lkml]   [2013]   [Jul]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[RFC] [PATCH 2/2] x86: make jump_label use int3-based patching
    Make jump labels use text_poke_bp() for text patching instead of 
    text_poke_smp(), avoiding the need for stop_machine().

    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    ---
    arch/x86/kernel/jump_label.c | 16 ++++++++++++++--
    1 files changed, 14 insertions(+), 2 deletions(-)

    diff --git a/arch/x86/kernel/jump_label.c b/arch/x86/kernel/jump_label.c
    index 2889b3d..460f5d9 100644
    --- a/arch/x86/kernel/jump_label.c
    +++ b/arch/x86/kernel/jump_label.c
    @@ -37,7 +37,19 @@ static void __jump_label_transform(struct jump_entry *entry,
    } else
    memcpy(&code, ideal_nops[NOP_ATOMIC5], JUMP_LABEL_NOP_SIZE);

    - (*poker)((void *)entry->code, &code, JUMP_LABEL_NOP_SIZE);
    + /*
    + * Make text_poke_bp() a default fallback poker.
    + *
    + * At the time the change is being done, just ignore whether we
    + * are doing nop -> jump or jump -> nop transition, and assume
    + * always nop being the 'currently valid' instruction
    + *
    + */
    + if (poker)
    + (*poker)((void *)entry->code, &code, JUMP_LABEL_NOP_SIZE);
    + else
    + text_poke_bp((void *)entry->code, &code, JUMP_LABEL_NOP_SIZE,
    + (void *)entry->code + JUMP_LABEL_NOP_SIZE);
    }

    void arch_jump_label_transform(struct jump_entry *entry,
    @@ -45,7 +57,7 @@ void arch_jump_label_transform(struct jump_entry *entry,
    {
    get_online_cpus();
    mutex_lock(&text_mutex);
    - __jump_label_transform(entry, type, text_poke_smp);
    + __jump_label_transform(entry, type, NULL);
    mutex_unlock(&text_mutex);
    put_online_cpus();
    }
    --
    1.7.3.1


    \
     
     \ /
      Last update: 2013-07-11 00:07    [W:3.838 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site