Ignore:
File:
1 edited

Legend:

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

    r7ad17de r9d58539  
    5959static void anon_destroy(as_area_t *);
    6060
    61 static bool anon_is_resizable(as_area_t *);
    62 static bool anon_is_shareable(as_area_t *);
    63 
    6461static int anon_page_fault(as_area_t *, uintptr_t, pf_access_t);
    6562static void anon_frame_free(as_area_t *, uintptr_t, uintptr_t);
     
    7168        .destroy = anon_destroy,
    7269
    73         .is_resizable = anon_is_resizable,
    74         .is_shareable = anon_is_shareable,
    75 
    7670        .page_fault = anon_page_fault,
    7771        .frame_free = anon_frame_free,
     
    8074bool anon_create(as_area_t *area)
    8175{
    82         if (area->flags & AS_AREA_LATE_RESERVE)
    83                 return true;
    84 
    8576        return reserve_try_alloc(area->pages);
    8677}
     
    8879bool anon_resize(as_area_t *area, size_t new_pages)
    8980{
    90         if (area->flags & AS_AREA_LATE_RESERVE)
    91                 return true;
    92 
    9381        if (new_pages > area->pages)
    9482                return reserve_try_alloc(new_pages - area->pages);
     
    112100        ASSERT(mutex_locked(&area->as->lock));
    113101        ASSERT(mutex_locked(&area->lock));
    114         ASSERT(!(area->flags & AS_AREA_LATE_RESERVE));
    115102
    116103        /*
     
    152139void anon_destroy(as_area_t *area)
    153140{
    154         if (area->flags & AS_AREA_LATE_RESERVE)
    155                 return;
    156 
    157141        reserve_free(area->pages);
    158142}
    159143
    160 bool anon_is_resizable(as_area_t *area)
    161 {
    162         return true;
    163 }
    164 
    165 bool anon_is_shareable(as_area_t *area)
    166 {
    167         return !(area->flags & AS_AREA_LATE_RESERVE);
    168 }
    169144
    170145/** Service a page fault in the anonymous memory address space area.
     
    250225                 *   the different causes
    251226                 */
    252 
    253                 if (area->flags & AS_AREA_LATE_RESERVE) {
    254                         /*
    255                          * Reserve the memory for this page now.
    256                          */
    257                         if (!reserve_try_alloc(1)) {
    258                                 printf("Killing task %" PRIu64 " due to a "
    259                                     "failed late reservation request.\n",
    260                                     TASK->taskid);
    261                                 TASK->silent_kill = true;
    262                                 return AS_PF_FAULT;
    263                         }
    264                 }
    265 
    266227                kpage = km_temporary_page_get(&frame, FRAME_NO_RESERVE);
    267228                memsetb((void *) kpage, PAGE_SIZE, 0);
     
    294255        ASSERT(mutex_locked(&area->lock));
    295256
    296         if (area->flags & AS_AREA_LATE_RESERVE) {
    297                 /*
    298                  * In case of the late reserve areas, physical memory will not
    299                  * be unreserved when the area is destroyed so we need to use
    300                  * the normal unreserving frame_free().
    301                  */
    302                 frame_free(frame);
    303         } else {
    304                 /*
    305                  * The reserve will be given back when the area is destroyed or
    306                  * resized, so use the frame_free_noreserve() which does not
    307                  * manipulate the reserve or it would be given back twice.
    308                  */
    309                 frame_free_noreserve(frame);
    310         }
     257        frame_free_noreserve(frame);
    311258}
    312259
Note: See TracChangeset for help on using the changeset viewer.