All of lore.kernel.org
 help / color / mirror / Atom feed
* [android-common:android12-kiwi-5.10 272/272] mm/swapfile.c:775:5: warning: no previous prototype for function 'scan_swap_map_slots'
@ 2026-08-13  1:40 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-08-13  1:40 UTC (permalink / raw)
  To: cros-kernel-buildreports; +Cc: oe-kbuild-all

Hi Bing,

FYI, the error/warning still remains.

tree:   https://android.googlesource.com/kernel/common android12-kiwi-5.10
head:   9c40f45d2c22f05e45bc48b1d7be869adf7e473a
commit: 06c2766cbc9923d67d45fc191c467b5e2685175d [272/272] ANDROID: mm: export symbols used in vendor hook android_vh_get_swap_page()
config: x86_64-randconfig-r072-20260813 (https://download.01.org/0day-ci/archive/20260813/202608130957.kLP9LhAK-lkp@intel.com/config)
compiler: clang version 24.0.0git (https://github.com/llvm/llvm-project 6ea395e4fe4db26920d57779ddae98eac6ba945d)
smatch: v0.5.0-9187-g5189e3fb
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260813/202608130957.kLP9LhAK-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/202608130957.kLP9LhAK-lkp@intel.com/

All warnings (new ones prefixed by >>):

   In file included from <built-in>:2:
   In file included from include/linux/compiler_types.h:69:
   include/linux/compiler-clang.h:34:9: warning: '__SANITIZE_ADDRESS__' macro redefined [-Wmacro-redefined]
      34 | #define __SANITIZE_ADDRESS__
         |         ^
   <built-in>:357:9: note: previous definition is here
     357 | #define __SANITIZE_ADDRESS__ 1
         |         ^
   mm/swapfile.c:102:26: warning: no previous prototype for function 'swap_type_to_swap_info' [-Wmissing-prototypes]
     102 | struct swap_info_struct *swap_type_to_swap_info(int type)
         |                          ^
   mm/swapfile.c:102:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     102 | struct swap_info_struct *swap_type_to_swap_info(int type)
         | ^
         | static 
>> mm/swapfile.c:775:5: warning: no previous prototype for function 'scan_swap_map_slots' [-Wmissing-prototypes]
     775 | int scan_swap_map_slots(struct swap_info_struct *si,
         |     ^
   mm/swapfile.c:775:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     775 | int scan_swap_map_slots(struct swap_info_struct *si,
         | ^
         | static 
>> mm/swapfile.c:993:5: warning: no previous prototype for function 'swap_alloc_cluster' [-Wmissing-prototypes]
     993 | int swap_alloc_cluster(struct swap_info_struct *si, swp_entry_t *slot)
         |     ^
   mm/swapfile.c:993:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     993 | int swap_alloc_cluster(struct swap_info_struct *si, swp_entry_t *slot)
         | ^
         | static 
   4 warnings generated.
--
   In file included from <built-in>:2:
   In file included from include/linux/compiler_types.h:69:
   include/linux/compiler-clang.h:34:9: warning: '__SANITIZE_ADDRESS__' macro redefined [-Wmacro-redefined]
      34 | #define __SANITIZE_ADDRESS__
         |         ^
   <built-in>:357:9: note: previous definition is here
     357 | #define __SANITIZE_ADDRESS__ 1
         |         ^
>> mm/swap_slots.c:93:6: warning: no previous prototype for function 'check_cache_active' [-Wmissing-prototypes]
      93 | bool check_cache_active(void)
         |      ^
   mm/swap_slots.c:93:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
      93 | bool check_cache_active(void)
         | ^
         | static 
   2 warnings generated.

Kconfig warnings: (for reference only)
   WARNING: unmet direct dependencies detected for DRM_MIPI_DSI
   Depends on [n]: HAS_IOMEM [=y] && DRM [=n]
   Selected by [y]:
   - GKI_HIDDEN_DRM_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for DRM_KMS_CMA_HELPER
   Depends on [n]: HAS_IOMEM [=y] && DRM [=n]
   Selected by [y]:
   - GKI_HIDDEN_DRM_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for SND_VMASTER
   Depends on [n]: SOUND [=y] && !UML && SND [=n]
   Selected by [y]:
   - GKI_HIDDEN_SND_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for SND_PCM_IEC958
   Depends on [n]: SOUND [=y] && !UML && SND [=n]
   Selected by [y]:
   - GKI_HIDDEN_SND_SOC_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for SND_JACK
   Depends on [n]: SOUND [=y] && !UML && SND [=n]
   Selected by [y]:
   - GKI_HIDDEN_SND_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for SND_JACK_INPUT_DEV
   Depends on [n]: SOUND [=y] && !UML && SND [=n] && SND_JACK [=y]
   Selected by [y]:
   - GKI_HIDDEN_SND_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for SND_PCM_ELD
   Depends on [n]: SOUND [=y] && !UML && SND [=n]
   Selected by [y]:
   - GKI_HIDDEN_SND_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for DRM_GEM_CMA_HELPER
   Depends on [n]: HAS_IOMEM [=y] && DRM [=n]
   Selected by [y]:
   - GKI_HIDDEN_DRM_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for SND_INTEL_NHLT
   Depends on [n]: SOUND [=y] && !UML && SND [=n]
   Selected by [y]:
   - GKI_HIDDEN_SND_CONFIGS [=y] && ACPI [=y]


vim +/scan_swap_map_slots +775 mm/swapfile.c

   774	
 > 775	int scan_swap_map_slots(struct swap_info_struct *si,
   776				       unsigned char usage, int nr,
   777				       swp_entry_t slots[])
   778	{
   779		struct swap_cluster_info *ci;
   780		unsigned long offset;
   781		unsigned long scan_base;
   782		unsigned long last_in_cluster = 0;
   783		int latency_ration = LATENCY_LIMIT;
   784		int n_ret = 0;
   785		bool scanned_many = false;
   786	
   787		/*
   788		 * We try to cluster swap pages by allocating them sequentially
   789		 * in swap.  Once we've allocated SWAPFILE_CLUSTER pages this
   790		 * way, however, we resort to first-free allocation, starting
   791		 * a new cluster.  This prevents us from scattering swap pages
   792		 * all over the entire swap partition, so that we reduce
   793		 * overall disk seek times between swap pages.  -- sct
   794		 * But we do now try to find an empty cluster.  -Andrea
   795		 * And we let swap pages go all over an SSD partition.  Hugh
   796		 */
   797	
   798		si->flags += SWP_SCANNING;
   799		/*
   800		 * Use percpu scan base for SSD to reduce lock contention on
   801		 * cluster and swap cache.  For HDD, sequential access is more
   802		 * important.
   803		 */
   804		if (si->flags & SWP_SOLIDSTATE)
   805			scan_base = this_cpu_read(*si->cluster_next_cpu);
   806		else
   807			scan_base = si->cluster_next;
   808		offset = scan_base;
   809	
   810		/* SSD algorithm */
   811		if (si->cluster_info) {
   812			if (!scan_swap_map_try_ssd_cluster(si, &offset, &scan_base))
   813				goto scan;
   814		} else if (unlikely(!si->cluster_nr--)) {
   815			if (si->pages - si->inuse_pages < SWAPFILE_CLUSTER) {
   816				si->cluster_nr = SWAPFILE_CLUSTER - 1;
   817				goto checks;
   818			}
   819	
   820			spin_unlock(&si->lock);
   821	
   822			/*
   823			 * If seek is expensive, start searching for new cluster from
   824			 * start of partition, to minimize the span of allocated swap.
   825			 * If seek is cheap, that is the SWP_SOLIDSTATE si->cluster_info
   826			 * case, just handled by scan_swap_map_try_ssd_cluster() above.
   827			 */
   828			scan_base = offset = si->lowest_bit;
   829			last_in_cluster = offset + SWAPFILE_CLUSTER - 1;
   830	
   831			/* Locate the first empty (unaligned) cluster */
   832			for (; last_in_cluster <= si->highest_bit; offset++) {
   833				if (si->swap_map[offset])
   834					last_in_cluster = offset + SWAPFILE_CLUSTER;
   835				else if (offset == last_in_cluster) {
   836					spin_lock(&si->lock);
   837					offset -= SWAPFILE_CLUSTER - 1;
   838					si->cluster_next = offset;
   839					si->cluster_nr = SWAPFILE_CLUSTER - 1;
   840					goto checks;
   841				}
   842				if (unlikely(--latency_ration < 0)) {
   843					cond_resched();
   844					latency_ration = LATENCY_LIMIT;
   845				}
   846			}
   847	
   848			offset = scan_base;
   849			spin_lock(&si->lock);
   850			si->cluster_nr = SWAPFILE_CLUSTER - 1;
   851		}
   852	
   853	checks:
   854		if (si->cluster_info) {
   855			while (scan_swap_map_ssd_cluster_conflict(si, offset)) {
   856			/* take a break if we already got some slots */
   857				if (n_ret)
   858					goto done;
   859				if (!scan_swap_map_try_ssd_cluster(si, &offset,
   860								&scan_base))
   861					goto scan;
   862			}
   863		}
   864		if (!(si->flags & SWP_WRITEOK))
   865			goto no_page;
   866		if (!si->highest_bit)
   867			goto no_page;
   868		if (offset > si->highest_bit)
   869			scan_base = offset = si->lowest_bit;
   870	
   871		ci = lock_cluster(si, offset);
   872		/* reuse swap entry of cache-only swap if not busy. */
   873		if (vm_swap_full() && si->swap_map[offset] == SWAP_HAS_CACHE) {
   874			int swap_was_freed;
   875			unlock_cluster(ci);
   876			spin_unlock(&si->lock);
   877			swap_was_freed = __try_to_reclaim_swap(si, offset, TTRS_ANYWAY);
   878			spin_lock(&si->lock);
   879			/* entry was freed successfully, try to use this again */
   880			if (swap_was_freed)
   881				goto checks;
   882			goto scan; /* check next one */
   883		}
   884	
   885		if (si->swap_map[offset]) {
   886			unlock_cluster(ci);
   887			if (!n_ret)
   888				goto scan;
   889			else
   890				goto done;
   891		}
   892		WRITE_ONCE(si->swap_map[offset], usage);
   893		inc_cluster_info_page(si, si->cluster_info, offset);
   894		unlock_cluster(ci);
   895	
   896		swap_range_alloc(si, offset, 1);
   897		slots[n_ret++] = swp_entry(si->type, offset);
   898	
   899		/* got enough slots or reach max slots? */
   900		if ((n_ret == nr) || (offset >= si->highest_bit))
   901			goto done;
   902	
   903		/* search for next available slot */
   904	
   905		/* time to take a break? */
   906		if (unlikely(--latency_ration < 0)) {
   907			if (n_ret)
   908				goto done;
   909			spin_unlock(&si->lock);
   910			cond_resched();
   911			spin_lock(&si->lock);
   912			latency_ration = LATENCY_LIMIT;
   913		}
   914	
   915		/* try to get more slots in cluster */
   916		if (si->cluster_info) {
   917			if (scan_swap_map_try_ssd_cluster(si, &offset, &scan_base))
   918				goto checks;
   919		} else if (si->cluster_nr && !si->swap_map[++offset]) {
   920			/* non-ssd case, still more slots in cluster? */
   921			--si->cluster_nr;
   922			goto checks;
   923		}
   924	
   925		/*
   926		 * Even if there's no free clusters available (fragmented),
   927		 * try to scan a little more quickly with lock held unless we
   928		 * have scanned too many slots already.
   929		 */
   930		if (!scanned_many) {
   931			unsigned long scan_limit;
   932	
   933			if (offset < scan_base)
   934				scan_limit = scan_base;
   935			else
   936				scan_limit = si->highest_bit;
   937			for (; offset <= scan_limit && --latency_ration > 0;
   938			     offset++) {
   939				if (!si->swap_map[offset])
   940					goto checks;
   941			}
   942		}
   943	
   944	done:
   945		set_cluster_next(si, offset + 1);
   946		si->flags -= SWP_SCANNING;
   947		return n_ret;
   948	
   949	scan:
   950		spin_unlock(&si->lock);
   951		while (++offset <= READ_ONCE(si->highest_bit)) {
   952			if (data_race(!si->swap_map[offset])) {
   953				spin_lock(&si->lock);
   954				goto checks;
   955			}
   956			if (vm_swap_full() &&
   957			    READ_ONCE(si->swap_map[offset]) == SWAP_HAS_CACHE) {
   958				spin_lock(&si->lock);
   959				goto checks;
   960			}
   961			if (unlikely(--latency_ration < 0)) {
   962				cond_resched();
   963				latency_ration = LATENCY_LIMIT;
   964				scanned_many = true;
   965			}
   966		}
   967		offset = si->lowest_bit;
   968		while (offset < scan_base) {
   969			if (data_race(!si->swap_map[offset])) {
   970				spin_lock(&si->lock);
   971				goto checks;
   972			}
   973			if (vm_swap_full() &&
   974			    READ_ONCE(si->swap_map[offset]) == SWAP_HAS_CACHE) {
   975				spin_lock(&si->lock);
   976				goto checks;
   977			}
   978			if (unlikely(--latency_ration < 0)) {
   979				cond_resched();
   980				latency_ration = LATENCY_LIMIT;
   981				scanned_many = true;
   982			}
   983			offset++;
   984		}
   985		spin_lock(&si->lock);
   986	
   987	no_page:
   988		si->flags -= SWP_SCANNING;
   989		return n_ret;
   990	}
   991	EXPORT_SYMBOL_GPL(scan_swap_map_slots);
   992	

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-08-13  1:41 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-13  1:40 [android-common:android12-kiwi-5.10 272/272] mm/swapfile.c:775:5: warning: no previous prototype for function 'scan_swap_map_slots' kernel test robot

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.