Lines Matching defs:kdamond
900 /* TODO: support multiple contexts per kdamond */
936 * kdamond directory
950 static int damon_sysfs_kdamond_add_dirs(struct damon_sysfs_kdamond *kdamond)
960 &damon_sysfs_contexts_ktype, &kdamond->kobj,
966 kdamond->contexts = contexts;
971 static void damon_sysfs_kdamond_rm_dirs(struct damon_sysfs_kdamond *kdamond)
973 damon_sysfs_contexts_rm_dirs(kdamond->contexts);
974 kobject_put(&kdamond->contexts->kobj);
982 running = ctx->kdamond != NULL;
988 * enum damon_sysfs_cmd - Commands for a specific kdamond.
991 /* @DAMON_SYSFS_CMD_ON: Turn the kdamond on. */
993 /* @DAMON_SYSFS_CMD_OFF: Turn the kdamond off. */
995 /* @DAMON_SYSFS_CMD_COMMIT: Update kdamond inputs. */
1037 * @kdamond: The kobject wrapper that associated to the kdamond thread.
1042 * request will be handled by the DAMON callback. None-``NULL`` @kdamond means
1047 struct damon_sysfs_kdamond *kdamond;
1056 struct damon_sysfs_kdamond *kdamond = container_of(kobj,
1058 struct damon_ctx *ctx = kdamond->damon_ctx;
1233 struct damon_sysfs_kdamond *kdamond;
1237 kdamond = damon_sysfs_cmd_request.kdamond;
1239 if (kdamond && ctx == kdamond->damon_ctx &&
1261 * @kdamond: The kobject wrapper that associated to the kdamond thread.
1263 * This function reads the schemes stats of specific kdamond and update the
1268 static int damon_sysfs_upd_schemes_stats(struct damon_sysfs_kdamond *kdamond)
1270 struct damon_ctx *ctx = kdamond->damon_ctx;
1275 kdamond->contexts->contexts_arr[0]->schemes, ctx);
1280 struct damon_sysfs_kdamond *kdamond, bool total_bytes_only)
1282 struct damon_ctx *ctx = kdamond->damon_ctx;
1287 kdamond->contexts->contexts_arr[0]->schemes, ctx,
1292 struct damon_sysfs_kdamond *kdamond)
1294 struct damon_ctx *ctx = kdamond->damon_ctx;
1302 struct damon_sysfs_kdamond *kdamond)
1304 struct damon_ctx *ctx = kdamond->damon_ctx;
1309 kdamond->contexts->contexts_arr[0]->schemes, ctx);
1313 struct damon_sysfs_kdamond *kdamond)
1315 return kdamond->damon_ctx &&
1316 damon_sysfs_ctx_running(kdamond->damon_ctx);
1337 * damon_sysfs_commit_input() - Commit user inputs to a running kdamond.
1338 * @kdamond: The kobject wrapper for the associated kdamond.
1340 * If the sysfs input is wrong, the kdamond will be terminated.
1342 static int damon_sysfs_commit_input(struct damon_sysfs_kdamond *kdamond)
1344 if (!damon_sysfs_kdamond_running(kdamond))
1346 /* TODO: Support multiple contexts per kdamond */
1347 if (kdamond->contexts->nr != 1)
1350 return damon_sysfs_apply_inputs(kdamond->damon_ctx,
1351 kdamond->contexts->contexts_arr[0]);
1358 * This function is periodically called back from the kdamond thread for @c.
1363 struct damon_sysfs_kdamond *kdamond;
1371 kdamond = damon_sysfs_cmd_request.kdamond;
1372 if (!kdamond || kdamond->damon_ctx != c)
1376 err = damon_sysfs_upd_schemes_stats(kdamond);
1379 err = damon_sysfs_commit_input(kdamond);
1386 err = damon_sysfs_upd_schemes_regions_start(kdamond,
1393 err = damon_sysfs_upd_schemes_regions_stop(kdamond);
1398 err = damon_sysfs_clear_schemes_regions(kdamond);
1404 damon_sysfs_cmd_request.kdamond = NULL;
1433 static int damon_sysfs_turn_damon_on(struct damon_sysfs_kdamond *kdamond)
1438 if (damon_sysfs_kdamond_running(kdamond))
1440 if (damon_sysfs_cmd_request.kdamond == kdamond)
1442 /* TODO: support multiple contexts per kdamond */
1443 if (kdamond->contexts->nr != 1)
1446 if (kdamond->damon_ctx)
1447 damon_destroy_ctx(kdamond->damon_ctx);
1448 kdamond->damon_ctx = NULL;
1450 ctx = damon_sysfs_build_ctx(kdamond->contexts->contexts_arr[0]);
1458 kdamond->damon_ctx = ctx;
1462 static int damon_sysfs_turn_damon_off(struct damon_sysfs_kdamond *kdamond)
1464 if (!kdamond->damon_ctx)
1466 return damon_stop(&kdamond->damon_ctx, 1);
1469 * DAMON, we free kdamond->damon_ctx in next
1475 * damon_sysfs_handle_cmd() - Handle a command for a specific kdamond.
1477 * @kdamond: The kobject wrapper for the associated kdamond.
1479 * This function handles a DAMON sysfs command for a kdamond. For commands
1488 struct damon_sysfs_kdamond *kdamond)
1495 return damon_sysfs_turn_damon_on(kdamond);
1497 return damon_sysfs_turn_damon_off(kdamond);
1503 if (damon_sysfs_cmd_request.kdamond)
1505 if (!damon_sysfs_kdamond_running(kdamond))
1508 damon_sysfs_cmd_request.kdamond = kdamond;
1512 * from kdamond context
1519 if (!damon_sysfs_cmd_request.kdamond) {
1522 } else if (!damon_sysfs_kdamond_running(kdamond)) {
1523 /* kdamond has already finished */
1525 damon_sysfs_cmd_request.kdamond = NULL;
1536 struct damon_sysfs_kdamond *kdamond = container_of(kobj,
1545 ret = damon_sysfs_handle_cmd(cmd, kdamond);
1558 struct damon_sysfs_kdamond *kdamond = container_of(kobj,
1565 ctx = kdamond->damon_ctx;
1570 if (ctx->kdamond)
1571 pid = ctx->kdamond->pid;
1580 struct damon_sysfs_kdamond *kdamond = container_of(kobj,
1583 if (kdamond->damon_ctx)
1584 damon_destroy_ctx(kdamond->damon_ctx);
1585 kfree(kdamond);
1643 damon_sysfs_cmd_request.kdamond == kdamonds[i])
1653 struct damon_sysfs_kdamond **kdamonds_arr, *kdamond;
1670 kdamond = damon_sysfs_kdamond_alloc();
1671 if (!kdamond) {
1676 err = kobject_init_and_add(&kdamond->kobj,
1682 err = damon_sysfs_kdamond_add_dirs(kdamond);
1686 kdamonds_arr[i] = kdamond;
1693 kobject_put(&kdamond->kobj);