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