Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

parisc: Use generic init_task

Same code, except: The alignment of init_thread_union is handled via
the linker script, so no point to have it with the data structure. The
extra asm(".data") looks like a leftover from an asm to C conversion
and is pointless.

Use the generic version.

Move the page table data to parisc/mm/init.c and get rid of
parisc/../init_task.c

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: James E.J. Bottomley <jejb@parisc-linux.org>
Link: http://lkml.kernel.org/r/20120503085035.150896946@linutronix.de

+13 -70
+1
arch/parisc/Kconfig
··· 18 18 select IRQ_PER_CPU 19 19 select ARCH_HAVE_NMI_SAFE_CMPXCHG 20 20 select GENERIC_SMP_IDLE_THREAD 21 + select HAVE_GENERIC_INIT_TASK 21 22 22 23 help 23 24 The PA-RISC microprocessor is designed by Hewlett-Packard and used
-70
arch/parisc/kernel/init_task.c
··· 1 - /* 2 - * Static declaration of "init" task data structure. 3 - * 4 - * Copyright (C) 2000 Paul Bame <bame at parisc-linux.org> 5 - * Copyright (C) 2000-2001 John Marvin <jsm at parisc-linux.org> 6 - * Copyright (C) 2001 Helge Deller <deller @ parisc-linux.org> 7 - * Copyright (C) 2002 Matthew Wilcox <willy with parisc-linux.org> 8 - * 9 - * 10 - * This program is free software; you can redistribute it and/or modify 11 - * it under the terms of the GNU General Public License as published by 12 - * the Free Software Foundation; either version 2 of the License, or 13 - * (at your option) any later version. 14 - * 15 - * This program is distributed in the hope that it will be useful, 16 - * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 - * GNU General Public License for more details. 19 - * 20 - * You should have received a copy of the GNU General Public License 21 - * along with this program; if not, write to the Free Software 22 - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 23 - */ 24 - 25 - #include <linux/mm.h> 26 - #include <linux/fs.h> 27 - #include <linux/module.h> 28 - #include <linux/sched.h> 29 - #include <linux/init.h> 30 - #include <linux/init_task.h> 31 - #include <linux/mqueue.h> 32 - 33 - #include <asm/uaccess.h> 34 - #include <asm/pgtable.h> 35 - #include <asm/pgalloc.h> 36 - 37 - static struct signal_struct init_signals = INIT_SIGNALS(init_signals); 38 - static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand); 39 - /* 40 - * Initial task structure. 41 - * 42 - * We need to make sure that this is 16384-byte aligned due to the 43 - * way process stacks are handled. This is done by having a special 44 - * "init_task" linker map entry.. 45 - */ 46 - union thread_union init_thread_union __init_task_data 47 - __attribute__((aligned(128))) = 48 - { INIT_THREAD_INFO(init_task) }; 49 - 50 - #if PT_NLEVELS == 3 51 - /* NOTE: This layout exactly conforms to the hybrid L2/L3 page table layout 52 - * with the first pmd adjacent to the pgd and below it. gcc doesn't actually 53 - * guarantee that global objects will be laid out in memory in the same order 54 - * as the order of declaration, so put these in different sections and use 55 - * the linker script to order them. */ 56 - pmd_t pmd0[PTRS_PER_PMD] __attribute__ ((__section__ (".data..vm0.pmd"), aligned(PAGE_SIZE))); 57 - #endif 58 - 59 - pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((__section__ (".data..vm0.pgd"), aligned(PAGE_SIZE))); 60 - pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((__section__ (".data..vm0.pte"), aligned(PAGE_SIZE))); 61 - 62 - /* 63 - * Initial task structure. 64 - * 65 - * All other task structs will be allocated on slabs in fork.c 66 - */ 67 - EXPORT_SYMBOL(init_task); 68 - 69 - __asm__(".data"); 70 - struct task_struct init_task = INIT_TASK(init_task);
+12
arch/parisc/mm/init.c
··· 33 33 34 34 extern int data_start; 35 35 36 + #if PT_NLEVELS == 3 37 + /* NOTE: This layout exactly conforms to the hybrid L2/L3 page table layout 38 + * with the first pmd adjacent to the pgd and below it. gcc doesn't actually 39 + * guarantee that global objects will be laid out in memory in the same order 40 + * as the order of declaration, so put these in different sections and use 41 + * the linker script to order them. */ 42 + pmd_t pmd0[PTRS_PER_PMD] __attribute__ ((__section__ (".data..vm0.pmd"), aligned(PAGE_SIZE))); 43 + #endif 44 + 45 + pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((__section__ (".data..vm0.pgd"), aligned(PAGE_SIZE))); 46 + pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((__section__ (".data..vm0.pte"), aligned(PAGE_SIZE))); 47 + 36 48 #ifdef CONFIG_DISCONTIGMEM 37 49 struct node_map_data node_data[MAX_NUMNODES] __read_mostly; 38 50 unsigned char pfnnid_map[PFNNID_MAP_MAX] __read_mostly;