source: mainline/arch/mips32/src/mm/asid.c@ bca1b47

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since bca1b47 was 1084a784, checked in by Jakub Jermar <jakub@…>, 20 years ago

mips32 memory management work.
TLB Refill Exception implemented (passed basic testing).
Remove bit g from struct entry_hi.
Add generic find_mapping().
Add asid to vm_t type, define asid_t to hide architecture specific differences.
Implement ASID allocation for mips32, dummy for other architectures.
Add THE→vm (a.k.a. VM).
Add vm_install_arch().
Move pte_t definition to arch/types.h on each architecture.
Fix PTL manipulating functions on mips32 to shift pfn by 12 instead of by 14.
Fix tlb_init_arch() to initialize all entries.

Other.
Remove unnecessary header files from arch.h
Add missing headers here and there.
Remove two unnecessary ld flags from mips32 makefile.

  • Property mode set to 100644
File size: 2.4 KB
Line 
1/*
2 * Copyright (C) 2005 Martin Decky
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#include <arch/mm/asid.h>
30#include <synch/spinlock.h>
31#include <arch.h>
32#include <debug.h>
33
34#define ASIDS 256
35
36static spinlock_t asid_usage_lock;
37static count_t asid_usage[ASIDS]; /**< Usage tracking array for ASIDs */
38
39/** Get ASID
40 *
41 * Get the least used ASID.
42 *
43 * @return ASID
44 */
45asid_t asid_get(void)
46{
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;
71}
72
73/** Release ASID
74 *
75 * Release ASID by decrementing its usage count.
76 *
77 * @param asid ASID.
78 */
79void asid_put(asid_t asid)
80{
81 pri_t pri;
82
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);
91}
Note: See TracBrowser for help on using the repository browser.