On Wed, Jul 28, 2021 at 01:59:18PM +0100, Mark Brown wrote: > On Wed, Jul 28, 2021 at 10:41:58AM +0100, Dave Martin wrote: > > On Tue, Jul 27, 2021 at 07:06:49PM +0100, Mark Brown wrote: > > > > We provide interfaces for configuring the SVE vector length seen by > > > processes using prctl and also via /proc for configuring the default > > > values. Provide tests that exercise all these interfaces and verify that > > > they take effect as expected, though at present no test fully enumerates > > > all the possible vector lengths. > > > Does "at present" mean that this test doesn't do it either? > > > (It doesn't seem to try every VL, unless I've missed something? Is this > > planned?) > > Nothing currently does it, and nor does this patch. Planned is a strong > term but yes, ideally we should probe all the VLs. > > > > +#include <stddef.h> > > > +#include <stdio.h> > > > +#include <stdlib.h> > > > > Not used? ^ > > We call exit() which is declared in stdlib.h. Ignore me, I confused exit() with _exit(). > > > +#define MIN_VL 16 > > > <asm/sigcontext.h> has SVE_MIN_VL. Maybe we can use that everywhere > > these days? > > I partly wanted the vector type neutral name, and I'm considering > modifying the sysfs ABI file to define 0 as a valid vector length for > consistency with accepting -1 as the maximum since SME doesn't have any > architected guarantees as to which particular vector lengths are defined. I see what you mean, but it is more than mere coincidence that this is the same value as SVE_MIN_VL. You could view SVE as defining the base architecture which SME then extends. Perhaps #define ARCH_MIN_VL SVE_MIN_VL /* architectural minimim VL */ would be neutral enough. Anyway, I won't lose sleep over it. > > > +/* Verify that we can write a minimum value and have it take effect */ > > > +void proc_write_min(struct vec_data *data) > > > Could be proc_write_check_min() (though the "check" is a bit more > > redundant here; from "write" it's clear that this function actually > > does something nontrivial). > > TBH I'm not sure people will be excssively confused by the idea that a > test would validate the values it was trying to read or write were > accurate. It's not 100% clear that this is a test until one has read all the way to the end of the file. But now that I understand the pattern here I wouldn't be too concerned, and the comment accurately describes what the function does. > > > > +/* Can we read back a VL from prctl? */ > > > > It's certainly possible. > > The comment is describing what the test is verifying. Ignore that, I somehow read the comment as something like [TODO] Can we read back a VL via ptrace? which is not what the comment says. > > Since this would test different kernel paths from getting the child > > itself to do RVDL / PR_SVE_GET_VL, it would be a different test though. > > I think this diff is still good, but beefing up the ptrace tests to do > > the appropriate checks would be good too (if we don't have that already). > > Yes, the ptrace stuff could have a bit more coverage. > > > > + proc_write_min, > > > + proc_write_max, > > > Can we also check what happens when writing unsupported values here? > > We could. > > > If this patch is more about establishing the framework, these could be > > TODOs for now. > > It definitely feels like something we can do incrementally. Is it worth committing a TODO list somewhere? There's always the possibility that someone else gets interested and contributes some tests for us; otherwise, at least it makes it harder to forget them. > > Can we be a good citizen and restore sve_default_vector_length to its > > original value? > > We do that in the tests that fiddle with the default vector length, it > seems useful to keep it at a value different from min and max as much as > possible to increase the chance that we notice a failure to set things. Ah right, I hadn't understood that proc_read_default() reads the default and then the subsequent tests write it back. This might be a bit clearer if the setup code was clearly separate from the tests, but so long as the ordering requirements are clearly documented that seems reasonably OK. In: > +test_type tests[] = { > + /* > + * The default/min/max tests must be first to provide data for > + * other tests. > + */ > + proc_read_default, > + proc_write_min, > + proc_write_max, can you also comment that proc_read_default needs to come first among these? > + > + prctl_get, > + prctl_set, > + prctl_set_no_child, > + prctl_set_for_child, > + prctl_set_onexec, > +}; [...] Cheers ---Dave