spice server qxl worker 及memslot
2013-07-04 12:51
260 查看
1.
结构memslot
暂且称为内存槽结构,在后面物理地址变为虚拟地址的过程中,该结构起了很大的作用。
2.
RedMemSlotInfo 结构在获取命令的虚拟地址用到
3.red_process_commands() 函数
主要功能:1)调用get_command函数从全局命令树中获取一个命令,如果获取不到,那么调用req_cmd_notification函数重新往命令树中添加命令
2)如果获取到了,那么判断获取的命令是什么类型的
3)如果是QXL_CMD_DRAW类型的,定义一个新的RedDrawable结构,并为它申请内存
4)通过命令ext_cmd 的参数信息获取命令的实际内容
5)
4.red_push()函数
主要功能:1)
5.qxl interface 函数调用及功能
(1)get_init_info 在red_dispatcher_init函数调用的 在创建通道之前调用
主要功能:就是利用这个函数获取memslot的初始化信息放到QXLDevInitInfo 这个结构体成员info中
(2) attache_worker 在red_dispatcher_init函数调用的 创建通道之后调用
主要功能:是 把qxl worker注册到qxl instance中,然后在red_worker中添加add_memslot ,并且在red_worker中建立主显示表面,并调用start函数
(3)get_command 在red_worker_main中的red_process_commands函数中调用
主要功能:是从全局命令树commands中获取一个命令
(4)req_cmd_notification 在red_process_commands函数中调用
主要功能:生成新的命令,往全局命令树中添加命令
6.qxl worker 函数调用的地方及它们的功能(这些函数都是在red_dispatcher_init中初始化的)
(1) create_primary_surface(对应handle_dev_create_primary_surface_async函数)
调用位置:在qxl interface中的 attach_worker函数中调用
在产生命令的函数produce_command中调用
主要功能:是在red_worker中创建主显示表面
(主表面是什么东西呢,还有后面要建立的从表面,这些都是什么啊,主表面就是屏幕上可以看到的显示记忆体,图像画在上面就可以显示在屏幕上,还有后备表面,这是和主表面做显示切换的表面,离屏表面是屏幕上看不见的表面它用来存放图像数据。 用另一句话说就是:一般设立一个主表面、后备表面和若干个离屏表面,主表面就是用户看到的显示图像的表面,也就是当前显示的表面,后备表面是主表面的附带缓冲表面,用来存储、处理即将显示的图像,离屏表面用来装载最初的图像数据,)
(2)add_memslot 也是在qxl interface中的 attach_worker函数中调用
主要功能:是在red_worker中添加memslot
(3)del_memslot
主要功能:
(4)start 也是在qxl interface中的 attach_worker函数中调用
主要功能:是判断是否处于迁移的状态,设置red_worker中的参数runing为true 使red_worker的工作标志位为真
(5) wakeup在do_wakeup函数中调用的,do_wakeup是test中wakeup_timer定时器的执行函数 ( 对应red_worker_main的handle_dev_wakeup函数)
主要功能:清楚worker->pending的某一位 ,并且对wakeup_counter计数器加1
(6)oom函数 未调用
主要功能:
(7)stop 未调用 (对应red_worker_main的 handle_dev_stop函数)
主要功能:把worker->runing置为true, 还有许多其他工作
待更新,,,,,,
(8)destroy_surface
主要功能:
(9)destory_primary_surface
主要功能:
(10)create_primary_surface
主要功能:
(11)update_area
主要功能:
(12)reset_image_cache
主要功能:
(13)reset_cursor
主要功能:
(14)destory_surface_wait
主要功能:
(15)loadvm_commands
主要功能:
结构memslot
typedef struct MemSlot { int generation; // 生成个数?? unsigned long virt_start_addr; //虚地址开始 unsigned long virt_end_addr; //虚地址结束 long address_delta; // 地址偏移 } MemSlot;
暂且称为内存槽结构,在后面物理地址变为虚拟地址的过程中,该结构起了很大的作用。
2.
typedef struct RedMemSlotInfo { MemSlot **mem_slots; // 元素为memslot的二维数组 uint32_t num_memslots_groups; //一维个数 uint32_t num_memslots; //二维个数 uint8_t mem_slot_bits; // 表示memslot的位 uint8_t generation_bits; // 表示生成的位 uint8_t memslot_id_shift; // id移动 uint8_t memslot_gen_shift; // gen移动 uint8_t internal_groupslot_id; // 插入组id unsigned long memslot_gen_mask; //gen掩码 unsigned long memslot_clean_virt_mask; //清楚虚拟掩码 } RedMemSlotInfo;
RedMemSlotInfo 结构在获取命令的虚拟地址用到
3.red_process_commands() 函数
主要功能:1)调用get_command函数从全局命令树中获取一个命令,如果获取不到,那么调用req_cmd_notification函数重新往命令树中添加命令
2)如果获取到了,那么判断获取的命令是什么类型的
3)如果是QXL_CMD_DRAW类型的,定义一个新的RedDrawable结构,并为它申请内存
4)通过命令ext_cmd 的参数信息获取命令的实际内容
5)
4.red_push()函数
主要功能:1)
5.qxl interface 函数调用及功能
(1)get_init_info 在red_dispatcher_init函数调用的 在创建通道之前调用
主要功能:就是利用这个函数获取memslot的初始化信息放到QXLDevInitInfo 这个结构体成员info中
(2) attache_worker 在red_dispatcher_init函数调用的 创建通道之后调用
主要功能:是 把qxl worker注册到qxl instance中,然后在red_worker中添加add_memslot ,并且在red_worker中建立主显示表面,并调用start函数
(3)get_command 在red_worker_main中的red_process_commands函数中调用
主要功能:是从全局命令树commands中获取一个命令
(4)req_cmd_notification 在red_process_commands函数中调用
主要功能:生成新的命令,往全局命令树中添加命令
6.qxl worker 函数调用的地方及它们的功能(这些函数都是在red_dispatcher_init中初始化的)
(1) create_primary_surface(对应handle_dev_create_primary_surface_async函数)
调用位置:在qxl interface中的 attach_worker函数中调用
在产生命令的函数produce_command中调用
主要功能:是在red_worker中创建主显示表面
(主表面是什么东西呢,还有后面要建立的从表面,这些都是什么啊,主表面就是屏幕上可以看到的显示记忆体,图像画在上面就可以显示在屏幕上,还有后备表面,这是和主表面做显示切换的表面,离屏表面是屏幕上看不见的表面它用来存放图像数据。 用另一句话说就是:一般设立一个主表面、后备表面和若干个离屏表面,主表面就是用户看到的显示图像的表面,也就是当前显示的表面,后备表面是主表面的附带缓冲表面,用来存储、处理即将显示的图像,离屏表面用来装载最初的图像数据,)
(2)add_memslot 也是在qxl interface中的 attach_worker函数中调用
主要功能:是在red_worker中添加memslot
(3)del_memslot
主要功能:
(4)start 也是在qxl interface中的 attach_worker函数中调用
主要功能:是判断是否处于迁移的状态,设置red_worker中的参数runing为true 使red_worker的工作标志位为真
(5) wakeup在do_wakeup函数中调用的,do_wakeup是test中wakeup_timer定时器的执行函数 ( 对应red_worker_main的handle_dev_wakeup函数)
主要功能:清楚worker->pending的某一位 ,并且对wakeup_counter计数器加1
(6)oom函数 未调用
主要功能:
(7)stop 未调用 (对应red_worker_main的 handle_dev_stop函数)
主要功能:把worker->runing置为true, 还有许多其他工作
待更新,,,,,,
(8)destroy_surface
主要功能:
(9)destory_primary_surface
主要功能:
(10)create_primary_surface
主要功能:
(11)update_area
主要功能:
(12)reset_image_cache
主要功能:
(13)reset_cursor
主要功能:
(14)destory_surface_wait
主要功能:
(15)loadvm_commands
主要功能:
相关文章推荐
- spice server qxl red_worker_main()代码分析
- spice server qxl red_worker_main()代码分析
- spice server qxl red_worker_main()代码分析
- spice server qxl red_worker_main()代码分析
- spice client 和 spice server 通信机制
- spice server tools
- Netty里面的Boss和Worker【Server篇】
- WebWorker和Server-Sent Events和HTML5 WebSocket
- gitlab解决#<Unicorn::HttpServer:0x007f854b8b8ad0>: worker (pid: 29607) exceeds memory limit
- spice-guest-tools(vdagent vdservice qxl virtio)编译笔记(一)
- spice server mjpeg
- SPICE协议之RedWorker线程
- Ubuntu server 11.04 下配置Apache的Worker模式+mod_fcgid+APC
- Apache HTTP Server 中prefork和worker工作模式(二)
- Nova如何配置虚拟机使用Spice+QXL ?
- Error on initialization of server mk-worker (stormconf.ser is missing)
- Ubuntu server 11.04 下配置Apache的Worker模式+mod_fcgid+APC
- Spice代码阅读一:Spice Client 与 Spice Server 通道建立过程
- compile spice qxl driver for windows
- Unable to start debugging on the web server. The IIS worker process for the launched URL is not currently running