X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/2236410f4582ab45ae8c384dd6eeeef5d10aab15..1eeed1150149b63d6e49e033697454bc12b533b9:/lunaix-os/kernel/kprint/kprintf.c diff --git a/lunaix-os/kernel/kprint/kprintf.c b/lunaix-os/kernel/kprint/kprintf.c index 12c421f..158a799 100644 --- a/lunaix-os/kernel/kprint/kprintf.c +++ b/lunaix-os/kernel/kprint/kprintf.c @@ -2,8 +2,10 @@ #include #include #include +#include +#include -#include +#include #include @@ -21,6 +23,7 @@ static struct kp_records kprecs = { .max_recs = MAX_KPENT_NUM, .kp_ent_wp = &kprecs.kp_ents.ents }; +export_symbol(debug, kprecs); static char* shift_level(const char* str, int* level) @@ -39,14 +42,14 @@ static inline void kprintf_ml(const char* component, int level, const char* fmt, va_list args) { char* buf = &tmp_buf[MAX_BUFSZ_HLF]; - ksnprintf(buf, MAX_BUFSZ_HLF, "%s: %s", component, fmt); + ksnprintf(buf, MAX_BUFSZ_HLF, "%s: %s\n", component, fmt); size_t sz = ksnprintfv(tmp_buf, buf, MAX_BUFSZ_HLF, args); kprec_put(&kprecs, level, tmp_buf, sz); - // FIXME temp measure, get some output - console_write_str(tmp_buf); - console_write_char('\n'); + if (likely(sysconsole)) { + sysconsole->ops.write(sysconsole, tmp_buf, 0, sz); + } } void @@ -61,14 +64,14 @@ kprintf_m(const char* component, const char* fmt, va_list args) static void __twimap_kprintf_read(struct twimap* map) { - struct kp_records* kprecs = twimap_data(map, struct kp_records*); + struct kp_records* __kprecs = twimap_data(map, struct kp_records*); /* XXX we can foreach all records in a single twimap read call, as records is monotonic increasing by design. */ struct kp_entry *pos, *n; - llist_for_each(pos, n, kprecs->kp_ent_wp, ents) + llist_for_each(pos, n, __kprecs->kp_ent_wp, ents) { time_t s = pos->time / 1000; time_t ms = pos->time % 1000; @@ -83,6 +86,20 @@ kprintf_mapping_init() } EXPORT_TWIFS_PLUGIN(kprintf, kprintf_mapping_init); + +void +kprintf_dump_logs() { + if (unlikely(!sysconsole)) { + return; + } + + struct kp_entry *pos, *n; + llist_for_each(pos, n, kprecs.kp_ent_wp, ents) + { + sysconsole->ops.write(sysconsole, pos->content, 0, pos->len); + } +} + __DEFINE_LXSYSCALL3(void, syslog, int, level, const char*, fmt, va_list, args) { kprintf_ml("syslog", level, fmt, args);