Changeset 03427d0 in mainline for arch/ia64/src/mm/as.c


Ignore:
Timestamp:
2006-03-02T17:57:45Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
9459255
Parents:
9ad03fe
Message:

ia64 work.
Add code needed for running multiple address spaces and location of kernel stack
after switch from userspace.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • arch/ia64/src/mm/as.c

    r9ad03fe r03427d0  
    2828
    2929#include <arch/mm/as.h>
     30#include <arch/mm/asid.h>
     31#include <arch/mm/page.h>
    3032#include <genarch/mm/as_ht.h>
    3133#include <genarch/mm/asid_fifo.h>
     34#include <mm/asid.h>
     35#include <arch.h>
     36#include <arch/barrier.h>
     37#include <synch/spinlock.h>
    3238
    3339/** Architecture dependent address space init. */
     
    3743        asid_fifo_init();
    3844}
     45
     46/** Prepare registers for switching to another address space.
     47 *
     48 * @param as Address space.
     49 */
     50void as_install_arch(as_t *as)
     51{
     52        ipl_t ipl;
     53        region_register rr;
     54        int i;
     55       
     56        ipl = interrupts_disable();
     57        spinlock_lock(&as->lock);
     58       
     59        ASSERT(as->asid != ASID_INVALID);
     60       
     61        /*
     62         * Load respective ASID (7 consecutive RIDs) to
     63         * region registers.
     64         */
     65        for (i = 0; i < REGION_REGISTERS; i++) {
     66                if (i == VRN_KERNEL)
     67                        continue;
     68               
     69                rr.word = rr_read(i);
     70                rr.map.ve = false;                      /* disable VHPT walker */
     71                rr.map.rid = ASID2RID(as->asid, i);
     72                rr.map.ps = PAGE_WIDTH;
     73                rr_write(i, rr.word);
     74        }
     75        srlz_d();
     76        srlz_i();
     77       
     78        spinlock_unlock(&as->lock);
     79        interrupts_restore(ipl);
     80}
Note: See TracChangeset for help on using the changeset viewer.