@@ -61,8 +61,6 @@ struct State {
61
61
pub struct BootStack {
62
62
/// stack for kernel tasks
63
63
stack : VirtAddr ,
64
- /// stack to handle interrupts
65
- ist0 : VirtAddr ,
66
64
}
67
65
68
66
pub struct CommonStack {
@@ -91,9 +89,9 @@ impl TaskStacks {
91
89
} else {
92
90
size. align_up ( BasePageSize :: SIZE as usize )
93
91
} ;
94
- let total_size = user_stack_size + DEFAULT_STACK_SIZE + KERNEL_STACK_SIZE ;
92
+ let total_size = user_stack_size + DEFAULT_STACK_SIZE ;
95
93
let virt_addr =
96
- crate :: arch:: mm:: virtualmem:: allocate ( total_size + 4 * BasePageSize :: SIZE as usize )
94
+ crate :: arch:: mm:: virtualmem:: allocate ( total_size + 3 * BasePageSize :: SIZE as usize )
97
95
. expect ( "Failed to allocate Virtual Memory for TaskStacks" ) ;
98
96
let phys_addr = crate :: arch:: mm:: physicalmem:: allocate ( total_size)
99
97
. expect ( "Failed to allocate Physical Memory for TaskStacks" ) ;
@@ -107,36 +105,26 @@ impl TaskStacks {
107
105
let mut flags = PageTableEntryFlags :: empty ( ) ;
108
106
flags. normal ( ) . writable ( ) . execute_disable ( ) ;
109
107
110
- // map IST0 into the address space
108
+ // map kernel stack into the address space
111
109
crate :: arch:: mm:: paging:: map :: < BasePageSize > (
112
110
virt_addr + BasePageSize :: SIZE ,
113
111
phys_addr,
114
- KERNEL_STACK_SIZE / BasePageSize :: SIZE as usize ,
115
- flags,
116
- ) ;
117
-
118
- // map kernel stack into the address space
119
- crate :: arch:: mm:: paging:: map :: < BasePageSize > (
120
- virt_addr + KERNEL_STACK_SIZE + 2 * BasePageSize :: SIZE ,
121
- phys_addr + KERNEL_STACK_SIZE ,
122
112
DEFAULT_STACK_SIZE / BasePageSize :: SIZE as usize ,
123
113
flags,
124
114
) ;
125
115
126
116
// map user stack into the address space
127
117
crate :: arch:: mm:: paging:: map :: < BasePageSize > (
128
- virt_addr + KERNEL_STACK_SIZE + DEFAULT_STACK_SIZE + 3 * BasePageSize :: SIZE ,
129
- phys_addr + KERNEL_STACK_SIZE + DEFAULT_STACK_SIZE ,
118
+ virt_addr + DEFAULT_STACK_SIZE + 2 * BasePageSize :: SIZE ,
119
+ phys_addr + DEFAULT_STACK_SIZE ,
130
120
user_stack_size / BasePageSize :: SIZE as usize ,
131
121
flags,
132
122
) ;
133
123
134
124
// clear user stack
135
125
unsafe {
136
126
ptr:: write_bytes (
137
- ( virt_addr
138
- + KERNEL_STACK_SIZE + DEFAULT_STACK_SIZE
139
- + 3 * BasePageSize :: SIZE as usize )
127
+ ( virt_addr + DEFAULT_STACK_SIZE + 2 * BasePageSize :: SIZE as usize )
140
128
. as_mut_ptr :: < u8 > ( ) ,
141
129
0xAC ,
142
130
user_stack_size,
@@ -156,38 +144,30 @@ impl TaskStacks {
156
144
tss. privilege_stack_table [ 0 ] . as_u64 ( ) as usize + Self :: MARKER_SIZE - KERNEL_STACK_SIZE ,
157
145
) ;
158
146
debug ! ( "Using boot stack {:#X}" , stack) ;
159
- let ist0 = VirtAddr :: from_usize (
160
- tss. interrupt_stack_table [ 0 ] . as_u64 ( ) as usize + Self :: MARKER_SIZE - KERNEL_STACK_SIZE ,
161
- ) ;
162
- debug ! ( "IST0 is located at {:#X}" , ist0) ;
163
147
164
- TaskStacks :: Boot ( BootStack { stack, ist0 } )
148
+ TaskStacks :: Boot ( BootStack { stack } )
165
149
}
166
150
167
151
pub fn get_user_stack_size ( & self ) -> usize {
168
152
match self {
169
153
TaskStacks :: Boot ( _) => 0 ,
170
- TaskStacks :: Common ( stacks) => {
171
- stacks. total_size - DEFAULT_STACK_SIZE - KERNEL_STACK_SIZE
172
- }
154
+ TaskStacks :: Common ( stacks) => stacks. total_size - DEFAULT_STACK_SIZE ,
173
155
}
174
156
}
175
157
176
158
pub fn get_user_stack ( & self ) -> VirtAddr {
177
159
match self {
178
160
TaskStacks :: Boot ( _) => VirtAddr :: zero ( ) ,
179
161
TaskStacks :: Common ( stacks) => {
180
- stacks. virt_addr + KERNEL_STACK_SIZE + DEFAULT_STACK_SIZE + 3 * BasePageSize :: SIZE
162
+ stacks. virt_addr + DEFAULT_STACK_SIZE + 2 * BasePageSize :: SIZE
181
163
}
182
164
}
183
165
}
184
166
185
167
pub fn get_kernel_stack ( & self ) -> VirtAddr {
186
168
match self {
187
169
TaskStacks :: Boot ( stacks) => stacks. stack ,
188
- TaskStacks :: Common ( stacks) => {
189
- stacks. virt_addr + KERNEL_STACK_SIZE + 2 * BasePageSize :: SIZE
190
- }
170
+ TaskStacks :: Common ( stacks) => stacks. virt_addr + BasePageSize :: SIZE ,
191
171
}
192
172
}
193
173
@@ -197,17 +177,6 @@ impl TaskStacks {
197
177
TaskStacks :: Common ( _) => DEFAULT_STACK_SIZE ,
198
178
}
199
179
}
200
-
201
- pub fn get_interrupt_stack ( & self ) -> VirtAddr {
202
- match self {
203
- TaskStacks :: Boot ( stacks) => stacks. ist0 ,
204
- TaskStacks :: Common ( stacks) => stacks. virt_addr + BasePageSize :: SIZE ,
205
- }
206
- }
207
-
208
- pub fn get_interrupt_stack_size ( & self ) -> usize {
209
- KERNEL_STACK_SIZE
210
- }
211
180
}
212
181
213
182
impl Drop for TaskStacks {
0 commit comments