diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-21 18:38:43 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-21 18:38:43 -0400 |
| commit | 5f033bb9bc5cb3bb37a79e3ef131f50ecdcb72b0 (patch) | |
| tree | 16c6fdc3fab80d88ea4d8fd7eb302097f97c062c /arch/x86/kernel/process.c | |
| parent | fd9be4ce2e1eb407a8152f823698cc0d652bbec8 (diff) | |
| parent | 34d0559178393547505ec9492321255405f4e441 (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86: (77 commits)
x86: UV startup of slave cpus
x86: integrate pci-dma.c
x86: don't do dma if mask is NULL.
x86: return conditional to mmu
x86: remove kludge from x86_64
x86: unify gfp masks
x86: retry allocation if failed
x86: don't try to allocate from DMA zone at first
x86: use a fallback dev for i386
x86: use numa allocation function in i386
x86: remove virt_to_bus in pci-dma_64.c
x86: adjust dma_free_coherent for i386
x86: move bad_dma_address
x86: isolate coherent mapping functions
x86: move dma_coherent functions to pci-dma.c
x86: merge iommu initialization parameters
x86: merge dma_supported
x86: move pci fixup to pci-dma.c
x86: move x86_64-specific to common code.
x86: move initialization functions to pci-dma.c
...
Diffstat (limited to 'arch/x86/kernel/process.c')
| -rw-r--r-- | arch/x86/kernel/process.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c new file mode 100644 index 000000000000..3004d716539d --- /dev/null +++ b/arch/x86/kernel/process.c | |||
| @@ -0,0 +1,44 @@ | |||
| 1 | #include <linux/errno.h> | ||
| 2 | #include <linux/kernel.h> | ||
| 3 | #include <linux/mm.h> | ||
| 4 | #include <linux/smp.h> | ||
| 5 | #include <linux/slab.h> | ||
| 6 | #include <linux/sched.h> | ||
| 7 | |||
| 8 | struct kmem_cache *task_xstate_cachep; | ||
| 9 | |||
| 10 | int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src) | ||
| 11 | { | ||
| 12 | *dst = *src; | ||
| 13 | if (src->thread.xstate) { | ||
| 14 | dst->thread.xstate = kmem_cache_alloc(task_xstate_cachep, | ||
| 15 | GFP_KERNEL); | ||
| 16 | if (!dst->thread.xstate) | ||
| 17 | return -ENOMEM; | ||
| 18 | WARN_ON((unsigned long)dst->thread.xstate & 15); | ||
| 19 | memcpy(dst->thread.xstate, src->thread.xstate, xstate_size); | ||
| 20 | } | ||
| 21 | return 0; | ||
| 22 | } | ||
| 23 | |||
| 24 | void free_thread_xstate(struct task_struct *tsk) | ||
| 25 | { | ||
| 26 | if (tsk->thread.xstate) { | ||
| 27 | kmem_cache_free(task_xstate_cachep, tsk->thread.xstate); | ||
| 28 | tsk->thread.xstate = NULL; | ||
| 29 | } | ||
| 30 | } | ||
| 31 | |||
| 32 | void free_thread_info(struct thread_info *ti) | ||
| 33 | { | ||
| 34 | free_thread_xstate(ti->task); | ||
| 35 | free_pages((unsigned long)ti, get_order(THREAD_SIZE)); | ||
| 36 | } | ||
| 37 | |||
| 38 | void arch_task_cache_init(void) | ||
| 39 | { | ||
| 40 | task_xstate_cachep = | ||
| 41 | kmem_cache_create("task_xstate", xstate_size, | ||
| 42 | __alignof__(union thread_xstate), | ||
| 43 | SLAB_PANIC, NULL); | ||
| 44 | } | ||
