source: libcfa/src/concurrency/alarm.hfa @ d3ab183

arm-ehjacob/cs343-translationnew-astnew-ast-unique-expr
Last change on this file since d3ab183 was d3ab183, checked in by Michael Brooks <mlbrooks@…>, 19 months ago

Using dlist in alarm.

Minimal interface changes in alarm.hfa applied; some spill to preemption.cfa occured.

List management logic removed, including such helper functions from alarm.cfa. Remaining logic is concurrency-protection wrapping, and picking insertion point by traversing and comparing alarm-fire times.

Integrity checking definitions removed here. Calling version brought into list.hfa by change 4d741 instead.

  • Property mode set to 100644
File size: 1.9 KB
RevLine 
[6cff9f3]1//
2// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
[73abe95]7// alarm.hfa --
[6cff9f3]8//
9// Author           : Thierry Delisle
10// Created On       : Fri Jun 2 11:31:25 2017
[91c389a]11// Last Modified By : Peter A. Buhr
[2a84d06d]12// Last Modified On : Mon Mar 26 16:25:41 2018
13// Update Count     : 11
[6cff9f3]14//
15
[6b0b624]16#pragma once
[6cff9f3]17
[c81ebf9]18#include <stdbool.h>
[8cb529e]19#include <stdint.h>
[c81ebf9]20
[91c389a]21#include <assert.h>
[6cff9f3]22
[58b6d1b]23#include "time.hfa"
[b69ea6b]24
[d3ab183]25#include <containers/list.hfa>
26
[ac2b598]27struct $thread;
[6cff9f3]28struct processor;
29
[969b3fe]30//=============================================================================================
31// Clock logic
32//=============================================================================================
[c81ebf9]33
[2a84d06d]34Time __kernel_get_time();
35void __kernel_set_timer( Duration alarm );
[c81ebf9]36
37//=============================================================================================
38// Alarm logic
39//=============================================================================================
40
[6cff9f3]41struct alarm_node_t {
[2a84d06d]42        Time alarm;                             // time when alarm goes off
43        Duration period;                        // if > 0 => period of alarm
[d3ab183]44
45        DLISTED_MGD_IMPL_IN(alarm_node_t)
[6cff9f3]46
47        union {
[ac2b598]48                $thread * thrd; // thrd who created event
[6cff9f3]49                processor * proc;               // proc who created event
50        };
[c81ebf9]51
52        bool set                :1;             // whether or not the alarm has be registered
53        bool kernel_alarm       :1;             // true if this is not a user defined alarm
[6cff9f3]54};
[d3ab183]55DLISTED_MGD_IMPL_OUT(alarm_node_t)
[6cff9f3]56
[ac2b598]57void ?{}( alarm_node_t & this, $thread * thrd, Time alarm, Duration period );
[2a84d06d]58void ?{}( alarm_node_t & this, processor   * proc, Time alarm, Duration period );
[242a902]59void ^?{}( alarm_node_t & this );
[6cff9f3]60
[d3ab183]61typedef dlist(alarm_node_t, alarm_node_t) alarm_list_t;
[6cff9f3]62
63void insert( alarm_list_t * this, alarm_node_t * n );
64alarm_node_t * pop( alarm_list_t * this );
65
[c81ebf9]66void register_self  ( alarm_node_t * this );
67void unregister_self( alarm_node_t * this );
68
[6cff9f3]69// Local Variables: //
[6b0b624]70// mode: c //
[6cff9f3]71// tab-width: 6 //
[242a902]72// End: //
Note: See TracBrowser for help on using the repository browser.