亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? alloc.c

?? 一個Windows下的Linux專用虛擬機
?? C
字號:
/* * This source code is a part of coLinux source package. * * Dan Aloni <da-x@colinux.org>, 2003-2004 (c) * * The code is licensed under the GPL. See the COPYING file at * the root directory. * */#include <asm/page.h>#include "ddk.h"#include <colinux/os/kernel/alloc.h>#include <colinux/os/kernel/misc.h>#include "manager.h"static co_rc_t co_winnt_new_mdl_bucket(struct co_manager *manager){	co_os_mdl_ptr_t *mdl_ptr;	co_os_pfn_ptr_t *pfn_ptrs;	int i;	co_rc_t rc;	mdl_ptr = co_os_malloc(sizeof(*mdl_ptr));	if (!mdl_ptr)		return CO_RC(OUT_OF_MEMORY);	pfn_ptrs = co_os_malloc(sizeof(co_os_pfn_ptr_t) * PFN_ALLOCATION_COUNT);	if (!pfn_ptrs) {		rc = CO_RC(OUT_OF_MEMORY);		goto error_free_mdl_ptr;	}		PHYSICAL_ADDRESS LowAddress;	PHYSICAL_ADDRESS HighAddress;	PHYSICAL_ADDRESS SkipBytes;		LowAddress.QuadPart = 0x100000 * 16; /* >16MB We don't want to steal DMA memory */	HighAddress.QuadPart = 0x100000000LL; /* We don't support PGE yet */	SkipBytes.QuadPart = 0;		mdl_ptr->use_count = 0;	mdl_ptr->pfn_ptrs = pfn_ptrs; 	mdl_ptr->mdl = MmAllocatePagesForMdl(LowAddress, HighAddress, SkipBytes,					     PAGE_SIZE * PFN_ALLOCATION_COUNT);	if (mdl_ptr->mdl == NULL) {		rc = CO_RC(OUT_OF_MEMORY);		goto error_free_ptrs;	}	int pages_allocated = mdl_ptr->mdl->ByteCount >> CO_ARCH_PAGE_SHIFT;	if (pages_allocated != PFN_ALLOCATION_COUNT) {		rc = CO_RC(OUT_OF_MEMORY);		goto error_free_mdl;	}	manager->osdep->mdls_allocated++;	co_list_add_head(&mdl_ptr->node, &manager->osdep->mdl_list);		for (i=0; i < PFN_ALLOCATION_COUNT; i++) {		co_pfn_t pfn = ((co_pfn_t *)(mdl_ptr->mdl+1))[i];		pfn_ptrs[i].type = CO_OS_PFN_PTR_TYPE_MDL;		pfn_ptrs[i].pfn = pfn;		pfn_ptrs[i].mdl = mdl_ptr;		co_list_add_head(&pfn_ptrs[i].unused, &manager->osdep->pages_unused);		co_list_add_head(&pfn_ptrs[i].node, &manager->osdep->pages_hash[PFN_HASH(pfn)]);	}	return CO_RC(OK);error_free_mdl:	MmFreePagesFromMdl(mdl_ptr->mdl);	IoFreeMdl(mdl_ptr->mdl);error_free_ptrs:	co_os_free(pfn_ptrs);error_free_mdl_ptr:	co_os_free(mdl_ptr);	return rc;}static co_rc_t co_winnt_new_mapped_allocated_page(struct co_manager *manager, co_pfn_t *pfn){	co_os_pfn_ptr_t *pfn_ptr;	void *page;	pfn_ptr = co_os_malloc(sizeof(*pfn_ptr));	if (!pfn_ptr)		return CO_RC(OUT_OF_MEMORY);	page = MmAllocateNonCachedMemory(PAGE_SIZE);	if (!page) {		co_os_free(pfn_ptr);		return CO_RC(OUT_OF_MEMORY);	}	pfn_ptr->type = CO_OS_PFN_PTR_TYPE_PAGE;	pfn_ptr->pfn = co_os_virt_to_phys(page) >> CO_ARCH_PAGE_SHIFT;	pfn_ptr->page = page;	co_list_add_head(&pfn_ptr->node, &manager->osdep->pages_hash[PFN_HASH(pfn_ptr->pfn)]);	co_list_add_head(&pfn_ptr->mapped_allocated_node, &manager->osdep->mapped_allocated_list);	*pfn = pfn_ptr->pfn;	return CO_RC(OK);}static void co_winnt_free_mapped_allocated_page(co_osdep_manager_t osdep, co_os_pfn_ptr_t *pfn_ptr){	co_list_del(&pfn_ptr->mapped_allocated_node);	co_list_del(&pfn_ptr->node);	MmFreeNonCachedMemory(pfn_ptr->page, PAGE_SIZE);	co_os_free(pfn_ptr);}static void co_winnt_free_mdl_bucket_no_lists(co_osdep_manager_t osdep, co_os_mdl_ptr_t *mdl_ptr){	MmFreePagesFromMdl(mdl_ptr->mdl);	IoFreeMdl(mdl_ptr->mdl);	co_os_free(mdl_ptr->pfn_ptrs);	co_list_del(&mdl_ptr->node);	co_os_free(mdl_ptr);	osdep->mdls_allocated--;}static void co_winnt_free_mdl_bucket(struct co_manager *manager, co_os_mdl_ptr_t *mdl_ptr){	co_os_pfn_ptr_t *pfn_ptrs = mdl_ptr->pfn_ptrs;	int i;		for (i=0; i < PFN_ALLOCATION_COUNT; i++) {		co_list_del(&pfn_ptrs[i].unused);		co_list_del(&pfn_ptrs[i].node);	}		co_winnt_free_mdl_bucket_no_lists(manager->osdep, mdl_ptr);} static void co_os_get_unused_mdl_page(struct co_manager *manager, co_pfn_t *pfn){	co_os_pfn_ptr_t *pfn_ptr;	pfn_ptr = co_list_entry(manager->osdep->pages_unused.next, co_os_pfn_ptr_t, unused);	pfn_ptr->mdl->use_count++;	co_list_del(&pfn_ptr->unused);	*pfn = pfn_ptr->pfn;	manager->osdep->pages_allocated++;}static void co_winnt_put_unused_mdl_page(struct co_manager *manager, co_os_pfn_ptr_t *pfn_ptr){	co_os_mdl_ptr_t *mdl_ptr = pfn_ptr->mdl;		mdl_ptr->use_count--;	co_list_add_head(&pfn_ptr->unused, &manager->osdep->pages_unused);	if (mdl_ptr->use_count == 0)		co_winnt_free_mdl_bucket(manager, mdl_ptr);	manager->osdep->pages_allocated--;}void co_winnt_free_all_pages(co_osdep_manager_t osdep){	co_os_mdl_ptr_t *mdl_ptr;	co_os_pfn_ptr_t *pfn_ptr;		while (!co_list_empty(&osdep->mdl_list)) {		mdl_ptr = co_list_entry(osdep->mdl_list.next, co_os_mdl_ptr_t, node);		co_winnt_free_mdl_bucket_no_lists(osdep, mdl_ptr);	}	while (!co_list_empty(&osdep->mapped_allocated_list)) {		pfn_ptr = co_list_entry(osdep->mapped_allocated_list.next, co_os_pfn_ptr_t, mapped_allocated_node);		co_winnt_free_mapped_allocated_page(osdep, pfn_ptr);	}	osdep->pages_allocated = 0;}co_rc_t co_os_get_page(struct co_manager *manager, co_pfn_t *pfn){	co_rc_t rc = CO_RC(OK);	co_os_mutex_acquire(manager->osdep->mutex);	if (!co_list_empty(&manager->osdep->pages_unused)) {		co_os_get_unused_mdl_page(manager, pfn);		goto out;	}		rc = co_winnt_new_mdl_bucket(manager);	if (CO_OK(rc)) {		co_os_get_unused_mdl_page(manager, pfn);	} else {		rc = co_winnt_new_mapped_allocated_page(manager, pfn);	}out:	co_os_mutex_release(manager->osdep->mutex);	return rc;}void co_os_put_page(struct co_manager *manager, co_pfn_t pfn){	co_os_mutex_acquire(manager->osdep->mutex);	co_list_t *list = &manager->osdep->pages_hash[PFN_HASH(pfn)];	co_os_pfn_ptr_t *pfn_ptr;	co_list_each_entry(pfn_ptr, list, node) {		if (pfn_ptr->pfn != pfn)			continue;		if (pfn_ptr->type == CO_OS_PFN_PTR_TYPE_MDL)			co_winnt_put_unused_mdl_page(manager, pfn_ptr);		else			co_winnt_free_mapped_allocated_page(manager->osdep, pfn_ptr);				break;	}	co_os_mutex_release(manager->osdep->mutex);}void *co_os_map(struct co_manager *manager, co_pfn_t pfn){		PVOID *ret;	PHYSICAL_ADDRESS PhysicalAddress;	PhysicalAddress.QuadPart = pfn << CO_ARCH_PAGE_SHIFT;	ret = MmMapIoSpace(PhysicalAddress, PAGE_SIZE, MmCached);	manager->osdep->pages_mapped++;	return ret;}void co_os_unmap(struct co_manager *manager, void *ptr, co_pfn_t pfn){	MmUnmapIoSpace(ptr, PAGE_SIZE);	manager->osdep->pages_mapped--;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产综合久久蜜臀| 色噜噜狠狠成人网p站| 中文字幕一区视频| 欧美精品高清视频| 粉嫩一区二区三区在线看| 亚洲国产日韩av| 中文字幕欧美区| 日韩欧美一级片| 欧美亚洲丝袜传媒另类| 国产成人亚洲精品青草天美| 亚洲国产人成综合网站| 国产精品乱码人人做人人爱| 欧美电视剧免费观看| 欧洲精品一区二区三区在线观看| 国产综合久久久久影院| 午夜精品免费在线观看| 亚洲视频一区二区在线观看| 久久久久久亚洲综合| 欧美一区二区视频网站| 欧美在线一二三四区| 99久久99久久精品国产片果冻| 黑人巨大精品欧美黑白配亚洲| 亚洲成人动漫精品| 一区二区日韩av| **欧美大码日韩| 国产精品国产自产拍高清av王其| 久久久精品影视| 久久青草欧美一区二区三区| 日韩欧美国产麻豆| 欧美一级国产精品| 在线播放亚洲一区| 欧美色中文字幕| 在线观看亚洲精品视频| 91浏览器打开| 一本色道久久综合亚洲aⅴ蜜桃| 国产xxx精品视频大全| 国产一区二区三区国产| 精品一区二区免费在线观看| 秋霞成人午夜伦在线观看| 首页国产丝袜综合| 日韩成人一级大片| 五月婷婷欧美视频| 日韩专区欧美专区| 日韩av一级片| 久久av资源站| 国产一区啦啦啦在线观看| 国内精品嫩模私拍在线| 国产一区亚洲一区| av激情综合网| 欧美亚洲国产一区二区三区 | 韩国一区二区视频| 黄网站免费久久| 国产成人免费视频网站| 国产成人精品亚洲777人妖| 国产老妇另类xxxxx| 成人永久看片免费视频天堂| www.欧美.com| 欧美性大战久久久久久久| 欧美日韩一区视频| 日韩亚洲电影在线| 国产欧美一区二区三区网站 | 26uuu色噜噜精品一区二区| 亚洲精品一区二区三区香蕉| 国产亚洲精品aa| 亚洲人成人一区二区在线观看| 亚洲精品成人精品456| 亚洲丶国产丶欧美一区二区三区| 午夜精品久久久| 国产一区二区久久| 色婷婷狠狠综合| 欧美一二三区精品| 中文字幕欧美三区| 亚洲国产综合色| 国产在线麻豆精品观看| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 蜜臀精品一区二区三区在线观看 | 久久疯狂做爰流白浆xx| 成人三级伦理片| 日本精品免费观看高清观看| 欧美丰满少妇xxxxx高潮对白| 精品国产髙清在线看国产毛片 | 国产色91在线| 亚洲一级在线观看| 国产一区二区精品久久91| 91同城在线观看| 欧美成人bangbros| 亚洲免费观看在线视频| 久久er99精品| 欧美三级资源在线| 欧美激情一区二区三区| 天堂久久一区二区三区| 成人高清av在线| 日韩美女主播在线视频一区二区三区| 国产精品嫩草99a| 免费成人你懂的| 在线观看一区二区视频| 国产色婷婷亚洲99精品小说| 肉色丝袜一区二区| av在线播放一区二区三区| 91麻豆精品国产91久久久更新时间 | 一本色道久久综合亚洲91| 欧美精品一区二| 天堂影院一区二区| 91污片在线观看| 亚洲国产激情av| 久久99精品国产.久久久久| 色婷婷激情综合| 中文字幕成人av| 国产呦精品一区二区三区网站| 欧美日韩国产中文| 亚洲精品美国一| 成人精品国产一区二区4080| 精品毛片乱码1区2区3区| 亚洲成人精品一区二区| 93久久精品日日躁夜夜躁欧美| 久久这里都是精品| 老司机精品视频导航| 欧美日韩视频专区在线播放| 国产精品久久久久久久久久免费看| 青青草国产成人99久久| 欧美色网一区二区| 亚洲黄色性网站| 一本一道波多野结衣一区二区| 亚洲国产精品二十页| 丁香激情综合国产| 亚洲精品一区二区三区在线观看| 日本亚洲三级在线| 欧美丰满高潮xxxx喷水动漫| 亚洲一区二区视频在线观看| 91毛片在线观看| 亚洲人成亚洲人成在线观看图片 | 日韩成人免费看| 宅男在线国产精品| 日韩精品成人一区二区三区| 欧美日免费三级在线| 亚洲一区二区视频在线| 欧美色精品天天在线观看视频| 亚洲五码中文字幕| 欧美美女激情18p| 性做久久久久久免费观看| 在线观看视频一区二区欧美日韩| 一区二区三区 在线观看视频| 欧美性生交片4| 日韩国产欧美在线视频| 精品美女被调教视频大全网站| 国产一区福利在线| 国产精品网站在线观看| 成人美女在线观看| 亚洲欧美偷拍卡通变态| 在线视频综合导航| 天天亚洲美女在线视频| 日韩一区二区三区三四区视频在线观看| 日韩中文字幕一区二区三区| 日韩欧美国产一区在线观看| 国产精品 日产精品 欧美精品| 国产精品蜜臀在线观看| 91福利国产精品| 日本vs亚洲vs韩国一区三区二区 | 国产日本亚洲高清| 成人精品国产福利| 亚洲电影欧美电影有声小说| 欧美一级高清大全免费观看| 国产综合色视频| 亚洲三级免费观看| 欧美久久久一区| 国产精品一区二区久久不卡| 国产精品久久久久久亚洲伦| 在线观看日韩精品| 久久精工是国产品牌吗| 欧美激情一区二区三区在线| 色先锋资源久久综合| 日韩不卡一二三区| 国产清纯白嫩初高生在线观看91| 91天堂素人约啪| 麻豆精品新av中文字幕| 国产免费成人在线视频| 在线看日本不卡| 久久不见久久见中文字幕免费| 综合电影一区二区三区| 欧美一区二区三区男人的天堂| 国产成人福利片| 亚洲v中文字幕| 欧美国产欧美亚州国产日韩mv天天看完整 | 色94色欧美sute亚洲13| 美女www一区二区| 亚洲男女一区二区三区| 日韩免费观看高清完整版 | 精品国产乱码久久久久久牛牛 | 欧美自拍丝袜亚洲| 国产一区日韩二区欧美三区| 一区二区免费看| 国产亚洲一区二区三区四区| 欧美色国产精品| 成人免费av资源| 久久国产尿小便嘘嘘尿| 亚洲精品国产一区二区精华液| 欧美成人性战久久| 欧美性猛片aaaaaaa做受| 成人一区二区三区在线观看| 男女激情视频一区|