root/drivers/gpu/drm/i915/gt/st_shmem_utils.c
// SPDX-License-Identifier: MIT
/*
 * Copyright © 2020 Intel Corporation
 */

/* Just a quick and causal check of the shmem_utils API */

static int igt_shmem_basic(void *ignored)
{
        u32 datum = 0xdeadbeef, result;
        struct file *file;
        u32 *map;
        int err;

        file = shmem_create_from_data("mock", &datum, sizeof(datum));
        if (IS_ERR(file))
                return PTR_ERR(file);

        result = 0;
        err = shmem_read(file, 0, &result, sizeof(result));
        if (err)
                goto out_file;

        if (result != datum) {
                pr_err("Incorrect read back from shmemfs: %x != %x\n",
                       result, datum);
                err = -EINVAL;
                goto out_file;
        }

        result = 0xc0ffee;
        err = shmem_write(file, 0, &result, sizeof(result));
        if (err)
                goto out_file;

        map = shmem_pin_map(file);
        if (!map) {
                err = -ENOMEM;
                goto out_file;
        }

        if (*map != result) {
                pr_err("Incorrect read back via mmap of last write: %x != %x\n",
                       *map, result);
                err = -EINVAL;
                goto out_map;
        }

out_map:
        shmem_unpin_map(file, map);
out_file:
        fput(file);
        return err;
}

int shmem_utils_mock_selftests(void)
{
        static const struct i915_subtest tests[] = {
                SUBTEST(igt_shmem_basic),
        };

        return i915_subtests(tests, NULL);
}