Hi. Recently, I read about the "Dynamic reserved memory" patch. In the __reserved_mem_reserve_reg() function, I found something that I couldn't easily understand. To get help, I sent an e-mail to this mailing list. I attached the code below. static int __init __reserved_mem_reserve_reg(unsigned long node, const char *uname) { int t_len = (dt_root_addr_cells + dt_root_size_cells) * sizeof(__be32); phys_addr_t base, size; int len; const __be32 *prop; int nomap, first = 1; prop = of_get_flat_dt_prop(node, "reg", &len); if (!prop) return -ENOENT; if (len && len % t_len != 0) { pr_err("Reserved memory: invalid reg property in '%s',skipping node.\n", uname); return -EINVAL; } nomap = of_get_flat_dt_prop(node, "no-map", NULL) != NULL; while (len >= t_len) { base = dt_mem_next_cell(dt_root_addr_cells, &prop); size = dt_mem_next_cell(dt_root_size_cells, &prop); if (size && early_init_dt_reserve_memory_arch(base, size, nomap) == 0) pr_debug("Reserved memory: reserved region for node '%s': base %pa, size %ld MiB\n", uname, &base, (unsigned long)size / SZ_1M); else pr_info("Reserved memory: failed to reserve memory for node '%s': base %pa, size %ld MiB\n", uname, &base, (unsigned long)size / SZ_1M); len -= t_len; if (first) { fdt_reserved_mem_save_node(node, uname, base, size); first = 0; } } return 0; } I found that fdt_reserved_mem_save_node() is called the regardless of memblock remove/reserve success. I think early_init_dt_reserve_memory_arch() can fail.(ex. for the lack of memblock's region) So I wonder there will be a situation where reserved_mem initialization will be executed without memory reservation. I would appreciate it if you let me know if I missed anything :) _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies