[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