All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: cros-kernel-buildreports@googlegroups.com
Cc: oe-kbuild-all@lists.linux.dev
Subject: [android-common:android15-6.6 3/3] mm/vmscan.c:3178:26: error: implicit declaration of function 'sc_swappiness'; did you mean 'si_swapinfo'?
Date: Wed, 13 Aug 2025 08:12:54 +0800	[thread overview]
Message-ID: <202508130846.FHB2EKAL-lkp@intel.com> (raw)

tree:   https://android.googlesource.com/kernel/common android15-6.6
head:   ea3d9795af950549909e57bfd2efc6250bb69503
commit: ea3d9795af950549909e57bfd2efc6250bb69503 [3/3] BACKPORT: mm: add swappiness= arg to memory.reclaim
config: i386-buildonly-randconfig-003-20250813 (https://download.01.org/0day-ci/archive/20250813/202508130846.FHB2EKAL-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250813/202508130846.FHB2EKAL-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508130846.FHB2EKAL-lkp@intel.com/

All errors (new ones prefixed by >>):

   mm/vmscan.c:1066:15: warning: no previous prototype for 'shrink_slab' [-Wmissing-prototypes]
    1066 | unsigned long shrink_slab(gfp_t gfp_mask, int nid,
         |               ^~~~~~~~~~~
   mm/vmscan.c:2663:15: warning: no previous prototype for 'shrink_inactive_list' [-Wmissing-prototypes]
    2663 | unsigned long shrink_inactive_list(unsigned long nr_to_scan,
         |               ^~~~~~~~~~~~~~~~~~~~
   mm/vmscan.c: In function 'get_scan_count':
>> mm/vmscan.c:3178:26: error: implicit declaration of function 'sc_swappiness'; did you mean 'si_swapinfo'? [-Werror=implicit-function-declaration]
    3178 |         int swappiness = sc_swappiness(sc, memcg);
         |                          ^~~~~~~~~~~~~
         |                          si_swapinfo
   cc1: some warnings being treated as errors


vim +3178 mm/vmscan.c

  3164	
  3165	/*
  3166	 * Determine how aggressively the anon and file LRU lists should be
  3167	 * scanned.
  3168	 *
  3169	 * nr[0] = anon inactive folios to scan; nr[1] = anon active folios to scan
  3170	 * nr[2] = file inactive folios to scan; nr[3] = file active folios to scan
  3171	 */
  3172	static void get_scan_count(struct lruvec *lruvec, struct scan_control *sc,
  3173				   unsigned long *nr)
  3174	{
  3175		struct pglist_data *pgdat = lruvec_pgdat(lruvec);
  3176		struct mem_cgroup *memcg = lruvec_memcg(lruvec);
  3177		unsigned long anon_cost, file_cost, total_cost;
> 3178		int swappiness = sc_swappiness(sc, memcg);
  3179		u64 fraction[ANON_AND_FILE];
  3180		u64 denominator = 0;	/* gcc */
  3181		enum scan_balance scan_balance;
  3182		unsigned long ap, fp;
  3183		enum lru_list lru;
  3184		bool balance_anon_file_reclaim = false;
  3185	
  3186		/* If we have no swap space, do not bother scanning anon folios. */
  3187		if (!sc->may_swap || !can_reclaim_anon_pages(memcg, pgdat->node_id, sc)) {
  3188			scan_balance = SCAN_FILE;
  3189			goto out;
  3190		}
  3191	
  3192	
  3193		trace_android_vh_tune_swappiness(&swappiness);
  3194		/*
  3195		 * Global reclaim will swap to prevent OOM even with no
  3196		 * swappiness, but memcg users want to use this knob to
  3197		 * disable swapping for individual groups completely when
  3198		 * using the memory controller's swap limit feature would be
  3199		 * too expensive.
  3200		 */
  3201		if (cgroup_reclaim(sc) && !swappiness) {
  3202			scan_balance = SCAN_FILE;
  3203			goto out;
  3204		}
  3205	
  3206		/*
  3207		 * Do not apply any pressure balancing cleverness when the
  3208		 * system is close to OOM, scan both anon and file equally
  3209		 * (unless the swappiness setting disagrees with swapping).
  3210		 */
  3211		if (!sc->priority && swappiness) {
  3212			scan_balance = SCAN_EQUAL;
  3213			goto out;
  3214		}
  3215	
  3216		/*
  3217		 * If the system is almost out of file pages, force-scan anon.
  3218		 */
  3219		if (sc->file_is_tiny) {
  3220			scan_balance = SCAN_ANON;
  3221			goto out;
  3222		}
  3223	
  3224		trace_android_rvh_set_balance_anon_file_reclaim(&balance_anon_file_reclaim);
  3225	
  3226		/*
  3227		 * If there is enough inactive page cache, we do not reclaim
  3228		 * anything from the anonymous working right now. But when balancing
  3229		 * anon and page cache files for reclaim, allow swapping of anon pages
  3230		 * even if there are a number of inactive file cache pages.
  3231		 */
  3232		if (!balance_anon_file_reclaim && sc->cache_trim_mode) {
  3233			scan_balance = SCAN_FILE;
  3234			goto out;
  3235		}
  3236	
  3237		scan_balance = SCAN_FRACT;
  3238		/*
  3239		 * Calculate the pressure balance between anon and file pages.
  3240		 *
  3241		 * The amount of pressure we put on each LRU is inversely
  3242		 * proportional to the cost of reclaiming each list, as
  3243		 * determined by the share of pages that are refaulting, times
  3244		 * the relative IO cost of bringing back a swapped out
  3245		 * anonymous page vs reloading a filesystem page (swappiness).
  3246		 *
  3247		 * Although we limit that influence to ensure no list gets
  3248		 * left behind completely: at least a third of the pressure is
  3249		 * applied, before swappiness.
  3250		 *
  3251		 * With swappiness at 100, anon and file have equal IO cost.
  3252		 */
  3253		total_cost = sc->anon_cost + sc->file_cost;
  3254		anon_cost = total_cost + sc->anon_cost;
  3255		file_cost = total_cost + sc->file_cost;
  3256		total_cost = anon_cost + file_cost;
  3257	
  3258		ap = swappiness * (total_cost + 1);
  3259		ap /= anon_cost + 1;
  3260	
  3261		fp = (MAX_SWAPPINESS - swappiness) * (total_cost + 1);
  3262		fp /= file_cost + 1;
  3263	
  3264		fraction[0] = ap;
  3265		fraction[1] = fp;
  3266		denominator = ap + fp;
  3267	out:
  3268		trace_android_vh_tune_scan_type(&scan_balance);
  3269		for_each_evictable_lru(lru) {
  3270			int file = is_file_lru(lru);
  3271			unsigned long lruvec_size;
  3272			unsigned long low, min;
  3273			unsigned long scan;
  3274	
  3275			lruvec_size = lruvec_lru_size(lruvec, lru, sc->reclaim_idx);
  3276			mem_cgroup_protection(sc->target_mem_cgroup, memcg,
  3277					      &min, &low);
  3278	
  3279			if (min || low) {
  3280				/*
  3281				 * Scale a cgroup's reclaim pressure by proportioning
  3282				 * its current usage to its memory.low or memory.min
  3283				 * setting.
  3284				 *
  3285				 * This is important, as otherwise scanning aggression
  3286				 * becomes extremely binary -- from nothing as we
  3287				 * approach the memory protection threshold, to totally
  3288				 * nominal as we exceed it.  This results in requiring
  3289				 * setting extremely liberal protection thresholds. It
  3290				 * also means we simply get no protection at all if we
  3291				 * set it too low, which is not ideal.
  3292				 *
  3293				 * If there is any protection in place, we reduce scan
  3294				 * pressure by how much of the total memory used is
  3295				 * within protection thresholds.
  3296				 *
  3297				 * There is one special case: in the first reclaim pass,
  3298				 * we skip over all groups that are within their low
  3299				 * protection. If that fails to reclaim enough pages to
  3300				 * satisfy the reclaim goal, we come back and override
  3301				 * the best-effort low protection. However, we still
  3302				 * ideally want to honor how well-behaved groups are in
  3303				 * that case instead of simply punishing them all
  3304				 * equally. As such, we reclaim them based on how much
  3305				 * memory they are using, reducing the scan pressure
  3306				 * again by how much of the total memory used is under
  3307				 * hard protection.
  3308				 */
  3309				unsigned long cgroup_size = mem_cgroup_size(memcg);
  3310				unsigned long protection;
  3311	
  3312				/* memory.low scaling, make sure we retry before OOM */
  3313				if (!sc->memcg_low_reclaim && low > min) {
  3314					protection = low;
  3315					sc->memcg_low_skipped = 1;
  3316				} else {
  3317					protection = min;
  3318				}
  3319	
  3320				/* Avoid TOCTOU with earlier protection check */
  3321				cgroup_size = max(cgroup_size, protection);
  3322	
  3323				scan = lruvec_size - lruvec_size * protection /
  3324					(cgroup_size + 1);
  3325	
  3326				/*
  3327				 * Minimally target SWAP_CLUSTER_MAX pages to keep
  3328				 * reclaim moving forwards, avoiding decrementing
  3329				 * sc->priority further than desirable.
  3330				 */
  3331				scan = max(scan, SWAP_CLUSTER_MAX);
  3332			} else {
  3333				scan = lruvec_size;
  3334			}
  3335	
  3336			scan >>= sc->priority;
  3337	
  3338			/*
  3339			 * If the cgroup's already been deleted, make sure to
  3340			 * scrape out the remaining cache.
  3341			 */
  3342			if (!scan && !mem_cgroup_online(memcg))
  3343				scan = min(lruvec_size, SWAP_CLUSTER_MAX);
  3344	
  3345			switch (scan_balance) {
  3346			case SCAN_EQUAL:
  3347				/* Scan lists relative to size */
  3348				break;
  3349			case SCAN_FRACT:
  3350				/*
  3351				 * Scan types proportional to swappiness and
  3352				 * their relative recent reclaim efficiency.
  3353				 * Make sure we don't miss the last page on
  3354				 * the offlined memory cgroups because of a
  3355				 * round-off error.
  3356				 */
  3357				scan = mem_cgroup_online(memcg) ?
  3358				       div64_u64(scan * fraction[file], denominator) :
  3359				       DIV64_U64_ROUND_UP(scan * fraction[file],
  3360							  denominator);
  3361				break;
  3362			case SCAN_FILE:
  3363			case SCAN_ANON:
  3364				/* Scan one type exclusively */
  3365				if ((scan_balance == SCAN_FILE) != file)
  3366					scan = 0;
  3367				break;
  3368			default:
  3369				/* Look ma, no brain */
  3370				BUG();
  3371			}
  3372	
  3373			nr[lru] = scan;
  3374		}
  3375	}
  3376	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

                 reply	other threads:[~2025-08-13  0:14 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202508130846.FHB2EKAL-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=cros-kernel-buildreports@googlegroups.com \
    --cc=oe-kbuild-all@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.