From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mga09.intel.com ([134.134.136.24]) by bombadil.infradead.org with esmtp (Exim 4.68 #1 (Red Hat Linux)) id 1KR1RH-0005vW-3d for kexec@lists.infradead.org; Thu, 07 Aug 2008 09:05:43 +0000 Subject: [PATCH 6/6] kexec jump: fix for ftrace From: Huang Ying Date: Thu, 07 Aug 2008 17:05:37 +0800 Message-Id: <1218099937.5164.37.camel@caritas-dev.intel.com> Mime-Version: 1.0 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: kexec-bounces@lists.infradead.org Errors-To: kexec-bounces+dwmw2=infradead.org@lists.infradead.org To: "Eric W. Biederman" , Pavel Machek , nigel@nigel.suspend2.net, "Rafael J. Wysocki" , Andrew Morton , Vivek Goyal , mingo@elte.hu, Linus Torvalds Cc: Kexec Mailing List , linux-kernel@vger.kernel.org Restore ftrace after jumping back from kexeced kernel. Signed-off-by: Huang Ying --- arch/x86/kernel/machine_kexec_32.c | 19 +++++++++++++++++++ kernel/kexec.c | 2 -- 2 files changed, 19 insertions(+), 2 deletions(-) --- a/arch/x86/kernel/machine_kexec_32.c +++ b/arch/x86/kernel/machine_kexec_32.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -117,6 +118,7 @@ void machine_kexec(struct kimage *image) { unsigned long page_list[PAGES_NR]; void *control_page; + int save_ftrace_enabled; asmlinkage unsigned long (*relocate_kernel_ptr)(unsigned long indirection_page, unsigned long control_page, @@ -124,7 +126,15 @@ void machine_kexec(struct kimage *image) unsigned int has_pae, unsigned int preserve_context); +#ifdef CONFIG_KEXEC_JUMP + if (kexec_image->preserve_context) + save_processor_state(); +#endif + +#ifdef CONFIG_FTRACE + save_ftrace_enabled = ftrace_enabled; tracer_disable(); +#endif /* Interrupts aren't acceptable while we reboot */ raw_local_irq_disable(); @@ -182,6 +192,15 @@ void machine_kexec(struct kimage *image) (unsigned long)page_list, image->start, cpu_has_pae, image->preserve_context); + +#ifdef CONFIG_KEXEC_JUMP + if (kexec_image->preserve_context) + restore_processor_state(); +#endif + +#ifdef CONFIG_FTRACE + ftrace_enabled = save_ftrace_enabled; +#endif } void arch_crash_save_vmcoreinfo(void) --- a/kernel/kexec.c +++ b/kernel/kexec.c @@ -1469,7 +1469,6 @@ int kernel_kexec(void) error = device_power_down(PMSG_FREEZE); if (error) goto Enable_irqs; - save_processor_state(); } else #endif { @@ -1482,7 +1481,6 @@ int kernel_kexec(void) #ifdef CONFIG_KEXEC_JUMP if (kexec_image->preserve_context) { - restore_processor_state(); device_power_up(PMSG_RESTORE); Enable_irqs: local_irq_enable(); _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756783AbYHGMcx (ORCPT ); Thu, 7 Aug 2008 08:32:53 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1756299AbYHGMax (ORCPT ); Thu, 7 Aug 2008 08:30:53 -0400 Received: from mga02.intel.com ([134.134.136.20]:31238 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757265AbYHGMaw (ORCPT ); Thu, 7 Aug 2008 08:30:52 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.31,319,1215414000"; d="scan'208";a="426898574" Subject: [PATCH 6/6] kexec jump: fix for ftrace From: Huang Ying To: "Eric W. Biederman" , Pavel Machek , nigel@nigel.suspend2.net, "Rafael J. Wysocki" , Andrew Morton , Vivek Goyal , mingo@elte.hu, Linus Torvalds Cc: linux-kernel@vger.kernel.org, Kexec Mailing List Content-Type: text/plain Date: Thu, 07 Aug 2008 17:05:37 +0800 Message-Id: <1218099937.5164.37.camel@caritas-dev.intel.com> Mime-Version: 1.0 X-Mailer: Evolution 2.22.3.1 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Restore ftrace after jumping back from kexeced kernel. Signed-off-by: Huang Ying --- arch/x86/kernel/machine_kexec_32.c | 19 +++++++++++++++++++ kernel/kexec.c | 2 -- 2 files changed, 19 insertions(+), 2 deletions(-) --- a/arch/x86/kernel/machine_kexec_32.c +++ b/arch/x86/kernel/machine_kexec_32.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -117,6 +118,7 @@ void machine_kexec(struct kimage *image) { unsigned long page_list[PAGES_NR]; void *control_page; + int save_ftrace_enabled; asmlinkage unsigned long (*relocate_kernel_ptr)(unsigned long indirection_page, unsigned long control_page, @@ -124,7 +126,15 @@ void machine_kexec(struct kimage *image) unsigned int has_pae, unsigned int preserve_context); +#ifdef CONFIG_KEXEC_JUMP + if (kexec_image->preserve_context) + save_processor_state(); +#endif + +#ifdef CONFIG_FTRACE + save_ftrace_enabled = ftrace_enabled; tracer_disable(); +#endif /* Interrupts aren't acceptable while we reboot */ raw_local_irq_disable(); @@ -182,6 +192,15 @@ void machine_kexec(struct kimage *image) (unsigned long)page_list, image->start, cpu_has_pae, image->preserve_context); + +#ifdef CONFIG_KEXEC_JUMP + if (kexec_image->preserve_context) + restore_processor_state(); +#endif + +#ifdef CONFIG_FTRACE + ftrace_enabled = save_ftrace_enabled; +#endif } void arch_crash_save_vmcoreinfo(void) --- a/kernel/kexec.c +++ b/kernel/kexec.c @@ -1469,7 +1469,6 @@ int kernel_kexec(void) error = device_power_down(PMSG_FREEZE); if (error) goto Enable_irqs; - save_processor_state(); } else #endif { @@ -1482,7 +1481,6 @@ int kernel_kexec(void) #ifdef CONFIG_KEXEC_JUMP if (kexec_image->preserve_context) { - restore_processor_state(); device_power_up(PMSG_RESTORE); Enable_irqs: local_irq_enable();