Loading...
Note: File does not exist in v5.9.
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) 2021 ARM Limited
4 *
5 * Check that the SME vector length reported in signal contexts is the
6 * 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};