On Fri, Feb 19, 2021 at 9:46 AM Joel Sherrill <j...@rtems.org> wrote: > > > > On Fri, Feb 19, 2021, 10:31 AM Gedare Bloom <ged...@rtems.org> wrote: >> >> On Thu, Feb 18, 2021 at 11:56 PM Sebastian Huber >> <sebastian.hu...@embedded-brains.de> wrote: >> > >> > On 18/02/2021 20:25, Joel Sherrill wrote: >> > >> > > > - /* >> > > > - * api may be NULL in case of a thread close in progress >> > > > - */ >> > > > - if ( !api ) >> > > > - return; >> > > > - >> > > I believe you, but should we replace this with an assert for now? >> > > >> > > >> > > And a comment explaining why it can't be NULL. >> > >> > This is not the only place which uses >> > >> > api = executing->API_Extensions[ THREAD_API_POSIX ]; >> > >> > or >> > >> > api = executing->API_Extensions[ THREAD_API_RTEMS ]; >> > >> > I don't think it makes sense to add a comment to all these places. >> > >> > While looking at this, I think we should remove this API_Extensions >> > indirection and add the structures directly to Thread_Control. This >> > makes the code more efficient, simpler, faster, and easier to debug. >> > >> >> I think this makes sense from an object-oriented perspective. But, >> does it (greatly) increase the memory consumption for a system that >> uses classic tasks but enables posix? > > > Enable POSIX is now misnamed and should have been changed. It only enables > some POSIX signals support. But in a review of an executable recently, I > realized that posix signal apis inside our teams were built even though they > were fundamentally non-functional. > "our teams" text-to-speech mangle of "RTEMS"?
Changing the name is an API-level change, but one we can make in conjunction with the switch from autoconf to waf if you are in favor of a rename. I'd suggest open a new thread for that discussion. > Moving this inside may make sense on one level but it breaks the fundamental > layering in the design of the super core. The design intent was to not embed > knowledge of any particular API in the super core. Thus the apis are viewed > as extensions. > Agreed. The proper way to do this would be to have an opaque "api thread object" embedded in the TCB, that gets instantiated by the API that created/owns the thread, I believe. That's hard to do efficiently in C though. I think it could be sensible to make an exception, in the case that the API-specific portion is clearly delineated (e.g., marked out by #ifdefs) within the supercore. > >> >> > We just have to move a couple of typedefs to score to define these >> > structures in thread.h. >> > >> > #if defined(RTEMS_POSIX_API) >> > /** >> > * This defines the POSIX API support structure associated with >> > * each thread in a system with POSIX configured. >> > */ >> > typedef struct { >> > /** >> > * @brief Control block for the sporadic server scheduling policy. >> > */ >> > struct { >> > /** The thread of this sporadic control block */ >> > Thread_Control *thread; >> > >> > /** >> > * @brief This is the timer which controls when the thread executes >> > at high >> > * and low priority when using the sporadic server scheduling policy. >> > */ >> > Watchdog_Control Timer; >> > >> > /** >> > * @brief The low priority when using the sporadic server scheduling >> > * policy. >> > */ >> > Priority_Node Low_priority; >> > >> > /** >> > * @brief Replenishment period for sporadic server. >> > */ >> > struct timespec sched_ss_repl_period; >> > >> > /** >> > * @brief Initial budget for sporadic server. >> > */ >> > struct timespec sched_ss_init_budget; >> > >> > /** >> > * @brief Maximum pending replenishments. >> > * >> > * Only used by pthread_getschedparam() and pthread_getattr_np(). >> > */ >> > int sched_ss_max_repl; >> > } Sporadic; >> > >> > /** This is the set of signals which are currently unblocked. */ >> > sigset_t signals_unblocked; >> > /** This is the set of signals which are currently pending. */ >> > sigset_t signals_pending; >> > >> > /** >> > * @brief Signal post-switch action in case signals are pending. >> > */ >> > Thread_Action Signal_action; >> > } POSIX_API_Control; >> > >> > /** >> > * This is the API specific information required by each thread for >> > * the RTEMS API to function correctly. >> > * >> > */ >> > typedef struct { >> > /** This field contains the event control for this task. */ >> > Event_Control Event; >> > /** This field contains the system event control for this task. */ >> > Event_Control System_event; >> > /** This field contains the Classic API Signal information for this >> > task. */ >> > ASR_Information Signal; >> > >> > /** >> > * @brief Signal post-switch action in case signals are pending. >> > */ >> > Thread_Action Signal_action; >> > } RTEMS_API_Control; >> > >> > -- >> > embedded brains GmbH >> > Herr Sebastian HUBER >> > Dornierstr. 4 >> > 82178 Puchheim >> > Germany >> > email: sebastian.hu...@embedded-brains.de >> > phone: +49-89-18 94 741 - 16 >> > fax: +49-89-18 94 741 - 08 >> > >> > Registergericht: Amtsgericht München >> > Registernummer: HRB 157899 >> > Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler >> > Unsere Datenschutzerklärung finden Sie hier: >> > https://embedded-brains.de/datenschutzerklaerung/ >> > _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel