static unsigned int damon_nr_accesses_to_accesses_bp(
unsigned int nr_accesses, struct damon_attrs *attrs)
{
- return nr_accesses * 10000 / damon_max_nr_accesses(attrs);
+ return mult_frac(nr_accesses, 10000, damon_max_nr_accesses(attrs));
}
static unsigned int damon_nr_accesses_for_new_attrs(unsigned int nr_accesses,
}
target_access_events = max_access_events * goal_bp / 10000;
target_access_events = target_access_events ? : 1;
- return access_events * 10000 / target_access_events;
+ return mult_frac(access_events, 10000, target_access_events);
}
static unsigned long damon_feed_loop_next_input(unsigned long last_input,
numerator = i.totalram - i.freeram;
else /* DAMOS_QUOTA_NODE_MEM_FREE_BP */
numerator = i.freeram;
- return numerator * 10000 / i.totalram;
+ return mult_frac(numerator, 10000, i.totalram);
}
static unsigned long damos_get_node_memcg_used_bp(
numerator = used_pages;
else /* DAMOS_QUOTA_NODE_MEMCG_FREE_BP */
numerator = i.totalram - used_pages;
- return numerator * 10000 / i.totalram;
+ return mult_frac(numerator, 10000, i.totalram);
}
#else
static __kernel_ulong_t damos_get_node_mem_bp(
global_node_page_state(NR_LRU_BASE + LRU_INACTIVE_FILE);
total = active + inactive;
if (active_ratio)
- return active * 10000 / total;
- return inactive * 10000 / total;
+ return mult_frac(active, 10000, total);
+ return mult_frac(inactive, 10000, total);
}
static void damos_set_quota_goal_current_value(struct damos_quota_goal *goal)
damos_for_each_quota_goal(goal, quota) {
damos_set_quota_goal_current_value(goal);
highest_score = max(highest_score,
- goal->current_value * 10000 /
- goal->target_value);
+ mult_frac(goal->current_value, 10000,
+ goal->target_value));
}
return highest_score;
if (quota->ms) {
if (quota->total_charged_ns)
- throughput = mult_frac(quota->total_charged_sz, 1000000,
- quota->total_charged_ns);
+ throughput = mult_frac(quota->total_charged_sz,
+ 1000000, quota->total_charged_ns);
else
throughput = PAGE_SIZE * 1024;
esz = min(throughput * quota->ms, esz);