static inline void idr_init(struct idr *idr); 2.2 申请IDR static inline int idr_alloc(struct idr *idr, void *ptr, int start, int end, gfp_t gfp); 返回IDR 2.3 查找IDR static inline void *idr_find(const struct idr *id
例如,这里idr_alloc返回的id与i2c_adapter建立了索引。idr_alloc的第三个参数指定返回ID的最小值(闭区间),第四个参数指定返回ID的最大值(开区间),即idr_alloc返回的ID大于等于第三个参数,而且必须小于第四个参数。在这个函数中,第三个参数为__i2c_first_dynamic_bus_num,所以返回的id必然是大于等于__i2c_fir...
例如,这里idr_alloc返回的id与i2c_adapter建立了索引。idr_alloc的第三个参数指定返回ID的最小值(闭区间),第四个参数指定返回ID的最大值(开区间),即idr_alloc返回的ID大于等于第三个参数,而且必须小于第四个参数。在这个函数中,第三个参数为__i2c_first_dynamic_bus_num,所以返回的id必然是大于等于__i2c_fir...
mutex_lock(&core_lock); id= idr_alloc(&i2c_adapter_idr, adapter, __i2c_first_dynamic_bus_num,0, GFP_KERNEL); mutex_unlock(&core_lock);if(id <0)returnid; adapter->nr =id;returni2c_register_adapter(adapter); }/** * __i2c_add_numbered_adapter - i2c_add_numbered_adapter where nr...
if (!idr_pre_get(&dca_idr, GFP_KERNEL)) return -ENOMEM; idr_preload(GFP_KERNEL); spin_lock(&dca_idr_lock); err = idr_get_new(&dca_idr, dca, &dca->id);ret = idr_alloc(&dca_idr, dca, 0, 0, GFP_NOWAIT); if (ret >= 0) dca->id = ret;spin...
上图中只是使用了IDR的32个数组表示,并没有给出IDR的位图以及层数标志,下面给出相应的数据结构: IDR 数据结构: struct idr_layer { //位图,ary数组结构哪个有效...{ //IDR层数头,实际上就是32叉树 struct idr_layer __rcu *...
idr_preload(GFP_KERNEL); spin_lock_irq(&pool->lock); id = idr_alloc(&pool->worker_idr, NULL, 0, 0, GFP_NOWAIT); spin_unlock_irq(&pool->lock); idr_preload_end(); if (id < 0) goto fail; worker = alloc_worker(); if (!worker) ...
dev.of_node = pdev_node; i2c_add_adapter(&i2c->adap) | if DTS 定义了i2cX的aliase://静态指定总线号 | | adapter->nr=of_alias_get_id(dev->of_node, "i2c") | | //通过在aliases节点指定i2cX=&i2cX,相当于静态指定该adapter nr | | __i2c_add_numbered_adapter | | | idr_alloc /...
(ss->early_init){struct cgroup_subsys_state*css=init_css_set.subsys[ss->id];css->id=cgroup_idr_alloc(&ss->css_idr,css,1,2,GFP_KERNEL);BUG_ON(css->id<0);}else{cgroup_init_subsys(ss,false);}list_add_tail(&init_css_set.e_cset_node[ssid],&cgrp_dfl_root.cgrp.e_csets[ssid...
GICC_IIDR RO 待定 CPU接口识别寄存器 0x1000 GICC_DIR WO 禁用中断寄存器 结合上表常用的CPU接口寄存器介绍如下: 中断优先掩码寄存器GICC_PMR 在上一小节我们讲解了GIC分发器的中断优先级设置寄存器GICD_IPRIORITYRn,每个中断占8位。这里的中断优先级掩码寄存器GICC_PMR用8位代表一个中断阈值。高于这个优先级的中...