* Oleg Nesterov <o...@redhat.com> [2013-03-24 19:21:22]:

> Extract the kmap_atomic/memcpy/kunmap_atomic code from
> xol_get_insn_slot() into the new simple helper, copy_to_page().
> It will have more users soon.
> 
> Signed-off-by: Oleg Nesterov <o...@redhat.com>

Acked-by: Srikar Dronamraju <sri...@linux.vnet.ibm.com>

> ---
>  kernel/events/uprobes.c |   14 ++++++++------
>  1 files changed, 8 insertions(+), 6 deletions(-)
> 
> diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c
> index e5d479f..9d943f7 100644
> --- a/kernel/events/uprobes.c
> +++ b/kernel/events/uprobes.c
> @@ -180,6 +180,13 @@ static void copy_from_page(struct page *page, unsigned 
> long vaddr, void *dst, in
>       kunmap_atomic(kaddr);
>  }
> 
> +static void copy_to_page(struct page *page, unsigned long vaddr, const void 
> *src, int len)
> +{
> +     void *kaddr = kmap_atomic(page);
> +     memcpy(kaddr + (vaddr & ~PAGE_MASK), src, len);
> +     kunmap_atomic(kaddr);
> +}
> +
>  static int verify_opcode(struct page *page, unsigned long vaddr, 
> uprobe_opcode_t *new_opcode)
>  {
>       uprobe_opcode_t old_opcode;
> @@ -1204,9 +1211,7 @@ static unsigned long xol_take_insn_slot(struct xol_area 
> *area)
>  static unsigned long xol_get_insn_slot(struct uprobe *uprobe)
>  {
>       struct xol_area *area;
> -     unsigned long offset;
>       unsigned long xol_vaddr;
> -     void *vaddr;
> 
>       area = get_xol_area();
>       if (!area)
> @@ -1217,10 +1222,7 @@ static unsigned long xol_get_insn_slot(struct uprobe 
> *uprobe)
>               return 0;
> 
>       /* Initialize the slot */
> -     offset = xol_vaddr & ~PAGE_MASK;
> -     vaddr = kmap_atomic(area->page);
> -     memcpy(vaddr + offset, uprobe->arch.insn, MAX_UINSN_BYTES);
> -     kunmap_atomic(vaddr);
> +     copy_to_page(area->page, xol_vaddr, uprobe->arch.insn, MAX_UINSN_BYTES);
>       /*
>        * We probably need flush_icache_user_range() but it needs vma.
>        * This should work on supported architectures too.
> -- 
> 1.5.5.1
> 

-- 
Thanks and Regards
Srikar Dronamraju

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@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 via email to