Example #1
0
static ssize_t kmsg_read(fildes_t* file, uint8_t* buffer, size_t size)
{
	size_t start, i = 0;

	if (BUILTIN_EXPECT(!buffer, 0))
		return -EINVAL;
	if (BUILTIN_EXPECT(!size, 0))
		return 0;

	if (kmessages[(atomic_int32_read(&kmsg_counter) + 1) % KMSG_SIZE] == 0)
		start = 0;
	else
		start = (atomic_int32_read(&kmsg_counter) + 1) % KMSG_SIZE;

	if (((start + file->offset) % KMSG_SIZE) == atomic_int32_read(&kmsg_counter))
		return 0;
	if (file->offset >= KMSG_SIZE)
		return 0;

	for(i=0; i<size; i++, file->offset++) {
		buffer[i] = kmessages[(start + file->offset) % KMSG_SIZE];
		if (((start + file->offset) % KMSG_SIZE) == atomic_int32_read(&kmsg_counter))
			return i;
	}

	return size;
}
Example #2
0
int smp_start(void)
{
	int32_t core_id = atomic_int32_read(&current_boot_id);

	LOG_INFO("Try to initialize processor (local id %d)\n", core_id);

	cpu_detection();

	atomic_int32_inc(&cpu_online);

	irq_enable();

	return smp_main();
}