All of lore.kernel.org
 help / color / mirror / Atom feed
From: Shmulik Ladkani <shmulik.ladkani@gmail.com>
To: Artem Bityutskiy <dedekind1@gmail.com>,
	Andrew Victor <linux@maxim.org.za>
Cc: Shmulik Ladkani <shmulik.ladkani@gmail.com>,
	Russell King <linux@arm.linux.org.uk>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org,
	Richard Weinberger <richard@nod.at>,
	Richard Genoud <richard.genoud@gmail.com>
Subject: [PATCH 1/5] ubi: introduce ubi->bad_peb_limit
Date: Wed,  4 Jul 2012 11:06:00 +0300	[thread overview]
Message-ID: <1341389164-24409-2-git-send-email-shmulik.ladkani@gmail.com> (raw)
In-Reply-To: <1341389164-24409-1-git-send-email-shmulik.ladkani@gmail.com>

Introduce 'ubi->bad_peb_limit', which specifies an upper limit of PEBs
ubi expects to go bad.
Currently, it is initialized to a fixed percentage of total PEBs in the
ubi device (configurable via CONFIG_MTD_UBI_BEB_LIMIT).

The 'bad_peb_limit' is intended to be used for calculating the amount of
PEBs ubi needs to reserve for bad eraseblock handling.

Signed-off-by: Shmulik Ladkani <shmulik.ladkani@gmail.com>
---
 arch/arm/configs/sam9_l9260_defconfig |    1 +
 drivers/mtd/ubi/Kconfig               |   11 +++++++++++
 drivers/mtd/ubi/build.c               |   13 ++++++++++++-
 drivers/mtd/ubi/ubi.h                 |    2 ++
 4 files changed, 26 insertions(+), 1 deletions(-)

diff --git a/arch/arm/configs/sam9_l9260_defconfig b/arch/arm/configs/sam9_l9260_defconfig
index ecf2531..f6917c9 100644
--- a/arch/arm/configs/sam9_l9260_defconfig
+++ b/arch/arm/configs/sam9_l9260_defconfig
@@ -40,6 +40,7 @@ CONFIG_MTD_NAND_ATMEL=y
 CONFIG_MTD_NAND_PLATFORM=y
 CONFIG_MTD_UBI=y
 CONFIG_MTD_UBI_BEB_RESERVE=3
+CONFIG_MTD_UBI_BEB_LIMIT=3
 CONFIG_MTD_UBI_GLUEBI=y
 CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_RAM=y
diff --git a/drivers/mtd/ubi/Kconfig b/drivers/mtd/ubi/Kconfig
index 738ee8d..8df256f 100644
--- a/drivers/mtd/ubi/Kconfig
+++ b/drivers/mtd/ubi/Kconfig
@@ -42,6 +42,17 @@ config MTD_UBI_BEB_RESERVE
 	  eraseblocks (e.g. NOR flash), this value is ignored and nothing is
 	  reserved. Leave the default value if unsure.
 
+config MTD_UBI_BEB_LIMIT
+	int "Percentage of maximum expected bad eraseblocks"
+	default 2
+	range 0 25
+	help
+	  This option specifies the maximum bad eraseblocks UBI expects on the
+	  ubi device (percents of total number of flash eraseblocks).
+	  If the underlying flash does not admit of bad eraseblocks (e.g. NOR
+	  flash), this value is ignored.
+	  Leave the default value if unsure.
+
 config MTD_UBI_GLUEBI
 	tristate "MTD devices emulation driver (gluebi)"
 	help
diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
index 2c5ed5c..62cc6ce 100644
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
@@ -607,8 +607,19 @@ static int io_init(struct ubi_device *ubi)
 	ubi->peb_count  = mtd_div_by_eb(ubi->mtd->size, ubi->mtd);
 	ubi->flash_size = ubi->mtd->size;
 
-	if (mtd_can_have_bb(ubi->mtd))
+	if (mtd_can_have_bb(ubi->mtd)) {
 		ubi->bad_allowed = 1;
+		if (CONFIG_MTD_UBI_BEB_LIMIT > 0) {
+			int percent = CONFIG_MTD_UBI_BEB_LIMIT;
+			int beb_limit;
+
+			beb_limit = mult_frac(ubi->peb_count, percent, 100);
+			/* round it up */
+			if (mult_frac(beb_limit, 100, percent) < ubi->peb_count)
+				beb_limit++;
+			ubi->bad_peb_limit = beb_limit;
+		}
+	}
 
 	if (ubi->mtd->type == MTD_NORFLASH) {
 		ubi_assert(ubi->mtd->writesize == 1);
diff --git a/drivers/mtd/ubi/ubi.h b/drivers/mtd/ubi/ubi.h
index a1a81c9..b5217ef 100644
--- a/drivers/mtd/ubi/ubi.h
+++ b/drivers/mtd/ubi/ubi.h
@@ -363,6 +363,7 @@ struct ubi_wl_entry;
  * @flash_size: underlying MTD device size (in bytes)
  * @peb_count: count of physical eraseblocks on the MTD device
  * @peb_size: physical eraseblock size
+ * @bad_peb_limit: top limit of expected bad physical eraseblocks
  * @bad_peb_count: count of bad physical eraseblocks
  * @good_peb_count: count of good physical eraseblocks
  * @corr_peb_count: count of corrupted physical eraseblocks (preserved and not
@@ -410,6 +411,7 @@ struct ubi_device {
 	int avail_pebs;
 	int beb_rsvd_pebs;
 	int beb_rsvd_level;
+	int bad_peb_limit;
 
 	int autoresize_vol_id;
 	int vtbl_slots;
-- 
1.7.9


WARNING: multiple messages have this Message-ID (diff)
From: Shmulik Ladkani <shmulik.ladkani@gmail.com>
To: Artem Bityutskiy <dedekind1@gmail.com>,
	Andrew Victor <linux@maxim.org.za>
Cc: Russell King <linux@arm.linux.org.uk>,
	Richard Genoud <richard.genoud@gmail.com>,
	Richard Weinberger <richard@nod.at>,
	linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org,
	Shmulik Ladkani <shmulik.ladkani@gmail.com>,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/5] ubi: introduce ubi->bad_peb_limit
Date: Wed,  4 Jul 2012 11:06:00 +0300	[thread overview]
Message-ID: <1341389164-24409-2-git-send-email-shmulik.ladkani@gmail.com> (raw)
In-Reply-To: <1341389164-24409-1-git-send-email-shmulik.ladkani@gmail.com>

Introduce 'ubi->bad_peb_limit', which specifies an upper limit of PEBs
ubi expects to go bad.
Currently, it is initialized to a fixed percentage of total PEBs in the
ubi device (configurable via CONFIG_MTD_UBI_BEB_LIMIT).

The 'bad_peb_limit' is intended to be used for calculating the amount of
PEBs ubi needs to reserve for bad eraseblock handling.

Signed-off-by: Shmulik Ladkani <shmulik.ladkani@gmail.com>
---
 arch/arm/configs/sam9_l9260_defconfig |    1 +
 drivers/mtd/ubi/Kconfig               |   11 +++++++++++
 drivers/mtd/ubi/build.c               |   13 ++++++++++++-
 drivers/mtd/ubi/ubi.h                 |    2 ++
 4 files changed, 26 insertions(+), 1 deletions(-)

diff --git a/arch/arm/configs/sam9_l9260_defconfig b/arch/arm/configs/sam9_l9260_defconfig
index ecf2531..f6917c9 100644
--- a/arch/arm/configs/sam9_l9260_defconfig
+++ b/arch/arm/configs/sam9_l9260_defconfig
@@ -40,6 +40,7 @@ CONFIG_MTD_NAND_ATMEL=y
 CONFIG_MTD_NAND_PLATFORM=y
 CONFIG_MTD_UBI=y
 CONFIG_MTD_UBI_BEB_RESERVE=3
+CONFIG_MTD_UBI_BEB_LIMIT=3
 CONFIG_MTD_UBI_GLUEBI=y
 CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_RAM=y
diff --git a/drivers/mtd/ubi/Kconfig b/drivers/mtd/ubi/Kconfig
index 738ee8d..8df256f 100644
--- a/drivers/mtd/ubi/Kconfig
+++ b/drivers/mtd/ubi/Kconfig
@@ -42,6 +42,17 @@ config MTD_UBI_BEB_RESERVE
 	  eraseblocks (e.g. NOR flash), this value is ignored and nothing is
 	  reserved. Leave the default value if unsure.
 
+config MTD_UBI_BEB_LIMIT
+	int "Percentage of maximum expected bad eraseblocks"
+	default 2
+	range 0 25
+	help
+	  This option specifies the maximum bad eraseblocks UBI expects on the
+	  ubi device (percents of total number of flash eraseblocks).
+	  If the underlying flash does not admit of bad eraseblocks (e.g. NOR
+	  flash), this value is ignored.
+	  Leave the default value if unsure.
+
 config MTD_UBI_GLUEBI
 	tristate "MTD devices emulation driver (gluebi)"
 	help
diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
index 2c5ed5c..62cc6ce 100644
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
@@ -607,8 +607,19 @@ static int io_init(struct ubi_device *ubi)
 	ubi->peb_count  = mtd_div_by_eb(ubi->mtd->size, ubi->mtd);
 	ubi->flash_size = ubi->mtd->size;
 
-	if (mtd_can_have_bb(ubi->mtd))
+	if (mtd_can_have_bb(ubi->mtd)) {
 		ubi->bad_allowed = 1;
+		if (CONFIG_MTD_UBI_BEB_LIMIT > 0) {
+			int percent = CONFIG_MTD_UBI_BEB_LIMIT;
+			int beb_limit;
+
+			beb_limit = mult_frac(ubi->peb_count, percent, 100);
+			/* round it up */
+			if (mult_frac(beb_limit, 100, percent) < ubi->peb_count)
+				beb_limit++;
+			ubi->bad_peb_limit = beb_limit;
+		}
+	}
 
 	if (ubi->mtd->type == MTD_NORFLASH) {
 		ubi_assert(ubi->mtd->writesize == 1);
diff --git a/drivers/mtd/ubi/ubi.h b/drivers/mtd/ubi/ubi.h
index a1a81c9..b5217ef 100644
--- a/drivers/mtd/ubi/ubi.h
+++ b/drivers/mtd/ubi/ubi.h
@@ -363,6 +363,7 @@ struct ubi_wl_entry;
  * @flash_size: underlying MTD device size (in bytes)
  * @peb_count: count of physical eraseblocks on the MTD device
  * @peb_size: physical eraseblock size
+ * @bad_peb_limit: top limit of expected bad physical eraseblocks
  * @bad_peb_count: count of bad physical eraseblocks
  * @good_peb_count: count of good physical eraseblocks
  * @corr_peb_count: count of corrupted physical eraseblocks (preserved and not
@@ -410,6 +411,7 @@ struct ubi_device {
 	int avail_pebs;
 	int beb_rsvd_pebs;
 	int beb_rsvd_level;
+	int bad_peb_limit;
 
 	int autoresize_vol_id;
 	int vtbl_slots;
-- 
1.7.9

WARNING: multiple messages have this Message-ID (diff)
From: shmulik.ladkani@gmail.com (Shmulik Ladkani)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/5] ubi: introduce ubi->bad_peb_limit
Date: Wed,  4 Jul 2012 11:06:00 +0300	[thread overview]
Message-ID: <1341389164-24409-2-git-send-email-shmulik.ladkani@gmail.com> (raw)
In-Reply-To: <1341389164-24409-1-git-send-email-shmulik.ladkani@gmail.com>

Introduce 'ubi->bad_peb_limit', which specifies an upper limit of PEBs
ubi expects to go bad.
Currently, it is initialized to a fixed percentage of total PEBs in the
ubi device (configurable via CONFIG_MTD_UBI_BEB_LIMIT).

The 'bad_peb_limit' is intended to be used for calculating the amount of
PEBs ubi needs to reserve for bad eraseblock handling.

Signed-off-by: Shmulik Ladkani <shmulik.ladkani@gmail.com>
---
 arch/arm/configs/sam9_l9260_defconfig |    1 +
 drivers/mtd/ubi/Kconfig               |   11 +++++++++++
 drivers/mtd/ubi/build.c               |   13 ++++++++++++-
 drivers/mtd/ubi/ubi.h                 |    2 ++
 4 files changed, 26 insertions(+), 1 deletions(-)

diff --git a/arch/arm/configs/sam9_l9260_defconfig b/arch/arm/configs/sam9_l9260_defconfig
index ecf2531..f6917c9 100644
--- a/arch/arm/configs/sam9_l9260_defconfig
+++ b/arch/arm/configs/sam9_l9260_defconfig
@@ -40,6 +40,7 @@ CONFIG_MTD_NAND_ATMEL=y
 CONFIG_MTD_NAND_PLATFORM=y
 CONFIG_MTD_UBI=y
 CONFIG_MTD_UBI_BEB_RESERVE=3
+CONFIG_MTD_UBI_BEB_LIMIT=3
 CONFIG_MTD_UBI_GLUEBI=y
 CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_RAM=y
diff --git a/drivers/mtd/ubi/Kconfig b/drivers/mtd/ubi/Kconfig
index 738ee8d..8df256f 100644
--- a/drivers/mtd/ubi/Kconfig
+++ b/drivers/mtd/ubi/Kconfig
@@ -42,6 +42,17 @@ config MTD_UBI_BEB_RESERVE
 	  eraseblocks (e.g. NOR flash), this value is ignored and nothing is
 	  reserved. Leave the default value if unsure.
 
+config MTD_UBI_BEB_LIMIT
+	int "Percentage of maximum expected bad eraseblocks"
+	default 2
+	range 0 25
+	help
+	  This option specifies the maximum bad eraseblocks UBI expects on the
+	  ubi device (percents of total number of flash eraseblocks).
+	  If the underlying flash does not admit of bad eraseblocks (e.g. NOR
+	  flash), this value is ignored.
+	  Leave the default value if unsure.
+
 config MTD_UBI_GLUEBI
 	tristate "MTD devices emulation driver (gluebi)"
 	help
diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
index 2c5ed5c..62cc6ce 100644
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
@@ -607,8 +607,19 @@ static int io_init(struct ubi_device *ubi)
 	ubi->peb_count  = mtd_div_by_eb(ubi->mtd->size, ubi->mtd);
 	ubi->flash_size = ubi->mtd->size;
 
-	if (mtd_can_have_bb(ubi->mtd))
+	if (mtd_can_have_bb(ubi->mtd)) {
 		ubi->bad_allowed = 1;
+		if (CONFIG_MTD_UBI_BEB_LIMIT > 0) {
+			int percent = CONFIG_MTD_UBI_BEB_LIMIT;
+			int beb_limit;
+
+			beb_limit = mult_frac(ubi->peb_count, percent, 100);
+			/* round it up */
+			if (mult_frac(beb_limit, 100, percent) < ubi->peb_count)
+				beb_limit++;
+			ubi->bad_peb_limit = beb_limit;
+		}
+	}
 
 	if (ubi->mtd->type == MTD_NORFLASH) {
 		ubi_assert(ubi->mtd->writesize == 1);
diff --git a/drivers/mtd/ubi/ubi.h b/drivers/mtd/ubi/ubi.h
index a1a81c9..b5217ef 100644
--- a/drivers/mtd/ubi/ubi.h
+++ b/drivers/mtd/ubi/ubi.h
@@ -363,6 +363,7 @@ struct ubi_wl_entry;
  * @flash_size: underlying MTD device size (in bytes)
  * @peb_count: count of physical eraseblocks on the MTD device
  * @peb_size: physical eraseblock size
+ * @bad_peb_limit: top limit of expected bad physical eraseblocks
  * @bad_peb_count: count of bad physical eraseblocks
  * @good_peb_count: count of good physical eraseblocks
  * @corr_peb_count: count of corrupted physical eraseblocks (preserved and not
@@ -410,6 +411,7 @@ struct ubi_device {
 	int avail_pebs;
 	int beb_rsvd_pebs;
 	int beb_rsvd_level;
+	int bad_peb_limit;
 
 	int autoresize_vol_id;
 	int vtbl_slots;
-- 
1.7.9

  reply	other threads:[~2012-07-04  8:07 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-04  8:05 [PATCH 0/5] ubi: Fix bad PEBs reserve caclulation Shmulik Ladkani
2012-07-04  8:05 ` Shmulik Ladkani
2012-07-04  8:06 ` Shmulik Ladkani [this message]
2012-07-04  8:06   ` [PATCH 1/5] ubi: introduce ubi->bad_peb_limit Shmulik Ladkani
2012-07-04  8:06   ` Shmulik Ladkani
2012-07-18  7:09   ` Artem Bityutskiy
2012-07-18  7:09     ` Artem Bityutskiy
2012-07-18  7:09     ` Artem Bityutskiy
2012-07-18 10:40   ` Artem Bityutskiy
2012-07-18 10:40     ` Artem Bityutskiy
2012-07-18 10:40     ` Artem Bityutskiy
2012-07-19  6:16     ` Shmulik Ladkani
2012-07-19  6:16       ` Shmulik Ladkani
2012-07-19  6:16       ` Shmulik Ladkani
2012-07-30 13:00       ` Artem Bityutskiy
2012-07-30 13:00         ` Artem Bityutskiy
2012-07-30 13:00         ` Artem Bityutskiy
2012-07-04  8:06 ` [PATCH 2/5] ubi: Limit amount of reserved eraseblocks for bad PEB handling Shmulik Ladkani
2012-07-04  8:06   ` Shmulik Ladkani
2012-07-09 10:15   ` Richard Genoud
2012-07-09 10:15     ` Richard Genoud
2012-07-09 11:02     ` Shmulik Ladkani
2012-07-09 11:02       ` Shmulik Ladkani
2012-07-18 10:28   ` Artem Bityutskiy
2012-07-18 10:28     ` Artem Bityutskiy
2012-07-18 11:01     ` Artem Bityutskiy
2012-07-18 11:01       ` Artem Bityutskiy
2012-07-18 19:55     ` Shmulik Ladkani
2012-07-18 19:55       ` Shmulik Ladkani
2012-07-19  3:35       ` Artem Bityutskiy
2012-07-19  3:35         ` Artem Bityutskiy
2012-07-18 11:40   ` Artem Bityutskiy
2012-07-18 11:40     ` Artem Bityutskiy
2012-07-04  8:06 ` [PATCH 3/5] ubi: kill CONFIG_MTD_UBI_BEB_RESERVE Shmulik Ladkani
2012-07-04  8:06   ` Shmulik Ladkani
2012-07-04  8:06   ` Shmulik Ladkani
2012-07-04  8:06 ` [PATCH 4/5] ubi: trivial: fix comment of ubi_calculate_reserved() Shmulik Ladkani
2012-07-04  8:06   ` Shmulik Ladkani
2012-07-18 10:38   ` Artem Bityutskiy
2012-07-18 10:38     ` Artem Bityutskiy
2012-07-04  8:06 ` [PATCH 5/5] ubi: harmonize the update of ubi->beb_rsvd_pebs Shmulik Ladkani
2012-07-04  8:06   ` Shmulik Ladkani
2012-07-18 11:32   ` Artem Bityutskiy
2012-07-18 11:32     ` Artem Bityutskiy
2012-07-04  8:35 ` [PATCH 0/5] ubi: Fix bad PEBs reserve caclulation Richard Weinberger
2012-07-04  8:35   ` Richard Weinberger
2012-07-04 11:33   ` Shmulik Ladkani
2012-07-04 11:33     ` Shmulik Ladkani
2012-07-06 15:27     ` Richard Genoud
2012-07-06 15:27       ` Richard Genoud
2012-07-07  6:14       ` Shmulik Ladkani
2012-07-07  6:14         ` Shmulik Ladkani
2012-07-07  8:32         ` Richard Genoud
2012-07-07  8:32           ` Richard Genoud
2012-07-09  6:58         ` Richard Genoud
2012-07-09  6:58           ` Richard Genoud
2012-07-16 15:33 ` Artem Bityutskiy
2012-07-16 15:33   ` Artem Bityutskiy
2012-07-17  7:23   ` Shmulik Ladkani
2012-07-17  7:23     ` Shmulik Ladkani
2012-07-18  6:54     ` Artem Bityutskiy
2012-07-18  6:54       ` Artem Bityutskiy
2012-07-30 13:56 ` Artem Bityutskiy
2012-07-30 13:56   ` Artem Bityutskiy
2012-07-31  8:19   ` Shmulik Ladkani
2012-07-31  8:19     ` Shmulik Ladkani

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=1341389164-24409-2-git-send-email-shmulik.ladkani@gmail.com \
    --to=shmulik.ladkani@gmail.com \
    --cc=dedekind1@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=linux@arm.linux.org.uk \
    --cc=linux@maxim.org.za \
    --cc=richard.genoud@gmail.com \
    --cc=richard@nod.at \
    /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.