Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 168705
b: refs/heads/master
c: 6ad696d
h: refs/heads/master
i:
  168703: 98fbea8
v: v3
  • Loading branch information
Andi Kleen authored and Linus Torvalds committed Nov 18, 2009
1 parent c418915 commit d519699
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9398180097e359646d46083c3e079a54e20bee82
refs/heads/master: 6ad696d2cf535772dff659298ec7e7260e344595
21 changes: 19 additions & 2 deletions trunk/include/linux/suspend.h
Original file line number Diff line number Diff line change
Expand Up @@ -301,15 +301,32 @@ static inline int unregister_pm_notifier(struct notifier_block *nb)
#define pm_notifier(fn, pri) do { (void)(fn); } while (0)
#endif /* !CONFIG_PM_SLEEP */

extern struct mutex pm_mutex;

#ifndef CONFIG_HIBERNATION
static inline void register_nosave_region(unsigned long b, unsigned long e)
{
}
static inline void register_nosave_region_late(unsigned long b, unsigned long e)
{
}
#endif

extern struct mutex pm_mutex;
static inline void lock_system_sleep(void) {}
static inline void unlock_system_sleep(void) {}

#else

/* Let some subsystems like memory hotadd exclude hibernation */

static inline void lock_system_sleep(void)
{
mutex_lock(&pm_mutex);
}

static inline void unlock_system_sleep(void)
{
mutex_unlock(&pm_mutex);
}
#endif

#endif /* _LINUX_SUSPEND_H */
5 changes: 1 addition & 4 deletions trunk/mm/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -128,12 +128,9 @@ config SPARSEMEM_VMEMMAP
config MEMORY_HOTPLUG
bool "Allow for memory hot-add"
depends on SPARSEMEM || X86_64_ACPI_NUMA
depends on HOTPLUG && !(HIBERNATION && !S390) && ARCH_ENABLE_MEMORY_HOTPLUG
depends on HOTPLUG && ARCH_ENABLE_MEMORY_HOTPLUG
depends on (IA64 || X86 || PPC_BOOK3S_64 || SUPERH || S390)

comment "Memory hotplug is currently incompatible with Software Suspend"
depends on SPARSEMEM && HOTPLUG && HIBERNATION && !S390

config MEMORY_HOTPLUG_SPARSE
def_bool y
depends on SPARSEMEM && MEMORY_HOTPLUG
Expand Down
21 changes: 17 additions & 4 deletions trunk/mm/memory_hotplug.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include <linux/migrate.h>
#include <linux/page-isolation.h>
#include <linux/pfn.h>
#include <linux/suspend.h>

#include <asm/tlbflush.h>

Expand Down Expand Up @@ -485,14 +486,18 @@ int __ref add_memory(int nid, u64 start, u64 size)
struct resource *res;
int ret;

lock_system_sleep();

res = register_memory_resource(start, size);
ret = -EEXIST;
if (!res)
return -EEXIST;
goto out;

if (!node_online(nid)) {
pgdat = hotadd_new_pgdat(nid, start);
ret = -ENOMEM;
if (!pgdat)
return -ENOMEM;
goto out;
new_pgdat = 1;
}

Expand All @@ -515,14 +520,17 @@ int __ref add_memory(int nid, u64 start, u64 size)
BUG_ON(ret);
}

return ret;
goto out;

error:
/* rollback pgdat allocation and others */
if (new_pgdat)
rollback_node_hotadd(nid, pgdat);
if (res)
release_memory_resource(res);

out:
unlock_system_sleep();
return ret;
}
EXPORT_SYMBOL_GPL(add_memory);
Expand Down Expand Up @@ -759,14 +767,16 @@ int offline_pages(unsigned long start_pfn,
if (!test_pages_in_a_zone(start_pfn, end_pfn))
return -EINVAL;

lock_system_sleep();

zone = page_zone(pfn_to_page(start_pfn));
node = zone_to_nid(zone);
nr_pages = end_pfn - start_pfn;

/* set above range as isolated */
ret = start_isolate_page_range(start_pfn, end_pfn);
if (ret)
return ret;
goto out;

arg.start_pfn = start_pfn;
arg.nr_pages = nr_pages;
Expand Down Expand Up @@ -844,6 +854,7 @@ int offline_pages(unsigned long start_pfn,
writeback_set_ratelimit();

memory_notify(MEM_OFFLINE, &arg);
unlock_system_sleep();
return 0;

failed_removal:
Expand All @@ -853,6 +864,8 @@ int offline_pages(unsigned long start_pfn,
/* pushback to free area */
undo_isolate_page_range(start_pfn, end_pfn);

out:
unlock_system_sleep();
return ret;
}

Expand Down

0 comments on commit d519699

Please sign in to comment.