On 2014-03-25 16:36, Gedare Bloom wrote:
On Tue, Mar 25, 2014 at 8:49 AM, Sebastian Huber
<sebastian.hu...@embedded-brains.de> wrote:
Thread actions are the building block for efficient implementation of
   - Classic signals delivery,
   - POSIX signals delivery,
   - thread restart notification,
   - thread delete notification,
   - forced thread migration on SMP configurations, and
   - the Multiprocessor Resource Sharing Protocol (MrsP).
---
  cpukit/score/include/rtems/score/thread.h     |   59 ++++++++++++++++++++++
  cpukit/score/include/rtems/score/threadimpl.h |   67 +++++++++++++++++++++++++
  cpukit/score/src/threaddispatch.c             |   33 ++++++++++++
  cpukit/score/src/threadinitialize.c           |    2 +
  4 files changed, 161 insertions(+), 0 deletions(-)

diff --git a/cpukit/score/include/rtems/score/thread.h 
b/cpukit/score/include/rtems/score/thread.h
index 7147110..153537a 100644
--- a/cpukit/score/include/rtems/score/thread.h
+++ b/cpukit/score/include/rtems/score/thread.h
@@ -356,6 +356,62 @@ typedef enum {
  /** This macro defines the last API which has threads. */
  #define THREAD_API_LAST  THREAD_API_POSIX

+typedef struct Thread_Action Thread_Action;
+
+/**
+ * @brief Thread action handler.
+ *
+ * The thread action handler will be called with interrupts disabled and the
+ * thread action lock acquired.  The handler must release the thread action
+ * lock with _Thread_Action_release_and_ISR_enable().  So the thread action
+ * lock can be used to protect private data fields of the particular action.
+ *
Why doesn't the caller of the handler release the lock and enable ISRs
after the handler returns?

The handler may do complex things. The thread terminate and restart extensions are called by such a handler. They can do all sorts of stuff including blocking on a semaphore, IO operations, etc.

[...]
+RTEMS_INLINE_ROUTINE Per_CPU_Control *
+  _Thread_Action_ISR_disable_and_acquire_for_executing( ISR_Level *level )
+{
+  Per_CPU_Control *cpu;
+
+  _ISR_Disable_without_giant( *level );
+  cpu = _Per_CPU_Get();
+  _Per_CPU_Acquire( cpu );
+
+  return cpu;
+}
Is this "for_executing" variant required for some SMP uses? On non-smp
it is the same the next function. I do not see the function is used in
this patch.

Its used in patch 14 (this is the main patch).

[...]

--
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.hu...@embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
_______________________________________________
rtems-devel mailing list
rtems-devel@rtems.org
http://www.rtems.org/mailman/listinfo/rtems-devel

Reply via email to