struct damon_ctx *damon_new_ctx(void);
 void damon_destroy_ctx(struct damon_ctx *ctx);
-int damon_set_attrs(struct damon_ctx *ctx, unsigned long sample_int,
-               unsigned long aggr_int, unsigned long ops_upd_int,
-               unsigned long min_nr_reg, unsigned long max_nr_reg);
+int damon_set_attrs(struct damon_ctx *ctx, struct damon_attrs *attrs);
 int damon_set_schemes(struct damon_ctx *ctx,
                        struct damos **schemes, ssize_t nr_schemes);
 int damon_nr_running_ctxs(void);
 
 /**
  * damon_set_attrs() - Set attributes for the monitoring.
  * @ctx:               monitoring context
- * @sample_int:                time interval between samplings
- * @aggr_int:          time interval between aggregations
- * @ops_upd_int:       time interval between monitoring operations updates
- * @min_nr_reg:                minimal number of regions
- * @max_nr_reg:                maximum number of regions
+ * @attrs:             monitoring attributes
  *
  * This function should not be called while the kdamond is running.
  * Every time interval is in micro-seconds.
  *
  * Return: 0 on success, negative error code otherwise.
  */
-int damon_set_attrs(struct damon_ctx *ctx, unsigned long sample_int,
-                   unsigned long aggr_int, unsigned long ops_upd_int,
-                   unsigned long min_nr_reg, unsigned long max_nr_reg)
+int damon_set_attrs(struct damon_ctx *ctx, struct damon_attrs *attrs)
 {
-       if (min_nr_reg < 3)
+       if (attrs->min_nr_regions < 3)
                return -EINVAL;
-       if (min_nr_reg > max_nr_reg)
+       if (attrs->min_nr_regions > attrs->max_nr_regions)
                return -EINVAL;
 
-       ctx->attrs.sample_interval = sample_int;
-       ctx->attrs.aggr_interval = aggr_int;
-       ctx->attrs.ops_update_interval = ops_upd_int;
-       ctx->attrs.min_nr_regions = min_nr_reg;
-       ctx->attrs.max_nr_regions = max_nr_reg;
-
+       ctx->attrs = *attrs;
        return 0;
 }
 
 
                const char __user *buf, size_t count, loff_t *ppos)
 {
        struct damon_ctx *ctx = file->private_data;
-       unsigned long s, a, r, minr, maxr;
+       struct damon_attrs attrs;
        char *kbuf;
        ssize_t ret;
 
                return PTR_ERR(kbuf);
 
        if (sscanf(kbuf, "%lu %lu %lu %lu %lu",
-                               &s, &a, &r, &minr, &maxr) != 5) {
+                               &attrs.sample_interval, &attrs.aggr_interval,
+                               &attrs.ops_update_interval,
+                               &attrs.min_nr_regions,
+                               &attrs.max_nr_regions) != 5) {
                ret = -EINVAL;
                goto out;
        }
                goto unlock_out;
        }
 
-       ret = damon_set_attrs(ctx, s, a, r, minr, maxr);
+       ret = damon_set_attrs(ctx, &attrs);
        if (!ret)
                ret = count;
 unlock_out:
 
 
 static int damon_lru_sort_apply_parameters(void)
 {
+       struct damon_attrs attrs = {
+               .sample_interval = sample_interval,
+               .aggr_interval = aggr_interval,
+               .ops_update_interval = 0,
+               .min_nr_regions = min_nr_regions,
+               .max_nr_regions = max_nr_regions,
+       };
        struct damos *scheme;
        struct damon_addr_range addr_range;
        unsigned int hot_thres, cold_thres;
        int err = 0;
 
-       err = damon_set_attrs(ctx, sample_interval, aggr_interval, 0,
-                       min_nr_regions, max_nr_regions);
+       err = damon_set_attrs(ctx, &attrs);
        if (err)
                return err;
 
 
 
 static int damon_reclaim_apply_parameters(void)
 {
+       struct damon_attrs attrs = {
+               .sample_interval = sample_interval,
+               .aggr_interval = aggr_interval,
+               .ops_update_interval = 0,
+               .min_nr_regions = min_nr_regions,
+               .max_nr_regions = max_nr_regions,
+       };
        struct damos *scheme;
        struct damon_addr_range addr_range;
        int err = 0;
 
-       err = damon_set_attrs(ctx, sample_interval, aggr_interval, 0,
-                       min_nr_regions, max_nr_regions);
+       err = damon_set_attrs(ctx, &attrs);
        if (err)
                return err;
 
 
        struct damon_sysfs_intervals *sys_intervals = sys_attrs->intervals;
        struct damon_sysfs_ul_range *sys_nr_regions =
                sys_attrs->nr_regions_range;
-
-       return damon_set_attrs(ctx, sys_intervals->sample_us,
-                       sys_intervals->aggr_us, sys_intervals->update_us,
-                       sys_nr_regions->min, sys_nr_regions->max);
+       struct damon_attrs attrs = {
+               .sample_interval = sys_intervals->sample_us,
+               .aggr_interval = sys_intervals->aggr_us,
+               .ops_update_interval = sys_intervals->update_us,
+               .min_nr_regions = sys_nr_regions->min,
+               .max_nr_regions = sys_nr_regions->max,
+       };
+       return damon_set_attrs(ctx, &attrs);
 }
 
 static void damon_sysfs_destroy_targets(struct damon_ctx *ctx)