Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
m68k
mm
init_no.c
Go to the documentation of this file.
1
/*
2
* linux/arch/m68knommu/mm/init.c
3
*
4
* Copyright (C) 1998 D. Jeff Dionne <
[email protected]
>,
5
* Kenneth Albanowski <
[email protected]
>,
6
* Copyright (C) 2000 Lineo, Inc. (www.lineo.com)
7
*
8
* Based on:
9
*
10
* linux/arch/m68k/mm/init.c
11
*
12
* Copyright (C) 1995 Hamish Macdonald
13
*
14
* JAN/1999 -- hacked to support ColdFire (
[email protected]
)
15
* DEC/2000 -- linux 2.4 support <
[email protected]
>
16
*/
17
18
#include <linux/signal.h>
19
#include <linux/sched.h>
20
#include <linux/kernel.h>
21
#include <linux/errno.h>
22
#include <linux/string.h>
23
#include <linux/types.h>
24
#include <linux/ptrace.h>
25
#include <linux/mman.h>
26
#include <
linux/mm.h
>
27
#include <
linux/swap.h
>
28
#include <
linux/init.h
>
29
#include <
linux/highmem.h
>
30
#include <
linux/pagemap.h
>
31
#include <
linux/bootmem.h
>
32
#include <
linux/gfp.h
>
33
34
#include <asm/setup.h>
35
#include <asm/sections.h>
36
#include <asm/segment.h>
37
#include <asm/page.h>
38
#include <asm/pgtable.h>
39
#include <asm/machdep.h>
40
41
/*
42
* ZERO_PAGE is a special page that is used for zero-initialized
43
* data and COW.
44
*/
45
void
*
empty_zero_page
;
46
47
/*
48
* paging_init() continues the virtual memory environment setup which
49
* was begun by the code in arch/head.S.
50
* The parameters are pointers to where to stick the starting and ending
51
* addresses of available kernel virtual memory.
52
*/
53
void
__init
paging_init
(
void
)
54
{
55
/*
56
* Make sure start_mem is page aligned, otherwise bootmem and
57
* page_alloc get different views of the world.
58
*/
59
unsigned
long
end_mem =
memory_end
&
PAGE_MASK
;
60
unsigned
long
zones_size[MAX_NR_ZONES] = {0, };
61
62
empty_zero_page
=
alloc_bootmem_pages
(
PAGE_SIZE
);
63
memset
(
empty_zero_page
, 0,
PAGE_SIZE
);
64
65
/*
66
* Set up SFC/DFC registers (user data space).
67
*/
68
set_fs
(
USER_DS
);
69
70
zones_size[ZONE_DMA] = (end_mem -
PAGE_OFFSET
) >>
PAGE_SHIFT
;
71
free_area_init
(zones_size);
72
}
73
74
void
__init
mem_init
(
void
)
75
{
76
int
codek = 0, datak = 0, initk = 0;
77
unsigned
long
tmp
;
78
unsigned
long
len
=
_ramend
-
_rambase
;
79
unsigned
long
start_mem =
memory_start
;
/* DAVIDM - these must start at end of kernel */
80
unsigned
long
end_mem =
memory_end
;
/* DAVIDM - this must not include kernel stack at top */
81
82
pr_debug
(
"Mem_init: start=%lx, end=%lx\n"
, start_mem, end_mem);
83
84
end_mem &=
PAGE_MASK
;
85
high_memory
= (
void
*) end_mem;
86
87
start_mem =
PAGE_ALIGN
(start_mem);
88
max_mapnr
=
num_physpages
= (((
unsigned
long
)
high_memory
) -
PAGE_OFFSET
) >>
PAGE_SHIFT
;
89
90
/* this will put all memory onto the freelists */
91
totalram_pages =
free_all_bootmem
();
92
93
codek = (
_etext
-
_stext
) >> 10;
94
datak = (
__bss_stop
-
_sdata
) >> 10;
95
initk = (
__init_begin
-
__init_end
) >> 10;
96
97
tmp = nr_free_pages() <<
PAGE_SHIFT
;
98
printk
(
KERN_INFO
"Memory available: %luk/%luk RAM, (%dk kernel code, %dk data)\n"
,
99
tmp >> 10,
100
len >> 10,
101
codek,
102
datak
103
);
104
}
105
106
107
#ifdef CONFIG_BLK_DEV_INITRD
108
void
free_initrd_mem
(
unsigned
long
start
,
unsigned
long
end
)
109
{
110
int
pages
= 0;
111
for
(; start <
end
; start +=
PAGE_SIZE
) {
112
ClearPageReserved(
virt_to_page
(start));
113
init_page_count(
virt_to_page
(start));
114
free_page
(start);
115
totalram_pages++;
116
pages++;
117
}
118
pr_notice
(
"Freeing initrd memory: %luk freed\n"
,
119
pages * (
PAGE_SIZE
/ 1024));
120
}
121
#endif
122
123
void
free_initmem
(
void
)
124
{
125
#ifdef CONFIG_RAMKERNEL
126
unsigned
long
addr
;
127
/*
128
* The following code should be cool even if these sections
129
* are not page aligned.
130
*/
131
addr =
PAGE_ALIGN
((
unsigned
long
)
__init_begin
);
132
/* next to check that the page we free is not a partial page */
133
for
(; addr +
PAGE_SIZE
< ((
unsigned
long
)
__init_end
); addr +=
PAGE_SIZE
) {
134
ClearPageReserved(
virt_to_page
(addr));
135
init_page_count(
virt_to_page
(addr));
136
free_page
(addr);
137
totalram_pages++;
138
}
139
pr_notice
(
"Freeing unused kernel memory: %luk freed (0x%x - 0x%x)\n"
,
140
(addr -
PAGE_ALIGN
((
unsigned
long
) __init_begin)) >> 10,
141
(
int
)(
PAGE_ALIGN
((
unsigned
long
) __init_begin)),
142
(
int
)(addr - PAGE_SIZE));
143
#endif
144
}
145
Generated on Thu Jan 10 2013 13:08:16 for Linux Kernel by
1.8.2