/* 019.c COPYRIGHT FUJITSU LIMITED 2017-2019 */ /* prctl(PR_SVE_SET_VL) parameters pattern check. */ #include #include #include #include #include "common.h" TEST_FUNC(TEST_NUMBER, vl, unused1, unused2, unused3) { int ret = 0, func_ret = 0; int i, j; struct params { unsigned int vl; unsigned int flags; }; struct params unsup_vl[] = { { UNSPPORT_VL, 0 } }; struct params inval_vl[] = { { INVALID_VL_1, 0 }, { INVALID_VL_2, 0 }, { INVALID_VL_3, 0 } }; struct params inval_fl[] = { { vl, PR_SVE_INVALID_FLAGS } }; struct { char *pattern_string; struct params *param; int param_count; } testcases[] = { { "unsupport VL", unsup_vl, ARRAY_SIZE(unsup_vl) }, { "invalid VL", inval_vl, ARRAY_SIZE(inval_vl) }, { "invalid FLAGS", inval_fl, ARRAY_SIZE(inval_fl) } }; print_test_overview(tp_num); for (i = 0; i < ARRAY_SIZE(testcases); i++) { printf("check %d : %s setting.\n", i, testcases[i].pattern_string); for (j = 0; j < testcases[i].param_count; j++) { func_ret = set_and_compare_vl( testcases[i].param[j].vl | testcases[i].param[j].flags); if (func_ret != EINVAL) { printf("%s (%d, %d) setting succeeded.\n", testcases[i].pattern_string, testcases[i].param[j].vl, testcases[i].param[j].flags); printf("RESULT: NG.\n"); ret = -1; goto out; } } } printf("RESULT: OK.\n"); out: return ret; }