Rewrite ps2kbproc, rbuf (kernel ring buffer) and pipe read/write, Change to -O0 in kernel code
This commit is contained in:
@ -6,16 +6,20 @@
|
||||
#include "dlmalloc/malloc.h"
|
||||
#include "errors.h"
|
||||
#include "pipe.h"
|
||||
#include "kprintf.h"
|
||||
|
||||
int32_t ipc_pipeinit(IpcPipe *pipe, uint64_t pid) {
|
||||
hal_memset(pipe, 0, sizeof(*pipe));
|
||||
spinlock_init(&pipe->spinlock);
|
||||
pipe->ownerpid = pid;
|
||||
pipe->rbuf.buffer = dlmalloc(IPC_PIPE_MAX);
|
||||
if (pipe->rbuf.buffer == NULL) {
|
||||
|
||||
uint8_t *buf = dlmalloc(IPC_PIPE_MAX);
|
||||
if (buf == NULL) {
|
||||
return E_NOMEMORY;
|
||||
}
|
||||
pipe->rbuf.cap = IPC_PIPE_MAX;
|
||||
|
||||
rbuf_init(&pipe->rbuf, buf, IPC_PIPE_MAX);
|
||||
|
||||
return E_OK;
|
||||
}
|
||||
|
||||
@ -29,9 +33,7 @@ int32_t ipc_pipewrite(IpcPipe *pipe, const uint8_t *const buffer, size_t n) {
|
||||
size_t i = 0;
|
||||
spinlock_acquire(&pipe->spinlock);
|
||||
for (; i < n; i++) {
|
||||
if (rbuf_push(&pipe->rbuf, buffer[i]) < 0) {
|
||||
break;
|
||||
}
|
||||
rbuf_push(&pipe->rbuf, buffer[i]);
|
||||
}
|
||||
spinlock_release(&pipe->spinlock);
|
||||
return i;
|
||||
@ -40,10 +42,11 @@ int32_t ipc_pipewrite(IpcPipe *pipe, const uint8_t *const buffer, size_t n) {
|
||||
int32_t ipc_piperead(IpcPipe *pipe, uint8_t *const buffer, size_t n) {
|
||||
size_t i = 0;
|
||||
spinlock_acquire(&pipe->spinlock);
|
||||
for (; i < n; i++) {
|
||||
while (i < n) {
|
||||
if (rbuf_pop(&pipe->rbuf, &buffer[i]) < 0) {
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
spinlock_release(&pipe->spinlock);
|
||||
return i;
|
||||
|
Reference in New Issue
Block a user