lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20141007160056.GC19005@lunn.ch>
Date:	Tue, 7 Oct 2014 18:00:56 +0200
From:	Andrew Lunn <andrew@...n.ch>
To:	Guenter Roeck <linux@...ck-us.net>
Cc:	linux-kernel@...r.kernel.org, linux-m32r-ja@...linux-m32r.org,
	linux-mips@...ux-mips.org, linux-efi@...r.kernel.org,
	linux-ia64@...r.kernel.org, linux-xtensa@...ux-xtensa.org,
	devel@...verdev.osuosl.org, linux-s390@...r.kernel.org,
	lguest@...ts.ozlabs.org, linux-c6x-dev@...ux-c6x.org,
	Dmitry Eremin-Solenikov <dbaryshkov@...il.com>,
	linux-hexagon@...r.kernel.org, linux-sh@...r.kernel.org,
	linux-acpi@...r.kernel.org, xen-devel@...ts.xenproject.org,
	devicetree@...r.kernel.org,
	user-mode-linux-devel@...ts.sourceforge.net,
	linux-pm@...r.kernel.org,
	adi-buildroot-devel@...ts.sourceforge.net,
	linux-m68k@...ts.linux-m68k.org, linux-am33-list@...hat.com,
	linux-tegra@...r.kernel.org,
	openipmi-developer@...ts.sourceforge.net,
	linux-metag@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
	linux-parisc@...r.kernel.org, linux-cris-kernel@...s.com,
	David Woodhouse <dwmw2@...radead.org>,
	Sebastian Reichel <sre@...nel.org>,
	linux-alpha@...r.kernel.org, linuxppc-dev@...ts.ozlabs.org
Subject: Re: [PATCH 21/44] power/reset: gpio-poweroff: Register with kernel
 poweroff handler

On Mon, Oct 06, 2014 at 10:28:23PM -0700, Guenter Roeck wrote:
> Register with kernel poweroff handler instead of setting pm_power_off
> directly. Register with a low priority value of 64 to reflect that
> the original code only sets pm_power_off if it was not already set.
> 
> Other changes:
> 
> Drop note that there can not be an additional instance of this driver.
> The original reason no longer applies, it should be obvious that there
> can only be one instance of the driver if static variables are used to
> reflect its state, and support for multiple instances can now be added
> easily if needed by avoiding static variables.
> 
> Do not create an error message if another poweroff handler has already been
> registered. This is perfectly normal and acceptable.
> 
> Do not display a warning traceback if the poweroff handler fails to
> power off the system. There may be other poweroff handlers.

I would prefer to keep the warning traceback. We found on some
hardware the GPIO transitions were too fast and it failed to power
off. Seeing the traceback gives an idea where to go look for the
problem.

Other than that,

Acked-by: Andrew Lunn <andrew@...n.ch>

> 
> Cc: Sebastian Reichel <sre@...nel.org>
> Cc: Dmitry Eremin-Solenikov <dbaryshkov@...il.com>
> Cc: David Woodhouse <dwmw2@...radead.org>
> Signed-off-by: Guenter Roeck <linux@...ck-us.net>
> ---
>  drivers/power/reset/gpio-poweroff.c | 36 ++++++++++++++++++------------------
>  1 file changed, 18 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/power/reset/gpio-poweroff.c b/drivers/power/reset/gpio-poweroff.c
> index ce849bc..e95a7a1 100644
> --- a/drivers/power/reset/gpio-poweroff.c
> +++ b/drivers/power/reset/gpio-poweroff.c
> @@ -14,18 +14,18 @@
>  #include <linux/kernel.h>
>  #include <linux/init.h>
>  #include <linux/delay.h>
> +#include <linux/notifier.h>
> +#include <linux/pm.h>
>  #include <linux/platform_device.h>
>  #include <linux/gpio/consumer.h>
>  #include <linux/of_platform.h>
>  #include <linux/module.h>
>  
> -/*
> - * Hold configuration here, cannot be more than one instance of the driver
> - * since pm_power_off itself is global.
> - */
>  static struct gpio_desc *reset_gpio;
>  
> -static void gpio_poweroff_do_poweroff(void)
> +static int gpio_poweroff_do_poweroff(struct notifier_block *this,
> +				     unsigned long unused1, void *unused2)
> +
>  {
>  	BUG_ON(!reset_gpio);
>  
> @@ -42,20 +42,18 @@ static void gpio_poweroff_do_poweroff(void)
>  	/* give it some time */
>  	mdelay(3000);
>  
> -	WARN_ON(1);
> +	return NOTIFY_DONE;
>  }
>  
> +static struct notifier_block gpio_poweroff_nb = {
> +	.notifier_call = gpio_poweroff_do_poweroff,
> +	.priority = 64,
> +};
> +
>  static int gpio_poweroff_probe(struct platform_device *pdev)
>  {
>  	bool input = false;
> -
> -	/* If a pm_power_off function has already been added, leave it alone */
> -	if (pm_power_off != NULL) {
> -		dev_err(&pdev->dev,
> -			"%s: pm_power_off function already registered",
> -		       __func__);
> -		return -EBUSY;
> -	}
> +	int err;
>  
>  	reset_gpio = devm_gpiod_get(&pdev->dev, NULL);
>  	if (IS_ERR(reset_gpio))
> @@ -77,14 +75,16 @@ static int gpio_poweroff_probe(struct platform_device *pdev)
>  		}
>  	}
>  
> -	pm_power_off = &gpio_poweroff_do_poweroff;
> -	return 0;
> +	err = register_poweroff_handler(&gpio_poweroff_nb);
> +	if (err)
> +		dev_err(&pdev->dev, "Failed to register poweroff handler\n");
> +
> +	return err;
>  }
>  
>  static int gpio_poweroff_remove(struct platform_device *pdev)
>  {
> -	if (pm_power_off == &gpio_poweroff_do_poweroff)
> -		pm_power_off = NULL;
> +	unregister_poweroff_handler(&gpio_poweroff_nb);
>  
>  	return 0;
>  }
> -- 
> 1.9.1
> 
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@...ts.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ