mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
mm: memcg: move legacy memcg event code into memcontrol-v1.c
Cgroup v1's memory controller contains a pretty complicated event notifications mechanism which is not used on cgroup v2. Let's move the corresponding code into memcontrol-v1.c. Please, note, that mem_cgroup_event_ratelimit() remains in memcontrol.c, otherwise it would require exporting too many details on memcg stats outside of memcontrol.c. Link: https://lkml.kernel.org/r/20240625005906.106920-7-roman.gushchin@linux.dev Signed-off-by: Roman Gushchin <roman.gushchin@linux.dev> Acked-by: Michal Hocko <mhocko@suse.com> Acked-by: Shakeel Butt <shakeel.butt@linux.dev> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Muchun Song <muchun.song@linux.dev> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
b9eaacb1db
commit
66d60c428b
@@ -69,18 +69,6 @@ struct mem_cgroup_id {
|
||||
refcount_t ref;
|
||||
};
|
||||
|
||||
/*
|
||||
* Per memcg event counter is incremented at every pagein/pageout. With THP,
|
||||
* it will be incremented by the number of pages. This counter is used
|
||||
* to trigger some periodic events. This is straightforward and better
|
||||
* than using jiffies etc. to handle periodic memcg event.
|
||||
*/
|
||||
enum mem_cgroup_events_target {
|
||||
MEM_CGROUP_TARGET_THRESH,
|
||||
MEM_CGROUP_TARGET_SOFTLIMIT,
|
||||
MEM_CGROUP_NTARGETS,
|
||||
};
|
||||
|
||||
struct memcg_vmstats_percpu;
|
||||
struct memcg_vmstats;
|
||||
struct lruvec_stats_percpu;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -41,4 +41,55 @@ u64 mem_cgroup_move_charge_read(struct cgroup_subsys_state *css,
|
||||
int mem_cgroup_move_charge_write(struct cgroup_subsys_state *css,
|
||||
struct cftype *cft, u64 val);
|
||||
|
||||
/*
|
||||
* Per memcg event counter is incremented at every pagein/pageout. With THP,
|
||||
* it will be incremented by the number of pages. This counter is used
|
||||
* to trigger some periodic events. This is straightforward and better
|
||||
* than using jiffies etc. to handle periodic memcg event.
|
||||
*/
|
||||
enum mem_cgroup_events_target {
|
||||
MEM_CGROUP_TARGET_THRESH,
|
||||
MEM_CGROUP_TARGET_SOFTLIMIT,
|
||||
MEM_CGROUP_NTARGETS,
|
||||
};
|
||||
|
||||
/* Whether legacy memory+swap accounting is active */
|
||||
static bool do_memsw_account(void)
|
||||
{
|
||||
return !cgroup_subsys_on_dfl(memory_cgrp_subsys);
|
||||
}
|
||||
|
||||
/*
|
||||
* Iteration constructs for visiting all cgroups (under a tree). If
|
||||
* loops are exited prematurely (break), mem_cgroup_iter_break() must
|
||||
* be used for reference counting.
|
||||
*/
|
||||
#define for_each_mem_cgroup_tree(iter, root) \
|
||||
for (iter = mem_cgroup_iter(root, NULL, NULL); \
|
||||
iter != NULL; \
|
||||
iter = mem_cgroup_iter(root, iter, NULL))
|
||||
|
||||
#define for_each_mem_cgroup(iter) \
|
||||
for (iter = mem_cgroup_iter(NULL, NULL, NULL); \
|
||||
iter != NULL; \
|
||||
iter = mem_cgroup_iter(NULL, iter, NULL))
|
||||
|
||||
void memcg1_css_offline(struct mem_cgroup *memcg);
|
||||
|
||||
/* for encoding cft->private value on file */
|
||||
enum res_type {
|
||||
_MEM,
|
||||
_MEMSWAP,
|
||||
_KMEM,
|
||||
_TCP,
|
||||
};
|
||||
|
||||
bool mem_cgroup_event_ratelimit(struct mem_cgroup *memcg,
|
||||
enum mem_cgroup_events_target target);
|
||||
unsigned long mem_cgroup_usage(struct mem_cgroup *memcg, bool swap);
|
||||
void mem_cgroup_oom_notify(struct mem_cgroup *memcg);
|
||||
ssize_t memcg_write_event_control(struct kernfs_open_file *of,
|
||||
char *buf, size_t nbytes, loff_t off);
|
||||
|
||||
|
||||
#endif /* __MM_MEMCONTROL_V1_H */
|
||||
|
||||
687
mm/memcontrol.c
687
mm/memcontrol.c
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user