Changeset 4512d7e in mainline for generic/include/mm


Ignore:
Timestamp:
2006-01-19T22:17:47Z (20 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6461d67c
Parents:
64c44e8
Message:

New ASID management subsystem (initial work, more is required).
Some TLB invalidation changes.

Location:
generic/include/mm
Files:
3 edited

Legend:

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

    r64c44e8 r4512d7e  
    4949#define UDATA_ADDRESS   UDATA_ADDRESS_ARCH
    5050
     51#define AS_KERNEL       (1<<0)          /**< Kernel address space. */
     52
    5153enum as_area_type {
    5254        AS_AREA_TEXT = 1, AS_AREA_DATA, AS_AREA_STACK
     
    6264        link_t link;
    6365        as_area_type_t type;
    64         size_t size;            /**< Size of this area. */
     66        size_t size;            /**< Size of this area in multiples of PAGE_SIZE. */
    6567        __address base;         /**< Base address of this area. */
    6668        index_t *mapping;       /**< Map of physical frame numbers mapped to virtual page numbers in this area. */
     
    7577 */
    7678struct as {
     79        /** Protected by asidlock. Must be acquired before as-> lock. */
     80        link_t as_with_asid_link;
     81
    7782        SPINLOCK_DECLARE(lock);
    7883        link_t as_area_head;
     
    8186};
    8287
    83 extern as_t * as_create(pte_t *ptl0);
     88extern as_t * as_create(pte_t *ptl0, int flags);
    8489extern as_area_t *as_area_create(as_t *as, as_area_type_t type, size_t size, __address base);
    8590extern void as_area_set_mapping(as_area_t *a, index_t vpn, index_t pfn);
     
    8792extern void as_install(as_t *m);
    8893
    89 /*
    90  * Each architecture should implement this function.
    91  * Its main purpose is to do TLB purges according
    92  * to architecture's requirements. Note that
    93  * some architectures invalidate their TLB automatically
    94  * on hardware address space switch (e.g. ia32 and
    95  * amd64).
    96  */
     94/* Interface to be implemented by architectures. */
    9795#ifndef as_install_arch
    9896extern void as_install_arch(as_t *as);
  • generic/include/mm/asid.h

    r64c44e8 r4512d7e  
    2727 */
    2828
     29/*
     30 * This is generic interface for managing
     31 * Address Space IDentifiers (ASIDs).
     32 */
     33
    2934#ifndef __ASID_H__
    3035#define __ASID_H__
    3136
     37#include <arch/mm/asid.h>
     38#include <typedefs.h>
     39
    3240#define ASID_KERNEL     0
     41#define ASID_INVALID    1
     42#define ASID_START      2
     43#define ASID_MAX        ASID_MAX_ARCH
     44
     45#define ASIDS_ALLOCABLE ((ASID_MAX+1)-ASID_START)
     46
     47extern spinlock_t asidlock;
     48extern link_t as_with_asid_head;
     49
     50extern asid_t asid_get(void);
     51extern void asid_put(asid_t asid);
     52
     53#ifndef asid_install
     54extern void asid_install(as_t *as);
     55#endif /* !def asid_install */
     56
     57#define asid_find_free()        ASID_START
     58#define asid_put_arch(x)
    3359
    3460#endif
  • generic/include/mm/tlb.h

    r64c44e8 r4512d7e  
    3232#include <arch/mm/asid.h>
    3333#include <arch/types.h>
    34 
    35 extern void tlb_init(void);
    36 
    37 #ifdef CONFIG_SMP
    38 extern void tlb_shootdown_start(void);
    39 extern void tlb_shootdown_finalize(void);
    40 extern void tlb_shootdown_ipi_recv(void);
    41 #else
    42 #  define tlb_shootdown_start() ;
    43 #  define tlb_shootdown_finalize()      ;
    44 #  define tlb_shootdown_ipi_recv() ;
    45 #endif /* CONFIG_SMP */
     34#include <typedefs.h>
    4635
    4736/** Type of TLB shootdown message. */
     
    5039        TLB_INVL_ALL,                   /**< Invalidate all entries in TLB. */
    5140        TLB_INVL_ASID,                  /**< Invalidate all entries belonging to one address space. */
    52         TLB_INVL_PAGE                   /**< Invalidate one entry for specified page. */
     41        TLB_INVL_PAGES                  /**< Invalidate specified page range belonging to one address space. */
    5342};
    5443
     
    6453typedef struct tlb_shootdown_msg tlb_shootdown_msg_t;
    6554
     55extern void tlb_init(void);
     56
     57#ifdef CONFIG_SMP
     58extern void tlb_shootdown_start(tlb_invalidate_type_t type, asid_t asid, __address page, count_t cnt);
     59extern void tlb_shootdown_finalize(void);
     60extern void tlb_shootdown_ipi_recv(void);
     61#else
     62#  define tlb_shootdown_start(w, x, y, z)
     63#  define tlb_shootdown_finalize()
     64#  define tlb_shootdown_ipi_recv()
     65#endif /* CONFIG_SMP */
     66
     67
    6668/* Export TLB interface that each architecture must implement. */
    6769extern void tlb_arch_init(void);
    6870extern void tlb_print(void);
    69 extern void tlb_invalidate(asid_t asid);
    7071extern void tlb_shootdown_ipi_send(void);
    7172
    7273extern void tlb_invalidate_all(void);
    7374extern void tlb_invalidate_asid(asid_t asid);
    74 extern void tlb_invalidate_page(asid_t asid, __address page);
    75 
     75extern void tlb_invalidate_pages(asid_t asid, __address page, count_t cnt);
    7676#endif
Note: See TracChangeset for help on using the changeset viewer.