Question about the "Dynamic reserved memory" patch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]

  Powered by Linux