Merge tag 'kvm-3.10-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[firefly-linux-kernel-4.4.55.git] / arch / metag / kernel / ptrace.c
index 47a8828615a5acdcdbcdf7e6f5d16d8bfa249dd7..7563628822bdf638a708816bf4abe8ccb1b2a4db 100644 (file)
@@ -288,10 +288,36 @@ static int metag_rp_state_set(struct task_struct *target,
        return metag_rp_state_copyin(regs, pos, count, kbuf, ubuf);
 }
 
+static int metag_tls_get(struct task_struct *target,
+                       const struct user_regset *regset,
+                       unsigned int pos, unsigned int count,
+                       void *kbuf, void __user *ubuf)
+{
+       void __user *tls = target->thread.tls_ptr;
+       return user_regset_copyout(&pos, &count, &kbuf, &ubuf, &tls, 0, -1);
+}
+
+static int metag_tls_set(struct task_struct *target,
+                       const struct user_regset *regset,
+                       unsigned int pos, unsigned int count,
+                       const void *kbuf, const void __user *ubuf)
+{
+       int ret;
+       void __user *tls;
+
+       ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &tls, 0, -1);
+       if (ret)
+               return ret;
+
+       target->thread.tls_ptr = tls;
+       return ret;
+}
+
 enum metag_regset {
        REGSET_GENERAL,
        REGSET_CBUF,
        REGSET_READPIPE,
+       REGSET_TLS,
 };
 
 static const struct user_regset metag_regsets[] = {
@@ -319,6 +345,14 @@ static const struct user_regset metag_regsets[] = {
                .get = metag_rp_state_get,
                .set = metag_rp_state_set,
        },
+       [REGSET_TLS] = {
+               .core_note_type = NT_METAG_TLS,
+               .n = 1,
+               .size = sizeof(void *),
+               .align = sizeof(void *),
+               .get = metag_tls_get,
+               .set = metag_tls_set,
+       },
 };
 
 static const struct user_regset_view user_metag_view = {