* [PATCH SLOF v4 0/4] GPT fixes and LVM support with FAT
@ 2015-07-02 11:35 Nikunj A Dadhania
2015-07-02 11:35 ` [PATCH SLOF v4 1/4] disk-label: simplify gpt-prep-partition? routine Nikunj A Dadhania
` (4 more replies)
0 siblings, 5 replies; 8+ messages in thread
From: Nikunj A Dadhania @ 2015-07-02 11:35 UTC (permalink / raw)
To: linuxppc-dev, thuth, segher; +Cc: aik, dvaleev, nikunj
Following patchset implements some improvements and cleanup for the
GPT booting code:
patch 1: Simplify the gpt detection code with lesser scopes and add
comments.
patch 2: Introduce 8byte LE helpers: x@-le and x!-le
patch 3: As we need to detect FAT partition, implement a helper that
can be used both from GPT code and "fat-bootblock?"
patch 4: Implement GPT FAT for LVM suport and make GPT detection code
robust
Changelog v3:
* Dropped patch for renaming "block" variable
* Fix bug in seek-pos updation code
Changelog V2:
* Optimize gpt detection code
* Fixed stack comments
* Rename verify-gpt-partition, as it was doing more than that. Added
comments.
Nikunj A Dadhania (4):
disk-label: simplify gpt-prep-partition? routine
introduce 8-byte LE helpers
disk-label: introduce helper to check fat filesystem
disk-label: add support for booting from GPT FAT partition
slof/fs/little-endian.fs | 6 ++
slof/fs/packages/disk-label.fs | 162 +++++++++++++++++++++++++++--------------
2 files changed, 112 insertions(+), 56 deletions(-)
--
2.4.3
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH SLOF v4 1/4] disk-label: simplify gpt-prep-partition? routine
2015-07-02 11:35 [PATCH SLOF v4 0/4] GPT fixes and LVM support with FAT Nikunj A Dadhania
@ 2015-07-02 11:35 ` Nikunj A Dadhania
2015-07-04 1:42 ` Alexey Kardashevskiy
2015-07-02 11:35 ` [PATCH SLOF v4 2/4] introduce 8-byte LE helpers Nikunj A Dadhania
` (3 subsequent siblings)
4 siblings, 1 reply; 8+ messages in thread
From: Nikunj A Dadhania @ 2015-07-02 11:35 UTC (permalink / raw)
To: linuxppc-dev, thuth, segher; +Cc: aik, dvaleev, nikunj
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
---
slof/fs/packages/disk-label.fs | 41 +++++++++++++++--------------------------
1 file changed, 15 insertions(+), 26 deletions(-)
diff --git a/slof/fs/packages/disk-label.fs b/slof/fs/packages/disk-label.fs
index fe1c25e..f1f083a 100644
--- a/slof/fs/packages/disk-label.fs
+++ b/slof/fs/packages/disk-label.fs
@@ -352,42 +352,31 @@ CONSTANT /gpt-part-entry
drop 0
;
-\ Check for GPT PReP partition GUID
-9E1A2D38 CONSTANT GPT-PREP-PARTITION-1
-C612 CONSTANT GPT-PREP-PARTITION-2
-4316 CONSTANT GPT-PREP-PARTITION-3
-AA26 CONSTANT GPT-PREP-PARTITION-4
-8B49521E5A8B CONSTANT GPT-PREP-PARTITION-5
+\ Check for GPT PReP partition GUID. Only first 3 blocks are
+\ byte-swapped treating last two blocks as contigous for simplifying
+\ comparison
+9E1A2D38 CONSTANT GPT-PREP-PARTITION-1
+C612 CONSTANT GPT-PREP-PARTITION-2
+4316 CONSTANT GPT-PREP-PARTITION-3
+AA268B49521E5A8B CONSTANT GPT-PREP-PARTITION-4
: gpt-prep-partition? ( -- true|false )
- block gpt-part-entry>part-type-guid l@-le GPT-PREP-PARTITION-1 = IF
- block gpt-part-entry>part-type-guid 4 + w@-le
- GPT-PREP-PARTITION-2 = IF
- block gpt-part-entry>part-type-guid 6 + w@-le
- GPT-PREP-PARTITION-3 = IF
- block gpt-part-entry>part-type-guid 8 + w@
- GPT-PREP-PARTITION-4 = IF
- block gpt-part-entry>part-type-guid a + w@
- block gpt-part-entry>part-type-guid c + l@ swap lxjoin
- GPT-PREP-PARTITION-5 = IF
- TRUE EXIT
- THEN
- THEN
- THEN
- THEN
- THEN
- FALSE
+ block gpt-part-entry>part-type-guid
+ dup l@-le GPT-PREP-PARTITION-1 <> IF drop false EXIT THEN
+ dup 4 + w@-le GPT-PREP-PARTITION-2 <> IF drop false EXIT THEN
+ dup 6 + w@-le GPT-PREP-PARTITION-3 <> IF drop false EXIT THEN
+ 8 + x@ GPT-PREP-PARTITION-4 =
;
: load-from-gpt-prep-partition ( addr -- size )
- no-gpt? IF drop FALSE EXIT THEN
+ no-gpt? IF drop false EXIT THEN
debug-disk-label? IF
cr ." GPT partition found " cr
THEN
1 read-sector block gpt>part-entry-lba l@-le
block-size * to seek-pos
block gpt>part-entry-size l@-le to gpt-part-size
- block gpt>num-part-entry l@-le dup 0= IF FALSE EXIT THEN
+ block gpt>num-part-entry l@-le dup 0= IF false EXIT THEN
1+ 1 ?DO
seek-pos 0 seek drop
block gpt-part-size read drop gpt-prep-partition? IF
@@ -405,7 +394,7 @@ AA26 CONSTANT GPT-PREP-PARTITION-4
THEN
seek-pos gpt-part-size i * + to seek-pos
LOOP
- FALSE
+ false
;
\ Extract the boot loader path from a bootinfo.txt file
--
2.4.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH SLOF v4 2/4] introduce 8-byte LE helpers
2015-07-02 11:35 [PATCH SLOF v4 0/4] GPT fixes and LVM support with FAT Nikunj A Dadhania
2015-07-02 11:35 ` [PATCH SLOF v4 1/4] disk-label: simplify gpt-prep-partition? routine Nikunj A Dadhania
@ 2015-07-02 11:35 ` Nikunj A Dadhania
2015-07-02 11:35 ` [PATCH SLOF v4 3/4] disk-label: introduce helper to check fat filesystem Nikunj A Dadhania
` (2 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Nikunj A Dadhania @ 2015-07-02 11:35 UTC (permalink / raw)
To: linuxppc-dev, thuth, segher; +Cc: aik, dvaleev, nikunj
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
---
slof/fs/little-endian.fs | 6 ++++++
slof/fs/packages/disk-label.fs | 4 ++--
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/slof/fs/little-endian.fs b/slof/fs/little-endian.fs
index f2e4e8d..6b4779e 100644
--- a/slof/fs/little-endian.fs
+++ b/slof/fs/little-endian.fs
@@ -17,6 +17,9 @@ here c@ ef = CONSTANT ?littleendian
?bigendian [IF]
+: x!-le >r xbflip r> x! ;
+: x@-le x@ xbflip ;
+
: l!-le >r lbflip r> l! ;
: l@-le l@ lbflip ;
@@ -47,6 +50,9 @@ here c@ ef = CONSTANT ?littleendian
[ELSE]
+: x!-le x! ;
+: x@-le x@ ;
+
: l!-le l! ;
: l@-le l@ ;
diff --git a/slof/fs/packages/disk-label.fs b/slof/fs/packages/disk-label.fs
index f1f083a..b346774 100644
--- a/slof/fs/packages/disk-label.fs
+++ b/slof/fs/packages/disk-label.fs
@@ -383,8 +383,8 @@ AA268B49521E5A8B CONSTANT GPT-PREP-PARTITION-4
debug-disk-label? IF
." GPT PReP partition found " cr
THEN
- block gpt-part-entry>first-lba x@ xbflip
- block gpt-part-entry>last-lba x@ xbflip
+ block gpt-part-entry>first-lba x@-le
+ block gpt-part-entry>last-lba x@-le
over - 1+ ( addr offset len )
swap ( addr len offset )
block-size * to part-offset
--
2.4.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH SLOF v4 3/4] disk-label: introduce helper to check fat filesystem
2015-07-02 11:35 [PATCH SLOF v4 0/4] GPT fixes and LVM support with FAT Nikunj A Dadhania
2015-07-02 11:35 ` [PATCH SLOF v4 1/4] disk-label: simplify gpt-prep-partition? routine Nikunj A Dadhania
2015-07-02 11:35 ` [PATCH SLOF v4 2/4] introduce 8-byte LE helpers Nikunj A Dadhania
@ 2015-07-02 11:35 ` Nikunj A Dadhania
2015-07-02 11:35 ` [PATCH SLOF v4 4/4] disk-label: add support for booting from GPT FAT partition Nikunj A Dadhania
2015-07-04 1:55 ` [PATCH SLOF v4 0/4] GPT fixes and LVM support with FAT Alexey Kardashevskiy
4 siblings, 0 replies; 8+ messages in thread
From: Nikunj A Dadhania @ 2015-07-02 11:35 UTC (permalink / raw)
To: linuxppc-dev, thuth, segher; +Cc: aik, dvaleev, nikunj
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
---
slof/fs/packages/disk-label.fs | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/slof/fs/packages/disk-label.fs b/slof/fs/packages/disk-label.fs
index b346774..142e54f 100644
--- a/slof/fs/packages/disk-label.fs
+++ b/slof/fs/packages/disk-label.fs
@@ -320,6 +320,14 @@ CONSTANT /gpt-part-entry
\ Load from first active DOS boot partition.
+: fat-bootblock? ( addr -- flag )
+ \ byte 0-2 of the bootblock is a jump instruction in
+ \ all FAT filesystems.
+ \ e9 and eb are jump instructions in x86 assembler.
+ dup c@ e9 = IF drop true EXIT THEN
+ dup c@ eb = swap 2+ c@ 90 = and
+;
+
\ NOTE: block-size is always 512 bytes for DOS partition tables.
: load-from-dos-boot-partition ( addr -- size )
@@ -547,14 +555,7 @@ AA268B49521E5A8B CONSTANT GPT-PREP-PARTITION-4
: try-dos-files ( -- found? )
no-mbr? IF false EXIT THEN
- \ block 0 byte 0-2 is a jump instruction in all FAT
- \ filesystems.
- \ e9 and eb are jump instructions in x86 assembler.
- block c@ e9 <> IF
- block c@ eb <>
- block 2+ c@ 90 <> or
- IF false EXIT THEN
- THEN
+ block fat-bootblock? 0= IF false EXIT THEN
s" fat-files" (interpose-filesystem)
true
;
--
2.4.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH SLOF v4 4/4] disk-label: add support for booting from GPT FAT partition
2015-07-02 11:35 [PATCH SLOF v4 0/4] GPT fixes and LVM support with FAT Nikunj A Dadhania
` (2 preceding siblings ...)
2015-07-02 11:35 ` [PATCH SLOF v4 3/4] disk-label: introduce helper to check fat filesystem Nikunj A Dadhania
@ 2015-07-02 11:35 ` Nikunj A Dadhania
2015-07-04 1:55 ` [PATCH SLOF v4 0/4] GPT fixes and LVM support with FAT Alexey Kardashevskiy
4 siblings, 0 replies; 8+ messages in thread
From: Nikunj A Dadhania @ 2015-07-02 11:35 UTC (permalink / raw)
To: linuxppc-dev, thuth, segher; +Cc: aik, dvaleev, nikunj
For a GPT+LVM combination disk, older bootloader that does not support
LVM, cannot load kernel from LVM.
The patch adds support to read from BASIC_DATA UUID partitions for the
case that the OS installer has installed the CHRP-BOOT config on a FAT
file system.
Makes GPT detection robust
* Fix bug in seek-pos updation code
* Check for Protective MBR Magic
* Check for valid GPT Signature
* Boundary check for allocated block size before reading into the
buffer
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
---
slof/fs/packages/disk-label.fs | 108 ++++++++++++++++++++++++++++++++---------
1 file changed, 84 insertions(+), 24 deletions(-)
diff --git a/slof/fs/packages/disk-label.fs b/slof/fs/packages/disk-label.fs
index 142e54f..e034d64 100644
--- a/slof/fs/packages/disk-label.fs
+++ b/slof/fs/packages/disk-label.fs
@@ -20,6 +20,7 @@ false VALUE debug-disk-label?
\ If we ever want to put a large kernel with initramfs from a PREP partition
\ we might need to increase this value. The default value is 65536 blocks (32MB)
d# 65536 value max-prep-partition-blocks
+d# 4096 CONSTANT block-array-size
s" disk-label" device-name
@@ -152,8 +153,8 @@ CONSTANT /gpt-part-entry
: init-block ( -- )
s" block-size" ['] $call-parent CATCH IF ABORT" parent has no block-size." THEN
to block-size
- d# 4096 alloc-mem
- dup d# 4096 erase
+ block-array-size alloc-mem
+ dup block-array-size erase
to block
debug-disk-label? IF
." init-block: block-size=" block-size .d ." block=0x" block u. cr
@@ -178,7 +179,8 @@ CONSTANT /gpt-part-entry
\ This word returns true if the currently loaded block has _NO_ GPT partition id
: no-gpt? ( -- true|false )
0 read-sector
- 1 partition>part-entry part-entry>id c@ ee <>
+ 1 partition>part-entry part-entry>id c@ ee <> IF true EXIT THEN
+ block mbr>magic w@-le aa55 <>
;
: pc-extended-partition? ( part-entry-addr -- true|false )
@@ -266,7 +268,10 @@ CONSTANT /gpt-part-entry
: try-dos-partition ( -- okay? )
\ Read partition table and check magic.
- no-mbr? IF cr ." No DOS disk-label found." cr false EXIT THEN
+ no-mbr? IF
+ debug-disk-label? IF cr ." No DOS disk-label found." cr THEN
+ false EXIT
+ THEN
count-dos-logical-partitions TO dos-logical-partitions
@@ -376,31 +381,85 @@ AA268B49521E5A8B CONSTANT GPT-PREP-PARTITION-4
8 + x@ GPT-PREP-PARTITION-4 =
;
-: load-from-gpt-prep-partition ( addr -- size )
- no-gpt? IF drop false EXIT THEN
- debug-disk-label? IF
- cr ." GPT partition found " cr
- THEN
- 1 read-sector block gpt>part-entry-lba l@-le
+\ Check for GPT MSFT BASIC DATA GUID - fat based
+EBD0A0A2 CONSTANT GPT-BASIC-DATA-PARTITION-1
+B9E5 CONSTANT GPT-BASIC-DATA-PARTITION-2
+4433 CONSTANT GPT-BASIC-DATA-PARTITION-3
+87C068B6B72699C7 CONSTANT GPT-BASIC-DATA-PARTITION-4
+
+: gpt-basic-data-partition? ( -- true|false )
+ block gpt-part-entry>part-type-guid
+ dup l@-le GPT-BASIC-DATA-PARTITION-1 <> IF drop false EXIT THEN
+ dup 4 + w@-le GPT-BASIC-DATA-PARTITION-2 <> IF drop false EXIT THEN
+ dup 6 + w@-le GPT-BASIC-DATA-PARTITION-3 <> IF drop false EXIT THEN
+ 8 + x@ GPT-BASIC-DATA-PARTITION-4 =
+;
+
+\
+\ GPT Signature
+\ ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h)
+\
+4546492050415254 CONSTANT GPT-SIGNATURE
+
+\ The routine checks whether the protective MBR has GPT ID and then
+\ reads the gpt data from the sector. Also set the seek position and
+\ the partition size used in caller routines.
+
+: get-gpt-partition ( -- true|false )
+ no-gpt? IF false EXIT THEN
+ debug-disk-label? IF cr ." GPT partition found " cr THEN
+ 1 read-sector
+ block gpt>part-entry-lba x@-le
block-size * to seek-pos
block gpt>part-entry-size l@-le to gpt-part-size
- block gpt>num-part-entry l@-le dup 0= IF false EXIT THEN
+ gpt-part-size block-array-size > IF
+ cr ." GPT part size exceeds buffer allocated " cr
+ false exit
+ THEN
+ block gpt>signature x@ GPT-SIGNATURE =
+;
+
+: load-from-gpt-prep-partition ( addr -- size )
+ get-gpt-partition 0= IF false EXIT THEN
+ block gpt>num-part-entry l@-le dup 0= IF false exit THEN
1+ 1 ?DO
seek-pos 0 seek drop
block gpt-part-size read drop gpt-prep-partition? IF
- debug-disk-label? IF
- ." GPT PReP partition found " cr
- THEN
- block gpt-part-entry>first-lba x@-le
- block gpt-part-entry>last-lba x@-le
- over - 1+ ( addr offset len )
- swap ( addr len offset )
- block-size * to part-offset
- 0 0 seek drop ( addr len )
- block-size * read ( size )
+ debug-disk-label? IF ." GPT PReP partition found " cr THEN
+ block gpt-part-entry>first-lba x@-le ( addr first-lba )
+ block gpt-part-entry>last-lba x@-le ( addr first-lba last-lba)
+ over - 1+ ( addr first-lba blocks )
+ swap ( addr blocks first-lba )
+ block-size * to part-offset ( addr blocks )
+ 0 0 seek drop ( addr blocks )
+ block-size * read ( size )
+ UNLOOP EXIT
+ THEN
+ seek-pos gpt-part-size + to seek-pos
+ LOOP
+ false
+;
+
+: try-gpt-dos-partition ( -- true|false )
+ get-gpt-partition 0= IF false EXIT THEN
+ block gpt>num-part-entry l@-le dup 0= IF false EXIT THEN
+ 1+ 1 ?DO
+ seek-pos 0 seek drop
+ block gpt-part-size read drop
+ gpt-basic-data-partition? IF
+ debug-disk-label? IF ." GPT BASIC DATA partition found " cr THEN
+ block gpt-part-entry>first-lba x@-le ( first-lba )
+ dup to part-start ( first-lba )
+ block gpt-part-entry>last-lba x@-le ( first-lba last-lba )
+ over - 1+ ( first-lba s1 )
+ block-size * to part-size ( first-lba )
+ block-size * to part-offset ( )
+ 0 0 seek drop
+ block block-size read drop
+ block fat-bootblock? ( true|false )
UNLOOP EXIT
THEN
- seek-pos gpt-part-size i * + to seek-pos
+ seek-pos gpt-part-size + to seek-pos
LOOP
false
;
@@ -490,7 +549,7 @@ AA268B49521E5A8B CONSTANT GPT-PREP-PARTITION-4
debug-disk-label? IF ." Trying CHRP boot " .s cr THEN
1 disk-chrp-boot !
- dup load-chrp-boot-file ?dup 0 <> IF .s cr nip EXIT THEN
+ dup load-chrp-boot-file ?dup 0 <> IF nip EXIT THEN
0 disk-chrp-boot !
debug-disk-label? IF ." Trying GPT boot " .s cr THEN
@@ -590,6 +649,7 @@ AA268B49521E5A8B CONSTANT GPT-PREP-PARTITION-4
: try-partitions ( -- found? )
try-dos-partition IF try-files EXIT THEN
+ try-gpt-dos-partition IF try-files EXIT THEN
\ try-iso9660-partition IF try-files EXIT THEN
\ ... more partition types here...
false
@@ -600,7 +660,7 @@ AA268B49521E5A8B CONSTANT GPT-PREP-PARTITION-4
: close ( -- )
debug-disk-label? IF ." Closing disk-label: block=0x" block u. ." block-size=" block-size .d cr THEN
- block d# 4096 free-mem
+ block block-array-size free-mem
;
--
2.4.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH SLOF v4 1/4] disk-label: simplify gpt-prep-partition? routine
2015-07-02 11:35 ` [PATCH SLOF v4 1/4] disk-label: simplify gpt-prep-partition? routine Nikunj A Dadhania
@ 2015-07-04 1:42 ` Alexey Kardashevskiy
2015-07-04 11:57 ` Nikunj A Dadhania
0 siblings, 1 reply; 8+ messages in thread
From: Alexey Kardashevskiy @ 2015-07-04 1:42 UTC (permalink / raw)
To: Nikunj A Dadhania, linuxppc-dev, thuth, segher; +Cc: dvaleev
On 07/02/2015 09:35 PM, Nikunj A Dadhania wrote:
> Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
> Reviewed-by: Thomas Huth <thuth@redhat.com>
If it does not change SLOF behaviour in any way (and it does not, right?),
it would be nice to see in the commit log.
> ---
> slof/fs/packages/disk-label.fs | 41 +++++++++++++++--------------------------
> 1 file changed, 15 insertions(+), 26 deletions(-)
>
> diff --git a/slof/fs/packages/disk-label.fs b/slof/fs/packages/disk-label.fs
> index fe1c25e..f1f083a 100644
> --- a/slof/fs/packages/disk-label.fs
> +++ b/slof/fs/packages/disk-label.fs
> @@ -352,42 +352,31 @@ CONSTANT /gpt-part-entry
> drop 0
> ;
>
> -\ Check for GPT PReP partition GUID
> -9E1A2D38 CONSTANT GPT-PREP-PARTITION-1
> -C612 CONSTANT GPT-PREP-PARTITION-2
> -4316 CONSTANT GPT-PREP-PARTITION-3
> -AA26 CONSTANT GPT-PREP-PARTITION-4
> -8B49521E5A8B CONSTANT GPT-PREP-PARTITION-5
> +\ Check for GPT PReP partition GUID. Only first 3 blocks are
> +\ byte-swapped treating last two blocks as contigous for simplifying
> +\ comparison
> +9E1A2D38 CONSTANT GPT-PREP-PARTITION-1
> +C612 CONSTANT GPT-PREP-PARTITION-2
> +4316 CONSTANT GPT-PREP-PARTITION-3
> +AA268B49521E5A8B CONSTANT GPT-PREP-PARTITION-4
>
> : gpt-prep-partition? ( -- true|false )
> - block gpt-part-entry>part-type-guid l@-le GPT-PREP-PARTITION-1 = IF
> - block gpt-part-entry>part-type-guid 4 + w@-le
> - GPT-PREP-PARTITION-2 = IF
> - block gpt-part-entry>part-type-guid 6 + w@-le
> - GPT-PREP-PARTITION-3 = IF
> - block gpt-part-entry>part-type-guid 8 + w@
> - GPT-PREP-PARTITION-4 = IF
> - block gpt-part-entry>part-type-guid a + w@
> - block gpt-part-entry>part-type-guid c + l@ swap lxjoin
> - GPT-PREP-PARTITION-5 = IF
> - TRUE EXIT
> - THEN
> - THEN
> - THEN
> - THEN
> - THEN
> - FALSE
> + block gpt-part-entry>part-type-guid
> + dup l@-le GPT-PREP-PARTITION-1 <> IF drop false EXIT THEN
> + dup 4 + w@-le GPT-PREP-PARTITION-2 <> IF drop false EXIT THEN
> + dup 6 + w@-le GPT-PREP-PARTITION-3 <> IF drop false EXIT THEN
> + 8 + x@ GPT-PREP-PARTITION-4 =
> ;
>
> : load-from-gpt-prep-partition ( addr -- size )
> - no-gpt? IF drop FALSE EXIT THEN
> + no-gpt? IF drop false EXIT THEN
> debug-disk-label? IF
> cr ." GPT partition found " cr
> THEN
> 1 read-sector block gpt>part-entry-lba l@-le
> block-size * to seek-pos
> block gpt>part-entry-size l@-le to gpt-part-size
> - block gpt>num-part-entry l@-le dup 0= IF FALSE EXIT THEN
> + block gpt>num-part-entry l@-le dup 0= IF false EXIT THEN
> 1+ 1 ?DO
> seek-pos 0 seek drop
> block gpt-part-size read drop gpt-prep-partition? IF
> @@ -405,7 +394,7 @@ AA26 CONSTANT GPT-PREP-PARTITION-4
> THEN
> seek-pos gpt-part-size i * + to seek-pos
> LOOP
> - FALSE
> + false
> ;
>
> \ Extract the boot loader path from a bootinfo.txt file
>
--
Alexey
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH SLOF v4 0/4] GPT fixes and LVM support with FAT
2015-07-02 11:35 [PATCH SLOF v4 0/4] GPT fixes and LVM support with FAT Nikunj A Dadhania
` (3 preceding siblings ...)
2015-07-02 11:35 ` [PATCH SLOF v4 4/4] disk-label: add support for booting from GPT FAT partition Nikunj A Dadhania
@ 2015-07-04 1:55 ` Alexey Kardashevskiy
4 siblings, 0 replies; 8+ messages in thread
From: Alexey Kardashevskiy @ 2015-07-04 1:55 UTC (permalink / raw)
To: Nikunj A Dadhania, linuxppc-dev, thuth, segher; +Cc: dvaleev
On 07/02/2015 09:35 PM, Nikunj A Dadhania wrote:
> Following patchset implements some improvements and cleanup for the
> GPT booting code:
>
> patch 1: Simplify the gpt detection code with lesser scopes and add
> comments.
>
> patch 2: Introduce 8byte LE helpers: x@-le and x!-le
>
> patch 3: As we need to detect FAT partition, implement a helper that
> can be used both from GPT code and "fat-bootblock?"
>
> patch 4: Implement GPT FAT for LVM suport and make GPT detection code
> robust
Thanks, pushed to github.
>
> Changelog v3:
> * Dropped patch for renaming "block" variable
> * Fix bug in seek-pos updation code
>
> Changelog V2:
> * Optimize gpt detection code
> * Fixed stack comments
> * Rename verify-gpt-partition, as it was doing more than that. Added
> comments.
>
> Nikunj A Dadhania (4):
> disk-label: simplify gpt-prep-partition? routine
> introduce 8-byte LE helpers
> disk-label: introduce helper to check fat filesystem
> disk-label: add support for booting from GPT FAT partition
>
> slof/fs/little-endian.fs | 6 ++
> slof/fs/packages/disk-label.fs | 162 +++++++++++++++++++++++++++--------------
> 2 files changed, 112 insertions(+), 56 deletions(-)
>
--
Alexey
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH SLOF v4 1/4] disk-label: simplify gpt-prep-partition? routine
2015-07-04 1:42 ` Alexey Kardashevskiy
@ 2015-07-04 11:57 ` Nikunj A Dadhania
0 siblings, 0 replies; 8+ messages in thread
From: Nikunj A Dadhania @ 2015-07-04 11:57 UTC (permalink / raw)
To: Alexey Kardashevskiy, linuxppc-dev, thuth, segher; +Cc: dvaleev
Alexey Kardashevskiy <aik@ozlabs.ru> writes:
> On 07/02/2015 09:35 PM, Nikunj A Dadhania wrote:
>> Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
>> Reviewed-by: Thomas Huth <thuth@redhat.com>
>
> If it does not change SLOF behaviour in any way (and it does not,
> right?),
It does not.
> it would be nice to see in the commit log.
>
>
>> ---
>> slof/fs/packages/disk-label.fs | 41 +++++++++++++++--------------------------
>> 1 file changed, 15 insertions(+), 26 deletions(-)
>>
>> diff --git a/slof/fs/packages/disk-label.fs b/slof/fs/packages/disk-label.fs
>> index fe1c25e..f1f083a 100644
>> --- a/slof/fs/packages/disk-label.fs
>> +++ b/slof/fs/packages/disk-label.fs
>> @@ -352,42 +352,31 @@ CONSTANT /gpt-part-entry
>> drop 0
>> ;
>>
>> -\ Check for GPT PReP partition GUID
>> -9E1A2D38 CONSTANT GPT-PREP-PARTITION-1
>> -C612 CONSTANT GPT-PREP-PARTITION-2
>> -4316 CONSTANT GPT-PREP-PARTITION-3
>> -AA26 CONSTANT GPT-PREP-PARTITION-4
>> -8B49521E5A8B CONSTANT GPT-PREP-PARTITION-5
>> +\ Check for GPT PReP partition GUID. Only first 3 blocks are
>> +\ byte-swapped treating last two blocks as contigous for simplifying
>> +\ comparison
>> +9E1A2D38 CONSTANT GPT-PREP-PARTITION-1
>> +C612 CONSTANT GPT-PREP-PARTITION-2
>> +4316 CONSTANT GPT-PREP-PARTITION-3
>> +AA268B49521E5A8B CONSTANT GPT-PREP-PARTITION-4
>>
>> : gpt-prep-partition? ( -- true|false )
>> - block gpt-part-entry>part-type-guid l@-le GPT-PREP-PARTITION-1 = IF
>> - block gpt-part-entry>part-type-guid 4 + w@-le
>> - GPT-PREP-PARTITION-2 = IF
>> - block gpt-part-entry>part-type-guid 6 + w@-le
>> - GPT-PREP-PARTITION-3 = IF
>> - block gpt-part-entry>part-type-guid 8 + w@
>> - GPT-PREP-PARTITION-4 = IF
>> - block gpt-part-entry>part-type-guid a + w@
>> - block gpt-part-entry>part-type-guid c + l@ swap lxjoin
>> - GPT-PREP-PARTITION-5 = IF
>> - TRUE EXIT
>> - THEN
>> - THEN
>> - THEN
>> - THEN
>> - THEN
>> - FALSE
>> + block gpt-part-entry>part-type-guid
>> + dup l@-le GPT-PREP-PARTITION-1 <> IF drop false EXIT THEN
>> + dup 4 + w@-le GPT-PREP-PARTITION-2 <> IF drop false EXIT THEN
>> + dup 6 + w@-le GPT-PREP-PARTITION-3 <> IF drop false EXIT THEN
>> + 8 + x@ GPT-PREP-PARTITION-4 =
>> ;
>>
>> : load-from-gpt-prep-partition ( addr -- size )
>> - no-gpt? IF drop FALSE EXIT THEN
>> + no-gpt? IF drop false EXIT THEN
>> debug-disk-label? IF
>> cr ." GPT partition found " cr
>> THEN
>> 1 read-sector block gpt>part-entry-lba l@-le
>> block-size * to seek-pos
>> block gpt>part-entry-size l@-le to gpt-part-size
>> - block gpt>num-part-entry l@-le dup 0= IF FALSE EXIT THEN
>> + block gpt>num-part-entry l@-le dup 0= IF false EXIT THEN
>> 1+ 1 ?DO
>> seek-pos 0 seek drop
>> block gpt-part-size read drop gpt-prep-partition? IF
>> @@ -405,7 +394,7 @@ AA26 CONSTANT GPT-PREP-PARTITION-4
>> THEN
>> seek-pos gpt-part-size i * + to seek-pos
>> LOOP
>> - FALSE
>> + false
>> ;
>>
>> \ Extract the boot loader path from a bootinfo.txt file
>>
>
>
> --
> Alexey
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2015-07-04 11:58 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-02 11:35 [PATCH SLOF v4 0/4] GPT fixes and LVM support with FAT Nikunj A Dadhania
2015-07-02 11:35 ` [PATCH SLOF v4 1/4] disk-label: simplify gpt-prep-partition? routine Nikunj A Dadhania
2015-07-04 1:42 ` Alexey Kardashevskiy
2015-07-04 11:57 ` Nikunj A Dadhania
2015-07-02 11:35 ` [PATCH SLOF v4 2/4] introduce 8-byte LE helpers Nikunj A Dadhania
2015-07-02 11:35 ` [PATCH SLOF v4 3/4] disk-label: introduce helper to check fat filesystem Nikunj A Dadhania
2015-07-02 11:35 ` [PATCH SLOF v4 4/4] disk-label: add support for booting from GPT FAT partition Nikunj A Dadhania
2015-07-04 1:55 ` [PATCH SLOF v4 0/4] GPT fixes and LVM support with FAT Alexey Kardashevskiy
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.