Changeset 7533adc in rtems-libbsd


Ignore:
Timestamp:
Nov 10, 2016, 1:58:22 PM (3 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
5283630d2c9d40deb0183696d278e02644fe4326, bc2ba9a9cdc7381c2a4f2ae6ee303be636f31368
Children:
91fb6e3
Parents:
5ede682
git-author:
Sebastian Huber <sebastian.huber@…> (11/10/16 13:58:22)
git-committer:
Sebastian Huber <sebastian.huber@…> (10/20/17 12:59:54)
Message:

rtems-kernel-page: Add used pages counter

File:
1 edited

Legend:

Unmodified
Added
Removed
  • rtemsbsd/rtems/rtems-kernel-page.c

    r5ede682 r7533adc  
    5959uintptr_t rtems_bsd_page_area_begin;
    6060
    61 static rtems_rbheap_control page_heap;
    62 
    63 struct mtx page_heap_mtx;
     61static struct {
     62        struct mtx mtx;
     63        rtems_rbheap_control heap;
     64        size_t used;
     65} page_alloc;
    6466
    6567void *
     
    6870        void *addr;
    6971
    70         mtx_lock(&page_heap_mtx);
     72        mtx_lock(&page_alloc.mtx);
    7173
    72         addr = rtems_rbheap_allocate(&page_heap, size_in_bytes);
     74        addr = rtems_rbheap_allocate(&page_alloc.heap, size_in_bytes);
    7375        if (addr == NULL && wait) {
    7476                int i;
    7577
    7678                for (i = 0; i < 8; i++) {
    77                         mtx_unlock(&page_heap_mtx);
     79                        mtx_unlock(&page_alloc.mtx);
    7880                        uma_reclaim();
    79                         mtx_lock(&page_heap_mtx);
     81                        mtx_lock(&page_alloc.mtx);
    8082
    81                         addr = rtems_rbheap_allocate(&page_heap, size_in_bytes);
     83                        addr = rtems_rbheap_allocate(&page_alloc.heap,
     84                            size_in_bytes);
    8285                        if (addr != NULL)
    8386                                break;
    8487
    85                         msleep(&page_heap, &page_heap_mtx, 0,
     88                        msleep(&page_alloc.heap, &page_alloc.mtx, 0,
    8689                            "page alloc", (hz / 4) * (i + 1));
    8790                }
     
    9295        }
    9396
    94         mtx_unlock(&page_heap_mtx);
     97        page_alloc.used += (addr != NULL) ? 1 : 0;
     98        mtx_unlock(&page_alloc.mtx);
    9599
    96100#ifdef INVARIANTS
     
    108112rtems_bsd_page_free(void *addr)
    109113{
    110         mtx_lock(&page_heap_mtx);
    111         rtems_rbheap_free(&page_heap, addr);
    112         wakeup(&page_heap);
    113         mtx_unlock(&page_heap_mtx);
     114
     115        mtx_lock(&page_alloc.mtx);
     116        --page_alloc.used;
     117        rtems_rbheap_free(&page_alloc.heap, addr);
     118        wakeup(&page_alloc.heap);
     119        mtx_unlock(&page_alloc.mtx);
    114120}
    115121
     
    125131        uintptr_t heap_size;
    126132
    127         mtx_init(&page_heap_mtx, "page heap", NULL, MTX_DEF);
     133        mtx_init(&page_alloc.mtx, "page heap", NULL, MTX_DEF);
    128134
    129135        heap_size = rtems_bsd_get_allocator_domain_size(
     
    134140        BSD_ASSERT(area != NULL);
    135141
    136         sc = rtems_rbheap_initialize(&page_heap, area, heap_size, PAGE_SIZE,
    137             rtems_rbheap_extend_descriptors_with_malloc, NULL);
     142        sc = rtems_rbheap_initialize(&page_alloc.heap, area, heap_size,
     143            PAGE_SIZE, rtems_rbheap_extend_descriptors_with_malloc, NULL);
    138144        BSD_ASSERT(sc == RTEMS_SUCCESSFUL);
    139145
    140         rtems_rbheap_set_extend_descriptors(&page_heap,
     146        rtems_rbheap_set_extend_descriptors(&page_alloc.heap,
    141147            rtems_rbheap_extend_descriptors_never);
    142148
     
    147153
    148154        for (i = 0; i < n; ++i) {
    149                 rtems_rbheap_add_to_spare_descriptor_chain(&page_heap,
     155                rtems_rbheap_add_to_spare_descriptor_chain(&page_alloc.heap,
    150156                    &chunks[i]);
    151157        }
Note: See TracChangeset for help on using the changeset viewer.