// TODO: g_start_time should be under some kind of mutex.
if (blk && get_block(blk)->head.ts < g_start_time) {
mutex_lock(&g_block_mutex);
+ get_block(blk)->head.tid = 0;
queue_push(&g_free_q, blk);
g_threads[i].block = 0;
// TODO: The userspace might very well be using this block right now.
queue_push(&g_free_q, blk);
blk = queue_pop(&g_free_q);
g_threads[tid].block = blk;
- mutex_unlock(&g_block_mutex);
if (!blk) {
if ((g_err_count++ % 10000) < 3)
pr_info("[NO MEMORY] tid:%d free:%d err:%d", tid, g_free_q.count, g_err_count);
+ mutex_unlock(&g_block_mutex);
return -ENOMEM;
}
block->head.tid = tid;
block->head.offset = 0;
block->head.ts = g_start_time;
+ mutex_unlock(&g_block_mutex);
return (long)blk;
}
if (p)
page = virt_to_page((unsigned long)p);
else
- // TODO: There is no reason for people to be able to write to g_threads.
- page = virt_to_page((unsigned long)g_threads);
+ return -EINVAL;
return remap_pfn_range(vma, vma->vm_start, page_to_pfn(page), size, vma->vm_page_prot);
}