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 for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CANLzEks9ne5eOjQTkZAHSbR+jPGjyw9RPQODi=cB_eOz7zCskA@mail.gmail.com>
Date:	Thu, 18 Apr 2013 15:00:00 -0700
From:	Benson Leung <bleung@...omium.org>
To:	Olof Johansson <olof@...om.net>
Cc:	Matthew Garrett <matthew.garrett@...ula.com>,
	Linus Torvalds <torvalds@...ux-foundation.org>,
	"platform-driver-x86@...r.kernel.org" 
	<platform-driver-x86@...r.kernel.org>,
	"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
	dirk@...ndel.org
Subject: Re: [PATCH] Platform: x86: chromeos_laptop: defer probing if no i2c
 busses found

 Acked-by: Benson Leung <bleung@...omium.org>

On Thu, Apr 18, 2013 at 2:55 PM, Olof Johansson <olof@...om.net> wrote:
> If chromeos_laptop is loaded before the DRM driver, the i2c busses will
> not yet be available. Defer probe for that case and try again later.
>
> Trickling the error up to the module init function is unfortuantely a
> little awkward, since the i2c bus lookup and device registration happens
> as a dmi callback.
>
> Reported-by: Dirk Hohndel <dirk@...ndel.org>
> Signed-off-by: Olof Johansson <olof@...om.net>
> ---
>  drivers/platform/x86/chromeos_laptop.c |   33 ++++++++++++++++++++++++--------
>  1 file changed, 25 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/platform/x86/chromeos_laptop.c b/drivers/platform/x86/chromeos_laptop.c
> index 3e5b4497..7ff12fa 100644
> --- a/drivers/platform/x86/chromeos_laptop.c
> +++ b/drivers/platform/x86/chromeos_laptop.c
> @@ -39,6 +39,7 @@
>  static struct i2c_client *als;
>  static struct i2c_client *tp;
>  static struct i2c_client *ts;
> +static int setup_error;
>
>  const char *i2c_adapter_names[] = {
>         "SMBus I801 adapter",
> @@ -191,7 +192,8 @@ static int __init find_i2c_adapter_num(enum i2c_adapter_type type)
>         if (!dev) {
>                 pr_err("%s: i2c adapter %s not found on system.\n", __func__,
>                        name);
> +               setup_error = -EPROBE_DEFER;
>                 return -ENODEV;
>         }
>         adapter = to_i2c_adapter(dev);
>         return adapter->nr;
> @@ -381,23 +383,38 @@ static struct dmi_system_id __initdata chromeos_laptop_dmi_table[] = {
>  };
>  MODULE_DEVICE_TABLE(dmi, chromeos_laptop_dmi_table);
>
> +static void chromeos_laptop_unregister(void)
> +{
> +       if (als)
> +               i2c_unregister_device(als);
> +       if (tp)
> +               i2c_unregister_device(tp);
> +       if (ts)
> +               i2c_unregister_device(ts);
> +
> +       als = NULL;
> +       tp = NULL;
> +       ts = NULL;
> +}
> +
>  static int __init chromeos_laptop_init(void)
>  {
> +       setup_error = 0;
> +
>         if (!dmi_check_system(chromeos_laptop_dmi_table)) {
>                 pr_debug("%s unsupported system.\n", __func__);
>                 return -ENODEV;
>         }
> -       return 0;
> +
> +       if (setup_error)
> +               chromeos_laptop_unregister();
> +
> +       return setup_error;
>  }
>
>  static void __exit chromeos_laptop_exit(void)
>  {
> -       if (als)
> -               i2c_unregister_device(als);
> -       if (tp)
> -               i2c_unregister_device(tp);
> -       if (ts)
> -               i2c_unregister_device(ts);
> +       chromeos_laptop_unregister();
>  }
>
>  module_init(chromeos_laptop_init);
> --
> 1.7.10.4
>



-- 
Benson Leung
Software Engineer, Chrom* OS
bleung@...omium.org
--
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