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

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

?? manager.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 <colinux/common/libc.h>#include <colinux/os/kernel/alloc.h>#include <colinux/os/kernel/monitor.h>#include <colinux/os/kernel/manager.h>#include <colinux/os/kernel/misc.h>#include <colinux/os/kernel/mutex.h>#include <colinux/arch/mmu.h>#include "manager.h"#include "monitor.h"#include "pages.h"#include "reversedpfns.h"co_manager_t *co_global_manager = NULL;static void set_hostmem_usage_limit(co_manager_t *manager){	if (manager->hostmem_amount >= 256 * 0x100000) {		/* more than 256MB */		/* use_limit = host - 64mb */		manager->hostmem_usage_limit = manager->hostmem_amount - 64 * 0x100000;	} else {		/* less then 256MB */		/* use_limit = host * (3/4) */		manager->hostmem_usage_limit = ((manager->hostmem_amount/0x100000)*3/4) * 0x100000;	}	co_debug("machine RAM use limit: %ld MB" , manager->hostmem_amount/0x100000);}co_rc_t co_manager_load(co_manager_t *manager){	co_rc_t rc;	co_memset(manager, 0, sizeof(*manager));		co_debug("loaded to host kernel");	co_list_init(&manager->opens);	co_list_init(&manager->monitors);	rc = co_os_mutex_create(&manager->lock);	if (!CO_OK(rc))		return rc;	rc = co_os_physical_memory_pages(&manager->hostmem_pages);	if (!CO_OK(rc))		goto out_err_mutex;	if (manager->hostmem_pages > 0x100000) {		co_debug_error("error, machines with more than 4GB are not currently supported");		rc = CO_RC(ERROR);		goto out_err_mutex;	}	co_debug("machine has %ld MB of RAM", manager->hostmem_pages >> 8);	manager->hostmem_amount = manager->hostmem_pages << CO_ARCH_PAGE_SHIFT;	set_hostmem_usage_limit(manager);	rc = co_debug_init(&manager->debug);	if (!CO_OK(rc))		goto out_err_mutex;	manager->state = CO_MANAGER_STATE_INITIALIZED_DEBUG;	rc = co_manager_arch_init(manager, &manager->archdep);	if (!CO_OK(rc))		goto out_err_debug;	manager->state = CO_MANAGER_STATE_INITIALIZED_ARCH;	rc = co_os_manager_init(manager, &manager->osdep);	if (!CO_OK(rc))		goto out_err_arch;	manager->state = CO_MANAGER_STATE_INITIALIZED_OSDEP;	rc = co_manager_alloc_reversed_pfns(manager);	if (!CO_OK(rc))		goto out_err_os;	manager->state = CO_MANAGER_STATE_INITIALIZED;	return rc;/* error path */out_err_os:	co_os_manager_free(manager->osdep);	out_err_arch:	co_manager_arch_free(manager->archdep);out_err_debug:	co_debug_free(&manager->debug);out_err_mutex:	co_os_mutex_destroy(manager->lock);	manager->state = CO_MANAGER_STATE_NOT_INITIALIZED;	return rc;}void co_manager_unload(co_manager_t *manager){	co_debug("unloaded from host kernel");	if (manager->state >= CO_MANAGER_STATE_INITIALIZED) {		co_manager_free_reversed_pfns(manager);		co_os_mutex_destroy(manager->lock);	}	if (manager->state >= CO_MANAGER_STATE_INITIALIZED_OSDEP)		co_os_manager_free(manager->osdep);	if (manager->state >= CO_MANAGER_STATE_INITIALIZED_ARCH)		co_manager_arch_free(manager->archdep);	if (manager->state >= CO_MANAGER_STATE_INITIALIZED_DEBUG)		co_debug_free(&manager->debug);	manager->state = CO_MANAGER_STATE_NOT_INITIALIZED;}co_rc_t co_manager_send(co_manager_t *manager, co_manager_open_desc_t opened, co_message_t *message){	bool_t ret;	co_rc_t rc = CO_RC_OK;	co_os_mutex_acquire(opened->lock);	ret = co_os_manager_userspace_try_send_direct(manager, opened, message);	if (!ret)		rc = co_message_dup_to_queue(message, &opened->out_queue);	co_os_mutex_release(opened->lock);	return rc;}co_rc_t co_manager_send_eof(co_manager_t *manager, co_manager_open_desc_t opened){	opened->active = PFALSE;		return co_os_manager_userspace_eof(manager, opened);}co_rc_t co_manager_open(co_manager_t *manager, co_manager_open_desc_t *opened_out){	co_manager_open_desc_t opened;	co_rc_t rc;	opened = co_os_malloc(sizeof(*opened));	if (!opened)		return CO_RC(OUT_OF_MEMORY);	co_memset(opened, 0, sizeof(*opened));		rc = co_os_mutex_create(&opened->lock);	if (!CO_OK(rc))		return rc;	rc = co_os_manager_userspace_open(opened);	if (!CO_OK(rc)) {		co_os_mutex_destroy(opened->lock);		co_os_free(opened);		return rc;	}	opened->monitor = NULL;	opened->debug_section = NULL;	opened->ref_count = 1;	opened->active = PTRUE;	co_queue_init(&opened->out_queue);	co_os_mutex_acquire(manager->lock);	co_list_add_head(&opened->node, &manager->opens);	manager->num_opens++;	co_os_mutex_release(manager->lock);	*opened_out = opened;	return CO_RC(OK);}static co_rc_t co_manager_close_(co_manager_t *manager, co_manager_open_desc_t opened){	co_os_manager_userspace_close(opened);	if (opened->monitor != NULL) {		co_monitor_t *mon = opened->monitor;		opened->monitor = NULL;		co_monitor_refdown(mon, PFALSE, opened->monitor_owner);	}	if (opened->debug_section != NULL) {		co_debug_fold(&manager->debug, opened->debug_section);		opened->debug_section = NULL;	}	co_os_mutex_acquire(manager->lock);	co_list_del(&opened->node);	manager->num_opens--;	co_os_mutex_release(manager->lock);	co_os_mutex_destroy(opened->lock);	co_queue_flush(&opened->out_queue);	co_os_free(opened);	return CO_RC(OK);}/* must be called only when manager->lock is locked */co_rc_t co_manager_open_ref(co_manager_open_desc_t opened){	co_rc_t rc = CO_RC(OK);	co_os_mutex_acquire(opened->lock);	if (opened->ref_count == 0)		rc = CO_RC(ERROR);	else		opened->ref_count++;	co_os_mutex_release(opened->lock);	return rc;}co_rc_t co_manager_close(co_manager_t *manager, co_manager_open_desc_t opened){	bool_t close;	co_os_mutex_acquire(opened->lock);	opened->ref_count--;	close = (opened->ref_count == 0);	co_os_mutex_release(opened->lock);	if (close) {		return co_manager_close_(manager, opened);	}	return CO_RC(OK);}co_rc_t co_manager_open_desc_deactive_and_close(co_manager_t *manager, co_manager_open_desc_t opened){	co_rc_t rc;	opened->active = PFALSE;	if (opened->monitor != NULL) {		co_monitor_t *mon = opened->monitor;		int index;		co_os_mutex_acquire(mon->connected_modules_write_lock);		for (index=0; index < CO_MONITOR_MODULES_COUNT; index++) {			if (mon->connected_modules[index] != opened)				continue;						mon->connected_modules[index] = NULL;			co_manager_close(manager, opened);		}		co_os_mutex_release(mon->connected_modules_write_lock);	}		rc = co_manager_close(manager, opened);		return rc;}co_rc_t co_manager_ioctl(co_manager_t *manager, unsigned long ioctl, 			 void *io_buffer, unsigned long in_size,			 unsigned long out_size, unsigned long *return_size,			 co_manager_open_desc_t opened){	co_rc_t rc = CO_RC_OK;	co_monitor_t *cmon = NULL;	*return_size = 0;	switch (ioctl) {	case CO_MANAGER_IOCTL_STATUS: {		co_manager_ioctl_status_t *params;		params = (typeof(params))(io_buffer);		params->state = manager->state;		params->monitors_count = manager->monitors_count;		params->periphery_api_version = CO_LINUX_PERIPHERY_API_VERSION;		params->linux_api_version = CO_LINUX_API_VERSION;		*return_size = sizeof(*params);		return CO_RC(OK);	}	case CO_MANAGER_IOCTL_INFO: {		co_manager_ioctl_info_t *params;		params = (typeof(params))(io_buffer);		params->hostmem_usage_limit = manager->hostmem_usage_limit;		params->hostmem_used = manager->hostmem_used;		*return_size = sizeof(*params);		return CO_RC(OK);	}	case CO_MANAGER_IOCTL_DEBUG: {		co_debug_write_vector_t vec;		vec.vec_size = 0;		vec.size = in_size;		vec.ptr = io_buffer;				co_debug_write_log(&manager->debug, &opened->debug_section, &vec, 1);		return CO_RC(OK);	}	case CO_MANAGER_IOCTL_DEBUG_READER: {		co_manager_ioctl_debug_reader_t *params;		params = (typeof(params))(io_buffer);		params->rc = co_debug_read(&manager->debug, params->user_buffer, 					   params->user_buffer_size, &params->filled);		*return_size = sizeof(*params);		return CO_RC(OK);	}	case CO_MANAGER_IOCTL_DEBUG_LEVELS: {		co_manager_ioctl_debug_levels_t *params;		params = (typeof(params))(io_buffer);		if (params->modify) {			co_global_debug_levels = params->levels;		} else {			params->levels = co_global_debug_levels;		}		*return_size = sizeof(*params);		return CO_RC(OK);	}	default:		break;	}	if (manager->state < CO_MANAGER_STATE_INITIALIZED) {		return CO_RC_ERROR;	}	switch (ioctl) {	case CO_MANAGER_IOCTL_CREATE: {				co_manager_ioctl_create_t *params = (typeof(params))(io_buffer);		if (opened->monitor)			return CO_RC(ERROR);					rc = co_monitor_create(manager, params, &cmon);		if (CO_OK(rc)) {			opened->monitor = cmon;			opened->monitor_owner = PTRUE;		}		params->rc = rc;		*return_size = sizeof(*params);		break;	}	case CO_MANAGER_IOCTL_MONITOR_LIST: {		co_manager_ioctl_monitor_list_t *params = (typeof(params))(io_buffer);		co_monitor_t *monitor = NULL;		co_rc_t rc = CO_RC(OK);		int i = 0;		co_os_mutex_acquire(manager->lock);		co_list_each_entry(monitor, &manager->monitors, node) {			if (i >= CO_MAX_MONITORS) {				/* We don't enforce a limit on create, so just				 * break from the loop and return the first ones				 */				break;			}			params->ids[i++] = monitor->id;		}		co_os_mutex_release(manager->lock);		params->count = i;		params->rc = rc;		*return_size = sizeof(*params);		break;	}	case CO_MANAGER_IOCTL_ATTACH: {		co_manager_ioctl_attach_t *params = (typeof(params))(io_buffer);		co_monitor_t *monitor = NULL;		co_rc_t rc = CO_RC(ERROR);		co_os_mutex_acquire(manager->lock);		co_list_each_entry(monitor, &manager->monitors, node) {			if (monitor->id == params->id) {				monitor->refcount++;				opened->monitor = monitor;				rc = CO_RC(OK);				break;			}		}		co_os_mutex_release(manager->lock);		if (!CO_OK(rc)) {			opened->monitor = NULL;		}		if (opened->monitor) {			int index;			co_module_t module;			co_manager_open_desc_t old_opened;			cmon = opened->monitor;			co_os_mutex_acquire(cmon->connected_modules_write_lock);			for (index=0; index < params->num_modules; index++) {				module = params->modules[index];				old_opened = cmon->connected_modules[module];				if (old_opened)					co_manager_close(manager, old_opened);				cmon->connected_modules[module] = opened;				opened->ref_count++;						}			co_os_mutex_release(cmon->connected_modules_write_lock);		}		*return_size = sizeof(*params);		params->rc = rc;		break;	}	case CO_MANAGER_IOCTL_MONITOR: {		co_manager_ioctl_monitor_t *params = (typeof(params))(io_buffer);		*return_size = sizeof(*params);		if (in_size < sizeof(*params)) {			co_debug_error("monitor ioctl too small! (%ld < %d)", in_size, sizeof(*params));			params->rc = CO_RC(MONITOR_NOT_LOADED);			break;		}				if (!opened->monitor) {			params->rc = CO_RC(MONITOR_NOT_LOADED);			break;		}				in_size -= sizeof(*params);		params->rc = co_monitor_ioctl(opened->monitor, params, in_size, 					      out_size, return_size, opened);		break;	}	default:		return CO_RC(ERROR);	}	return CO_RC(OK);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品免费看| 亚洲男女一区二区三区| 亚洲国产精品精华液ab| 一区二区成人在线观看| 国产一区福利在线| 欧美日本在线一区| 自拍视频在线观看一区二区| 麻豆精品一区二区三区| 欧美日韩日日摸| 国产精品白丝在线| 国产精品中文字幕一区二区三区| 欧美熟乱第一页| 亚洲天堂久久久久久久| 福利一区福利二区| 精品久久久久久无| 免费视频最近日韩| 欧美一区二区国产| 天堂精品中文字幕在线| 欧美午夜精品久久久久久超碰| 国产精品三级电影| 国产91丝袜在线18| 久久久国产精品不卡| 国产一区二区视频在线| 精品日韩一区二区| 久久aⅴ国产欧美74aaa| 精品国产一二三区| 卡一卡二国产精品| 欧美成人三级电影在线| 麻豆成人在线观看| 欧美精品一区二区在线播放 | 亚洲欧洲日产国码二区| 粉嫩av一区二区三区在线播放| 日韩一区二区三免费高清| 午夜精品影院在线观看| 欧美三级中文字幕| 日韩制服丝袜先锋影音| 日韩视频在线永久播放| 青青草原综合久久大伊人精品优势| 欧美精品色一区二区三区| 五月天一区二区| 日韩女优毛片在线| 国产精品影视天天线| 国产亚洲欧美色| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 欧美日韩视频在线观看一区二区三区| 一区二区成人在线观看| 制服丝袜日韩国产| 捆绑调教美女网站视频一区| 精品国产乱码91久久久久久网站| 国产乱对白刺激视频不卡| 国产欧美日韩在线观看| 色综合久久久久久久久| 视频一区在线播放| 久久久亚洲综合| 99re热这里只有精品视频| 亚洲bdsm女犯bdsm网站| 精品国产一区二区三区久久久蜜月| 国产v综合v亚洲欧| 亚洲欧美日韩一区| 欧美一区午夜精品| 懂色av一区二区三区蜜臀| 亚洲一区二区精品视频| 日韩精品一区二区三区四区视频 | 日本网站在线观看一区二区三区 | 欧美一级艳片视频免费观看| 精品一二三四区| 国产精品欧美久久久久无广告| 一本一道波多野结衣一区二区| 日韩av一级电影| 久久精品亚洲精品国产欧美kt∨| 色菇凉天天综合网| 国产真实乱子伦精品视频| 一区二区三区四区蜜桃| 久久精品人人做人人爽97| 在线免费精品视频| 国产精品一区在线观看你懂的| 亚洲欧洲国产日本综合| 欧美一级片免费看| 92精品国产成人观看免费| 免费看欧美女人艹b| 一区二区三区在线视频播放| 日韩欧美国产综合| 欧美亚洲日本一区| 国产成人免费在线视频| 午夜精品久久久久久久99樱桃| 国产精品日日摸夜夜摸av| 日韩欧美另类在线| 欧美日韩国产综合视频在线观看| 成人白浆超碰人人人人| 久久se这里有精品| 日本不卡免费在线视频| 亚洲综合一区二区精品导航| 国产精品国产三级国产| 2020国产精品自拍| 日韩欧美国产wwwww| 欧美午夜电影一区| 色婷婷久久99综合精品jk白丝| 国产成人一区在线| 激情国产一区二区| 日韩va欧美va亚洲va久久| 亚洲成人动漫在线观看| 一区二区高清免费观看影视大全| 日本一区二区动态图| 国产视频一区在线播放| 久久婷婷成人综合色| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美一区二区三区啪啪| 欧美一区二区三区免费在线看| 欧美日韩成人一区二区| 欧美精选午夜久久久乱码6080| 91极品视觉盛宴| 欧美性大战xxxxx久久久| 在线观看视频91| 欧美色手机在线观看| 欧美亚洲禁片免费| 精品视频一区三区九区| 欧美电影在线免费观看| 欧美日本精品一区二区三区| 欧美色手机在线观看| 欧美一区二区三区四区高清| 91精品欧美一区二区三区综合在| 欧美日韩夫妻久久| 欧美不卡一区二区三区四区| 精品99一区二区三区| 中文字幕国产一区| 又紧又大又爽精品一区二区| 亚洲一区国产视频| 蜜桃在线一区二区三区| 国内外成人在线| 成人美女在线观看| 欧美最猛黑人xxxxx猛交| 欧美日产国产精品| 精品福利一二区| 中日韩av电影| 婷婷综合久久一区二区三区| 全部av―极品视觉盛宴亚洲| 国产中文一区二区三区| 91丨porny丨中文| 91精品久久久久久久99蜜桃| 久久久国产精品不卡| 亚洲欧美成aⅴ人在线观看| 亚洲第一福利一区| 国产精品123| 欧美日韩午夜影院| 久久久国产一区二区三区四区小说| 国产精品久久久久久福利一牛影视| 亚洲综合丝袜美腿| 国内久久婷婷综合| 欧美色综合网站| 国产午夜一区二区三区| 亚洲一级二级三级在线免费观看| 美国十次综合导航| 94-欧美-setu| 久久无码av三级| 亚洲va天堂va国产va久| 成人综合在线观看| 日韩女优电影在线观看| 亚洲猫色日本管| 国产精品99久久久久久久女警| 日本精品一区二区三区高清| 欧美精品一区二区久久婷婷| 亚洲精品国产无套在线观| 国产高清精品网站| 欧美高清视频不卡网| 亚洲卡通欧美制服中文| 国产成人丝袜美腿| 在线成人高清不卡| 亚洲美女淫视频| 成人免费毛片嘿嘿连载视频| 日韩欧美国产一区二区三区| 一区二区三区欧美在线观看| 国产精品77777竹菊影视小说| 欧美精品日韩一本| 一区二区成人在线视频| 成人丝袜视频网| 精品久久国产字幕高潮| 婷婷开心激情综合| 欧美系列一区二区| 亚洲欧美韩国综合色| 国产传媒欧美日韩成人| 精品理论电影在线观看| 日本伊人色综合网| 欧美日韩免费一区二区三区 | 日韩精品乱码免费| 欧美亚洲禁片免费| 亚洲精品视频一区二区| 成人精品在线视频观看| 久久色视频免费观看| 激情深爱一区二区| 精品福利一区二区三区免费视频| 三级欧美在线一区| 欧美一区二区视频在线观看2022| 亚洲网友自拍偷拍| 欧美性感一类影片在线播放| 亚洲欧美日韩一区| 色一区在线观看| 亚洲在线观看免费| 欧美精品久久99久久在免费线 | 国产不卡视频在线观看| 日韩一级大片在线|