Skip to contentSkip to conversation

ubi: enable error reporting in initialization

PATCH New Andrew Ruder 2 participants 3 messages Nov 5, 2014 – Dec 18, 2014

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 ubi: enable error reporting in initialization

The UBI layer will disable much of its error reporting when it is compiled into the linux kernel to avoid stopping boot. We want this error reporting in U-Boot since we don't initialize the UBI layer until it is used and want the error reporting.

We force this by telling the UBI layer we are building as a module.

Cc Wolfgang Denk <[email protected]>
Cc Heiko Schocher <[email protected]>
Cc Kyungmin Park <[email protected]>
---
 include/ubi_uboot.h | 8 ++++++++
 1 file changed, 8 insertions(+)
include/ubi_uboot.h +8 -0
index 1fd15f4..324fe72 100644
@@ -51,6 +51,14 @@
 
 #undef CONFIG_MTD_UBI_BLOCK
 
+/* ubi_init() disables returning error codes when built into the Linux
+ * kernel so that it doesn't hang the Linux kernel boot process.  Since
+ * the U-Boot driver code depends on getting valid error codes from this
+ * function we just tell the UBI layer that we are building as a module
+ * (which only enables the additional error reporting).
+ */
+#define CONFIG_MTD_UBI_MODULE
+
 #if !defined(CONFIG_MTD_UBI_BEB_LIMIT)
 #define CONFIG_MTD_UBI_BEB_LIMIT	20
 #endif
Signature · 1 line
2.1.1
#1 lore raw

PATCH v2 1/1 ubi: enable error reporting in initialization

Hi Andrew,

Quoted 25 lines · Andrew Ruder

The UBI layer will disable much of its error reporting when it is compiled into the linux kernel to avoid stopping boot. We want this error reporting in U-Boot since we don't initialize the UBI layer until it is used and want the error reporting.

We force this by telling the UBI layer we are building as a module.

Cc Wolfgang Denk <[email protected]>
Cc Heiko Schocher <[email protected]>
Cc Kyungmin Park <[email protected]>
---
 include/ubi_uboot.h | 8 ++++++++
 1 file changed, 8 insertions(+)
include/ubi_uboot.h +1 -0
index 1fd15f4..324fe72 100644
@@ -51,6 +51,14 @@
 
 #undef CONFIG_MTD_UBI_BLOCK
 
+/* ubi_init() disables returning error codes when built into the Linux

include/ubi_uboot.h line 64

Quoted 10 lines
include/ubi_uboot.h +7 -0
+ * kernel so that it doesn't hang the Linux kernel boot process.  Since
+ * the U-Boot driver code depends on getting valid error codes from this
+ * function we just tell the UBI layer that we are building as a module
+ * (which only enables the additional error reporting).
+ */
+#define CONFIG_MTD_UBI_MODULE
+
 #if !defined(CONFIG_MTD_UBI_BEB_LIMIT)
 #define CONFIG_MTD_UBI_BEB_LIMIT	20
 #endif

I applied this patch but apparently I'm suffering a memory leak in a certain condition. I wonder if you can reproduce it:

1. Assume you have an empty partition called "MyPart".
2. Write it with some dummy data:

	=> mw.l $loadaddr deadbeed 1000
	=> nand write $loadaddr MyPart 1000

3. Set it as the UBI part:
=> ubi part MyPart
This (which returned 0 before, despite failing during the attach procedure now should return an error).
4. Run the command again several times:
=> ubi part MyPart
=> ubi part MyPart

In my case, after calling this three times, the target hangs. I think the exit path in ubi_init() does not properly free every allocated memory. I was not able to find the root cause, though.

Regards
--
Hector Palacios

#2 lore raw

PATCH v2 1/1 ubi: enable error reporting in initialization

In reply to Andrew Ruder

Hi Andrew,

Quoted 25 lines · Andrew Ruder

The UBI layer will disable much of its error reporting when it is compiled into the linux kernel to avoid stopping boot. We want this error reporting in U-Boot since we don't initialize the UBI layer until it is used and want the error reporting.

We force this by telling the UBI layer we are building as a module.

Cc Wolfgang Denk <[email protected]>
Cc Heiko Schocher <[email protected]>
Cc Kyungmin Park <[email protected]>
---
 include/ubi_uboot.h | 8 ++++++++
 1 file changed, 8 insertions(+)
include/ubi_uboot.h +1 -0
index 1fd15f4..324fe72 100644
@@ -51,6 +51,14 @@
 
 #undef CONFIG_MTD_UBI_BLOCK
 
+/* ubi_init() disables returning error codes when built into the Linux

include/ubi_uboot.h line 64

Quoted 10 lines
include/ubi_uboot.h +7 -0
+ * kernel so that it doesn't hang the Linux kernel boot process.  Since
+ * the U-Boot driver code depends on getting valid error codes from this
+ * function we just tell the UBI layer that we are building as a module
+ * (which only enables the additional error reporting).
+ */
+#define CONFIG_MTD_UBI_MODULE
+
 #if !defined(CONFIG_MTD_UBI_BEB_LIMIT)
 #define CONFIG_MTD_UBI_BEB_LIMIT	20
 #endif

I applied this patch but apparently I'm suffering a memory leak in a certain condition. I wonder if you can reproduce it:

1. Assume you have an empty partition called "MyPart".
2. Write it with some dummy data:

	=> mw.l $loadaddr deadbeed 1000
	=> nand write $loadaddr MyPart 1000

3. Set it as the UBI part:
=> ubi part MyPart
This (which returned 0 before, despite failing during the attach procedure now should return an error).
4. Run the command again several times:
=> ubi part MyPart
=> ubi part MyPart

In my case, after calling this three times, the target hangs. I think the exit path in ubi_init() does not properly free every allocated memory. I was not able to find the root cause, though.

Regards
--
Hector Palacios