struct kfifo *kfifo_init(unsigned char *buffer, unsigned int size, gfp_t gfp_mask, spinlock_t *lock) { struct kfifo *fifo; /* size must be a power of 2 */ BUG_ON(size&(size - 1)); fifo = kmalloc(sizeof(struct kfifo), gfp_mask); if (!fifo) return ERR_PTR(-ENOMEM); fifo...
执行获取新的UID,并将其加到idr 该方法使用idp所指的idr去分配一个新的UID,并且将其关联到指针ptr上 成功时,该方法返回0,并且匠心的UID存于starting_id。错误时,返回非0的错误码,错误码是-EAGAIN说明你需要(再次)调用idr_pre_get();如果idr已满,错误码为-ENOSPC static int idr_get_new_above_int(struct ...
kfifo.h kgdb.h khugepaged.h klist.h kmemleak.h kmod.h kmsg_dump.h kobj_map.h kobject.h kobject_ns.h kprobes.h kref.h ks0108.h ks8842.h ks8851_mll.h ksm.h kthread.h ktime.h kvm_dirty_ring.h kvm_host.h kvm_irqfd.h kvm_para.h kvm_types.h l2tp.h ...
kfifo.h kgdb.h khugepaged.h klist.h kmemleak.h kmod.h kmsan-checks.h kmsan.h kmsan_string.h kmsan_types.h kmsg_dump.h kobj_map.h kobject.h kobject_api.h kobject_ns.h kprobes.h kref.h kref_api.h ks0108.h ks8842.h ks8851_mll.h ksm.h kstrtox.h...
container_of(ptr, type, member) 1. 2. 3. 4. 5. 6. 7. 8. 定义/创建一个链表(LIST_HEAD_INIT) 链表需要在使用前初始化。因为多数元素都是动态创建的(也许这就是需要链表的原因),因此最常见的方式是在运行时初始化链表,如下图所示 如果一个结构在编译期静态创建,而你需要在其中给出一个链表的直接...
struct kfifo *fifo; /* size must be a power of 2 */ BUG_ON(size & (size - 1)); fifo = kmalloc(sizeof(struct kfifo), gfp_mask); if (!fifo) return ERR_PTR(-ENOMEM); fifo->buffer = buffer; fifo->size = size; fifo->in = fifo->out = 0; ...
static int idr_get_new_above_int(struct idr *idp, void *ptr, int starting_id) { struct idr_layer *p, *new; int layers, v, id; unsigned long flags; id = starting_id; build_up: p = idp->top; layers = idp->layers; if (unlikely(!p)) { ...