Merge branch 'honglin/release' into 'release' (merge request !220)
rue: fix some sparse warnings of RUE net/mm reported by lore kernel test robot Upstream kernel test robot report few issues caused by RUE functions. Fix the net/mm functions related issues. Note: This MR is not related to the real RUE function, so no need to re-trigger the RUE regression test already done for [1]. [1] https://git.woa.com/tlinux/tkernel5/-/merge_requests/197
This commit is contained in:
commit
24dfafc175
|
@ -37,6 +37,8 @@ extern unsigned int sysctl_clean_dying_memcg_threshold;
|
||||||
extern void kclean_dying_memcg_stop(void);
|
extern void kclean_dying_memcg_stop(void);
|
||||||
extern void wakeup_kclean_dying_memcg(void);
|
extern void wakeup_kclean_dying_memcg(void);
|
||||||
extern atomic_long_t dying_memcgs_count;
|
extern atomic_long_t dying_memcgs_count;
|
||||||
|
extern void memory_qos_update(void);
|
||||||
|
extern int memory_qos_prio_reclaim_ratio_update(void);
|
||||||
|
|
||||||
/* Cgroup-specific page state, on top of universal node page state */
|
/* Cgroup-specific page state, on top of universal node page state */
|
||||||
enum memcg_stat_item {
|
enum memcg_stat_item {
|
||||||
|
|
|
@ -108,8 +108,6 @@ extern int sysctl_vm_use_priority_oom;
|
||||||
extern int sysctl_vm_qos_highest_reclaim_prio;
|
extern int sysctl_vm_qos_highest_reclaim_prio;
|
||||||
extern unsigned int sysctl_vm_qos_prio_reclaim_ratio;
|
extern unsigned int sysctl_vm_qos_prio_reclaim_ratio;
|
||||||
extern unsigned int sysctl_clean_dying_memcg_async;
|
extern unsigned int sysctl_clean_dying_memcg_async;
|
||||||
extern void memory_qos_update(void);
|
|
||||||
extern int memory_qos_prio_reclaim_ratio_update(void);
|
|
||||||
static int vm_lowest_prio = CGROUP_PRIORITY_MAX;
|
static int vm_lowest_prio = CGROUP_PRIORITY_MAX;
|
||||||
static int twenty = 20;
|
static int twenty = 20;
|
||||||
#endif
|
#endif
|
||||||
|
@ -624,7 +622,7 @@ static int setup_pagecache_limit(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pc_limit_proc_dointvec(struct ctl_table *table, int write,
|
static int pc_limit_proc_dointvec(struct ctl_table *table, int write,
|
||||||
void __user *buffer, size_t *lenp, loff_t *ppos)
|
void *buffer, size_t *lenp, loff_t *ppos)
|
||||||
{
|
{
|
||||||
int ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
|
int ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
|
||||||
|
|
||||||
|
@ -635,7 +633,7 @@ static int pc_limit_proc_dointvec(struct ctl_table *table, int write,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pc_reclaim_limit_proc_dointvec(struct ctl_table *table, int write,
|
static int pc_reclaim_limit_proc_dointvec(struct ctl_table *table, int write,
|
||||||
void __user *buffer, size_t *lenp, loff_t *ppos)
|
void *buffer, size_t *lenp, loff_t *ppos)
|
||||||
{
|
{
|
||||||
int pre_reclaim_ratio = vm_pagecache_limit_reclaim_ratio;
|
int pre_reclaim_ratio = vm_pagecache_limit_reclaim_ratio;
|
||||||
int ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
|
int ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
|
||||||
|
@ -654,7 +652,7 @@ static int pc_reclaim_limit_proc_dointvec(struct ctl_table *table, int write,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pc_limit_async_handler(struct ctl_table *table, int write,
|
static int pc_limit_async_handler(struct ctl_table *table, int write,
|
||||||
void __user *buffer, size_t *lenp, loff_t *ppos)
|
void *buffer, size_t *lenp, loff_t *ppos)
|
||||||
{
|
{
|
||||||
int ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
|
int ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
|
||||||
|
|
||||||
|
@ -1973,8 +1971,8 @@ int proc_do_static_key(struct ctl_table *table, int write,
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_MEMCG
|
#ifdef CONFIG_MEMCG
|
||||||
int memory_qos_sysctl_handler(struct ctl_table *table, int write,
|
static int memory_qos_sysctl_handler(struct ctl_table *table, int write,
|
||||||
void __user *buffer, size_t *lenp, loff_t *ppos)
|
void *buffer, size_t *lenp, loff_t *ppos)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
|
@ -2000,8 +1998,8 @@ out:
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
int memory_qos_sysctl_highest_reclaim_prio_handler(struct ctl_table *table,
|
static int memory_qos_sysctl_highest_reclaim_prio_handler(struct ctl_table *table,
|
||||||
int write, void __user *buffer,
|
int write, void *buffer,
|
||||||
size_t *lenp, loff_t *ppos)
|
size_t *lenp, loff_t *ppos)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
@ -2016,8 +2014,8 @@ int memory_qos_sysctl_highest_reclaim_prio_handler(struct ctl_table *table,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int memory_qos_sysctl_prio_reclaim_ratio_handler(struct ctl_table *table,
|
static int memory_qos_sysctl_prio_reclaim_ratio_handler(struct ctl_table *table,
|
||||||
int write, void __user *buffer,
|
int write, void *buffer,
|
||||||
size_t *lenp, loff_t *ppos)
|
size_t *lenp, loff_t *ppos)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
@ -2043,7 +2041,7 @@ int memory_qos_sysctl_prio_reclaim_ratio_handler(struct ctl_table *table,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int clean_dying_memcg_async_handler(struct ctl_table *table, int write,
|
static int clean_dying_memcg_async_handler(struct ctl_table *table, int write,
|
||||||
void __user *buffer, size_t *lenp, loff_t *ppos)
|
void *buffer, size_t *lenp, loff_t *ppos)
|
||||||
{
|
{
|
||||||
int ret = proc_douintvec_minmax(table, write, buffer, lenp, ppos);
|
int ret = proc_douintvec_minmax(table, write, buffer, lenp, ppos);
|
||||||
|
|
||||||
|
@ -2065,7 +2063,7 @@ static int clean_dying_memcg_async_handler(struct ctl_table *table, int write,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int clean_dying_memcg_threshold_handler(struct ctl_table *table,
|
static int clean_dying_memcg_threshold_handler(struct ctl_table *table,
|
||||||
int write, void __user *buffer, size_t *lenp, loff_t *ppos)
|
int write, void *buffer, size_t *lenp, loff_t *ppos)
|
||||||
{
|
{
|
||||||
unsigned int old_val = sysctl_clean_dying_memcg_threshold;
|
unsigned int old_val = sysctl_clean_dying_memcg_threshold;
|
||||||
int ret = proc_douintvec_minmax(table, write, buffer, lenp, ppos);
|
int ret = proc_douintvec_minmax(table, write, buffer, lenp, ppos);
|
||||||
|
|
|
@ -1794,7 +1794,9 @@ static int collapse_file(struct mm_struct *mm, unsigned long addr,
|
||||||
struct page *page;
|
struct page *page;
|
||||||
struct page *tmp;
|
struct page *tmp;
|
||||||
struct folio *folio;
|
struct folio *folio;
|
||||||
|
#ifdef CONFIG_MEMCG
|
||||||
struct mem_cgroup *memcg;
|
struct mem_cgroup *memcg;
|
||||||
|
#endif
|
||||||
pgoff_t index = 0, end = start + HPAGE_PMD_NR;
|
pgoff_t index = 0, end = start + HPAGE_PMD_NR;
|
||||||
LIST_HEAD(pagelist);
|
LIST_HEAD(pagelist);
|
||||||
XA_STATE_ORDER(xas, &mapping->i_pages, start, HPAGE_PMD_ORDER);
|
XA_STATE_ORDER(xas, &mapping->i_pages, start, HPAGE_PMD_ORDER);
|
||||||
|
@ -2125,11 +2127,12 @@ immap_locked:
|
||||||
if (is_shmem)
|
if (is_shmem)
|
||||||
__mod_lruvec_page_state(hpage, NR_SHMEM_THPS, nr);
|
__mod_lruvec_page_state(hpage, NR_SHMEM_THPS, nr);
|
||||||
else {
|
else {
|
||||||
|
#ifdef CONFIG_MEMCG
|
||||||
memcg = page_memcg(hpage);
|
memcg = page_memcg(hpage);
|
||||||
|
|
||||||
if (!mem_cgroup_disabled() && memcg)
|
if (!mem_cgroup_disabled() && memcg)
|
||||||
page_counter_charge(&memcg->pagecache, nr);
|
page_counter_charge(&memcg->pagecache, nr);
|
||||||
|
#endif
|
||||||
__mod_lruvec_page_state(hpage, NR_FILE_THPS, nr);
|
__mod_lruvec_page_state(hpage, NR_FILE_THPS, nr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1374,7 +1374,9 @@ static void do_mem_cgroup_account_oom_skip(struct mem_cgroup *memcg,
|
||||||
void mem_cgroup_account_oom_skip(struct task_struct *task,
|
void mem_cgroup_account_oom_skip(struct task_struct *task,
|
||||||
struct oom_control *oc)
|
struct oom_control *oc)
|
||||||
{
|
{
|
||||||
|
rcu_read_lock();
|
||||||
do_mem_cgroup_account_oom_skip(mem_cgroup_from_task(task), oc);
|
do_mem_cgroup_account_oom_skip(mem_cgroup_from_task(task), oc);
|
||||||
|
rcu_read_unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -3129,7 +3131,7 @@ static int memcg_notify_prio_change(struct mem_cgroup *memcg,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mem_cgroup_notify_prio_change(struct cgroup_subsys_state *css,
|
static int mem_cgroup_notify_prio_change(struct cgroup_subsys_state *css,
|
||||||
u16 old_prio, u16 new_prio)
|
u16 old_prio, u16 new_prio)
|
||||||
{
|
{
|
||||||
struct mem_cgroup *memcg = mem_cgroup_from_css(css);
|
struct mem_cgroup *memcg = mem_cgroup_from_css(css);
|
||||||
|
@ -4222,7 +4224,7 @@ vm_pagecache_limit_retry_times __read_mostly = MEMCG_PAGECACHE_RETRIES;
|
||||||
void mem_cgroup_shrink_pagecache(struct mem_cgroup *memcg, gfp_t gfp_mask)
|
void mem_cgroup_shrink_pagecache(struct mem_cgroup *memcg, gfp_t gfp_mask)
|
||||||
{
|
{
|
||||||
long pages_reclaimed;
|
long pages_reclaimed;
|
||||||
unsigned long pages_used, pages_max, goal_pages_used, pre_used;
|
unsigned long pages_used, pages_max, goal_pages_used;
|
||||||
unsigned int retry_times = 0;
|
unsigned int retry_times = 0;
|
||||||
unsigned int limit_retry_times;
|
unsigned int limit_retry_times;
|
||||||
u32 max_ratio;
|
u32 max_ratio;
|
||||||
|
@ -4267,7 +4269,6 @@ void mem_cgroup_shrink_pagecache(struct mem_cgroup *memcg, gfp_t gfp_mask)
|
||||||
if (fatal_signal_pending(current))
|
if (fatal_signal_pending(current))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
pre_used = pages_used;
|
|
||||||
pages_reclaimed = shrink_page_cache_memcg(gfp_mask, memcg,
|
pages_reclaimed = shrink_page_cache_memcg(gfp_mask, memcg,
|
||||||
pages_used - goal_pages_used);
|
pages_used - goal_pages_used);
|
||||||
|
|
||||||
|
@ -4379,7 +4380,7 @@ static u64 memory_pagecache_max_read(struct cgroup_subsys_state *css,
|
||||||
return memcg->pagecache_max_ratio;
|
return memcg->pagecache_max_ratio;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long mem_cgroup_pagecache_get_reclaim_pages(struct mem_cgroup *memcg)
|
static unsigned long mem_cgroup_pagecache_get_reclaim_pages(struct mem_cgroup *memcg)
|
||||||
{
|
{
|
||||||
unsigned long goal_pages_used, pages_used, pages_max;
|
unsigned long goal_pages_used, pages_used, pages_max;
|
||||||
|
|
||||||
|
@ -7241,7 +7242,7 @@ void wakeup_kclean_dying_memcg(void)
|
||||||
wake_up_interruptible(&kclean_dying_memcg_wq);
|
wake_up_interruptible(&kclean_dying_memcg_wq);
|
||||||
}
|
}
|
||||||
|
|
||||||
void charge_dying_memcgs(struct mem_cgroup *memcg)
|
static void charge_dying_memcgs(struct mem_cgroup *memcg)
|
||||||
{
|
{
|
||||||
if (sysctl_vm_memory_qos == 0)
|
if (sysctl_vm_memory_qos == 0)
|
||||||
return;
|
return;
|
||||||
|
@ -10271,7 +10272,7 @@ extern unsigned long shrink_slab(gfp_t gfp_mask, int nid,
|
||||||
struct mem_cgroup *memcg,
|
struct mem_cgroup *memcg,
|
||||||
int priority);
|
int priority);
|
||||||
|
|
||||||
void reap_slab(struct mem_cgroup *memcg)
|
static void reap_slab(struct mem_cgroup *memcg)
|
||||||
{
|
{
|
||||||
struct mem_cgroup *parent;
|
struct mem_cgroup *parent;
|
||||||
|
|
||||||
|
|
|
@ -7456,7 +7456,7 @@ unsigned long __pagecache_over_limit(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
int proc_pagecache_system_usage(struct ctl_table *table, int write,
|
int proc_pagecache_system_usage(struct ctl_table *table, int write,
|
||||||
void __user *buffer, size_t *lenp, loff_t *ppos)
|
void *buffer, size_t *lenp, loff_t *ppos)
|
||||||
{
|
{
|
||||||
vm_pagecache_system_usage = __pagecache_over_limit();
|
vm_pagecache_system_usage = __pagecache_over_limit();
|
||||||
|
|
||||||
|
@ -7512,8 +7512,8 @@ static void pagecache_reclaim_unlock_zone(struct zone *zone)
|
||||||
* reclaim lock on any zone are sleeping on this waitqueue.
|
* reclaim lock on any zone are sleeping on this waitqueue.
|
||||||
* So this is basically a congestion wait queue for them.
|
* So this is basically a congestion wait queue for them.
|
||||||
*/
|
*/
|
||||||
DECLARE_WAIT_QUEUE_HEAD(pagecache_reclaim_wq);
|
static DECLARE_WAIT_QUEUE_HEAD(pagecache_reclaim_wq);
|
||||||
DECLARE_WAIT_QUEUE_HEAD(kpagecache_limitd_wq);
|
static DECLARE_WAIT_QUEUE_HEAD(kpagecache_limitd_wq);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Similar to shrink_zone but it has a different consumer - pagecache limit
|
* Similar to shrink_zone but it has a different consumer - pagecache limit
|
||||||
|
|
|
@ -44,7 +44,7 @@ struct cgroup_cls_state *task_cls_state(struct task_struct *p)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(task_cls_state);
|
EXPORT_SYMBOL_GPL(task_cls_state);
|
||||||
|
|
||||||
int cls_cgroup_stats_init(struct cls_cgroup_stats *stats)
|
static int cls_cgroup_stats_init(struct cls_cgroup_stats *stats)
|
||||||
{
|
{
|
||||||
struct {
|
struct {
|
||||||
struct nlattr nla;
|
struct nlattr nla;
|
||||||
|
@ -73,7 +73,7 @@ int cls_cgroup_stats_init(struct cls_cgroup_stats *stats)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cls_cgroup_stats_destroy(struct cls_cgroup_stats *stats)
|
static void cls_cgroup_stats_destroy(struct cls_cgroup_stats *stats)
|
||||||
{
|
{
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
gen_kill_estimator(&stats->est);
|
gen_kill_estimator(&stats->est);
|
||||||
|
@ -373,7 +373,7 @@ static ssize_t write_bps_dev_limit(struct kernfs_open_file *of,
|
||||||
kfree(limit_bw_config[ifindex].name);
|
kfree(limit_bw_config[ifindex].name);
|
||||||
|
|
||||||
limit_bw_config[ifindex].name = name;
|
limit_bw_config[ifindex].name = name;
|
||||||
strncpy(limit_bw_config[ifindex].name, dev_name, strlen(dev_name));
|
strscpy(limit_bw_config[ifindex].name, dev_name, strlen(dev_name));
|
||||||
|
|
||||||
if (!rx_rate)
|
if (!rx_rate)
|
||||||
cs->rx_dev_scale[ifindex] = WND_DIVISOR;
|
cs->rx_dev_scale[ifindex] = WND_DIVISOR;
|
||||||
|
@ -521,7 +521,7 @@ out_free_lports:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int net_cgroup_notify_prio_change(struct cgroup_subsys_state *css,
|
static int net_cgroup_notify_prio_change(struct cgroup_subsys_state *css,
|
||||||
u16 old_prio, u16 new_prio)
|
u16 old_prio, u16 new_prio)
|
||||||
{
|
{
|
||||||
if (css)
|
if (css)
|
||||||
|
@ -615,7 +615,7 @@ static ssize_t write_dev_online_bps_max(struct kernfs_open_file *of,
|
||||||
kfree(online_max_config[ifindex].name);
|
kfree(online_max_config[ifindex].name);
|
||||||
|
|
||||||
online_max_config[ifindex].name = name;
|
online_max_config[ifindex].name = name;
|
||||||
strncpy(online_max_config[ifindex].name, dev_name, strlen(dev_name));
|
strscpy(online_max_config[ifindex].name, dev_name, strlen(dev_name));
|
||||||
|
|
||||||
if (rx_rate > -1) {
|
if (rx_rate > -1) {
|
||||||
online_max_config[ifindex].rx_bps_max = rx_rate;
|
online_max_config[ifindex].rx_bps_max = rx_rate;
|
||||||
|
@ -726,7 +726,7 @@ static ssize_t write_dev_online_bps_min(struct kernfs_open_file *of,
|
||||||
kfree(online_min_config[ifindex].name);
|
kfree(online_min_config[ifindex].name);
|
||||||
|
|
||||||
online_min_config[ifindex].name = name;
|
online_min_config[ifindex].name = name;
|
||||||
strncpy(online_min_config[ifindex].name, dev_name, strlen(dev_name));
|
strscpy(online_min_config[ifindex].name, dev_name, strlen(dev_name));
|
||||||
|
|
||||||
if (rx_rate > -1)
|
if (rx_rate > -1)
|
||||||
RUE_CALL_INT(NET, write_rx_online_bps_min, cs, ifindex, rx_rate);
|
RUE_CALL_INT(NET, write_rx_online_bps_min, cs, ifindex, rx_rate);
|
||||||
|
@ -835,7 +835,7 @@ static ssize_t write_dev_bps_config(struct kernfs_open_file *of,
|
||||||
kfree(bw_config[ifindex].name);
|
kfree(bw_config[ifindex].name);
|
||||||
|
|
||||||
bw_config[ifindex].name = name;
|
bw_config[ifindex].name = name;
|
||||||
strncpy(bw_config[ifindex].name, dev_name, strlen(dev_name));
|
strscpy(bw_config[ifindex].name, dev_name, strlen(dev_name));
|
||||||
|
|
||||||
if (v[0] > -1 && v[1] > -1) {
|
if (v[0] > -1 && v[1] > -1) {
|
||||||
bw_config[ifindex].rx_bps_min = v[0];
|
bw_config[ifindex].rx_bps_min = v[0];
|
||||||
|
@ -932,7 +932,7 @@ static u64 read_rx_min_rwnd_segs(struct cgroup_subsys_state *css,
|
||||||
return RUE_CALL_TYPE(NET, read_rx_min_rwnd_segs, u64, css, cft);
|
return RUE_CALL_TYPE(NET, read_rx_min_rwnd_segs, u64, css, cft);
|
||||||
}
|
}
|
||||||
|
|
||||||
int read_class_stat(struct seq_file *sf, void *v)
|
static int read_class_stat(struct seq_file *sf, void *v)
|
||||||
{
|
{
|
||||||
struct cgroup_subsys_state *css = seq_css(sf);
|
struct cgroup_subsys_state *css = seq_css(sf);
|
||||||
|
|
||||||
|
@ -941,19 +941,19 @@ int read_class_stat(struct seq_file *sf, void *v)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rx_dump(struct seq_file *sf, void *v)
|
static int rx_dump(struct seq_file *sf, void *v)
|
||||||
{
|
{
|
||||||
RUE_CALL_VOID(NET, dump_rx_tb, sf);
|
RUE_CALL_VOID(NET, dump_rx_tb, sf);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int tx_dump(struct seq_file *sf, void *v)
|
static int tx_dump(struct seq_file *sf, void *v)
|
||||||
{
|
{
|
||||||
RUE_CALL_VOID(NET, dump_tx_tb, sf);
|
RUE_CALL_VOID(NET, dump_tx_tb, sf);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int bps_limit_dump(struct seq_file *sf, void *v)
|
static int bps_limit_dump(struct seq_file *sf, void *v)
|
||||||
{
|
{
|
||||||
struct cgroup_subsys_state *css = seq_css(sf);
|
struct cgroup_subsys_state *css = seq_css(sf);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue