mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
[POWERPC] swsusp: Introduce register_nosave_region_late
This patch introduces a new register_nosave_region_late function that can be called from initcalls when register_nosave_region can no longer be used because it uses bootmem. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Acked-by: Rafael J. Wysocki <rjw@sisk.pl> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
de372ecd80
commit
940d67f6b9
@ -34,13 +34,22 @@ static inline void pm_restore_console(void) {}
|
|||||||
|
|
||||||
#if defined(CONFIG_PM) && defined(CONFIG_SOFTWARE_SUSPEND)
|
#if defined(CONFIG_PM) && defined(CONFIG_SOFTWARE_SUSPEND)
|
||||||
/* kernel/power/snapshot.c */
|
/* kernel/power/snapshot.c */
|
||||||
extern void __init register_nosave_region(unsigned long, unsigned long);
|
extern void __register_nosave_region(unsigned long b, unsigned long e, int km);
|
||||||
|
static inline void register_nosave_region(unsigned long b, unsigned long e)
|
||||||
|
{
|
||||||
|
__register_nosave_region(b, e, 0);
|
||||||
|
}
|
||||||
|
static inline void register_nosave_region_late(unsigned long b, unsigned long e)
|
||||||
|
{
|
||||||
|
__register_nosave_region(b, e, 1);
|
||||||
|
}
|
||||||
extern int swsusp_page_is_forbidden(struct page *);
|
extern int swsusp_page_is_forbidden(struct page *);
|
||||||
extern void swsusp_set_page_free(struct page *);
|
extern void swsusp_set_page_free(struct page *);
|
||||||
extern void swsusp_unset_page_free(struct page *);
|
extern void swsusp_unset_page_free(struct page *);
|
||||||
extern unsigned long get_safe_page(gfp_t gfp_mask);
|
extern unsigned long get_safe_page(gfp_t gfp_mask);
|
||||||
#else
|
#else
|
||||||
static inline void register_nosave_region(unsigned long b, unsigned long e) {}
|
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) {}
|
||||||
static inline int swsusp_page_is_forbidden(struct page *p) { return 0; }
|
static inline int swsusp_page_is_forbidden(struct page *p) { return 0; }
|
||||||
static inline void swsusp_set_page_free(struct page *p) {}
|
static inline void swsusp_set_page_free(struct page *p) {}
|
||||||
static inline void swsusp_unset_page_free(struct page *p) {}
|
static inline void swsusp_unset_page_free(struct page *p) {}
|
||||||
|
@ -607,7 +607,8 @@ static LIST_HEAD(nosave_regions);
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void __init
|
void __init
|
||||||
register_nosave_region(unsigned long start_pfn, unsigned long end_pfn)
|
__register_nosave_region(unsigned long start_pfn, unsigned long end_pfn,
|
||||||
|
int use_kmalloc)
|
||||||
{
|
{
|
||||||
struct nosave_region *region;
|
struct nosave_region *region;
|
||||||
|
|
||||||
@ -623,8 +624,13 @@ register_nosave_region(unsigned long start_pfn, unsigned long end_pfn)
|
|||||||
goto Report;
|
goto Report;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* This allocation cannot fail */
|
if (use_kmalloc) {
|
||||||
region = alloc_bootmem_low(sizeof(struct nosave_region));
|
/* during init, this shouldn't fail */
|
||||||
|
region = kmalloc(sizeof(struct nosave_region), GFP_KERNEL);
|
||||||
|
BUG_ON(!region);
|
||||||
|
} else
|
||||||
|
/* This allocation cannot fail */
|
||||||
|
region = alloc_bootmem_low(sizeof(struct nosave_region));
|
||||||
region->start_pfn = start_pfn;
|
region->start_pfn = start_pfn;
|
||||||
region->end_pfn = end_pfn;
|
region->end_pfn = end_pfn;
|
||||||
list_add_tail(®ion->list, &nosave_regions);
|
list_add_tail(®ion->list, &nosave_regions);
|
||||||
|
Loading…
Reference in New Issue
Block a user