Move the *_new_altkstack() and *_dispose_altkstack() functions out of the

various pmap implementations into the machine-independent vm.  They were
all identical.
This commit is contained in:
Alan Cox 2003-06-14 06:20:25 +00:00
parent 5c784c8f4b
commit 89f4fca265
13 changed files with 35 additions and 222 deletions

View File

@ -1063,35 +1063,6 @@ pmap_dispose_thread(td)
vm_object_deallocate(ksobj);
}
/*
* Set up a variable sized alternate kstack.
*/
void
pmap_new_altkstack(struct thread *td, int pages)
{
/* shuffle the original stack */
td->td_altkstack_obj = td->td_kstack_obj;
td->td_altkstack = td->td_kstack;
td->td_altkstack_pages = td->td_kstack_pages;
pmap_new_thread(td, pages);
}
void
pmap_dispose_altkstack(td)
struct thread *td;
{
pmap_dispose_thread(td);
/* restore the original kstack */
td->td_kstack = td->td_altkstack;
td->td_kstack_obj = td->td_altkstack_obj;
td->td_kstack_pages = td->td_altkstack_pages;
td->td_altkstack = 0;
td->td_altkstack_obj = NULL;
td->td_altkstack_pages = 0;
}
/*
* Allow the kernel stack for a thread to be prejudicially paged out.
*/

View File

@ -996,36 +996,6 @@ pmap_dispose_thread(td)
vm_object_deallocate(ksobj);
}
/*
* Set up a variable sized alternate kstack. Though it may look MI, it may
* need to be different on certain arches like ia64.
*/
void
pmap_new_altkstack(struct thread *td, int pages)
{
/* shuffle the original stack */
td->td_altkstack_obj = td->td_kstack_obj;
td->td_altkstack = td->td_kstack;
td->td_altkstack_pages = td->td_kstack_pages;
pmap_new_thread(td, pages);
}
void
pmap_dispose_altkstack(td)
struct thread *td;
{
pmap_dispose_thread(td);
/* restore the original kstack */
td->td_kstack = td->td_altkstack;
td->td_kstack_obj = td->td_altkstack_obj;
td->td_kstack_pages = td->td_altkstack_pages;
td->td_altkstack = 0;
td->td_altkstack_obj = NULL;
td->td_altkstack_pages = 0;
}
/*
* Allow the Kernel stack for a thread to be prejudicially paged out.
*/

View File

@ -1099,36 +1099,6 @@ pmap_dispose_thread(td)
vm_object_deallocate(ksobj);
}
/*
* Set up a variable sized alternate kstack. Though it may look MI, it may
* need to be different on certain arches like ia64.
*/
void
pmap_new_altkstack(struct thread *td, int pages)
{
/* shuffle the original stack */
td->td_altkstack_obj = td->td_kstack_obj;
td->td_altkstack = td->td_kstack;
td->td_altkstack_pages = td->td_kstack_pages;
pmap_new_thread(td, pages);
}
void
pmap_dispose_altkstack(td)
struct thread *td;
{
pmap_dispose_thread(td);
/* restore the original kstack */
td->td_kstack = td->td_altkstack;
td->td_kstack_obj = td->td_altkstack_obj;
td->td_kstack_pages = td->td_altkstack_pages;
td->td_altkstack = 0;
td->td_altkstack_obj = NULL;
td->td_altkstack_pages = 0;
}
/*
* Allow the Kernel stack for a thread to be prejudicially paged out.
*/

View File

@ -796,32 +796,6 @@ pmap_dispose_thread(struct thread *td)
td->td_kstack_pages = 0;
}
/*
* Set up a variable sized alternate kstack. This appears to be MI.
*/
void
pmap_new_altkstack(struct thread *td, int pages)
{
td->td_altkstack = td->td_kstack;
td->td_altkstack_obj = td->td_kstack_obj;
td->td_altkstack_pages = td->td_kstack_pages;
pmap_new_thread(td, pages);
}
void
pmap_dispose_altkstack(struct thread *td)
{
pmap_dispose_thread(td);
td->td_kstack = td->td_altkstack;
td->td_kstack_obj = td->td_altkstack_obj;
td->td_kstack_pages = td->td_altkstack_pages;
td->td_altkstack = 0;
td->td_altkstack_obj = NULL;
td->td_altkstack_pages = 0;
}
/*
* Allow the KSTACK for a thread to be prejudicially paged out.
*/

View File

@ -460,7 +460,7 @@ fork1(td, flags, pages, procp)
/* Allocate and switch to an alternate kstack if specified */
if (pages != 0)
pmap_new_altkstack(td2, pages);
vm_thread_new_altkstack(td2, pages);
PROC_LOCK(p2);
PROC_LOCK(p1);

View File

@ -168,7 +168,7 @@ proc_dtor(void *mem, int size, void *arg)
* freed, so you gotta do this here.
*/
if (((p->p_flag & P_KTHREAD) != 0) && (td->td_altkstack != 0))
pmap_dispose_altkstack(td);
vm_thread_dispose_altkstack(td);
/*
* We want to make sure we know the initial linkages.

View File

@ -1652,31 +1652,6 @@ pmap_dispose_thread(struct thread *td)
vm_object_deallocate(ksobj);
}
void
pmap_new_altkstack(struct thread *td, int pages)
{
/* shuffle the original stack */
td->td_altkstack_obj = td->td_kstack_obj;
td->td_altkstack = td->td_kstack;
td->td_altkstack_pages = td->td_kstack_pages;
pmap_new_thread(td, pages);
}
void
pmap_dispose_altkstack(struct thread *td)
{
pmap_dispose_thread(td);
/* restore the original kstack */
td->td_kstack = td->td_altkstack;
td->td_kstack_obj = td->td_altkstack_obj;
td->td_kstack_pages = td->td_altkstack_pages;
td->td_altkstack = 0;
td->td_altkstack_obj = NULL;
td->td_altkstack_pages = 0;
}
void
pmap_swapin_thread(struct thread *td)
{

View File

@ -1652,31 +1652,6 @@ pmap_dispose_thread(struct thread *td)
vm_object_deallocate(ksobj);
}
void
pmap_new_altkstack(struct thread *td, int pages)
{
/* shuffle the original stack */
td->td_altkstack_obj = td->td_kstack_obj;
td->td_altkstack = td->td_kstack;
td->td_altkstack_pages = td->td_kstack_pages;
pmap_new_thread(td, pages);
}
void
pmap_dispose_altkstack(struct thread *td)
{
pmap_dispose_thread(td);
/* restore the original kstack */
td->td_kstack = td->td_altkstack;
td->td_kstack_obj = td->td_altkstack_obj;
td->td_kstack_pages = td->td_altkstack_pages;
td->td_altkstack = 0;
td->td_altkstack_obj = NULL;
td->td_altkstack_pages = 0;
}
void
pmap_swapin_thread(struct thread *td)
{

View File

@ -1652,31 +1652,6 @@ pmap_dispose_thread(struct thread *td)
vm_object_deallocate(ksobj);
}
void
pmap_new_altkstack(struct thread *td, int pages)
{
/* shuffle the original stack */
td->td_altkstack_obj = td->td_kstack_obj;
td->td_altkstack = td->td_kstack;
td->td_altkstack_pages = td->td_kstack_pages;
pmap_new_thread(td, pages);
}
void
pmap_dispose_altkstack(struct thread *td)
{
pmap_dispose_thread(td);
/* restore the original kstack */
td->td_kstack = td->td_altkstack;
td->td_kstack_obj = td->td_altkstack_obj;
td->td_kstack_pages = td->td_altkstack_pages;
td->td_altkstack = 0;
td->td_altkstack_obj = NULL;
td->td_altkstack_pages = 0;
}
void
pmap_swapin_thread(struct thread *td)
{

View File

@ -1030,34 +1030,6 @@ pmap_dispose_thread(struct thread *td)
vm_object_deallocate(ksobj);
}
/*
* Set up a variable sized alternate kstack.
*/
void
pmap_new_altkstack(struct thread *td, int pages)
{
/* shuffle the original stack */
td->td_altkstack_obj = td->td_kstack_obj;
td->td_altkstack = td->td_kstack;
td->td_altkstack_pages = td->td_kstack_pages;
pmap_new_thread(td, pages);
}
void
pmap_dispose_altkstack(struct thread *td)
{
pmap_dispose_thread(td);
/* restore the original kstack */
td->td_kstack = td->td_altkstack;
td->td_kstack_obj = td->td_altkstack_obj;
td->td_kstack_pages = td->td_altkstack_pages;
td->td_altkstack = 0;
td->td_altkstack_obj = NULL;
td->td_altkstack_pages = 0;
}
/*
* Allow the kernel stack for a thread to be prejudicially paged out.
*/

View File

@ -131,8 +131,6 @@ void pmap_prefault(pmap_t, vm_offset_t, vm_map_entry_t);
int pmap_mincore(pmap_t pmap, vm_offset_t addr);
void pmap_new_thread(struct thread *td, int pages);
void pmap_dispose_thread(struct thread *td);
void pmap_new_altkstack(struct thread *td, int pages);
void pmap_dispose_altkstack(struct thread *td);
void pmap_swapout_thread(struct thread *td);
void pmap_swapin_thread(struct thread *td);
void pmap_activate(struct thread *td);

View File

@ -96,5 +96,7 @@ void vm_object_print(/* db_expr_t */ long, boolean_t, /* db_expr_t */ long,
int vm_fault_quick(caddr_t v, int prot);
void vm_proc_new(struct proc *p);
void vm_proc_dispose(struct proc *p);
void vm_thread_new_altkstack(struct thread *td, int pages);
void vm_thread_dispose_altkstack(struct thread *td);
#endif /* _KERNEL */
#endif /* !_VM_EXTERN_H_ */

View File

@ -387,6 +387,37 @@ vm_proc_swapin_all(int devidx)
}
#endif
/*
* Set up a variable-sized alternate kstack.
*/
void
vm_thread_new_altkstack(struct thread *td, int pages)
{
td->td_altkstack = td->td_kstack;
td->td_altkstack_obj = td->td_kstack_obj;
td->td_altkstack_pages = td->td_kstack_pages;
pmap_new_thread(td, pages);
}
/*
* Restore the original kstack.
*/
void
vm_thread_dispose_altkstack(struct thread *td)
{
pmap_dispose_thread(td);
td->td_kstack = td->td_altkstack;
td->td_kstack_obj = td->td_altkstack_obj;
td->td_kstack_pages = td->td_altkstack_pages;
td->td_altkstack = 0;
td->td_altkstack_obj = NULL;
td->td_altkstack_pages = 0;
}
/*
* Implement fork's actions on an address space.
* Here we arrange for the address space to be copied or referenced,