struct workqueue *workqueue_create(struct workqueue *wq, int flags) { KOBJ_CREATE(wq, flags, WORKQUEUE_KMALLOC); heap_create(&wq->tasks, HEAP_LOCKLESS, HEAPMODE_MAX); spinlock_create(&wq->lock); return wq; }
struct net_packet *net_packet_create(struct net_packet *packet, int flags) { KOBJ_CREATE(packet, flags, NP_FLAG_ALLOC); TRACE_MSG("net.packet", "creating new packet %x\n", packet); packet->count = 1; packet->data_header = packet->data; return packet; }
struct mutex *mutex_create(struct mutex *m, unsigned flags) { KOBJ_CREATE(m, flags, MT_ALLOC); m->lock = ATOMIC_VAR_INIT(0); m->magic = MUTEX_MAGIC; blocklist_create(&m->blocklist, 0, "mutex"); return m; }
struct ticker *ticker_create(struct ticker *ticker, int flags) { KOBJ_CREATE(ticker, flags, TICKER_KMALLOC); ticker->tick = 0; heap_create(&ticker->heap, HEAP_LOCKLESS, HEAPMODE_MIN); spinlock_create(&ticker->lock); return ticker; }
struct stack *stack_create(struct stack *stack, int flags) { KOBJ_CREATE(stack, flags, STACK_KMALLOC); spinlock_create(&stack->lock); memset(&__sentry, 0, sizeof(__sentry)); stack->top = &__sentry; return stack; }
struct hash *hash_create(struct hash *h, int flags, size_t length) { KOBJ_CREATE(h, flags, HASH_ALLOC); mutex_create(&h->lock, 0); if(length > 0) h->table = kmalloc(length * sizeof(struct linkedlist *)); h->length = length; return h; }
struct charbuffer *charbuffer_create(struct charbuffer *cb, int flags, size_t cap) { KOBJ_CREATE(cb, flags, CHARBUFFER_ALLOC); if(!(flags & CHARBUFFER_LOCKLESS)) mutex_create(&cb->lock, 0); cb->buffer = kmalloc(sizeof(unsigned char) * cap); blocklist_create(&cb->readers, 0, "charbuffer-readers"); blocklist_create(&cb->writers, 0, "charbuffer-writers"); cb->cap = cap; return cb; }