Changeset 482f968 in mainline for kernel/generic/src
- Timestamp:
- 2018-10-31T16:48:51Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 91a8f83, bab75df6
- Parents:
- 37781819
- Location:
- kernel/generic/src
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/ddi/ddi.c
r37781819 r482f968 385 385 return EINVAL; 386 386 387 // FIXME: probably need to ensure that the memory is suitable for DMA 387 388 *phys = frame_alloc(frames, FRAME_ATOMIC, constraint); 388 389 if (*phys == 0) -
kernel/generic/src/mm/frame.c
r37781819 r482f968 815 815 } 816 816 817 static size_t try_find_zone(size_t count, bool lowmem, 818 pfn_t frame_constraint, size_t hint) 819 { 820 if (!lowmem) { 821 size_t znum = find_free_zone(count, 822 ZONE_HIGHMEM | ZONE_AVAILABLE, frame_constraint, hint); 823 if (znum != (size_t) -1) 824 return znum; 825 } 826 827 return find_free_zone(count, ZONE_LOWMEM | ZONE_AVAILABLE, 828 frame_constraint, hint); 829 } 830 817 831 /** Allocate frames of physical memory. 818 832 * … … 843 857 irq_spinlock_lock(&zones.lock, true); 844 858 859 // TODO: Print diagnostic if neither is explicitly specified. 860 bool lowmem = (flags & FRAME_LOWMEM) || !(flags & FRAME_HIGHMEM); 861 845 862 /* 846 863 * First, find suitable frame zone. 847 864 */ 848 size_t znum = find_free_zone(count, FRAME_TO_ZONE_FLAGS(flags), 849 frame_constraint, hint); 865 size_t znum = try_find_zone(count, lowmem, frame_constraint, hint); 850 866 851 867 /* … … 859 875 860 876 if (freed > 0) 861 znum = find_free_zone(count, FRAME_TO_ZONE_FLAGS(flags),877 znum = try_find_zone(count, lowmem, 862 878 frame_constraint, hint); 863 879 … … 868 884 869 885 if (freed > 0) 870 znum = find_free_zone(count, FRAME_TO_ZONE_FLAGS(flags),886 znum = try_find_zone(count, lowmem, 871 887 frame_constraint, hint); 872 888 } -
kernel/generic/src/mm/km.c
r37781819 r482f968 121 121 return base; 122 122 else 123 return (uintptr_t) NULL;123 panic("Kernel ran out of virtual address space."); 124 124 } 125 125 … … 256 256 uintptr_t frame; 257 257 258 frame = frame_alloc(1, FRAME_HIGHMEM | FRAME_ATOMIC |flags, 0);259 if (frame ) {258 frame = frame_alloc(1, FRAME_HIGHMEM | flags, 0); 259 if (frame >= config.identity_size) { 260 260 page = km_map(frame, PAGE_SIZE, PAGE_SIZE, 261 261 PAGE_READ | PAGE_WRITE | PAGE_CACHEABLE); 262 if (!page) {263 frame_free(frame, 1);264 goto lowmem;265 }266 262 } else { 267 lowmem:268 frame = frame_alloc(1, FRAME_LOWMEM | flags, 0);269 if (!frame)270 return (uintptr_t) NULL;271 272 263 page = PA2KA(frame); 273 264 } -
kernel/generic/src/mm/slab.c
r37781819 r482f968 188 188 189 189 uintptr_t data_phys = 190 frame_alloc_generic(cache->frames, flags, 0, &zone);190 frame_alloc_generic(cache->frames, FRAME_LOWMEM | flags, 0, &zone); 191 191 if (!data_phys) 192 192 return NULL; -
kernel/generic/src/time/clock.c
r37781819 r482f968 81 81 void clock_counter_init(void) 82 82 { 83 uintptr_t faddr = frame_alloc(1, FRAME_ ATOMIC, 0);83 uintptr_t faddr = frame_alloc(1, FRAME_LOWMEM | FRAME_ATOMIC, 0); 84 84 if (faddr == 0) 85 85 panic("Cannot allocate page for clock.");
Note:
See TracChangeset
for help on using the changeset viewer.