Rev 762 | Rev 764 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 762 | Rev 763 | ||
---|---|---|---|
Line 84... | Line 84... | ||
84 | fsize = (PAGE_SIZE << cache->order); |
84 | fsize = (PAGE_SIZE << cache->order); |
85 | slab = data + fsize - sizeof(*slab); |
85 | slab = data + fsize - sizeof(*slab); |
86 | } |
86 | } |
87 | 87 | ||
88 | /* Fill in slab structures */ |
88 | /* Fill in slab structures */ |
89 | /* TODO: some better way of accessing the frame, although |
89 | /* TODO: some better way of accessing the frame */ |
90 | * the optimizer might optimize the division out :-/ */ |
- | |
91 | for (i=0; i< (1<<cache->order); i++) { |
90 | for (i=0; i< (1<<cache->order); i++) { |
92 | ADDR2FRAME(zone, (__address)(data+i*PAGE_SIZE))->parent = slab; |
91 | ADDR2FRAME(zone, (__address)(data+i*PAGE_SIZE))->parent = slab; |
93 | } |
92 | } |
94 | 93 | ||
95 | slab->start = data; |
94 | slab->start = data; |
Line 142... | Line 141... | ||
142 | count_t frames = 0; |
141 | count_t frames = 0; |
143 | 142 | ||
144 | if (!slab) |
143 | if (!slab) |
145 | slab = obj2slab(obj); |
144 | slab = obj2slab(obj); |
146 | 145 | ||
147 | spinlock_lock(cache->lock); |
146 | spinlock_lock(&cache->lock); |
148 | 147 | ||
149 | *((int *)obj) = slab->nextavail; |
148 | *((int *)obj) = slab->nextavail; |
150 | slab->nextavail = (obj - slab->start)/cache->size; |
149 | slab->nextavail = (obj - slab->start)/cache->size; |
151 | slab->available++; |
150 | slab->available++; |
152 | 151 | ||
Line 163... | Line 162... | ||
163 | spinlock_unlock(&cache->lock); |
162 | spinlock_unlock(&cache->lock); |
164 | frames = slab_space_free(cache, slab); |
163 | frames = slab_space_free(cache, slab); |
165 | spinlock_lock(&cache->lock); |
164 | spinlock_lock(&cache->lock); |
166 | } |
165 | } |
167 | 166 | ||
168 | spinlock_unlock(cache->lock); |
167 | spinlock_unlock(&cache->lock); |
169 | 168 | ||
170 | return frames; |
169 | return frames; |
171 | } |
170 | } |
172 | 171 | ||
173 | /** |
172 | /** |