summaryrefslogtreecommitdiff
path: root/cts/task
diff options
context:
space:
mode:
Diffstat (limited to 'cts/task')
-rw-r--r--cts/task/cts.tasklist2
-rw-r--r--cts/task/cts.testlist2
-rw-r--r--cts/task/dut.c26
-rw-r--r--[l---------]cts/task/th.c145
4 files changed, 159 insertions, 16 deletions
diff --git a/cts/task/cts.tasklist b/cts/task/cts.tasklist
index 6477d74c2c..1adbf211ec 100644
--- a/cts/task/cts.tasklist
+++ b/cts/task/cts.tasklist
@@ -1,4 +1,4 @@
-/* Copyright 2013 The Chromium OS Authors. All rights reserved.
+/* Copyright 2013 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
diff --git a/cts/task/cts.testlist b/cts/task/cts.testlist
index c4b7bc3231..3ad8e33928 100644
--- a/cts/task/cts.testlist
+++ b/cts/task/cts.testlist
@@ -1,4 +1,4 @@
-/* Copyright 2016 The Chromium OS Authors. All rights reserved.
+/* Copyright 2016 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
diff --git a/cts/task/dut.c b/cts/task/dut.c
index 71fe4050ec..257809b4b8 100644
--- a/cts/task/dut.c
+++ b/cts/task/dut.c
@@ -1,4 +1,4 @@
-/* Copyright 2013 The Chromium OS Authors. All rights reserved.
+/* Copyright 2013 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*
@@ -70,15 +70,15 @@ enum cts_rc test_task_switch(void)
}
if (wake_count[0] != repeat_count || wake_count[1] != repeat_count) {
- CPRINTS("Unexpected counter values: %d %d %d",
- wake_count[0], wake_count[1], wake_count[2]);
+ CPRINTS("Unexpected counter values: %d %d %d", wake_count[0],
+ wake_count[1], wake_count[2]);
return CTS_RC_FAILURE;
}
/* TODO: Verify no tasks are ready, no events are pending. */
- if (*task_get_event_bitmap(TASK_ID_A)
- || *task_get_event_bitmap(TASK_ID_B)
- || *task_get_event_bitmap(TASK_ID_C)) {
+ if (*task_get_event_bitmap(TASK_ID_A) ||
+ *task_get_event_bitmap(TASK_ID_B) ||
+ *task_get_event_bitmap(TASK_ID_C)) {
CPRINTS("Events are pending");
return CTS_RC_FAILURE;
}
@@ -102,17 +102,17 @@ enum cts_rc test_task_priority(void)
return CTS_RC_FAILURE;
}
- if (wake_count[0] != repeat_count - 1
- || wake_count[1] != repeat_count - 1) {
- CPRINTS("Unexpected counter values: %d %d %d",
- wake_count[0], wake_count[1], wake_count[2]);
+ if (wake_count[0] != repeat_count - 1 ||
+ wake_count[1] != repeat_count - 1) {
+ CPRINTS("Unexpected counter values: %d %d %d", wake_count[0],
+ wake_count[1], wake_count[2]);
return CTS_RC_FAILURE;
}
/* TODO: Verify no tasks are ready, no events are pending. */
- if (*task_get_event_bitmap(TASK_ID_A)
- || *task_get_event_bitmap(TASK_ID_B)
- || *task_get_event_bitmap(TASK_ID_C)) {
+ if (*task_get_event_bitmap(TASK_ID_A) ||
+ *task_get_event_bitmap(TASK_ID_B) ||
+ *task_get_event_bitmap(TASK_ID_C)) {
CPRINTS("Events are pending");
return CTS_RC_FAILURE;
}
diff --git a/cts/task/th.c b/cts/task/th.c
index 41eab28462..257809b4b8 120000..100644
--- a/cts/task/th.c
+++ b/cts/task/th.c
@@ -1 +1,144 @@
-dut.c \ No newline at end of file
+/* Copyright 2013 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ * Tasks for scheduling test.
+ */
+
+#include "common.h"
+#include "cts_common.h"
+#include "task.h"
+#include "timer.h"
+
+static int repeat_count;
+static int wake_count[3];
+
+void clean_state(void)
+{
+ wake_count[0] = wake_count[1] = wake_count[2] = 0;
+}
+
+void task_abc(void *data)
+{
+ int task_id = task_get_current();
+ int id = task_id - TASK_ID_A;
+ task_id_t next = task_id + 1;
+
+ if (next > TASK_ID_C)
+ next = TASK_ID_A;
+
+ task_wait_event(-1);
+
+ CPRINTS("%c Starting", 'A' + id);
+ cflush();
+
+ while (1) {
+ wake_count[id]++;
+ if (id == 2 && wake_count[id] == repeat_count) {
+ task_set_event(TASK_ID_CTS, TASK_EVENT_WAKE);
+ task_wait_event(0);
+ } else {
+ task_set_event(next, TASK_EVENT_WAKE);
+ task_wait_event(0);
+ }
+ }
+}
+
+void task_tick(void *data)
+{
+ task_wait_event(-1);
+ ccprintf("\n[starting Task T]\n");
+
+ /* Wake up every tick */
+ while (1)
+ /* Wait for timer interrupt message */
+ usleep(3000);
+}
+
+enum cts_rc test_task_switch(void)
+{
+ uint32_t event;
+
+ repeat_count = 3000;
+
+ task_wake(TASK_ID_A);
+ event = task_wait_event(5 * SECOND);
+
+ if (event != TASK_EVENT_WAKE) {
+ CPRINTS("Woken up by unexpected event: 0x%08x", event);
+ return CTS_RC_FAILURE;
+ }
+
+ if (wake_count[0] != repeat_count || wake_count[1] != repeat_count) {
+ CPRINTS("Unexpected counter values: %d %d %d", wake_count[0],
+ wake_count[1], wake_count[2]);
+ return CTS_RC_FAILURE;
+ }
+
+ /* TODO: Verify no tasks are ready, no events are pending. */
+ if (*task_get_event_bitmap(TASK_ID_A) ||
+ *task_get_event_bitmap(TASK_ID_B) ||
+ *task_get_event_bitmap(TASK_ID_C)) {
+ CPRINTS("Events are pending");
+ return CTS_RC_FAILURE;
+ }
+
+ return CTS_RC_SUCCESS;
+}
+
+enum cts_rc test_task_priority(void)
+{
+ uint32_t event;
+
+ repeat_count = 2;
+
+ task_wake(TASK_ID_A);
+ task_wake(TASK_ID_C);
+
+ event = task_wait_event(5 * SECOND);
+
+ if (event != TASK_EVENT_WAKE) {
+ CPRINTS("Woken up by unexpected event: 0x%08x", event);
+ return CTS_RC_FAILURE;
+ }
+
+ if (wake_count[0] != repeat_count - 1 ||
+ wake_count[1] != repeat_count - 1) {
+ CPRINTS("Unexpected counter values: %d %d %d", wake_count[0],
+ wake_count[1], wake_count[2]);
+ return CTS_RC_FAILURE;
+ }
+
+ /* TODO: Verify no tasks are ready, no events are pending. */
+ if (*task_get_event_bitmap(TASK_ID_A) ||
+ *task_get_event_bitmap(TASK_ID_B) ||
+ *task_get_event_bitmap(TASK_ID_C)) {
+ CPRINTS("Events are pending");
+ return CTS_RC_FAILURE;
+ }
+
+ return CTS_RC_SUCCESS;
+}
+
+static void recurse(int x)
+{
+ CPRINTS("+%d", x);
+ msleep(1);
+ recurse(x + 1);
+ CPRINTS("-%d", x);
+}
+
+enum cts_rc test_stack_overflow(void)
+{
+ recurse(0);
+ return CTS_RC_FAILURE;
+}
+
+#include "cts_testlist.h"
+
+void cts_task(void)
+{
+ task_wake(TASK_ID_TICK);
+ cts_main_loop(tests, "Task");
+ task_wait_event(-1);
+}