Changeset e2650d3 in mainline
- Timestamp:
- 2010-07-20T13:53:36Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4738d84
- Parents:
- 4d0f97d
- Location:
- kernel/generic
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/macros.h
r4d0f97d re2650d3 47 47 * @param s2 Start address of the second interval. 48 48 * @param sz2 Size of the second interval. 49 * 49 50 */ 50 51 NO_TRACE static inline int overlaps(uintptr_t s1, size_t sz1, uintptr_t s2, … … 55 56 56 57 return ((s1 < e2) && (s2 < e1)); 58 } 59 60 /** Return true if the second interval is within the first interval. 61 * 62 * @param s1 Start address of the first interval. 63 * @param sz1 Size of the first interval. 64 * @param s2 Start address of the second interval. 65 * @param sz2 Size of the second interval. 66 * 67 */ 68 NO_TRACE static inline int iswithin(uintptr_t s1, size_t sz1, uintptr_t s2, 69 size_t sz2) 70 { 71 uintptr_t e1 = s1 + sz1; 72 uintptr_t e2 = s2 + sz2; 73 74 return ((s1 <= s2) && (e1 >= e2)); 57 75 } 58 76 … … 74 92 75 93 /* Compute overlapping of physical addresses */ 76 #define PA_ overlaps(x, szx, y, szy) \94 #define PA_OVERLAPS(x, szx, y, szy) \ 77 95 overlaps(KA2PA((x)), (szx), KA2PA((y)), (szy)) 78 96 -
kernel/generic/src/main/main.c
r4d0f97d re2650d3 147 147 size_t i; 148 148 for (i = 0; i < init.cnt; i++) { 149 if (PA_ overlaps(config.stack_base, config.stack_size,149 if (PA_OVERLAPS(config.stack_base, config.stack_size, 150 150 init.tasks[i].addr, init.tasks[i].size)) 151 151 config.stack_base = ALIGN_UP(init.tasks[i].addr + … … 155 155 /* Avoid placing stack on top of boot allocations. */ 156 156 if (ballocs.size) { 157 if (PA_ overlaps(config.stack_base, config.stack_size,157 if (PA_OVERLAPS(config.stack_base, config.stack_size, 158 158 ballocs.base, ballocs.size)) 159 159 config.stack_base = ALIGN_UP(ballocs.base + -
kernel/generic/src/mm/frame.c
r4d0f97d re2650d3 121 121 * 122 122 */ 123 NO_TRACE static size_t zones_insert_zone(pfn_t base, size_t count) 123 NO_TRACE static size_t zones_insert_zone(pfn_t base, size_t count, 124 zone_flags_t flags) 124 125 { 125 126 if (zones.count + 1 == ZONES_MAX) { … … 131 132 for (i = 0; i < zones.count; i++) { 132 133 /* Check for overlap */ 133 if (overlaps(base, count, 134 zones.info[i].base, zones.info[i].count)) { 135 printf("Zone (%p, %p) overlaps with zone (%p, %p)!\n", 136 PFN2ADDR(base), PFN2ADDR(base + count), 137 PFN2ADDR(zones.info[i].base), 138 PFN2ADDR(zones.info[i].base + zones.info[i].count)); 134 if (overlaps(zones.info[i].base, zones.info[i].count, 135 base, count)) { 136 137 /* 138 * If the overlaping zones are of the same type 139 * and the new zone is completely within the previous 140 * one, then quietly ignore the new zone. 141 * 142 */ 143 144 if ((zones.info[i].flags != flags) || 145 (!iswithin(zones.info[i].base, zones.info[i].count, 146 base, count))) { 147 printf("Zone (%p, %p) overlaps with previous zone (%p, %p)!\n", 148 PFN2ADDR(base), PFN2ADDR(count), 149 PFN2ADDR(zones.info[i].base), 150 PFN2ADDR(zones.info[i].count)); 151 } 152 139 153 return (size_t) -1; 140 154 } … … 898 912 } 899 913 900 size_t znum = zones_insert_zone(start, count );914 size_t znum = zones_insert_zone(start, count, flags); 901 915 if (znum == (size_t) -1) { 902 916 irq_spinlock_unlock(&zones.lock, true); … … 921 935 922 936 /* Non-available zone */ 923 size_t znum = zones_insert_zone(start, count );937 size_t znum = zones_insert_zone(start, count, flags); 924 938 if (znum == (size_t) -1) { 925 939 irq_spinlock_unlock(&zones.lock, true);
Note:
See TracChangeset
for help on using the changeset viewer.