lkml.org 
[lkml]   [2011]   [Jun]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
SubjectRe: [PATCH 1/2 v2] ramoops: use module parameters instead of platform data if not available
From
On Sat, May 28, 2011 at 10:48 PM, Marco Stornelli
<marco.stornelli@gmail.com> wrote:
> From: Marco Stornelli <marco.stornelli@gmail.com>
>
> Use generic module parameters instead of platform data, if platform
> data are not available. This limitation has been introduced with
> commit c3b92ce9e75f6353104fc7f8e32fb9fdb2550ad0.
>
> Signed-off-by: Marco Stornelli <marco.stornelli@gmail.com>
> CC: Kyungmin Park <kyungmin.park@samsung.com>
> Reported-by: Stevie Trujillo <stevie.trujillo@gmail.com>
> ---
> ChangeLog
> v2: fixed tab/space problem
>
> diff --git a/drivers/char/ramoops.c b/drivers/char/ramoops.c
> index 1a9f5f6..bf5f9f6 100644
> --- a/drivers/char/ramoops.c
> +++ b/drivers/char/ramoops.c
> @@ -26,6 +26,7 @@
>  #include <linux/io.h>
>  #include <linux/ioport.h>
>  #include <linux/platform_device.h>
> +#include <linux/slab.h>
>  #include <linux/ramoops.h>
>
>  #define RAMOOPS_KERNMSG_HDR "===="
> @@ -56,6 +57,9 @@ static struct ramoops_context {
>        int max_count;
>  } oops_cxt;
>
> +static struct platform_device *dummy;
> +static struct ramoops_platform_data *dummy_data;
> +
>  static void ramoops_do_dump(struct kmsg_dumper *dumper,
>                enum kmsg_dump_reason reason, const char *s1, unsigned long l1,
>                const char *s2, unsigned long l2)
> @@ -106,27 +110,22 @@ static int __init ramoops_probe(struct platform_device *pdev)
>        struct ramoops_context *cxt = &oops_cxt;
>        int err = -EINVAL;
>
> -       if (pdata) {
> -               mem_size = pdata->mem_size;
> -               mem_address = pdata->mem_address;
> -       }
> -
> -       if (!mem_size) {
> +       if (!pdata->mem_size) {
>                printk(KERN_ERR "ramoops: invalid size specification");
>                goto fail3;
>        }
>
> -       rounddown_pow_of_two(mem_size);
> +       rounddown_pow_of_two(pdata->mem_size);
>
> -       if (mem_size < RECORD_SIZE) {
> +       if (pdata->mem_size < RECORD_SIZE) {
>                printk(KERN_ERR "ramoops: size too small");
>                goto fail3;
>        }
>
> -       cxt->max_count = mem_size / RECORD_SIZE;
> +       cxt->max_count = pdata->mem_size / RECORD_SIZE;
>        cxt->count = 0;
> -       cxt->size = mem_size;
> -       cxt->phys_addr = mem_address;
> +       cxt->size = pdata->mem_size;
> +       cxt->phys_addr = pdata->mem_address;
>
>        if (!request_mem_region(cxt->phys_addr, cxt->size, "ramoops")) {
>                printk(KERN_ERR "ramoops: request mem region failed");
> @@ -179,12 +178,35 @@ static struct platform_driver ramoops_driver = {
>
>  static int __init ramoops_init(void)
>  {
> -       return platform_driver_probe(&ramoops_driver, ramoops_probe);
> +       int ret;
> +       ret = platform_driver_probe(&ramoops_driver, ramoops_probe);
> +       if (ret == -ENODEV)
> +       {


Wrong coding style...

> +               /*
> +                * if we didn't find a platform device, we use module parameters
> +                * building platform data on the fly.
> +                */
> +               dummy_data = (struct ramoops_platform_data *)
> +                    kzalloc(sizeof(struct ramoops_platform_data), GFP_KERNEL);

Please check the return value of kzalloc(), and, you don't need to
cast it.

> +               dummy_data->mem_size = mem_size;
> +               dummy_data->mem_address = mem_address;
> +               dummy = platform_create_bundle(&ramoops_driver, ramoops_probe,
> +                       NULL, 0, dummy_data,
> +                       sizeof(struct ramoops_platform_data));
> +
> +               if (IS_ERR(dummy))
> +                       ret = PTR_ERR(dummy);
> +               else
> +                       ret = 0;
> +       }
> +
> +       return ret;
>  }
>
>  static void __exit ramoops_exit(void)
>  {
>        platform_driver_unregister(&ramoops_driver);
> +       kfree(dummy_data);
>  }
>
>  module_init(ramoops_init);
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2011-06-06 18:05    [from the cache]
©2003-2011 Jasper Spaans