Adding V-ext regs to signal context w/o expanding kernel struct sigcontext to avoid glibc ABI break
Vineet Gupta
vineetg at rivosinc.com
Wed Jan 4 14:43:04 PST 2023
On 1/4/23 13:29, Philipp Tomsich wrote:
>>>> The new Kconfig CONFIG_RISCV_VSTATE_INIT_ALL seems like a
>>>> hack bolted on top.
>>> IIUC, most opinions suggested that we should keep the default Vector
>>> state to ON in thread:
>>> https://lore.kernel.org/all/20220921214439.1491510-17-stillson@rivosinc.com/T/#u
>> Actually community feedback is that they *don't * want the default
>> vector state to be on due to power implications, increased stack and
>> memory usage for vector contents (in that thread and else where as
>> well). So we should keep it disabled by default, but indeed we could
>> have that Kconfig option to enable it. Granted distro kernels will keep
>> it disabled by default, this lets vendors enable it selectively until
>> the full userspace enabling bits are in place.
> Should we punt this to the ELF (e.g., using a RISC-V specific
> attribute) and take a per-process decision on whether to start in ON
> or OFF?
> I don't feel fully comfortable with a KCONFIG that could change and
> invalidate the assumptions a userspace process could have made…
The Kconfig is just a stop gap for vendors to enable V development while
the full userspace stuff is sorted out.
Indeed RISCV_ATTRIBUTES section has -march info, but we need to do some
development around it to parse it and use it.
There are still corner cases such as non-V executable dlopen a dso - so
kernel elf parser doing this might not cover all cases.
Similar logic will need to be added to glibc loader - eventually.
Adding the full plumbing is a chicken-and-egg problem.
> Alternatively, we could establish the convention of having two stub
> libraries that set up either enabled or disable state from their
> .init_array to provide a mechanism for folks that want to make an
> explicit assumption. Although this may try to overdesign a solution
> for a non-issue.
I was thinking more along the lines of x86 GLIBC_TUNABLES to enable it
via env/sub-shell on a per-task basis - the tunable hook could in turn
verify that Vector support does exist - or it could invoke the prctl
unconditionally (which would fail if V didn't exist etc).
More information about the linux-riscv
mailing list