*参照元 [#q8e1dab2]
#backlinks

*説明 [#x024a202]
-パス: [[linux-2.6.33/mm/slob.c]]

-FIXME: これは何?
--説明


**引数 [#u28e01da]
-struct slob_page *sp
--
--[[linux-2.6.33/slob_page]]
-size_t size
--
-int align
--


**返り値 [#hf0c9b79]
-void *
--


**参考 [#m982e660]


*実装 [#b90586d4]
 /*
  * Allocate a slob block within a given slob_page sp.
  */
 static void *slob_page_alloc(struct slob_page *sp, size_t size, int align)
 {
 	slob_t *prev, *cur, *aligned = NULL;
 	int delta = 0, units = SLOB_UNITS(size);
 
-
--[[linux-2.6.33/slob_t]]
-
--[[linux-2.6.33/SLOB_UNITS()]]

 	for (prev = NULL, cur = sp->free; ; prev = cur, cur = slob_next(cur)) {
-
--[[linux-2.6.33/slob_next]]

 		slobidx_t avail = slob_units(cur);
 
-
--[[linux-2.6.33/slobidx_t]]
-
--[[linux-2.6.33/slob_units()]]

 		if (align) {
 			aligned = (slob_t *)ALIGN((unsigned long)cur, align);
 			delta = aligned - cur;
 		}
-
--[[linux-2.6.33/ALIGN()]]

 		if (avail >= units + delta) { /* room enough? */
 			slob_t *next;
 
 			if (delta) { /* need to fragment head to align? */
 				next = slob_next(cur);
 				set_slob(aligned, avail - delta, next);
 				set_slob(cur, delta, aligned);
 				prev = cur;
 				cur = aligned;
 				avail = slob_units(cur);
 			}
 
-
--[[linux-2.6.33/slob_next()]]
-
--[[linux-2.6.33/set_slob()]]
-
--[[linux-2.6.33/slob_units()]]

 			next = slob_next(cur);
 			if (avail == units) { /* exact fit? unlink. */
 				if (prev)
 					set_slob(prev, slob_units(prev), next);
 				else
 					sp->free = next;
 			} else { /* fragment */
 				if (prev)
 					set_slob(prev, slob_units(prev), cur + units);
 				else
 					sp->free = cur + units;
 				set_slob(cur + units, avail - units, next);
 			}
 
-
--[[linux-2.6.33/slob_next()]]
-
--[[linux-2.6.33/set_slob()]]
-
--[[linux-2.6.33/slob_units()]]

 			sp->units -= units;
 			if (!sp->units)
 				clear_slob_page_free(sp);
-
--[[linux-2.6.33/clear_slob_page_free()]]

 			return cur;
 		}
 		if (slob_last(cur))
 			return NULL;
-
--[[linux-2.6.33/slob_last()]]

 	}
 }


*コメント [#i0dc82fe]


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS