Changeset 1084a784 in mainline for arch/mips32/src/mm/asid.c
- Timestamp:
- 2005-10-04T22:09:41Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 342de62
- Parents:
- 8e3f47b3
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/mips32/src/mm/asid.c
r8e3f47b3 r1084a784 27 27 */ 28 28 29 #include <arch/mm/asid.h> 30 #include <synch/spinlock.h> 29 31 #include <arch.h> 30 #include < memstr.h>32 #include <debug.h> 31 33 32 /**< Array of threads that have currently some ASID assigned, 33 NULL means no thread have ASID with number of that index assigned */ 34 struct thread * asids[256]; 35 int last_asid; /**< The number of last assigned ASID */ 36 int asid_bitmap[32]; /**< Bitmap of ASIDs currently in TLB */ 34 #define ASIDS 256 37 35 36 static spinlock_t asid_usage_lock; 37 static count_t asid_usage[ASIDS]; /**< Usage tracking array for ASIDs */ 38 38 39 /** Cleanup asid_bitmap39 /** Get ASID 40 40 * 41 * Get the least used ASID. 42 * 43 * @return ASID 41 44 */ 42 void asid_bitmap_reset(void)45 asid_t asid_get(void) 43 46 { 44 memsetb(asid_bitmap, sizeof(asid_bitmap), 0); 47 pri_t pri; 48 int i, j; 49 count_t min; 50 51 min = (unsigned) -1; 52 53 pri = cpu_priority_high(); 54 spinlock_lock(&asid_usage_lock); 55 56 for (i=0, j = 0; (i<ASIDS); i++) { 57 if (asid_usage[i] < min) { 58 j = i; 59 min = asid_usage[i]; 60 if (!min) 61 break; 62 } 63 } 64 65 asid_usage[i]++; 66 67 spinlock_unlock(&asid_usage_lock); 68 cpu_priority_restore(pri); 69 70 return i; 45 71 } 46 72 73 /** Release ASID 74 * 75 * Release ASID by decrementing its usage count. 76 * 77 * @param asid ASID. 78 */ 79 void asid_put(asid_t asid) 80 { 81 pri_t pri; 47 82 48 /** Initialize manipulating with ASIDs 49 * 50 */ 51 void init_asids(void) 52 { 53 memsetb(asids, sizeof(asids), 0); 54 asid_bitmap_reset();55 last_asid = 0;83 pri = cpu_priority_high(); 84 spinlock_lock(&asid_usage_lock); 85 86 ASSERT(asid_usage[asid] > 0); 87 asid_usage[asid]--; 88 89 spinlock_unlock(&asid_usage_lock); 90 cpu_priority_restore(pri); 56 91 }
Note:
See TracChangeset
for help on using the changeset viewer.