ARM: pxa: add memory resource to SA1100 RTC device
[deliverable/linux.git] / kernel / trace / trace_kprobe.c
index b7d0cdd9906c1ff3e76f964f28f3a88661be2c59..c9956440d0e609c51e2032f6f625c4061ba764a4 100644 (file)
@@ -165,11 +165,9 @@ DEFINE_BASIC_FETCH_FUNCS(memory)
 static void FETCH_FUNC_NAME(memory, string)(struct pt_regs *regs,
                                            void *addr, void *dest)
 {
-       long ret;
        int maxlen = get_rloc_len(*(u32 *)dest);
        u8 *dst = get_rloc_data(dest);
-       u8 *src = addr;
-       mm_segment_t old_fs = get_fs();
+       long ret;
 
        if (!maxlen)
                return;
@@ -178,23 +176,13 @@ static void FETCH_FUNC_NAME(memory, string)(struct pt_regs *regs,
         * Try to get string again, since the string can be changed while
         * probing.
         */
-       set_fs(KERNEL_DS);
-       pagefault_disable();
-
-       do
-               ret = __copy_from_user_inatomic(dst++, src++, 1);
-       while (dst[-1] && ret == 0 && src - (u8 *)addr < maxlen);
-
-       dst[-1] = '\0';
-       pagefault_enable();
-       set_fs(old_fs);
+       ret = strncpy_from_unsafe(dst, addr, maxlen);
 
        if (ret < 0) {  /* Failed to fetch string */
-               ((u8 *)get_rloc_data(dest))[0] = '\0';
+               dst[0] = '\0';
                *(u32 *)dest = make_data_rloc(0, get_rloc_offs(*(u32 *)dest));
        } else {
-               *(u32 *)dest = make_data_rloc(src - (u8 *)addr,
-                                             get_rloc_offs(*(u32 *)dest));
+               *(u32 *)dest = make_data_rloc(ret, get_rloc_offs(*(u32 *)dest));
        }
 }
 NOKPROBE_SYMBOL(FETCH_FUNC_NAME(memory, string));
This page took 0.027806 seconds and 5 git commands to generate.