@@ -448,6 +448,7 @@ struct damos_access_pattern {
* @wmarks: Watermarks for automated (in)activation of this scheme.
* @target_nid: Destination node if @action is "migrate_{hot,cold}".
* @filters: Additional set of &struct damos_filter for &action.
+ * @ops_filters: ops layer handling &struct damos_filter objects list.
* @last_applied: Last @action applied ops-managing entity.
* @stat: Statistics of this scheme.
* @list: List head for siblings.
@@ -503,6 +504,7 @@ struct damos {
int target_nid;
};
struct list_head filters;
+ struct list_head ops_filters;
void *last_applied;
struct damos_stat stat;
struct list_head list;
@@ -810,6 +812,12 @@ static inline unsigned long damon_sz_region(struct damon_region *r)
#define damos_for_each_filter_safe(f, next, scheme) \
list_for_each_entry_safe(f, next, &(scheme)->filters, list)
+#define damos_for_each_ops_filter(f, scheme) \
+ list_for_each_entry(f, &(scheme)->ops_filters, list)
+
+#define damos_for_each_ops_filter_safe(f, next, scheme) \
+ list_for_each_entry_safe(f, next, &(scheme)->ops_filters, list)
+
#ifdef CONFIG_DAMON
struct damon_region *damon_new_region(unsigned long start, unsigned long end);
@@ -374,6 +374,7 @@ struct damos *damon_new_scheme(struct damos_access_pattern *pattern,
*/
scheme->next_apply_sis = 0;
INIT_LIST_HEAD(&scheme->filters);
+ INIT_LIST_HEAD(&scheme->ops_filters);
scheme->stat = (struct damos_stat){};
INIT_LIST_HEAD(&scheme->list);
DAMOS filters can be categorized into two groups depending on which layer they are handled, namely core layer and ops layer. Also their evaluation sequence is decided by the categorization. Currently, all filters are maintained in single list in mix. It makes the filters evaluation loop inefficient since it should do the categorization in the loop for every iteration. Introduce another list that will be used for having all operations layer-handled DAMOS filters. Note that this change simply adds the list and does not change any DAMON code to use it in real. It will be done by following changes. Signed-off-by: SeongJae Park <sj@kernel.org> --- include/linux/damon.h | 8 ++++++++ mm/damon/core.c | 1 + 2 files changed, 9 insertions(+)