Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/mm/as.c

    r336db295 r98000fb  
    19201920}
    19211921
    1922 /** Get list of adress space areas.
    1923  *
    1924  * @param as            Address space.
    1925  * @param obuf          Place to save pointer to returned buffer.
    1926  * @param osize         Place to save size of returned buffer.
    1927  */
    1928 void as_get_area_info(as_t *as, as_area_info_t **obuf, size_t *osize)
    1929 {
    1930         ipl_t ipl;
    1931         size_t area_cnt, area_idx, i;
    1932         link_t *cur;
    1933 
    1934         as_area_info_t *info;
    1935         size_t isize;
    1936 
    1937         ipl = interrupts_disable();
    1938         mutex_lock(&as->lock);
    1939 
    1940         /* First pass, count number of areas. */
    1941 
    1942         area_cnt = 0;
    1943 
    1944         for (cur = as->as_area_btree.leaf_head.next;
    1945             cur != &as->as_area_btree.leaf_head; cur = cur->next) {
    1946                 btree_node_t *node;
    1947 
    1948                 node = list_get_instance(cur, btree_node_t, leaf_link);
    1949                 area_cnt += node->keys;
    1950         }
    1951 
    1952         isize = area_cnt * sizeof(as_area_info_t);
    1953         info = malloc(isize, 0);
    1954 
    1955         /* Second pass, record data. */
    1956 
    1957         area_idx = 0;
    1958 
    1959         for (cur = as->as_area_btree.leaf_head.next;
    1960             cur != &as->as_area_btree.leaf_head; cur = cur->next) {
    1961                 btree_node_t *node;
    1962 
    1963                 node = list_get_instance(cur, btree_node_t, leaf_link);
    1964 
    1965                 for (i = 0; i < node->keys; i++) {
    1966                         as_area_t *area = node->value[i];
    1967 
    1968                         ASSERT(area_idx < area_cnt);
    1969                         mutex_lock(&area->lock);
    1970 
    1971                         info[area_idx].start_addr = area->base;
    1972                         info[area_idx].size = FRAMES2SIZE(area->pages);
    1973                         info[area_idx].flags = area->flags;
    1974                         ++area_idx;
    1975 
    1976                         mutex_unlock(&area->lock);
    1977                 }
    1978         }
    1979 
    1980         mutex_unlock(&as->lock);
    1981         interrupts_restore(ipl);
    1982 
    1983         *obuf = info;
    1984         *osize = isize;
    1985 }
    1986 
    1987 
    19881922/** Print out information about address space.
    19891923 *
Note: See TracChangeset for help on using the changeset viewer.