Re: [PATCH V1 01/13] selftests/resctrl: Fix feature detection

From: Reinette Chatre
Date: Mon Mar 09 2020 - 17:45:02 EST


Hi Sai,

On 3/6/2020 7:40 PM, Sai Praneeth Prakhya wrote:
> From: Reinette Chatre <reinette.chatre@xxxxxxxxx>
>
> The intention of the resctrl selftests is to only run the tests
> associated with the feature(s) supported by the platform. Through
> parsing of the feature flags found in /proc/cpuinfo it is possible
> to learn which features are supported by the plaform.
>
> There are currently two issues with the platform feature detection that
> together result in tests always being run, whether the platform supports
> a feature or not. First, the parsing of the the feature flags loads the
> line containing the flags in a buffer that is too small (256 bytes) to
> always contain all flags. The consequence is that the flags of the features
> being tested for may not be present in the buffer. Second, the actual
> test for presence of a feature has an error in the logic, negating the
> test for a particular feature flag instead of testing for the presence of a
> particular feature flag.
>
> These two issues combined results in all tests being run on all
> platforms, whether the feature is supported or not.
>
> Fix these issue by (1) increasing the buffer size being used to parse
> the feature flags, and (2) change the logic to test for presence of the
> feature being tested for.
>
> Signed-off-by: Reinette Chatre <reinette.chatre@xxxxxxxxx>
> Signed-off-by: Sai Praneeth Prakhya <sai.praneeth.prakhya@xxxxxxxxx>
> ---
> tools/testing/selftests/resctrl/resctrlfs.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/tools/testing/selftests/resctrl/resctrlfs.c b/tools/testing/selftests/resctrl/resctrlfs.c
> index 19c0ec4045a4..226dd7fdcfb1 100644
> --- a/tools/testing/selftests/resctrl/resctrlfs.c
> +++ b/tools/testing/selftests/resctrl/resctrlfs.c
> @@ -596,11 +596,11 @@ bool check_resctrlfs_support(void)
>
> char *fgrep(FILE *inf, const char *str)
> {
> - char line[256];
> int slen = strlen(str);
> + char line[2048];
>
> while (!feof(inf)) {
> - if (!fgets(line, 256, inf))
> + if (!fgets(line, 2048, inf))
> break;
> if (strncmp(line, str, slen))
> continue;
> @@ -631,7 +631,7 @@ bool validate_resctrl_feature_request(char *resctrl_val)
> if (res) {
> char *s = strchr(res, ':');
>
> - found = s && !strstr(s, resctrl_val);
> + found = s && strstr(s, resctrl_val);
> free(res);
> }
> fclose(inf);
>

Please note that this is only a partial fix. The current feature
detection relies on the feature flags found in /proc/cpuinfo. Quirks and
kernel boot parameters are not taken into account. This fix only
addresses the parsing of feature flags. If a feature has been disabled
via kernel boot parameter or quirk then the resctrl tests would still
attempt to run the test for it.

Reinette