From 2930506e59b492cf58bd69f2fdf49b5c1b75217f Mon Sep 17 00:00:00 2001 From: Matheus Date: Fri, 3 May 2024 15:14:49 -0300 Subject: [PATCH] keyboard: fix poll --- kernel-src/io/keyboard.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/kernel-src/io/keyboard.c b/kernel-src/io/keyboard.c index 7c7ac29b..291b11eb 100644 --- a/kernel-src/io/keyboard.c +++ b/kernel-src/io/keyboard.c @@ -190,12 +190,10 @@ static int poll(int minor, polldata_t *data, int events) { if (kb == NULL) return POLLERR; + long ipl = interrupt_raiseipl(IPL_KEYBOARD); + spinlock_acquire(&kb->lock); if (events & POLLIN) { - long ipl = interrupt_raiseipl(IPL_KEYBOARD); - spinlock_acquire(&kb->lock); size_t dataleft = RINGBUFFER_DATACOUNT(&kb->packetbuffer); - spinlock_release(&kb->lock); - interrupt_loweripl(ipl); if (dataleft) revents |= POLLIN; } @@ -203,6 +201,9 @@ static int poll(int minor, polldata_t *data, int events) { if (revents == 0 && data) poll_add(&kb->pollheader, data, events); + spinlock_release(&kb->lock); + interrupt_loweripl(ipl); + return revents; }