All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] Fix wrap around bug in MBR sector counts
@ 2015-11-25 17:08 Stefan Monnier
  2015-11-25 17:08 ` [U-Boot] [PATCH] Don't wrap to negative after 2G sectors Stefan Monnier
  0 siblings, 1 reply; 11+ messages in thread
From: Stefan Monnier @ 2015-11-25 17:08 UTC (permalink / raw)
  To: u-boot

I just bumped into a problem where U-Boot refused to boot from my disk's
second partition because the sector number is "negative".

More specifically, my disk drive is 2TB, which means that the number of
512B blocks fits into an unsigned 32bit int but not into a signed 32bit
int. U-boot's "scsi part" displays the size (in blocks) correctly, but
the size of the first partition (which is around 1.8TB) is printed as
a negative number, and so is the start sector of the second partition.

This was tested on a BananaPi using v2015-07.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH] Don't wrap to negative after 2G sectors
  2015-11-25 17:08 [U-Boot] Fix wrap around bug in MBR sector counts Stefan Monnier
@ 2015-11-25 17:08 ` Stefan Monnier
  2016-01-12 15:29   ` Stefan Monnier
  0 siblings, 1 reply; 11+ messages in thread
From: Stefan Monnier @ 2015-11-25 17:08 UTC (permalink / raw)
  To: u-boot

Signed-off-by: Stefan Monnier <monnier@iro.umontreal.ca>
---
 disk/part_dos.c | 29 +++++++++++++++++------------
 include/ide.h   |  8 ++++----
 2 files changed, 21 insertions(+), 16 deletions(-)

diff --git a/disk/part_dos.c b/disk/part_dos.c
index 89263d3..6280660 100644
--- a/disk/part_dos.c
+++ b/disk/part_dos.c
@@ -26,7 +26,7 @@
 
 /* Convert char[4] in little endian format to the host format integer
  */
-static inline int le32_to_int(unsigned char *le32)
+static inline unsigned int le32_to_int(unsigned char *le32)
 {
     return ((le32[3] << 24) +
 	    (le32[2] << 16) +
@@ -47,13 +47,14 @@ static inline int is_bootable(dos_partition_t *p)
 	return p->boot_ind == 0x80;
 }
 
-static void print_one_part(dos_partition_t *p, int ext_part_sector,
+static void print_one_part(dos_partition_t *p, lbaint_t ext_part_sector,
 			   int part_num, unsigned int disksig)
 {
-	int lba_start = ext_part_sector + le32_to_int (p->start4);
-	int lba_size  = le32_to_int (p->size4);
+	lbaint_t lba_start = ext_part_sector + le32_to_int (p->start4);
+	lbaint_t lba_size  = le32_to_int (p->size4);
 
-	printf("%3d\t%-10d\t%-10d\t%08x-%02x\t%02x%s%s\n",
+	printf("%3d\t%-10" LBAFlength "u\t%-10" LBAFlength
+		"u\t%08x-%02x\t%02x%s%s\n",
 		part_num, lba_start, lba_size, disksig, part_num, p->sys_ind,
 		(is_extended(p->sys_ind) ? " Extd" : ""),
 		(is_bootable(p) ? " Boot" : ""));
@@ -102,7 +103,8 @@ int test_part_dos (block_dev_desc_t *dev_desc)
 /*  Print a partition that is relative to its Extended partition table
  */
 static void print_partition_extended(block_dev_desc_t *dev_desc,
-				     int ext_part_sector, int relative,
+				     lbaint_t ext_part_sector,
+				     lbaint_t relative,
 				     int part_num, unsigned int disksig)
 {
 	ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
@@ -110,7 +112,7 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
 	int i;
 
 	if (dev_desc->block_read(dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) {
-		printf ("** Can't read partition table on %d:%d **\n",
+		printf ("** Can't read partition table on %d:" LBAFU " **\n",
 			dev_desc->dev, ext_part_sector);
 		return;
 	}
@@ -149,7 +151,8 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
 	pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET);
 	for (i = 0; i < 4; i++, pt++) {
 		if (is_extended (pt->sys_ind)) {
-			int lba_start = le32_to_int (pt->start4) + relative;
+			lbaint_t lba_start
+				= le32_to_int (pt->start4) + relative;
 
 			print_partition_extended(dev_desc, lba_start,
 				ext_part_sector == 0  ? lba_start : relative,
@@ -163,8 +166,9 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
 
 /*  Print a partition that is relative to its Extended partition table
  */
-static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part_sector,
-				 int relative, int part_num,
+static int get_partition_info_extended (block_dev_desc_t *dev_desc,
+				 lbaint_t ext_part_sector,
+				 lbaint_t relative, int part_num,
 				 int which_part, disk_partition_t *info,
 				 unsigned int disksig)
 {
@@ -174,7 +178,7 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
 	int dos_type;
 
 	if (dev_desc->block_read (dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) {
-		printf ("** Can't read partition table on %d:%d **\n",
+		printf ("** Can't read partition table on %d:" LBAFU " **\n",
 			dev_desc->dev, ext_part_sector);
 		return -1;
 	}
@@ -250,7 +254,8 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
 	pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET);
 	for (i = 0; i < 4; i++, pt++) {
 		if (is_extended (pt->sys_ind)) {
-			int lba_start = le32_to_int (pt->start4) + relative;
+			lbaint_t lba_start
+				= le32_to_int (pt->start4) + relative;
 
 			return get_partition_info_extended (dev_desc, lba_start,
 				 ext_part_sector == 0 ? lba_start : relative,
diff --git a/include/ide.h b/include/ide.h
index d5e05e9..f9b43cb 100644
--- a/include/ide.h
+++ b/include/ide.h
@@ -28,13 +28,13 @@ void ide_led(uchar led, uchar status);
 
 #ifdef CONFIG_SYS_64BIT_LBA
 typedef uint64_t lbaint_t;
-#define LBAF "%llx"
-#define LBAFU "%llu"
+#define LBAFlength "ll"
 #else
 typedef ulong lbaint_t;
-#define LBAF "%lx"
-#define LBAFU "%lu"
+#define LBAFlength "l"
 #endif
+#define LBAF "%" LBAFlength "x"
+#define LBAFU "%" LBAFlength "u"
 
 /*
  * Function Prototypes
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH] Don't wrap to negative after 2G sectors
  2015-11-25 17:08 ` [U-Boot] [PATCH] Don't wrap to negative after 2G sectors Stefan Monnier
@ 2016-01-12 15:29   ` Stefan Monnier
  0 siblings, 0 replies; 11+ messages in thread
From: Stefan Monnier @ 2016-01-12 15:29 UTC (permalink / raw)
  To: u-boot

Ping yet again!?


        Stefan

>>>>> "Stefan" == Stefan Monnier <monnier@iro.umontreal.ca> writes:

> Signed-off-by: Stefan Monnier <monnier@iro.umontreal.ca>
> ---
>  disk/part_dos.c | 29 +++++++++++++++++------------
>  include/ide.h   |  8 ++++----
>  2 files changed, 21 insertions(+), 16 deletions(-)

> diff --git a/disk/part_dos.c b/disk/part_dos.c
> index 89263d3..6280660 100644
> --- a/disk/part_dos.c
> +++ b/disk/part_dos.c
> @@ -26,7 +26,7 @@
 
>  /* Convert char[4] in little endian format to the host format integer
>   */
> -static inline int le32_to_int(unsigned char *le32)
> +static inline unsigned int le32_to_int(unsigned char *le32)
>  {
>      return ((le32[3] << 24) +
>  	    (le32[2] << 16) +
> @@ -47,13 +47,14 @@ static inline int is_bootable(dos_partition_t *p)
>  	return p->boot_ind == 0x80;
>  }
 
> -static void print_one_part(dos_partition_t *p, int ext_part_sector,
> +static void print_one_part(dos_partition_t *p, lbaint_t ext_part_sector,
>  			   int part_num, unsigned int disksig)
>  {
> -	int lba_start = ext_part_sector + le32_to_int (p->start4);
> -	int lba_size  = le32_to_int (p->size4);
> +	lbaint_t lba_start = ext_part_sector + le32_to_int (p->start4);
> +	lbaint_t lba_size  = le32_to_int (p->size4);
 
> -	printf("%3d\t%-10d\t%-10d\t%08x-%02x\t%02x%s%s\n",
> +	printf("%3d\t%-10" LBAFlength "u\t%-10" LBAFlength
> +		"u\t%08x-%02x\t%02x%s%s\n",
>  		part_num, lba_start, lba_size, disksig, part_num, p->sys_ind,
>  		(is_extended(p->sys_ind) ? " Extd" : ""),
>  		(is_bootable(p) ? " Boot" : ""));
> @@ -102,7 +103,8 @@ int test_part_dos (block_dev_desc_t *dev_desc)
>  /*  Print a partition that is relative to its Extended partition table
>   */
>  static void print_partition_extended(block_dev_desc_t *dev_desc,
> -				     int ext_part_sector, int relative,
> +				     lbaint_t ext_part_sector,
> +				     lbaint_t relative,
>  				     int part_num, unsigned int disksig)
>  {
>  	ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
> @@ -110,7 +112,7 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
>  	int i;
 
>  	if (dev_desc->block_read(dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) {
> -		printf ("** Can't read partition table on %d:%d **\n",
> +		printf ("** Can't read partition table on %d:" LBAFU " **\n",
dev_desc-> dev, ext_part_sector);
>  		return;
>  	}
> @@ -149,7 +151,8 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
>  	pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET);
>  	for (i = 0; i < 4; i++, pt++) {
>  		if (is_extended (pt->sys_ind)) {
> -			int lba_start = le32_to_int (pt->start4) + relative;
> +			lbaint_t lba_start
> +				= le32_to_int (pt->start4) + relative;
 
>  			print_partition_extended(dev_desc, lba_start,
>  				ext_part_sector == 0  ? lba_start : relative,
> @@ -163,8 +166,9 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
 
>  /*  Print a partition that is relative to its Extended partition table
>   */
> -static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part_sector,
> -				 int relative, int part_num,
> +static int get_partition_info_extended (block_dev_desc_t *dev_desc,
> +				 lbaint_t ext_part_sector,
> +				 lbaint_t relative, int part_num,
>  				 int which_part, disk_partition_t *info,
>  				 unsigned int disksig)
>  {
> @@ -174,7 +178,7 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
>  	int dos_type;
 
>  	if (dev_desc->block_read (dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) {
> -		printf ("** Can't read partition table on %d:%d **\n",
> +		printf ("** Can't read partition table on %d:" LBAFU " **\n",
dev_desc-> dev, ext_part_sector);
>  		return -1;
>  	}
> @@ -250,7 +254,8 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
>  	pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET);
>  	for (i = 0; i < 4; i++, pt++) {
>  		if (is_extended (pt->sys_ind)) {
> -			int lba_start = le32_to_int (pt->start4) + relative;
> +			lbaint_t lba_start
> +				= le32_to_int (pt->start4) + relative;
 
>  			return get_partition_info_extended (dev_desc, lba_start,
>  				 ext_part_sector == 0 ? lba_start : relative,
> diff --git a/include/ide.h b/include/ide.h
> index d5e05e9..f9b43cb 100644
> --- a/include/ide.h
> +++ b/include/ide.h
> @@ -28,13 +28,13 @@ void ide_led(uchar led, uchar status);
 
>  #ifdef CONFIG_SYS_64BIT_LBA
>  typedef uint64_t lbaint_t;
> -#define LBAF "%llx"
> -#define LBAFU "%llu"
> +#define LBAFlength "ll"
>  #else
>  typedef ulong lbaint_t;
> -#define LBAF "%lx"
> -#define LBAFU "%lu"
> +#define LBAFlength "l"
>  #endif
> +#define LBAF "%" LBAFlength "x"
> +#define LBAFU "%" LBAFlength "u"
 
>  /*
>   * Function Prototypes
> -- 
> 2.1.4

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH] Don't wrap to negative after 2G sectors
  2015-08-25 19:24 ` [U-Boot] [PATCH] Don't wrap to negative after 2G sectors Stefan Monnier
                     ` (3 preceding siblings ...)
  2016-01-13 15:54   ` Tom Rini
@ 2016-01-13 21:55   ` Tom Rini
  4 siblings, 0 replies; 11+ messages in thread
From: Tom Rini @ 2016-01-13 21:55 UTC (permalink / raw)
  To: u-boot

On Tue, Aug 25, 2015 at 03:24:13PM -0400, Stefan Monnier wrote:

> 
> Signed-off-by: Stefan Monnier <monnier@iro.umontreal.ca>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160113/49663718/attachment.sig>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH] Don't wrap to negative after 2G sectors
  2016-01-13 15:54   ` Tom Rini
@ 2016-01-13 19:22     ` Stefan Monnier
  0 siblings, 0 replies; 11+ messages in thread
From: Stefan Monnier @ 2016-01-13 19:22 UTC (permalink / raw)
  To: u-boot

>> Signed-off-by: Stefan Monnier <monnier@iro.umontreal.ca>
> Sorry for the delay:
> Reviewed-by: Tom Rini <trini@konsulko.com>

Great, thank you!


        Stefan

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH] Don't wrap to negative after 2G sectors
  2015-08-25 19:24 ` [U-Boot] [PATCH] Don't wrap to negative after 2G sectors Stefan Monnier
                     ` (2 preceding siblings ...)
  2015-10-03 20:58   ` Stefan Monnier
@ 2016-01-13 15:54   ` Tom Rini
  2016-01-13 19:22     ` Stefan Monnier
  2016-01-13 21:55   ` Tom Rini
  4 siblings, 1 reply; 11+ messages in thread
From: Tom Rini @ 2016-01-13 15:54 UTC (permalink / raw)
  To: u-boot

On Tue, Aug 25, 2015 at 03:24:13PM -0400, Stefan Monnier wrote:

> 
> Signed-off-by: Stefan Monnier <monnier@iro.umontreal.ca>

Sorry for the delay:
Reviewed-by: Tom Rini <trini@konsulko.com>

And I'll pop in a short commit message.  I also need to test this with
one of the toolchains that errors out when we try and mix hard and soft
float stuff (I don't see any dangerous math in the patch context but
just to be safe).  Thanks! 

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160113/146f3434/attachment.sig>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH] Don't wrap to negative after 2G sectors
  2015-10-03 20:58   ` Stefan Monnier
@ 2015-10-03 22:03     ` Fabio Estevam
  0 siblings, 0 replies; 11+ messages in thread
From: Fabio Estevam @ 2015-10-03 22:03 UTC (permalink / raw)
  To: u-boot

On Sat, Oct 3, 2015 at 5:58 PM, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
> I haven't received any answer from anyone about my patch.
> What am I doing wrong?

I would suggest you to resend it and put Tom Rini on Cc.

Also, a commit log is always useful.

Regards,

Fabio Estevam

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH] Don't wrap to negative after 2G sectors
  2015-08-25 19:24 ` [U-Boot] [PATCH] Don't wrap to negative after 2G sectors Stefan Monnier
  2015-09-03 14:17   ` Stefan Monnier
  2015-09-09  0:05   ` Stefan Monnier
@ 2015-10-03 20:58   ` Stefan Monnier
  2015-10-03 22:03     ` Fabio Estevam
  2016-01-13 15:54   ` Tom Rini
  2016-01-13 21:55   ` Tom Rini
  4 siblings, 1 reply; 11+ messages in thread
From: Stefan Monnier @ 2015-10-03 20:58 UTC (permalink / raw)
  To: u-boot

I haven't received any answer from anyone about my patch.
What am I doing wrong?


        Stefan


>>>>> "Stefan" == Stefan Monnier <monnier@iro.umontreal.ca> writes:

> Signed-off-by: Stefan Monnier <monnier@iro.umontreal.ca>
> ---
>  disk/part_dos.c | 29 +++++++++++++++++------------
>  include/ide.h   |  8 ++++----
>  2 files changed, 21 insertions(+), 16 deletions(-)

> diff --git a/disk/part_dos.c b/disk/part_dos.c
> index cf1a36e..adde68a 100644
> --- a/disk/part_dos.c
> +++ b/disk/part_dos.c
> @@ -25,7 +25,7 @@
 
>  /* Convert char[4] in little endian format to the host format integer
>   */
> -static inline int le32_to_int(unsigned char *le32)
> +static inline unsigned int le32_to_int(unsigned char *le32)
>  {
>      return ((le32[3] << 24) +
>  	    (le32[2] << 16) +
> @@ -46,13 +46,14 @@ static inline int is_bootable(dos_partition_t *p)
>  	return p->boot_ind == 0x80;
>  }
 
> -static void print_one_part(dos_partition_t *p, int ext_part_sector,
> +static void print_one_part(dos_partition_t *p, lbaint_t ext_part_sector,
>  			   int part_num, unsigned int disksig)
>  {
> -	int lba_start = ext_part_sector + le32_to_int (p->start4);
> -	int lba_size  = le32_to_int (p->size4);
> +	lbaint_t lba_start = ext_part_sector + le32_to_int (p->start4);
> +	lbaint_t lba_size  = le32_to_int (p->size4);
 
> -	printf("%3d\t%-10d\t%-10d\t%08x-%02x\t%02x%s%s\n",
> +	printf("%3d\t%-10" LBAFlength "u\t%-10" LBAFlength
> +		"u\t%08x-%02x\t%02x%s%s\n",
>  		part_num, lba_start, lba_size, disksig, part_num, p->sys_ind,
>  		(is_extended(p->sys_ind) ? " Extd" : ""),
>  		(is_bootable(p) ? " Boot" : ""));
> @@ -101,7 +102,8 @@ int test_part_dos (block_dev_desc_t *dev_desc)
>  /*  Print a partition that is relative to its Extended partition table
>   */
>  static void print_partition_extended(block_dev_desc_t *dev_desc,
> -				     int ext_part_sector, int relative,
> +				     lbaint_t ext_part_sector,
> +				     lbaint_t relative,
>  				     int part_num, unsigned int disksig)
>  {
>  	ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
> @@ -109,7 +111,7 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
>  	int i;
 
>  	if (dev_desc->block_read(dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) {
> -		printf ("** Can't read partition table on %d:%d **\n",
> +		printf ("** Can't read partition table on %d:" LBAFU " **\n",
dev_desc-> dev, ext_part_sector);
>  		return;
>  	}
> @@ -148,7 +150,8 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
>  	pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET);
>  	for (i = 0; i < 4; i++, pt++) {
>  		if (is_extended (pt->sys_ind)) {
> -			int lba_start = le32_to_int (pt->start4) + relative;
> +			lbaint_t lba_start
> +				= le32_to_int (pt->start4) + relative;
 
>  			print_partition_extended(dev_desc, lba_start,
>  				ext_part_sector == 0  ? lba_start : relative,
> @@ -162,8 +165,9 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
 
>  /*  Print a partition that is relative to its Extended partition table
>   */
> -static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part_sector,
> -				 int relative, int part_num,
> +static int get_partition_info_extended (block_dev_desc_t *dev_desc,
> +				 lbaint_t ext_part_sector,
> +				 lbaint_t relative, int part_num,
>  				 int which_part, disk_partition_t *info,
>  				 unsigned int disksig)
>  {
> @@ -173,7 +177,7 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
>  	int dos_type;
 
>  	if (dev_desc->block_read (dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) {
> -		printf ("** Can't read partition table on %d:%d **\n",
> +		printf ("** Can't read partition table on %d:" LBAFU " **\n",
dev_desc-> dev, ext_part_sector);
>  		return -1;
>  	}
> @@ -249,7 +253,8 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
>  	pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET);
>  	for (i = 0; i < 4; i++, pt++) {
>  		if (is_extended (pt->sys_ind)) {
> -			int lba_start = le32_to_int (pt->start4) + relative;
> +			lbaint_t lba_start
> +				= le32_to_int (pt->start4) + relative;
 
>  			return get_partition_info_extended (dev_desc, lba_start,
>  				 ext_part_sector == 0 ? lba_start : relative,
> diff --git a/include/ide.h b/include/ide.h
> index d5e05e9..f9b43cb 100644
> --- a/include/ide.h
> +++ b/include/ide.h
> @@ -28,13 +28,13 @@ void ide_led(uchar led, uchar status);
 
>  #ifdef CONFIG_SYS_64BIT_LBA
>  typedef uint64_t lbaint_t;
> -#define LBAF "%llx"
> -#define LBAFU "%llu"
> +#define LBAFlength "ll"
>  #else
>  typedef ulong lbaint_t;
> -#define LBAF "%lx"
> -#define LBAFU "%lu"
> +#define LBAFlength "l"
>  #endif
> +#define LBAF "%" LBAFlength "x"
> +#define LBAFU "%" LBAFlength "u"
 
>  /*
>   * Function Prototypes
> -- 
> 2.1.4

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH] Don't wrap to negative after 2G sectors
  2015-08-25 19:24 ` [U-Boot] [PATCH] Don't wrap to negative after 2G sectors Stefan Monnier
  2015-09-03 14:17   ` Stefan Monnier
@ 2015-09-09  0:05   ` Stefan Monnier
  2015-10-03 20:58   ` Stefan Monnier
                     ` (2 subsequent siblings)
  4 siblings, 0 replies; 11+ messages in thread
From: Stefan Monnier @ 2015-09-09  0:05 UTC (permalink / raw)
  To: u-boot

Any chance this can make it into 2015.10?


        Stefan


>>>>> "Stefan" == Stefan Monnier <monnier@iro.umontreal.ca> writes:

> Signed-off-by: Stefan Monnier <monnier@iro.umontreal.ca>
> ---
>  disk/part_dos.c | 29 +++++++++++++++++------------
>  include/ide.h   |  8 ++++----
>  2 files changed, 21 insertions(+), 16 deletions(-)

> diff --git a/disk/part_dos.c b/disk/part_dos.c
> index cf1a36e..adde68a 100644
> --- a/disk/part_dos.c
> +++ b/disk/part_dos.c
> @@ -25,7 +25,7 @@
 
>  /* Convert char[4] in little endian format to the host format integer
>   */
> -static inline int le32_to_int(unsigned char *le32)
> +static inline unsigned int le32_to_int(unsigned char *le32)
>  {
>      return ((le32[3] << 24) +
>  	    (le32[2] << 16) +
> @@ -46,13 +46,14 @@ static inline int is_bootable(dos_partition_t *p)
>  	return p->boot_ind == 0x80;
>  }
 
> -static void print_one_part(dos_partition_t *p, int ext_part_sector,
> +static void print_one_part(dos_partition_t *p, lbaint_t ext_part_sector,
>  			   int part_num, unsigned int disksig)
>  {
> -	int lba_start = ext_part_sector + le32_to_int (p->start4);
> -	int lba_size  = le32_to_int (p->size4);
> +	lbaint_t lba_start = ext_part_sector + le32_to_int (p->start4);
> +	lbaint_t lba_size  = le32_to_int (p->size4);
 
> -	printf("%3d\t%-10d\t%-10d\t%08x-%02x\t%02x%s%s\n",
> +	printf("%3d\t%-10" LBAFlength "u\t%-10" LBAFlength
> +		"u\t%08x-%02x\t%02x%s%s\n",
>  		part_num, lba_start, lba_size, disksig, part_num, p->sys_ind,
>  		(is_extended(p->sys_ind) ? " Extd" : ""),
>  		(is_bootable(p) ? " Boot" : ""));
> @@ -101,7 +102,8 @@ int test_part_dos (block_dev_desc_t *dev_desc)
>  /*  Print a partition that is relative to its Extended partition table
>   */
>  static void print_partition_extended(block_dev_desc_t *dev_desc,
> -				     int ext_part_sector, int relative,
> +				     lbaint_t ext_part_sector,
> +				     lbaint_t relative,
>  				     int part_num, unsigned int disksig)
>  {
>  	ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
> @@ -109,7 +111,7 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
>  	int i;
 
>  	if (dev_desc->block_read(dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) {
> -		printf ("** Can't read partition table on %d:%d **\n",
> +		printf ("** Can't read partition table on %d:" LBAFU " **\n",
dev_desc-> dev, ext_part_sector);
>  		return;
>  	}
> @@ -148,7 +150,8 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
>  	pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET);
>  	for (i = 0; i < 4; i++, pt++) {
>  		if (is_extended (pt->sys_ind)) {
> -			int lba_start = le32_to_int (pt->start4) + relative;
> +			lbaint_t lba_start
> +				= le32_to_int (pt->start4) + relative;
 
>  			print_partition_extended(dev_desc, lba_start,
>  				ext_part_sector == 0  ? lba_start : relative,
> @@ -162,8 +165,9 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
 
>  /*  Print a partition that is relative to its Extended partition table
>   */
> -static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part_sector,
> -				 int relative, int part_num,
> +static int get_partition_info_extended (block_dev_desc_t *dev_desc,
> +				 lbaint_t ext_part_sector,
> +				 lbaint_t relative, int part_num,
>  				 int which_part, disk_partition_t *info,
>  				 unsigned int disksig)
>  {
> @@ -173,7 +177,7 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
>  	int dos_type;
 
>  	if (dev_desc->block_read (dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) {
> -		printf ("** Can't read partition table on %d:%d **\n",
> +		printf ("** Can't read partition table on %d:" LBAFU " **\n",
dev_desc-> dev, ext_part_sector);
>  		return -1;
>  	}
> @@ -249,7 +253,8 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
>  	pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET);
>  	for (i = 0; i < 4; i++, pt++) {
>  		if (is_extended (pt->sys_ind)) {
> -			int lba_start = le32_to_int (pt->start4) + relative;
> +			lbaint_t lba_start
> +				= le32_to_int (pt->start4) + relative;
 
>  			return get_partition_info_extended (dev_desc, lba_start,
>  				 ext_part_sector == 0 ? lba_start : relative,
> diff --git a/include/ide.h b/include/ide.h
> index d5e05e9..f9b43cb 100644
> --- a/include/ide.h
> +++ b/include/ide.h
> @@ -28,13 +28,13 @@ void ide_led(uchar led, uchar status);
 
>  #ifdef CONFIG_SYS_64BIT_LBA
>  typedef uint64_t lbaint_t;
> -#define LBAF "%llx"
> -#define LBAFU "%llu"
> +#define LBAFlength "ll"
>  #else
>  typedef ulong lbaint_t;
> -#define LBAF "%lx"
> -#define LBAFU "%lu"
> +#define LBAFlength "l"
>  #endif
> +#define LBAF "%" LBAFlength "x"
> +#define LBAFU "%" LBAFlength "u"
 
>  /*
>   * Function Prototypes
> -- 
> 2.1.4

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH] Don't wrap to negative after 2G sectors
  2015-08-25 19:24 ` [U-Boot] [PATCH] Don't wrap to negative after 2G sectors Stefan Monnier
@ 2015-09-03 14:17   ` Stefan Monnier
  2015-09-09  0:05   ` Stefan Monnier
                     ` (3 subsequent siblings)
  4 siblings, 0 replies; 11+ messages in thread
From: Stefan Monnier @ 2015-09-03 14:17 UTC (permalink / raw)
  To: u-boot

Ping?


        Stefan

>>>>> "Stefan" == Stefan Monnier <monnier@iro.umontreal.ca> writes:

> Signed-off-by: Stefan Monnier <monnier@iro.umontreal.ca>
> ---
>  disk/part_dos.c | 29 +++++++++++++++++------------
>  include/ide.h   |  8 ++++----
>  2 files changed, 21 insertions(+), 16 deletions(-)

> diff --git a/disk/part_dos.c b/disk/part_dos.c
> index cf1a36e..adde68a 100644
> --- a/disk/part_dos.c
> +++ b/disk/part_dos.c
> @@ -25,7 +25,7 @@
 
>  /* Convert char[4] in little endian format to the host format integer
>   */
> -static inline int le32_to_int(unsigned char *le32)
> +static inline unsigned int le32_to_int(unsigned char *le32)
>  {
>      return ((le32[3] << 24) +
>  	    (le32[2] << 16) +
> @@ -46,13 +46,14 @@ static inline int is_bootable(dos_partition_t *p)
>  	return p->boot_ind == 0x80;
>  }
 
> -static void print_one_part(dos_partition_t *p, int ext_part_sector,
> +static void print_one_part(dos_partition_t *p, lbaint_t ext_part_sector,
>  			   int part_num, unsigned int disksig)
>  {
> -	int lba_start = ext_part_sector + le32_to_int (p->start4);
> -	int lba_size  = le32_to_int (p->size4);
> +	lbaint_t lba_start = ext_part_sector + le32_to_int (p->start4);
> +	lbaint_t lba_size  = le32_to_int (p->size4);
 
> -	printf("%3d\t%-10d\t%-10d\t%08x-%02x\t%02x%s%s\n",
> +	printf("%3d\t%-10" LBAFlength "u\t%-10" LBAFlength
> +		"u\t%08x-%02x\t%02x%s%s\n",
>  		part_num, lba_start, lba_size, disksig, part_num, p->sys_ind,
>  		(is_extended(p->sys_ind) ? " Extd" : ""),
>  		(is_bootable(p) ? " Boot" : ""));
> @@ -101,7 +102,8 @@ int test_part_dos (block_dev_desc_t *dev_desc)
>  /*  Print a partition that is relative to its Extended partition table
>   */
>  static void print_partition_extended(block_dev_desc_t *dev_desc,
> -				     int ext_part_sector, int relative,
> +				     lbaint_t ext_part_sector,
> +				     lbaint_t relative,
>  				     int part_num, unsigned int disksig)
>  {
>  	ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
> @@ -109,7 +111,7 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
>  	int i;
 
>  	if (dev_desc->block_read(dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) {
> -		printf ("** Can't read partition table on %d:%d **\n",
> +		printf ("** Can't read partition table on %d:" LBAFU " **\n",
dev_desc-> dev, ext_part_sector);
>  		return;
>  	}
> @@ -148,7 +150,8 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
>  	pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET);
>  	for (i = 0; i < 4; i++, pt++) {
>  		if (is_extended (pt->sys_ind)) {
> -			int lba_start = le32_to_int (pt->start4) + relative;
> +			lbaint_t lba_start
> +				= le32_to_int (pt->start4) + relative;
 
>  			print_partition_extended(dev_desc, lba_start,
>  				ext_part_sector == 0  ? lba_start : relative,
> @@ -162,8 +165,9 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
 
>  /*  Print a partition that is relative to its Extended partition table
>   */
> -static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part_sector,
> -				 int relative, int part_num,
> +static int get_partition_info_extended (block_dev_desc_t *dev_desc,
> +				 lbaint_t ext_part_sector,
> +				 lbaint_t relative, int part_num,
>  				 int which_part, disk_partition_t *info,
>  				 unsigned int disksig)
>  {
> @@ -173,7 +177,7 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
>  	int dos_type;
 
>  	if (dev_desc->block_read (dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) {
> -		printf ("** Can't read partition table on %d:%d **\n",
> +		printf ("** Can't read partition table on %d:" LBAFU " **\n",
dev_desc-> dev, ext_part_sector);
>  		return -1;
>  	}
> @@ -249,7 +253,8 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
>  	pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET);
>  	for (i = 0; i < 4; i++, pt++) {
>  		if (is_extended (pt->sys_ind)) {
> -			int lba_start = le32_to_int (pt->start4) + relative;
> +			lbaint_t lba_start
> +				= le32_to_int (pt->start4) + relative;
 
>  			return get_partition_info_extended (dev_desc, lba_start,
>  				 ext_part_sector == 0 ? lba_start : relative,
> diff --git a/include/ide.h b/include/ide.h
> index d5e05e9..f9b43cb 100644
> --- a/include/ide.h
> +++ b/include/ide.h
> @@ -28,13 +28,13 @@ void ide_led(uchar led, uchar status);
 
>  #ifdef CONFIG_SYS_64BIT_LBA
>  typedef uint64_t lbaint_t;
> -#define LBAF "%llx"
> -#define LBAFU "%llu"
> +#define LBAFlength "ll"
>  #else
>  typedef ulong lbaint_t;
> -#define LBAF "%lx"
> -#define LBAFU "%lu"
> +#define LBAFlength "l"
>  #endif
> +#define LBAF "%" LBAFlength "x"
> +#define LBAFU "%" LBAFlength "u"
 
>  /*
>   * Function Prototypes
> -- 
> 2.1.4

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH] Don't wrap to negative after 2G sectors
  2015-08-19 19:15 [U-Boot] 2TB disks Stefan Monnier
@ 2015-08-25 19:24 ` Stefan Monnier
  2015-09-03 14:17   ` Stefan Monnier
                     ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Stefan Monnier @ 2015-08-25 19:24 UTC (permalink / raw)
  To: u-boot


Signed-off-by: Stefan Monnier <monnier@iro.umontreal.ca>
---
 disk/part_dos.c | 29 +++++++++++++++++------------
 include/ide.h   |  8 ++++----
 2 files changed, 21 insertions(+), 16 deletions(-)

diff --git a/disk/part_dos.c b/disk/part_dos.c
index cf1a36e..adde68a 100644
--- a/disk/part_dos.c
+++ b/disk/part_dos.c
@@ -25,7 +25,7 @@
 
 /* Convert char[4] in little endian format to the host format integer
  */
-static inline int le32_to_int(unsigned char *le32)
+static inline unsigned int le32_to_int(unsigned char *le32)
 {
     return ((le32[3] << 24) +
 	    (le32[2] << 16) +
@@ -46,13 +46,14 @@ static inline int is_bootable(dos_partition_t *p)
 	return p->boot_ind == 0x80;
 }
 
-static void print_one_part(dos_partition_t *p, int ext_part_sector,
+static void print_one_part(dos_partition_t *p, lbaint_t ext_part_sector,
 			   int part_num, unsigned int disksig)
 {
-	int lba_start = ext_part_sector + le32_to_int (p->start4);
-	int lba_size  = le32_to_int (p->size4);
+	lbaint_t lba_start = ext_part_sector + le32_to_int (p->start4);
+	lbaint_t lba_size  = le32_to_int (p->size4);
 
-	printf("%3d\t%-10d\t%-10d\t%08x-%02x\t%02x%s%s\n",
+	printf("%3d\t%-10" LBAFlength "u\t%-10" LBAFlength
+		"u\t%08x-%02x\t%02x%s%s\n",
 		part_num, lba_start, lba_size, disksig, part_num, p->sys_ind,
 		(is_extended(p->sys_ind) ? " Extd" : ""),
 		(is_bootable(p) ? " Boot" : ""));
@@ -101,7 +102,8 @@ int test_part_dos (block_dev_desc_t *dev_desc)
 /*  Print a partition that is relative to its Extended partition table
  */
 static void print_partition_extended(block_dev_desc_t *dev_desc,
-				     int ext_part_sector, int relative,
+				     lbaint_t ext_part_sector,
+				     lbaint_t relative,
 				     int part_num, unsigned int disksig)
 {
 	ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
@@ -109,7 +111,7 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
 	int i;
 
 	if (dev_desc->block_read(dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) {
-		printf ("** Can't read partition table on %d:%d **\n",
+		printf ("** Can't read partition table on %d:" LBAFU " **\n",
 			dev_desc->dev, ext_part_sector);
 		return;
 	}
@@ -148,7 +150,8 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
 	pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET);
 	for (i = 0; i < 4; i++, pt++) {
 		if (is_extended (pt->sys_ind)) {
-			int lba_start = le32_to_int (pt->start4) + relative;
+			lbaint_t lba_start
+				= le32_to_int (pt->start4) + relative;
 
 			print_partition_extended(dev_desc, lba_start,
 				ext_part_sector == 0  ? lba_start : relative,
@@ -162,8 +165,9 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
 
 /*  Print a partition that is relative to its Extended partition table
  */
-static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part_sector,
-				 int relative, int part_num,
+static int get_partition_info_extended (block_dev_desc_t *dev_desc,
+				 lbaint_t ext_part_sector,
+				 lbaint_t relative, int part_num,
 				 int which_part, disk_partition_t *info,
 				 unsigned int disksig)
 {
@@ -173,7 +177,7 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
 	int dos_type;
 
 	if (dev_desc->block_read (dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) {
-		printf ("** Can't read partition table on %d:%d **\n",
+		printf ("** Can't read partition table on %d:" LBAFU " **\n",
 			dev_desc->dev, ext_part_sector);
 		return -1;
 	}
@@ -249,7 +253,8 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
 	pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET);
 	for (i = 0; i < 4; i++, pt++) {
 		if (is_extended (pt->sys_ind)) {
-			int lba_start = le32_to_int (pt->start4) + relative;
+			lbaint_t lba_start
+				= le32_to_int (pt->start4) + relative;
 
 			return get_partition_info_extended (dev_desc, lba_start,
 				 ext_part_sector == 0 ? lba_start : relative,
diff --git a/include/ide.h b/include/ide.h
index d5e05e9..f9b43cb 100644
--- a/include/ide.h
+++ b/include/ide.h
@@ -28,13 +28,13 @@ void ide_led(uchar led, uchar status);
 
 #ifdef CONFIG_SYS_64BIT_LBA
 typedef uint64_t lbaint_t;
-#define LBAF "%llx"
-#define LBAFU "%llu"
+#define LBAFlength "ll"
 #else
 typedef ulong lbaint_t;
-#define LBAF "%lx"
-#define LBAFU "%lu"
+#define LBAFlength "l"
 #endif
+#define LBAF "%" LBAFlength "x"
+#define LBAFU "%" LBAFlength "u"
 
 /*
  * Function Prototypes
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2016-01-13 21:55 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-25 17:08 [U-Boot] Fix wrap around bug in MBR sector counts Stefan Monnier
2015-11-25 17:08 ` [U-Boot] [PATCH] Don't wrap to negative after 2G sectors Stefan Monnier
2016-01-12 15:29   ` Stefan Monnier
  -- strict thread matches above, loose matches on Subject: below --
2015-08-19 19:15 [U-Boot] 2TB disks Stefan Monnier
2015-08-25 19:24 ` [U-Boot] [PATCH] Don't wrap to negative after 2G sectors Stefan Monnier
2015-09-03 14:17   ` Stefan Monnier
2015-09-09  0:05   ` Stefan Monnier
2015-10-03 20:58   ` Stefan Monnier
2015-10-03 22:03     ` Fabio Estevam
2016-01-13 15:54   ` Tom Rini
2016-01-13 19:22     ` Stefan Monnier
2016-01-13 21:55   ` Tom Rini

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.