From db79aaa5e985fa54670e49d27656911a1b3775b2 Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Tue, 16 Aug 2022 17:10:25 +0000 Subject: [PATCH 6/7] powerpc: switch eventhandlers to the new API --- sys/powerpc/powernv/opal.h | 19 ++++++------------ sys/powerpc/powernv/opal_async.c | 9 +++++---- sys/powerpc/powernv/opal_dev.c | 34 ++++++++++++++++---------------- sys/powerpc/powernv/opal_hmi.c | 7 ++++--- 4 files changed, 32 insertions(+), 37 deletions(-) diff --git a/sys/powerpc/powernv/opal.h b/sys/powerpc/powernv/opal.h index 8e39a39b6c9a..c5c7281152da 100644 --- a/sys/powerpc/powernv/opal.h +++ b/sys/powerpc/powernv/opal.h @@ -238,17 +238,10 @@ int opal_alloc_async_token(void); void opal_free_async_token(int); int opal_wait_completion(void *, uint64_t, int); -typedef void (*opal_msg_handler_fn)(void *, struct opal_msg *); -EVENTHANDLER_DECLARE(OPAL_ASYNC_COMP, opal_msg_handler_fn); -EVENTHANDLER_DECLARE(OPAL_EPOW, opal_msg_handler_fn); -EVENTHANDLER_DECLARE(OPAL_SHUTDOWN, opal_msg_handler_fn); -EVENTHANDLER_DECLARE(OPAL_HMI_EVT, opal_msg_handler_fn); -EVENTHANDLER_DECLARE(OPAL_DPO, opal_msg_handler_fn); -EVENTHANDLER_DECLARE(OPAL_OCC, opal_msg_handler_fn); -EVENTHANDLER_LIST_DECLARE(OPAL_ASYNC_COMP); -EVENTHANDLER_LIST_DECLARE(OPAL_EPOW); -EVENTHANDLER_LIST_DECLARE(OPAL_SHUTDOWN); -EVENTHANDLER_LIST_DECLARE(OPAL_HMI_EVT); -EVENTHANDLER_LIST_DECLARE(OPAL_DPO); -EVENTHANDLER_LIST_DECLARE(OPAL_OCC); +EVENTHANDLER_PREEMPTIBLE_DECLARE(OPAL_ASYNC_COMP); +EVENTHANDLER_PREEMPTIBLE_DECLARE(OPAL_EPOW); +EVENTHANDLER_SLEEPABLE_DECLARE(OPAL_SHUTDOWN); +EVENTHANDLER_PREEMPTIBLE_DECLARE(OPAL_HMI_EVT); +EVENTHANDLER_PREEMPTIBLE_DECLARE(OPAL_DPO); +EVENTHANDLER_PREEMPTIBLE_DECLARE(OPAL_OCC); #endif diff --git a/sys/powerpc/powernv/opal_async.c b/sys/powerpc/powernv/opal_async.c index 10b3eb5679fd..2e082847605b 100644 --- a/sys/powerpc/powernv/opal_async.c +++ b/sys/powerpc/powernv/opal_async.c @@ -47,7 +47,7 @@ */ static vmem_t *async_token_pool; -static void opal_handle_async_completion(void *, struct opal_msg *); +static void opal_handle_async_completion(void *); struct async_completion { volatile uint64_t completed; @@ -69,8 +69,8 @@ opal_init_async_tokens(int count) completions = malloc(count * sizeof(struct async_completion), M_DEVBUF, M_WAITOK | M_ZERO); - EVENTHANDLER_REGISTER(OPAL_ASYNC_COMP, opal_handle_async_completion, - NULL, EVENTHANDLER_PRI_ANY); + EVENTHANDLER_PREEMPTIBLE_REGISTER(OPAL_ASYNC_COMP, + opal_handle_async_completion, ANY); return (0); } @@ -118,8 +118,9 @@ opal_wait_completion(void *buf, uint64_t size, int token) return (err); } -static void opal_handle_async_completion(void *arg, struct opal_msg *msg) +static void opal_handle_async_completion(void *arg) { + struct opal_msg *msg = arg; int token; token = msg->params[0]; diff --git a/sys/powerpc/powernv/opal_dev.c b/sys/powerpc/powernv/opal_dev.c index ef54c965eaba..1a5b5a2fa4b0 100644 --- a/sys/powerpc/powernv/opal_dev.c +++ b/sys/powerpc/powernv/opal_dev.c @@ -61,8 +61,7 @@ static const struct ofw_bus_devinfo *opaldev_get_devinfo(device_t dev, device_t child); static void opal_shutdown(void *arg, int howto); -static void opal_handle_shutdown_message(void *unused, - struct opal_msg *msg); +static void opal_handle_shutdown_message(void *arg); static void opal_intr(void *); static device_method_t opaldev_methods[] = { @@ -110,12 +109,12 @@ SYSINIT(opal_heartbeat_setup, SI_SUB_KTHREAD_IDLE, SI_ORDER_ANY, kproc_start, &opal_heartbeat_kp); static int opal_heartbeat_ms; -EVENTHANDLER_LIST_DEFINE(OPAL_ASYNC_COMP); -EVENTHANDLER_LIST_DEFINE(OPAL_EPOW); -EVENTHANDLER_LIST_DEFINE(OPAL_SHUTDOWN); -EVENTHANDLER_LIST_DEFINE(OPAL_HMI_EVT); -EVENTHANDLER_LIST_DEFINE(OPAL_DPO); -EVENTHANDLER_LIST_DEFINE(OPAL_OCC); +EVENTHANDLER_PREEMPTIBLE_DEFINE(OPAL_ASYNC_COMP); +EVENTHANDLER_PREEMPTIBLE_DEFINE(OPAL_EPOW); +EVENTHANDLER_SLEEPABLE_DEFINE(OPAL_SHUTDOWN); +EVENTHANDLER_PREEMPTIBLE_DEFINE(OPAL_HMI_EVT); +EVENTHANDLER_PREEMPTIBLE_DEFINE(OPAL_DPO); +EVENTHANDLER_PREEMPTIBLE_DEFINE(OPAL_OCC); #define OPAL_SOFT_OFF 0 #define OPAL_SOFT_REBOOT 1 @@ -194,8 +193,8 @@ opaldev_attach(device_t dev) if (rv == OPAL_SUCCESS) clock_register(dev, 2000); - EVENTHANDLER_REGISTER(OPAL_SHUTDOWN, opal_handle_shutdown_message, - NULL, EVENTHANDLER_PRI_ANY); + EVENTHANDLER_SLEEPABLE_REGISTER(OPAL_SHUTDOWN, + opal_handle_shutdown_message, ANY); EVENTHANDLER_REGISTER(shutdown_final, opal_shutdown, NULL, SHUTDOWN_PRI_LAST); @@ -355,8 +354,9 @@ opal_shutdown(void *arg, int howto) } static void -opal_handle_shutdown_message(void *unused, struct opal_msg *msg) +opal_handle_shutdown_message(void *arg) { + struct opal_msg *msg = arg; int howto; switch (be64toh(msg->params[0])) { @@ -399,22 +399,22 @@ opal_handle_messages(void) type = be32toh(msg.msg_type); switch (type) { case OPAL_MSG_ASYNC_COMP: - EVENTHANDLER_DIRECT_INVOKE(OPAL_ASYNC_COMP, &msg); + EVENTHANDLER_PREEMPTIBLE_INVOKE(OPAL_ASYNC_COMP, &msg); break; case OPAL_MSG_EPOW: - EVENTHANDLER_DIRECT_INVOKE(OPAL_EPOW, &msg); + EVENTHANDLER_PREEMPTIBLE_INVOKE(OPAL_EPOW, &msg); break; case OPAL_MSG_SHUTDOWN: - EVENTHANDLER_DIRECT_INVOKE(OPAL_SHUTDOWN, &msg); + EVENTHANDLER_SLEEPABLE_INVOKE(OPAL_SHUTDOWN, &msg); break; case OPAL_MSG_HMI_EVT: - EVENTHANDLER_DIRECT_INVOKE(OPAL_HMI_EVT, &msg); + EVENTHANDLER_PREEMPTIBLE_INVOKE(OPAL_HMI_EVT, &msg); break; case OPAL_MSG_DPO: - EVENTHANDLER_DIRECT_INVOKE(OPAL_DPO, &msg); + EVENTHANDLER_PREEMPTIBLE_INVOKE(OPAL_DPO, &msg); break; case OPAL_MSG_OCC: - EVENTHANDLER_DIRECT_INVOKE(OPAL_OCC, &msg); + EVENTHANDLER_PREEMPTIBLE_INVOKE(OPAL_OCC, &msg); break; default: printf("%s Unknown OPAL message type %d\n", __func__, type); diff --git a/sys/powerpc/powernv/opal_hmi.c b/sys/powerpc/powernv/opal_hmi.c index b10eac1eeaa3..85a648b1eec4 100644 --- a/sys/powerpc/powernv/opal_hmi.c +++ b/sys/powerpc/powernv/opal_hmi.c @@ -65,8 +65,9 @@ struct opal_hmi_event { #define HMI_DISP_NOT_RECOVERED 1 static void -opal_hmi_event_handler(void *unused, struct opal_msg *msg) +opal_hmi_event_handler(void *arg) { + struct opal_msg *msg = arg; struct opal_hmi_event evt; memcpy(&evt, &msg->params, sizeof(evt)); @@ -136,8 +137,8 @@ opal_setup_hmi(void *data) return; } - EVENTHANDLER_REGISTER(OPAL_HMI_EVT, opal_hmi_event_handler, NULL, - EVENTHANDLER_PRI_ANY); + EVENTHANDLER_PREEMPTIBLE_REGISTER(OPAL_HMI_EVT, opal_hmi_event_handler, + ANY); if (bootverbose) printf("Installed OPAL HMI handler.\n"); -- 2.34.1