Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8ac77746 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "mm/memory_hotplug: Fix try_online_one_block() logic"

parents 0646fd8d 8873011c
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1321,6 +1321,11 @@ int lock_device_hotplug_sysfs(void)
	return restart_syscall();
}

int trylock_device_hotplug(void)
{
	return mutex_trylock(&device_hotplug_lock);
}

#ifdef CONFIG_SCHED_WALT
void lock_device_hotplug_assert(void)
{
+1 −0
Original line number Diff line number Diff line
@@ -1592,6 +1592,7 @@ static inline bool device_supports_offline(struct device *dev)
extern void lock_device_hotplug(void);
extern void unlock_device_hotplug(void);
extern int lock_device_hotplug_sysfs(void);
extern int trylock_device_hotplug(void);
#ifdef CONFIG_SCHED_WALT
extern void lock_device_hotplug_assert(void);
#endif
+3 −8
Original line number Diff line number Diff line
@@ -1021,17 +1021,12 @@ static int online_memory_one_block(struct memory_block *mem, void *arg)

bool try_online_one_block(int nid)
{
	struct zone *zone = &NODE_DATA(nid)->node_zones[ZONE_MOVABLE];
	unsigned long zone_start, zone_size;
	bool onlined_block = false;

	lock_device_hotplug();

	zone_start = PFN_PHYS(zone->zone_start_pfn);
	zone_size = zone->spanned_pages << PAGE_SHIFT;
	walk_memory_blocks(zone_start, zone_size, &onlined_block,
			   online_memory_one_block);
	if (!trylock_device_hotplug())
		return false;

	for_each_memory_block(&onlined_block, online_memory_one_block);
	unlock_device_hotplug();
	return onlined_block;
}