diff options
Diffstat (limited to 'arch/arm/mm')
-rw-r--r-- | arch/arm/mm/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/mm/discontig.c | 34 | ||||
-rw-r--r-- | arch/arm/mm/fault-armv.c | 10 | ||||
-rw-r--r-- | arch/arm/mm/init.c | 2 |
4 files changed, 26 insertions, 22 deletions
diff --git a/arch/arm/mm/Makefile b/arch/arm/mm/Makefile index f64b92557b11..2e27a8c8372b 100644 --- a/arch/arm/mm/Makefile +++ b/arch/arm/mm/Makefile | |||
@@ -76,3 +76,5 @@ obj-$(CONFIG_CPU_V7) += proc-v7.o | |||
76 | 76 | ||
77 | obj-$(CONFIG_CACHE_FEROCEON_L2) += cache-feroceon-l2.o | 77 | obj-$(CONFIG_CACHE_FEROCEON_L2) += cache-feroceon-l2.o |
78 | obj-$(CONFIG_CACHE_L2X0) += cache-l2x0.o | 78 | obj-$(CONFIG_CACHE_L2X0) += cache-l2x0.o |
79 | obj-$(CONFIG_CACHE_XSC3L2) += cache-xsc3l2.o | ||
80 | |||
diff --git a/arch/arm/mm/discontig.c b/arch/arm/mm/discontig.c index 1e5602189507..c8c0c4b0f0a3 100644 --- a/arch/arm/mm/discontig.c +++ b/arch/arm/mm/discontig.c | |||
@@ -21,26 +21,24 @@ | |||
21 | * Our node_data structure for discontiguous memory. | 21 | * Our node_data structure for discontiguous memory. |
22 | */ | 22 | */ |
23 | 23 | ||
24 | static bootmem_data_t node_bootmem_data[MAX_NUMNODES]; | ||
25 | |||
26 | pg_data_t discontig_node_data[MAX_NUMNODES] = { | 24 | pg_data_t discontig_node_data[MAX_NUMNODES] = { |
27 | { .bdata = &node_bootmem_data[0] }, | 25 | { .bdata = &bootmem_node_data[0] }, |
28 | { .bdata = &node_bootmem_data[1] }, | 26 | { .bdata = &bootmem_node_data[1] }, |
29 | { .bdata = &node_bootmem_data[2] }, | 27 | { .bdata = &bootmem_node_data[2] }, |
30 | { .bdata = &node_bootmem_data[3] }, | 28 | { .bdata = &bootmem_node_data[3] }, |
31 | #if MAX_NUMNODES == 16 | 29 | #if MAX_NUMNODES == 16 |
32 | { .bdata = &node_bootmem_data[4] }, | 30 | { .bdata = &bootmem_node_data[4] }, |
33 | { .bdata = &node_bootmem_data[5] }, | 31 | { .bdata = &bootmem_node_data[5] }, |
34 | { .bdata = &node_bootmem_data[6] }, | 32 | { .bdata = &bootmem_node_data[6] }, |
35 | { .bdata = &node_bootmem_data[7] }, | 33 | { .bdata = &bootmem_node_data[7] }, |
36 | { .bdata = &node_bootmem_data[8] }, | 34 | { .bdata = &bootmem_node_data[8] }, |
37 | { .bdata = &node_bootmem_data[9] }, | 35 | { .bdata = &bootmem_node_data[9] }, |
38 | { .bdata = &node_bootmem_data[10] }, | 36 | { .bdata = &bootmem_node_data[10] }, |
39 | { .bdata = &node_bootmem_data[11] }, | 37 | { .bdata = &bootmem_node_data[11] }, |
40 | { .bdata = &node_bootmem_data[12] }, | 38 | { .bdata = &bootmem_node_data[12] }, |
41 | { .bdata = &node_bootmem_data[13] }, | 39 | { .bdata = &bootmem_node_data[13] }, |
42 | { .bdata = &node_bootmem_data[14] }, | 40 | { .bdata = &bootmem_node_data[14] }, |
43 | { .bdata = &node_bootmem_data[15] }, | 41 | { .bdata = &bootmem_node_data[15] }, |
44 | #endif | 42 | #endif |
45 | }; | 43 | }; |
46 | 44 | ||
diff --git a/arch/arm/mm/fault-armv.c b/arch/arm/mm/fault-armv.c index fbfa26058442..a8ec97b4752e 100644 --- a/arch/arm/mm/fault-armv.c +++ b/arch/arm/mm/fault-armv.c | |||
@@ -37,7 +37,7 @@ static int adjust_pte(struct vm_area_struct *vma, unsigned long address) | |||
37 | pgd_t *pgd; | 37 | pgd_t *pgd; |
38 | pmd_t *pmd; | 38 | pmd_t *pmd; |
39 | pte_t *pte, entry; | 39 | pte_t *pte, entry; |
40 | int ret = 0; | 40 | int ret; |
41 | 41 | ||
42 | pgd = pgd_offset(vma->vm_mm, address); | 42 | pgd = pgd_offset(vma->vm_mm, address); |
43 | if (pgd_none(*pgd)) | 43 | if (pgd_none(*pgd)) |
@@ -55,15 +55,19 @@ static int adjust_pte(struct vm_area_struct *vma, unsigned long address) | |||
55 | entry = *pte; | 55 | entry = *pte; |
56 | 56 | ||
57 | /* | 57 | /* |
58 | * If this page is present, it's actually being shared. | ||
59 | */ | ||
60 | ret = pte_present(entry); | ||
61 | |||
62 | /* | ||
58 | * If this page isn't present, or is already setup to | 63 | * If this page isn't present, or is already setup to |
59 | * fault (ie, is old), we can safely ignore any issues. | 64 | * fault (ie, is old), we can safely ignore any issues. |
60 | */ | 65 | */ |
61 | if (pte_present(entry) && pte_val(entry) & shared_pte_mask) { | 66 | if (ret && pte_val(entry) & shared_pte_mask) { |
62 | flush_cache_page(vma, address, pte_pfn(entry)); | 67 | flush_cache_page(vma, address, pte_pfn(entry)); |
63 | pte_val(entry) &= ~shared_pte_mask; | 68 | pte_val(entry) &= ~shared_pte_mask; |
64 | set_pte_at(vma->vm_mm, address, pte, entry); | 69 | set_pte_at(vma->vm_mm, address, pte, entry); |
65 | flush_tlb_page(vma, address); | 70 | flush_tlb_page(vma, address); |
66 | ret = 1; | ||
67 | } | 71 | } |
68 | pte_unmap(pte); | 72 | pte_unmap(pte); |
69 | return ret; | 73 | return ret; |
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c index b657f1719af0..e6352946dde0 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c | |||
@@ -284,7 +284,7 @@ bootmem_init_node(int node, int initrd_node, struct meminfo *mi) | |||
284 | */ | 284 | */ |
285 | arch_adjust_zones(node, zone_size, zhole_size); | 285 | arch_adjust_zones(node, zone_size, zhole_size); |
286 | 286 | ||
287 | free_area_init_node(node, pgdat, zone_size, start_pfn, zhole_size); | 287 | free_area_init_node(node, zone_size, start_pfn, zhole_size); |
288 | 288 | ||
289 | return end_pfn; | 289 | return end_pfn; |
290 | } | 290 | } |