[Click] [RESEND] [PATCH] Fix a problem of the click_chatter on smp linuxmodule.

Joonwoo Park joonwpark81 at gmail.com
Mon Oct 1 01:07:53 EDT 2007


The gmail demangled white spaces of the patch.
I'm resending a patch with another mail client.
Sorry.

Signed-off-by: Joonwoo Park <joonwpark81 at gmail.com>
---
 linuxmodule/module.cc     |   24 ++++++++++++------------
 linuxmodule/modulepriv.hh |   20 +++++++++++++++-----
 2 files changed, 27 insertions(+), 17 deletions(-)

diff --git a/linuxmodule/module.cc b/linuxmodule/module.cc
index 2b181fb..e507496 100644
--- a/linuxmodule/module.cc
+++ b/linuxmodule/module.cc
@@ -143,22 +143,22 @@ KernelErrorHandler::log_line(const char *begin, const char *end)
     begin += 9;
 
   // manipulate log buffer to prevent memory overflow
-  if (_pos + end - begin > LOGBUF_SIZ - 1 && _pos >= LOGBUF_SAVESIZ) {
-    memcpy(&_logbuf[0], &_logbuf[LOGBUF_SAVESIZ], _pos - LOGBUF_SAVESIZ);
-    _pos -= LOGBUF_SAVESIZ;
-    _generation++;
+  if (_pos[my_cpu] + end - begin > LOGBUF_SIZ - 1 && _pos[my_cpu] >= LOGBUF_SAVESIZ) {
+    memcpy(&_logbuf[my_cpu][0], &_logbuf[my_cpu][LOGBUF_SAVESIZ], _pos[my_cpu] - LOGBUF_SAVESIZ);
+    _pos[my_cpu] -= LOGBUF_SAVESIZ;
+    _generation[my_cpu]++;
   }
-  if (_pos + end - begin > LOGBUF_SIZ - 1) {
-    _pos = 0;
-    _generation += 2;
+  if (_pos[my_cpu] + end - begin > LOGBUF_SIZ - 1) {
+    _pos[my_cpu] = 0;
+    _generation[my_cpu] += 2;
   }e gmail demangled white spaces of the patch.
I'm resending the patch with another mail client.

-  if (_pos + end - begin > LOGBUF_SIZ - 1)
+  if (_pos[my_cpu] + end - begin > LOGBUF_SIZ - 1)
     begin = end - (LOGBUF_SIZ - 1);
 
   // log line
-  memcpy(&_logbuf[_pos], begin, end - begin);
-  _pos += end - begin;
-  _logbuf[_pos++] = '\n';
+  memcpy(&_logbuf[my_cpu][_pos[my_cpu]], begin, end - begin);
+  _pos[my_cpu] += end - begin;
+  _logbuf[my_cpu][_pos[my_cpu]++] = '\n';
 }
 
 void
@@ -182,7 +182,7 @@ KernelErrorHandler::handle_text(Seriousness seriousness, const String &message)
 inline String
 KernelErrorHandler::stable_string() const
 {
-  return String::stable_string(&_logbuf[0], &_logbuf[_pos]);
+  return String::stable_string(&_logbuf[my_cpu][0], &_logbuf[my_cpu][_pos[my_cpu]]);
 }
 
 static String
diff --git a/linuxmodule/modulepriv.hh b/linuxmodule/modulepriv.hh
index ad79ffe..4fb9b98 100644
--- a/linuxmodule/modulepriv.hh
+++ b/linuxmodule/modulepriv.hh
@@ -33,17 +33,27 @@ CLICK_CXX_UNPROTECT
 
 class KernelErrorHandler : public BaseErrorHandler { public:
   
-  KernelErrorHandler()			: _pos(0), _generation(0) { }
+  KernelErrorHandler()
+  {
+    memset(&_pos, 0, sizeof(_pos));
+    memset(&_generation, 0, sizeof(_generation));
+  }
   void handle_text(Seriousness, const String &);
-  void clear_log()			{ _pos = 0; _generation += 2; }
+  void clear_log()
+  {
+    for (int i = 0; i < NR_CPUS; i++) {
+      _pos[i] = 0;
+      _generation[i] += 2;
+    }
+  }
   inline String stable_string() const;
   
  private:
   
   enum { LOGBUF_SIZ = 4096, LOGBUF_SAVESIZ = 2048 };
-  char _logbuf[LOGBUF_SIZ];
-  int _pos;
-  unsigned _generation;
+  char _logbuf[NR_CPUS][LOGBUF_SIZ];
+  int _pos[NR_CPUS];
+  unsigned _generation[NR_CPUS];
   void log_line(const char *begin, const char *end);
   
 };
---

Joonwoo Park (Jason Park)


2007-09-30 (일), 02:33 +0900, Joonwoo Park wrote: 
> Hi,
> This patch fixes a problem of the click_chatter on smp linuxmodule.
> 
> -
>  Signed-off-by: Joonwoo Park <joonwpark81 at gmail.com>
> 
>  linuxmodule/module.cc     |   24 ++++++++++++------------
>  linuxmodule/modulepriv.hh |   20 +++++++++++++++-----
>  2 files changed, 27 insertions(+), 17 deletions(-)
> 
> diff --git a/linuxmodule/module.cc b/linuxmodule/module.cc
> index 2b181fb..e507496 100644
> --- a/linuxmodule/module.cc
> +++ b/linuxmodule/module.cc
> @@ -143,22 +143,22 @@ KernelErrorHandler::log_line(const char *begin,
> const char *end)
>      begin += 9;
> 
>    // manipulate log buffer to prevent memory overflow
> -  if (_pos + end - begin > LOGBUF_SIZ - 1 && _pos >= LOGBUF_SAVESIZ) {
> -    memcpy(&_logbuf[0], &_logbuf[LOGBUF_SAVESIZ], _pos - LOGBUF_SAVESIZ);
> -    _pos -= LOGBUF_SAVESIZ;
> -    _generation++;
> +  if (_pos[my_cpu] + end - begin > LOGBUF_SIZ - 1 && _pos[my_cpu] >=
> LOGBUF_SAVESIZ) {
> +    memcpy(&_logbuf[my_cpu][0], &_logbuf[my_cpu][LOGBUF_SAVESIZ],
> _pos[my_cpu] - LOGBUF_SAVESIZ);
> +    _pos[my_cpu] -= LOGBUF_SAVESIZ;
> +    _generation[my_cpu]++;
>    }
> -  if (_pos + end - begin > LOGBUF_SIZ - 1) {
> -    _pos = 0;
> -    _generation += 2;e gmail demangled white spaces of the patch.
I'm resending the patch with another mail client.

> +  if (_pos[my_cpu] + end - begin > LOGBUF_SIZ - 1) {
> +    _pos[my_cpu] = 0;
> +    _generation[my_cpu] += 2;
>    }
> -  if (_pos + end - begin > LOGBUF_SIZ - 1)
> +  if (_pos[my_cpu] + end - begin > LOGBUF_SIZ - 1)
>      begin = end - (LOGBUF_SIZ - 1);
> 
>    // log line
> -  memcpy(&_logbuf[_pos], begin, end - begin);
> -  _pos += end - begin;
> -  _logbuf[_pos++] = '\n';
> +  memcpy(&_logbuf[my_cpu][_pos[my_cpu]], begin, end - begin);
> +  _pos[my_cpu] += end - begin;
> +  _logbuf[my_cpu][_pos[my_cpu]++] = '\n';
>  }
> 
>  void
> @@ -182,7 +182,7 @@ KernelErrorHandler::handle_text(Seriousness
> seriousness, const String &message)
>  inline String
>  KernelErrorHandler::stable_string() const
>  {
> -  return String::stable_string(&_logbuf[0], &_logbuf[_pos]);
> +  return String::stable_string(&_logbuf[my_cpu][0],
> &_logbuf[my_cpu][_pos[my_cpu]]);
>  }
> 
>  static String
> diff --git a/linuxmodule/modulepriv.hh b/linuxmodule/modulepriv.hh
> index ad79ffe..4fb9b98 100644
> --- a/linuxmodule/modulepriv.hh
> +++ b/linuxmodule/modulepriv.hh
> @@ -33,17 +33,27 @@ CLICK_CXX_UNPROTECT
> 
>  class KernelErrorHandler : public BaseErrorHandler { public:
> 
> -  KernelErrorHandler()			: _pos(0), _generation(0) { }
> +  KernelErrorHandler()
> +  {
> +    memset(&_pos, 0, sizeof(_pos));
> +    memset(&_generation, 0, sizeof(_generation));
> +  }
>    void handle_text(Seriousness, const String &);
> -  void clear_log()			{ _pos = 0; _generation += 2; }
> +  void clear_log()
> +  {
> +    for (int i = 0; i < NR_CPUS; i++) {
> +      _pos[i] = 0;
> +      _generation[i] += 2;
> +    }
> +  }
>    inline String stable_string() const;
> 
>   private:
> 
>    enum { LOGBUF_SIZ = 4096, LOGBUF_SAVESIZ = 2048 };
> -  char _logbuf[LOGBUF_SIZ];
> -  int _pos;
> -  unsigned _generation;
> +  char _logbuf[NR_CPUS][LOGBUF_SIZ];
> +  int _pos[NR_CPUS];
> +  unsigned _generation[NR_CPUS];
>    void log_line(const char *begin, const char *end);
> 
>  };
> -
> 
> Thanks.
> 
> Joonwoo Park (Jason Park)
> _______________________________________________
> click mailing list
> click at amsterdam.lcs.mit.edu
> https://amsterdam.lcs.mit.edu/mailman/listinfo/click



More information about the click mailing list