1// SPDX-License-Identifier: MIT
2/*
3 * Copyright �� 2020 Intel Corporation
4 */
5
6/* Just a quick and causal check of the shmem_utils API */
7
8static int igt_shmem_basic(void *ignored)
9{
10	u32 datum = 0xdeadbeef, result;
11	struct file *file;
12	u32 *map;
13	int err;
14
15	file = shmem_create_from_data("mock", &datum, sizeof(datum));
16	if (IS_ERR(file))
17		return PTR_ERR(file);
18
19	result = 0;
20	err = shmem_read(file, 0, &result, sizeof(result));
21	if (err)
22		goto out_file;
23
24	if (result != datum) {
25		pr_err("Incorrect read back from shmemfs: %x != %x\n",
26		       result, datum);
27		err = -EINVAL;
28		goto out_file;
29	}
30
31	result = 0xc0ffee;
32	err = shmem_write(file, 0, &result, sizeof(result));
33	if (err)
34		goto out_file;
35
36	map = shmem_pin_map(file);
37	if (!map) {
38		err = -ENOMEM;
39		goto out_file;
40	}
41
42	if (*map != result) {
43		pr_err("Incorrect read back via mmap of last write: %x != %x\n",
44		       *map, result);
45		err = -EINVAL;
46		goto out_map;
47	}
48
49out_map:
50	shmem_unpin_map(file, map);
51out_file:
52	fput(file);
53	return err;
54}
55
56int shmem_utils_mock_selftests(void)
57{
58	static const struct i915_subtest tests[] = {
59		SUBTEST(igt_shmem_basic),
60	};
61
62	return i915_subtests(tests, NULL);
63}
64