You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge 3.3-rc6 into driver-core-next
This was done to resolve a conflict in the drivers/base/cpu.c file. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
@@ -209,6 +209,25 @@ static ssize_t print_cpus_offline(struct device *dev,
|
||||
}
|
||||
static DEVICE_ATTR(offline, 0444, print_cpus_offline, NULL);
|
||||
|
||||
static void cpu_device_release(struct device *dev)
|
||||
{
|
||||
/*
|
||||
* This is an empty function to prevent the driver core from spitting a
|
||||
* warning at us. Yes, I know this is directly opposite of what the
|
||||
* documentation for the driver core and kobjects say, and the author
|
||||
* of this code has already been publically ridiculed for doing
|
||||
* something as foolish as this. However, at this point in time, it is
|
||||
* the only way to handle the issue of statically allocated cpu
|
||||
* devices. The different architectures will have their cpu device
|
||||
* code reworked to properly handle this in the near future, so this
|
||||
* function will then be changed to correctly free up the memory held
|
||||
* by the cpu device.
|
||||
*
|
||||
* Never copy this way of doing things, or you too will be made fun of
|
||||
* on the linux-kerenl list, you have been warned.
|
||||
*/
|
||||
}
|
||||
|
||||
/*
|
||||
* register_cpu - Setup a sysfs device for a CPU.
|
||||
* @cpu - cpu->hotpluggable field set to 1 will generate a control file in
|
||||
@@ -222,8 +241,10 @@ int __cpuinit register_cpu(struct cpu *cpu, int num)
|
||||
int error;
|
||||
|
||||
cpu->node_id = cpu_to_node(num);
|
||||
memset(&cpu->dev, 0x00, sizeof(struct device));
|
||||
cpu->dev.id = num;
|
||||
cpu->dev.bus = &cpu_subsys;
|
||||
cpu->dev.release = cpu_device_release;
|
||||
#ifdef CONFIG_ARCH_HAS_CPU_AUTOPROBE
|
||||
cpu->dev.bus->uevent = arch_cpu_uevent;
|
||||
#endif
|
||||
|
||||
+26
-5
@@ -572,19 +572,36 @@ static int init_memory_block(struct memory_block **memory,
|
||||
}
|
||||
|
||||
static int add_memory_section(int nid, struct mem_section *section,
|
||||
struct memory_block **mem_p,
|
||||
unsigned long state, enum mem_add_context context)
|
||||
{
|
||||
struct memory_block *mem;
|
||||
struct memory_block *mem = NULL;
|
||||
int scn_nr = __section_nr(section);
|
||||
int ret = 0;
|
||||
|
||||
mutex_lock(&mem_sysfs_mutex);
|
||||
|
||||
mem = find_memory_block(section);
|
||||
if (context == BOOT) {
|
||||
/* same memory block ? */
|
||||
if (mem_p && *mem_p)
|
||||
if (scn_nr >= (*mem_p)->start_section_nr &&
|
||||
scn_nr <= (*mem_p)->end_section_nr) {
|
||||
mem = *mem_p;
|
||||
kobject_get(&mem->dev.kobj);
|
||||
}
|
||||
} else
|
||||
mem = find_memory_block(section);
|
||||
|
||||
if (mem) {
|
||||
mem->section_count++;
|
||||
kobject_put(&mem->dev.kobj);
|
||||
} else
|
||||
} else {
|
||||
ret = init_memory_block(&mem, section, state);
|
||||
/* store memory_block pointer for next loop */
|
||||
if (!ret && context == BOOT)
|
||||
if (mem_p)
|
||||
*mem_p = mem;
|
||||
}
|
||||
|
||||
if (!ret) {
|
||||
if (context == HOTPLUG &&
|
||||
@@ -627,7 +644,7 @@ int remove_memory_block(unsigned long node_id, struct mem_section *section,
|
||||
*/
|
||||
int register_new_memory(int nid, struct mem_section *section)
|
||||
{
|
||||
return add_memory_section(nid, section, MEM_OFFLINE, HOTPLUG);
|
||||
return add_memory_section(nid, section, NULL, MEM_OFFLINE, HOTPLUG);
|
||||
}
|
||||
|
||||
int unregister_memory_section(struct mem_section *section)
|
||||
@@ -647,6 +664,7 @@ int __init memory_dev_init(void)
|
||||
int ret;
|
||||
int err;
|
||||
unsigned long block_sz;
|
||||
struct memory_block *mem = NULL;
|
||||
|
||||
ret = subsys_system_register(&memory_subsys, NULL);
|
||||
if (ret)
|
||||
@@ -662,7 +680,10 @@ int __init memory_dev_init(void)
|
||||
for (i = 0; i < NR_MEM_SECTIONS; i++) {
|
||||
if (!present_section_nr(i))
|
||||
continue;
|
||||
err = add_memory_section(0, __nr_to_section(i), MEM_ONLINE,
|
||||
/* 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;
|
||||
|
||||
@@ -456,7 +456,15 @@ static int link_mem_sections(int nid)
|
||||
if (!present_section_nr(section_nr))
|
||||
continue;
|
||||
mem_sect = __nr_to_section(section_nr);
|
||||
|
||||
/* same memblock ? */
|
||||
if (mem_blk)
|
||||
if ((section_nr >= mem_blk->start_section_nr) &&
|
||||
(section_nr <= mem_blk->end_section_nr))
|
||||
continue;
|
||||
|
||||
mem_blk = find_memory_block_hinted(mem_sect, mem_blk);
|
||||
|
||||
ret = register_mem_sect_under_node(mem_blk, nid);
|
||||
if (!err)
|
||||
err = ret;
|
||||
|
||||
@@ -53,7 +53,7 @@ static int regcache_hw_init(struct regmap *map)
|
||||
for (count = 0, i = 0; i < map->num_reg_defaults_raw; i++) {
|
||||
val = regcache_get_val(map->reg_defaults_raw,
|
||||
i, map->cache_word_size);
|
||||
if (!val)
|
||||
if (regmap_volatile(map, i))
|
||||
continue;
|
||||
count++;
|
||||
}
|
||||
@@ -70,7 +70,7 @@ static int regcache_hw_init(struct regmap *map)
|
||||
for (i = 0, j = 0; i < map->num_reg_defaults_raw; i++) {
|
||||
val = regcache_get_val(map->reg_defaults_raw,
|
||||
i, map->cache_word_size);
|
||||
if (!val)
|
||||
if (regmap_volatile(map, i))
|
||||
continue;
|
||||
map->reg_defaults[j].reg = i;
|
||||
map->reg_defaults[j].def = val;
|
||||
|
||||
Reference in New Issue
Block a user