名称
get_uos_reserved_size - uOS 用の予約領域サイズを取得する
書式
int
get_uos_reserved_size(
uint8_t * mmio_va,
uint32_t adapter_memsize,
uint32_t * uos_reserve_size);
引数
- mmio_va
- 予約領域が存在するカードのMMIOの仮想アドレス
- adapter_memsize
- カードのメモリサイズ
- uos_reserve_size
- 取得したサイズを格納する領域へのポインタ
説明
uOS 用の予約領域サイズを返す。
とはいうものの、予約領域が何なのかわからない。
この値の分が uOS が自由に使える領域で、残りは Windows とかの host OS が使うとか?
adapter_memsize の UOS_RESERVE_PERCENT パーセントを reserve size とする。
ただし、adapter_memsize のうち少なくとも OS_RESERVE_SIZE_MIN を、非 reserve size として残す。
reserve size は、UOS_RESERVE_SIZE_MIN 以上 UOS_RESERVE_SIZE_MAX 以下。この範囲を超える場合は、もっとも近い限界に丸める。
reserve size のうち 4Ki 未満の部分は切り捨てる。
戻り値
取得に成功した場合、引数 uos_reserve_size が示す領域に取得したサイズを格納して、0 を返す。
そうでない場合、0 以外の値を返す。
とはいうものの、失敗するケースはない。
参照
- UOS_RESERVE_PERCENT (= 50)
- OS_RESERVE_SIZE_MIN (= 32Mi)
- UOS_RESERVE_SIZE_MAX (= 4Gi-4Ki)
- UOS_RESERVE_SIZE_MIN (= 128Mi)
実装
261 /*
262 DESCRIPTION:: gets reserved size for uos
263 PARAMETERS::
264 [out]uint32_t *uos_reserve_size - reserved uos size
265 RETURN_VALUE:: 0 if successful, non-zero if failure
266 */
267 int
268 get_uos_reserved_size(uint8_t* mmio_va, uint32_t adapter_memsize, uint32_t *uos_reserve_size)
269 {
270 int status = 0;
271 uint32_t reserve_size = 0;
272
273 // Only calculate if not explicitly specified by the user
274 reserve_size = (uint32_t)(adapter_memsize * UOS_RESERVE_PERCENT / 100);
275
276 // Make sure there is at least WINDOWS_RESERVE_SIZE_MIN bytes
277 reserve_size = GET_MIN(reserve_size, adapter_memsize - OS_RESERVE_SIZE_MIN);
278
279 // Keep in mind maximum uos reserve size is uint32_t, so we never overflow
280 reserve_size = GET_MIN(reserve_size, UOS_RESERVE_SIZE_MAX);
281 reserve_size = GET_MAX(reserve_size, UOS_RESERVE_SIZE_MIN);
282
283 // Always align uos reserve size to a page
284 reserve_size = AlignLow(reserve_size, ((4) * 1024));
285
286 *uos_reserve_size = reserve_size;
287 return status;
288 }
最終更新:2012年11月18日 03:21