Changeset 0882a9a in mainline for arch/mips32/src/mm/tlb.c


Ignore:
Timestamp:
2006-02-10T16:11:14Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ecbdc724
Parents:
d0a0f12
Message:

Make use of one unused bit in PTE formats of amd64, ia32 and mips32 to store 1 in valid mappings.
This helps to distinguish valid entries from not present entries with 0 content (i.e. not present
entries with PFN 0 and other bits cleared).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • arch/mips32/src/mm/tlb.c

    rd0a0f12 r0882a9a  
    4646static pte_t *find_mapping_and_check(__address badvaddr);
    4747
    48 static void prepare_entry_lo(entry_lo_t *lo, bool g, bool v, bool d, int c, __address pfn);
     48static void prepare_entry_lo(entry_lo_t *lo, bool g, bool v, bool d, bool cacheable, __address pfn);
    4949static void prepare_entry_hi(entry_hi_t *hi, asid_t asid, __address addr);
    5050
     
    105105
    106106        prepare_entry_hi(&hi, AS->asid, badvaddr);
    107         prepare_entry_lo(&lo, pte->lo.g, pte->lo.v, pte->lo.d, pte->lo.c, pte->lo.pfn);
     107        prepare_entry_lo(&lo, pte->g, pte->p, pte->d, pte->cacheable, pte->pfn);
    108108
    109109        /*
     
    179179        pte->a = 1;
    180180
    181         prepare_entry_lo(&lo, pte->lo.g, pte->lo.v, pte->lo.d, pte->lo.c, pte->lo.pfn);
     181        prepare_entry_lo(&lo, pte->g, pte->p, pte->d, pte->cacheable, pte->pfn);
    182182
    183183        /*
     
    253253         */
    254254        pte->a = 1;
    255         pte->lo.d = 1;
    256 
    257         prepare_entry_lo(&lo, pte->lo.g, pte->lo.v, pte->w, pte->lo.c, pte->lo.pfn);
     255        pte->d = 1;
     256
     257        prepare_entry_lo(&lo, pte->g, pte->p, pte->w, pte->cacheable, pte->pfn);
    258258
    259259        /*
     
    338338         */     
    339339        pte = page_mapping_find(AS, badvaddr);
    340         if (pte && pte->lo.v) {
     340        if (pte && pte->p) {
    341341                /*
    342342                 * Mapping found in page tables.
     
    355355                         */
    356356                        pte = page_mapping_find(AS, badvaddr);
    357                         ASSERT(pte && pte->lo.v);
     357                        ASSERT(pte && pte->p);
    358358                        return pte;
    359359                }
     
    371371         * Handler cannot succeed if the mapping is marked as invalid.
    372372         */
    373         if (!pte->lo.v) {
     373        if (!pte->p) {
    374374                printf("Invalid mapping.\n");
    375375                return NULL;
     
    379379}
    380380
    381 void prepare_entry_lo(entry_lo_t *lo, bool g, bool v, bool d, int c, __address pfn)
     381void prepare_entry_lo(entry_lo_t *lo, bool g, bool v, bool d, bool cacheable, __address pfn)
    382382{
    383383        lo->value = 0;
     
    385385        lo->v = v;
    386386        lo->d = d;
    387         lo->c = c;
     387        lo->c = cacheable ? PAGE_CACHEABLE_EXC_WRITE : PAGE_UNCACHED;
    388388        lo->pfn = pfn;
    389389}
Note: See TracChangeset for help on using the changeset viewer.