Changeset ef67bab in mainline for arch


Ignore:
Timestamp:
2006-02-01T00:02:16Z (20 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
071a8ae6
Parents:
fc1e4f6
Message:

Memory management work.
Remove the last (i.e. 'root') argument from page_mapping_insert() and page_mapping_find().
Page table address is now extracted from the first (i.e. 'as') argument.
Add a lot of infrastructure to make the above possible.
sparc64 is now broken, most likely because of insufficient identity mapping of physical memory.

Location:
arch
Files:
5 added
21 edited

Legend:

Unmodified
Added
Removed
  • arch/amd64/Makefile.inc

    rfc1e4f6 ref67bab  
    8888        arch/$(ARCH)/src/bios/bios.c \
    8989        arch/$(ARCH)/src/interrupt.c \
     90        arch/$(ARCH)/src/mm/as.c \
    9091        arch/$(ARCH)/src/mm/frame.c \
    9192        arch/$(ARCH)/src/mm/page.c \
  • arch/amd64/include/mm/as.h

    rfc1e4f6 ref67bab  
    4343#define as_install_arch(as)
    4444
     45extern void as_arch_init(void);
     46
    4547#endif
  • arch/amd64/src/mm/page.c

    rfc1e4f6 ref67bab  
    3939#include <interrupt.h>
    4040
    41 static __address bootstrap_dba;
    42 
    4341void page_arch_init(void)
    4442{
    45         __address dba;
    4643        __address cur;
    4744
     
    4946                page_operations = &page_pt_operations;
    5047       
    51                 dba = frame_alloc(FRAME_KA | FRAME_PANIC, ONE_FRAME, NULL);
    52                 memsetb(dba, PAGE_SIZE, 0);
    53 
    54                 bootstrap_dba = dba;
    55 
    5648                /*
    5749                 * PA2KA(identity) mapping for all frames.
    5850                 */
    5951                for (cur = 0; cur < last_frame; cur += FRAME_SIZE) {
    60                         page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, PAGE_CACHEABLE | PAGE_EXEC, KA2PA(dba));
     52                        page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, PAGE_CACHEABLE | PAGE_EXEC);
    6153                }
    6254
    6355                exc_register(14, "page_fault", page_fault);
    64                 write_cr3(KA2PA(dba));
     56                write_cr3((__address) AS_KERNEL->page_table);
    6557        }
    6658        else {
    67                 write_cr3(KA2PA(bootstrap_dba));
     59                write_cr3((__address) AS_KERNEL->page_table);
    6860        }
    6961}
  • arch/ia32/Makefile.inc

    rfc1e4f6 ref67bab  
    111111        arch/$(ARCH)/src/userspace.c \
    112112        arch/$(ARCH)/src/cpu/cpu.c \
     113        arch/$(ARCH)/src/mm/as.c \
    113114        arch/$(ARCH)/src/mm/frame.c \
    114115        arch/$(ARCH)/src/mm/memory_init.c \
  • arch/ia32/include/mm/as.h

    rfc1e4f6 ref67bab  
    4343#define as_install_arch(as)
    4444
     45extern void as_arch_init(void);
     46
    4547#endif
  • arch/ia32/src/drivers/ega.c

    rfc1e4f6 ref67bab  
    6060        __u8 hi, lo;
    6161
    62         page_mapping_insert(AS_KERNEL, PA2KA(VIDEORAM), VIDEORAM, PAGE_NOT_CACHEABLE, 0);
     62        page_mapping_insert(AS_KERNEL, PA2KA(VIDEORAM), VIDEORAM, PAGE_NOT_CACHEABLE);
    6363        outb(0x3d4,0xe);
    6464        hi = inb(0x3d5);
  • arch/ia32/src/mm/page.c

    rfc1e4f6 ref67bab  
    4343#include <interrupt.h>
    4444
    45 static __address bootstrap_dba;
    46 
    4745void page_arch_init(void)
    4846{
    49         __address dba;
    5047        __address cur;
    5148
     
    5350                page_operations = &page_pt_operations;
    5451       
    55                 dba = frame_alloc(FRAME_KA | FRAME_PANIC, ONE_FRAME, NULL);
    56                 memsetb(dba, PAGE_SIZE, 0);
    57 
    58                 bootstrap_dba = dba;
    59                
    6052                /*
    6153                 * PA2KA(identity) mapping for all frames until last_frame.
    6254                 */
    6355                for (cur = 0; cur < last_frame; cur += FRAME_SIZE)
    64                         page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, PAGE_CACHEABLE, KA2PA(dba));
     56                        page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, PAGE_CACHEABLE);
    6557
    6658                exc_register(14, "page_fault", page_fault);
    67                 write_cr3(KA2PA(dba));
     59                write_cr3((__address) AS_KERNEL->page_table);
    6860        }
    6961        else {
    70                 write_cr3(KA2PA(bootstrap_dba));
     62                write_cr3((__address) AS_KERNEL->page_table);
    7163        }
    7264
  • arch/ia32/src/smp/smp.c

    rfc1e4f6 ref67bab  
    6767        if (config.cpu_count > 1) {             
    6868                page_mapping_insert(AS_KERNEL, (__address) l_apic, (__address) l_apic,
    69                                   PAGE_NOT_CACHEABLE, 0);
     69                                  PAGE_NOT_CACHEABLE);
    7070                page_mapping_insert(AS_KERNEL, (__address) io_apic, (__address) io_apic,
    71                                   PAGE_NOT_CACHEABLE, 0);
     71                                  PAGE_NOT_CACHEABLE);
    7272        }
    7373
  • arch/ia64/Makefile.inc

    rfc1e4f6 ref67bab  
    6565        arch/$(ARCH)/src/ivt.S \
    6666        arch/$(ARCH)/src/interrupt.c \
     67        arch/$(ARCH)/src/mm/as.c \
    6768        arch/$(ARCH)/src/mm/frame.c \
    6869        arch/$(ARCH)/src/mm/page.c \
  • arch/ia64/include/mm/as.h

    rfc1e4f6 ref67bab  
    4343#define as_install_arch(as)
    4444
     45extern void as_arch_init(void);
     46
    4547#endif
  • arch/ia64/include/mm/page.h

    rfc1e4f6 ref67bab  
    4444#define PA2KA(x)        ((__address) (x))
    4545
    46 #define GET_PTL0_ADDRESS_ARCH()                 ((pte_t *) 0)
    47 #define SET_PTL0_ADDRESS_ARCH(ptl0)
     46#define SET_PTL0_ADDRESS_ARCH(x)        /**< To be removed as situation permits. */
    4847
    4948/** Implementation of page hash table interface. */
    50 #define HT_ENTRIES_ARCH                                 (VHPT_SIZE/sizeof(pte_t))
     49#define HT_WIDTH_ARCH                                   20      /* 1M */
    5150#define HT_HASH_ARCH(page, asid)                        vhpt_hash((page), (asid))
    5251#define HT_COMPARE_ARCH(page, asid, t)                  vhpt_compare((page), (asid), (t))
  • arch/ia64/src/mm/tlb.c

    rfc1e4f6 ref67bab  
    3434#include <arch/mm/asid.h>
    3535
    36 /** Invalidate all TLB entries.
    37  *
    38  * Because of ASID management, region registers must be reset
    39  * with new RIDs derived from the potentionally new ASID.
    40  */
     36/** Invalidate all TLB entries. */
    4137void tlb_invalidate_all(void)
    4238{
  • arch/mips32/include/mm/as.h

    rfc1e4f6 ref67bab  
    4242#define UDATA_ADDRESS_ARCH      0x01001000
    4343
     44extern void as_arch_init(void);
     45
    4446#endif
  • arch/mips32/src/mm/as.c

    rfc1e4f6 ref67bab  
    2828
    2929#include <arch/mm/as.h>
     30#include <genarch/mm/as_pt.h>
    3031#include <arch/mm/tlb.h>
    3132#include <mm/tlb.h>
     
    3334#include <arch/cp0.h>
    3435#include <arch.h>
     36
     37/** Architecture dependent address space init. */
     38void as_arch_init(void)
     39{
     40        as_operations = &as_pt_operations;
     41}
    3542
    3643/** Install address space.
     
    5764        interrupts_restore(ipl);
    5865}
     66
  • arch/mips32/src/mm/tlb.c

    rfc1e4f6 ref67bab  
    340340         * Check if the mapping exists in page tables.
    341341         */     
    342         pte = page_mapping_find(AS, badvaddr, 0);
     342        pte = page_mapping_find(AS, badvaddr);
    343343        if (pte && pte->lo.v) {
    344344                /*
     
    357357                         * The mapping ought to be in place.
    358358                         */
    359                         pte = page_mapping_find(AS, badvaddr, 0);
     359                        pte = page_mapping_find(AS, badvaddr);
    360360                        ASSERT(pte && pte->lo.v);
    361361                        return pte;
  • arch/ppc32/Makefile.inc

    rfc1e4f6 ref67bab  
    6161        arch/$(ARCH)/src/asm.S \
    6262        arch/$(ARCH)/src/cpu/cpu.c \
     63        arch/$(ARCH)/src/mm/as.c \
    6364        arch/$(ARCH)/src/mm/frame.c \
    6465        arch/$(ARCH)/src/mm/memory_init.c \
  • arch/ppc32/include/mm/as.h

    rfc1e4f6 ref67bab  
    4343#define as_install_arch(as)
    4444
     45extern void as_arch_init(void);
     46
    4547#endif
  • arch/sparc64/Makefile.inc

    rfc1e4f6 ref67bab  
    6565        arch/$(ARCH)/src/context.S \
    6666        arch/$(ARCH)/src/dummy.s \
     67        arch/$(ARCH)/src/mm/as.c \
    6768        arch/$(ARCH)/src/mm/frame.c \
    6869        arch/$(ARCH)/src/mm/page.c \
  • arch/sparc64/include/mm/as.h

    rfc1e4f6 ref67bab  
    4343#define as_install_arch(as)
    4444
     45extern void as_arch_init(void);
     46
    4547#endif
  • arch/sparc64/include/mm/frame.h

    rfc1e4f6 ref67bab  
    3232#include <arch/types.h>
    3333
    34 #define FRAME_SIZE              8192
     34#define FRAME_WIDTH             13
     35#define FRAME_SIZE              (1<<FRAME_WIDTH)
    3536
    3637union frame_address {
  • arch/sparc64/include/mm/page.h

    rfc1e4f6 ref67bab  
    3939#define PA2KA(x)        ((__address) (x))
    4040
    41 #define GET_PTL0_ADDRESS_ARCH()         0
    42 #define SET_PTL0_ADDRESS_ARCH(ptl0)
     41#define SET_PTL0_ADDRESS_ARCH(x)        /**< To be removed as situation permits. */
    4342
    4443/** Implementation of page hash table interface. */
    45 #define HT_ENTRIES_ARCH                 0
     44#define HT_WIDTH_ARCH                   20      /* 1M */
    4645#define HT_HASH_ARCH(page, asid)        0
    4746#define HT_COMPARE_ARCH(page, asid, t)  0
Note: See TracChangeset for help on using the changeset viewer.