-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
sh: Always provide thread_info allocators.
Presently the thread_info allocators are special cased, depending on THREAD_SHIFT < PAGE_SHIFT. This provides a sensible definition for them regardless of configuration, in preparation for extended CPU state. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
- Loading branch information
Paul Mundt
committed
Jan 12, 2010
1 parent
70e068e
commit cbf6b1b
Showing
4 changed files
with
51 additions
and
35 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
#include <linux/mm.h> | ||
#include <linux/kernel.h> | ||
#include <linux/sched.h> | ||
|
||
#if THREAD_SHIFT < PAGE_SHIFT | ||
static struct kmem_cache *thread_info_cache; | ||
|
||
struct thread_info *alloc_thread_info(struct task_struct *tsk) | ||
{ | ||
struct thread_info *ti; | ||
|
||
ti = kmem_cache_alloc(thread_info_cache, GFP_KERNEL); | ||
if (unlikely(ti == NULL)) | ||
return NULL; | ||
#ifdef CONFIG_DEBUG_STACK_USAGE | ||
memset(ti, 0, THREAD_SIZE); | ||
#endif | ||
return ti; | ||
} | ||
|
||
void free_thread_info(struct thread_info *ti) | ||
{ | ||
kmem_cache_free(thread_info_cache, ti); | ||
} | ||
|
||
void thread_info_cache_init(void) | ||
{ | ||
thread_info_cache = kmem_cache_create("thread_info", THREAD_SIZE, | ||
THREAD_SIZE, 0, NULL); | ||
BUG_ON(thread_info_cache == NULL); | ||
} | ||
#else | ||
struct thread_info *alloc_thread_info(struct task_struct *tsk) | ||
{ | ||
#ifdef CONFIG_DEBUG_STACK_USAGE | ||
gfp_t mask = GFP_KERNEL | __GFP_ZERO; | ||
#else | ||
gfp_t mask = GFP_KERNEL; | ||
#endif | ||
return (struct thread_info *)__get_free_pages(mask, THREAD_SIZE_ORDER); | ||
} | ||
|
||
void free_thread_info(struct thread_info *ti) | ||
{ | ||
free_pages((unsigned long)ti, THREAD_SIZE_ORDER); | ||
} | ||
#endif /* THREAD_SHIFT < PAGE_SHIFT */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters