Thread (20 messages) 20 messages, 6 authors, 2016-12-06
STALE3463d
Revisions (5)
  1. rfc [diff vs current]
  2. rfc [diff vs current]
  3. rfc [diff vs current]
  4. rfc current
  5. rfc [diff vs current]

[RFC PATCH 00/29] arm64: Scalable Vector Extension core support

From: Florian Weimer <hidden>
Date: 2016-12-02 16:34:33

Possibly related (same subject, not in this thread)

On 12/02/2016 12:48 PM, Dave Martin wrote:
On Wed, Nov 30, 2016 at 01:38:28PM +0100, Florian Weimer wrote:

[...]
quoted
We could add a system call to get the right stack size.  But as it depends
on VL, I'm not sure what it looks like.  Particularly if you need determine
the stack size before creating a thread that uses a specific VL setting.
I missed this point previously -- apologies for that.

What would you think of:

	set_vl(vl_for_new_thread);
	minsigstksz = get_minsigstksz();
	set_vl(my_vl);

This avoids get_minsigstksz() requiring parameters -- which is mainly a
concern because the parameters tomorrow might be different from the
parameters today.

If it is possible to create the new thread without any SVE-dependent code,
then we could

	set_vl(vl_for_new_thread);
	new_thread_stack = malloc(get_minsigstksz());
	new_thread = create_thread(..., new_thread_stack);
	set_vl(my_vl);

which has the nice property that the new thread directly inherits the
configuration that was used for get_minsigstksz().
Because all SVE registers are caller-saved, it's acceptable to 
temporarily reduce the VL value, I think.  So this should work.

One complication is that both the kernel and the libc need to reserve 
stack space, so the kernel-returned value and the one which has to be 
used in reality will be different.
However, it would be necessary to prevent GCC from moving any code
across these statements -- in particular, SVE code that access VL-
dependent data spilled on the stack is liable to go wrong if reordered
with the above.  So the sequence would need to go in an external
function (or a single asm...)
I would talk to GCC folks?we have similar issues with changing the FPU 
rounding mode, I assume.

Thanks,
Florian
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help