Changeset 80bcaed in mainline for kernel/generic/include/mm


Ignore:
Timestamp:
2007-02-03T13:22:24Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f619ec11
Parents:
fa8e7d2
Message:

Merge as_t structure into one and leave the differring parts in as_genarch_t.

Indentation and formatting changes in header files.

Location:
kernel/generic/include/mm
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/mm/as.h

    rfa8e7d2 r80bcaed  
    5454#include <lib/elf.h>
    5555
    56 /** Defined to be true if user address space and kernel address space shadow each other. */
     56/**
     57 * Defined to be true if user address space and kernel address space shadow each
     58 * other.
     59 */
    5760#define KERNEL_ADDRESS_SPACE_SHADOWED   KERNEL_ADDRESS_SPACE_SHADOWED_ARCH
    5861
     
    6265#define USER_ADDRESS_SPACE_END          USER_ADDRESS_SPACE_END_ARCH
    6366
    64 #define USTACK_ADDRESS  USTACK_ADDRESS_ARCH
    65 
    66 #define FLAG_AS_KERNEL      (1 << 0)    /**< Kernel address space. */
    67 
    68 /** Address space area attributes. */
     67#define USTACK_ADDRESS                  USTACK_ADDRESS_ARCH
     68
     69/** Kernel address space. */
     70#define FLAG_AS_KERNEL                  (1 << 0)       
     71
     72/* Address space area attributes. */
    6973#define AS_AREA_ATTR_NONE       0
    7074#define AS_AREA_ATTR_PARTIAL    1       /**< Not fully initialized area. */
    7175
    72 #define AS_PF_FAULT             0       /**< The page fault was not resolved by as_page_fault(). */
    73 #define AS_PF_OK                1       /**< The page fault was resolved by as_page_fault(). */
    74 #define AS_PF_DEFER             2       /**< The page fault was caused by memcpy_from_uspace() or memcpy_to_uspace(). */
     76/** The page fault was not resolved by as_page_fault(). */
     77#define AS_PF_FAULT             0
     78/** The page fault was resolved by as_page_fault(). */
     79#define AS_PF_OK                1
     80/** The page fault was caused by memcpy_from_uspace() or memcpy_to_uspace(). */
     81#define AS_PF_DEFER             2
     82
     83/** Address space structure.
     84 *
     85 * as_t contains the list of as_areas of userspace accessible
     86 * pages for one or more tasks. Ranges of kernel memory pages are not
     87 * supposed to figure in the list as they are shared by all tasks and
     88 * set up during system initialization.
     89 */
     90typedef struct as {
     91        /** Protected by asidlock. */
     92        link_t inactive_as_with_asid_link;
     93
     94        mutex_t lock;
     95
     96        /** Number of references (i.e tasks that reference this as). */
     97        count_t refcount;
     98
     99        /** Number of processors on wich is this address space active. */
     100        count_t cpu_refcount;
     101
     102        /** B+tree of address space areas. */
     103        btree_t as_area_btree;
     104       
     105        /**
     106         *  Address space identifier.
     107         *  Constant on architectures that do not support ASIDs.
     108         */
     109        asid_t asid;
     110       
     111        /** Non-generic content. */
     112        as_genarch_t genarch;
     113
     114        /** Architecture specific content. */
     115        as_arch_t arch;
     116} as_t;
    75117
    76118typedef struct {
     
    81123} as_operations_t;
    82124
    83 /** This structure contains information associated with the shared address space area. */
     125/**
     126 * This structure contains information associated with the shared address space
     127 * area.
     128 */
    84129typedef struct {
    85         mutex_t lock;           /**< This lock must be acquired only when the as_area lock is held. */
    86         count_t refcount;       /**< This structure can be deallocated if refcount drops to 0. */
    87         btree_t pagemap;        /**< B+tree containing complete map of anonymous pages of the shared area. */
     130        /** This lock must be acquired only when the as_area lock is held. */
     131        mutex_t lock;           
     132        /** This structure can be deallocated if refcount drops to 0. */
     133        count_t refcount;
     134        /**
     135         * B+tree containing complete map of anonymous pages of the shared area.
     136         */
     137        btree_t pagemap;
    88138} share_info_t;
    89139
     
    116166typedef struct {
    117167        mutex_t lock;
    118         as_t *as;               /**< Containing address space. */
    119         int flags;              /**< Flags related to the memory represented by the address space area. */
    120         int attributes;         /**< Attributes related to the address space area itself. */
    121         count_t pages;          /**< Size of this area in multiples of PAGE_SIZE. */
    122         uintptr_t base;         /**< Base address of this area. */
    123         btree_t used_space;     /**< Map of used space. */
    124         share_info_t *sh_info;  /**< If the address space area has been shared, this pointer will
    125                                      reference the share info structure. */
    126         struct mem_backend *backend;    /**< Memory backend backing this address space area. */
     168        /** Containing address space. */
     169        as_t *as;               
     170        /** Flags related to the memory represented by the address space area. */
     171        int flags;
     172        /** Attributes related to the address space area itself. */
     173        int attributes;
     174        /** Size of this area in multiples of PAGE_SIZE. */
     175        count_t pages;
     176        /** Base address of this area. */
     177        uintptr_t base;
     178        /** Map of used space. */
     179        btree_t used_space;
     180
     181        /**
     182         * If the address space area has been shared, this pointer will reference
     183         * the share info structure.
     184         */
     185        share_info_t *sh_info;
     186
     187        /** Memory backend backing this address space area. */
     188        struct mem_backend *backend;
    127189
    128190        /** Data to be used by the backend. */
     
    147209extern as_t *as_create(int flags);
    148210extern void as_destroy(as_t *as);
    149 extern void as_switch(as_t *old, as_t *replace);
     211extern void as_switch(as_t *old_as, as_t *new_as);
    150212extern int as_page_fault(uintptr_t page, pf_access_t access, istate_t *istate);
    151213
    152 extern as_area_t *as_area_create(as_t *as, int flags, size_t size, uintptr_t base, int attrs,
    153         mem_backend_t *backend, mem_backend_data_t *backend_data);
     214extern as_area_t *as_area_create(as_t *as, int flags, size_t size,
     215    uintptr_t base, int attrs, mem_backend_t *backend,
     216    mem_backend_data_t *backend_data);
    154217extern int as_area_destroy(as_t *as, uintptr_t address);       
    155218extern int as_area_resize(as_t *as, uintptr_t address, size_t size, int flags);
    156219int as_area_share(as_t *src_as, uintptr_t src_base, size_t acc_size,
    157                   as_t *dst_as, uintptr_t dst_base, int dst_flags_mask);
     220    as_t *dst_as, uintptr_t dst_base, int dst_flags_mask);
    158221
    159222extern int as_area_get_flags(as_area_t *area);
  • kernel/generic/include/mm/buddy.h

    rfa8e7d2 r80bcaed  
    4545/** Buddy system operations to be implemented by each implementation. */
    4646typedef struct {
    47         /** Return pointer to left-side or right-side buddy for block passed as
    48           * argument. */
     47        /**
     48         * Return pointer to left-side or right-side buddy for block passed as
     49         * argument.
     50         */
    4951        link_t *(* find_buddy)(struct buddy_system *, link_t *);
    50         /** Bisect the block passed as argument and return pointer to the new
    51           * right-side buddy. */
     52        /**
     53         * Bisect the block passed as argument and return pointer to the new
     54         * right-side buddy.
     55         */
    5256        link_t *(* bisect)(struct buddy_system *, link_t *);
    5357        /** Coalesce two buddies into a bigger block. */
     
    7680
    7781extern void buddy_system_create(buddy_system_t *b, uint8_t max_order,
    78         buddy_system_operations_t *op, void *data);
     82    buddy_system_operations_t *op, void *data);
    7983extern link_t *buddy_system_alloc(buddy_system_t *b, uint8_t i);
    8084extern bool buddy_system_can_alloc(buddy_system_t *b, uint8_t order);
  • kernel/generic/include/mm/mm.h

    rfa8e7d2 r80bcaed  
    4747#define PAGE_GLOBAL_SHIFT               6
    4848
    49 #define PAGE_NOT_CACHEABLE      (0 << PAGE_CACHEABLE_SHIFT)
    50 #define PAGE_CACHEABLE          (1 << PAGE_CACHEABLE_SHIFT)
     49#define PAGE_NOT_CACHEABLE              (0 << PAGE_CACHEABLE_SHIFT)
     50#define PAGE_CACHEABLE                  (1 << PAGE_CACHEABLE_SHIFT)
    5151
    52 #define PAGE_PRESENT            (0 << PAGE_PRESENT_SHIFT)
    53 #define PAGE_NOT_PRESENT        (1 << PAGE_PRESENT_SHIFT)
     52#define PAGE_PRESENT                    (0 << PAGE_PRESENT_SHIFT)
     53#define PAGE_NOT_PRESENT                (1 << PAGE_PRESENT_SHIFT)
    5454
    55 #define PAGE_USER               (1 << PAGE_USER_SHIFT)
    56 #define PAGE_KERNEL             (0 << PAGE_USER_SHIFT)
     55#define PAGE_USER                       (1 << PAGE_USER_SHIFT)
     56#define PAGE_KERNEL                     (0 << PAGE_USER_SHIFT)
    5757
    58 #define PAGE_READ               (1 << PAGE_READ_SHIFT)
    59 #define PAGE_WRITE              (1 << PAGE_WRITE_SHIFT)
    60 #define PAGE_EXEC               (1 << PAGE_EXEC_SHIFT)
     58#define PAGE_READ                       (1 << PAGE_READ_SHIFT)
     59#define PAGE_WRITE                      (1 << PAGE_WRITE_SHIFT)
     60#define PAGE_EXEC                       (1 << PAGE_EXEC_SHIFT)
    6161
    62 #define PAGE_GLOBAL             (1 << PAGE_GLOBAL_SHIFT)
     62#define PAGE_GLOBAL                     (1 << PAGE_GLOBAL_SHIFT)
    6363
    6464#endif
  • kernel/generic/include/mm/page.h

    rfa8e7d2 r80bcaed  
    5959extern void page_table_unlock(as_t *as, bool unlock);
    6060extern void page_mapping_insert(as_t *as, uintptr_t page, uintptr_t frame,
    61         int flags);
     61    int flags);
    6262extern void page_mapping_remove(as_t *as, uintptr_t page);
    6363extern pte_t *page_mapping_find(as_t *as, uintptr_t page);
  • kernel/generic/include/mm/slab.h

    rfa8e7d2 r80bcaed  
    5757
    5858/* slab_reclaim constants */
    59 #define SLAB_RECLAIM_ALL  0x1 /**< Reclaim all possible memory, because we are in memory stress */
     59
     60/** Reclaim all possible memory, because we are in memory stress */
     61#define SLAB_RECLAIM_ALL  0x1
    6062
    6163/* cache_create flags */
    62 #define SLAB_CACHE_NOMAGAZINE 0x1 /**< Do not use per-cpu cache */
    63 #define SLAB_CACHE_SLINSIDE   0x2 /**< Have control structure inside SLAB */
    64 #define SLAB_CACHE_MAGDEFERRED (0x4 | SLAB_CACHE_NOMAGAZINE) /**< We add magazine cache later, if we have this flag */
     64
     65/** Do not use per-cpu cache */
     66#define SLAB_CACHE_NOMAGAZINE 0x1
     67/** Have control structure inside SLAB */
     68#define SLAB_CACHE_SLINSIDE   0x2
     69/** We add magazine cache later, if we have this flag */
     70#define SLAB_CACHE_MAGDEFERRED (0x4 | SLAB_CACHE_NOMAGAZINE)
    6571
    6672typedef struct {
     
    8288
    8389        link_t link;
     90
    8491        /* Configuration */
    85         size_t size;            /**< Size of slab position - align_up(sizeof(obj)) */
     92        /** Size of slab position - align_up(sizeof(obj)) */
     93        size_t size;
     94
    8695        int (*constructor)(void *obj, int kmflag);
    8796        int (*destructor)(void *obj);
    88         int flags;              /**< Flags changing behaviour of cache */
     97
     98        /** Flags changing behaviour of cache */
     99        int flags;
    89100
    90101        /* Computed values */
     
    96107        atomic_t allocated_objs;
    97108        atomic_t cached_objs;
    98         atomic_t magazine_counter; /**< How many magazines in magazines list */
     109        /** How many magazines in magazines list */
     110        atomic_t magazine_counter;
    99111
    100112        /* Slabs */
     
    110122} slab_cache_t;
    111123
    112 extern slab_cache_t * slab_cache_create(char *name,
    113                                         size_t size,
    114                                         size_t align,
    115                                         int (*constructor)(void *obj, int kmflag),
    116                                         int (*destructor)(void *obj),
    117                                         int flags);
     124extern slab_cache_t * slab_cache_create(char *name, size_t size, size_t align,
     125    int (*constructor)(void *obj, int kmflag), int (*destructor)(void *obj),
     126    int flags);
    118127extern void slab_cache_destroy(slab_cache_t *cache);
    119128
     
    122131extern count_t slab_reclaim(int flags);
    123132
    124 /** Initialize slab subsytem */
     133/* slab subsytem initialization */
    125134extern void slab_cache_init(void);
    126135extern void slab_enable_cpucache(void);
  • kernel/generic/include/mm/tlb.h

    rfa8e7d2 r80bcaed  
    4040
    4141/**
    42  * Number of TLB shootdown messages that can be queued in processor
    43  * tlb_messages queue.
     42 * Number of TLB shootdown messages that can be queued in processor tlb_messages
     43 * queue.
    4444 */
    4545#define TLB_MESSAGE_QUEUE_LEN   10
     
    4747/** Type of TLB shootdown message. */
    4848typedef enum {
    49         TLB_INVL_INVALID = 0,           /**< Invalid type. */
    50         TLB_INVL_ALL,                   /**< Invalidate all entries in TLB. */
    51         TLB_INVL_ASID,                  /**< Invalidate all entries belonging to one address space. */
    52         TLB_INVL_PAGES                  /**< Invalidate specified page range belonging to one address space. */
     49        /** Invalid type. */
     50        TLB_INVL_INVALID = 0,
     51        /** Invalidate all entries in TLB. */
     52        TLB_INVL_ALL,
     53        /** Invalidate all entries belonging to one address space. */
     54        TLB_INVL_ASID,
     55        /** Invalidate specified page range belonging to one address space. */
     56        TLB_INVL_PAGES
    5357} tlb_invalidate_type_t;
    5458
     
    6468
    6569#ifdef CONFIG_SMP
    66 extern void tlb_shootdown_start(tlb_invalidate_type_t type, asid_t asid, uintptr_t page, count_t count);
     70extern void tlb_shootdown_start(tlb_invalidate_type_t type, asid_t asid,
     71    uintptr_t page, count_t count);
    6772extern void tlb_shootdown_finalize(void);
    6873extern void tlb_shootdown_ipi_recv(void);
    6974#else
    70 #  define tlb_shootdown_start(w, x, y, z)
    71 #  define tlb_shootdown_finalize()
    72 #  define tlb_shootdown_ipi_recv()
     75#define tlb_shootdown_start(w, x, y, z)
     76#define tlb_shootdown_finalize()
     77#define tlb_shootdown_ipi_recv()
    7378#endif /* CONFIG_SMP */
    7479
Note: See TracChangeset for help on using the changeset viewer.