您的位置:首页 > 其它

spice server qxl worker 及memslot

2013-07-04 12:51 260 查看
1.

结构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

主要功能:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: