Changeset 992bbb97 in mainline


Ignore:
Timestamp:
2005-06-29T20:53:18Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ff9f858
Parents:
b60a22c
Message:

Start with generic 4-level page table interface.

Usual cleanup.

Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • arch/ia32/include/mm/page.h

    rb60a22c r992bbb97  
    3838#define PA2KA(x)        ((x) + 0x80000000)
    3939
     40/*
     41 * Implementation of generic 4-level page table interface.
     42 * IA-32 has 2-level page tables, so PTL1 and PTL2 are left out.
     43 */
     44#define PTL0_INDEX_ARCH(vaddr)  (((vaddr)>>22)&0x3ff)
     45#define PTL1_INDEX_ARCH(vaddr)  0
     46#define PTL2_INDEX_ARCH(vaddr)  0
     47#define PTL3_INDEX_ARCH(vaddr)  (((vaddr)>>12)&0x3ff)
     48
     49#define GET_PTL1_ADDRESS_ARCH(ptl0, i)          ((pte_t *)((((pte_t *)(ptl0))[(i)].frame_address)<<12))
     50#define GET_PTL2_ADDRESS_ARCH(ptl1, i)          (ptl1)
     51#define GET_PTL3_ADDRESS_ARCH(ptl2, i)          (ptl2)
     52#define GET_FRAME_ADDRESS_ARCH(ptl3, i)         ((__address)((((pte_t *)(ptl3))[(i)].frame_address)<<12))
     53
     54
    4055struct page_specifier {
    4156        unsigned present : 1;
     
    5166} __attribute__ ((packed));
    5267
     68typedef struct page_specifier   pte_t;
     69
    5370extern void page_arch_init(void);
    5471
  • include/mm/page.h

    rb60a22c r992bbb97  
    4747#define PAGE_EXEC               (1<<5)
    4848
     49/*
     50 * This is the generic 4-level page table interface.
     51 * Architectures are supposed to implement *_ARCH macros.
     52 */
     53
     54/*
     55 * These macros process vaddr and extract those portions
     56 * of it that function as indices to respective page tables.
     57 */
     58#define PTL0_INDEX(vaddr)               PTL0_INDEX_ARCH(vaddr)
     59#define PTL1_INDEX(vaddr)               PTL1_INDEX_ARCH(vaddr)
     60#define PTL2_INDEX(vaddr)               PTL2_INDEX_ARCH(vaddr)
     61#define PTL3_INDEX(vaddr)               PTL3_INDEX_ARCH(vaddr)
     62
     63/*
     64 * These macros traverse the 4-level tree of page tables,
     65 * each descending by one level.
     66 */
     67#define GET_PTL1_ADDRESS(ptl0, i)       GET_PTL1_ADDRESS_ARCH(ptl0, i)
     68#define GET_PTL2_ADDRESS(ptl1, i)       GET_PTL2_ADDRESS_ARCH(ptl1, i)
     69#define GET_PTL3_ADDRESS(ptl2, i)       GET_PTL3_ADDRESS_ARCH(ptl2, i)
     70#define GET_FRAME_ADDRESS(ptl3, i)      GET_FRAME_ADDRESS_ARCH(ptl3, i)
     71
     72/*
     73 * These macros are provided to change shape of the 4-level
     74 * tree of page tables on respective level.
     75 */
     76#define SET_PTL1_ADDRESS(ptl0, i, a)    SET_PTL1_ADDRESS_ARCH(ptl0, i, a)
     77#define SET_PTL2_ADDRESS(ptl1, i, a)    SET_PTL2_ADDRESS_ARCH(ptl1, i, a)
     78#define SET_PTL3_ADDRESS(ptl2, i, a)    SET_PTL3_ADDRESS_ARCH(ptl2, i, a)
     79#define SET_FRAME_ADDRESS(ptl3, i, a)   SET_FRAME_ADDRESS_ARCH(ptl3, i, a)
     80
     81/*
     82 * These macros are provided to set/clear various flags within the page tables.
     83 */
     84#define SET_PTL1_FLAGS(ptl0, i, x)      SET_PTL1_FLAGS_ARCH(ptl0, i, x)
     85#define SET_PTL2_FLAGS(ptl1, i, x)      SET_PTL2_FLAGS_ARCH(ptl1, i, x)
     86#define SET_PTL3_FLAGS(ptl2, i, x)      SET_PTL3_FLAGS_ARCH(ptl2, i, x)
     87#define SET_FRAME_FLAGS(ptl3, i, x)     SET_FRAME_FLAGS_ARCH(ptl3, i, x)
     88
     89
    4990extern void page_init(void);
    5091extern void map_page_to_frame(__address page, __address frame, int flags, __address root);
  • src/Makefile.config

    rb60a22c r992bbb97  
    1818
    1919# Uncomment if you want to compile in userspace support
    20 USERSPACE=__USERSPACE__
     20#USERSPACE=__USERSPACE__
    2121
    2222# Uncomment if you want to run in the test mode
    23 TEST=__TEST__
     23#TEST=__TEST__
    2424
    2525TEST_FILE=test.c
  • test/fpu/fpu1/test.c

    rb60a22c r992bbb97  
    7070        }
    7171
    72         atomic_inc((int *) &threads_ok);
     72        atomic_inc(&threads_ok);
    7373}
    7474
     
    100100        }
    101101
    102         atomic_inc((int *) &threads_ok);
     102        atomic_inc(&threads_ok);
    103103}
    104104
  • test/synch/rwlock5/test.c

    rb60a22c r992bbb97  
    4242
    4343static waitq_t can_start;
    44 static int items_read;
    45 static int items_written;
     44static volatile int items_read;
     45static volatile int items_written;
    4646
    4747static void writer(void *arg);
  • test/synch/semaphore1/test.c

    rb60a22c r992bbb97  
    4343
    4444static waitq_t can_start;
    45 static int items_produced;
    46 static int items_consumed;
     45static volatile int items_produced;
     46static volatile int items_consumed;
    4747
    4848static void consumer(void *arg);
Note: See TracChangeset for help on using the changeset viewer.