Changeset 371bd7d in mainline for kernel/generic/src/mm/as.c
- Timestamp:
- 2010-03-27T09:22:17Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 36a75a2
- Parents:
- cd82bb1 (diff), eaf22d4 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - File:
-
- 1 edited
-
kernel/generic/src/mm/as.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/mm/as.c
rcd82bb1 r371bd7d 75 75 #include <config.h> 76 76 #include <align.h> 77 #include < arch/types.h>77 #include <typedefs.h> 78 78 #include <syscall/copy.h> 79 79 #include <arch/interrupt.h> … … 784 784 { 785 785 as_area_t *area; 786 uintptr_t base;787 786 link_t *cur; 788 787 ipl_t ipl; … … 813 812 return ENOTSUP; 814 813 } 815 816 base = area->base;817 814 818 815 /* … … 952 949 if (!THREAD) 953 950 return AS_PF_FAULT; 954 955 ASSERT(AS); 956 951 952 if (!AS) 953 return AS_PF_FAULT; 954 957 955 mutex_lock(&AS->lock); 958 area = find_area_and_lock(AS, page); 956 area = find_area_and_lock(AS, page); 959 957 if (!area) { 960 958 /* … … 1920 1918 } 1921 1919 1920 /** Get list of adress space areas. 1921 * 1922 * @param as Address space. 1923 * @param obuf Place to save pointer to returned buffer. 1924 * @param osize Place to save size of returned buffer. 1925 */ 1926 void as_get_area_info(as_t *as, as_area_info_t **obuf, size_t *osize) 1927 { 1928 ipl_t ipl; 1929 size_t area_cnt, area_idx, i; 1930 link_t *cur; 1931 1932 as_area_info_t *info; 1933 size_t isize; 1934 1935 ipl = interrupts_disable(); 1936 mutex_lock(&as->lock); 1937 1938 /* First pass, count number of areas. */ 1939 1940 area_cnt = 0; 1941 1942 for (cur = as->as_area_btree.leaf_head.next; 1943 cur != &as->as_area_btree.leaf_head; cur = cur->next) { 1944 btree_node_t *node; 1945 1946 node = list_get_instance(cur, btree_node_t, leaf_link); 1947 area_cnt += node->keys; 1948 } 1949 1950 isize = area_cnt * sizeof(as_area_info_t); 1951 info = malloc(isize, 0); 1952 1953 /* Second pass, record data. */ 1954 1955 area_idx = 0; 1956 1957 for (cur = as->as_area_btree.leaf_head.next; 1958 cur != &as->as_area_btree.leaf_head; cur = cur->next) { 1959 btree_node_t *node; 1960 1961 node = list_get_instance(cur, btree_node_t, leaf_link); 1962 1963 for (i = 0; i < node->keys; i++) { 1964 as_area_t *area = node->value[i]; 1965 1966 ASSERT(area_idx < area_cnt); 1967 mutex_lock(&area->lock); 1968 1969 info[area_idx].start_addr = area->base; 1970 info[area_idx].size = FRAMES2SIZE(area->pages); 1971 info[area_idx].flags = area->flags; 1972 ++area_idx; 1973 1974 mutex_unlock(&area->lock); 1975 } 1976 } 1977 1978 mutex_unlock(&as->lock); 1979 interrupts_restore(ipl); 1980 1981 *obuf = info; 1982 *osize = isize; 1983 } 1984 1985 1922 1986 /** Print out information about address space. 1923 1987 *
Note:
See TracChangeset
for help on using the changeset viewer.
