commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r7569 - in gnuradio/branches/developers/eb/gcell/src/l


From: eb
Subject: [Commit-gnuradio] r7569 - in gnuradio/branches/developers/eb/gcell/src/lib: . spu
Date: Tue, 5 Feb 2008 11:39:02 -0700 (MST)

Author: eb
Date: 2008-02-05 11:39:01 -0700 (Tue, 05 Feb 2008)
New Revision: 7569

Modified:
   gnuradio/branches/developers/eb/gcell/src/lib/gc_job_manager_impl.cc
   gnuradio/branches/developers/eb/gcell/src/lib/gc_job_manager_impl.h
   gnuradio/branches/developers/eb/gcell/src/lib/spu/test_spu.c
Log:
Backed out changesets [7562] and [7567].  Using Cell signals is
''way'' too slow for our purposes.


Modified: gnuradio/branches/developers/eb/gcell/src/lib/gc_job_manager_impl.cc
===================================================================
--- gnuradio/branches/developers/eb/gcell/src/lib/gc_job_manager_impl.cc        
2008-02-05 18:34:58 UTC (rev 7568)
+++ gnuradio/branches/developers/eb/gcell/src/lib/gc_job_manager_impl.cc        
2008-02-05 18:39:01 UTC (rev 7569)
@@ -24,7 +24,6 @@
 #endif
 #include "gc_job_manager_impl.h"
 #include "gc_mbox.h"
-#include "memory_barrier.h"
 
 #include <stdio.h>
 #include <stdexcept>
@@ -220,9 +219,7 @@
 
   int spe_flags = (SPE_EVENTS_ENABLE
                   | SPE_CFG_SIGNOTIFY1_OR
-                  | SPE_CFG_SIGNOTIFY2_OR
-                  | SPE_MAP_PS
-                  );
+                  | SPE_CFG_SIGNOTIFY2_OR);
   
   for (unsigned int i = 0; i < d_options.nspes; i++){
     // FIXME affinity stuff goes here
@@ -237,14 +234,6 @@
     d_worker[i].spu_args->spu_idx = i;
     d_worker[i].state = WS_INIT;
 
-    // get a user-space pointer to the MMIO SIG_NOTIFY_1 register
-    void *p = spe_ps_area_get(d_worker[i].spe_ctx, SPE_SIG_NOTIFY_1_AREA);
-    if (p == 0){
-      perror("spe_ps_area_get");
-      throw std::runtime_error("spe_ps_area_get");
-    }
-    d_worker[i].spu_sig_notify_1 = &((spe_sig_notify_1_area_t 
*)p)->SPU_Sig_Notify_1;
-
     int r = spe_program_load(d_worker[i].spe_ctx, spe_image);
     if (r != 0){
       perror("spe_program_load");
@@ -494,10 +483,6 @@
   // FIXME keep count of jobs in progress?
   
   gc_jd_queue_enqueue(d_queue, jd);
-
-  // broadcast that there's work available
-  signal_all_spes(SPE_SIG_NOTIFY_REG_1, 0x1);
-
   return true;
 }
 
@@ -603,50 +588,6 @@
 
 ////////////////////////////////////////////////////////////////////////
 
-bool
-gc_job_manager_impl::signal_all_spes(int signal_reg, uint32_t data)
-{
-#if 0
-  bool ok = true;
-
-  for (unsigned int i = 0; i < d_options.nspes; i++)
-    ok &= signal_spe(i, signal_reg, data);
-
-  return ok;
-#else
-
-  smp_wmb();   // order stores
-  for (unsigned int i = 0; i < d_options.nspes; i++)
-    *d_worker[i].spu_sig_notify_1 = data;
-
-  return true;
-#endif
-}
-
-bool
-gc_job_manager_impl::signal_spe(unsigned int spe, int signal_reg, uint32_t 
data)
-{
-  if (spe >= d_options.nspes)
-    return false;
-
-#if 0
-  smp_wmb();
-  int r = spe_signal_write(d_worker[spe].spe_ctx, signal_reg, data);
-  if (r == -1){
-    perror("spe_signal_write");
-    return false;
-  }
-
-  return true;
-#else
-  smp_wmb();
-  *d_worker[spe].spu_sig_notify_1 = data;
-  return true;
-#endif
-}
-
-////////////////////////////////////////////////////////////////////////
-
 static void
 pthread_create_failure_msg(int r, const char *which)
 {

Modified: gnuradio/branches/developers/eb/gcell/src/lib/gc_job_manager_impl.h
===================================================================
--- gnuradio/branches/developers/eb/gcell/src/lib/gc_job_manager_impl.h 
2008-02-05 18:34:58 UTC (rev 7568)
+++ gnuradio/branches/developers/eb/gcell/src/lib/gc_job_manager_impl.h 
2008-02-05 18:39:01 UTC (rev 7569)
@@ -50,7 +50,6 @@
   spe_context_ptr_t    spe_ctx;
   pthread_t            thread;
   gc_spu_args_t                *spu_args;      // pointer to 16-byte aligned 
struct
-  unsigned int         *spu_sig_notify_1;  // pointer to MMIO reg
 
   worker_ctx()
     : state(WS_FREE), spe_idx(0), spe_ctx(0),
@@ -145,8 +144,6 @@
 private:
   bool send_all_spes(uint32_t msg);
   bool send_spe(unsigned int spe, uint32_t msg);
-  bool signal_all_spes(int signal_reg, uint32_t data);
-  bool signal_spe(unsigned int spe, int signal_reg, uint32_t data);
   void print_event(spe_event_unit_t *evt);
   void handle_event(spe_event_unit_t *evt);
 

Modified: gnuradio/branches/developers/eb/gcell/src/lib/spu/test_spu.c
===================================================================
--- gnuradio/branches/developers/eb/gcell/src/lib/spu/test_spu.c        
2008-02-05 18:34:58 UTC (rev 7568)
+++ gnuradio/branches/developers/eb/gcell/src/lib/spu/test_spu.c        
2008-02-05 18:39:01 UTC (rev 7569)
@@ -93,8 +93,6 @@
   static gc_job_desc_t jd;     // static gets us proper alignment
   gc_eaddr_t   jd_ea;
 
-  // FIXME we could reduce our power consumption by using events
-
   while (1){
 
     // any msgs for us?
@@ -106,19 +104,13 @@
        return;
     }
 
-    // any signal for us?
-    cnt = spu_readchcnt(SPU_RdSigNotify1);
-    if (unlikely(cnt > 0)){
-      int value = spu_readch(SPU_RdSigNotify1);
-      // printf("spu[%d] signal: 0x%08x\n", spu_args.spu_idx, value);
-
-      if (value & 0x1){
-       // try to get a job from the job queue
-       if (gc_jd_queue_dequeue(spu_args.queue, &jd_ea, &jd)){
-         process_job(jd_ea, &jd);
-       }
-      }
+    // try to get a job from the job queue
+    if (gc_jd_queue_dequeue(spu_args.queue, &jd_ea, &jd)){
+      process_job(jd_ea, &jd);
+      backoff_reset();
     }
+    else
+      backoff_delay();
   }
 }
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]