| 
    Zephyr Project API 3.7.0
    
   A Scalable Open Source RTOS 
   | 
 
#include <zephyr/tc_util.h>#include <zephyr/ztest.h>#include <zephyr/kernel.h>#include <ksched.h>#include <ipi.h>#include <zephyr/kernel_structs.h>Macros | |
| #define | STACK_SIZE (1024 + CONFIG_TEST_EXTRA_STACK_SIZE) | 
| #define | NUM_THREADS (CONFIG_MP_MAX_NUM_CPUS - 1) | 
| #define | DELAY_FOR_IPIS 200 | 
| #define | PRIORITY_HIGH 5 | 
| #define | PRIORITY_MED_HIGH 6 | 
| #define | PRIORITY_MED_LOW 7 | 
| #define | PRIORITY_LOW 9 | 
Functions | |
| K_THREAD_STACK_DEFINE (stack2,(1024+CONFIG_TEST_EXTRA_STACK_SIZE)) | |
| K_THREAD_STACK_DEFINE (stack3,(1024+CONFIG_TEST_EXTRA_STACK_SIZE)) | |
| K_THREAD_STACK_DEFINE (stack4,(1024+CONFIG_TEST_EXTRA_STACK_SIZE)) | |
| K_EVENT_DEFINE (my_event) | |
| static void | show_executing_threads (const char *str) | 
| static void | timer_expiry_fn (struct k_timer *timer) | 
| Should the threads not be scheduled as expected, abort threads T2, T3 and T4 and allow the system to recover.   | |
| void | thread3_entry (void *p1, void *p2, void *p3) | 
| void | thread4_entry (void *p1, void *p2, void *p3) | 
| void | thread2_entry (void *p1, void *p2, void *p3) | 
| ZTEST (ipi_cascade, test_ipi_cascade) | |
| ZTEST_SUITE (ipi_cascade, NULL, NULL, NULL, NULL, NULL) | |
Variables | |
| static struct k_thread | thread2 | 
| static struct k_thread | thread3 | 
| static struct k_thread | thread4 | 
| static bool | thread1_ready | 
| static bool | thread2_ready | 
| static int | cpu_t1 | 
| static int | cpu_t2 | 
| static int | cpu_t3 | 
| static int | cpu_t4 | 
| static struct k_timer | my_timer | 
| static volatile bool | timer_expired | 
| #define DELAY_FOR_IPIS 200 | 
| #define NUM_THREADS (CONFIG_MP_MAX_NUM_CPUS - 1) | 
| #define PRIORITY_HIGH 5 | 
| #define PRIORITY_LOW 9 | 
| #define PRIORITY_MED_HIGH 6 | 
| #define PRIORITY_MED_LOW 7 | 
| #define STACK_SIZE (1024 + CONFIG_TEST_EXTRA_STACK_SIZE) | 
| K_EVENT_DEFINE | ( | my_event | ) | 
| K_THREAD_STACK_DEFINE | ( | stack2 | , | 
| (1024+CONFIG_TEST_EXTRA_STACK_SIZE) | |||
| ) | 
| K_THREAD_STACK_DEFINE | ( | stack3 | , | 
| (1024+CONFIG_TEST_EXTRA_STACK_SIZE) | |||
| ) | 
| K_THREAD_STACK_DEFINE | ( | stack4 | , | 
| (1024+CONFIG_TEST_EXTRA_STACK_SIZE) | |||
| ) | 
      
  | 
  static | 
| void thread2_entry | ( | void * | p1, | 
| void * | p2, | ||
| void * | p3 | ||
| ) | 
| void thread3_entry | ( | void * | p1, | 
| void * | p2, | ||
| void * | p3 | ||
| ) | 
| void thread4_entry | ( | void * | p1, | 
| void * | p2, | ||
| void * | p3 | ||
| ) | 
      
  | 
  static | 
Should the threads not be scheduled as expected, abort threads T2, T3 and T4 and allow the system to recover.
The main thread (T1/test_ipi_cascade) will verify that the timer did not execute.
| ZTEST | ( | ipi_cascade | , | 
| test_ipi_cascade | |||
| ) | 
| ZTEST_SUITE | ( | ipi_cascade | , | 
| NULL | , | ||
| NULL | , | ||
| NULL | , | ||
| NULL | , | ||
| NULL | |||
| ) | 
      
  | 
  static | 
      
  | 
  static | 
      
  | 
  static | 
      
  | 
  static | 
      
  | 
  static | 
      
  | 
  static | 
      
  | 
  static | 
      
  | 
  static | 
      
  | 
  static | 
      
  | 
  static | 
      
  | 
  static |