Re: qemu fails to build with RSB on CentOS 6

2015-04-17 Thread Chris Johns
On 17/04/2015 7:51 am, Joel Sherrill wrote:
> 
> Has anyone seen this failure?
> 
> $ make
> lt LINK vscclient
> /usr/bin/ld: -f may not be used without -shared
> collect2: ld returned 1 exit status
> make: *** [vscclient] Error 1
> 

Is it related to ..

http://lists.gnu.org/archive/html/qemu-discuss/2015-01/msg00040.html

?

Chris
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


[PATCH 1/4] score: Add header to _Watchdog_Remove()

2015-04-17 Thread Sebastian Huber
Add watchdog header parameter to _Watchdog_Remove() to be in line with
the other operations.  Add _Watchdog_Remove_ticks() and
_Watchdog_Remove_seconds() for convenience.

Update #2307.
---
 cpukit/posix/src/alarm.c|  2 +-
 cpukit/posix/src/psignalunblockthread.c |  2 +-
 cpukit/posix/src/pthread.c  |  2 +-
 cpukit/posix/src/pthreadsetschedparam.c |  4 ++--
 cpukit/posix/src/timerdelete.c  |  2 +-
 cpukit/posix/src/timerinserthelper.c|  2 +-
 cpukit/posix/src/timersettime.c |  2 +-
 cpukit/posix/src/ualarm.c   |  2 +-
 cpukit/rtems/include/rtems/rtems/timerimpl.h| 13 ++---
 cpukit/rtems/src/eventseize.c   |  2 +-
 cpukit/rtems/src/eventsurrender.c   |  2 +-
 cpukit/rtems/src/ratemoncancel.c|  2 +-
 cpukit/rtems/src/ratemondelete.c|  2 +-
 cpukit/rtems/src/timercancel.c  |  3 +--
 cpukit/rtems/src/timercreate.c  | 21 +
 cpukit/rtems/src/timerdelete.c  |  2 +-
 cpukit/rtems/src/timerfireafter.c   |  2 +-
 cpukit/rtems/src/timerfirewhen.c|  2 +-
 cpukit/rtems/src/timerreset.c   |  2 +-
 cpukit/rtems/src/timerserver.c  | 19 ---
 cpukit/rtems/src/timerserverfireafter.c |  2 +-
 cpukit/rtems/src/timerserverfirewhen.c  |  2 +-
 cpukit/score/include/rtems/score/mrspimpl.h |  2 +-
 cpukit/score/include/rtems/score/watchdogimpl.h | 18 +-
 cpukit/score/src/threadqenqueue.c   |  2 +-
 cpukit/score/src/threadrestart.c|  4 ++--
 cpukit/score/src/watchdogremove.c   |  1 +
 cpukit/score/src/watchdogtickle.c   |  2 +-
 testsuites/sptests/spintrcritical08/init.c  |  2 +-
 testsuites/sptests/spintrcritical09/init.c  |  2 +-
 30 files changed, 92 insertions(+), 35 deletions(-)

diff --git a/cpukit/posix/src/alarm.c b/cpukit/posix/src/alarm.c
index 4803661..6f051d7 100644
--- a/cpukit/posix/src/alarm.c
+++ b/cpukit/posix/src/alarm.c
@@ -73,7 +73,7 @@ unsigned int alarm(
 
   _Thread_Disable_dispatch();
 
-  state = _Watchdog_Remove( the_timer );
+  state = _Watchdog_Remove_seconds( the_timer );
   if ( (state == WATCHDOG_ACTIVE) || (state == WATCHDOG_REMOVE_IT) ) {
 /*
  *  The stop_time and start_time fields are snapshots of ticks since
diff --git a/cpukit/posix/src/psignalunblockthread.c 
b/cpukit/posix/src/psignalunblockthread.c
index c56c150..bb7600c 100644
--- a/cpukit/posix/src/psignalunblockthread.c
+++ b/cpukit/posix/src/psignalunblockthread.c
@@ -117,7 +117,7 @@ bool _POSIX_signals_Unblock_thread(
if ( _States_Is_waiting_on_thread_queue(the_thread->current_state) )
  _Thread_queue_Extract_with_proxy( the_thread );
else if ( _States_Is_delaying(the_thread->current_state) ) {
-  (void) _Watchdog_Remove( &the_thread->Timer );
+  _Watchdog_Remove_ticks( &the_thread->Timer );
   _Thread_Unblock( the_thread );
}
 }
diff --git a/cpukit/posix/src/pthread.c b/cpukit/posix/src/pthread.c
index 6b1e555..bafa151 100644
--- a/cpukit/posix/src/pthread.c
+++ b/cpukit/posix/src/pthread.c
@@ -287,7 +287,7 @@ static void _POSIX_Threads_Terminate_extension(
   *(void **)the_thread->Wait.return_argument = value_ptr;
 
   if ( api->schedpolicy == SCHED_SPORADIC )
-(void) _Watchdog_Remove( &api->Sporadic_timer );
+_Watchdog_Remove_ticks( &api->Sporadic_timer );
 
   _Thread_Enable_dispatch();
 }
diff --git a/cpukit/posix/src/pthreadsetschedparam.c 
b/cpukit/posix/src/pthreadsetschedparam.c
index d5d0a5b..dcb70bd 100644
--- a/cpukit/posix/src/pthreadsetschedparam.c
+++ b/cpukit/posix/src/pthreadsetschedparam.c
@@ -70,7 +70,7 @@ int pthread_setschedparam(
   api = the_thread->API_Extensions[ THREAD_API_POSIX ];
 
   if ( api->schedpolicy == SCHED_SPORADIC )
-(void) _Watchdog_Remove( &api->Sporadic_timer );
+_Watchdog_Remove_ticks( &api->Sporadic_timer );
 
   api->schedpolicy = policy;
   api->schedparam  = *param;
@@ -99,7 +99,7 @@ int pthread_setschedparam(
 
 case SCHED_SPORADIC:
   api->ss_high_priority = api->schedparam.sched_priority;
-  _Watchdog_Remove( &api->Sporadic_timer );
+  _Watchdog_Remove_ticks( &api->Sporadic_timer );
   _POSIX_Threads_Sporadic_budget_TSR( 0, the_thread );
   break;
   }
diff --git a/cpukit/posix/src/timerdelete.c b/cpukit/posix/src/timerdelete.c
index 71b25fa..e090be2 100644
--- a/cpukit/posix/src/timerdelete.c
+++ b/cpukit/posix/src/timerdelete.c
@@ -54,7 +54,7 @@ int timer_delete(
 case OBJECTS_LOCAL:
   _Objects_Close( &_POSIX_Timer_Information, &ptimer->Object );
   ptimer->state = POSIX_TIMER_STATE_FREE;
-  (void) _Watchdog_Remove( &ptimer->Timer );
+  _Watchdog_Remove_ticks( &ptimer->Timer );
 

[PATCH 4/4] score: New timer server implementation

2015-04-17 Thread Sebastian Huber
Use mostly the standard watchdog operations.  Use a system event for
synchronization.  This implementation is simpler and offers better SMP
performance.

Update #2307.
---
 cpukit/rtems/include/rtems/rtems/event.h   |   5 +
 cpukit/rtems/include/rtems/rtems/timerimpl.h   |  51 +-
 cpukit/rtems/src/timerserver.c | 570 +++--
 cpukit/score/Makefile.am   |   2 +-
 cpukit/score/include/rtems/score/watchdogimpl.h|  59 ++-
 cpukit/score/src/watchdogadjust.c  |  35 +-
 cpukit/score/src/watchdogadjusttochain.c   |  75 ---
 cpukit/score/src/watchdoginsert.c  |  21 +-
 testsuites/sptests/spintrcritical17/init.c | 163 +++---
 .../sptests/spintrcritical17/spintrcritical17.doc  |   6 +-
 10 files changed, 370 insertions(+), 617 deletions(-)
 delete mode 100644 cpukit/score/src/watchdogadjusttochain.c

diff --git a/cpukit/rtems/include/rtems/rtems/event.h 
b/cpukit/rtems/include/rtems/rtems/event.h
index dce7de1..012452a 100644
--- a/cpukit/rtems/include/rtems/rtems/event.h
+++ b/cpukit/rtems/include/rtems/rtems/event.h
@@ -319,6 +319,11 @@ rtems_status_code rtems_event_receive (
 #define RTEMS_EVENT_SYSTEM_NETWORK_CLOSE RTEMS_EVENT_26
 
 /**
+ * @brief Reserved system event for the timer server.
+ */
+#define RTEMS_EVENT_SYSTEM_TIMER_SERVER RTEMS_EVENT_30
+
+/**
  * @brief Reserved system event for transient usage.
  */
 #define RTEMS_EVENT_SYSTEM_TRANSIENT RTEMS_EVENT_31
diff --git a/cpukit/rtems/include/rtems/rtems/timerimpl.h 
b/cpukit/rtems/include/rtems/rtems/timerimpl.h
index 4f200ef..e5b37aa 100644
--- a/cpukit/rtems/include/rtems/rtems/timerimpl.h
+++ b/cpukit/rtems/include/rtems/rtems/timerimpl.h
@@ -65,24 +65,43 @@ typedef struct {
   Watchdog_Control System_watchdog;
 
   /**
+   * @brief Remaining delta of the system watchdog.
+   */
+  Watchdog_Interval system_watchdog_delta;
+
+  /**
+   * @brief Unique identifier of the context which deals currently with the
+   * system watchdog.
+   */
+  Thread_Control *system_watchdog_helper;
+
+  /**
+   * @brief Each insert and tickle operation increases the generation count so
+   * that the system watchdog dealer notices updates of the watchdog chain.
+   */
+  uint32_t generation;
+
+  /**
* @brief Watchdog header managed by the timer server.
*/
   Watchdog_Header Header;
 
   /**
-   * @brief Last known time snapshot of the timer server.
+   * @brief Last time snapshot of the timer server.
*
* The units may be ticks or seconds.
*/
-  Watchdog_Interval volatile last_snapshot;
-} Timer_server_Watchdogs;
+  Watchdog_Interval last_snapshot;
 
-struct Timer_server_Control {
   /**
-   * @brief Timer server thread.
+   * @brief Current time snapshot of the timer server.
+   *
+   * The units may be ticks or seconds.
*/
-  Thread_Control *thread;
+  Watchdog_Interval current_snapshot;
+} Timer_server_Watchdogs;
 
+struct Timer_server_Control {
   /**
* @brief The cancel method of the timer server.
*/
@@ -102,26 +121,6 @@ struct Timer_server_Control {
* @brief TOD watchdogs triggered by the timer server.
*/
   Timer_server_Watchdogs TOD_watchdogs;
-
-  /**
-   * @brief Chain of timers scheduled for insert.
-   *
-   * This pointer is not @c NULL whenever the interval and TOD chains are
-   * processed.  After the processing this list will be checked and if
-   * necessary the processing will be restarted.  Processing of these chains
-   * can be only interrupted through interrupts.
-   */
-  Chain_Control *volatile insert_chain;
-
-  /**
-   * @brief Indicates that the timer server is active or not.
-   *
-   * The server is active after the delay on a system watchdog.  The activity
-   * period of the server ends when no more watchdogs managed by the server
-   * fire.  The system watchdogs must not be manipulated when the server is
-   * active.
-   */
-  bool volatile active;
 };
 
 /**
diff --git a/cpukit/rtems/src/timerserver.c b/cpukit/rtems/src/timerserver.c
index 15cbdfd..db38f48 100644
--- a/cpukit/rtems/src/timerserver.c
+++ b/cpukit/rtems/src/timerserver.c
@@ -15,7 +15,7 @@
 /*  COPYRIGHT (c) 1989-2008.
  *  On-Line Applications Research Corporation (OAR).
  *
- *  Copyright (c) 2009 embedded brains GmbH.
+ *  Copyright (c) 2009-2015 embedded brains GmbH.
  *
  *  The license and distribution terms for this file may be
  *  found in the file LICENSE in this distribution or at
@@ -26,200 +26,128 @@
 #include "config.h"
 #endif
 
+#include 
 #include 
 #include 
-#include 
-#include 
 #include 
 
 static Timer_server_Control _Timer_server_Default;
 
-static void _Timer_server_Stop_interval_system_watchdog(
-  Timer_server_Control *ts
+static void _Timer_server_Cancel_method(
+  Timer_server_Control *ts,
+  Timer_Control *timer
 )
 {
-  _Watchdog_Remove_ticks( &ts->Interval_watchdogs.System_watchdog );
+  if ( timer->the_class == TIMER_INTERVAL_ON_TASK ) {
+_Watchdog_Remove( &ts->Interval_watchdog

[PATCH 2/4] score: Add _Watchdog_Acquire|Release|Flash()

2015-04-17 Thread Sebastian Huber
Update #2307.
---
 cpukit/score/include/rtems/score/watchdogimpl.h | 30 +
 cpukit/score/src/watchdogadjust.c   | 16 ++---
 cpukit/score/src/watchdogadjusttochain.c|  8 +++
 cpukit/score/src/watchdoginsert.c   | 10 -
 cpukit/score/src/watchdogremove.c   |  6 ++---
 cpukit/score/src/watchdogtickle.c   | 12 +-
 6 files changed, 56 insertions(+), 26 deletions(-)

diff --git a/cpukit/score/include/rtems/score/watchdogimpl.h 
b/cpukit/score/include/rtems/score/watchdogimpl.h
index ddd1ca4..f52b55d 100644
--- a/cpukit/score/include/rtems/score/watchdogimpl.h
+++ b/cpukit/score/include/rtems/score/watchdogimpl.h
@@ -21,6 +21,7 @@
 
 #include 
 #include 
+#include 
 
 #ifdef __cplusplus
 extern "C" {
@@ -49,6 +50,11 @@ extern "C" {
  */
 typedef struct {
   /**
+   * @brief ISR lock to protect this watchdog chain.
+   */
+  ISR_LOCK_MEMBER( Lock )
+
+  /**
* @brief The chain of active or transient watchdogs.
*/
   Chain_Control Watchdogs;
@@ -84,6 +90,30 @@ SCORE_EXTERN Watchdog_Header _Watchdog_Ticks_header;
  */
 SCORE_EXTERN Watchdog_Header _Watchdog_Seconds_header;
 
+RTEMS_INLINE_ROUTINE void _Watchdog_Acquire(
+  Watchdog_Header  *header,
+  ISR_lock_Context *lock_context
+)
+{
+  _ISR_lock_ISR_disable_and_acquire( &header->Lock, lock_context );
+}
+
+RTEMS_INLINE_ROUTINE void _Watchdog_Release(
+  Watchdog_Header  *header,
+  ISR_lock_Context *lock_context
+)
+{
+  _ISR_lock_Release_and_ISR_enable( &header->Lock, lock_context );
+}
+
+RTEMS_INLINE_ROUTINE void _Watchdog_Flash(
+  Watchdog_Header  *header,
+  ISR_lock_Context *lock_context
+)
+{
+  _ISR_lock_Flash( &header->Lock, lock_context );
+}
+
 /**
  *  @brief Initialize the watchdog handler.
  *
diff --git a/cpukit/score/src/watchdogadjust.c 
b/cpukit/score/src/watchdogadjust.c
index 687f063..04fc1a5 100644
--- a/cpukit/score/src/watchdogadjust.c
+++ b/cpukit/score/src/watchdogadjust.c
@@ -27,15 +27,15 @@ void _Watchdog_Adjust_backward(
   Watchdog_Interval  units
 )
 {
-  ISR_Level level;
+  ISR_lock_Context lock_context;
 
-  _ISR_Disable( level );
+  _Watchdog_Acquire( header, &lock_context );
 
   if ( !_Watchdog_Is_empty( header ) ) {
  _Watchdog_First( header )->delta_interval += units;
   }
 
-  _ISR_Enable( level );
+  _Watchdog_Release( header, &lock_context );
 }
 
 void _Watchdog_Adjust_forward(
@@ -43,9 +43,9 @@ void _Watchdog_Adjust_forward(
   Watchdog_Interval  units
 )
 {
-  ISR_Level level;
+  ISR_lock_Context lock_context;
 
-  _ISR_Disable( level );
+  _Watchdog_Acquire( header, &lock_context );
 
   while ( !_Watchdog_Is_empty( header ) && units > 0 ) {
 Watchdog_Control *first = _Watchdog_First( header );
@@ -57,13 +57,13 @@ void _Watchdog_Adjust_forward(
   units -= first->delta_interval;
   first->delta_interval = 1;
 
-  _ISR_Enable( level );
+  _Watchdog_Release( header, &lock_context );
 
   _Watchdog_Tickle( header );
 
-  _ISR_Disable( level );
+  _Watchdog_Acquire( header, &lock_context );
 }
   }
 
-  _ISR_Enable( level );
+  _Watchdog_Release( header, &lock_context );
 }
diff --git a/cpukit/score/src/watchdogadjusttochain.c 
b/cpukit/score/src/watchdogadjusttochain.c
index 1926656..b3063e4 100644
--- a/cpukit/score/src/watchdogadjusttochain.c
+++ b/cpukit/score/src/watchdogadjusttochain.c
@@ -29,10 +29,10 @@ void _Watchdog_Adjust_to_chain(
 )
 {
   Watchdog_Interval  units = units_arg;
-  ISR_Level  level;
+  ISR_lock_Context   lock_context;
   Watchdog_Control  *first;
 
-  _ISR_Disable( level );
+  _Watchdog_Acquire( header, &lock_context );
 
   while ( 1 ) {
 if ( _Watchdog_Is_empty( header ) ) {
@@ -60,7 +60,7 @@ void _Watchdog_Adjust_to_chain(
   _Chain_Extract_unprotected( &first->Node );
   _Chain_Append_unprotected( to_fire, &first->Node );
 
-  _ISR_Flash( level );
+  _Watchdog_Flash( header, &lock_context );
 
   if ( _Watchdog_Is_empty( header ) )
 break;
@@ -70,6 +70,6 @@ void _Watchdog_Adjust_to_chain(
 }
   }
 
-  _ISR_Enable( level );
+  _Watchdog_Release( header, &lock_context );
 }
 
diff --git a/cpukit/score/src/watchdoginsert.c 
b/cpukit/score/src/watchdoginsert.c
index 272cac8..0ad59ff 100644
--- a/cpukit/score/src/watchdoginsert.c
+++ b/cpukit/score/src/watchdoginsert.c
@@ -27,7 +27,7 @@ void _Watchdog_Insert(
   Watchdog_Control  *the_watchdog
 )
 {
-  ISR_Level  level;
+  ISR_lock_Context   lock_context;
   Watchdog_Control  *after;
   uint32_t   insert_isr_nest_level;
   Watchdog_Interval  delta_interval;
@@ -35,7 +35,7 @@ void _Watchdog_Insert(
 
   insert_isr_nest_level   = _ISR_Nest_level;
 
-  _ISR_Disable( level );
+  _Watchdog_Acquire( header, &lock_context );
 
   /*
*  Check to see if the watchdog has just been inserted by a
@@ -43,7 +43,7 @@ void _Watchdog_Insert(
*/
 
   if ( the_watchdog->state != WATCHDOG_INACTIVE ) {
-_ISR_Enable( level );
+_Watchdog_R

[PATCH 3/4] score: Add Watchdog_Iterator

2015-04-17 Thread Sebastian Huber
Rewrite the _Watchdog_Insert(), _Watchdog_Remove() and
_Watchdog_Tickle() functions to use interator items to synchronize
concurrent operations.  This makes it possible to get rid of the global
variables _Watchdog_Sync_level and _Watchdog_Sync_count which are a
blocking point for scalable SMP solutions.

Update #2307.
---
 cpukit/rtems/src/timercreate.c  |   6 ++
 cpukit/score/include/rtems/score/watchdogimpl.h |  58 ---
 cpukit/score/src/watchdog.c |   2 -
 cpukit/score/src/watchdoginsert.c   | 112 +++-
 cpukit/score/src/watchdogremove.c   |  71 ++---
 cpukit/score/src/watchdogtickle.c   | 130 
 testsuites/sptests/spsize/size.c|   4 +-
 testsuites/sptests/spwatchdog/init.c| 103 +++
 8 files changed, 317 insertions(+), 169 deletions(-)

diff --git a/cpukit/rtems/src/timercreate.c b/cpukit/rtems/src/timercreate.c
index 390c965..ef217e9 100644
--- a/cpukit/rtems/src/timercreate.c
+++ b/cpukit/rtems/src/timercreate.c
@@ -28,6 +28,10 @@
 void _Timer_Cancel( Timer_Control *the_timer )
 {
   Timer_server_Control *timer_server;
+  ISR_Level level;
+
+  /* The timer class must not change during the cancel operation */
+  _ISR_Disable( level );
 
   switch ( the_timer->the_class ) {
 case TIMER_INTERVAL:
@@ -44,6 +48,8 @@ void _Timer_Cancel( Timer_Control *the_timer )
 default:
   break;
   }
+
+  _ISR_Enable( level );
 }
 
 rtems_status_code rtems_timer_create(
diff --git a/cpukit/score/include/rtems/score/watchdogimpl.h 
b/cpukit/score/include/rtems/score/watchdogimpl.h
index f52b55d..304392b 100644
--- a/cpukit/score/include/rtems/score/watchdogimpl.h
+++ b/cpukit/score/include/rtems/score/watchdogimpl.h
@@ -46,6 +46,28 @@ extern "C" {
   }
 
 /**
+ * @brief Iterator item to synchronize concurrent insert, remove and tickle
+ * operations.
+ */
+typedef struct {
+  /**
+   * @brief A node for a Watchdog_Header::Iterators chain.
+   */
+  Chain_Node Node;
+
+  /**
+   * @brief The current delta interval of the new watchdog to insert.
+   */
+  Watchdog_Interval delta_interval;
+
+  /**
+   * @brief The current watchdog of the chain on the way to insert the new
+   * watchdog.
+   */
+  Chain_Node *current;
+} Watchdog_Iterator;
+
+/**
  * @brief Watchdog header.
  */
 typedef struct {
@@ -58,23 +80,15 @@ typedef struct {
* @brief The chain of active or transient watchdogs.
*/
   Chain_Control Watchdogs;
-} Watchdog_Header;
-
-/**
- *  @brief Watchdog synchronization level.
- *
- *  This used for synchronization purposes
- *  during an insert on a watchdog delta chain.
- */
-SCORE_EXTERN volatile uint32_t_Watchdog_Sync_level;
 
-/**
- *  @brief Watchdog synchronization count.
- *
- *  This used for synchronization purposes
- *  during an insert on a watchdog delta chain.
- */
-SCORE_EXTERN volatile uint32_t_Watchdog_Sync_count;
+  /**
+   * @brief Currently active iterators.
+   *
+   * The iterators are registered in _Watchdog_Insert() and updated in case the
+   * watchdog chain changes.
+   */
+  Chain_Control Iterators;
+} Watchdog_Header;
 
 /**
  *  @brief Watchdog chain which is managed at ticks.
@@ -139,6 +153,16 @@ Watchdog_States _Watchdog_Remove (
 );
 
 /**
+ * @brief Actually removes an WATCHDOG_ACTIVE or WATCHDOG_REMOVE_IT watchdog.
+ *
+ * @see _Watchdog_Remove() and _Watchdog_Tickle().
+ */
+void _Watchdog_Remove_it(
+  Watchdog_Header  *header,
+  Watchdog_Control *the_watchdog
+);
+
+/**
  *  @brief Adjusts the header watchdog chain in the backward direction for
  *  units ticks.
  *
@@ -437,7 +461,9 @@ RTEMS_INLINE_ROUTINE void _Watchdog_Header_initialize(
   Watchdog_Header *header
 )
 {
+  _ISR_lock_Initialize( &header->Lock, "Watchdog" );
   _Chain_Initialize_empty( &header->Watchdogs );
+  _Chain_Initialize_empty( &header->Iterators );
 }
 
 /** @} */
diff --git a/cpukit/score/src/watchdog.c b/cpukit/score/src/watchdog.c
index 0db60ef..11d3cf2 100644
--- a/cpukit/score/src/watchdog.c
+++ b/cpukit/score/src/watchdog.c
@@ -25,8 +25,6 @@
 
 void _Watchdog_Handler_initialization( void )
 {
-  _Watchdog_Sync_count = 0;
-  _Watchdog_Sync_level = 0;
   _Watchdog_Ticks_since_boot = 0;
 
   _Watchdog_Header_initialize( &_Watchdog_Ticks_header );
diff --git a/cpukit/score/src/watchdoginsert.c 
b/cpukit/score/src/watchdoginsert.c
index 0ad59ff..6d2df82 100644
--- a/cpukit/score/src/watchdoginsert.c
+++ b/cpukit/score/src/watchdoginsert.c
@@ -19,76 +19,92 @@
 #endif
 
 #include 
-#include 
-#include 
 
-void _Watchdog_Insert(
-  Watchdog_Header   *header,
-  Watchdog_Control  *the_watchdog
+static void _Watchdog_Insert_fixup(
+  Watchdog_Header   *header,
+  Watchdog_Control  *next_watchdog,
+  Watchdog_Interval  delta
 )
 {
-  ISR_lock_Context   lock_context;
-  Watchdog_Control  *after;
-  uint32_t   insert_isr_nest_level;
-  Watchdog_Interval  delta_interval;
+  const Chain_Node *iterator_

[PATCH] score: Refactor SMP cache manager support

2015-04-17 Thread Sebastian Huber
---
 c/src/lib/libcpu/shared/src/cache_manager.c | 175 +---
 cpukit/score/Makefile.am|   1 +
 cpukit/score/include/rtems/score/smpimpl.h  |  33 --
 cpukit/score/src/smpmulticastaction.c   | 141 ++
 testsuites/smptests/smpcache01/init.c   |  23 +---
 5 files changed, 202 insertions(+), 171 deletions(-)
 create mode 100644 cpukit/score/src/smpmulticastaction.c

diff --git a/c/src/lib/libcpu/shared/src/cache_manager.c 
b/c/src/lib/libcpu/shared/src/cache_manager.c
index 89ec88f..3cce11f 100644
--- a/c/src/lib/libcpu/shared/src/cache_manager.c
+++ b/c/src/lib/libcpu/shared/src/cache_manager.c
@@ -37,161 +37,43 @@
 
 #include 
 #include "cache_.h"
-#include 
-#include 
-#include 
-#include 
 
-#if defined( RTEMS_SMP )
+#if defined(RTEMS_SMP)
 
-typedef void (*Cache_manager_Function_ptr)(const void *d_addr, size_t n_bytes);
+#include 
+
+#if defined(CPU_DATA_CACHE_ALIGNMENT)
 
 typedef struct {
-  Chain_Node Node;
-  Cache_manager_Function_ptr func;
   const void *addr;
   size_t size;
-  cpu_set_t *recipients;
-  size_t setsize;
-  Atomic_Ulong done;
-} Cache_manager_SMP_node;
-
-typedef struct {
-  SMP_lock_Control Lock;
-  Chain_Control List;
-} Cache_manager_SMP_control;
-
-static Cache_manager_SMP_control _Cache_manager_SMP_control = {
-  .Lock = SMP_LOCK_INITIALIZER("cachemgr"),
-  .List = CHAIN_INITIALIZER_EMPTY(_Cache_manager_SMP_control.List)
-};
+} smp_cache_area;
 
-void
-_SMP_Cache_manager_message_handler(void)
+static void smp_cache_flush(void *arg)
 {
-  SMP_lock_Context lock_context;
-  Cache_manager_SMP_node *node;
-  Cache_manager_SMP_node *next;
-  uint32_t cpu_self_idx;
-
-  _SMP_lock_ISR_disable_and_acquire( &_Cache_manager_SMP_control.Lock,
-  &lock_context );
-  cpu_self_idx = _SMP_Get_current_processor();
-
-  node = (Cache_manager_SMP_node*)_Chain_First(
-  &_Cache_manager_SMP_control.List );
-  while ( !_Chain_Is_tail( &_Cache_manager_SMP_control.List, &node->Node ) ) {
-next = (Cache_manager_SMP_node*)_Chain_Next( &node->Node );
-if ( CPU_ISSET_S ( cpu_self_idx, node->setsize, node->recipients ) ) {
-  CPU_CLR_S ( cpu_self_idx, node->setsize, node->recipients );
-
-  node->func( node->addr, node->size );
-
-  if ( CPU_COUNT_S( node->setsize, node->recipients ) == 0 ) {
-_Chain_Extract_unprotected( &node->Node );
-_Atomic_Store_ulong( &node->done, 1, ATOMIC_ORDER_RELEASE );
-  }
-}
-node = next;
-  }
+  smp_cache_area *area = arg;
 
-  _SMP_lock_Release_and_ISR_enable( &_Cache_manager_SMP_control.Lock,
-  &lock_context );
+  rtems_cache_flush_multiple_data_lines(area->addr, area->size);
 }
 
-#if defined(CPU_DATA_CACHE_ALIGNMENT) || \
-(defined(CPU_INSTRUCTION_CACHE_ALIGNMENT) && \
-defined(CPU_CACHE_NO_INSTRUCTION_CACHE_SNOOPING))
-
-static void
-_Cache_manager_Process_cache_messages( void )
+static void smp_cache_inv(void *arg)
 {
-  unsigned long message;
-  Per_CPU_Control *cpu_self;
-  ISR_Level isr_level;
-
-  _ISR_Disable_without_giant( isr_level );
-
-  cpu_self = _Per_CPU_Get();
+  smp_cache_area *area = arg;
 
-  message = _Atomic_Load_ulong( &cpu_self->message, ATOMIC_ORDER_RELAXED );
-
-  if ( message & SMP_MESSAGE_CACHE_MANAGER ) {
-if ( _Atomic_Compare_exchange_ulong( &cpu_self->message, &message,
-message & ~SMP_MESSAGE_CACHE_MANAGER, ATOMIC_ORDER_RELAXED,
-ATOMIC_ORDER_RELAXED ) ) {
-  _SMP_Cache_manager_message_handler();
-}
-  }
-
-  _ISR_Enable_without_giant( isr_level );
+  rtems_cache_invalidate_multiple_data_lines(area->addr, area->size);
 }
 
-/*
- * We can not make this function static as we need to access it
- * from the test program.
- */
-void
-_Cache_manager_Send_smp_msg(
-const size_t setsize,
-const cpu_set_t *set,
-Cache_manager_Function_ptr func,
-const void * addr,
-size_t size
-  );
-
-void
-_Cache_manager_Send_smp_msg(
-const size_t setsize,
-const cpu_set_t *set,
-Cache_manager_Function_ptr func,
-const void * addr,
-size_t size
-  )
+static void smp_cache_flush_all(void *arg)
 {
-  uint32_t i;
-  Cache_manager_SMP_node node;
-  size_t set_size = CPU_ALLOC_SIZE( _SMP_Get_processor_count() );
-  char cpu_set_copy[set_size];
-  SMP_lock_Context lock_context;
-
-  if ( ! _System_state_Is_up( _System_state_Get() ) ) {
-func( addr, size );
-return;
-  }
-
-  memset( cpu_set_copy, 0, set_size );
-  if( set == NULL ) {
-for( i=0; i<_SMP_Get_processor_count(); ++i )
-  CPU_SET_S( i, set_size, (cpu_set_t *)cpu_set_copy );
-  } else {
-for( i=0; i<_SMP_Get_processor_count(); ++i )
-  if( CPU_ISSET_S( i, set_size, set ) )
-CPU_SET_S( i, set_size, (cpu_set_t *)cpu_set_copy );
-  }
-
-  node.func = func;
-  node.addr = addr;
-  node.size = size;
-  node.setsize = set_size;
-  node.recipients = (cpu_set_t *)cpu_set_copy;
-  _Atomic_Store_ulong( &node.done, 0, ATOMIC_ORDER_RELAXED );
-
-
-  _SMP_lock_ISR_disable_and_acquire( &_

4.11 branch point

2015-04-17 Thread Sebastian Huber

Hello,

I think everything for the 4.11 release is now in the tree. It would be 
good to do the branch soon, since the watchdog changes and the FreeBSD 
timecounters should probably be not in the release. We can test and 
polish for the release in the branch.


--
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.

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Re: [PING][PATCH v2] Change the assert in _Thread_Dispatch_decrement_disable_level

2015-04-17 Thread Sebastian Huber

I checked in a slightly modified version.

On 16/04/15 16:27, Martin Galvan wrote:

While cpu_self->thread_dispatch_disable_level shouldn't ever be zero, it would 
be better to check it before doing the decrement.

Changes in v2:
  * Modified the asserts as requested in 
https://lists.rtems.org/pipermail/devel/2015-February/009821.html.
---
  cpukit/score/src/threaddispatchdisablelevel.c | 6 +-
  1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/cpukit/score/src/threaddispatchdisablelevel.c 
b/cpukit/score/src/threaddispatchdisablelevel.c
index 158fc39..6043fe7 100644
--- a/cpukit/score/src/threaddispatchdisablelevel.c
+++ b/cpukit/score/src/threaddispatchdisablelevel.c
@@ -107,11 +107,15 @@ uint32_t _Thread_Dispatch_decrement_disable_level( void )

cpu_self = _Per_CPU_Get();
disable_level = cpu_self->thread_dispatch_disable_level;
+  _Assert( disable_level > 0);
--disable_level;
cpu_self->thread_dispatch_disable_level = disable_level;

_Giant_Do_release( cpu_self );
-  _Assert( disable_level != 0 || _Giant.owner_cpu != cpu_self );
+
+  _Assert( ( disable_level == 0 && _Giant.owner_cpu != cpu_self )
+|| ( disable_level != 0 && _Giant.owner_cpu == cpu_self )
+  );

_Profiling_Thread_dispatch_enable( cpu_self, disable_level );
_ISR_Enable_without_giant( isr_level );
--
2.3.4


--
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.

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


[PATCH v2] score: Refactor SMP cache manager support

2015-04-17 Thread Sebastian Huber
v2: Update missing instruction routines.  Test smpcache01 passes on NGMP.

---
 c/src/lib/libcpu/shared/src/cache_manager.c | 224 +++-
 cpukit/score/Makefile.am|   1 +
 cpukit/score/include/rtems/score/smpimpl.h  |  33 +++-
 cpukit/score/src/smpmulticastaction.c   | 141 +
 testsuites/smptests/smpcache01/init.c   |  23 +--
 5 files changed, 225 insertions(+), 197 deletions(-)
 create mode 100644 cpukit/score/src/smpmulticastaction.c

diff --git a/c/src/lib/libcpu/shared/src/cache_manager.c 
b/c/src/lib/libcpu/shared/src/cache_manager.c
index 89ec88f..ab7d5b7 100644
--- a/c/src/lib/libcpu/shared/src/cache_manager.c
+++ b/c/src/lib/libcpu/shared/src/cache_manager.c
@@ -37,161 +37,43 @@
 
 #include 
 #include "cache_.h"
-#include 
-#include 
-#include 
-#include 
 
-#if defined( RTEMS_SMP )
+#if defined(RTEMS_SMP)
 
-typedef void (*Cache_manager_Function_ptr)(const void *d_addr, size_t n_bytes);
+#include 
 
 typedef struct {
-  Chain_Node Node;
-  Cache_manager_Function_ptr func;
   const void *addr;
   size_t size;
-  cpu_set_t *recipients;
-  size_t setsize;
-  Atomic_Ulong done;
-} Cache_manager_SMP_node;
-
-typedef struct {
-  SMP_lock_Control Lock;
-  Chain_Control List;
-} Cache_manager_SMP_control;
+} smp_cache_area;
 
-static Cache_manager_SMP_control _Cache_manager_SMP_control = {
-  .Lock = SMP_LOCK_INITIALIZER("cachemgr"),
-  .List = CHAIN_INITIALIZER_EMPTY(_Cache_manager_SMP_control.List)
-};
+#if defined(CPU_DATA_CACHE_ALIGNMENT)
 
-void
-_SMP_Cache_manager_message_handler(void)
+static void smp_cache_data_flush(void *arg)
 {
-  SMP_lock_Context lock_context;
-  Cache_manager_SMP_node *node;
-  Cache_manager_SMP_node *next;
-  uint32_t cpu_self_idx;
-
-  _SMP_lock_ISR_disable_and_acquire( &_Cache_manager_SMP_control.Lock,
-  &lock_context );
-  cpu_self_idx = _SMP_Get_current_processor();
-
-  node = (Cache_manager_SMP_node*)_Chain_First(
-  &_Cache_manager_SMP_control.List );
-  while ( !_Chain_Is_tail( &_Cache_manager_SMP_control.List, &node->Node ) ) {
-next = (Cache_manager_SMP_node*)_Chain_Next( &node->Node );
-if ( CPU_ISSET_S ( cpu_self_idx, node->setsize, node->recipients ) ) {
-  CPU_CLR_S ( cpu_self_idx, node->setsize, node->recipients );
-
-  node->func( node->addr, node->size );
-
-  if ( CPU_COUNT_S( node->setsize, node->recipients ) == 0 ) {
-_Chain_Extract_unprotected( &node->Node );
-_Atomic_Store_ulong( &node->done, 1, ATOMIC_ORDER_RELEASE );
-  }
-}
-node = next;
-  }
+  smp_cache_area *area = arg;
 
-  _SMP_lock_Release_and_ISR_enable( &_Cache_manager_SMP_control.Lock,
-  &lock_context );
+  rtems_cache_flush_multiple_data_lines(area->addr, area->size);
 }
 
-#if defined(CPU_DATA_CACHE_ALIGNMENT) || \
-(defined(CPU_INSTRUCTION_CACHE_ALIGNMENT) && \
-defined(CPU_CACHE_NO_INSTRUCTION_CACHE_SNOOPING))
-
-static void
-_Cache_manager_Process_cache_messages( void )
+static void smp_cache_data_inv(void *arg)
 {
-  unsigned long message;
-  Per_CPU_Control *cpu_self;
-  ISR_Level isr_level;
-
-  _ISR_Disable_without_giant( isr_level );
-
-  cpu_self = _Per_CPU_Get();
-
-  message = _Atomic_Load_ulong( &cpu_self->message, ATOMIC_ORDER_RELAXED );
+  smp_cache_area *area = arg;
 
-  if ( message & SMP_MESSAGE_CACHE_MANAGER ) {
-if ( _Atomic_Compare_exchange_ulong( &cpu_self->message, &message,
-message & ~SMP_MESSAGE_CACHE_MANAGER, ATOMIC_ORDER_RELAXED,
-ATOMIC_ORDER_RELAXED ) ) {
-  _SMP_Cache_manager_message_handler();
-}
-  }
-
-  _ISR_Enable_without_giant( isr_level );
+  rtems_cache_invalidate_multiple_data_lines(area->addr, area->size);
 }
 
-/*
- * We can not make this function static as we need to access it
- * from the test program.
- */
-void
-_Cache_manager_Send_smp_msg(
-const size_t setsize,
-const cpu_set_t *set,
-Cache_manager_Function_ptr func,
-const void * addr,
-size_t size
-  );
-
-void
-_Cache_manager_Send_smp_msg(
-const size_t setsize,
-const cpu_set_t *set,
-Cache_manager_Function_ptr func,
-const void * addr,
-size_t size
-  )
+static void smp_cache_data_flush_all(void *arg)
 {
-  uint32_t i;
-  Cache_manager_SMP_node node;
-  size_t set_size = CPU_ALLOC_SIZE( _SMP_Get_processor_count() );
-  char cpu_set_copy[set_size];
-  SMP_lock_Context lock_context;
-
-  if ( ! _System_state_Is_up( _System_state_Get() ) ) {
-func( addr, size );
-return;
-  }
-
-  memset( cpu_set_copy, 0, set_size );
-  if( set == NULL ) {
-for( i=0; i<_SMP_Get_processor_count(); ++i )
-  CPU_SET_S( i, set_size, (cpu_set_t *)cpu_set_copy );
-  } else {
-for( i=0; i<_SMP_Get_processor_count(); ++i )
-  if( CPU_ISSET_S( i, set_size, set ) )
-CPU_SET_S( i, set_size, (cpu_set_t *)cpu_set_copy );
-  }
-
-  node.func = func;
-  node.addr = addr;
-  node.size = size;
-  node.setsize = set_size;
-  node.recipients = (cpu_set_t *)cpu_set_copy;
-  _Atomic_Store_ulong( &no

Re: [PING][PATCH v2] Change the assert in _Thread_Dispatch_decrement_disable_level

2015-04-17 Thread Martin Galvan
Thanks a lot!

On Fri, Apr 17, 2015 at 7:18 AM, Sebastian Huber
 wrote:
> I checked in a slightly modified version.
>
>
> On 16/04/15 16:27, Martin Galvan wrote:
>>
>> While cpu_self->thread_dispatch_disable_level shouldn't ever be zero, it
>> would be better to check it before doing the decrement.
>>
>> Changes in v2:
>>   * Modified the asserts as requested in
>> https://lists.rtems.org/pipermail/devel/2015-February/009821.html.
>> ---
>>   cpukit/score/src/threaddispatchdisablelevel.c | 6 +-
>>   1 file changed, 5 insertions(+), 1 deletion(-)
>>
>> diff --git a/cpukit/score/src/threaddispatchdisablelevel.c
>> b/cpukit/score/src/threaddispatchdisablelevel.c
>> index 158fc39..6043fe7 100644
>> --- a/cpukit/score/src/threaddispatchdisablelevel.c
>> +++ b/cpukit/score/src/threaddispatchdisablelevel.c
>> @@ -107,11 +107,15 @@ uint32_t _Thread_Dispatch_decrement_disable_level(
>> void )
>>
>> cpu_self = _Per_CPU_Get();
>> disable_level = cpu_self->thread_dispatch_disable_level;
>> +  _Assert( disable_level > 0);
>> --disable_level;
>> cpu_self->thread_dispatch_disable_level = disable_level;
>>
>> _Giant_Do_release( cpu_self );
>> -  _Assert( disable_level != 0 || _Giant.owner_cpu != cpu_self );
>> +
>> +  _Assert( ( disable_level == 0 && _Giant.owner_cpu != cpu_self )
>> +|| ( disable_level != 0 && _Giant.owner_cpu == cpu_self )
>> +  );
>>
>> _Profiling_Thread_dispatch_enable( cpu_self, disable_level );
>> _ISR_Enable_without_giant( isr_level );
>> --
>> 2.3.4
>
>
> --
> 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.
>



-- 


Martin Galvan

Software Engineer

Taller Technologies Argentina


San Lorenzo 47, 3rd Floor, Office 5

Córdoba, Argentina

Phone: 54 351 4217888 / +54 351 4218211
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Trac ticket delete.

2015-04-17 Thread Amar Takhar
We're getting hit with a lot of spam at the moment.  Some may get through for 
those of you with permission you can delete a ticket.  The location of the 
button is here:

  https://trac-hacks.org/attachment/ticket/10841/DeleteButton.png

It will ask for a conformation.


Amar.
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


Re: Trac ticket delete.

2015-04-17 Thread Joel Sherrill


On April 17, 2015 7:58:02 AM CDT, Amar Takhar  wrote:
>We're getting hit with a lot of spam at the moment.  Some may get
>through for 
>those of you with permission you can delete a ticket.  The location of
>the 
>button is here:
>
>  https://trac-hacks.org/attachment/ticket/10841/DeleteButton.png
>
>It will ask for a conformation.
>

What about the account that filed it?


>Amar.
>___
>devel mailing list
>devel@rtems.org
>http://lists.rtems.org/mailman/listinfo/devel

--joel
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


Re: 4.11 branch point

2015-04-17 Thread Joel Sherrill


On 4/17/2015 5:11 AM, Sebastian Huber wrote:
> Hello,
>
> I think everything for the 4.11 release is now in the tree. It would be 
> good to do the branch soon, since the watchdog changes and the FreeBSD 
> timecounters should probably be not in the release. We can test and 
> polish for the release in the branch.
>
Agreed.  Nothing is really outstanding AFAIK from a patch perspective.
I still need to run coverage and post reports. We haven't looked at that
in a while and the changes could have negatively impacted that. That
can be post-branching.

Are you including the new timer server implementation you just
posted as a post-branching merge?

I would like to do a build and test sweep before we branch. Daniel's
patch was quite large and I just want to make sure all is OK still.
But nothing really blocking except a sanity check. All built OK overnight
and the test runs have been acceptable.

This is the point at which feedback from real hardware from user's would be
appreciated but I won't hold a release waiting for any. I will be doing
a sweep
on simulators.  Anything additional is a plus.

I would really like for Chris to be back from holidays before we push
the button. Just in case. :)


-- 
Joel Sherrill, Ph.D. Director of Research & Development
joel.sherr...@oarcorp.comOn-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available(256) 722-9985


___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


Re: [PATCH 3/4] score: Add Watchdog_Iterator

2015-04-17 Thread Gedare Bloom
I'm not a big fan of this "watchdog_remove_it" terminology. Can I
suggest the state be called something else like WATCHDOG_REMOVING or
maybe WATCHDOG_TRANSIENT, and perhaps the actual removal function be
renamed _Watchdog_Remove_internal() or something similar? Also, given
the refactoring here and that this _Watchdog_Remove_it() is only
called by Watchdog_Remove/Tickle, perhaps it makes sense to put all
three functions into a single source file and make the Remove_it()
function static in that file.

Gedare

On Fri, Apr 17, 2015 at 4:55 AM, Sebastian Huber
 wrote:
> Rewrite the _Watchdog_Insert(), _Watchdog_Remove() and
> _Watchdog_Tickle() functions to use interator items to synchronize
> concurrent operations.  This makes it possible to get rid of the global
> variables _Watchdog_Sync_level and _Watchdog_Sync_count which are a
> blocking point for scalable SMP solutions.
>
> Update #2307.
> ---
>  cpukit/rtems/src/timercreate.c  |   6 ++
>  cpukit/score/include/rtems/score/watchdogimpl.h |  58 ---
>  cpukit/score/src/watchdog.c |   2 -
>  cpukit/score/src/watchdoginsert.c   | 112 +++-
>  cpukit/score/src/watchdogremove.c   |  71 ++---
>  cpukit/score/src/watchdogtickle.c   | 130 
> 
>  testsuites/sptests/spsize/size.c|   4 +-
>  testsuites/sptests/spwatchdog/init.c| 103 +++
>  8 files changed, 317 insertions(+), 169 deletions(-)
>
> diff --git a/cpukit/rtems/src/timercreate.c b/cpukit/rtems/src/timercreate.c
> index 390c965..ef217e9 100644
> --- a/cpukit/rtems/src/timercreate.c
> +++ b/cpukit/rtems/src/timercreate.c
> @@ -28,6 +28,10 @@
>  void _Timer_Cancel( Timer_Control *the_timer )
>  {
>Timer_server_Control *timer_server;
> +  ISR_Level level;
> +
> +  /* The timer class must not change during the cancel operation */
> +  _ISR_Disable( level );
>
>switch ( the_timer->the_class ) {
>  case TIMER_INTERVAL:
> @@ -44,6 +48,8 @@ void _Timer_Cancel( Timer_Control *the_timer )
>  default:
>break;
>}
> +
> +  _ISR_Enable( level );
>  }
>
>  rtems_status_code rtems_timer_create(
> diff --git a/cpukit/score/include/rtems/score/watchdogimpl.h 
> b/cpukit/score/include/rtems/score/watchdogimpl.h
> index f52b55d..304392b 100644
> --- a/cpukit/score/include/rtems/score/watchdogimpl.h
> +++ b/cpukit/score/include/rtems/score/watchdogimpl.h
> @@ -46,6 +46,28 @@ extern "C" {
>}
>
>  /**
> + * @brief Iterator item to synchronize concurrent insert, remove and tickle
> + * operations.
> + */
> +typedef struct {
> +  /**
> +   * @brief A node for a Watchdog_Header::Iterators chain.
> +   */
> +  Chain_Node Node;
> +
> +  /**
> +   * @brief The current delta interval of the new watchdog to insert.
> +   */
> +  Watchdog_Interval delta_interval;
> +
> +  /**
> +   * @brief The current watchdog of the chain on the way to insert the new
> +   * watchdog.
> +   */
> +  Chain_Node *current;
> +} Watchdog_Iterator;
> +
> +/**
>   * @brief Watchdog header.
>   */
>  typedef struct {
> @@ -58,23 +80,15 @@ typedef struct {
> * @brief The chain of active or transient watchdogs.
> */
>Chain_Control Watchdogs;
> -} Watchdog_Header;
> -
> -/**
> - *  @brief Watchdog synchronization level.
> - *
> - *  This used for synchronization purposes
> - *  during an insert on a watchdog delta chain.
> - */
> -SCORE_EXTERN volatile uint32_t_Watchdog_Sync_level;
>
> -/**
> - *  @brief Watchdog synchronization count.
> - *
> - *  This used for synchronization purposes
> - *  during an insert on a watchdog delta chain.
> - */
> -SCORE_EXTERN volatile uint32_t_Watchdog_Sync_count;
> +  /**
> +   * @brief Currently active iterators.
> +   *
> +   * The iterators are registered in _Watchdog_Insert() and updated in case 
> the
> +   * watchdog chain changes.
> +   */
> +  Chain_Control Iterators;
> +} Watchdog_Header;
>
>  /**
>   *  @brief Watchdog chain which is managed at ticks.
> @@ -139,6 +153,16 @@ Watchdog_States _Watchdog_Remove (
>  );
>
>  /**
> + * @brief Actually removes an WATCHDOG_ACTIVE or WATCHDOG_REMOVE_IT watchdog.
> + *
> + * @see _Watchdog_Remove() and _Watchdog_Tickle().
> + */
> +void _Watchdog_Remove_it(
> +  Watchdog_Header  *header,
> +  Watchdog_Control *the_watchdog
> +);
> +
> +/**
>   *  @brief Adjusts the header watchdog chain in the backward direction for
>   *  units ticks.
>   *
> @@ -437,7 +461,9 @@ RTEMS_INLINE_ROUTINE void _Watchdog_Header_initialize(
>Watchdog_Header *header
>  )
>  {
> +  _ISR_lock_Initialize( &header->Lock, "Watchdog" );
>_Chain_Initialize_empty( &header->Watchdogs );
> +  _Chain_Initialize_empty( &header->Iterators );
>  }
>
>  /** @} */
> diff --git a/cpukit/score/src/watchdog.c b/cpukit/score/src/watchdog.c
> index 0db60ef..11d3cf2 100644
> --- a/cpukit/score/src/watchdog.c
> +++ b/cpukit/score/src/watchdog.c
> @@ -25,8 +25,6 @@
>
>  void _Watchdog_Handler_initializa

Re: 4.11 branch point

2015-04-17 Thread Sebastian Huber

- Joel Sherrill  schrieb:
> 
> 
> On 4/17/2015 5:11 AM, Sebastian Huber wrote:
> > Hello,
> >
> > I think everything for the 4.11 release is now in the tree. It would be 
> > good to do the branch soon, since the watchdog changes and the FreeBSD 
> > timecounters should probably be not in the release. We can test and 
> > polish for the release in the branch.
> >
> Agreed.  Nothing is really outstanding AFAIK from a patch perspective.
> I still need to run coverage and post reports. We haven't looked at that
> in a while and the changes could have negatively impacted that. That
> can be post-branching.
> 
> Are you including the new timer server implementation you just
> posted as a post-branching merge?

Yes, the new timer server is based on the changed watchdog implementation.  It 
works well in all tests so far, but I don't think its ready for a release.

-- 
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.huber at embedded-brains.de
PGP : Public key available on request.

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

Re: [PATCH 4/4] score: New timer server implementation

2015-04-17 Thread Gedare Bloom
Tested on / results?

On Fri, Apr 17, 2015 at 4:55 AM, Sebastian Huber
 wrote:
> Use mostly the standard watchdog operations.  Use a system event for
> synchronization.  This implementation is simpler and offers better SMP
> performance.
>
> Update #2307.
> ---
>  cpukit/rtems/include/rtems/rtems/event.h   |   5 +
>  cpukit/rtems/include/rtems/rtems/timerimpl.h   |  51 +-
>  cpukit/rtems/src/timerserver.c | 570 
> +++--
>  cpukit/score/Makefile.am   |   2 +-
>  cpukit/score/include/rtems/score/watchdogimpl.h|  59 ++-
>  cpukit/score/src/watchdogadjust.c  |  35 +-
>  cpukit/score/src/watchdogadjusttochain.c   |  75 ---
>  cpukit/score/src/watchdoginsert.c  |  21 +-
>  testsuites/sptests/spintrcritical17/init.c | 163 +++---
>  .../sptests/spintrcritical17/spintrcritical17.doc  |   6 +-
>  10 files changed, 370 insertions(+), 617 deletions(-)
>  delete mode 100644 cpukit/score/src/watchdogadjusttochain.c
>
> diff --git a/cpukit/rtems/include/rtems/rtems/event.h 
> b/cpukit/rtems/include/rtems/rtems/event.h
> index dce7de1..012452a 100644
> --- a/cpukit/rtems/include/rtems/rtems/event.h
> +++ b/cpukit/rtems/include/rtems/rtems/event.h
> @@ -319,6 +319,11 @@ rtems_status_code rtems_event_receive (
>  #define RTEMS_EVENT_SYSTEM_NETWORK_CLOSE RTEMS_EVENT_26
>
>  /**
> + * @brief Reserved system event for the timer server.
> + */
> +#define RTEMS_EVENT_SYSTEM_TIMER_SERVER RTEMS_EVENT_30
> +
> +/**
>   * @brief Reserved system event for transient usage.
>   */
>  #define RTEMS_EVENT_SYSTEM_TRANSIENT RTEMS_EVENT_31
> diff --git a/cpukit/rtems/include/rtems/rtems/timerimpl.h 
> b/cpukit/rtems/include/rtems/rtems/timerimpl.h
> index 4f200ef..e5b37aa 100644
> --- a/cpukit/rtems/include/rtems/rtems/timerimpl.h
> +++ b/cpukit/rtems/include/rtems/rtems/timerimpl.h
> @@ -65,24 +65,43 @@ typedef struct {
>Watchdog_Control System_watchdog;
>
>/**
> +   * @brief Remaining delta of the system watchdog.
> +   */
> +  Watchdog_Interval system_watchdog_delta;
> +
> +  /**
> +   * @brief Unique identifier of the context which deals currently with the
> +   * system watchdog.
> +   */
> +  Thread_Control *system_watchdog_helper;
> +
> +  /**
> +   * @brief Each insert and tickle operation increases the generation count 
> so
> +   * that the system watchdog dealer notices updates of the watchdog chain.
> +   */
> +  uint32_t generation;
> +
> +  /**
> * @brief Watchdog header managed by the timer server.
> */
>Watchdog_Header Header;
>
>/**
> -   * @brief Last known time snapshot of the timer server.
> +   * @brief Last time snapshot of the timer server.
> *
> * The units may be ticks or seconds.
> */
> -  Watchdog_Interval volatile last_snapshot;
> -} Timer_server_Watchdogs;
> +  Watchdog_Interval last_snapshot;
>
> -struct Timer_server_Control {
>/**
> -   * @brief Timer server thread.
> +   * @brief Current time snapshot of the timer server.
> +   *
> +   * The units may be ticks or seconds.
> */
> -  Thread_Control *thread;
> +  Watchdog_Interval current_snapshot;
> +} Timer_server_Watchdogs;
>
> +struct Timer_server_Control {
>/**
> * @brief The cancel method of the timer server.
> */
> @@ -102,26 +121,6 @@ struct Timer_server_Control {
> * @brief TOD watchdogs triggered by the timer server.
> */
>Timer_server_Watchdogs TOD_watchdogs;
> -
> -  /**
> -   * @brief Chain of timers scheduled for insert.
> -   *
> -   * This pointer is not @c NULL whenever the interval and TOD chains are
> -   * processed.  After the processing this list will be checked and if
> -   * necessary the processing will be restarted.  Processing of these chains
> -   * can be only interrupted through interrupts.
> -   */
> -  Chain_Control *volatile insert_chain;
> -
> -  /**
> -   * @brief Indicates that the timer server is active or not.
> -   *
> -   * The server is active after the delay on a system watchdog.  The activity
> -   * period of the server ends when no more watchdogs managed by the server
> -   * fire.  The system watchdogs must not be manipulated when the server is
> -   * active.
> -   */
> -  bool volatile active;
>  };
>
>  /**
> diff --git a/cpukit/rtems/src/timerserver.c b/cpukit/rtems/src/timerserver.c
> index 15cbdfd..db38f48 100644
> --- a/cpukit/rtems/src/timerserver.c
> +++ b/cpukit/rtems/src/timerserver.c
> @@ -15,7 +15,7 @@
>  /*  COPYRIGHT (c) 1989-2008.
>   *  On-Line Applications Research Corporation (OAR).
>   *
> - *  Copyright (c) 2009 embedded brains GmbH.
> + *  Copyright (c) 2009-2015 embedded brains GmbH.
>   *
>   *  The license and distribution terms for this file may be
>   *  found in the file LICENSE in this distribution or at
> @@ -26,200 +26,128 @@
>  #include "config.h"
>  #endif
>
> +#include 
>  #include 
>  #include 
> -#include 
> -#include 
>  #include 
>
>  static Timer_server_Control _Timer_server_Default;
>
> -s

Re: Trac ticket delete.

2015-04-17 Thread Amar Takhar
On 2015-04-17 07:59 -0500, Joel Sherrill wrote:
> 
> What about the account that filed it?

I added that user to the 'SPAM' group.  This will trash any changes they make 
and have the system learn it as SPAM (Bayesian).

Developers have access to do this noone else.


Amar.
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


Re: [PATCH 3/4] score: Add Watchdog_Iterator

2015-04-17 Thread Sebastian Huber
I will make it static.  This helps to avoid an accidental usage.

- Gedare Bloom  schrieb:
> I'm not a big fan of this "watchdog_remove_it" terminology. Can I
> suggest the state be called something else like WATCHDOG_REMOVING or
> maybe WATCHDOG_TRANSIENT, and perhaps the actual removal function be
> renamed _Watchdog_Remove_internal() or something similar? Also, given
> the refactoring here and that this _Watchdog_Remove_it() is only
> called by Watchdog_Remove/Tickle, perhaps it makes sense to put all
> three functions into a single source file and make the Remove_it()
> function static in that file.
> 
> Gedare
> 
> On Fri, Apr 17, 2015 at 4:55 AM, Sebastian Huber
>  wrote:
> > Rewrite the _Watchdog_Insert(), _Watchdog_Remove() and
> > _Watchdog_Tickle() functions to use interator items to synchronize
> > concurrent operations.  This makes it possible to get rid of the global
> > variables _Watchdog_Sync_level and _Watchdog_Sync_count which are a
> > blocking point for scalable SMP solutions.
> >
> > Update #2307.
> > ---
> >  cpukit/rtems/src/timercreate.c  |   6 ++
> >  cpukit/score/include/rtems/score/watchdogimpl.h |  58 ---
> >  cpukit/score/src/watchdog.c |   2 -
> >  cpukit/score/src/watchdoginsert.c   | 112 +++-
> >  cpukit/score/src/watchdogremove.c   |  71 ++---
> >  cpukit/score/src/watchdogtickle.c   | 130 
> > 
> >  testsuites/sptests/spsize/size.c|   4 +-
> >  testsuites/sptests/spwatchdog/init.c| 103 +++
> >  8 files changed, 317 insertions(+), 169 deletions(-)
> >
> > diff --git a/cpukit/rtems/src/timercreate.c b/cpukit/rtems/src/timercreate.c
> > index 390c965..ef217e9 100644
> > --- a/cpukit/rtems/src/timercreate.c
> > +++ b/cpukit/rtems/src/timercreate.c
> > @@ -28,6 +28,10 @@
> >  void _Timer_Cancel( Timer_Control *the_timer )
> >  {
> >Timer_server_Control *timer_server;
> > +  ISR_Level level;
> > +
> > +  /* The timer class must not change during the cancel operation */
> > +  _ISR_Disable( level );
> >
> >switch ( the_timer->the_class ) {
> >  case TIMER_INTERVAL:
> > @@ -44,6 +48,8 @@ void _Timer_Cancel( Timer_Control *the_timer )
> >  default:
> >break;
> >}
> > +
> > +  _ISR_Enable( level );
> >  }
> >
> >  rtems_status_code rtems_timer_create(
> > diff --git a/cpukit/score/include/rtems/score/watchdogimpl.h 
> > b/cpukit/score/include/rtems/score/watchdogimpl.h
> > index f52b55d..304392b 100644
> > --- a/cpukit/score/include/rtems/score/watchdogimpl.h
> > +++ b/cpukit/score/include/rtems/score/watchdogimpl.h
> > @@ -46,6 +46,28 @@ extern "C" {
> >}
> >
> >  /**
> > + * @brief Iterator item to synchronize concurrent insert, remove and tickle
> > + * operations.
> > + */
> > +typedef struct {
> > +  /**
> > +   * @brief A node for a Watchdog_Header::Iterators chain.
> > +   */
> > +  Chain_Node Node;
> > +
> > +  /**
> > +   * @brief The current delta interval of the new watchdog to insert.
> > +   */
> > +  Watchdog_Interval delta_interval;
> > +
> > +  /**
> > +   * @brief The current watchdog of the chain on the way to insert the new
> > +   * watchdog.
> > +   */
> > +  Chain_Node *current;
> > +} Watchdog_Iterator;
> > +
> > +/**
> >   * @brief Watchdog header.
> >   */
> >  typedef struct {
> > @@ -58,23 +80,15 @@ typedef struct {
> > * @brief The chain of active or transient watchdogs.
> > */
> >Chain_Control Watchdogs;
> > -} Watchdog_Header;
> > -
> > -/**
> > - *  @brief Watchdog synchronization level.
> > - *
> > - *  This used for synchronization purposes
> > - *  during an insert on a watchdog delta chain.
> > - */
> > -SCORE_EXTERN volatile uint32_t_Watchdog_Sync_level;
> >
> > -/**
> > - *  @brief Watchdog synchronization count.
> > - *
> > - *  This used for synchronization purposes
> > - *  during an insert on a watchdog delta chain.
> > - */
> > -SCORE_EXTERN volatile uint32_t_Watchdog_Sync_count;
> > +  /**
> > +   * @brief Currently active iterators.
> > +   *
> > +   * The iterators are registered in _Watchdog_Insert() and updated in 
> > case the
> > +   * watchdog chain changes.
> > +   */
> > +  Chain_Control Iterators;
> > +} Watchdog_Header;
> >
> >  /**
> >   *  @brief Watchdog chain which is managed at ticks.
> > @@ -139,6 +153,16 @@ Watchdog_States _Watchdog_Remove (
> >  );
> >
> >  /**
> > + * @brief Actually removes an WATCHDOG_ACTIVE or WATCHDOG_REMOVE_IT 
> > watchdog.
> > + *
> > + * @see _Watchdog_Remove() and _Watchdog_Tickle().
> > + */
> > +void _Watchdog_Remove_it(
> > +  Watchdog_Header  *header,
> > +  Watchdog_Control *the_watchdog
> > +);
> > +
> > +/**
> >   *  @brief Adjusts the header watchdog chain in the backward direction for
> >   *  units ticks.
> >   *
> > @@ -437,7 +461,9 @@ RTEMS_INLINE_ROUTINE void _Watchdog_Header_initialize(
> >Watchdog_Header *header
> >  )
> >  {
> > +  _ISR_lock_Initialize

Re: [PATCH 4/4] score: New timer server implementation

2015-04-17 Thread Sebastian Huber

- Gedare Bloom  schrieb:
> Tested on / results?

The timer server is tested by the test suite.  I use the sis and 
realview_pbx_a9_qemu BSPs for testing.


-- 
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.huber at embedded-brains.de
PGP : Public key available on request.

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

[PATCH] Beagle BSP Improvements (GPIO driver)

2015-04-17 Thread Ketul Shah
Hello,

I have proposed in GSoC on Beagle BSP Improvements. As starting I started
working for gpio driver development . At this stage I am able to
demonstrate USR LEDs pattern.

Videos of that can be found here on YouTube.
https://youtu.be/B3mSsfo-PAQ &
https://youtu.be/M1aKpOhUvv4.

Herewith I have attached patch.txt file. Alternatively you can have
https://gist.github.com/ketul93/2e0d2c4b8b586be62e1d that includes the
newly added files code. I would be happy to hear your reviews and changes
on my work.

And also I have been updating my work on
https://github.com/ketul93/RTEMS-on-BBB repo.

It would be great to have your comments on my proposal

.

Thanks and regards,
ketul
commit 67a0aafa3b2e66419143f0acd65df3c9bd3498a0
Author: ketul93 
Date:   Fri Apr 17 16:59:45 2015 +0530

GPIO driver developement and simple USR LEDs demo on BeagleBone Black

diff --git a/c/src/lib/libbsp/arm/beagle/Makefile.am 
b/c/src/lib/libbsp/arm/beagle/Makefile.am
index abef8ba..56f1afb 100644
--- a/c/src/lib/libbsp/arm/beagle/Makefile.am
+++ b/c/src/lib/libbsp/arm/beagle/Makefile.am
@@ -39,6 +39,8 @@ include_bsp_HEADERS += ../shared/include/arm-release-id.h
 include_bsp_HEADERS += ../shared/include/start.h
 include_bsp_HEADERS += include/irq.h
 include_bsp_HEADERS += include/i2c.h
+include_bsp_HEADERS += include/beagleboard.h
+include_bsp_HEADERS += include/gpio.h
 
 include_libcpu_HEADERS =
 include_libcpu_HEADERS += ../../../libcpu/arm/shared/include/arm-cp15.h
@@ -110,6 +112,10 @@ libbsp_a_SOURCES += ../../shared/console.c \
 ../../shared/console_read.c \
 ../../shared/console_write.c \
 ../../shared/console_control.c
+# GPIO
+
+libbsp_a_SOURCES += gpio/gpio.c
+
 
 # I2C
 libbsp_a_SOURCES += misc/i2c.c
diff --git a/c/src/lib/libbsp/arm/beagle/gpio/gpio.c 
b/c/src/lib/libbsp/arm/beagle/gpio/gpio.c
new file mode 100644
index 000..4c67020
--- /dev/null
+++ b/c/src/lib/libbsp/arm/beagle/gpio/gpio.c
@@ -0,0 +1,66 @@
+/**
+ * @file
+ *
+ * @ingroup arm_beagle
+ *
+ * @brief Global BSP definitions.
+ */
+
+/*
+ * Copyright (c) 2015 Ketul Shah 
+
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+
+int is_initialized = 0;
+
+void gpio_initialize(void)
+{  
+   if ( is_initialized )
+return;
+
+  is_initialized = 1;
+  write32(AM335X_GPIO1_BASE +GPIO_OE,0x);  //Enabling GPIO1 pins as 
OUTPUT PINs
+}
+
+
+ void gpio_set_value(unsigned gpio, int value)
+{
+
+   if (value)
+   {
+   uint8_t tmp = readb(AM335X_GPIO1_BASE + 
gpio/8+GPIO_SETDATAOUT);
+tmp |= (1 << gpio%8);
+writeb(tmp, AM335X_GPIO1_BASE + 
gpio/8+GPIO_SETDATAOUT);
+   }
+   else
+   {
+   uint8_t tmp = readb(AM335X_GPIO1_BASE + 
gpio/8+GPIO_CLEARDATAOUT);
+   tmp |= (1 << gpio%8);
+   writeb(tmp, AM335X_GPIO1_BASE + 
gpio/8+GPIO_CLEARDATAOUT);
+
+   }
+
+}
+
+void allgpioset(void)
+{
+printf("Setting all gpio1\n");
+write32(AM335X_GPIO1_BASE +GPIO_SETDATAOUT,0x);
+}
+
+void allgpioclr(void)
+{
+printf("Clearing all gpio1\n");
+write32(AM335X_GPIO1_BASE+GPIO_CLEARDATAOUT,0x);
+}
diff --git a/c/src/lib/libbsp/arm/beagle/include/beagleboard.h 
b/c/src/lib/libbsp/arm/beagle/include/beagleboard.h
new file mode 100644
index 000..c5eff7e
--- /dev/null
+++ b/c/src/lib/libbsp/arm/beagle/include/beagleboard.h
@@ -0,0 +1,38 @@
+/**
+ * @file
+ *
+ * @ingroup arm_beagle
+ *
+ * @brief Global BSP definitions.
+ */
+
+/*
+ * Copyright (c) 2015 Ketul Shah 
+
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#ifndef LIBBSP_ARM_BEAGLE_H
+#define LIBBSP_ARM_BEAGLE_H
+
+#include 
+#include 
+
+/* GPIO Memory Registers */
+#define GPIO_REGISTER_SIZE (4)
+
+#define AM335X_GPIO0_BASE  (0x44E07000)
+#define AM335X_GPIO1_BASE  (0x4804C000)
+#define AM335X_GPIO2_BASE  (0x481AC000)
+#define AM335X_GPIO3_BASE  (0x481AE000)
+
+#define GPIO_CLEARDATAOUT (0x190)
+#define GPIO_SETDATAOUT   (0x194)
+#define GPIO_OE  (0x134)
+#define GPIO_DATAOUT  (0x13C)
+#define GPIO_DATAIN   (0x138)
+
+
+#endif
diff --git a/c/src/lib/libbsp/arm/beagle/include/gpio.h 
b/c/src/lib/libbsp/arm/beagle/include/gpio.h
new file mode 100644
index 000..e59d1cb
--- /dev/null
+++ b/c/src/lib/libbsp/arm/beagle/include/gpio.h
@@ -0,0 +1,37 @@
+/**
+ * @file
+ *
+ * @ingroup arm_beagle
+ *
+ * @brief Global BSP definitions.
+ */
+
+/*
+ * Copyright (c) 2015 Ketul Shah 
+
+ * The license and distribution terms for this fi

Re: [PATCH] Beagle BSP Improvements (GPIO driver)

2015-04-17 Thread Hesham ALMatary
Hi Ketul,

I'd suggest you have a look at this page [1] to know about RTEMS
coding conventions.

[1] https://devel.rtems.org/wiki/Developer/Coding/Conventions

Best,
Hesham

On Fri, Apr 17, 2015 at 6:51 PM, Ketul Shah  wrote:
> Hello,
>
> I have proposed in GSoC on Beagle BSP Improvements. As starting I started
> working for gpio driver development . At this stage I am able to demonstrate
> USR LEDs pattern.
>
> Videos of that can be found here on YouTube.
> https://youtu.be/B3mSsfo-PAQ &
> https://youtu.be/M1aKpOhUvv4.
>
> Herewith I have attached patch.txt file. Alternatively you can have
> https://gist.github.com/ketul93/2e0d2c4b8b586be62e1d that includes the newly
> added files code. I would be happy to hear your reviews and changes on my
> work.
>
> And also I have been updating my work on
> https://github.com/ketul93/RTEMS-on-BBB repo.
>
> It would be great to have your comments on my proposal.
>
> Thanks and regards,
> ketul
>
> ___
> devel mailing list
> devel@rtems.org
> http://lists.rtems.org/mailman/listinfo/devel



-- 
Hesham
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


Re: Trac ticket delete.

2015-04-17 Thread Eduardo Silva
just my 5c: on our project we faced the same problem with Trac. Bots create
accounts and start commenting tickets with Ads and general trash. The
solution for us was to start using Github Issues, no more spam.

On Fri, Apr 17, 2015 at 8:25 AM, Amar Takhar  wrote:

> On 2015-04-17 07:59 -0500, Joel Sherrill wrote:
> >
> > What about the account that filed it?
>
> I added that user to the 'SPAM' group.  This will trash any changes they
> make
> and have the system learn it as SPAM (Bayesian).
>
> Developers have access to do this noone else.
>
>
> Amar.
> ___
> devel mailing list
> devel@rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>



-- 
Eduardo Silva
Monkey Software
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel