diff options
| author | Dave Hansen <haveblue@us.ibm.com> | 2005-10-29 18:16:53 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-10-29 21:40:44 -0700 | 
| commit | bdc8cb984576ab5b550c8b24c6fa111a873503e3 (patch) | |
| tree | f94548988874caa10d770e6e65bc50c925abf825 /include/linux/memory_hotplug.h | |
| parent | 208d54e5513c0c02d85af0990901354c74364d5c (diff) | |
| download | olio-linux-3.10-bdc8cb984576ab5b550c8b24c6fa111a873503e3.tar.xz olio-linux-3.10-bdc8cb984576ab5b550c8b24c6fa111a873503e3.zip  | |
[PATCH] memory hotplug locking: zone span seqlock
See the "fixup bad_range()" patch for more information, but this actually
creates a the lock to protect things making assumptions about a zone's size
staying constant at runtime.
Signed-off-by: Dave Hansen <haveblue@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux/memory_hotplug.h')
| -rw-r--r-- | include/linux/memory_hotplug.h | 39 | 
1 files changed, 37 insertions, 2 deletions
diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h index e8103be9d52..4b08bc94757 100644 --- a/include/linux/memory_hotplug.h +++ b/include/linux/memory_hotplug.h @@ -16,13 +16,36 @@ void pgdat_resize_lock(struct pglist_data *pgdat, unsigned long *flags)  static inline  void pgdat_resize_unlock(struct pglist_data *pgdat, unsigned long *flags)  { -	spin_lock_irqrestore(&pgdat->node_size_lock, *flags); +	spin_unlock_irqrestore(&pgdat->node_size_lock, *flags);  }  static inline  void pgdat_resize_init(struct pglist_data *pgdat)  {  	spin_lock_init(&pgdat->node_size_lock);  } +/* + * Zone resizing functions + */ +static inline unsigned zone_span_seqbegin(struct zone *zone) +{ +	return read_seqbegin(&zone->span_seqlock); +} +static inline int zone_span_seqretry(struct zone *zone, unsigned iv) +{ +	return read_seqretry(&zone->span_seqlock, iv); +} +static inline void zone_span_writelock(struct zone *zone) +{ +	write_seqlock(&zone->span_seqlock); +} +static inline void zone_span_writeunlock(struct zone *zone) +{ +	write_sequnlock(&zone->span_seqlock); +} +static inline void zone_seqlock_init(struct zone *zone) +{ +	seqlock_init(&zone->span_seqlock); +}  #else /* ! CONFIG_MEMORY_HOTPLUG */  /*   * Stub functions for when hotplug is off @@ -30,5 +53,17 @@ void pgdat_resize_init(struct pglist_data *pgdat)  static inline void pgdat_resize_lock(struct pglist_data *p, unsigned long *f) {}  static inline void pgdat_resize_unlock(struct pglist_data *p, unsigned long *f) {}  static inline void pgdat_resize_init(struct pglist_data *pgdat) {} -#endif + +static inline unsigned zone_span_seqbegin(struct zone *zone) +{ +	return 0; +} +static inline int zone_span_seqretry(struct zone *zone, unsigned iv) +{ +	return 0; +} +static inline void zone_span_writelock(struct zone *zone) {} +static inline void zone_span_writeunlock(struct zone *zone) {} +static inline void zone_seqlock_init(struct zone *zone) {} +#endif /* ! CONFIG_MEMORY_HOTPLUG */  #endif /* __LINUX_MEMORY_HOTPLUG_H */  |