From: Marek Vasut <marex@denx.de>
To: Huang Shijie <shijie8@gmail.com>
Cc: fabio.estevam@freescale.com, dedekind1@gmail.com,
stable@vger.kernel.org, linux-mtd@lists.infradead.org,
shawn.guo@linaro.org, dwmw2@infradead.org,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v4] mtd: gpmi: add NAND write verify support
Date: Sun, 12 Aug 2012 21:14:46 +0200 [thread overview]
Message-ID: <201208122114.46901.marex@denx.de> (raw)
In-Reply-To: <CAMiH66GopNVeKPRQn+KfwRHUoM-Lv8WitX0zAS=Vi=8QAvS-Pw@mail.gmail.com>
Dear Huang Shijie,
[...]
> >> + this->verify_buf = kzalloc(mtd->writesize, GFP_KERNEL);
> >
> > devm_
>
> emm...
> The devm_kzalloc() is the wrong choose in this case. It may makes we
> waste much more memory when the NAND page is 8K.
>
> Assume the gpmi uses a 8K page nand chip. The devm_kzalloc() will
> allocate (sizeof(struct devres) + 8K).
Don't forget the malloc header and padding around malloc()'d space. So you're
behind the 2 * PAGESIZE anyway.
> It's obvious that the size is bigger then the SLUB_MAX_SIZE. So the
> kernel gets 2 with the
> get_order(sizeof(struct devres) + 8K) which means we have to use 4
> memory page for the verify_buf.
> But in actually, we only use 8K memory. So the rest nearly 8K(
> sizeof(struct devres) is very small) memory
> is wasted.
>
> So I prefer to use the kzalloc() here.
>
> thanks
> Huang Shijie
>
> >> + if (!this->verify_buf)
> >> + return -ENOMEM;
> >> +
> >>
> >> /* Prepare for the BBT scan. */
> >> ret = gpmi_pre_bbt_scan(this);
> >> if (ret)
> >>
> >> @@ -1531,6 +1553,8 @@ void gpmi_nfc_exit(struct gpmi_nand_data *this)
> >>
> >> {
> >>
> >> nand_release(&this->mtd);
> >> gpmi_free_dma_buffer(this);
> >>
> >> + kfree(this->verify_buf);
> >> + this->verify_buf = NULL;
> >
> > Then you won't have to care for this ... I told you at least once before.
> >
> >> }
> >>
> >> static int __devinit gpmi_nfc_init(struct gpmi_nand_data *this)
> >>
> >> @@ -1556,6 +1580,7 @@ static int __devinit gpmi_nfc_init(struct
> >> gpmi_nand_data *this) chip->read_byte = gpmi_read_byte;
> >>
> >> chip->read_buf = gpmi_read_buf;
> >> chip->write_buf = gpmi_write_buf;
> >>
> >> + chip->verify_buf = gpmi_verify_buf;
> >>
> >> chip->ecc.read_page = gpmi_ecc_read_page;
> >> chip->ecc.write_page = gpmi_ecc_write_page;
> >> chip->ecc.read_oob = gpmi_ecc_read_oob;
> >>
> >> diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.h
> >> b/drivers/mtd/nand/gpmi-nand/gpmi-nand.h index 1547a60..8ddf115 100644
> >> --- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.h
> >> +++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.h
> >> @@ -144,6 +144,7 @@ struct gpmi_nand_data {
> >>
> >> /* MTD / NAND */
> >> struct nand_chip nand;
> >> struct mtd_info mtd;
> >>
> >> + uint8_t *verify_buf;
> >>
> >> /* General-use Variables */
> >> int current_chip;
WARNING: multiple messages have this Message-ID (diff)
From: marex@denx.de (Marek Vasut)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4] mtd: gpmi: add NAND write verify support
Date: Sun, 12 Aug 2012 21:14:46 +0200 [thread overview]
Message-ID: <201208122114.46901.marex@denx.de> (raw)
In-Reply-To: <CAMiH66GopNVeKPRQn+KfwRHUoM-Lv8WitX0zAS=Vi=8QAvS-Pw@mail.gmail.com>
Dear Huang Shijie,
[...]
> >> + this->verify_buf = kzalloc(mtd->writesize, GFP_KERNEL);
> >
> > devm_
>
> emm...
> The devm_kzalloc() is the wrong choose in this case. It may makes we
> waste much more memory when the NAND page is 8K.
>
> Assume the gpmi uses a 8K page nand chip. The devm_kzalloc() will
> allocate (sizeof(struct devres) + 8K).
Don't forget the malloc header and padding around malloc()'d space. So you're
behind the 2 * PAGESIZE anyway.
> It's obvious that the size is bigger then the SLUB_MAX_SIZE. So the
> kernel gets 2 with the
> get_order(sizeof(struct devres) + 8K) which means we have to use 4
> memory page for the verify_buf.
> But in actually, we only use 8K memory. So the rest nearly 8K(
> sizeof(struct devres) is very small) memory
> is wasted.
>
> So I prefer to use the kzalloc() here.
>
> thanks
> Huang Shijie
>
> >> + if (!this->verify_buf)
> >> + return -ENOMEM;
> >> +
> >>
> >> /* Prepare for the BBT scan. */
> >> ret = gpmi_pre_bbt_scan(this);
> >> if (ret)
> >>
> >> @@ -1531,6 +1553,8 @@ void gpmi_nfc_exit(struct gpmi_nand_data *this)
> >>
> >> {
> >>
> >> nand_release(&this->mtd);
> >> gpmi_free_dma_buffer(this);
> >>
> >> + kfree(this->verify_buf);
> >> + this->verify_buf = NULL;
> >
> > Then you won't have to care for this ... I told you at least once before.
> >
> >> }
> >>
> >> static int __devinit gpmi_nfc_init(struct gpmi_nand_data *this)
> >>
> >> @@ -1556,6 +1580,7 @@ static int __devinit gpmi_nfc_init(struct
> >> gpmi_nand_data *this) chip->read_byte = gpmi_read_byte;
> >>
> >> chip->read_buf = gpmi_read_buf;
> >> chip->write_buf = gpmi_write_buf;
> >>
> >> + chip->verify_buf = gpmi_verify_buf;
> >>
> >> chip->ecc.read_page = gpmi_ecc_read_page;
> >> chip->ecc.write_page = gpmi_ecc_write_page;
> >> chip->ecc.read_oob = gpmi_ecc_read_oob;
> >>
> >> diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.h
> >> b/drivers/mtd/nand/gpmi-nand/gpmi-nand.h index 1547a60..8ddf115 100644
> >> --- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.h
> >> +++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.h
> >> @@ -144,6 +144,7 @@ struct gpmi_nand_data {
> >>
> >> /* MTD / NAND */
> >> struct nand_chip nand;
> >> struct mtd_info mtd;
> >>
> >> + uint8_t *verify_buf;
> >>
> >> /* General-use Variables */
> >> int current_chip;
next prev parent reply other threads:[~2012-08-12 19:14 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-12 2:07 [PATCH v4] mtd: gpmi: add NAND write verify support Huang Shijie
2012-08-12 2:07 ` Huang Shijie
2012-08-11 14:10 ` Marek Vasut
2012-08-11 14:10 ` Marek Vasut
2012-08-11 15:15 ` Huang Shijie
2012-08-11 15:15 ` Huang Shijie
2012-08-12 19:14 ` Marek Vasut [this message]
2012-08-12 19:14 ` Marek Vasut
2012-08-13 2:21 ` Huang Shijie
2012-08-13 2:21 ` Huang Shijie
2012-08-13 2:35 ` Huang Shijie
2012-08-13 2:35 ` Huang Shijie
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=201208122114.46901.marex@denx.de \
--to=marex@denx.de \
--cc=dedekind1@gmail.com \
--cc=dwmw2@infradead.org \
--cc=fabio.estevam@freescale.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-mtd@lists.infradead.org \
--cc=shawn.guo@linaro.org \
--cc=shijie8@gmail.com \
--cc=stable@vger.kernel.org \
/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.