Changeset 683 for trunk/kernel/kern/alarm.h
- Timestamp:
- Jan 13, 2021, 12:36:17 AM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kernel/kern/alarm.h
r669 r683 36 36 * This structure defines a generic, timer based, kernel alarm. 37 37 * 38 * - An alarm being attached to a given thread,the alarm descriptor is embedded in the38 * - An alarm is attached to a given thread, and the alarm descriptor is embedded in the 39 39 * thread descriptor. A client thread can use the alarm_start() function to dynamically 40 40 * activate the alarm. It can use the alarm_stop() function to desactivate this alarm. 41 41 * - This kernel alarm is generic, as the alarm handler (executed when the alarm rings), 42 * and the handler arguments are defined by two pointers <func_ptr> and <args_xp>.42 * and the handler arguments are defined by two pointers: <func_ptr> and <args_xp>. 43 43 * - When an alarm is created by a client thread, it is registered in the list of alarms 44 44 * rooted in the core running the client thread. When it is stopped, the alarm is simply 45 45 * removed from this list. 46 * - When creating an alarm , the client thread must define an absolute date (in cycles),47 * the func_ptr localpointer, and the args_xp extended pointer.46 * - When creating an alarm with the alarm_start() function, the client thread must define 47 * an absolute date (in cycles), the func_ptr pointer, and the args_xp extended pointer. 48 48 * - The list of alarms is ordered by increasing dates. At each TICK received by a core, 49 49 * the date of the first registered alarm is compared to the current date (in the 50 50 * core_clock() function). The alarm handler is executed when current_date >= alarm_date. 51 * - It is the handler responsability to stop a ringing alarm, or update the date. 51 * - It is the handler responsability to stop and delete a ringing alarm using the 52 * alarm_stop() function, or update the alarm date using the alarm_update() function. 53 * - The three alarm_start(), alarm_stop(), and alarm_update() access functions use 54 * the lock protecting the alarms list to handle concurrent accesses. These functions 55 * use extended pointers to access the alarm list, and can be called by a thread 56 * running in any cluster. 52 57 * 53 * This mechanism is used bi the almos_mkh implementation of the TCP protocoL. 58 * This embedded alarm mechanism is used by: 59 * 1. the socket_accept(), socket_connect(), socket_send(), socket_close() functions, 60 * to implement the TCP retransmission machanism. 61 * 2. the sys_thread_sleep() function, to implement the "sleep" mechanism. 54 62 ******************************************************************************************/ 55 63 56 64 typedef struct alarm_s 57 65 { 66 bool_t linked; /*! active when true (i.e linked to the core list) */ 58 67 cycle_t date; /*! absolute date for handler execution */ 59 68 void * func_ptr; /*! local pointer on alarm handler function */ 60 69 xptr_t args_xp; /*! local pointer on handler arguments */ 61 list_entry_t list; /*! all alarms attached to the same core*/70 list_entry_t list; /*! set of active alarms attached to the same core */ 62 71 } 63 72 alarm_t; … … 70 79 71 80 /******************************************************************************************* 81 * This function initialises the alarm state to "inactive". 82 ******************************************************************************************* 83 * @ alarm : local pointer on alarm. 84 ******************************************************************************************/ 85 void alarm_init( alarm_t * alarm ); 86 87 /******************************************************************************************* 72 88 * This function initializes the alarm descriptor embedded in the thread identified by the 73 * <thread> argument from the <date>, <func_ptr>, <args_ptr> arguments, and registers it 74 * in the ordered list rooted in the core running this <thread>. 89 * <thread_xp> argument from the <date>, <func_ptr>, <args_ptr> arguments, and registers 90 * this alarm in the ordered list rooted in the core running this thread. 91 * It takes the lock protecting the alarms list against concurrent accesses. 75 92 ******************************************************************************************* 93 * @ thread_xp : extended pointer on the target thread. 76 94 * @ date : absolute date (in cycles). 77 95 * @ func_ptr : local pointer on the handler to execute when the alarm rings. 78 96 * @ args_xp : extended pointer on the handler arguments. 79 * @ thread : local pointer on the client thread.80 97 ******************************************************************************************/ 81 void alarm_start( cycle_t date,82 void * func_ptr,83 xptr_t args_xp,84 struct thread_s * thread);98 void alarm_start( xptr_t thread_xp, 99 cycle_t date, 100 void * func_ptr, 101 xptr_t args_xp ); 85 102 86 103 /******************************************************************************************* … … 88 105 * <thread> argument. The list of alarms rooted in the core running the client thread 89 106 * is modified to respect the absolute dates ordering. 107 * It takes the lock protecting the alarms list against concurrent accesses. 90 108 ******************************************************************************************* 91 * @ thread : local pointer on the client thread.109 * @ thread_xp : extended pointer on the target thread. 92 110 * @ new_date : absolute new date (in cycles). 93 111 ******************************************************************************************/ 94 void alarm_update( struct thread_s * thread,95 cycle_t 112 void alarm_update( xptr_t thread_xp, 113 cycle_t new_date ); 96 114 97 115 /******************************************************************************************* 98 116 * This function unlink an alarm identified by the <thread> argument from the list of 99 117 * alarms rooted in the core descriptor. 118 * It takes the lock protecting the alarms list against concurrent accesses. 100 119 ******************************************************************************************* 101 * @ thread : local pointer on the client thread.120 * @ thread_xp : extended pointer on the target thread. 102 121 ******************************************************************************************/ 103 void alarm_stop( struct thread_s * thread);122 void alarm_stop( xptr_t thread_xp ); 104 123 105 124
Note: See TracChangeset
for help on using the changeset viewer.