kernel: sem: add K_SEM_MAX_LIMIT
Currently there is no way to distinguish between a caller
explicitly asking for a semaphore with a limit that
happens to be `UINT_MAX` and a semaphore that just
has a limit "as large as possible".
Add `K_SEM_MAX_LIMIT`, currently defined to `UINT_MAX`, and akin
to `K_FOREVER` versus just passing some very large wait time.
In addition, the `k_sem_*` APIs were type-confused, where
the internal data structure was `uint32_t`, but the APIs took
and returned `unsigned int`. This changes the underlying data
structure to also use `unsigned int`, as changing the APIs
would be a (potentially) breaking change.
These changes are backwards-compatible, but it is strongly suggested
to take a quick scan for `k_sem_init` and `K_SEM_DEFINE` calls with
`UINT_MAX` (or `UINT32_MAX`) and replace them with `K_SEM_MAX_LIMIT`
where appropriate.
Signed-off-by: James Harris <james.harris@intel.com>
diff --git a/subsys/console/tty.c b/subsys/console/tty.c
index a6256cf..b33e112 100644
--- a/subsys/console/tty.c
+++ b/subsys/console/tty.c
@@ -270,7 +270,7 @@
tty->rx_ringbuf_sz = size;
if (size > 0) {
- k_sem_init(&tty->rx_sem, 0, UINT_MAX);
+ k_sem_init(&tty->rx_sem, 0, K_SEM_MAX_LIMIT);
uart_irq_rx_enable(tty->uart_dev);
}
@@ -284,7 +284,7 @@
tty->tx_ringbuf = buf;
tty->tx_ringbuf_sz = size;
- k_sem_init(&tty->tx_sem, size - 1, UINT_MAX);
+ k_sem_init(&tty->tx_sem, size - 1, K_SEM_MAX_LIMIT);
/* New buffer is initially empty, no need to re-enable interrupts,
* it will be done when needed (on first output char).