162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Common Primitives for DAMON Modules 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Author: SeongJae Park <sjpark@amazon.de> 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <linux/damon.h> 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include "modules-common.h" 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci/* 1362306a36Sopenharmony_ci * Allocate, set, and return a DAMON context for the physical address space. 1462306a36Sopenharmony_ci * @ctxp: Pointer to save the point to the newly created context 1562306a36Sopenharmony_ci * @targetp: Pointer to save the point to the newly created target 1662306a36Sopenharmony_ci */ 1762306a36Sopenharmony_ciint damon_modules_new_paddr_ctx_target(struct damon_ctx **ctxp, 1862306a36Sopenharmony_ci struct damon_target **targetp) 1962306a36Sopenharmony_ci{ 2062306a36Sopenharmony_ci struct damon_ctx *ctx; 2162306a36Sopenharmony_ci struct damon_target *target; 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci ctx = damon_new_ctx(); 2462306a36Sopenharmony_ci if (!ctx) 2562306a36Sopenharmony_ci return -ENOMEM; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci if (damon_select_ops(ctx, DAMON_OPS_PADDR)) { 2862306a36Sopenharmony_ci damon_destroy_ctx(ctx); 2962306a36Sopenharmony_ci return -EINVAL; 3062306a36Sopenharmony_ci } 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci target = damon_new_target(); 3362306a36Sopenharmony_ci if (!target) { 3462306a36Sopenharmony_ci damon_destroy_ctx(ctx); 3562306a36Sopenharmony_ci return -ENOMEM; 3662306a36Sopenharmony_ci } 3762306a36Sopenharmony_ci damon_add_target(ctx, target); 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci *ctxp = ctx; 4062306a36Sopenharmony_ci *targetp = target; 4162306a36Sopenharmony_ci return 0; 4262306a36Sopenharmony_ci} 43