brintos

brintos / linux-shallow public Read only

0
0
Text · 1.3 KiB · 75f387f Raw
69 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (C) 2021 ARM Limited4 *5 * Check that the SME vector length reported in signal contexts is the6 * expected one.7 */8 9#include <signal.h>10#include <ucontext.h>11#include <sys/prctl.h>12 13#include "test_signals_utils.h"14#include "testcases.h"15 16struct fake_sigframe sf;17unsigned int vl;18 19static bool get_sme_vl(struct tdescr *td)20{21	int ret = prctl(PR_SME_GET_VL);22	if (ret == -1)23		return false;24 25	vl = ret;26 27	return true;28}29 30static int sme_vl(struct tdescr *td, siginfo_t *si, ucontext_t *uc)31{32	size_t resv_sz, offset;33	struct _aarch64_ctx *head = GET_SF_RESV_HEAD(sf);34	struct za_context *za;35 36	/* Get a signal context which should have a ZA frame in it */37	if (!get_current_context(td, &sf.uc, sizeof(sf.uc)))38		return 1;39 40	resv_sz = GET_SF_RESV_SIZE(sf);41	head = get_header(head, ZA_MAGIC, resv_sz, &offset);42	if (!head) {43		fprintf(stderr, "No ZA context\n");44		return 1;45	}46	za = (struct za_context *)head;47 48	if (za->vl != vl) {49		fprintf(stderr, "ZA sigframe VL %u, expected %u\n",50			za->vl, vl);51		return 1;52	} else {53		fprintf(stderr, "got expected VL %u\n", vl);54	}55 56	td->pass = 1;57 58	return 0;59}60 61struct tdescr tde = {62	.name = "SME VL",63	.descr = "Check that we get the right SME VL reported",64	.feats_required = FEAT_SME,65	.timeout = 3,66	.init = get_sme_vl,67	.run = sme_vl,68};69