From: kernel test robot <lkp@intel.com>
To: kernel@openeuler.org, Wupeng Ma <mawupeng1@huawei.com>
Cc: oe-kbuild-all@lists.linux.dev
Subject: [openeuler:OLK-6.6 1897/1897] mm/memblock.c:1409:20: warning: no previous prototype for 'memblock_alloc_range_nid_flags'
Date: Fri, 7 Feb 2025 14:32:48 +0800 [thread overview]
Message-ID: <202502071449.bIBBpkJp-lkp@intel.com> (raw)
Hi Ma,
FYI, the error/warning still remains.
tree: https://gitee.com/openeuler/kernel.git OLK-6.6
head: fdc8c83a12a8fc4b7c55971d552758ffe2f34c14
commit: 64018b291c1f49622c4b23b303364d760306d662 [1897/1897] mm/memblock: Introduce ability to alloc memory from specify memory region
config: x86_64-alldefconfig (https://download.01.org/0day-ci/archive/20250207/202502071449.bIBBpkJp-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250207/202502071449.bIBBpkJp-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/202502071449.bIBBpkJp-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> mm/memblock.c:1409:20: warning: no previous prototype for 'memblock_alloc_range_nid_flags' [-Wmissing-prototypes]
1409 | phys_addr_t __init memblock_alloc_range_nid_flags(phys_addr_t size,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--
>> mm/memblock.c:1579: warning: expecting prototype for memblock_alloc_internal(). Prototype was for __memblock_alloc_internal() instead
vim +/memblock_alloc_range_nid_flags +1409 mm/memblock.c
1386
1387 /**
1388 * memblock_alloc_range_nid_flags - allocate boot memory block with specify flag
1389 * @size: size of memory block to be allocated in bytes
1390 * @align: alignment of the region and block's size
1391 * @start: the lower bound of the memory region to allocate (phys address)
1392 * @end: the upper bound of the memory region to allocate (phys address)
1393 * @nid: nid of the free area to find, %NUMA_NO_NODE for any node
1394 * @exact_nid: control the allocation fall back to other nodes
1395 * @flags: alloc memory from specify memblock flag
1396 *
1397 * The allocation is performed from memory region limited by
1398 * memblock.current_limit if @end == %MEMBLOCK_ALLOC_ACCESSIBLE.
1399 *
1400 * If the specified node can not hold the requested memory and @exact_nid
1401 * is false, the allocation falls back to any node in the system.
1402 *
1403 * In addition, function sets the min_count to 0 using kmemleak_alloc_phys for
1404 * allocated boot memory block, so that it is never reported as leaks.
1405 *
1406 * Return:
1407 * Physical address of allocated memory block on success, %0 on failure.
1408 */
> 1409 phys_addr_t __init memblock_alloc_range_nid_flags(phys_addr_t size,
1410 phys_addr_t align, phys_addr_t start,
1411 phys_addr_t end, int nid,
1412 bool exact_nid,
1413 enum memblock_flags flags)
1414 {
1415 phys_addr_t found;
1416
1417 if (WARN_ONCE(nid == MAX_NUMNODES, "Usage of MAX_NUMNODES is deprecated. Use NUMA_NO_NODE instead\n"))
1418 nid = NUMA_NO_NODE;
1419
1420 if (!align) {
1421 /* Can't use WARNs this early in boot on powerpc */
1422 dump_stack();
1423 align = SMP_CACHE_BYTES;
1424 }
1425
1426 again:
1427 found = memblock_find_in_range_node(size, align, start, end, nid,
1428 flags);
1429 if (found && !memblock_reserve(found, size))
1430 goto done;
1431
1432 if (nid != NUMA_NO_NODE && !exact_nid) {
1433 found = memblock_find_in_range_node(size, align, start,
1434 end, NUMA_NO_NODE,
1435 flags);
1436 if (found && !memblock_reserve(found, size))
1437 goto done;
1438 }
1439
1440 if (flags & MEMBLOCK_MIRROR) {
1441 flags &= ~MEMBLOCK_MIRROR;
1442 pr_warn_ratelimited("Could not allocate %pap bytes of mirrored memory\n",
1443 &size);
1444 goto again;
1445 }
1446
1447 return 0;
1448
1449 done:
1450 /*
1451 * Skip kmemleak for those places like kasan_init() and
1452 * early_pgtable_alloc() due to high volume.
1453 */
1454 if (end != MEMBLOCK_ALLOC_NOLEAKTRACE)
1455 /*
1456 * Memblock allocated blocks are never reported as
1457 * leaks. This is because many of these blocks are
1458 * only referred via the physical address which is
1459 * not looked up by kmemleak.
1460 */
1461 kmemleak_alloc_phys(found, size, 0);
1462
1463 /*
1464 * Some Virtual Machine platforms, such as Intel TDX or AMD SEV-SNP,
1465 * require memory to be accepted before it can be used by the
1466 * guest.
1467 *
1468 * Accept the memory of the allocated buffer.
1469 */
1470 accept_memory(found, found + size);
1471
1472 return found;
1473 }
1474
1475 /**
1476 * memblock_alloc_range_nid - allocate boot memory block
1477 * @size: size of memory block to be allocated in bytes
1478 * @align: alignment of the region and block's size
1479 * @start: the lower bound of the memory region to allocate (phys address)
1480 * @end: the upper bound of the memory region to allocate (phys address)
1481 * @nid: nid of the free area to find, %NUMA_NO_NODE for any node
1482 * @exact_nid: control the allocation fall back to other nodes
1483 *
1484 * The allocation is performed from memory region limited by
1485 * memblock.current_limit if @end == %MEMBLOCK_ALLOC_ACCESSIBLE.
1486 *
1487 * If the specified node can not hold the requested memory and @exact_nid
1488 * is false, the allocation falls back to any node in the system.
1489 *
1490 * For systems with memory mirroring, the allocation is attempted first
1491 * from the regions with mirroring enabled and then retried from any
1492 * memory region.
1493 *
1494 * In addition, function using kmemleak_alloc_phys for allocated boot
1495 * memory block, it is never reported as leaks.
1496 *
1497 * Return:
1498 * Physical address of allocated memory block on success, %0 on failure.
1499 */
1500 phys_addr_t __init memblock_alloc_range_nid(phys_addr_t size,
1501 phys_addr_t align, phys_addr_t start,
1502 phys_addr_t end, int nid,
1503 bool exact_nid)
1504 {
1505 return memblock_alloc_range_nid_flags(size, align, start, end, nid,
1506 exact_nid,
1507 choose_memblock_flags());
1508 }
1509
1510 /**
1511 * memblock_phys_alloc_range - allocate a memory block inside specified range
1512 * @size: size of memory block to be allocated in bytes
1513 * @align: alignment of the region and block's size
1514 * @start: the lower bound of the memory region to allocate (physical address)
1515 * @end: the upper bound of the memory region to allocate (physical address)
1516 *
1517 * Allocate @size bytes in the between @start and @end.
1518 *
1519 * Return: physical address of the allocated memory block on success,
1520 * %0 on failure.
1521 */
1522 phys_addr_t __init memblock_phys_alloc_range(phys_addr_t size,
1523 phys_addr_t align,
1524 phys_addr_t start,
1525 phys_addr_t end)
1526 {
1527 memblock_dbg("%s: %llu bytes align=0x%llx from=%pa max_addr=%pa %pS\n",
1528 __func__, (u64)size, (u64)align, &start, &end,
1529 (void *)_RET_IP_);
1530 return memblock_alloc_range_nid(size, align, start, end, NUMA_NO_NODE,
1531 false);
1532 }
1533
1534 /**
1535 * memblock_phys_alloc_try_nid - allocate a memory block from specified NUMA node
1536 * @size: size of memory block to be allocated in bytes
1537 * @align: alignment of the region and block's size
1538 * @nid: nid of the free area to find, %NUMA_NO_NODE for any node
1539 *
1540 * Allocates memory block from the specified NUMA node. If the node
1541 * has no available memory, attempts to allocated from any node in the
1542 * system.
1543 *
1544 * Return: physical address of the allocated memory block on success,
1545 * %0 on failure.
1546 */
1547 phys_addr_t __init memblock_phys_alloc_try_nid(phys_addr_t size, phys_addr_t align, int nid)
1548 {
1549 return memblock_alloc_range_nid(size, align, 0,
1550 MEMBLOCK_ALLOC_ACCESSIBLE, nid, false);
1551 }
1552
1553 /**
1554 * memblock_alloc_internal - allocate boot memory block
1555 * @size: size of memory block to be allocated in bytes
1556 * @align: alignment of the region and block's size
1557 * @min_addr: the lower bound of the memory region to allocate (phys address)
1558 * @max_addr: the upper bound of the memory region to allocate (phys address)
1559 * @nid: nid of the free area to find, %NUMA_NO_NODE for any node
1560 * @exact_nid: control the allocation fall back to other nodes
1561 * @flags: alloc memory from specify memblock flag
1562 *
1563 * Allocates memory block using memblock_alloc_range_nid() and
1564 * converts the returned physical address to virtual.
1565 *
1566 * The @min_addr limit is dropped if it can not be satisfied and the allocation
1567 * will fall back to memory below @min_addr. Other constraints, such
1568 * as node and mirrored memory will be handled again in
1569 * memblock_alloc_range_nid().
1570 *
1571 * Return:
1572 * Virtual address of allocated memory block on success, NULL on failure.
1573 */
1574 static void * __init __memblock_alloc_internal(
1575 phys_addr_t size, phys_addr_t align,
1576 phys_addr_t min_addr, phys_addr_t max_addr,
1577 int nid, bool exact_nid,
1578 enum memblock_flags flags)
> 1579 {
1580 phys_addr_t alloc;
1581
1582 /*
1583 * Detect any accidental use of these APIs after slab is ready, as at
1584 * this moment memblock may be deinitialized already and its
1585 * internal data may be destroyed (after execution of memblock_free_all)
1586 */
1587 if (WARN_ON_ONCE(slab_is_available()))
1588 return kzalloc_node(size, GFP_NOWAIT, nid);
1589
1590 if (max_addr > memblock.current_limit)
1591 max_addr = memblock.current_limit;
1592
1593 alloc = memblock_alloc_range_nid_flags(size, align, min_addr, max_addr, nid,
1594 exact_nid, flags);
1595
1596 /* retry allocation without lower limit */
1597 if (!alloc && min_addr)
1598 alloc = memblock_alloc_range_nid_flags(size, align, 0, max_addr, nid,
1599 exact_nid, flags);
1600
1601 if (!alloc)
1602 return NULL;
1603
1604 return phys_to_virt(alloc);
1605 }
1606
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2025-02-07 6:33 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=202502071449.bIBBpkJp-lkp@intel.com \
--to=lkp@intel.com \
--cc=kernel@openeuler.org \
--cc=mawupeng1@huawei.com \
--cc=oe-kbuild-all@lists.linux.dev \
/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.