Changeset c7ec94a4 in mainline for genarch/include/mm/page_ht.h


Ignore:
Timestamp:
2006-02-06T14:18:28Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f5935ed
Parents:
214f5bb
Message:

Page hash table architectures now use generic hash table to manage
mappings.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • genarch/include/mm/page_ht.h

    r214f5bb rc7ec94a4  
    2929/*
    3030 * This is the generic page hash table interface.
    31  * Architectures that use single page hash table for
    32  * storing page translations must implement it.
    3331 */
    3432
     
    3836#include <mm/page.h>
    3937#include <typedefs.h>
     38#include <arch/types.h>
     39#include <adt/list.h>
     40#include <adt/hash_table.h>
    4041
    41 /** Page hash table size. */
    42 #define HT_WIDTH                        HT_WIDTH_ARCH
    43 #define HT_SIZE                         (1<<HT_WIDTH)
    44 #define HT_ENTRIES                      (HT_SIZE/sizeof(pte_t))
     42#define PAGE_HT_KEYS    2
     43#define KEY_AS          0
     44#define KEY_PAGE        1
    4545
    46 /** Hash function.
    47  *
    48  * @param page Virtual address. Only vpn bits will be used.
    49  * @param asid Address space identifier.
    50  *
    51  * @return Pointer to hash table typed pte_t *.
    52  */
    53 #define HT_HASH(page, asid)             HT_HASH_ARCH(page, asid)
     46#define PAGE_HT_ENTRIES_BITS    13
     47#define PAGE_HT_ENTRIES         (1<<PAGE_HT_ENTRIES_BITS)
    5448
    55 /** Compare PTE with page and asid.
    56  *
    57  * @param page Virtual address. Only vpn bits will be used.
    58  * @param asid Address space identifier.
    59  * @param t PTE.
    60  *
    61  * @return 1 on match, 0 otherwise.
    62  */
    63 #define HT_COMPARE(page, asid, t)       HT_COMPARE_ARCH(page, asid, t)
    64 
    65 /** Identify empty page hash table slots.
    66  *
    67  * @param t Pointer ro hash table typed pte_t *.
    68  *
    69  * @return 1 if the slot is empty, 0 otherwise.
    70  */
    71 #define HT_SLOT_EMPTY(t)                HT_SLOT_EMPTY_ARCH(t)
    72 
    73 /** Invalidate/empty page hash table slot.
    74  *
    75  * @param t Address of the slot to be invalidated.
    76  */
    77 #define HT_INVALIDATE_SLOT(t)           HT_INVALIDATE_SLOT_ARCH(t)
    78 
    79 /** Return next record in collision chain.
    80  *
    81  * @param t PTE.
    82  *
    83  * @return Successor of PTE or NULL.
    84  */
    85 #define HT_GET_NEXT(t)                  HT_GET_NEXT_ARCH(t)
    86 
    87 /** Set successor in collision chain.
    88  *
    89  * @param t PTE.
    90  * @param s Successor or NULL.
    91  */
    92 #define HT_SET_NEXT(t, s)               HT_SET_NEXT_ARCH(t, s)
    93 
    94 /** Set page hash table record.
    95  *
    96  * @param t PTE.
    97  * @param page Virtual address. Only vpn bits will be used.
    98  * @param asid Address space identifier.
    99  * @param frame Physical address. Only pfn bits will be used.
    100  * @param flags Flags. See mm/page.h.
    101  */
    102 #define HT_SET_RECORD(t, page, asid, frame, flags)      HT_SET_RECORD_ARCH(t, page, asid, frame, flags)
     49struct pte {
     50        link_t link;            /**< Page hash table link. */
     51        as_t *as;               /**< Address space. */
     52        __address page;         /**< Virtual memory page. */
     53        __address frame;        /**< Physical memory frame. */
     54        int flags;
     55        unsigned a : 1;         /**< Accessed. */
     56        unsigned d : 1;         /**< Dirty. */
     57        unsigned p : 1;         /**< Present. */
     58};
    10359
    10460extern page_operations_t page_ht_operations;
    10561extern spinlock_t page_ht_lock;
    10662
    107 extern pte_t *page_ht;
    108 
    109 extern void ht_invalidate_all(void);
     63extern hash_table_t page_ht;
     64extern hash_table_operations_t ht_operations;
    11065
    11166#endif
Note: See TracChangeset for help on using the changeset viewer.