summaryrefslogtreecommitdiff
path: root/core/cortex-m
diff options
context:
space:
mode:
authorRandall Spangler <rspangler@chromium.org>2013-04-03 13:11:05 -0700
committerChromeBot <chrome-bot@google.com>2013-04-04 16:32:27 -0700
commita3dcfd54ef29ac7cbd988ce94e96bcc6ba924ac6 (patch)
tree89787caadeae884edc7b7fe75810aba39c181f73 /core/cortex-m
parentaf4d0fb2976f5d5e9104366f4c525010cfc7489b (diff)
downloadchrome-ec-a3dcfd54ef29ac7cbd988ce94e96bcc6ba924ac6.tar.gz
Improve deferred function calls
1) Check vs. number of allowable deferred function calls is made at link time. 2) Added a check for whether hook_call_deferred() has been made after the start of calculating the time when the hook task should wake. If it has, go back and recalculate the wake time. This works around a race condition. BUG=chrome-os-partner:18473 BRANCH=none TEST=add a bunch of deferrable functions and recompile; generates a link error Change-Id: Ie833e2a699c47b6702957ed67bf7d3925f2df099 Signed-off-by: Randall Spangler <rspangler@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/47266 Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
Diffstat (limited to 'core/cortex-m')
-rw-r--r--core/cortex-m/ec.lds.S8
-rw-r--r--core/cortex-m/link_defs.h5
2 files changed, 9 insertions, 4 deletions
diff --git a/core/cortex-m/ec.lds.S b/core/cortex-m/ec.lds.S
index cb0f38f35a..339ee4f435 100644
--- a/core/cortex-m/ec.lds.S
+++ b/core/cortex-m/ec.lds.S
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
+/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
@@ -122,6 +122,12 @@ SECTIONS
} > FLASH
#endif
__ro_end = . ;
+
+ __deferred_funcs_count =
+ (__deferred_funcs_end - __deferred_funcs) / 4;
+ ASSERT(__deferred_funcs_count <= DEFERRABLE_MAX_COUNT,
+ "Increase DEFERRABLE_MAX_COUNT")
+
.bss : {
/* Stacks must be 64-bit aligned */
. = ALIGN(8);
diff --git a/core/cortex-m/link_defs.h b/core/cortex-m/link_defs.h
index dbf2757b21..f78a7c46c4 100644
--- a/core/cortex-m/link_defs.h
+++ b/core/cortex-m/link_defs.h
@@ -44,9 +44,8 @@ extern const struct hook_data __hooks_second[];
extern const struct hook_data __hooks_second_end[];
/* Deferrable functions */
-static const struct deferred_data __deferred_funcs[];
-static const struct deferred_data __deferred_funcs_end[];
-
+extern const struct deferred_data __deferred_funcs[];
+extern const struct deferred_data __deferred_funcs_end[];
/* Host commands */
extern const struct host_command __hcmds[];