X-Git-Url: https://code.grnet.gr/git/archipelago/blobdiff_plain/164d158628a64c98b49f4b699a5b8740ef30f4ce..f29c3bebd18166d63d26c8014e7f1ea2bfbbb8f0:/xseg/sys/kernel/xsegmod.c?ds=sidebyside diff --git a/xseg/sys/kernel/xsegmod.c b/xseg/sys/kernel/xsegmod.c index c1b9400..2e6832b 100644 --- a/xseg/sys/kernel/xsegmod.c +++ b/xseg/sys/kernel/xsegmod.c @@ -5,14 +5,13 @@ #include #include +#include #include #include int (*xseg_snprintf)(char *str, size_t size, const char *format, ...) = snprintf; -EXPORT_SYMBOL(xseg_snprintf); char __xseg_errbuf[4096]; -EXPORT_SYMBOL(__xseg_errbuf); static spinlock_t __lock; @@ -45,7 +44,6 @@ void __xseg_log(const char *msg) { (void)printk(KERN_INFO "%s\n", msg); } -EXPORT_SYMBOL(__xseg_log); void *xtypes_malloc(unsigned long size) { @@ -74,6 +72,56 @@ static void __exit xsegmod_exit(void) return; } +int kernel_init_logctx(struct log_ctx *lc, char *peer_name, enum log_level log_level, char *logfile) +{ + lc->peer_name = peer_name; + lc->log_level = log_level; + lc->logfile = NULL; + return 0; +} +int (*init_logctx)(struct log_ctx *lc, char *peer_name, enum log_level log_level, char *logfile) = kernel_init_logctx; + +void __xseg_log2(struct log_ctx *lc, unsigned int level, char *fmt, ...) +{ + va_list ap; + struct timeval t; + struct tm broken; + char buffer[1500]; + char *buf = buffer; + char *type = NULL, *pn = NULL; + + va_start(ap, fmt); + switch (level) { + case E: type = "XSEG[EE]"; break; + case W: type = "XSEG[WW]"; break; + case I: type = "XSEG[II]"; break; + case D: type = "XSEG[DD]"; break; + default: type = "XSEG[UNKNONW]"; break; + } + pn = lc->peer_name; + if (!pn) + pn = "Invalid peer name"; + + do_gettimeofday(&t); + time_to_tm(t.tv_sec, 0, &broken); + + buf += sprintf(buf, "%s: %s: ", type, lc->peer_name); + buf += sprintf(buf, "%d:%d:%d:%ld\n\t", broken.tm_hour, broken.tm_min, + broken.tm_sec, t.tv_usec); + buf += vsprintf(buf, fmt, ap); + buf += sprintf(buf, "\n"); + + (void)printk(KERN_INFO "%s\n", buffer); + va_end(ap); + + return; +} + +void xseg_printtrace(void) +{ + dump_stack(); +} + module_init(xsegmod_init); module_exit(xsegmod_exit);