Commit | Line | Data |
---|---|---|
208d54e5 DH |
1 | #ifndef __LINUX_MEMORY_HOTPLUG_H |
2 | #define __LINUX_MEMORY_HOTPLUG_H | |
3 | ||
4 | #include <linux/mmzone.h> | |
5 | #include <linux/spinlock.h> | |
3947be19 DH |
6 | #include <linux/mmzone.h> |
7 | #include <linux/notifier.h> | |
208d54e5 | 8 | |
78679302 KH |
9 | struct page; |
10 | struct zone; | |
11 | struct pglist_data; | |
12 | ||
208d54e5 DH |
13 | #ifdef CONFIG_MEMORY_HOTPLUG |
14 | /* | |
15 | * pgdat resizing functions | |
16 | */ | |
17 | static inline | |
18 | void pgdat_resize_lock(struct pglist_data *pgdat, unsigned long *flags) | |
19 | { | |
20 | spin_lock_irqsave(&pgdat->node_size_lock, *flags); | |
21 | } | |
22 | static inline | |
23 | void pgdat_resize_unlock(struct pglist_data *pgdat, unsigned long *flags) | |
24 | { | |
bdc8cb98 | 25 | spin_unlock_irqrestore(&pgdat->node_size_lock, *flags); |
208d54e5 DH |
26 | } |
27 | static inline | |
28 | void pgdat_resize_init(struct pglist_data *pgdat) | |
29 | { | |
30 | spin_lock_init(&pgdat->node_size_lock); | |
31 | } | |
bdc8cb98 DH |
32 | /* |
33 | * Zone resizing functions | |
34 | */ | |
35 | static inline unsigned zone_span_seqbegin(struct zone *zone) | |
36 | { | |
37 | return read_seqbegin(&zone->span_seqlock); | |
38 | } | |
39 | static inline int zone_span_seqretry(struct zone *zone, unsigned iv) | |
40 | { | |
41 | return read_seqretry(&zone->span_seqlock, iv); | |
42 | } | |
43 | static inline void zone_span_writelock(struct zone *zone) | |
44 | { | |
45 | write_seqlock(&zone->span_seqlock); | |
46 | } | |
47 | static inline void zone_span_writeunlock(struct zone *zone) | |
48 | { | |
49 | write_sequnlock(&zone->span_seqlock); | |
50 | } | |
51 | static inline void zone_seqlock_init(struct zone *zone) | |
52 | { | |
53 | seqlock_init(&zone->span_seqlock); | |
54 | } | |
3947be19 DH |
55 | extern int zone_grow_free_lists(struct zone *zone, unsigned long new_nr_pages); |
56 | extern int zone_grow_waitqueues(struct zone *zone, unsigned long nr_pages); | |
57 | extern int add_one_highpage(struct page *page, int pfn, int bad_ppro); | |
58 | /* need some defines for these for archs that don't support it */ | |
59 | extern void online_page(struct page *page); | |
60 | /* VM interface that may be used by firmware interface */ | |
3947be19 DH |
61 | extern int online_pages(unsigned long, unsigned long); |
62 | ||
63 | /* reasonably generic interface to expand the physical pages in a zone */ | |
64 | extern int __add_pages(struct zone *zone, unsigned long start_pfn, | |
65 | unsigned long nr_pages); | |
208d54e5 DH |
66 | #else /* ! CONFIG_MEMORY_HOTPLUG */ |
67 | /* | |
68 | * Stub functions for when hotplug is off | |
69 | */ | |
70 | static inline void pgdat_resize_lock(struct pglist_data *p, unsigned long *f) {} | |
71 | static inline void pgdat_resize_unlock(struct pglist_data *p, unsigned long *f) {} | |
72 | static inline void pgdat_resize_init(struct pglist_data *pgdat) {} | |
bdc8cb98 DH |
73 | |
74 | static inline unsigned zone_span_seqbegin(struct zone *zone) | |
75 | { | |
76 | return 0; | |
77 | } | |
78 | static inline int zone_span_seqretry(struct zone *zone, unsigned iv) | |
79 | { | |
80 | return 0; | |
81 | } | |
82 | static inline void zone_span_writelock(struct zone *zone) {} | |
83 | static inline void zone_span_writeunlock(struct zone *zone) {} | |
84 | static inline void zone_seqlock_init(struct zone *zone) {} | |
3947be19 DH |
85 | |
86 | static inline int mhp_notimplemented(const char *func) | |
87 | { | |
88 | printk(KERN_WARNING "%s() called, with CONFIG_MEMORY_HOTPLUG disabled\n", func); | |
89 | dump_stack(); | |
90 | return -ENOSYS; | |
91 | } | |
92 | ||
bdc8cb98 | 93 | #endif /* ! CONFIG_MEMORY_HOTPLUG */ |
3947be19 DH |
94 | static inline int __remove_pages(struct zone *zone, unsigned long start_pfn, |
95 | unsigned long nr_pages) | |
96 | { | |
97 | printk(KERN_WARNING "%s() called, not yet supported\n", __FUNCTION__); | |
98 | dump_stack(); | |
99 | return -ENOSYS; | |
100 | } | |
9d99aaa3 AK |
101 | |
102 | #if defined(CONFIG_MEMORY_HOTPLUG) || defined(CONFIG_ACPI_HOTPLUG_MEMORY) \ | |
103 | || defined(CONFIG_ACPI_HOTPLUG_MEMORY_MODULE) | |
104 | extern int add_memory(u64 start, u64 size); | |
105 | extern int remove_memory(u64 start, u64 size); | |
106 | #endif | |
107 | ||
208d54e5 | 108 | #endif /* __LINUX_MEMORY_HOTPLUG_H */ |