All of lore.kernel.org
 help / color / mirror / Atom feed
* [openeuler:openEuler-1.0-LTS 16561/22014] mm/pin_mem.c:34:14: sparse: sparse: symbol 'max_pin_pid_num' was not declared. Should it be static?
@ 2024-04-01 11:31 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2024-04-01 11:31 UTC (permalink / raw)
  To: kernel, Yang Yingliang; +Cc: oe-kbuild-all

tree:   https://gitee.com/openeuler/kernel.git openEuler-1.0-LTS
head:   ec7a5c4d5af617f2a56393232f3f4c10f120bfd6
commit: 1a378b87531ea80e7847bf0105adedff28a73080 [16561/22014] mm: add pin memory method for checkpoint add restore
config: arm64-randconfig-r111-20240331 (https://download.01.org/0day-ci/archive/20240401/202404011908.ylzPInkY-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 13.2.0
reproduce: (https://download.01.org/0day-ci/archive/20240401/202404011908.ylzPInkY-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/202404011908.ylzPInkY-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> mm/pin_mem.c:34:14: sparse: sparse: symbol 'max_pin_pid_num' was not declared. Should it be static?
>> mm/pin_mem.c:35:15: sparse: sparse: symbol 'redirect_space_size' was not declared. Should it be static?
>> mm/pin_mem.c:171:6: sparse: sparse: symbol 'reserve_page_from_buddy' was not declared. Should it be static?
>> mm/pin_mem.c:254:6: sparse: sparse: symbol 'free_user_map_pages' was not declared. Should it be static?
>> mm/pin_mem.c:311:6: sparse: sparse: symbol 'check_redirect_end_valid' was not declared. Should it be static?
>> mm/pin_mem.c:392:5: sparse: sparse: symbol 'calculate_pin_mem_digest' was not declared. Should it be static?
>> mm/pin_mem.c:481:5: sparse: sparse: symbol 'collect_pmd_huge_pages' was not declared. Should it be static?
>> mm/pin_mem.c:544:5: sparse: sparse: symbol 'collect_normal_pages' was not declared. Should it be static?
>> mm/pin_mem.c:610:6: sparse: sparse: symbol 'free_pin_pages' was not declared. Should it be static?
>> mm/pin_mem.c:770:12: sparse: sparse: symbol 'remap_normal_pages' was not declared. Should it be static?
>> mm/pin_mem.c:857:12: sparse: sparse: symbol 'remap_huge_pmd_pages' was not declared. Should it be static?
>> mm/pin_mem.c:844:63: sparse: sparse: not addressable
   mm/pin_mem.c:846:63: sparse: sparse: not addressable
   mm/pin_mem.c:848:71: sparse: sparse: not addressable
   mm/pin_mem.c:851:65: sparse: sparse: not addressable
   mm/pin_mem.c:171:6: warning: no previous prototype for 'reserve_page_from_buddy' [-Wmissing-prototypes]
     171 | void reserve_page_from_buddy(unsigned long nr_pages, struct page *page)
         |      ^~~~~~~~~~~~~~~~~~~~~~~
   mm/pin_mem.c:254:6: warning: no previous prototype for 'free_user_map_pages' [-Wmissing-prototypes]
     254 | void free_user_map_pages(unsigned int pid_index, unsigned int entry_index, unsigned int page_index)
         |      ^~~~~~~~~~~~~~~~~~~
   mm/pin_mem.c:311:6: warning: no previous prototype for 'check_redirect_end_valid' [-Wmissing-prototypes]
     311 | bool check_redirect_end_valid(struct redirect_info *redirect_start,
         |      ^~~~~~~~~~~~~~~~~~~~~~~~
   mm/pin_mem.c:392:5: warning: no previous prototype for 'calculate_pin_mem_digest' [-Wmissing-prototypes]
     392 | int calculate_pin_mem_digest(struct pin_mem_dump_info *pmdi, char *digest)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~
   mm/pin_mem.c:481:5: warning: no previous prototype for 'collect_pmd_huge_pages' [-Wmissing-prototypes]
     481 | int collect_pmd_huge_pages(struct task_struct *task,
         |     ^~~~~~~~~~~~~~~~~~~~~~
   mm/pin_mem.c:544:5: warning: no previous prototype for 'collect_normal_pages' [-Wmissing-prototypes]
     544 | int collect_normal_pages(struct task_struct *task,
         |     ^~~~~~~~~~~~~~~~~~~~
   mm/pin_mem.c: In function 'collect_normal_pages':
   mm/pin_mem.c:549:26: warning: variable 'nr_pages' set but not used [-Wunused-but-set-variable]
     549 |         unsigned long i, nr_pages;
         |                          ^~~~~~~~
   mm/pin_mem.c: At top level:
   mm/pin_mem.c:610:6: warning: no previous prototype for 'free_pin_pages' [-Wmissing-prototypes]
     610 | void free_pin_pages(struct page_map_entry *pme)
         |      ^~~~~~~~~~~~~~
   mm/pin_mem.c:770:12: warning: no previous prototype for 'remap_normal_pages' [-Wmissing-prototypes]
     770 | vm_fault_t remap_normal_pages(struct mm_struct *mm, struct vm_area_struct *vma,
         |            ^~~~~~~~~~~~~~~~~~
   mm/pin_mem.c: In function 'get_hugepage_gfpmask':
   mm/pin_mem.c:844:63: error: lvalue required as unary '&' operand
     844 |         if (test_bit(TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG, &transparent_hugepage_flags))
         |                                                               ^
   mm/pin_mem.c:846:63: error: lvalue required as unary '&' operand
     846 |         if (test_bit(TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_FLAG, &transparent_hugepage_flags))
         |                                                               ^
   mm/pin_mem.c:848:71: error: lvalue required as unary '&' operand
     848 |         if (test_bit(TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG, &transparent_hugepage_flags))
         |                                                                       ^
   mm/pin_mem.c:851:65: error: lvalue required as unary '&' operand
     851 |         if (test_bit(TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG, &transparent_hugepage_flags))
         |                                                                 ^
   mm/pin_mem.c: At top level:
   mm/pin_mem.c:857:12: warning: no previous prototype for 'remap_huge_pmd_pages' [-Wmissing-prototypes]
     857 | vm_fault_t remap_huge_pmd_pages(struct mm_struct *mm, struct vm_area_struct *vma,
         |            ^~~~~~~~~~~~~~~~~~~~

vim +/max_pin_pid_num +34 mm/pin_mem.c

    33	
  > 34	unsigned int max_pin_pid_num __read_mostly;
  > 35	unsigned long redirect_space_size __read_mostly;
    36	static unsigned long redirect_space_start;
    37	static void *pin_mem_pagewalk;
    38	static unsigned long *pagemap_buffer;
    39	static int reserve_user_map_pages_fail;
    40	
    41	static int __init setup_max_pin_pid_num(char *str)
    42	{
    43		int ret;
    44	
    45		if (!str)
    46			return 0;
    47	
    48		ret = kstrtouint(str, 10, &max_pin_pid_num);
    49		if (ret) {
    50			pr_warn("Unable to parse max pin pid num.\n");
    51		} else {
    52			if (max_pin_pid_num > MAX_PIN_PID_NUM) {
    53				max_pin_pid_num = 0;
    54				pr_warn("Input max_pin_pid_num is too large.\n");
    55			}
    56		}
    57		return ret;
    58	}
    59	early_param("max_pin_pid_num", setup_max_pin_pid_num);
    60	
    61	static int __init setup_redirect_space_size(char *str)
    62	{
    63		if (!str)
    64			return 0;
    65	
    66		redirect_space_size = memparse(str, NULL);
    67		if (!redirect_space_size) {
    68			pr_warn("Unable to parse redirect space size, use the default value.\n");
    69			redirect_space_size = DEFAULT_REDIRECT_SPACE_SIZE;
    70		}
    71		return 0;
    72	}
    73	early_param("redirect_space_size", setup_redirect_space_size);
    74	
    75	struct page_map_info *create_page_map_info(int pid)
    76	{
    77		struct page_map_info *new;
    78	
    79		if (!user_space_reserve_start)
    80			return NULL;
    81	
    82		if (pin_pid_num >= max_pin_pid_num) {
    83			pr_warn("Pin pid num too large than max_pin_pid_num, fail create: %d!", pid);
    84			return NULL;
    85		}
    86		new = (struct page_map_info *)(user_space_reserve_start + pin_pid_num);
    87		new->pid = pid;
    88		new->pme = NULL;
    89		new->entry_num = 0;
    90		new->pid_reserved = false;
    91		new->disable_free_page = false;
    92		(*pin_pid_num_addr)++;
    93		pin_pid_num++;
    94		return new;
    95	}
    96	EXPORT_SYMBOL_GPL(create_page_map_info);
    97	
    98	struct page_map_info *get_page_map_info(int pid)
    99	{
   100		int i;
   101	
   102		if (!user_space_reserve_start)
   103			return NULL;
   104	
   105		for (i = 0; i < pin_pid_num; i++) {
   106			if (user_space_reserve_start[i].pid == pid)
   107				return &(user_space_reserve_start[i]);
   108		}
   109		return NULL;
   110	}
   111	EXPORT_SYMBOL_GPL(get_page_map_info);
   112	
   113	static struct page *find_head_page(struct page *page)
   114	{
   115		struct page *p = page;
   116	
   117		while (!PageBuddy(p)) {
   118			if (PageLRU(p))
   119				return NULL;
   120			p--;
   121		}
   122		return p;
   123	}
   124	
   125	static void spilt_page_area_left(struct zone *zone, struct free_area *area, struct page *page,
   126		unsigned long size, int order)
   127	{
   128		unsigned long cur_size = 1 << order;
   129		unsigned long total_size = 0;
   130	
   131		while (size && cur_size > size) {
   132			cur_size >>= 1;
   133			order--;
   134			area--;
   135			if (cur_size <= size) {
   136				list_add(&page[total_size].lru, &area->free_list[MIGRATE_MOVABLE]);
   137				atomic_set(&(page[total_size]._mapcount), PAGE_BUDDY_MAPCOUNT_VALUE);
   138				set_page_private(&page[total_size], order);
   139				set_pageblock_migratetype(&page[total_size], MIGRATE_MOVABLE);
   140				area->nr_free++;
   141				total_size += cur_size;
   142				size -= cur_size;
   143			}
   144		}
   145	}
   146	
   147	static void spilt_page_area_right(struct zone *zone, struct free_area *area, struct page *page,
   148			unsigned long size, int order)
   149	{
   150		unsigned long cur_size = 1 << order;
   151		struct page *right_page, *head_page;
   152	
   153		right_page = page + size;
   154		while (size && cur_size > size) {
   155			cur_size >>= 1;
   156			order--;
   157			area--;
   158			if (cur_size <= size) {
   159				head_page = right_page - cur_size;
   160				list_add(&head_page->lru, &area->free_list[MIGRATE_MOVABLE]);
   161				atomic_set(&(head_page->_mapcount), PAGE_BUDDY_MAPCOUNT_VALUE);
   162				set_page_private(head_page, order);
   163				set_pageblock_migratetype(head_page, MIGRATE_MOVABLE);
   164				area->nr_free++;
   165				size -= cur_size;
   166				right_page = head_page;
   167			}
   168		}
   169	}
   170	
 > 171	void reserve_page_from_buddy(unsigned long nr_pages, struct page *page)
   172	{
   173		unsigned int current_order;
   174		struct page *page_end;
   175		struct free_area *area;
   176		struct zone *zone;
   177		struct page *head_page;
   178	
   179		head_page = find_head_page(page);
   180		if (!head_page) {
   181			pr_warn("Find page head fail.");
   182			return;
   183		}
   184	
   185		current_order = head_page->private;
   186		page_end = head_page + (1 << current_order);
   187		zone = page_zone(head_page);
   188		area = &(zone->free_area[current_order]);
   189		list_del(&head_page->lru);
   190		atomic_set(&head_page->_mapcount, -1);
   191		set_page_private(head_page, 0);
   192		area->nr_free--;
   193	
   194		if (head_page != page)
   195			spilt_page_area_left(zone, area, head_page,
   196				(unsigned long)(page - head_page), current_order);
   197		page = page + nr_pages;
   198		if (page < page_end) {
   199			spilt_page_area_right(zone, area, page,
   200				(unsigned long)(page_end - page), current_order);
   201		} else if (page > page_end) {
   202			pr_warn("Find page end smaller than page.");
   203		}
   204	}
   205	

-- 
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:[~2024-04-01 11:31 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-04-01 11:31 [openeuler:openEuler-1.0-LTS 16561/22014] mm/pin_mem.c:34:14: sparse: sparse: symbol 'max_pin_pid_num' was not declared. Should it be static? 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.