root/mm/damon/modules-common.c
// SPDX-License-Identifier: GPL-2.0
/*
 * Common Code for DAMON Modules
 *
 * Author: SeongJae Park <sj@kernel.org>
 */

#include <linux/damon.h>

#include "modules-common.h"

/*
 * Allocate, set, and return a DAMON context for the physical address space.
 * @ctxp:       Pointer to save the point to the newly created context
 * @targetp:    Pointer to save the point to the newly created target
 */
int damon_modules_new_paddr_ctx_target(struct damon_ctx **ctxp,
                struct damon_target **targetp)
{
        struct damon_ctx *ctx;
        struct damon_target *target;

        ctx = damon_new_ctx();
        if (!ctx)
                return -ENOMEM;

        if (damon_select_ops(ctx, DAMON_OPS_PADDR)) {
                damon_destroy_ctx(ctx);
                return -EINVAL;
        }

        target = damon_new_target();
        if (!target) {
                damon_destroy_ctx(ctx);
                return -ENOMEM;
        }
        damon_add_target(ctx, target);

        *ctxp = ctx;
        *targetp = target;
        return 0;
}