mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
mm/damon/stat: use damon_set_region_system_rams_default()
damon_stat_set_moniotirng_region() is nearly a duplicate of the core function, damon_set_region_system_rams_default(). Use the core implementation. Link: https://lore.kernel.org/20260429041232.90257-6-sj@kernel.org Signed-off-by: SeongJae Park <sj@kernel.org> Cc: David Hildenbrand <david@kernel.org> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Liam R. Howlett <liam@infradead.org> Cc: Lorenzo Stoakes <ljs@kernel.org> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Rapoport <rppt@kernel.org> Cc: Suren Baghdasaryan <surenb@google.com> Cc: Vlastimil Babka <vbabka@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
3a870b4377
commit
122dff8c22
|
|
@ -148,59 +148,12 @@ static int damon_stat_damon_call_fn(void *data)
|
|||
return 0;
|
||||
}
|
||||
|
||||
struct damon_stat_system_ram_range_walk_arg {
|
||||
bool walked;
|
||||
struct resource res;
|
||||
};
|
||||
|
||||
static int damon_stat_system_ram_walk_fn(struct resource *res, void *arg)
|
||||
{
|
||||
struct damon_stat_system_ram_range_walk_arg *a = arg;
|
||||
|
||||
if (!a->walked) {
|
||||
a->walked = true;
|
||||
a->res.start = res->start;
|
||||
}
|
||||
a->res.end = res->end;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned long damon_stat_res_to_core_addr(resource_size_t ra,
|
||||
unsigned long addr_unit)
|
||||
{
|
||||
/*
|
||||
* Use div_u64() for avoiding linking errors related with __udivdi3,
|
||||
* __aeabi_uldivmod, or similar problems. This should also improve the
|
||||
* performance optimization (read div_u64() comment for the detail).
|
||||
*/
|
||||
if (sizeof(ra) == 8 && sizeof(addr_unit) == 4)
|
||||
return div_u64(ra, addr_unit);
|
||||
return ra / addr_unit;
|
||||
}
|
||||
|
||||
static int damon_stat_set_monitoring_region(struct damon_target *t,
|
||||
unsigned long addr_unit, unsigned long min_region_sz)
|
||||
{
|
||||
struct damon_addr_range addr_range;
|
||||
struct damon_stat_system_ram_range_walk_arg arg = {};
|
||||
|
||||
walk_system_ram_res(0, -1, &arg, damon_stat_system_ram_walk_fn);
|
||||
if (!arg.walked)
|
||||
return -EINVAL;
|
||||
addr_range.start = damon_stat_res_to_core_addr(
|
||||
arg.res.start, addr_unit);
|
||||
addr_range.end = damon_stat_res_to_core_addr(
|
||||
arg.res.end + 1, addr_unit);
|
||||
if (addr_range.end <= addr_range.start)
|
||||
return -EINVAL;
|
||||
return damon_set_regions(t, &addr_range, 1, min_region_sz);
|
||||
}
|
||||
|
||||
static struct damon_ctx *damon_stat_build_ctx(void)
|
||||
{
|
||||
struct damon_ctx *ctx;
|
||||
struct damon_attrs attrs;
|
||||
struct damon_target *target;
|
||||
unsigned long start = 0, end = 0;
|
||||
|
||||
ctx = damon_new_ctx();
|
||||
if (!ctx)
|
||||
|
|
@ -230,8 +183,8 @@ static struct damon_ctx *damon_stat_build_ctx(void)
|
|||
if (!target)
|
||||
goto free_out;
|
||||
damon_add_target(ctx, target);
|
||||
if (damon_stat_set_monitoring_region(target, ctx->addr_unit,
|
||||
ctx->min_region_sz))
|
||||
if (damon_set_region_system_rams_default(target, &start, &end,
|
||||
ctx->addr_unit, ctx->min_region_sz))
|
||||
goto free_out;
|
||||
return ctx;
|
||||
free_out:
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user