求烟欲百度云压缩包损坏,不要压缩包

Linux 源码分析(242)
在smmu初始化的时候会调用
struct iova *
alloc_iova(struct iova_domain *iovad, unsigned long size,
&& &unsigned long limit_pfn,
&& &bool size_aligned)
&& &struct iova *new_
&& &new_iova = alloc_iova_mem();
&& &if (!new_iova)
&& &&& &return NULL;
&& &ret = __alloc_and_insert_iova_range(iovad, size, limit_pfn,
&& &&& &&& &new_iova, size_aligned);
&& &if (ret) {
&& &&& &free_iova_mem(new_iova);
&& &&& &return NULL;
&& &return new_
这个函数会按照limit_pfn,将会按照limit_pfn将nova插入到rb tree中
在alloc_iova 中首先用alloc_iova_mem 申请一块内存.alloc_iova_mem的实现比较简单,是通过kmem_cache_alloc来申请的。
struct iova *alloc_iova_mem(void)
&& &return kmem_cache_alloc(iova_cache, GFP_ATOMIC);
在__alloc_and_insert_iova_range 中首先根据limit_pfn 找到要插入rb tree的前一个节点。这是通过调用__get_cached_rbnode 来实现。
static struct rb_node *
__get_cached_rbnode(struct iova_domain *iovad, unsigned long *limit_pfn)
&& &if ((*limit_pfn != iovad-&dma_32bit_pfn) ||
&& &&& &(iovad-&cached32_node == NULL))
&& &&& &return rb_last(&iovad-&rbroot);
&& &else {
&& &&& &struct rb_node *prev_node = rb_prev(iovad-&cached32_node);
&& &&& &struct iova *curr_iova =
&& &&& &&& &container_of(iovad-&cached32_node, struct iova, node);
&& &&& &*limit_pfn = curr_iova-&pfn_lo - 1;
&& &&& &return prev_
在__get_cached_rbnode 中一般iovad-&dma_32bit_pfn == 4G,一般也没人申请这么大的size,所以不会从rb tree的最后一个node开始找,因此一般走else的case,如果rb_prev 找到前一个node,然后根据这个node的pfn_lo 重新调整limit_pfn
下面这一段有根据调整过后的limit_pfn来重新查找rb tree。感觉这段code只要是获得limit_pfn的size和pad_size
&& &while (curr) {
&& &&& &struct iova *curr_iova = container_of(curr, struct iova, node);
&& &&& &if (limit_pfn & curr_iova-&pfn_lo)
&& &&& &&& &goto move_
&& &&& &else if (limit_pfn & curr_iova-&pfn_hi)
&& &&& &&& &goto adjust_limit_
&& &&& &else {
&& &&& &&& &if (size_aligned)
&& &&& &&& &&& &pad_size = iova_get_pad_size(size, limit_pfn);
&& &&& &&& &if ((curr_iova-&pfn_hi + size + pad_size) &= limit_pfn)
&& &&& &&& &&& &&& &/* found a free slot */
adjust_limit_pfn:
&& &&& &limit_pfn = curr_iova-&pfn_lo - 1;
move_left:
&& &&& &prev =
&& &&& &curr = rb_prev(curr);
然后根据找到的limit_pfn和size,建立一个新的节点,这个节点的memory就是在alloc_iova_mem 中申请
&& &/* pfn_lo will point to size aligned address if size_aligned is set */
&& &new-&pfn_lo = limit_pfn - (size + pad_size) + 1;
&& &new-&pfn_hi = new-&pfn_lo + size - 1;
&& &/* Insert the new_iova into domain rbtree by holding writer lock */
&& &/* Add new node and rebalance tree. */
&& &&& &struct rb_node **entry, *parent = NULL;
&& &&& &/* If we have 'prev', it's a valid place to start the
&& &&& &&& insertion. Otherwise, start from the root. */
&& &&& &if (prev)
&& &&& &&& &entry = &
&& &&& &else
&& &&& &&& &entry = &iovad-&rbroot.rb_
&& &&& &/* Figure out where to put new node */
&& &&& &while (*entry) {
&& &&& &&& &struct iova *this = container_of(*entry,
&& &&& &&& &&& &&& &&& &&& &struct iova, node);
&& &&& &&& &parent = *
&& &&& &&& &if (new-&pfn_lo & this-&pfn_lo)
&& &&& &&& &&& &entry = &((*entry)-&rb_left);
&& &&& &&& &else if (new-&pfn_lo & this-&pfn_lo)
&& &&& &&& &&& &entry = &((*entry)-&rb_right);
&& &&& &&& &else
&& &&& &&& &&& &BUG(); /* this should not happen */
&& &&& &/* Add new node and rebalance tree. */
&& &&& &rb_link_node(&new-&node, parent, entry);
&& &&& &rb_insert_color(&new-&node, &iovad-&rbroot);
&& &__cached_rbnode_insert_update(iovad, saved_pfn, new);
最后就将新的iova插入到rb tree中.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:34236次
积分:4740
积分:4740
排名:第5542名
原创:456篇
(39)(46)(82)(44)(47)(27)(8)(4)(10)(163)(11)ovai是什么意思_ovai在线翻译_ovai什么意思_ovai的意思_ovai的翻译_英语单词大全_911查询
ovai是什么意思
输入英文单词或中文词语查询其翻译
ovai是什么意思 ovai在线翻译 ovai什么意思 ovai的意思 ovai的翻译 ovai的解释 ovai的发音 ovai的同义词 ovai的反义词 ovai的例句 ovai的相关词组
ovaiovai 双语例句1. OvaI Office.&&&&美国总统办公室2. There was aiways time to piay in the ovai office.&&&&总统办公室内总有玩乐时间。ovai是什么意思,ovai在线翻译,ovai什么意思,ovai的意思,ovai的翻译,ovai的解释,ovai的发音,ovai的同义词,ovai的反义词,ovai的例句,ovai的相关词组,ovai意思是什么,ovai怎么翻译,单词ovai是什么意思常用英语教材考试英语单词大全 (7本教材)
出国英语单词大全 (5本教材)
大学英语单词大全 (13本教材)
高中英语单词大全 (6本教材)
初中英语单词大全 (13本教材)
小学英语单词大全 (33本教材)
别人正在查
911查询 全部查询 网址:
(共20个)占卜求签
(共17个)民俗文化
(共16个)交通出行
(共10个)学习应用
(共26个)休闲娱乐
(共10个)站长工具
(共8个)身体健康
&2017  京ICP备号-6 京公网安备30 

我要回帖

更多关于 怎样解压百度云压缩包 的文章

 

随机推荐