linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Michael Neuling <mikey@neuling.org>
To: Thomas Klein <osstklei@de.ibm.com>, paulus@samba.org
Cc: Jeff Garzik <jeff@garzik.org>,
	Jan-Bernd Themann <themann@de.ibm.com>,
	netdev <netdev@vger.kernel.org>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	linux-ppc <linuxppc-dev@ozlabs.org>,
	Christoph Raisch <raisch@de.ibm.com>,
	Marcus Eder <meder@de.ibm.com>,
	Stefan Roscher <stefan.roscher@de.ibm.com>
Subject: Re: [PATCH] ehea: Add kdump support
Date: Sat, 10 Nov 2007 11:20:22 +1100	[thread overview]
Message-ID: <24258.1194654022@neuling.org> (raw)
In-Reply-To: <200711091433.51259.osstklei@de.ibm.com>

> To support ehea driver reloading in a kdump kernel the driver has to
> perform firmware handle deregistrations when the original kernel
> crashes. As there's currently no notifier chain for machine crashes
> this patch enables kdump support in the ehea driver by bending the
> ppc_md.machine_crash_shutdown hook to its own machine crash
> handler. The original machine_crash_shutdown() fn is called
> afterwards. This works fine as long as the ehea driver is the only one
> which does so. Problems may occur if other drivers do the same and
> unload regularly .  This patch enables 2.6.24-rc2 to use kdump with
> ehea and only puts a very low risk on base kernel. In 2.6.24 we know
> ehea is the only user of this mechanism. The next step for 2.6.25
> would be to add a proper notifier chain.  The full solution might be
> that register_reboot_notifier() provides sth like a SYS_CRASH
> action. Please apply.

If we are going to do this workaround, I'd prefer the notifier chain be
done correctly now.  The way it's hacked in here, it's more likely to
cause even more issues.  

Either way, if this is going to go in, it at least needs to be acked by
Paulus.

> 
> Signed-off-by: Thomas Klein <tklein@de.ibm.com>
> 
> ---
>  drivers/net/ehea/ehea.h      |    2 +-
>  drivers/net/ehea/ehea_main.c |   28 ++++++++++++++++++++++++++++
>  2 files changed, 29 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/net/ehea/ehea.h b/drivers/net/ehea/ehea.h
> index f78e5bf..5935899 100644
> --- a/drivers/net/ehea/ehea.h
> +++ b/drivers/net/ehea/ehea.h
> @@ -40,7 +40,7 @@
>  #include <asm/io.h>
>  
>  #define DRV_NAME	"ehea"
> -#define DRV_VERSION	"EHEA_0080"
> +#define DRV_VERSION	"EHEA_0081"
>  
>  /* eHEA capability flags */
>  #define DLPAR_PORT_ADD_REM 1
> diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c
> index f0319f1..40a732e 100644
> --- a/drivers/net/ehea/ehea_main.c
> +++ b/drivers/net/ehea/ehea_main.c
> @@ -37,6 +37,7 @@
>  #include <linux/reboot.h>
>  
>  #include <net/ip.h>
> +#include <asm-powerpc/machdep.h>
>  
>  #include "ehea.h"
>  #include "ehea_qmr.h"
> @@ -98,6 +99,7 @@ static int port_name_cnt = 0;
>  static LIST_HEAD(adapter_list);
>  u64 ehea_driver_flags = 0;
>  struct work_struct ehea_rereg_mr_task;
> +static void (*orig_machine_crash_shutdown)(struct pt_regs *regs);
>  
>  struct semaphore dlpar_mem_lock;
>  
> @@ -3312,6 +3314,29 @@ static struct notifier_block ehea_reboot_nb = {
>          .notifier_call = ehea_reboot_notifier,
>  };
>  
> +void ehea_crash_notifier(struct pt_regs *regs)
> +{
> +	ehea_info("Machine crash: freeing all eHEA resources");
> +	ibmebus_unregister_driver(&ehea_driver);
> +	orig_machine_crash_shutdown(regs);
> +}
> +
> +void ehea_register_crash_notifier(void)
> +{
> +#ifdef CONFIG_KEXEC
> +	orig_machine_crash_shutdown =
> +               (void*)__xchg_u64((unsigned long*)&ppc_md.machine_crash_shutd
own,
> +				 (unsigned long)ehea_crash_notifier);
> +#endif
> +}
> +
> +void ehea_unregister_crash_notifier(void)
> +{
> +#ifdef CONFIG_KEXEC
> +	ppc_md.machine_crash_shutdown = orig_machine_crash_shutdown;
> +#endif
> +}
> +
>  static int check_module_parm(void)
>  {
>  	int ret = 0;
> @@ -3369,6 +3394,7 @@ int __init ehea_module_init(void)
>  		goto out;
>  
>  	register_reboot_notifier(&ehea_reboot_nb);
> +	ehea_register_crash_notifier();
>  
>  	ret = ibmebus_register_driver(&ehea_driver);
>  	if (ret) {
> @@ -3382,6 +3408,7 @@ int __init ehea_module_init(void)
>  		ehea_error("failed to register capabilities attribute, ret=%d",
>  			   ret);
>  		unregister_reboot_notifier(&ehea_reboot_nb);
> +		ehea_unregister_crash_notifier();
>  		ibmebus_unregister_driver(&ehea_driver);
>  		goto out;
>  	}
> @@ -3396,6 +3423,7 @@ static void __exit ehea_module_exit(void)
>  	driver_remove_file(&ehea_driver.driver, &driver_attr_capabilities);
>  	ibmebus_unregister_driver(&ehea_driver);
>  	unregister_reboot_notifier(&ehea_reboot_nb);
> +	ehea_unregister_crash_notifier();
>  	ehea_destroy_busmap();
>  }
>  
> -- 
> 1.5.2
> 

  reply	other threads:[~2007-11-10  0:20 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-09 13:33 [PATCH] ehea: Add kdump support Thomas Klein
2007-11-10  0:20 ` Michael Neuling [this message]
2007-11-26  8:16 ` Michael Ellerman
2007-11-26 10:45   ` Christoph Raisch
2007-11-27  0:35     ` Michael Neuling
2007-11-26 15:41   ` Luke Browning
2007-11-26 18:11     ` Linas Vepstas
  -- strict thread matches above, loose matches on Subject: below --
2008-02-13 15:18 [PATCH] ehea: add " Thomas Klein
2008-02-20 16:50 ` Jeff Garzik

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=24258.1194654022@neuling.org \
    --to=mikey@neuling.org \
    --cc=jeff@garzik.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=meder@de.ibm.com \
    --cc=netdev@vger.kernel.org \
    --cc=osstklei@de.ibm.com \
    --cc=paulus@samba.org \
    --cc=raisch@de.ibm.com \
    --cc=stefan.roscher@de.ibm.com \
    --cc=themann@de.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).