lkml.org 
[lkml]   [2011]   [Oct]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH RFC V3 8/8] x86/jump_label: add arch_jump_label_transform_static()
    Date
    From: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>

    This allows jump-label entries to be cheaply updated on code which is
    not yet live.

    Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
    Cc: Jason Baron <jbaron@redhat.com>
    ---
    arch/x86/kernel/jump_label.c | 20 +++++++++++++++++---
    1 files changed, 17 insertions(+), 3 deletions(-)

    diff --git a/arch/x86/kernel/jump_label.c b/arch/x86/kernel/jump_label.c
    index 2ad0298..ea9d5f2f 100644
    --- a/arch/x86/kernel/jump_label.c
    +++ b/arch/x86/kernel/jump_label.c
    @@ -24,8 +24,9 @@ union jump_code_union {
    } __attribute__((packed));
    };

    -void arch_jump_label_transform(struct jump_entry *entry,
    - enum jump_label_type type)
    +static void __jump_label_transform(struct jump_entry *entry,
    + enum jump_label_type type,
    + void *(*poker)(void *, const void *, size_t))
    {
    union jump_code_union code;

    @@ -35,11 +36,24 @@ void arch_jump_label_transform(struct jump_entry *entry,
    (entry->code + JUMP_LABEL_NOP_SIZE);
    } else
    memcpy(&code, ideal_nops[NOP_ATOMIC5], JUMP_LABEL_NOP_SIZE);
    +
    + (*poker)((void *)entry->code, &code, JUMP_LABEL_NOP_SIZE);
    +}
    +
    +void arch_jump_label_transform(struct jump_entry *entry,
    + enum jump_label_type type)
    +{
    get_online_cpus();
    mutex_lock(&text_mutex);
    - text_poke_smp((void *)entry->code, &code, JUMP_LABEL_NOP_SIZE);
    + __jump_label_transform(entry, type, text_poke_smp);
    mutex_unlock(&text_mutex);
    put_online_cpus();
    }

    +void arch_jump_label_transform_static(struct jump_entry *entry,
    + enum jump_label_type type)
    +{
    + __jump_label_transform(entry, type, text_poke_early);
    +}
    +
    #endif
    --
    1.7.6.4


    \
     
     \ /
      Last update: 2011-10-04 21:21    [W:0.039 / U:0.152 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site