All of lore.kernel.org
 help / color / mirror / Atom feed
* [intel-tdx:guest-unaccepted-memory 3/15] mm/page_alloc.c:1183:12: warning: 'page_needs_acceptance' is used uninitialized
@ 2022-05-11 16:16 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2022-05-11 16:16 UTC (permalink / raw)
  To: Kirill A. Shutemov; +Cc: kbuild-all, linux-kernel

tree:   https://github.com/intel/tdx.git guest-unaccepted-memory
head:   83a8442434ff3bbf432df7508f1fefd447ca2c86
commit: 0845556ccd9555f5245d3bdd6cb646c2ea3fa9c2 [3/15] mm: Add support for unaccepted memory
config: x86_64-randconfig-a016-20220509 (https://download.01.org/0day-ci/archive/20220512/202205120007.cudgBgVI-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.2.0-20) 11.2.0
reproduce (this is a W=1 build):
        # https://github.com/intel/tdx/commit/0845556ccd9555f5245d3bdd6cb646c2ea3fa9c2
        git remote add intel-tdx https://github.com/intel/tdx.git
        git fetch --no-tags intel-tdx guest-unaccepted-memory
        git checkout 0845556ccd9555f5245d3bdd6cb646c2ea3fa9c2
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   mm/page_alloc.c: In function '__free_one_page':
>> mm/page_alloc.c:1183:12: warning: 'page_needs_acceptance' is used uninitialized [-Wuninitialized]
    1183 |         if (!page_needs_acceptance && (fpi_flags & FPI_UNACCEPTED_SLOWPATH))
         |            ^


vim +/page_needs_acceptance +1183 mm/page_alloc.c

  1056	
  1057	/*
  1058	 * Freeing function for a buddy system allocator.
  1059	 *
  1060	 * The concept of a buddy system is to maintain direct-mapped table
  1061	 * (containing bit values) for memory blocks of various "orders".
  1062	 * The bottom level table contains the map for the smallest allocatable
  1063	 * units of memory (here, pages), and each level above it describes
  1064	 * pairs of units from the levels below, hence, "buddies".
  1065	 * At a high level, all that happens here is marking the table entry
  1066	 * at the bottom level available, and propagating the changes upward
  1067	 * as necessary, plus some accounting needed to play nicely with other
  1068	 * parts of the VM system.
  1069	 * At each level, we keep a list of pages, which are heads of continuous
  1070	 * free pages of length of (1 << order) and marked with PageBuddy.
  1071	 * Page's order is recorded in page_private(page) field.
  1072	 * So when we are allocating or freeing one, we can derive the state of the
  1073	 * other.  That is, if we allocate a small block, and both were
  1074	 * free, the remainder of the region must be split into blocks.
  1075	 * If a block is freed, and its buddy is also free, then this
  1076	 * triggers coalescing into a block of larger size.
  1077	 *
  1078	 * -- nyc
  1079	 */
  1080	
  1081	static inline void __free_one_page(struct page *page,
  1082			unsigned long pfn,
  1083			struct zone *zone, unsigned int order,
  1084			int migratetype, fpi_t fpi_flags)
  1085	{
  1086		struct capture_control *capc = task_capc(zone);
  1087		unsigned int max_order = pageblock_order;
  1088		unsigned long buddy_pfn;
  1089		unsigned long combined_pfn;
  1090		struct page *buddy;
  1091		bool to_tail;
  1092		bool page_needs_acceptance;
  1093	
  1094		VM_BUG_ON(!zone_is_initialized(zone));
  1095		VM_BUG_ON_PAGE(page->flags & PAGE_FLAGS_CHECK_AT_PREP, page);
  1096	
  1097		VM_BUG_ON(migratetype == -1);
  1098		if (likely(!is_migrate_isolate(migratetype)))
  1099			__mod_zone_freepage_state(zone, 1 << order, migratetype);
  1100	
  1101		VM_BUG_ON_PAGE(pfn & ((1 << order) - 1), page);
  1102		VM_BUG_ON_PAGE(bad_range(zone, page), page);
  1103	
  1104		if (PageUnaccepted(page)) {
  1105			page_needs_acceptance = true;
  1106			__ClearPageUnaccepted(page);
  1107		}
  1108	
  1109	continue_merging:
  1110		while (order < max_order) {
  1111			if (compaction_capture(capc, page, order, migratetype)) {
  1112				__mod_zone_freepage_state(zone, -(1 << order),
  1113									migratetype);
  1114				return;
  1115			}
  1116			buddy_pfn = __find_buddy_pfn(pfn, order);
  1117			buddy = page + (buddy_pfn - pfn);
  1118	
  1119			if (!page_is_buddy(page, buddy, order))
  1120				goto done_merging;
  1121			/*
  1122			 * Our buddy is free or it is CONFIG_DEBUG_PAGEALLOC guard page,
  1123			 * merge with it and move up one order.
  1124			 */
  1125			if (page_is_guard(buddy))
  1126				clear_page_guard(zone, buddy, order, migratetype);
  1127			else
  1128				del_page_from_free_list(buddy, zone, order);
  1129	
  1130			/* Mark page unaccepted if any of merged pages were unaccepted */
  1131			if (PageUnaccepted(buddy)) {
  1132				page_needs_acceptance = true;
  1133				__ClearPageUnaccepted(buddy);
  1134			}
  1135	
  1136			combined_pfn = buddy_pfn & pfn;
  1137			page = page + (combined_pfn - pfn);
  1138			pfn = combined_pfn;
  1139			order++;
  1140		}
  1141		if (order < MAX_ORDER - 1) {
  1142			/* If we are here, it means order is >= pageblock_order.
  1143			 * We want to prevent merge between freepages on pageblock
  1144			 * without fallbacks and normal pageblock. Without this,
  1145			 * pageblock isolation could cause incorrect freepage or CMA
  1146			 * accounting or HIGHATOMIC accounting.
  1147			 *
  1148			 * We don't want to hit this code for the more frequent
  1149			 * low-order merging.
  1150			 */
  1151			int buddy_mt;
  1152	
  1153			buddy_pfn = __find_buddy_pfn(pfn, order);
  1154			buddy = page + (buddy_pfn - pfn);
  1155	
  1156			if (!page_is_buddy(page, buddy, order))
  1157				goto done_merging;
  1158			buddy_mt = get_pageblock_migratetype(buddy);
  1159	
  1160			if (migratetype != buddy_mt
  1161					&& (!migratetype_is_mergeable(migratetype) ||
  1162						!migratetype_is_mergeable(buddy_mt)))
  1163				goto done_merging;
  1164			max_order = order + 1;
  1165			goto continue_merging;
  1166		}
  1167	
  1168	done_merging:
  1169		set_buddy_order(page, order);
  1170	
  1171		/*
  1172		 * The page gets marked as PageUnaccepted() if any of merged-in pages
  1173		 * is PageUnaccepted().
  1174		 *
  1175		 * New pages, just being added to buddy allocator, do not have
  1176		 * PageUnaccepted() set. FPI_UNACCEPTED_SLOWPATH indicates that the
  1177		 * page is new and page_is_unaccepted() check is required to
  1178		 * determinate if acceptance is required.
  1179		 *
  1180		 * Avoid calling page_is_unaccepted() if it is known that the page
  1181		 * needs acceptance. It can be costly.
  1182		 */
> 1183		if (!page_needs_acceptance && (fpi_flags & FPI_UNACCEPTED_SLOWPATH))
  1184			page_needs_acceptance = page_is_unaccepted(page, order);
  1185		if (page_needs_acceptance)
  1186			__SetPageUnaccepted(page);
  1187	
  1188		if (fpi_flags & FPI_TO_TAIL)
  1189			to_tail = true;
  1190		else if (is_shuffle_order(order))
  1191			to_tail = shuffle_pick_tail();
  1192		else
  1193			to_tail = buddy_merge_likely(pfn, buddy_pfn, page, order);
  1194	
  1195		if (to_tail)
  1196			add_to_free_list_tail(page, zone, order, migratetype);
  1197		else
  1198			add_to_free_list(page, zone, order, migratetype);
  1199	
  1200		/* Notify page reporting subsystem of freed page */
  1201		if (!(fpi_flags & FPI_SKIP_REPORT_NOTIFY))
  1202			page_reporting_notify_free(order);
  1203	}
  1204	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

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

only message in thread, other threads:[~2022-05-11 16:19 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-11 16:16 [intel-tdx:guest-unaccepted-memory 3/15] mm/page_alloc.c:1183:12: warning: 'page_needs_acceptance' is used uninitialized 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.