kernel: workq: Fix type errors in delayable work handlers
A common pattern here was to take the work item as the subfield of a
containing object. But the contained field is not a k_work, it's a
k_work_delayable.
Things were working only because the work field was first, so the
pointers had the same value. Do things right and fix things to
produce correct code if/when that field ever moves within delayable.
Signed-off-by: Yong Cong Sin <yongcong.sin@gmail.com>
diff --git a/drivers/serial/uart_stm32.c b/drivers/serial/uart_stm32.c
index 97ed6ce..6cfa11cc 100644
--- a/drivers/serial/uart_stm32.c
+++ b/drivers/serial/uart_stm32.c
@@ -1354,7 +1354,8 @@
static void uart_stm32_async_rx_timeout(struct k_work *work)
{
- struct uart_dma_stream *rx_stream = CONTAINER_OF(work,
+ struct k_work_delayable *dwork = k_work_delayable_from_work(work);
+ struct uart_dma_stream *rx_stream = CONTAINER_OF(dwork,
struct uart_dma_stream, timeout_work);
struct uart_stm32_data *data = CONTAINER_OF(rx_stream,
struct uart_stm32_data, dma_rx);
@@ -1371,7 +1372,8 @@
static void uart_stm32_async_tx_timeout(struct k_work *work)
{
- struct uart_dma_stream *tx_stream = CONTAINER_OF(work,
+ struct k_work_delayable *dwork = k_work_delayable_from_work(work);
+ struct uart_dma_stream *tx_stream = CONTAINER_OF(dwork,
struct uart_dma_stream, timeout_work);
struct uart_stm32_data *data = CONTAINER_OF(tx_stream,
struct uart_stm32_data, dma_tx);