Changeset cd3b380 in mainline


Ignore:
Timestamp:
2013-09-11T11:56:39Z (11 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1db5669
Parents:
43dd8028
Message:

due to the removal of FRAME_KA, the return value of frame_alloc*() needs to be checked before converting the physical address to kernel address

Location:
kernel
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia64/src/mm/vhpt.c

    r43dd8028 rcd3b380  
    4242uintptr_t vhpt_set_up(void)
    4343{
    44         vhpt_base = (vhpt_entry_t *)
    45             PA2KA(frame_alloc(SIZE2FRAMES(VHPT_SIZE), FRAME_ATOMIC, 0));
    46         if (!vhpt_base)
     44        uintptr_t vhpt_frame =
     45            frame_alloc(SIZE2FRAMES(VHPT_SIZE), FRAME_ATOMIC, 0);
     46        if (!vhpt_frame)
    4747                panic("Kernel configured with VHPT but no memory for table.");
    4848       
     49        vhpt_base = (vhpt_entry_t *) PA2KA(vhpt_frame);
    4950        vhpt_invalidate_all();
    5051        return (uintptr_t) vhpt_base;
  • kernel/arch/sparc64/src/mm/sun4u/as.c

    r43dd8028 rcd3b380  
    6363{
    6464#ifdef CONFIG_TSB
     65        uintptr_t tsb_phys =
     66            frame_alloc(SIZE2FRAMES((ITSB_ENTRY_COUNT + DTSB_ENTRY_COUNT) *
     67            sizeof(tsb_entry_t)), flags, 0);
     68        if (!tsb_phys)
     69                return -1;
     70       
     71        tsb_entry_t *tsb = (tsb_entry_t *) PA2KA(tsb_phys);
     72       
     73        as->arch.itsb = tsb;
     74        as->arch.dtsb = tsb + ITSB_ENTRY_COUNT;
     75       
     76        memsetb(as->arch.itsb, (ITSB_ENTRY_COUNT + DTSB_ENTRY_COUNT) *
     77            sizeof(tsb_entry_t), 0);
     78#endif
     79       
     80        return 0;
     81}
     82
     83int as_destructor_arch(as_t *as)
     84{
     85#ifdef CONFIG_TSB
    6586        size_t frames = SIZE2FRAMES((ITSB_ENTRY_COUNT + DTSB_ENTRY_COUNT) *
    6687            sizeof(tsb_entry_t));
    67        
    68         uintptr_t tsb = PA2KA(frame_alloc(frames, flags, 0));
    69         if (!tsb)
    70                 return -1;
    71        
    72         as->arch.itsb = (tsb_entry_t *) tsb;
    73         as->arch.dtsb = (tsb_entry_t *) (tsb +
    74             ITSB_ENTRY_COUNT * sizeof(tsb_entry_t));
    75        
    76         memsetb(as->arch.itsb,
    77             (ITSB_ENTRY_COUNT + DTSB_ENTRY_COUNT) * sizeof(tsb_entry_t), 0);
    78 #endif
    79        
    80         return 0;
    81 }
    82 
    83 int as_destructor_arch(as_t *as)
    84 {
    85 #ifdef CONFIG_TSB
    86         /*
    87          * The count must be calculated with respect to the emualted 16K page
    88          * size.
    89          */
    90         size_t cnt = ((ITSB_ENTRY_COUNT + DTSB_ENTRY_COUNT) *
    91             sizeof(tsb_entry_t)) >> FRAME_WIDTH;
    92         frame_free(KA2PA((uintptr_t) as->arch.itsb));
    93        
    94         return cnt;
     88        frame_free(KA2PA((uintptr_t) as->arch.itsb), frames);
     89       
     90        return frames;
    9591#else
    9692        return 0;
  • kernel/arch/sparc64/src/mm/sun4v/as.c

    r43dd8028 rcd3b380  
    6666{
    6767#ifdef CONFIG_TSB
    68         size_t frames =
    69             SIZE2FRAMES(TSB_ENTRY_COUNT * sizeof(tsb_entry_t));
    70        
    71         uintptr_t tsb = frame_alloc(frames, flags, 0);
     68        uintptr_t tsb =
     69            frame_alloc(SIZE2FRAMES(TSB_ENTRY_COUNT * sizeof(tsb_entry_t)),
     70            flags, 0);
    7271        if (!tsb)
    7372                return -1;
     
    9190{
    9291#ifdef CONFIG_TSB
    93         size_t cnt = (TSB_ENTRY_COUNT * sizeof(tsb_entry_t)) >> FRAME_WIDTH;
    94         frame_free((uintptr_t) as->arch.tsb_description.tsb_base);
     92        size_t frames = SIZE2FRAMES(TSB_ENTRY_COUNT * sizeof(tsb_entry_t));
     93        frame_free(as->arch.tsb_description.tsb_base, frames);
    9594       
    96         return cnt;
     95        return frames;
    9796#else
    9897        return 0;
  • kernel/generic/src/cpu/cpu.c

    r43dd8028 rcd3b380  
    7373                size_t i;
    7474                for (i = 0; i < config.cpu_count; i++) {
    75                         cpus[i].stack = (uint8_t *) PA2KA(frame_alloc(STACK_FRAMES,
    76                             FRAME_LOWMEM | FRAME_ATOMIC, STACK_SIZE - 1));
     75                        uintptr_t stack_phys = frame_alloc(STACK_FRAMES,
     76                            FRAME_LOWMEM | FRAME_ATOMIC, STACK_SIZE - 1);
     77                        if (!stack_phys)
     78                                panic("Cannot allocate CPU stack.");
     79                       
     80                        cpus[i].stack = (uint8_t *) PA2KA(stack_phys);
    7781                        cpus[i].id = i;
    7882                       
    7983                        irq_spinlock_initialize(&cpus[i].lock, "cpus[].lock");
    8084                       
    81                         unsigned int j;
    82                         for (j = 0; j < RQ_COUNT; j++) {
     85                        for (unsigned int j = 0; j < RQ_COUNT; j++) {
    8386                                irq_spinlock_initialize(&cpus[i].rq[j].lock, "cpus[].rq[].lock");
    8487                                list_initialize(&cpus[i].rq[j].rq);
  • kernel/generic/src/mm/frame.c

    r43dd8028 rcd3b380  
    374374                return;
    375375       
     376        frame->refcount = 1;
    376377        bitmap_set_range(&zone->bitmap, index, 1);
    377378       
  • kernel/generic/src/mm/slab.c

    r43dd8028 rcd3b380  
    182182        size_t zone = 0;
    183183       
    184         void *data = (void *)
    185             PA2KA(frame_alloc_generic(cache->frames, flags, 0, &zone));
    186         if (!data)
     184        uintptr_t data_phys =
     185            frame_alloc_generic(cache->frames, flags, 0, &zone);
     186        if (!data_phys)
    187187                return NULL;
     188       
     189        void *data = (void *) PA2KA(data_phys);
    188190       
    189191        slab_t *slab;
  • kernel/generic/src/proc/thread.c

    r43dd8028 rcd3b380  
    192192        kmflags &= ~FRAME_HIGHMEM;
    193193       
    194         thread->kstack = (uint8_t *)
    195             PA2KA(frame_alloc(STACK_FRAMES, kmflags, STACK_SIZE - 1));
    196         if (!thread->kstack) {
     194        uintptr_t stack_phys =
     195            frame_alloc(STACK_FRAMES, kmflags, STACK_SIZE - 1);
     196        if (!stack_phys) {
    197197#ifdef CONFIG_FPU
    198198                if (thread->saved_fpu_context)
     
    201201                return -1;
    202202        }
     203       
     204        thread->kstack = (uint8_t *) PA2KA(stack_phys);
    203205       
    204206#ifdef CONFIG_UDEBUG
  • kernel/test/mm/falloc1.c

    r43dd8028 rcd3b380  
    6262                        unsigned int allocated = 0;
    6363                        for (unsigned int i = 0; i < (MAX_FRAMES / count); i++) {
    64                                 frames[allocated] =
    65                                     PA2KA(frame_alloc(count, FRAME_ATOMIC, 0));
    66                                
    67                                 if (frames[allocated])
     64                                frames[allocated] = frame_alloc(count, FRAME_ATOMIC, 0);
     65                                if (frames[allocated]) {
    6866                                        allocated++;
    69                                 else {
     67                                } else {
    7068                                        TPRINTF("done. ");
    7169                                        break;
     
    8482                       
    8583                        for (unsigned int i = 0; i < allocated; i++)
    86                                 frame_free(KA2PA(frames[i]), count);
     84                                frame_free(frames[i], count);
    8785                       
    8886                        TPRINTF("done.\n");
  • kernel/test/mm/falloc2.c

    r43dd8028 rcd3b380  
    7474                        unsigned int allocated = 0;
    7575                        for (unsigned int i = 0; i < (MAX_FRAMES / count); i++) {
    76                                 frames[allocated] =
    77                                     PA2KA(frame_alloc(count, FRAME_ATOMIC, 0));
     76                                frames[allocated] = frame_alloc(count, FRAME_ATOMIC, 0);
    7877                                if (frames[allocated]) {
    79                                         memsetb((void *) frames[allocated], bytes, val);
     78                                        memsetb((void *) PA2KA(frames[allocated]), bytes, val);
    8079                                        allocated++;
    8180                                } else
     
    9190                        for (unsigned int i = 0; i < allocated; i++) {
    9291                                for (size_t k = 0; k < bytes; k++) {
    93                                         if (((uint8_t *) frames[i])[k] != val) {
     92                                        if (((uint8_t *) PA2KA(frames[i]))[k] != val) {
    9493                                                TPRINTF("Thread #%" PRIu64 " (cpu%u): "
    9594                                                    "Unexpected data (%c) in block %zu offset %zu\n",
    96                                                     THREAD->tid, CPU->id, ((char *) frames[i])[k],
     95                                                    THREAD->tid, CPU->id, ((char *) PA2KA(frames[i]))[k],
    9796                                                    frames[i], k);
    9897                                                atomic_inc(&thread_fail);
     
    10099                                        }
    101100                                }
    102                                 frame_free(KA2PA(frames[i]), count);
     101                                frame_free(frames[i], count);
    103102                        }
    104103                       
Note: See TracChangeset for help on using the changeset viewer.