From b6936450484b5aa9dd2438367a907af020341d1d Mon Sep 17 00:00:00 2001 From: Madhurkiran Harikrishnan Date: Thu, 6 Dec 2018 13:30:44 -0800 Subject: [PATCH 3/3] linux: mali_*timer: Get rid of init_timer kernel 4.19 got rid of ancient init_timer. Hence, replace it with timer_setup API. For more information refer kernel commit 7eeb6b893bd28c68b6d664de1d3120e49b855cdb Signed-off-by: Madhurkiran Harikrishnan Reviewed-by: Hyun Kwon Upstream Status: Pending --- driver/src/devicedrv/mali/common/mali_control_timer.c | 6 ++++++ driver/src/devicedrv/mali/common/mali_group.c | 6 ++++++ driver/src/devicedrv/mali/common/mali_osk.h | 15 ++++++++++++++- driver/src/devicedrv/mali/linux/mali_osk_timers.c | 15 ++++++++++++++- 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/driver/src/devicedrv/mali/common/mali_control_timer.c b/driver/src/devicedrv/mali/common/mali_control_timer.c index 1296ffe..d24b934 100644 --- common/mali_control_timer.c +++ b/common/mali_control_timer.c @@ -65,11 +65,17 @@ _mali_osk_errcode_t mali_control_timer_init(void) } } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) + mali_control_timer = _mali_osk_timer_init(mali_control_timer_callback); +#else mali_control_timer = _mali_osk_timer_init(); +#endif if (NULL == mali_control_timer) { return _MALI_OSK_ERR_FAULT; } +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0) _mali_osk_timer_setcallback(mali_control_timer, mali_control_timer_callback, NULL); +#endif return _MALI_OSK_ERR_OK; } diff --git a/driver/src/devicedrv/mali/common/mali_group.c b/driver/src/devicedrv/mali/common/mali_group.c index 5c7b3f4..1702e9a 100644 --- common/mali_group.c +++ b/common/mali_group.c @@ -65,9 +65,15 @@ struct mali_group *mali_group_create(struct mali_l2_cache_core *core, group = _mali_osk_calloc(1, sizeof(struct mali_group)); if (NULL != group) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) + group->timeout_timer = _mali_osk_timer_init(mali_group_timeout); +#else group->timeout_timer = _mali_osk_timer_init(); +#endif if (NULL != group->timeout_timer) { +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0) _mali_osk_timer_setcallback(group->timeout_timer, mali_group_timeout, (void *)group); +#endif group->l2_cache_core[0] = core; _mali_osk_list_init(&group->group_list); diff --git a/driver/src/devicedrv/mali/common/mali_osk.h b/driver/src/devicedrv/mali/common/mali_osk.h index a501778..fe93d79 100644 --- common/mali_osk.h +++ b/common/mali_osk.h @@ -947,7 +947,17 @@ _mali_osk_errcode_t _mali_osk_notification_queue_dequeue(_mali_osk_notification_ * asked for. * * @{ */ - +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) +/** @brief Initialize a timer + * + * Allocates resources for a new timer, and initializes them. This does not + * start the timer. + * + * @param callback Function to call when timer expires + * @return a pointer to the allocated timer object, or NULL on failure. + */ +_mali_osk_timer_t *_mali_osk_timer_init(_mali_osk_timer_callback_t callback); +#else /** @brief Initialize a timer * * Allocates resources for a new timer, and initializes them. This does not @@ -956,6 +966,7 @@ _mali_osk_errcode_t _mali_osk_notification_queue_dequeue(_mali_osk_notification_ * @return a pointer to the allocated timer object, or NULL on failure. */ _mali_osk_timer_t *_mali_osk_timer_init(void); +#endif /** @brief Start a timer * @@ -1034,6 +1045,7 @@ void _mali_osk_timer_del_async(_mali_osk_timer_t *tim); */ mali_bool _mali_osk_timer_pending(_mali_osk_timer_t *tim); +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0) /** @brief Set a timer's callback parameters. * * This must be called at least once before a timer is started/modified. @@ -1047,6 +1059,7 @@ mali_bool _mali_osk_timer_pending(_mali_osk_timer_t *tim); * @param data Function-specific data to supply to the function on expiry. */ void _mali_osk_timer_setcallback(_mali_osk_timer_t *tim, _mali_osk_timer_callback_t callback, void *data); +#endif /** @brief Terminate a timer, and deallocate resources. * diff --git a/driver/src/devicedrv/mali/linux/mali_osk_timers.c b/driver/src/devicedrv/mali/linux/mali_osk_timers.c index e5d7238..f9b5a86 100644 --- linux/mali_osk_timers.c +++ b/linux/mali_osk_timers.c @@ -21,13 +21,24 @@ struct _mali_osk_timer_t_struct { struct timer_list timer; }; - +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) +typedef void (*timer_timeout_function_t)(struct timer_list *); +#else typedef void (*timer_timeout_function_t)(unsigned long); +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) +_mali_osk_timer_t *_mali_osk_timer_init(_mali_osk_timer_callback_t callback) +#else _mali_osk_timer_t *_mali_osk_timer_init(void) +#endif { _mali_osk_timer_t *t = (_mali_osk_timer_t *)kmalloc(sizeof(_mali_osk_timer_t), GFP_KERNEL); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) + if (NULL != t) timer_setup(&t->timer, (timer_timeout_function_t)callback, 0); +#else if (NULL != t) init_timer(&t->timer); +#endif return t; } @@ -62,12 +73,14 @@ mali_bool _mali_osk_timer_pending(_mali_osk_timer_t *tim) return 1 == timer_pending(&(tim->timer)); } +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0) void _mali_osk_timer_setcallback(_mali_osk_timer_t *tim, _mali_osk_timer_callback_t callback, void *data) { MALI_DEBUG_ASSERT_POINTER(tim); tim->timer.data = (unsigned long)data; tim->timer.function = (timer_timeout_function_t)callback; } +#endif void _mali_osk_timer_term(_mali_osk_timer_t *tim) { -- 2.7.4