summaryrefslogtreecommitdiffstats
path: root/runtime/print.c
diff options
context:
space:
mode:
authorhunt <hunt>2006-09-22 01:32:12 +0000
committerhunt <hunt>2006-09-22 01:32:12 +0000
commit77930524463d7750950ec055c42dbf3703442010 (patch)
tree78ca8dedb5aa80e2d972086775d13774bd530683 /runtime/print.c
parent77c3c4b3a6065638ddf6a6ec45b9694fff40bc0a (diff)
downloadsystemtap-steved-77930524463d7750950ec055c42dbf3703442010.tar.gz
systemtap-steved-77930524463d7750950ec055c42dbf3703442010.tar.xz
systemtap-steved-77930524463d7750950ec055c42dbf3703442010.zip
2006-09-21 Martin Hunt <hunt@redhat.com>
PR 3232 * print.c (_stp_print_init): New. Alloc per-cpu buffers. (_stp_print_cleanup): New. Free per-cpu buffers. (_stp_print_flush): Use per_cpu_ptr(). * string.c (_stp_sprintf): Ditto. (_stp_vsprintf): Ditto. (_stp_string_cat_cstr): Ditto. (_stp_string_cat_char): Ditto.
Diffstat (limited to 'runtime/print.c')
-rw-r--r--runtime/print.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/runtime/print.c b/runtime/print.c
index 65b2d37f..674bd4a0 100644
--- a/runtime/print.c
+++ b/runtime/print.c
@@ -51,8 +51,21 @@ typedef struct __stp_pbuf {
char buf[STP_PRINT_BUF_LEN];
} _stp_pbuf;
-DEFINE_PER_CPU(_stp_pbuf, Stp_pbuf);
+void *Stp_pbuf = NULL;
+int _stp_print_init (void)
+{
+ Stp_pbuf = alloc_percpu(_stp_pbuf);
+ if (unlikely(Stp_pbuf == 0))
+ return -1;
+ return 0;
+}
+
+void _stp_print_cleanup (void)
+{
+ if (Stp_pbuf)
+ free_percpu(Stp_pbuf);
+}
/** Send the print buffer to the transport now.
* Output accumulates in the print buffer until it
@@ -63,7 +76,7 @@ DEFINE_PER_CPU(_stp_pbuf, Stp_pbuf);
*/
void _stp_print_flush (void)
{
- _stp_pbuf *pb = &__get_cpu_var(Stp_pbuf);
+ _stp_pbuf *pb = per_cpu_ptr(Stp_pbuf, smp_processor_id());
/* check to see if there is anything in the buffer */
if (pb->len == 0)
@@ -104,7 +117,7 @@ static void * _stp_reserve_bytes (int numbytes)
#else
static void * _stp_reserve_bytes (int numbytes)
{
- _stp_pbuf *pb = &__get_cpu_var(Stp_pbuf);
+ _stp_pbuf *pb = per_cpu_ptr(Stp_pbuf, smp_processor_id());
int size = STP_PRINT_BUF_LEN - pb->len;
void * ret;