From: kernel test robot <lkp@intel.com>
To: Rik van Riel <riel@surriel.com>, Vinay Banakar <vny@google.com>
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev,
Andrew Morton <akpm@linux-foundation.org>,
Linux Memory Management List <linux-mm@kvack.org>,
linux-kernel@vger.kernel.org, kernel-team@meta.com,
Bharata B Rao <bharata@amd.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
Peter Zijlstra <peterz@infradead.org>,
Borislav Petkov <bp@alien8.de>, SeongJae Park <sj@kernel.org>,
Matthew Wilcox <willy@infradead.org>,
Byungchul Park <byungchul@sk.com>,
Brendan Jackman <jackmanb@google.com>
Subject: Re: [PATCH] mm/vmscan: batch TLB flush during memory reclaim
Date: Thu, 20 Mar 2025 16:29:51 +0800 [thread overview]
Message-ID: <202503201615.1tBb8BcR-lkp@intel.com> (raw)
In-Reply-To: <20250319132818.1003878b@fangorn>
Hi Rik,
kernel test robot noticed the following build errors:
[auto build test ERROR on akpm-mm/mm-everything]
url: https://github.com/intel-lab-lkp/linux/commits/Rik-van-Riel/mm-vmscan-batch-TLB-flush-during-memory-reclaim/20250320-013150
base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
patch link: https://lore.kernel.org/r/20250319132818.1003878b%40fangorn
patch subject: [PATCH] mm/vmscan: batch TLB flush during memory reclaim
config: i386-buildonly-randconfig-003-20250320 (https://download.01.org/0day-ci/archive/20250320/202503201615.1tBb8BcR-lkp@intel.com/config)
compiler: clang version 20.1.1 (https://github.com/llvm/llvm-project 424c2d9b7e4de40d0804dd374721e6411c27d1d1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250320/202503201615.1tBb8BcR-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/202503201615.1tBb8BcR-lkp@intel.com/
All errors (new ones prefixed by >>):
>> mm/vmscan.c:1560:32: error: call to undeclared function 'folio_test_young'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
1560 | (folio_mapped(folio) && folio_test_young(folio)))
| ^
1 error generated.
vim +/folio_test_young +1560 mm/vmscan.c
1093
1094 /*
1095 * shrink_folio_list() returns the number of reclaimed pages
1096 */
1097 static unsigned int shrink_folio_list(struct list_head *folio_list,
1098 struct pglist_data *pgdat, struct scan_control *sc,
1099 struct reclaim_stat *stat, bool ignore_references)
1100 {
1101 struct folio_batch free_folios;
1102 LIST_HEAD(ret_folios);
1103 LIST_HEAD(demote_folios);
1104 LIST_HEAD(pageout_folios);
1105 unsigned int nr_reclaimed = 0, nr_demoted = 0;
1106 unsigned int pgactivate = 0;
1107 bool do_demote_pass;
1108 struct swap_iocb *plug = NULL;
1109
1110 folio_batch_init(&free_folios);
1111 memset(stat, 0, sizeof(*stat));
1112 cond_resched();
1113 do_demote_pass = can_demote(pgdat->node_id, sc);
1114
1115 retry:
1116 while (!list_empty(folio_list)) {
1117 struct address_space *mapping;
1118 struct folio *folio;
1119 enum folio_references references = FOLIOREF_RECLAIM;
1120 bool dirty, writeback;
1121 unsigned int nr_pages;
1122
1123 cond_resched();
1124
1125 folio = lru_to_folio(folio_list);
1126 list_del(&folio->lru);
1127
1128 if (!folio_trylock(folio))
1129 goto keep;
1130
1131 if (folio_contain_hwpoisoned_page(folio)) {
1132 unmap_poisoned_folio(folio, folio_pfn(folio), false);
1133 folio_unlock(folio);
1134 folio_put(folio);
1135 continue;
1136 }
1137
1138 VM_BUG_ON_FOLIO(folio_test_active(folio), folio);
1139
1140 nr_pages = folio_nr_pages(folio);
1141
1142 /* Account the number of base pages */
1143 sc->nr_scanned += nr_pages;
1144
1145 if (unlikely(!folio_evictable(folio)))
1146 goto activate_locked;
1147
1148 if (!sc->may_unmap && folio_mapped(folio))
1149 goto keep_locked;
1150
1151 /*
1152 * The number of dirty pages determines if a node is marked
1153 * reclaim_congested. kswapd will stall and start writing
1154 * folios if the tail of the LRU is all dirty unqueued folios.
1155 */
1156 folio_check_dirty_writeback(folio, &dirty, &writeback);
1157 if (dirty || writeback)
1158 stat->nr_dirty += nr_pages;
1159
1160 if (dirty && !writeback)
1161 stat->nr_unqueued_dirty += nr_pages;
1162
1163 /*
1164 * Treat this folio as congested if folios are cycling
1165 * through the LRU so quickly that the folios marked
1166 * for immediate reclaim are making it to the end of
1167 * the LRU a second time.
1168 */
1169 if (writeback && folio_test_reclaim(folio))
1170 stat->nr_congested += nr_pages;
1171
1172 /*
1173 * If a folio at the tail of the LRU is under writeback, there
1174 * are three cases to consider.
1175 *
1176 * 1) If reclaim is encountering an excessive number
1177 * of folios under writeback and this folio has both
1178 * the writeback and reclaim flags set, then it
1179 * indicates that folios are being queued for I/O but
1180 * are being recycled through the LRU before the I/O
1181 * can complete. Waiting on the folio itself risks an
1182 * indefinite stall if it is impossible to writeback
1183 * the folio due to I/O error or disconnected storage
1184 * so instead note that the LRU is being scanned too
1185 * quickly and the caller can stall after the folio
1186 * list has been processed.
1187 *
1188 * 2) Global or new memcg reclaim encounters a folio that is
1189 * not marked for immediate reclaim, or the caller does not
1190 * have __GFP_FS (or __GFP_IO if it's simply going to swap,
1191 * not to fs). In this case mark the folio for immediate
1192 * reclaim and continue scanning.
1193 *
1194 * Require may_enter_fs() because we would wait on fs, which
1195 * may not have submitted I/O yet. And the loop driver might
1196 * enter reclaim, and deadlock if it waits on a folio for
1197 * which it is needed to do the write (loop masks off
1198 * __GFP_IO|__GFP_FS for this reason); but more thought
1199 * would probably show more reasons.
1200 *
1201 * 3) Legacy memcg encounters a folio that already has the
1202 * reclaim flag set. memcg does not have any dirty folio
1203 * throttling so we could easily OOM just because too many
1204 * folios are in writeback and there is nothing else to
1205 * reclaim. Wait for the writeback to complete.
1206 *
1207 * In cases 1) and 2) we activate the folios to get them out of
1208 * the way while we continue scanning for clean folios on the
1209 * inactive list and refilling from the active list. The
1210 * observation here is that waiting for disk writes is more
1211 * expensive than potentially causing reloads down the line.
1212 * Since they're marked for immediate reclaim, they won't put
1213 * memory pressure on the cache working set any longer than it
1214 * takes to write them to disk.
1215 */
1216 if (folio_test_writeback(folio)) {
1217 /* Case 1 above */
1218 if (current_is_kswapd() &&
1219 folio_test_reclaim(folio) &&
1220 test_bit(PGDAT_WRITEBACK, &pgdat->flags)) {
1221 stat->nr_immediate += nr_pages;
1222 goto activate_locked;
1223
1224 /* Case 2 above */
1225 } else if (writeback_throttling_sane(sc) ||
1226 !folio_test_reclaim(folio) ||
1227 !may_enter_fs(folio, sc->gfp_mask)) {
1228 /*
1229 * This is slightly racy -
1230 * folio_end_writeback() might have
1231 * just cleared the reclaim flag, then
1232 * setting the reclaim flag here ends up
1233 * interpreted as the readahead flag - but
1234 * that does not matter enough to care.
1235 * What we do want is for this folio to
1236 * have the reclaim flag set next time
1237 * memcg reclaim reaches the tests above,
1238 * so it will then wait for writeback to
1239 * avoid OOM; and it's also appropriate
1240 * in global reclaim.
1241 */
1242 folio_set_reclaim(folio);
1243 stat->nr_writeback += nr_pages;
1244 goto activate_locked;
1245
1246 /* Case 3 above */
1247 } else {
1248 folio_unlock(folio);
1249 folio_wait_writeback(folio);
1250 /* then go back and try same folio again */
1251 list_add_tail(&folio->lru, folio_list);
1252 continue;
1253 }
1254 }
1255
1256 if (!ignore_references)
1257 references = folio_check_references(folio, sc);
1258
1259 switch (references) {
1260 case FOLIOREF_ACTIVATE:
1261 goto activate_locked;
1262 case FOLIOREF_KEEP:
1263 stat->nr_ref_keep += nr_pages;
1264 goto keep_locked;
1265 case FOLIOREF_RECLAIM:
1266 case FOLIOREF_RECLAIM_CLEAN:
1267 ; /* try to reclaim the folio below */
1268 }
1269
1270 /*
1271 * Before reclaiming the folio, try to relocate
1272 * its contents to another node.
1273 */
1274 if (do_demote_pass &&
1275 (thp_migration_supported() || !folio_test_large(folio))) {
1276 list_add(&folio->lru, &demote_folios);
1277 folio_unlock(folio);
1278 continue;
1279 }
1280
1281 /*
1282 * Anonymous process memory has backing store?
1283 * Try to allocate it some swap space here.
1284 * Lazyfree folio could be freed directly
1285 */
1286 if (folio_test_anon(folio) && folio_test_swapbacked(folio)) {
1287 if (!folio_test_swapcache(folio)) {
1288 if (!(sc->gfp_mask & __GFP_IO))
1289 goto keep_locked;
1290 if (folio_maybe_dma_pinned(folio))
1291 goto keep_locked;
1292 if (folio_test_large(folio)) {
1293 /* cannot split folio, skip it */
1294 if (!can_split_folio(folio, 1, NULL))
1295 goto activate_locked;
1296 /*
1297 * Split partially mapped folios right away.
1298 * We can free the unmapped pages without IO.
1299 */
1300 if (data_race(!list_empty(&folio->_deferred_list) &&
1301 folio_test_partially_mapped(folio)) &&
1302 split_folio_to_list(folio, folio_list))
1303 goto activate_locked;
1304 }
1305 if (folio_alloc_swap(folio, __GFP_HIGH | __GFP_NOWARN)) {
1306 int __maybe_unused order = folio_order(folio);
1307
1308 if (!folio_test_large(folio))
1309 goto activate_locked_split;
1310 /* Fallback to swap normal pages */
1311 if (split_folio_to_list(folio, folio_list))
1312 goto activate_locked;
1313 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
1314 if (nr_pages >= HPAGE_PMD_NR) {
1315 count_memcg_folio_events(folio,
1316 THP_SWPOUT_FALLBACK, 1);
1317 count_vm_event(THP_SWPOUT_FALLBACK);
1318 }
1319 #endif
1320 count_mthp_stat(order, MTHP_STAT_SWPOUT_FALLBACK);
1321 if (folio_alloc_swap(folio, __GFP_HIGH | __GFP_NOWARN))
1322 goto activate_locked_split;
1323 }
1324 /*
1325 * Normally the folio will be dirtied in unmap because its
1326 * pte should be dirty. A special case is MADV_FREE page. The
1327 * page's pte could have dirty bit cleared but the folio's
1328 * SwapBacked flag is still set because clearing the dirty bit
1329 * and SwapBacked flag has no lock protected. For such folio,
1330 * unmap will not set dirty bit for it, so folio reclaim will
1331 * not write the folio out. This can cause data corruption when
1332 * the folio is swapped in later. Always setting the dirty flag
1333 * for the folio solves the problem.
1334 */
1335 folio_mark_dirty(folio);
1336 }
1337 }
1338
1339 /*
1340 * If the folio was split above, the tail pages will make
1341 * their own pass through this function and be accounted
1342 * then.
1343 */
1344 if ((nr_pages > 1) && !folio_test_large(folio)) {
1345 sc->nr_scanned -= (nr_pages - 1);
1346 nr_pages = 1;
1347 }
1348
1349 /*
1350 * The folio is mapped into the page tables of one or more
1351 * processes. Try to unmap it here.
1352 */
1353 if (folio_mapped(folio)) {
1354 enum ttu_flags flags = TTU_BATCH_FLUSH;
1355 bool was_swapbacked = folio_test_swapbacked(folio);
1356
1357 if (folio_test_pmd_mappable(folio))
1358 flags |= TTU_SPLIT_HUGE_PMD;
1359 /*
1360 * Without TTU_SYNC, try_to_unmap will only begin to
1361 * hold PTL from the first present PTE within a large
1362 * folio. Some initial PTEs might be skipped due to
1363 * races with parallel PTE writes in which PTEs can be
1364 * cleared temporarily before being written new present
1365 * values. This will lead to a large folio is still
1366 * mapped while some subpages have been partially
1367 * unmapped after try_to_unmap; TTU_SYNC helps
1368 * try_to_unmap acquire PTL from the first PTE,
1369 * eliminating the influence of temporary PTE values.
1370 */
1371 if (folio_test_large(folio))
1372 flags |= TTU_SYNC;
1373
1374 try_to_unmap(folio, flags);
1375 if (folio_mapped(folio)) {
1376 stat->nr_unmap_fail += nr_pages;
1377 if (!was_swapbacked &&
1378 folio_test_swapbacked(folio))
1379 stat->nr_lazyfree_fail += nr_pages;
1380 goto activate_locked;
1381 }
1382 }
1383
1384 /*
1385 * Folio is unmapped now so it cannot be newly pinned anymore.
1386 * No point in trying to reclaim folio if it is pinned.
1387 * Furthermore we don't want to reclaim underlying fs metadata
1388 * if the folio is pinned and thus potentially modified by the
1389 * pinning process as that may upset the filesystem.
1390 */
1391 if (folio_maybe_dma_pinned(folio))
1392 goto activate_locked;
1393
1394 mapping = folio_mapping(folio);
1395 if (folio_test_dirty(folio)) {
1396 /*
1397 * Only kswapd can writeback filesystem folios
1398 * to avoid risk of stack overflow. But avoid
1399 * injecting inefficient single-folio I/O into
1400 * flusher writeback as much as possible: only
1401 * write folios when we've encountered many
1402 * dirty folios, and when we've already scanned
1403 * the rest of the LRU for clean folios and see
1404 * the same dirty folios again (with the reclaim
1405 * flag set).
1406 */
1407 if (folio_is_file_lru(folio) &&
1408 (!current_is_kswapd() ||
1409 !folio_test_reclaim(folio) ||
1410 !test_bit(PGDAT_DIRTY, &pgdat->flags))) {
1411 /*
1412 * Immediately reclaim when written back.
1413 * Similar in principle to folio_deactivate()
1414 * except we already have the folio isolated
1415 * and know it's dirty
1416 */
1417 node_stat_mod_folio(folio, NR_VMSCAN_IMMEDIATE,
1418 nr_pages);
1419 folio_set_reclaim(folio);
1420
1421 goto activate_locked;
1422 }
1423
1424 if (references == FOLIOREF_RECLAIM_CLEAN)
1425 goto keep_locked;
1426 if (!may_enter_fs(folio, sc->gfp_mask))
1427 goto keep_locked;
1428 if (!sc->may_writepage)
1429 goto keep_locked;
1430
1431 /*
1432 * Add to pageout list for batched TLB flushing and IO submission.
1433 */
1434 list_add(&folio->lru, &pageout_folios);
1435 continue;
1436 }
1437
1438 /*
1439 * If the folio has buffers, try to free the buffer
1440 * mappings associated with this folio. If we succeed
1441 * we try to free the folio as well.
1442 *
1443 * We do this even if the folio is dirty.
1444 * filemap_release_folio() does not perform I/O, but it
1445 * is possible for a folio to have the dirty flag set,
1446 * but it is actually clean (all its buffers are clean).
1447 * This happens if the buffers were written out directly,
1448 * with submit_bh(). ext3 will do this, as well as
1449 * the blockdev mapping. filemap_release_folio() will
1450 * discover that cleanness and will drop the buffers
1451 * and mark the folio clean - it can be freed.
1452 *
1453 * Rarely, folios can have buffers and no ->mapping.
1454 * These are the folios which were not successfully
1455 * invalidated in truncate_cleanup_folio(). We try to
1456 * drop those buffers here and if that worked, and the
1457 * folio is no longer mapped into process address space
1458 * (refcount == 1) it can be freed. Otherwise, leave
1459 * the folio on the LRU so it is swappable.
1460 */
1461 if (folio_needs_release(folio)) {
1462 if (!filemap_release_folio(folio, sc->gfp_mask))
1463 goto activate_locked;
1464 if (!mapping && folio_ref_count(folio) == 1) {
1465 folio_unlock(folio);
1466 if (folio_put_testzero(folio))
1467 goto free_it;
1468 else {
1469 /*
1470 * rare race with speculative reference.
1471 * the speculative reference will free
1472 * this folio shortly, so we may
1473 * increment nr_reclaimed here (and
1474 * leave it off the LRU).
1475 */
1476 nr_reclaimed += nr_pages;
1477 continue;
1478 }
1479 }
1480 }
1481
1482 if (folio_test_anon(folio) && !folio_test_swapbacked(folio)) {
1483 /* follow __remove_mapping for reference */
1484 if (!folio_ref_freeze(folio, 1))
1485 goto keep_locked;
1486 /*
1487 * The folio has only one reference left, which is
1488 * from the isolation. After the caller puts the
1489 * folio back on the lru and drops the reference, the
1490 * folio will be freed anyway. It doesn't matter
1491 * which lru it goes on. So we don't bother checking
1492 * the dirty flag here.
1493 */
1494 count_vm_events(PGLAZYFREED, nr_pages);
1495 count_memcg_folio_events(folio, PGLAZYFREED, nr_pages);
1496 } else if (!mapping || !__remove_mapping(mapping, folio, true,
1497 sc->target_mem_cgroup))
1498 goto keep_locked;
1499
1500 folio_unlock(folio);
1501 free_it:
1502 /*
1503 * Folio may get swapped out as a whole, need to account
1504 * all pages in it.
1505 */
1506 nr_reclaimed += nr_pages;
1507
1508 folio_unqueue_deferred_split(folio);
1509 if (folio_batch_add(&free_folios, folio) == 0) {
1510 mem_cgroup_uncharge_folios(&free_folios);
1511 try_to_unmap_flush();
1512 free_unref_folios(&free_folios);
1513 }
1514 continue;
1515
1516 activate_locked_split:
1517 /*
1518 * The tail pages that are failed to add into swap cache
1519 * reach here. Fixup nr_scanned and nr_pages.
1520 */
1521 if (nr_pages > 1) {
1522 sc->nr_scanned -= (nr_pages - 1);
1523 nr_pages = 1;
1524 }
1525 activate_locked:
1526 /* Not a candidate for swapping, so reclaim swap space. */
1527 if (folio_test_swapcache(folio) &&
1528 (mem_cgroup_swap_full(folio) || folio_test_mlocked(folio)))
1529 folio_free_swap(folio);
1530 VM_BUG_ON_FOLIO(folio_test_active(folio), folio);
1531 if (!folio_test_mlocked(folio)) {
1532 int type = folio_is_file_lru(folio);
1533 folio_set_active(folio);
1534 stat->nr_activate[type] += nr_pages;
1535 count_memcg_folio_events(folio, PGACTIVATE, nr_pages);
1536 }
1537 keep_locked:
1538 folio_unlock(folio);
1539 keep:
1540 list_add(&folio->lru, &ret_folios);
1541 VM_BUG_ON_FOLIO(folio_test_lru(folio) ||
1542 folio_test_unevictable(folio), folio);
1543 }
1544 /* 'folio_list' is always empty here */
1545
1546 if (!list_empty(&pageout_folios)) {
1547 /*
1548 * The loop above unmapped the folios from the page tables.
1549 * One TLB flush takes care of the whole batch.
1550 */
1551 try_to_unmap_flush_dirty();
1552
1553 while (!list_empty(&pageout_folios)) {
1554 struct folio *folio = lru_to_folio(&pageout_folios);
1555 struct address_space *mapping;
1556 list_del(&folio->lru);
1557
1558 /* Recheck if the page got reactivated */
1559 if (folio_test_active(folio) ||
> 1560 (folio_mapped(folio) && folio_test_young(folio)))
1561 goto skip_pageout_locked;
1562
1563 mapping = folio_mapping(folio);
1564 switch (pageout(folio, mapping, &plug, &pageout_folios)) {
1565 case PAGE_KEEP:
1566 case PAGE_ACTIVATE:
1567 goto skip_pageout_locked;
1568 case PAGE_SUCCESS:
1569 /*
1570 * If shmem folio is split when writeback to swap,
1571 * the tail pages will make their own pass through
1572 * this loop and be accounted then.
1573 */
1574 stat->nr_pageout += folio_nr_pages(folio);
1575
1576 if (folio_test_writeback(folio))
1577 goto skip_pageout;
1578 if (folio_test_dirty(folio))
1579 goto skip_pageout;
1580
1581 /*
1582 * A synchronous write - probably a ramdisk. Go
1583 * ahead and try to reclaim the folio.
1584 */
1585 if (!folio_trylock(folio))
1586 goto skip_pageout;
1587 if (folio_test_dirty(folio) ||
1588 folio_test_writeback(folio))
1589 goto skip_pageout_locked;
1590 mapping = folio_mapping(folio);
1591 /* try to free the folio below */
1592 fallthrough;
1593 case PAGE_CLEAN:
1594 /* try to free the folio */
1595 if (!mapping ||
1596 !remove_mapping(mapping, folio))
1597 goto skip_pageout_locked;
1598
1599 nr_reclaimed += folio_nr_pages(folio);
1600 folio_unlock(folio);
1601 continue;
1602 }
1603
1604 skip_pageout_locked:
1605 folio_unlock(folio);
1606 skip_pageout:
1607 list_add(&folio->lru, &ret_folios);
1608 }
1609 }
1610
1611 /* Migrate folios selected for demotion */
1612 nr_demoted = demote_folio_list(&demote_folios, pgdat);
1613 nr_reclaimed += nr_demoted;
1614 stat->nr_demoted += nr_demoted;
1615 /* Folios that could not be demoted are still in @demote_folios */
1616 if (!list_empty(&demote_folios)) {
1617 /* Folios which weren't demoted go back on @folio_list */
1618 list_splice_init(&demote_folios, folio_list);
1619
1620 /*
1621 * goto retry to reclaim the undemoted folios in folio_list if
1622 * desired.
1623 *
1624 * Reclaiming directly from top tier nodes is not often desired
1625 * due to it breaking the LRU ordering: in general memory
1626 * should be reclaimed from lower tier nodes and demoted from
1627 * top tier nodes.
1628 *
1629 * However, disabling reclaim from top tier nodes entirely
1630 * would cause ooms in edge scenarios where lower tier memory
1631 * is unreclaimable for whatever reason, eg memory being
1632 * mlocked or too hot to reclaim. We can disable reclaim
1633 * from top tier nodes in proactive reclaim though as that is
1634 * not real memory pressure.
1635 */
1636 if (!sc->proactive) {
1637 do_demote_pass = false;
1638 goto retry;
1639 }
1640 }
1641
1642 pgactivate = stat->nr_activate[0] + stat->nr_activate[1];
1643
1644 mem_cgroup_uncharge_folios(&free_folios);
1645 try_to_unmap_flush();
1646 free_unref_folios(&free_folios);
1647
1648 list_splice(&ret_folios, folio_list);
1649 count_vm_events(PGACTIVATE, pgactivate);
1650
1651 if (plug)
1652 swap_write_unplug(plug);
1653 return nr_reclaimed;
1654 }
1655
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next prev parent reply other threads:[~2025-03-20 8:30 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-19 17:28 [PATCH] mm/vmscan: batch TLB flush during memory reclaim Rik van Riel
2025-03-20 8:29 ` kernel test robot [this message]
2025-03-20 11:42 ` kernel test robot
2025-03-20 16:55 ` Rik van Riel
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=202503201615.1tBb8BcR-lkp@intel.com \
--to=lkp@intel.com \
--cc=akpm@linux-foundation.org \
--cc=bharata@amd.com \
--cc=bp@alien8.de \
--cc=byungchul@sk.com \
--cc=dave.hansen@linux.intel.com \
--cc=jackmanb@google.com \
--cc=kernel-team@meta.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=llvm@lists.linux.dev \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=peterz@infradead.org \
--cc=riel@surriel.com \
--cc=sj@kernel.org \
--cc=vny@google.com \
--cc=willy@infradead.org \
/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.