Thread (100 messages) 100 messages, 8 authors, 2017-10-09
STALE3158d

[PATCH v2 19/28] arm64/sve: ptrace and ELF coredump support

From: Okamoto, Takayuki <hidden>
Date: 2017-09-07 05:11:45
Also in: kvmarm, linux-arch

Hi Dave,

Thank you for your reply.
Your fix looks correct and seems to work.  For stylistic reasons, I may
write it like this instead, but the effect should be the same:

	header->max_vl = sve_max_vl;
	if (WARN_ON(!sve_vl_valid(sve_max_vl))
		header->max_vl = header->vl;
It is better than my fix.
Please, apply it at next version.

Best regards,
Takayuki Okamoto
-----Original Message-----
From: linux-arm-kernel
[mailto:linux-arm-kernel-bounces at lists.infradead.org] On Behalf Of Dave
Martin
Sent: Thursday, September 7, 2017 3:17 AM
To: Okamoto, Takayuki <redacted>
Cc: linux-arch at vger.kernel.org; libc-alpha at sourceware.org; Ard
Biesheuvel [off-list ref]; Szabolcs Nagy
[off-list ref]; gdb at sourceware.org; Yao Qi [off-list ref];
Alan Hayward [off-list ref]; Will Deacon [off-list ref];
Oleg Nesterov [off-list ref]; Richard Sandiford
[off-list ref]; Alexander Viro [off-list ref];
Catalin Marinas [off-list ref]; Alex Benn?e
[off-list ref]; kvmarm at lists.cs.columbia.edu;
linux-arm-kernel at lists.infradead.org
Subject: Re: [PATCH v2 19/28] arm64/sve: ptrace and ELF coredump support

On Wed, Sep 06, 2017 at 04:21:50PM +0000, Okamoto, Takayuki wrote:
quoted
Hi Dave,

I am an engineer of the postK computer from Fujitsu.

When I tried to read "max_vl" by ptrace with this patch on our local SVE
simulator, it was read as zero.
I think the cause of this incident is that "max_vl" is set as "header->vl"
only on warning case in sve_init_header_from_task().
"max_vl" should be set up also on normal case, like the following patch.

--- a/arch/arm64/kernel/ptrace.c
+++ b/arch/arm64/kernel/ptrace.c
@@ -755,6 +755,8 @@ static void sve_init_header_from_task(struct
user_sve_header *header,
quoted
        if (WARN_ON(!sve_vl_valid(sve_max_vl)))
                header->max_vl = header->vl;
+       else
+               header->max_vl = sve_max_vl;

        header->size = SVE_PT_SIZE(vq, header->flags);
        header->max_size =
SVE_PT_SIZE(sve_vq_from_vl(header->max_vl),

Hi, thanks for reporting this.

It looks like a refactoring mistake I made while removing BUG_ON()s,
which I missed in my testing.

Your fix looks correct and seems to work.  For stylistic reasons, I may
write it like this instead, but the effect should be the same:

	header->max_vl = sve_max_vl;
	if (WARN_ON(!sve_vl_valid(sve_max_vl))
		header->max_vl = header->vl;

Cheers
---Dave
quoted

Best regards,
Takayuki Okamoto

-----Original Message-----
From: gdb-owner at sourceware.org [mailto:gdb-owner at sourceware.org] On
Behalf Of Dave Martin
quoted
Sent: Friday, September 1, 2017 2:01 AM
To: linux-arm-kernel at lists.infradead.org
Cc: Catalin Marinas <catalin.marinas@arm.com>; Will Deacon
[off-list ref]; Ard Biesheuvel [off-list ref]; Alex
Benn?e [off-list ref]; Szabolcs Nagy [off-list ref];
Richard Sandiford [off-list ref];
kvmarm at lists.cs.columbia.edu; libc-alpha at sourceware.org;
linux-arch at vger.kernel.org; gdb at sourceware.org; Alan Hayward
[off-list ref]; Yao Qi [off-list ref]; Oleg Nesterov
[off-list ref]; Alexander Viro [off-list ref]
quoted
Subject: [PATCH v2 19/28] arm64/sve: ptrace and ELF coredump support
[...]
quoted
@@ -702,6 +737,210 @@ static int system_call_set(struct task_struct
*target,
quoted
 	return ret;
 }

+#ifdef CONFIG_ARM64_SVE
+
+static void sve_init_header_from_task(struct user_sve_header *header,
+				      struct task_struct *target)
+{
+	unsigned int vq;
+
+	memset(header, 0, sizeof(*header));
+
+	header->flags = test_tsk_thread_flag(target, TIF_SVE) ?
+		SVE_PT_REGS_SVE : SVE_PT_REGS_FPSIMD;
+	if (test_tsk_thread_flag(target, TIF_SVE_VL_INHERIT))
+		header->flags |= SVE_PT_VL_INHERIT;
+
+	header->vl = target->thread.sve_vl;
+	vq = sve_vq_from_vl(header->vl);
+
+	if (WARN_ON(!sve_vl_valid(sve_max_vl)))
+		header->max_vl = header->vl;
+
+	header->size = SVE_PT_SIZE(vq, header->flags);
+	header->max_size = SVE_PT_SIZE(sve_vq_from_vl(header->max_vl),
+				      SVE_PT_REGS_SVE);
+}
[...]

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help