Patchwork MTD: Fix MEMGETINFO and MEMGETREGIONINFO for devices >= 4GB

login
register
mail settings
Submitter Felix Radensky
Date Oct. 7, 2009, 8:26 a.m.
Message ID <1254904002-24913-1-git-send-email-felix@embedded-sol.com>
Download mbox | patch
Permalink /patch/35252/
State New
Headers show

Comments

Felix Radensky - Oct. 7, 2009, 8:26 a.m.
Currently MEMGETINFO and MEMGETREGIONINFO report invalid
information for devices >= 4GB, since relevant fields in
MTD ABI structures are 32-bit while corresponding fields
in kernel internal structures are 64-bit. Fix ABI fields
to be 64-bit as well.

Signed-off-by: Felix Radensky <felix@embedded-sol.com>
---
 include/mtd/mtd-abi.h |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
Artem Bityutskiy - Oct. 11, 2009, 12:40 p.m.
On Wed, 2009-10-07 at 10:26 +0200, Felix Radensky wrote:
> Currently MEMGETINFO and MEMGETREGIONINFO report invalid
> information for devices >= 4GB, since relevant fields in
> MTD ABI structures are 32-bit while corresponding fields
> in kernel internal structures are 64-bit. Fix ABI fields
> to be 64-bit as well.
> 
> Signed-off-by: Felix Radensky <felix@embedded-sol.com>
> ---
>  include/mtd/mtd-abi.h |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)

Nack. As it was discussed several times, you cannot change these data
structure because you will break binary compatibility.

New ioctls is the way out.

Patch

diff --git a/include/mtd/mtd-abi.h b/include/mtd/mtd-abi.h
index be51ae2..c66044d 100644
--- a/include/mtd/mtd-abi.h
+++ b/include/mtd/mtd-abi.h
@@ -64,7 +64,7 @@  struct mtd_oob_buf64 {
 struct mtd_info_user {
 	__u8 type;
 	__u32 flags;
-	__u32 size;	 // Total size of the MTD
+	__u64 size;	 // Total size of the MTD
 	__u32 erasesize;
 	__u32 writesize;
 	__u32 oobsize;   // Amount of OOB data per block (e.g. 16)
@@ -75,7 +75,7 @@  struct mtd_info_user {
 };
 
 struct region_info_user {
-	__u32 offset;		/* At which this region starts,
+	__u64 offset;		/* At which this region starts,
 					 * from the beginning of the MTD */
 	__u32 erasesize;		/* For this region */
 	__u32 numblocks;		/* Number of blocks in this region */