* [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.