Changeset 5e904dd in mainline


Ignore:
Timestamp:
2018-07-03T17:40:51Z (6 years ago)
Author:
Jiří Zárevúcky <jiri.zarevucky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
76f566d
Parents:
d3b2ffa
Message:

Implement simple line buffer for KIO output, and attach task name/id to it.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/console/console.c

    rd3b2ffa r5e904dd  
    424424                switch (cmd) {
    425425                case KIO_WRITE:
    426                         printf("%s", data);
     426                        printf("[%s(%lu)] %s\n", TASK->name,
     427                            (unsigned long) TASK->taskid, data);
    427428                        break;
    428429                case KIO_COMMAND:
  • uspace/lib/c/generic/io/kio.c

    rd3b2ffa r5e904dd  
    4242#include <io/kio.h>
    4343#include <io/printf_core.h>
     44#include <macros.h>
     45#include <libarch/config.h>
     46#include <futex.h>
     47
     48#define KIO_BUFFER_SIZE PAGE_SIZE
     49
     50static struct {
     51        futex_t futex;
     52        char data[KIO_BUFFER_SIZE];
     53        size_t used;
     54} kio_buffer = { .futex = FUTEX_INITIALIZER, };
    4455
    4556errno_t kio_write(const void *buf, size_t size, size_t *nwritten)
    4657{
    47         errno_t rc = (errno_t) __SYSCALL3(SYS_KIO, KIO_WRITE, (sysarg_t) buf, size);
     58        futex_lock(&kio_buffer.futex);
    4859
    49         if (rc == EOK)
     60        const char *s = buf;
     61        while (true) {
     62                const char *endl = memchr(s, '\n', size);
     63                if (endl) {
     64                        size_t used = kio_buffer.used;
     65
     66                        size_t sz = min(KIO_BUFFER_SIZE - used, (size_t) (endl - s));
     67                        memcpy(&kio_buffer.data[used], s, sz);
     68
     69                        __SYSCALL3(SYS_KIO, KIO_WRITE,
     70                            (sysarg_t) &kio_buffer.data[0], used + sz);
     71
     72                        kio_buffer.used = 0;
     73                        size -= endl + 1 - s;
     74                        s = endl + 1;
     75                } else {
     76                        size_t used = kio_buffer.used;
     77                        size_t sz = min(KIO_BUFFER_SIZE - used, size);
     78                        memcpy(&kio_buffer.data[used], s, sz);
     79                        kio_buffer.used += sz;
     80                        break;
     81                }
     82        }
     83
     84        futex_unlock(&kio_buffer.futex);
     85        if (nwritten)
    5086                *nwritten = size;
    51         return rc;
     87        return EOK;
    5288}
    5389
Note: See TracChangeset for help on using the changeset viewer.