28,23 → 28,98 |
*/ |
|
#include <print.h> |
|
#include <arch.h> |
#include <test.h> |
#include <proc/tasklet.h> |
#include <synch/waitq.h> |
|
#include <cpu.h> |
#include <proc/thread.h> |
#include <arch/types.h> |
#include <config.h> |
|
static void func(void *data) |
{ |
printf("%s", data); |
printf("cpu%d: %s",CPU->id, data); |
} |
|
bool gquiet; |
|
static void running_tasklet(void * data) |
{ |
waitq_t wq; |
waitq_initialize(&wq); |
|
tasklet_descriptor_t *tasklet_desc; |
//before we start we need to register a tasklet |
if (!gquiet) |
printf("Registering tasklet..."); |
if (!gquiet) |
tasklet_desc=tasklet_register(&func, "\nTasklet called and received data from second thread\n"); |
else |
tasklet_desc=tasklet_register(&func, ""); |
if (!gquiet) |
printf("Done!\n"); |
|
//first we'll try disabling the tasklet |
if (!gquiet) |
printf("Disabling tasklet..."); |
tasklet_disable(tasklet_desc); |
if (!gquiet) |
printf("Done!\n"); |
|
//we'll schedule the disabled tasklet |
if (!gquiet) |
printf("Scheduling tasklet..."); |
tasklet_schedule(tasklet_desc); |
if (!gquiet) |
printf("Done!\n"); |
|
//and we'll wait if it gets called. It shouldn't however, because it's disabled |
if (!gquiet) |
printf("Waiting 1s...\n"); |
waitq_sleep_timeout(&wq,(uint32_t) 1000000,0); |
if (!gquiet) |
printf("Done!\n"); |
|
//then we'll try to enable it |
if (!gquiet) |
printf("Enabling tasklet..."); |
tasklet_enable(tasklet_desc); |
if (!gquiet) |
printf("Done!\n"); |
|
//and wait if it gets called this time. It should because it's enabled |
if (!gquiet) |
printf("Waiting 1s...\n"); |
waitq_sleep_timeout(&wq,(uint32_t) 1000000,0); |
if (!gquiet) |
printf("Done!\n"); |
|
//finally we'll free the tasklet structure |
if (!gquiet) |
printf("Freeing..."); |
tasklet_free(tasklet_desc); |
if (!gquiet) |
printf("Done!\n"); |
} |
|
char * test_tasklet1(bool quiet) |
{ |
gquiet = quiet; |
waitq_t wq; |
waitq_initialize(&wq); |
tasklet_descriptor_t *tasklet_desc; |
thread_t* second_thread; |
#ifdef CONFIG_SMP |
if (config.cpu_active >1) { |
second_thread = thread_create(&running_tasklet, NULL, TASK, THREAD_FLAG_WIRED,"running tasklet", false); |
if (CPU->id == 0) |
second_thread->cpu = &cpus[1]; |
else |
second_thread->cpu = &cpus[0]; |
thread_ready(second_thread); |
} |
#endif |
|
//before we start we need to register a tasklet |
if (!quiet) |
70,10 → 145,10 |
if (!quiet) |
printf("Done!\n"); |
|
//and we'll wait if it gets called. It shouldn't however because it's disabled |
//and we'll wait if it gets called. It shouldn't however, because it's disabled |
if (!quiet) |
printf("Waiting 5s..."); |
waitq_sleep_timeout(&wq,(uint32_t) 5000000,0); |
printf("Waiting 1s...\n"); |
waitq_sleep_timeout(&wq,(uint32_t) 1000000,0); |
if (!quiet) |
printf("Done!\n"); |
|
84,10 → 159,10 |
if (!quiet) |
printf("Done!\n"); |
|
//and wait if it gets called this time. It should beacause it's enabled |
//and wait if it gets called this time. It should because it's enabled |
if (!quiet) |
printf("Waiting 5s..."); |
waitq_sleep_timeout(&wq,(uint32_t) 5000000,0); |
printf("Waiting 1s...\n"); |
waitq_sleep_timeout(&wq,(uint32_t) 1000000,0); |
if (!quiet) |
printf("Done!\n"); |
|