All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kees Cook <keescook@chromium.org>
To: Joel Fernandes <joelaf@google.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Anton Vorontsov <anton@enomsg.org>,
	Colin Cross <ccross@android.com>, Tony Luck <tony.luck@intel.com>
Subject: Re: [PATCH 4/7] pstore: Make ramoops_init_przs generic for other prz arrays
Date: Mon, 10 Oct 2016 16:55:46 -0700	[thread overview]
Message-ID: <CAGXu5j+sc4-kQsypE1w6BM2RXOsYZSYfR5BvX4GKDamWpNNAfA@mail.gmail.com> (raw)
In-Reply-To: <1475904515-24970-5-git-send-email-joelaf@google.com>

On Fri, Oct 7, 2016 at 10:28 PM, Joel Fernandes <joelaf@google.com> wrote:
> Currently ramoops_init_przs is hard wired only for panic dump zone array. In
> preparation for the ftrace zone array (one zone per-cpu), make the function
> more generic to be able to handle this case.
>
> Add a new ramoops_init_dump_przs function and use the generic function for the
> dump prz array.

Something similar was suggested in the recent "multiple pmsg" series
that was posted too. Making this generic is good, though see my nit
below...

>
> Signed-off-by: Joel Fernandes <joelaf@google.com>
> ---
>  fs/pstore/ram.c | 72 ++++++++++++++++++++++++++++++++++++---------------------
>  1 file changed, 46 insertions(+), 26 deletions(-)
>
> diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c
> index 519404c..a796f49 100644
> --- a/fs/pstore/ram.c
> +++ b/fs/pstore/ram.c
> @@ -402,54 +402,74 @@ static void ramoops_free_przs(struct ramoops_context *cxt)
>  }
>
>  static int ramoops_init_przs(struct device *dev, struct ramoops_context *cxt,
> -                            phys_addr_t *paddr, size_t dump_mem_sz)
> +                            struct persistent_ram_zone ***przs,
> +                            phys_addr_t *paddr, size_t mem_sz,
> +                            unsigned int cnt, u32 sig)
>  {
>         int err = -ENOMEM;
>         int i;
> +       size_t zone_sz;
> +       struct persistent_ram_zone **prz_ar;
>
> -       if (!cxt->record_size)
> -               return 0;
> -
> -       if (*paddr + dump_mem_sz - cxt->phys_addr > cxt->size) {
> -               dev_err(dev, "no room for dumps\n");
> +       if (*paddr + mem_sz - cxt->phys_addr > cxt->size) {
> +               dev_err(dev, "no room for mem region (0x%zx@0x%llx) in (0x%lx@0x%llx)\n",
> +                       mem_sz, (unsigned long long)*paddr,
> +                       cxt->size, (unsigned long long)cxt->phys_addr);
>                 return -ENOMEM;
>         }
>
> -       cxt->max_dump_cnt = dump_mem_sz / cxt->record_size;
> -       if (!cxt->max_dump_cnt)
> +       zone_sz = mem_sz / cnt;
> +       if (!zone_sz)
>                 return -ENOMEM;
>
> -       cxt->przs = kzalloc(sizeof(*cxt->przs) * cxt->max_dump_cnt,
> -                            GFP_KERNEL);
> -       if (!cxt->przs) {
> -               dev_err(dev, "failed to initialize a prz array for dumps\n");
> -               goto fail_mem;
> +       prz_ar = kzalloc(sizeof(**przs) * cnt, GFP_KERNEL);

While I realize this is mainly a refactoring, as long as we're in
here, can you make this kcalloc instead?

> +       if (!prz_ar) {
> +               dev_err(dev, "Failed to initialize prz array\n");
> +               return -ENOMEM;
>         }
>
> -       for (i = 0; i < cxt->max_dump_cnt; i++) {
> -               cxt->przs[i] = persistent_ram_new(*paddr, cxt->record_size, 0,
> +       for (i = 0; i < cnt; i++) {
> +               prz_ar[i] = persistent_ram_new(*paddr, zone_sz, sig,
>                                                   &cxt->ecc_info,
>                                                   cxt->memtype);
> -               if (IS_ERR(cxt->przs[i])) {
> -                       err = PTR_ERR(cxt->przs[i]);
> +               if (IS_ERR(prz_ar[i])) {
> +                       err = PTR_ERR(prz_ar[i]);
>                         dev_err(dev, "failed to request mem region (0x%zx@0x%llx): %d\n",
>                                 cxt->record_size, (unsigned long long)*paddr, err);
>
>                         while (i > 0) {
>                                 i--;
> -                               persistent_ram_free(cxt->przs[i]);
> +                               persistent_ram_free(prz_ar[i]);
>                         }
> -                       goto fail_prz;
> +                       kfree(prz_ar);
> +                       return err;
>                 }
> -               *paddr += cxt->record_size;
> +               *paddr += zone_sz;
>         }
>
> +       *przs = prz_ar;
>         return 0;
> -fail_prz:
> -       kfree(cxt->przs);
> -fail_mem:
> -       cxt->max_dump_cnt = 0;
> -       return err;
> +}
> +
> +static int ramoops_init_dump_przs(struct device *dev,
> +                                 struct ramoops_context *cxt,
> +                                 phys_addr_t *paddr, size_t mem_sz)
> +{
> +       int ret;
> +
> +       if (!cxt->record_size)
> +               return 0;
> +
> +       cxt->max_dump_cnt = mem_sz / cxt->record_size;
> +       if (!cxt->max_dump_cnt)
> +               return -ENOMEM;
> +
> +       ret = ramoops_init_przs(dev, cxt, &cxt->przs, paddr, mem_sz,
> +                               cxt->max_dump_cnt, 0);
> +       if (ret)
> +               cxt->max_dump_cnt = 0;
> +
> +       return ret;
>  }
>
>  static int ramoops_init_prz(struct device *dev, struct ramoops_context *cxt,
> @@ -601,7 +621,7 @@ static int ramoops_probe(struct platform_device *pdev)
>
>         dump_mem_sz = cxt->size - cxt->console_size - cxt->ftrace_size
>                         - cxt->pmsg_size;
> -       err = ramoops_init_przs(dev, cxt, &paddr, dump_mem_sz);
> +       err = ramoops_init_dump_przs(dev, cxt, &paddr, dump_mem_sz);
>         if (err)
>                 goto fail_out;
>
> --
> 2.7.4
>

-Kees

-- 
Kees Cook
Nexus Security

  reply	other threads:[~2016-10-10 23:55 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-08  5:28 [RFC 0/7] pstore: Improve performance of ftrace backend with ramoops Joel Fernandes
2016-10-08  5:28 ` [PATCH 1/7] pstore: Make spinlock per zone instead of global Joel Fernandes
2016-10-08  5:44   ` Joel Fernandes
2016-10-10 23:44   ` Kees Cook
2016-10-08  5:28 ` [PATCH 2/7] pstore: locking: dont lock unless caller asks to Joel Fernandes
2016-10-10 23:48   ` Kees Cook
2016-10-11 14:41     ` Joel Fernandes
2016-10-08  5:28 ` [PATCH 3/7] pstore: Remove case of PSTORE_TYPE_PMSG write using deprecated function Joel Fernandes
2016-10-10 23:52   ` Kees Cook
2016-10-11 14:46     ` Joel Fernandes
2016-10-08  5:28 ` [PATCH 4/7] pstore: Make ramoops_init_przs generic for other prz arrays Joel Fernandes
2016-10-10 23:55   ` Kees Cook [this message]
2016-10-08  5:28 ` [PATCH 5/7] ramoops: Split ftrace buffer space into per-CPU zones Joel Fernandes
2016-10-09 17:15   ` Joel Fernandes
2016-10-10 23:59     ` Kees Cook
2016-10-11  0:00       ` Kees Cook
2016-10-16 17:40       ` Joel Fernandes
2016-10-18 20:37         ` Kees Cook
2016-10-08  5:28 ` [PATCH 6/7] pstore: Add support to store timestamp counter in ftrace records Joel Fernandes
2016-10-08  5:28 ` [PATCH 7/7] pstore: Merge per-CPU ftrace zones into one zone for output Joel Fernandes
2016-10-11  9:57 ` [RFC 0/7] pstore: Improve performance of ftrace backend with ramoops Steven Rostedt
2016-10-20  7:17 [PATCH " Joel Fernandes
2016-10-20  7:17 ` [PATCH 4/7] pstore: Make ramoops_init_przs generic for other prz arrays Joel Fernandes

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=CAGXu5j+sc4-kQsypE1w6BM2RXOsYZSYfR5BvX4GKDamWpNNAfA@mail.gmail.com \
    --to=keescook@chromium.org \
    --cc=anton@enomsg.org \
    --cc=ccross@android.com \
    --cc=joelaf@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=tony.luck@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.