| // SPDX-License-Identifier: GPL-2.0 |
| /* |
| * Common Primitives 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; |
| } |