Browse Source

drivers: fix thread function signatures

Fix thread function signatures to avoid stack corruption on thread exit.

Signed-off-by: Benedikt Schmidt <benedikt.schmidt@embedded-solutions.at>
pull/64636/head
Benedikt Schmidt 2 years ago committed by Carles Cufí
parent
commit
a03f1010b8
  1. 5
      drivers/input/input_npcx_kbd.c
  2. 2
      drivers/ipm/ipm_ivshmem.c
  3. 8
      drivers/led/ht16k33.c
  4. 8
      drivers/rtc/rtc_pcf8523.c
  5. 9
      drivers/usb/udc/udc_nrf.c
  6. 8
      drivers/usb/uhc/uhc_max3421e.c
  7. 9
      drivers/virtualization/virt_ivshmem_shell.c
  8. 8
      drivers/watchdog/wdt_nxp_fs26.c
  9. 7
      drivers/wifi/esp32/src/esp_wifi_drv.c
  10. 9
      drivers/wifi/esp_at/esp.c
  11. 8
      drivers/wifi/winc1500/wifi_winc1500.c

5
drivers/input/input_npcx_kbd.c

@ -367,8 +367,9 @@ static void kbd_matrix_poll(const struct device *dev) @@ -367,8 +367,9 @@ static void kbd_matrix_poll(const struct device *dev)
}
}
static void kbd_matrix_polling_thread(const struct device *dev, void *dummy2, void *dummy3)
static void kbd_matrix_polling_thread(void *dummy1, void *dummy2, void *dummy3)
{
const struct device *dev = dummy1;
struct input_npcx_kbd_data *const data = dev->data;
ARG_UNUSED(dummy2);
@ -475,7 +476,7 @@ static int input_npcx_kbd_init(const struct device *dev) @@ -475,7 +476,7 @@ static int input_npcx_kbd_init(const struct device *dev)
k_thread_create(&data->thread, data->thread_stack,
CONFIG_INPUT_NPCX_KBD_THREAD_STACK_SIZE,
(k_thread_entry_t)kbd_matrix_polling_thread, (void *)dev, NULL, NULL,
kbd_matrix_polling_thread, (void *)dev, NULL, NULL,
K_PRIO_COOP(4), 0, K_NO_WAIT);
k_thread_name_set(&data->thread, "npcx-kbd");

2
drivers/ipm/ipm_ivshmem.c

@ -102,7 +102,7 @@ static int ivshmem_ipm_init(const struct device *dev) @@ -102,7 +102,7 @@ static int ivshmem_ipm_init(const struct device *dev)
k_thread_create(&ivshmem_ev_loop_thread,
ivshmem_ev_loop_stack,
CONFIG_IPM_IVSHMEM_EVENT_LOOP_STACK_SIZE,
(k_thread_entry_t)ivshmem_ipm_event_loop_thread,
ivshmem_ipm_event_loop_thread,
(void *)dev, NULL, NULL,
CONFIG_IPM_IVSHMEM_EVENT_LOOP_PRIO,
0, K_NO_WAIT);

8
drivers/led/ht16k33.c

@ -247,8 +247,12 @@ static bool ht16k33_process_keyscan_data(const struct device *dev) @@ -247,8 +247,12 @@ static bool ht16k33_process_keyscan_data(const struct device *dev)
return pressed;
}
static void ht16k33_irq_thread(struct ht16k33_data *data)
static void ht16k33_irq_thread(void *p1, void *p2, void *p3)
{
ARG_UNUSED(p2);
ARG_UNUSED(p3);
struct ht16k33_data *data = p1;
bool pressed;
while (true) {
@ -420,7 +424,7 @@ static int ht16k33_init(const struct device *dev) @@ -420,7 +424,7 @@ static int ht16k33_init(const struct device *dev)
k_thread_create(&data->irq_thread, data->irq_thread_stack,
CONFIG_HT16K33_KEYSCAN_IRQ_THREAD_STACK_SIZE,
(k_thread_entry_t)ht16k33_irq_thread, data, NULL, NULL,
ht16k33_irq_thread, data, NULL, NULL,
K_PRIO_COOP(CONFIG_HT16K33_KEYSCAN_IRQ_THREAD_PRIO),
0, K_NO_WAIT);
#endif /* CONFIG_HT16K33_KEYSCAN */

8
drivers/rtc/rtc_pcf8523.c

@ -254,8 +254,12 @@ static int pcf8523_int1_enable_unlocked(const struct device *dev, bool enable) @@ -254,8 +254,12 @@ static int pcf8523_int1_enable_unlocked(const struct device *dev, bool enable)
return 0;
}
static void pcf8523_int1_thread(const struct device *dev)
static void pcf8523_int1_thread(void *p1, void *p2, void *p3)
{
ARG_UNUSED(p2);
ARG_UNUSED(p3);
const struct device *dev = p1;
struct pcf8523_data *data = dev->data;
rtc_alarm_callback alarm_callback = NULL;
void *alarm_user_data = NULL;
@ -791,7 +795,7 @@ static int pcf8523_init(const struct device *dev) @@ -791,7 +795,7 @@ static int pcf8523_init(const struct device *dev)
tid = k_thread_create(&data->int1_thread, data->int1_stack,
K_THREAD_STACK_SIZEOF(data->int1_stack),
(k_thread_entry_t)pcf8523_int1_thread, (void *)dev, NULL,
pcf8523_int1_thread, (void *)dev, NULL,
NULL, CONFIG_RTC_PCF8523_THREAD_PRIO, 0, K_NO_WAIT);
k_thread_name_set(tid, "pcf8523");

9
drivers/usb/udc/udc_nrf.c

@ -348,8 +348,13 @@ static int udc_event_xfer_setup(const struct device *dev) @@ -348,8 +348,13 @@ static int udc_event_xfer_setup(const struct device *dev)
return err;
}
static void udc_nrf_thread(const struct device *dev)
static void udc_nrf_thread(void *p1, void *p2, void *p3)
{
ARG_UNUSED(p2);
ARG_UNUSED(p3);
const struct device *dev = p1;
while (true) {
bool start_xfer = false;
struct udc_nrf_evt evt;
@ -733,7 +738,7 @@ static int udc_nrf_driver_init(const struct device *dev) @@ -733,7 +738,7 @@ static int udc_nrf_driver_init(const struct device *dev)
k_mutex_init(&data->mutex);
k_thread_create(&drv_stack_data, drv_stack,
K_KERNEL_STACK_SIZEOF(drv_stack),
(k_thread_entry_t)udc_nrf_thread,
udc_nrf_thread,
(void *)dev, NULL, NULL,
K_PRIO_COOP(8), 0, K_NO_WAIT);

8
drivers/usb/uhc/uhc_max3421e.c

@ -652,8 +652,12 @@ static int max3421e_handle_bus_irq(const struct device *dev) @@ -652,8 +652,12 @@ static int max3421e_handle_bus_irq(const struct device *dev)
return ret;
}
static void uhc_max3421e_thread(const struct device *dev)
static void uhc_max3421e_thread(void *p1, void *p2, void *p3)
{
ARG_UNUSED(p2);
ARG_UNUSED(p3);
const struct device *dev = p1;
struct max3421e_data *priv = uhc_get_private(dev);
LOG_DBG("MAX3421E thread started");
@ -1076,7 +1080,7 @@ static int max3421e_driver_init(const struct device *dev) @@ -1076,7 +1080,7 @@ static int max3421e_driver_init(const struct device *dev)
k_mutex_init(&data->mutex);
k_thread_create(&drv_stack_data, drv_stack,
K_KERNEL_STACK_SIZEOF(drv_stack),
(k_thread_entry_t)uhc_max3421e_thread,
uhc_max3421e_thread,
(void *)dev, NULL, NULL,
K_PRIO_COOP(2), 0, K_NO_WAIT);
k_thread_name_set(&drv_stack_data, "uhc_max3421e");

9
drivers/virtualization/virt_ivshmem_shell.c

@ -23,8 +23,13 @@ K_THREAD_STACK_DEFINE(doorbell_stack, STACK_SIZE); @@ -23,8 +23,13 @@ K_THREAD_STACK_DEFINE(doorbell_stack, STACK_SIZE);
static bool doorbell_started;
static struct k_thread doorbell_thread;
static void doorbell_notification_thread(const struct shell *sh)
static void doorbell_notification_thread(void *p1, void *p2, void *p3)
{
ARG_UNUSED(p2);
ARG_UNUSED(p3);
const struct shell *sh = p1;
while (1) {
unsigned int signaled;
int vector;
@ -174,7 +179,7 @@ static int cmd_ivshmem_get_notified(const struct shell *sh, @@ -174,7 +179,7 @@ static int cmd_ivshmem_get_notified(const struct shell *sh,
tid = k_thread_create(
&doorbell_thread,
doorbell_stack, STACK_SIZE,
(k_thread_entry_t)doorbell_notification_thread,
doorbell_notification_thread,
(void *)sh, NULL, NULL,
K_PRIO_COOP(2), 0, K_NO_WAIT);
if (!tid) {

8
drivers/watchdog/wdt_nxp_fs26.c

@ -580,8 +580,12 @@ static int wdt_nxp_fs26_disable(const struct device *dev) @@ -580,8 +580,12 @@ static int wdt_nxp_fs26_disable(const struct device *dev)
return 0;
}
static void wdt_nxp_fs26_int_thread(const struct device *dev)
static void wdt_nxp_fs26_int_thread(void *p1, void *p2, void *p3)
{
ARG_UNUSED(p2);
ARG_UNUSED(p3);
const struct device *dev = p1;
const struct wdt_nxp_fs26_config *config = dev->config;
struct wdt_nxp_fs26_data *data = dev->data;
struct fs26_spi_rx_frame rx_frame;
@ -661,7 +665,7 @@ static int wdt_nxp_fs26_init(const struct device *dev) @@ -661,7 +665,7 @@ static int wdt_nxp_fs26_init(const struct device *dev)
k_thread_create(&data->int_thread, data->int_thread_stack,
CONFIG_WDT_NXP_FS26_INT_THREAD_STACK_SIZE,
(k_thread_entry_t)wdt_nxp_fs26_int_thread,
wdt_nxp_fs26_int_thread,
(void *)dev, NULL, NULL,
K_PRIO_COOP(CONFIG_WDT_NXP_FS26_INT_THREAD_PRIO),
0, K_NO_WAIT);

7
drivers/wifi/esp32/src/esp_wifi_drv.c

@ -262,8 +262,11 @@ static void esp_wifi_handle_disconnect_event(void) @@ -262,8 +262,11 @@ static void esp_wifi_handle_disconnect_event(void)
}
}
static void esp_wifi_event_task(void)
static void esp_wifi_event_task(void *p1, void *p2, void *p3)
{
ARG_UNUSED(p2);
ARG_UNUSED(p3);
system_event_t evt;
uint8_t s_con_cnt = 0;
@ -615,7 +618,7 @@ static int esp32_wifi_dev_init(const struct device *dev) @@ -615,7 +618,7 @@ static int esp32_wifi_dev_init(const struct device *dev)
k_tid_t tid = k_thread_create(&esp_wifi_event_thread, esp_wifi_event_stack,
CONFIG_ESP32_WIFI_EVENT_TASK_STACK_SIZE,
(k_thread_entry_t)esp_wifi_event_task, NULL, NULL, NULL,
esp_wifi_event_task, NULL, NULL, NULL,
CONFIG_ESP32_WIFI_EVENT_TASK_PRIO, K_INHERIT_PERMS,
K_NO_WAIT);

9
drivers/wifi/esp_at/esp.c

@ -199,8 +199,13 @@ MODEM_CMD_DEFINE(on_cmd_error) @@ -199,8 +199,13 @@ MODEM_CMD_DEFINE(on_cmd_error)
}
/* RX thread */
static void esp_rx(struct esp_data *data)
static void esp_rx(void *p1, void *p2, void *p3)
{
ARG_UNUSED(p2);
ARG_UNUSED(p3);
struct esp_data *data = p1;
while (true) {
/* wait for incoming data */
modem_iface_uart_rx_wait(&data->mctx.iface, K_FOREVER);
@ -1366,7 +1371,7 @@ static int esp_init(const struct device *dev) @@ -1366,7 +1371,7 @@ static int esp_init(const struct device *dev)
/* start RX thread */
k_thread_create(&esp_rx_thread, esp_rx_stack,
K_KERNEL_STACK_SIZEOF(esp_rx_stack),
(k_thread_entry_t)esp_rx,
esp_rx,
data, NULL, NULL,
K_PRIO_COOP(CONFIG_WIFI_ESP_AT_RX_THREAD_PRIORITY), 0,
K_NO_WAIT);

8
drivers/wifi/winc1500/wifi_winc1500.c

@ -966,8 +966,12 @@ static void winc1500_socket_cb(SOCKET sock, uint8 message, void *pvMsg) @@ -966,8 +966,12 @@ static void winc1500_socket_cb(SOCKET sock, uint8 message, void *pvMsg)
#endif /* LOG_LEVEL > LOG_LEVEL_OFF */
}
static void winc1500_thread(void)
static void winc1500_thread(void *p1, void *p2, void *p3)
{
ARG_UNUSED(p1);
ARG_UNUSED(p2);
ARG_UNUSED(p3);
while (1) {
while (m2m_wifi_handle_events(NULL) != 0) {
}
@ -1168,7 +1172,7 @@ static int winc1500_init(const struct device *dev) @@ -1168,7 +1172,7 @@ static int winc1500_init(const struct device *dev)
/* monitoring thread for winc wifi callbacks */
k_thread_create(&winc1500_thread_data, winc1500_stack,
CONFIG_WIFI_WINC1500_THREAD_STACK_SIZE,
(k_thread_entry_t)winc1500_thread, NULL, NULL, NULL,
winc1500_thread, NULL, NULL, NULL,
K_PRIO_COOP(CONFIG_WIFI_WINC1500_THREAD_PRIO),
0, K_NO_WAIT);
k_thread_name_set(&winc1500_thread_data, "WINC1500");

Loading…
Cancel
Save