aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/suspend.h
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2011-08-17 14:42:24 -0400
committerRafael J. Wysocki <rjw@sisk.pl>2011-10-16 17:27:46 -0400
commit85055dd805f0822f13f736bee2a521e222c38293 (patch)
treeedbad90395fc7471732edfb5372adcd7e55e791b /include/linux/suspend.h
parentca123102f69fb260221502ade9bbc069290fae84 (diff)
PM / Hibernate: Include storage keys in hibernation image on s390
For s390 there is one additional byte associated with each page, the storage key. This byte contains the referenced and changed bits and needs to be included into the hibernation image. If the storage keys are not restored to their previous state all original pages would appear to be dirty. This can cause inconsistencies e.g. with read-only filesystems. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Diffstat (limited to 'include/linux/suspend.h')
-rw-r--r--include/linux/suspend.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/include/linux/suspend.h b/include/linux/suspend.h
index 76f42e49b72d..46f3548aef2d 100644
--- a/include/linux/suspend.h
+++ b/include/linux/suspend.h
@@ -386,4 +386,38 @@ static inline void unlock_system_sleep(void)
386} 386}
387#endif 387#endif
388 388
389#ifdef CONFIG_ARCH_SAVE_PAGE_KEYS
390/*
391 * The ARCH_SAVE_PAGE_KEYS functions can be used by an architecture
392 * to save/restore additional information to/from the array of page
393 * frame numbers in the hibernation image. For s390 this is used to
394 * save and restore the storage key for each page that is included
395 * in the hibernation image.
396 */
397unsigned long page_key_additional_pages(unsigned long pages);
398int page_key_alloc(unsigned long pages);
399void page_key_free(void);
400void page_key_read(unsigned long *pfn);
401void page_key_memorize(unsigned long *pfn);
402void page_key_write(void *address);
403
404#else /* !CONFIG_ARCH_SAVE_PAGE_KEYS */
405
406static inline unsigned long page_key_additional_pages(unsigned long pages)
407{
408 return 0;
409}
410
411static inline int page_key_alloc(unsigned long pages)
412{
413 return 0;
414}
415
416static inline void page_key_free(void) {}
417static inline void page_key_read(unsigned long *pfn) {}
418static inline void page_key_memorize(unsigned long *pfn) {}
419static inline void page_key_write(void *address) {}
420
421#endif /* !CONFIG_ARCH_SAVE_PAGE_KEYS */
422
389#endif /* _LINUX_SUSPEND_H */ 423#endif /* _LINUX_SUSPEND_H */