linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RESEND][PATCH v2] powerpc: Export thread_struct.used_vr/used_vsr to user space
@ 2016-04-06  7:00 Simon Guo
  2016-04-12  2:58 ` Simon Guo
  2016-07-05  5:40 ` [RESEND, " Michael Ellerman
  0 siblings, 2 replies; 4+ messages in thread
From: Simon Guo @ 2016-04-06  7:00 UTC (permalink / raw)
  To: Michael Ellerman
  Cc: Benjamin Herrenschmidt, Paul Mackerras, Kees Cook,
	Rashmica Gupta, Simon Guo, linuxppc-dev, linux-kernel,
	Laurent Dufour, Simon Guo

These 2 fields track whether user process has used Altivec/VSX
registers or not. They are used by kernel to setup signal frame
on user stack correctly regarding vector part.

CRIU(Checkpoint and Restore In User space) builds signal frame
for restored process. It will need this export information to
setup signal frame correctly. And CRIU will need to restore these
2 fields for the restored process.

Signed-off-by: Simon Guo <wei.guo.simon@gmail.com>
Reviewed-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
---
 arch/powerpc/include/uapi/asm/ptrace.h | 11 ++++++++++
 arch/powerpc/kernel/ptrace.c           | 39 ++++++++++++++++++++++++++++++++++
 arch/powerpc/kernel/ptrace32.c         |  2 ++
 3 files changed, 52 insertions(+)

diff --git a/arch/powerpc/include/uapi/asm/ptrace.h b/arch/powerpc/include/uapi/asm/ptrace.h
index 8036b38..d5afe95 100644
--- a/arch/powerpc/include/uapi/asm/ptrace.h
+++ b/arch/powerpc/include/uapi/asm/ptrace.h
@@ -176,6 +176,17 @@ struct pt_regs {
 #define PTRACE_GETREGS64	  0x16
 #define PTRACE_SETREGS64	  0x17
 
+/*
+ * Get or set some register used bit.
+ * The flags will be saved in a 32 bit data.
+ * Currently it is only used for VR/VSR usage.
+ */
+#define PTRACE_GET_REGS_USAGE	  0x1e
+#define PTRACE_SET_REGS_USAGE	  0x1f
+
+#define PTRACE_REGS_USAGE_VR_BIT  0x00000001
+#define PTRACE_REGS_USAGE_VSR_BIT 0x00000002
+
 /* Calls to trace a 64bit program from a 32bit program */
 #define PPC_PTRACE_PEEKTEXT_3264 0x95
 #define PPC_PTRACE_PEEKDATA_3264 0x94
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
index 30a03c0..39b8ff2 100644
--- a/arch/powerpc/kernel/ptrace.c
+++ b/arch/powerpc/kernel/ptrace.c
@@ -1755,6 +1755,45 @@ long arch_ptrace(struct task_struct *child, long request,
 					     REGSET_SPE, 0, 35 * sizeof(u32),
 					     datavp);
 #endif
+	case PTRACE_GET_REGS_USAGE:
+		{
+			u32 *u32_datap = (u32 *)datavp;
+			u32 reg_usage = 0;
+
+			if (addr != sizeof(u32))
+				return -EINVAL;
+
+#ifdef CONFIG_ALTIVEC
+			if (child->thread.used_vr)
+				reg_usage |= PTRACE_REGS_USAGE_VR_BIT;
+#endif
+#ifdef CONFIG_VSX
+			if (child->thread.used_vsr)
+				reg_usage |= PTRACE_REGS_USAGE_VSR_BIT;
+#endif
+			return put_user(reg_usage, u32_datap);
+		}
+	case PTRACE_SET_REGS_USAGE:
+		{
+			u32 *u32_datap = (u32 *)datavp;
+			u32 reg_usage = 0;
+
+			if (addr != sizeof(u32))
+				return -EINVAL;
+
+			ret = get_user(reg_usage, u32_datap);
+			if (ret)
+				return ret;
+#ifdef CONFIG_ALTIVEC
+			child->thread.used_vr =
+				!!(reg_usage & PTRACE_REGS_USAGE_VR_BIT);
+#endif
+#ifdef CONFIG_VSX
+			child->thread.used_vsr =
+				!!(reg_usage & PTRACE_REGS_USAGE_VSR_BIT);
+#endif
+			break;
+		}
 
 	default:
 		ret = ptrace_request(child, request, addr, data);
diff --git a/arch/powerpc/kernel/ptrace32.c b/arch/powerpc/kernel/ptrace32.c
index f52b7db..ff359a1 100644
--- a/arch/powerpc/kernel/ptrace32.c
+++ b/arch/powerpc/kernel/ptrace32.c
@@ -305,6 +305,8 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
 	case PPC_PTRACE_GETHWDBGINFO:
 	case PPC_PTRACE_SETHWDEBUG:
 	case PPC_PTRACE_DELHWDEBUG:
+	case PTRACE_GET_REGS_USAGE:
+	case PTRACE_SET_REGS_USAGE:
 		ret = arch_ptrace(child, request, addr, data);
 		break;
 
-- 
2.7.0

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [RESEND][PATCH v2] powerpc: Export thread_struct.used_vr/used_vsr to user space
  2016-04-06  7:00 [RESEND][PATCH v2] powerpc: Export thread_struct.used_vr/used_vsr to user space Simon Guo
@ 2016-04-12  2:58 ` Simon Guo
  2016-07-05  5:40 ` [RESEND, " Michael Ellerman
  1 sibling, 0 replies; 4+ messages in thread
From: Simon Guo @ 2016-04-12  2:58 UTC (permalink / raw)
  To: Michael Ellerman
  Cc: Benjamin Herrenschmidt, Paul Mackerras, Kees Cook,
	Rashmica Gupta, Simon Guo, linuxppc-dev, linux-kernel,
	Laurent Dufour

Hi Michael,
On Wed, Apr 06, 2016 at 03:00:12PM +0800, Simon Guo wrote:
> These 2 fields track whether user process has used Altivec/VSX
> registers or not. They are used by kernel to setup signal frame
> on user stack correctly regarding vector part.
> 
> CRIU(Checkpoint and Restore In User space) builds signal frame
> for restored process. It will need this export information to
> setup signal frame correctly. And CRIU will need to restore these
> 2 fields for the restored process.
> 
> Signed-off-by: Simon Guo <wei.guo.simon@gmail.com>
> Reviewed-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
> ---

Is there any chance that this patch can be merged upstream soon? 
The corresponding work of CRIU has to follow after that.

Thanks,
Simon

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [RESEND, v2] powerpc: Export thread_struct.used_vr/used_vsr to user space
  2016-07-05  5:40 ` [RESEND, " Michael Ellerman
@ 2016-07-04 21:08   ` Simon Guo
  0 siblings, 0 replies; 4+ messages in thread
From: Simon Guo @ 2016-07-04 21:08 UTC (permalink / raw)
  To: Michael Ellerman
  Cc: Kees Cook, Rashmica Gupta, linux-kernel, Simon Guo,
	Paul Mackerras, Laurent Dufour, linuxppc-dev

Hi Michael,
On Tue, Jul 05, 2016 at 03:40:40PM +1000, Michael Ellerman wrote:
> On Wed, 2016-06-04 at 07:00:12 UTC, Simon Guo wrote:
> > These 2 fields track whether user process has used Altivec/VSX
> > registers or not. They are used by kernel to setup signal frame
> > on user stack correctly regarding vector part.
> > 
> > CRIU(Checkpoint and Restore In User space) builds signal frame
> > for restored process. It will need this export information to
> > setup signal frame correctly. And CRIU will need to restore these
> > 2 fields for the restored process.
> > 
> > Signed-off-by: Simon Guo <wei.guo.simon@gmail.com>
> > Reviewed-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
> > @@ -176,6 +176,17 @@ struct pt_regs {
> >  #define PTRACE_GETREGS64	  0x16
> >  #define PTRACE_SETREGS64	  0x17
> >  
> > +/*
> > + * Get or set some register used bit.
> > + * The flags will be saved in a 32 bit data.
> > + * Currently it is only used for VR/VSR usage.
> > + */
> > +#define PTRACE_GET_REGS_USAGE	  0x1e
> > +#define PTRACE_SET_REGS_USAGE	  0x1f
> > +
> > +#define PTRACE_REGS_USAGE_VR_BIT  0x00000001
> > +#define PTRACE_REGS_USAGE_VSR_BIT 0x00000002
> 
> 
> It looks like you just made up this new ptrace ABI ?
> 
> Or is it used on other arches ? (no AFAICS)
> 
> How do other arches handle this ?
> 
> I'm a bit wary of adding new ptrace ABIs.
> 
> If we do want to do this, I'd at least think the mask should be u64, to give us
> more capacity to add new registers.
> 
> cheers

It is only used on PowerPc currently. I had better rename
it to:
#define PPC_PTRACE_GET_REGS_USAGE        0x96
#define PPC_PTRACE_SET_REGS_USAGE        0x97

I will change the mask into u64. 

Thanks,
- Simon

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [RESEND, v2] powerpc: Export thread_struct.used_vr/used_vsr to user space
  2016-04-06  7:00 [RESEND][PATCH v2] powerpc: Export thread_struct.used_vr/used_vsr to user space Simon Guo
  2016-04-12  2:58 ` Simon Guo
@ 2016-07-05  5:40 ` Michael Ellerman
  2016-07-04 21:08   ` Simon Guo
  1 sibling, 1 reply; 4+ messages in thread
From: Michael Ellerman @ 2016-07-05  5:40 UTC (permalink / raw)
  To: Simon Guo
  Cc: Kees Cook, Simon Guo, Rashmica Gupta, linux-kernel, Simon Guo,
	Paul Mackerras, Laurent Dufour, linuxppc-dev

On Wed, 2016-06-04 at 07:00:12 UTC, Simon Guo wrote:
> These 2 fields track whether user process has used Altivec/VSX
> registers or not. They are used by kernel to setup signal frame
> on user stack correctly regarding vector part.
> 
> CRIU(Checkpoint and Restore In User space) builds signal frame
> for restored process. It will need this export information to
> setup signal frame correctly. And CRIU will need to restore these
> 2 fields for the restored process.
> 
> Signed-off-by: Simon Guo <wei.guo.simon@gmail.com>
> Reviewed-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
> 
> diff --git a/arch/powerpc/include/uapi/asm/ptrace.h b/arch/powerpc/include/uapi/asm/ptrace.h
> index 8036b38..d5afe95 100644
> --- a/arch/powerpc/include/uapi/asm/ptrace.h
> +++ b/arch/powerpc/include/uapi/asm/ptrace.h
> @@ -176,6 +176,17 @@ struct pt_regs {
>  #define PTRACE_GETREGS64	  0x16
>  #define PTRACE_SETREGS64	  0x17
>  
> +/*
> + * Get or set some register used bit.
> + * The flags will be saved in a 32 bit data.
> + * Currently it is only used for VR/VSR usage.
> + */
> +#define PTRACE_GET_REGS_USAGE	  0x1e
> +#define PTRACE_SET_REGS_USAGE	  0x1f
> +
> +#define PTRACE_REGS_USAGE_VR_BIT  0x00000001
> +#define PTRACE_REGS_USAGE_VSR_BIT 0x00000002


It looks like you just made up this new ptrace ABI ?

Or is it used on other arches ? (no AFAICS)

How do other arches handle this ?

I'm a bit wary of adding new ptrace ABIs.

If we do want to do this, I'd at least think the mask should be u64, to give us
more capacity to add new registers.

cheers

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-07-05 10:35 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-06  7:00 [RESEND][PATCH v2] powerpc: Export thread_struct.used_vr/used_vsr to user space Simon Guo
2016-04-12  2:58 ` Simon Guo
2016-07-05  5:40 ` [RESEND, " Michael Ellerman
2016-07-04 21:08   ` Simon Guo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).