···395395}396396__early_param("initrd=", early_initrd);397397398398+static void __init add_memory(unsigned long start, unsigned long size)399399+{400400+ /*401401+ * Ensure that start/size are aligned to a page boundary.402402+ * Size is appropriately rounded down, start is rounded up.403403+ */404404+ size -= start & ~PAGE_MASK;405405+406406+ meminfo.bank[meminfo.nr_banks].start = PAGE_ALIGN(start);407407+ meminfo.bank[meminfo.nr_banks].size = size & PAGE_MASK;408408+ meminfo.bank[meminfo.nr_banks].node = PHYS_TO_NID(start);409409+ meminfo.nr_banks += 1;410410+}411411+398412/*399413 * Pick out the memory size. We look for mem=size@start,400414 * where start and size are "size[KkMm]"···433419 if (**p == '@')434420 start = memparse(*p + 1, p);435421436436- meminfo.bank[meminfo.nr_banks].start = start;437437- meminfo.bank[meminfo.nr_banks].size = size;438438- meminfo.bank[meminfo.nr_banks].node = PHYS_TO_NID(start);439439- meminfo.nr_banks += 1;422422+ add_memory(start, size);440423}441424__early_param("mem=", early_mem);442425···575564 tag->u.mem.start, tag->u.mem.size / 1024);576565 return -EINVAL;577566 }578578- meminfo.bank[meminfo.nr_banks].start = tag->u.mem.start;579579- meminfo.bank[meminfo.nr_banks].size = tag->u.mem.size;580580- meminfo.bank[meminfo.nr_banks].node = PHYS_TO_NID(tag->u.mem.start);581581- meminfo.nr_banks += 1;582582-567567+ add_memory(tag->u.mem.start, tag->u.mem.size);583568 return 0;584569}585570
+18-9
arch/arm/kernel/signal.c
···1919#include <asm/unistd.h>20202121#include "ptrace.h"2222+#include "signal.h"22232324#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))2425···3635#define SWI_THUMB_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_sigreturn - __NR_SYSCALL_BASE))3736#define SWI_THUMB_RT_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_rt_sigreturn - __NR_SYSCALL_BASE))38373939-static const unsigned long retcodes[4] = {3838+const unsigned long sigreturn_codes[4] = {4039 SWI_SYS_SIGRETURN, SWI_THUMB_SIGRETURN,4140 SWI_SYS_RT_SIGRETURN, SWI_THUMB_RT_SIGRETURN4241};···501500 if (ka->sa.sa_flags & SA_SIGINFO)502501 idx += 2;503502504504- if (__put_user(retcodes[idx], rc))503503+ if (__put_user(sigreturn_codes[idx], rc))505504 return 1;506505507507- /*508508- * Ensure that the instruction cache sees509509- * the return code written onto the stack.510510- */511511- flush_icache_range((unsigned long)rc,512512- (unsigned long)(rc + 1));506506+ if (cpsr & MODE32_BIT) {507507+ /*508508+ * 32-bit code can use the new high-page509509+ * signal return code support.510510+ */511511+ retcode = KERN_SIGRETURN_CODE + (idx << 2) + thumb;512512+ } else {513513+ /*514514+ * Ensure that the instruction cache sees515515+ * the return code written onto the stack.516516+ */517517+ flush_icache_range((unsigned long)rc,518518+ (unsigned long)(rc + 1));513519514514- retcode = ((unsigned long)rc) + thumb;520520+ retcode = ((unsigned long)rc) + thumb;521521+ }515522 }516523517524 regs->ARM_r0 = usig;
+12
arch/arm/kernel/signal.h
···11+/*22+ * linux/arch/arm/kernel/signal.h33+ *44+ * Copyright (C) 2005 Russell King.55+ *66+ * This program is free software; you can redistribute it and/or modify77+ * it under the terms of the GNU General Public License version 2 as88+ * published by the Free Software Foundation.99+ */1010+#define KERN_SIGRETURN_CODE 0xffff05001111+1212+extern const unsigned long sigreturn_codes[4];
+9
arch/arm/kernel/traps.c
···3030#include <asm/traps.h>31313232#include "ptrace.h"3333+#include "signal.h"33343435const char *processor_modes[]=3536{ "USER_26", "FIQ_26" , "IRQ_26" , "SVC_26" , "UK4_26" , "UK5_26" , "UK6_26" , "UK7_26" ,···684683 memcpy((void *)0xffff0000, __vectors_start, __vectors_end - __vectors_start);685684 memcpy((void *)0xffff0200, __stubs_start, __stubs_end - __stubs_start);686685 memcpy((void *)0xffff1000 - kuser_sz, __kuser_helper_start, kuser_sz);686686+687687+ /*688688+ * Copy signal return handlers into the vector page, and689689+ * set sigreturn to be a pointer to these.690690+ */691691+ memcpy((void *)KERN_SIGRETURN_CODE, sigreturn_codes,692692+ sizeof(sigreturn_codes));693693+687694 flush_icache_range(0xffff0000, 0xffff0000 + PAGE_SIZE);688695 modify_domain(DOMAIN_USER, DOMAIN_CLIENT);689696}
+2
arch/arm/mach-clps7500/core.c
···2626#include <asm/irq.h>2727#include <asm/mach-types.h>28282929+unsigned int vram_size;3030+2931static void cl7500_ack_irq_a(unsigned int irq)3032{3133 unsigned int val, mask;
+1-6
arch/arm/mach-rpc/riscpc.c
···32323333extern void rpc_init_irq(void);34343535-extern unsigned int vram_size;3636-3737-#if 03838-3535+unsigned int vram_size;3936unsigned int memc_ctrl_reg;4037unsigned int number_mfm_drives;4138···5962}60636164__tagtable(ATAG_ACORN, parse_tag_acorn);6262-6363-#endif64656566static struct map_desc rpc_io_desc[] __initdata = {6667 { SCREEN_BASE, SCREEN_START, 2*1048576, MT_DEVICE }, /* VRAM */
+6-13
arch/arm/mm/init.c
···9393};94949595#define O_PFN_DOWN(x) ((x) >> PAGE_SHIFT)9696-#define V_PFN_DOWN(x) O_PFN_DOWN(__pa(x))9797-9896#define O_PFN_UP(x) (PAGE_ALIGN(x) >> PAGE_SHIFT)9999-#define V_PFN_UP(x) O_PFN_UP(__pa(x))100100-101101-#define PFN_SIZE(x) ((x) >> PAGE_SHIFT)102102-#define PFN_RANGE(s,e) PFN_SIZE(PAGE_ALIGN((unsigned long)(e)) - \103103- (((unsigned long)(s)) & PAGE_MASK))1049710598/*10699 * FIXME: We really want to avoid allocating the bootmap bitmap···106113{107114 unsigned int start_pfn, bank, bootmap_pfn;108115109109- start_pfn = V_PFN_UP(&_end);116116+ start_pfn = O_PFN_UP(__pa(&_end));110117 bootmap_pfn = 0;111118112119 for (bank = 0; bank < mi->nr_banks; bank ++) {···115122 if (mi->bank[bank].node != node)116123 continue;117124118118- start = O_PFN_UP(mi->bank[bank].start);119119- end = O_PFN_DOWN(mi->bank[bank].size +120120- mi->bank[bank].start);125125+ start = mi->bank[bank].start >> PAGE_SHIFT;126126+ end = (mi->bank[bank].size +127127+ mi->bank[bank].start) >> PAGE_SHIFT;121128122129 if (end < start_pfn)123130 continue;···184191 /*185192 * Get the start and end pfns for this bank186193 */187187- start = O_PFN_UP(mi->bank[i].start);188188- end = O_PFN_DOWN(mi->bank[i].start + mi->bank[i].size);194194+ start = mi->bank[i].start >> PAGE_SHIFT;195195+ end = (mi->bank[i].start + mi->bank[i].size) >> PAGE_SHIFT;189196190197 if (np[node].start > start)191198 np[node].start = start;
+9-15
include/asm-arm/pgalloc.h
···8989 __free_page(pte);9090}91919292+static inline void __pmd_populate(pmd_t *pmdp, unsigned long pmdval)9393+{9494+ pmdp[0] = __pmd(pmdval);9595+ pmdp[1] = __pmd(pmdval + 256 * sizeof(pte_t));9696+ flush_pmd_entry(pmdp);9797+}9898+9299/*93100 * Populate the pmdp entry with a pointer to the pte. This pmd is part94101 * of the mm address space.···10699pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmdp, pte_t *ptep)107100{108101 unsigned long pte_ptr = (unsigned long)ptep;109109- unsigned long pmdval;110110-111111- BUG_ON(mm != &init_mm);112102113103 /*114104 * The pmd must be loaded with the physical115105 * address of the PTE table116106 */117107 pte_ptr -= PTRS_PER_PTE * sizeof(void *);118118- pmdval = __pa(pte_ptr) | _PAGE_KERNEL_TABLE;119119- pmdp[0] = __pmd(pmdval);120120- pmdp[1] = __pmd(pmdval + 256 * sizeof(pte_t));121121- flush_pmd_entry(pmdp);108108+ __pmd_populate(pmdp, __pa(pte_ptr) | _PAGE_KERNEL_TABLE);122109}123110124111static inline void125112pmd_populate(struct mm_struct *mm, pmd_t *pmdp, struct page *ptep)126113{127127- unsigned long pmdval;128128-129129- BUG_ON(mm == &init_mm);130130-131131- pmdval = page_to_pfn(ptep) << PAGE_SHIFT | _PAGE_USER_TABLE;132132- pmdp[0] = __pmd(pmdval);133133- pmdp[1] = __pmd(pmdval + 256 * sizeof(pte_t));134134- flush_pmd_entry(pmdp);114114+ __pmd_populate(pmdp, page_to_pfn(ptep) << PAGE_SHIFT | _PAGE_USER_TABLE);135115}136116137117#endif