Changeset 4512d7e in mainline for arch/mips32/src/mm/asid.c
- Timestamp:
- 2006-01-19T22:17:47Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 6461d67c
- Parents:
- 64c44e8
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/mips32/src/mm/asid.c
r64c44e8 r4512d7e 29 29 30 30 #include <arch/mm/asid.h> 31 #include <synch/spinlock.h>32 #include <arch.h>33 #include <debug.h>34 31 #include <typedefs.h> 35 32 36 SPINLOCK_INITIALIZE(asid_usage_lock);37 static count_t asid_usage[ASIDS]; /**< Usage tracking array for ASIDs */38 39 /** Get ASID40 *41 * Get the least used ASID.42 *43 * @return ASID44 */45 asid_t asid_get(void)46 {47 ipl_t ipl;48 int i, j;49 count_t min;50 51 min = (unsigned) -1;52 53 ipl = interrupts_disable();54 spinlock_lock(&asid_usage_lock);55 56 for (i = ASID_START, j = ASID_START; 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[j]++;66 67 spinlock_unlock(&asid_usage_lock);68 interrupts_restore(ipl);69 70 return i;71 }72 73 /** Release ASID74 *75 * Release ASID by decrementing its usage count.76 *77 * @param asid ASID.78 */79 void asid_put(asid_t asid)80 {81 ipl_t ipl;82 83 ipl = interrupts_disable();84 spinlock_lock(&asid_usage_lock);85 86 ASSERT(asid != ASID_INVALID);87 88 ASSERT(asid_usage[asid] > 0);89 asid_usage[asid]--;90 91 spinlock_unlock(&asid_usage_lock);92 interrupts_restore(ipl);93 }94 95 /** Find out whether ASID is used by more address spaces96 *97 * Find out whether ASID is used by more address spaces.98 *99 * @param asid ASID in question.100 *101 * @return True if 'asid' is used by more address spaces, false otherwise.102 */103 bool asid_has_conflicts(asid_t asid)104 {105 bool has_conflicts = false;106 ipl_t ipl;107 108 ASSERT(asid != ASID_INVALID);109 110 ipl = interrupts_disable();111 spinlock_lock(&asid_usage_lock);112 113 if (asid_usage[asid] > 1)114 has_conflicts = true;115 116 spinlock_unlock(&asid_usage_lock);117 interrupts_restore(ipl);118 119 return has_conflicts;120 }
Note:
See TracChangeset
for help on using the changeset viewer.