Lines Matching defs:scheme

13  * scheme region directory
113 * scheme regions directory
123 * Each DAMON-based operation scheme (&struct damos) has its own apply
124 * interval, and we need to expose the scheme tried regions based on only
126 * scheme. The status becomes 'idle' at the beginning.
137 * the scheme is completely applied to the given snapshot. Hence the callback
147 * apply intervals of the scheme is passed while the state is 'idle'.
1058 * scheme/weights directory
1434 * scheme directory
1464 struct damon_sysfs_scheme *scheme = kmalloc(sizeof(*scheme),
1467 if (!scheme)
1469 scheme->kobj = (struct kobject){};
1470 scheme->action = action;
1471 scheme->apply_interval_us = apply_interval_us;
1472 return scheme;
1476 struct damon_sysfs_scheme *scheme)
1485 &damon_sysfs_access_pattern_ktype, &scheme->kobj,
1492 scheme->access_pattern = access_pattern;
1500 static int damon_sysfs_scheme_set_quotas(struct damon_sysfs_scheme *scheme)
1508 &scheme->kobj, "quotas");
1514 scheme->quotas = quotas;
1522 static int damon_sysfs_scheme_set_watermarks(struct damon_sysfs_scheme *scheme)
1531 &damon_sysfs_watermarks_ktype, &scheme->kobj,
1536 scheme->watermarks = watermarks;
1540 static int damon_sysfs_scheme_set_filters(struct damon_sysfs_scheme *scheme)
1549 &damon_sysfs_scheme_filters_ktype, &scheme->kobj,
1554 scheme->filters = filters;
1558 static int damon_sysfs_scheme_set_stats(struct damon_sysfs_scheme *scheme)
1566 &scheme->kobj, "stats");
1570 scheme->stats = stats;
1575 struct damon_sysfs_scheme *scheme)
1584 &damon_sysfs_scheme_regions_ktype, &scheme->kobj,
1589 scheme->tried_regions = tried_regions;
1593 static int damon_sysfs_scheme_add_dirs(struct damon_sysfs_scheme *scheme)
1597 err = damon_sysfs_scheme_set_access_pattern(scheme);
1600 err = damon_sysfs_scheme_set_quotas(scheme);
1603 err = damon_sysfs_scheme_set_watermarks(scheme);
1606 err = damon_sysfs_scheme_set_filters(scheme);
1609 err = damon_sysfs_scheme_set_stats(scheme);
1612 err = damon_sysfs_scheme_set_tried_regions(scheme);
1618 kobject_put(&scheme->tried_regions->kobj);
1619 scheme->tried_regions = NULL;
1621 kobject_put(&scheme->filters->kobj);
1622 scheme->filters = NULL;
1624 kobject_put(&scheme->watermarks->kobj);
1625 scheme->watermarks = NULL;
1627 kobject_put(&scheme->quotas->kobj);
1628 scheme->quotas = NULL;
1630 kobject_put(&scheme->access_pattern->kobj);
1631 scheme->access_pattern = NULL;
1635 static void damon_sysfs_scheme_rm_dirs(struct damon_sysfs_scheme *scheme)
1637 damon_sysfs_access_pattern_rm_dirs(scheme->access_pattern);
1638 kobject_put(&scheme->access_pattern->kobj);
1639 damon_sysfs_quotas_rm_dirs(scheme->quotas);
1640 kobject_put(&scheme->quotas->kobj);
1641 kobject_put(&scheme->watermarks->kobj);
1642 damon_sysfs_scheme_filters_rm_dirs(scheme->filters);
1643 kobject_put(&scheme->filters->kobj);
1644 kobject_put(&scheme->stats->kobj);
1645 damon_sysfs_scheme_regions_rm_dirs(scheme->tried_regions);
1646 kobject_put(&scheme->tried_regions->kobj);
1652 struct damon_sysfs_scheme *scheme = container_of(kobj,
1656 damon_sysfs_damos_action_strs[scheme->action]);
1662 struct damon_sysfs_scheme *scheme = container_of(kobj,
1668 scheme->action = action;
1678 struct damon_sysfs_scheme *scheme = container_of(kobj,
1681 return sysfs_emit(buf, "%lu\n", scheme->apply_interval_us);
1687 struct damon_sysfs_scheme *scheme = container_of(kobj,
1689 int err = kstrtoul(buf, 0, &scheme->apply_interval_us);
1744 struct damon_sysfs_scheme **schemes_arr, *scheme;
1762 scheme = damon_sysfs_scheme_alloc(DAMOS_STAT, 0);
1763 if (!scheme) {
1768 err = kobject_init_and_add(&scheme->kobj,
1773 err = damon_sysfs_scheme_add_dirs(scheme);
1777 schemes_arr[i] = scheme;
1784 kobject_put(&scheme->kobj);
1879 static int damon_sysfs_set_scheme_filters(struct damos *scheme,
1885 damos_for_each_filter_safe(filter, next, scheme)
1917 damos_add_filter(scheme, filter);
1953 struct damos *scheme;
1956 damon_for_each_scheme(scheme, ctx) {
1960 /* user could have removed the scheme sysfs dir */
1966 &scheme->quota);
1979 struct damos *scheme;
1982 damon_for_each_scheme(scheme, ctx) {
1985 /* user could have removed the scheme sysfs dir */
1991 sysfs_quotas->effective_sz = scheme->quota.esz;
2005 struct damos *scheme;
2032 scheme = damon_new_scheme(&pattern, sysfs_scheme->action,
2034 if (!scheme)
2037 err = damos_sysfs_set_quota_score(sysfs_quotas->goals, &scheme->quota);
2039 damon_destroy_scheme(scheme);
2043 err = damon_sysfs_set_scheme_filters(scheme, sysfs_filters);
2045 damon_destroy_scheme(scheme);
2048 return scheme;
2051 static void damon_sysfs_update_scheme(struct damos *scheme,
2061 scheme->pattern.min_sz_region = access_pattern->sz->min;
2062 scheme->pattern.max_sz_region = access_pattern->sz->max;
2063 scheme->pattern.min_nr_accesses = access_pattern->nr_accesses->min;
2064 scheme->pattern.max_nr_accesses = access_pattern->nr_accesses->max;
2065 scheme->pattern.min_age_region = access_pattern->age->min;
2066 scheme->pattern.max_age_region = access_pattern->age->max;
2068 scheme->action = sysfs_scheme->action;
2069 scheme->apply_interval_us = sysfs_scheme->apply_interval_us;
2071 scheme->quota.ms = sysfs_quotas->ms;
2072 scheme->quota.sz = sysfs_quotas->sz;
2073 scheme->quota.reset_interval = sysfs_quotas->reset_interval_ms;
2074 scheme->quota.weight_sz = sysfs_weights->sz;
2075 scheme->quota.weight_nr_accesses = sysfs_weights->nr_accesses;
2076 scheme->quota.weight_age = sysfs_weights->age;
2078 err = damos_sysfs_set_quota_score(sysfs_quotas->goals, &scheme->quota);
2080 damon_destroy_scheme(scheme);
2084 scheme->wmarks.metric = sysfs_wmarks->metric;
2085 scheme->wmarks.interval = sysfs_wmarks->interval_us;
2086 scheme->wmarks.high = sysfs_wmarks->high;
2087 scheme->wmarks.mid = sysfs_wmarks->mid;
2088 scheme->wmarks.low = sysfs_wmarks->low;
2090 err = damon_sysfs_set_scheme_filters(scheme, sysfs_scheme->filters);
2092 damon_destroy_scheme(scheme);
2098 struct damos *scheme, *next;
2101 damon_for_each_scheme_safe(scheme, next, ctx) {
2103 damon_sysfs_update_scheme(scheme,
2106 damon_destroy_scheme(scheme);
2111 struct damos *scheme, *next;
2113 scheme = damon_sysfs_mk_scheme(sysfs_schemes->schemes_arr[i]);
2114 if (!scheme) {
2115 damon_for_each_scheme_safe(scheme, next, ctx)
2116 damon_destroy_scheme(scheme);
2119 damon_add_scheme(ctx, scheme);
2128 struct damos *scheme;
2131 damon_for_each_scheme(scheme, ctx) {
2134 /* user could have removed the scheme sysfs dir */
2139 sysfs_stats->nr_tried = scheme->stat.nr_tried;
2140 sysfs_stats->sz_tried = scheme->stat.sz_tried;
2141 sysfs_stats->nr_applied = scheme->stat.nr_applied;
2142 sysfs_stats->sz_applied = scheme->stat.sz_applied;
2143 sysfs_stats->qt_exceeds = scheme->stat.qt_exceeds;
2164 struct damos *scheme;
2171 damon_for_each_scheme(scheme, ctx) {
2172 if (scheme == s)
2177 /* user could have removed the scheme sysfs dir */
2232 struct damos *scheme;
2235 damon_for_each_scheme(scheme, ctx) {
2238 /* user could have removed the scheme sysfs dir */
2252 struct damos *scheme;
2255 damon_for_each_scheme(scheme, ctx) {
2257 return scheme;
2268 struct damos *scheme;
2273 scheme = damos_sysfs_nth_scheme(i, ctx);
2274 if (!scheme) {
2281 2 * usecs_to_jiffies(scheme->apply_interval_us ?
2282 scheme->apply_interval_us :