Lines Matching full:scheme
82 struct damos *scheme; in damon_new_scheme() local
84 scheme = kmalloc(sizeof(*scheme), GFP_KERNEL); in damon_new_scheme()
85 if (!scheme) in damon_new_scheme()
87 scheme->min_sz_region = min_sz_region; in damon_new_scheme()
88 scheme->max_sz_region = max_sz_region; in damon_new_scheme()
89 scheme->min_nr_accesses = min_nr_accesses; in damon_new_scheme()
90 scheme->max_nr_accesses = max_nr_accesses; in damon_new_scheme()
91 scheme->min_age_region = min_age_region; in damon_new_scheme()
92 scheme->max_age_region = max_age_region; in damon_new_scheme()
93 scheme->action = action; in damon_new_scheme()
94 scheme->stat = (struct damos_stat){}; in damon_new_scheme()
95 INIT_LIST_HEAD(&scheme->list); in damon_new_scheme()
97 scheme->quota.ms = quota->ms; in damon_new_scheme()
98 scheme->quota.sz = quota->sz; in damon_new_scheme()
99 scheme->quota.reset_interval = quota->reset_interval; in damon_new_scheme()
100 scheme->quota.weight_sz = quota->weight_sz; in damon_new_scheme()
101 scheme->quota.weight_nr_accesses = quota->weight_nr_accesses; in damon_new_scheme()
102 scheme->quota.weight_age = quota->weight_age; in damon_new_scheme()
103 scheme->quota.total_charged_sz = 0; in damon_new_scheme()
104 scheme->quota.total_charged_ns = 0; in damon_new_scheme()
105 scheme->quota.esz = 0; in damon_new_scheme()
106 scheme->quota.charged_sz = 0; in damon_new_scheme()
107 scheme->quota.charged_from = 0; in damon_new_scheme()
108 scheme->quota.charge_target_from = NULL; in damon_new_scheme()
109 scheme->quota.charge_addr_from = 0; in damon_new_scheme()
111 scheme->wmarks.metric = wmarks->metric; in damon_new_scheme()
112 scheme->wmarks.interval = wmarks->interval; in damon_new_scheme()
113 scheme->wmarks.high = wmarks->high; in damon_new_scheme()
114 scheme->wmarks.mid = wmarks->mid; in damon_new_scheme()
115 scheme->wmarks.low = wmarks->low; in damon_new_scheme()
116 scheme->wmarks.activated = true; in damon_new_scheme()
118 return scheme; in damon_new_scheme()
611 /* Apply the scheme */ in damon_do_apply_schemes()
935 * Returns zero if the scheme is active. Else, returns time to wait for next
938 static unsigned long damos_wmark_wait_us(struct damos *scheme) in damos_wmark_wait_us() argument
942 if (scheme->wmarks.metric == DAMOS_WMARK_NONE) in damos_wmark_wait_us()
945 metric = damos_wmark_metric_value(scheme->wmarks.metric); in damos_wmark_wait_us()
947 if (metric > scheme->wmarks.high || scheme->wmarks.low > metric) { in damos_wmark_wait_us()
948 if (scheme->wmarks.activated) in damos_wmark_wait_us()
949 pr_debug("deactivate a scheme (%d) for %s wmark\n", in damos_wmark_wait_us()
950 scheme->action, in damos_wmark_wait_us()
951 metric > scheme->wmarks.high ? in damos_wmark_wait_us()
953 scheme->wmarks.activated = false; in damos_wmark_wait_us()
954 return scheme->wmarks.interval; in damos_wmark_wait_us()
958 if ((scheme->wmarks.high >= metric && metric >= scheme->wmarks.mid) && in damos_wmark_wait_us()
959 !scheme->wmarks.activated) in damos_wmark_wait_us()
960 return scheme->wmarks.interval; in damos_wmark_wait_us()
962 if (!scheme->wmarks.activated) in damos_wmark_wait_us()
963 pr_debug("activate a scheme (%d)\n", scheme->action); in damos_wmark_wait_us()
964 scheme->wmarks.activated = true; in damos_wmark_wait_us()