| From: Josh Poimboeuf <jpoimboe@redhat.com> |
| Date: Thu, 16 Mar 2017 08:56:28 -0500 |
| Subject: ACPI: Fix incompatibility with mcount-based function graph tracing |
| |
| commit 61b79e16c68d703dde58c25d3935d67210b7d71b upstream. |
| |
| Paul Menzel reported a warning: |
| |
| WARNING: CPU: 0 PID: 774 at /build/linux-ROBWaj/linux-4.9.13/kernel/trace/trace_functions_graph.c:233 ftrace_return_to_handler+0x1aa/0x1e0 |
| Bad frame pointer: expected f6919d98, received f6919db0 |
| from func acpi_pm_device_sleep_wake return to c43b6f9d |
| |
| The warning means that function graph tracing is broken for the |
| acpi_pm_device_sleep_wake() function. That's because the ACPI Makefile |
| unconditionally sets the '-Os' gcc flag to optimize for size. That's an |
| issue because mcount-based function graph tracing is incompatible with |
| '-Os' on x86, thanks to the following gcc bug: |
| |
| https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42109 |
| |
| I have another patch pending which will ensure that mcount-based |
| function graph tracing is never used with CONFIG_CC_OPTIMIZE_FOR_SIZE on |
| x86. |
| |
| But this patch is needed in addition to that one because the ACPI |
| Makefile overrides that config option for no apparent reason. It has |
| had this flag since the beginning of git history, and there's no related |
| comment, so I don't know why it's there. As far as I can tell, there's |
| no reason for it to be there. The appropriate behavior is for it to |
| honor CONFIG_CC_OPTIMIZE_FOR_{SIZE,PERFORMANCE} like the rest of the |
| kernel. |
| |
| Reported-by: Paul Menzel <pmenzel@molgen.mpg.de> |
| Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com> |
| Acked-by: Steven Rostedt (VMware) <rostedt@goodmis.org> |
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/acpi/Makefile | 1 - |
| 1 file changed, 1 deletion(-) |
| |
| --- a/drivers/acpi/Makefile |
| +++ b/drivers/acpi/Makefile |
| @@ -2,7 +2,6 @@ |
| # Makefile for the Linux ACPI interpreter |
| # |
| |
| -ccflags-y := -Os |
| ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT |
| |
| # |