/* * Initialize the sysfs support for memory devices... */ int __init memory_dev_init(void) { unsigned int i; int ret; int err; unsigned long block_sz; struct memory_block *mem = NULL; ret = subsys_system_register(&memory_subsys, NULL); if (ret) goto out; block_sz = get_memory_block_size(); sections_per_block = block_sz / MIN_MEMORY_BLOCK_SIZE; /* * Create entries for memory sections that were found * during boot and have been initialized */ for (i = 0; i < NR_MEM_SECTIONS; i++) { if (!present_section_nr(i)) continue; /* don't need to reuse memory_block if only one per block */ err = add_memory_section(0, __nr_to_section(i), (sections_per_block == 1) ? NULL : &mem, MEM_ONLINE, BOOT); if (!ret) ret = err; } err = memory_probe_init(); if (!ret) ret = err; err = memory_fail_init(); if (!ret) ret = err; err = block_size_init(); if (!ret) ret = err; out: if (ret) printk(KERN_ERR "%s() failed: %d\n", __func__, ret); return ret; }
/* * need an interface for the VM to add new memory regions, * but without onlining it. */ int register_new_memory(int nid, struct mem_section *section) { return add_memory_section(nid, section, MEM_OFFLINE, HOTPLUG); }
err = block_size_init(); if (!ret) ret = err; out: if (ret) printk(KERN_ERR "%s() failed: %d\n", __func__, ret); return ret; } ng boot and have been initialized */ for (i = 0; i < NR_MEM_SECTIONS; i++) { if (!present_section_nr(i)) continue; /* don't need to reuse memory_block if only one per block */ err = add_memory_section(0, __nr_to_section(i), (sections_per_block == 1) ? NULL : &mem, MEM_ONLINE, BOOT); if (!ret) ret = err; } err = memory_probe_init(); if (!ret) ret = err; err = memory_fail_init(); if (!ret) ret = err; err = block_size_init(); if (!ret) ret = err; out: