diff options
author | Anton Staaf <robotboy@chromium.org> | 2016-03-23 12:45:28 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-04-18 17:32:40 -0700 |
commit | 068cd0850684ee28a5a514e5a270edce2edb3979 (patch) | |
tree | e84f2316e37baa72f1c9611e665749d91a3ce8fd /power | |
parent | 1e7c280491232110e1006d545f9a61ca05d469d5 (diff) | |
download | chrome-ec-068cd0850684ee28a5a514e5a270edce2edb3979.tar.gz |
Deferred: Use deferred_data instead of function pointer
Previously calls to hook_call_deferred were passed the function to call,
which was then looked up in the .rodata.deferred section with a linear
search. This linear search can be replaced with a subtract by passing
the pointer to the deferred_data object created when DECLARE_DEFERRED
was invoked.
Signed-off-by: Anton Staaf <robotboy@chromium.org>
BRANCH=None
BUG=None
CQ-DEPEND=CL:*255812
TEST=make buildall -j
Change-Id: I951dd1541302875b102dd086154cf05591694440
Reviewed-on: https://chromium-review.googlesource.com/334315
Commit-Ready: Bill Richardson <wfrichar@chromium.org>
Tested-by: Bill Richardson <wfrichar@chromium.org>
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
Diffstat (limited to 'power')
-rw-r--r-- | power/common.c | 2 | ||||
-rw-r--r-- | power/gaia.c | 2 | ||||
-rw-r--r-- | power/mediatek.c | 5 | ||||
-rw-r--r-- | power/skylake.c | 2 |
4 files changed, 6 insertions, 5 deletions
diff --git a/power/common.c b/power/common.c index f455b3a3b3..696fed1fb0 100644 --- a/power/common.c +++ b/power/common.c @@ -473,7 +473,7 @@ static void siglog_add(enum gpio_signal signal) siglog[siglog_entries].level = gpio_get_level(signal); siglog_entries++; - hook_call_deferred(siglog_deferred, SECOND); + hook_call_deferred(&siglog_deferred_data, SECOND); } #define SIGLOG(S) siglog_add(S) diff --git a/power/gaia.c b/power/gaia.c index 161cf14553..a5e0ff0fd7 100644 --- a/power/gaia.c +++ b/power/gaia.c @@ -281,7 +281,7 @@ void power_signal_interrupt(enum gpio_signal signal) { if (signal == GPIO_SUSPEND_L) { /* Handle suspend events in the hook task */ - hook_call_deferred(gaia_suspend_deferred, 0); + hook_call_deferred(&gaia_suspend_deferred_data, 0); } else { /* All other events are handled in the chipset task */ task_wake(TASK_ID_CHIPSET); diff --git a/power/mediatek.c b/power/mediatek.c index bf4f0e5cc1..1ac5066712 100644 --- a/power/mediatek.c +++ b/power/mediatek.c @@ -613,7 +613,8 @@ static void power_on(void) /* Push the power button */ set_pmic_pwron(1); - hook_call_deferred(release_pmic_pwron_deferred, PMIC_PWRON_PRESS_TIME); + hook_call_deferred(&release_pmic_pwron_deferred_data, + PMIC_PWRON_PRESS_TIME); /* enable interrupt */ gpio_set_flags(GPIO_SUSPEND_L, INT_BOTH_PULL_UP); @@ -645,7 +646,7 @@ void chipset_reset(int is_cold) usleep(PMIC_COLD_RESET_L_HOLD_TIME); /* Press the PMIC power button */ set_pmic_pwron(1); - hook_call_deferred(release_pmic_pwron_deferred, + hook_call_deferred(&release_pmic_pwron_deferred_data, PMIC_PWRON_PRESS_TIME); } else { CPRINTS("EC triggered warm reboot"); diff --git a/power/skylake.c b/power/skylake.c index 58f2d58f12..d59f5a7349 100644 --- a/power/skylake.c +++ b/power/skylake.c @@ -465,7 +465,7 @@ void power_signal_interrupt_S0(enum gpio_signal signal) { if (gpio_get_level(GPIO_PCH_SLP_S0_L)) { slp_s0_debounce.required = 1; - hook_call_deferred(slp_s0_assertion_deferred, 3 * MSEC); + hook_call_deferred(&slp_s0_assertion_deferred_data, 3 * MSEC); } else if (slp_s0_debounce.required == 0) { slp_s0_debounce.done = 0; |