All of lore.kernel.org
 help / color / mirror / Atom feed
* [MULTIBOOT2 SPEC PATCH V2] multiboot2: Add module load and preference tag
@ 2020-05-07 22:09 Zide Chen
  2020-05-13 15:53 ` Daniel Kiper
  0 siblings, 1 reply; 4+ messages in thread
From: Zide Chen @ 2020-05-07 22:09 UTC (permalink / raw)
  To: grub-devel; +Cc: Zide Chen

In the cases of users have preferences over Multiboot2 module load
addresses, currently GRUB has no way to achieve it.

Similar to the relocatable header tag, this new tag allows users to
specify the minimum and maximum load addresses, and other load
preferences on Multiboot2 modules.

Signed-off-by: Zide Chen <zide.chen@intel.com>
---
 doc/multiboot.texi | 41 +++++++++++++++++++++++++++++++++++++++++
 doc/multiboot2.h   | 11 +++++++++++
 2 files changed, 52 insertions(+)

diff --git a/doc/multiboot.texi b/doc/multiboot.texi
index df8a0d056e76..758ef7fd1e2d 100644
--- a/doc/multiboot.texi
+++ b/doc/multiboot.texi
@@ -356,6 +356,7 @@ executable header.
 * Module alignment tag::
 * EFI boot services tag::
 * Relocatable header tag::
+* Module load preferences tag::
 
 @end menu
 
@@ -730,6 +731,46 @@ Boot loader should follow it. @samp{0} means none, @samp{1} means
 load image at lowest possible address but not lower than min_addr
 and @samp{2} means load image at highest possible address but not
 higher than max_addr.
+
+@node Module load preferences tag
+@subsection Module load preferences tag
+
+@example
+@group
+        +-------------------+
+u16     | type = 11         |
+u16     | flags             |
+u32     | size = 20         |
+u32     | min_addr          |
+u32     | max_addr          |
+u32     | preference        |
+        +-------------------+
+@end group
+@end example
+
+This tag is independent to the relocatable header tag. All of the
+address fields in this tag are physical addresses.
+
+The meaning of each field is as follows:
+
+@table @code
+@item min_addr
+Lowest possible physical address at which any modules should be
+loaded. The bootloader cannot load any part of any modules below
+this address.
+
+@item max_addr
+Highest possible physical address at which any loaded modules should
+end. The bootloader cannot load any part of any modules above this
+address.
+
+@item preference
+It contains load address placement suggestion for boot loader.
+Boot loader should follow it. @samp{0} means load modules not lower
+than min_addr and not higher than max_addr, but no preference on either
+lower or higher address. @samp{1} means load modules at lowest possible
+address but not lower than min_addr. @samp{2} means load modules at
+highest possible address but not higher than max_addr.
 @end table
 
 @node Machine state
diff --git a/doc/multiboot2.h b/doc/multiboot2.h
index b181607075b2..a68013ad932f 100644
--- a/doc/multiboot2.h
+++ b/doc/multiboot2.h
@@ -75,6 +75,7 @@
 #define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI32  8
 #define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64  9
 #define MULTIBOOT_HEADER_TAG_RELOCATABLE  10
+#define MULTIBOOT_HEADER_TAG_MODULE_LOAD_PREFERENCES  11
 
 #define MULTIBOOT_ARCHITECTURE_I386  0
 #define MULTIBOOT_ARCHITECTURE_MIPS32  4
@@ -179,6 +180,16 @@ struct multiboot_header_tag_relocatable
   multiboot_uint32_t preference;
 };
 
+struct multiboot_header_tag_module_load_preferences
+{
+  multiboot_uint16_t type;
+  multiboot_uint16_t flags;
+  multiboot_uint32_t size;
+  multiboot_uint32_t min_addr;
+  multiboot_uint32_t max_addr;
+  multiboot_uint32_t preference;
+};
+
 struct multiboot_color
 {
   multiboot_uint8_t red;
-- 
2.17.1



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

* Re: [MULTIBOOT2 SPEC PATCH V2] multiboot2: Add module load and preference tag
  2020-05-07 22:09 [MULTIBOOT2 SPEC PATCH V2] multiboot2: Add module load and preference tag Zide Chen
@ 2020-05-13 15:53 ` Daniel Kiper
  2020-05-13 22:46   ` Chen, Zide
  0 siblings, 1 reply; 4+ messages in thread
From: Daniel Kiper @ 2020-05-13 15:53 UTC (permalink / raw)
  To: Zide Chen; +Cc: grub-devel

On Thu, May 07, 2020 at 03:09:23PM -0700, Zide Chen wrote:
> In the cases of users have preferences over Multiboot2 module load
> addresses, currently GRUB has no way to achieve it.
>
> Similar to the relocatable header tag, this new tag allows users to
> specify the minimum and maximum load addresses, and other load
> preferences on Multiboot2 modules.
>
> Signed-off-by: Zide Chen <zide.chen@intel.com>
> ---
>  doc/multiboot.texi | 41 +++++++++++++++++++++++++++++++++++++++++
>  doc/multiboot2.h   | 11 +++++++++++
>  2 files changed, 52 insertions(+)
>
> diff --git a/doc/multiboot.texi b/doc/multiboot.texi
> index df8a0d056e76..758ef7fd1e2d 100644
> --- a/doc/multiboot.texi
> +++ b/doc/multiboot.texi
> @@ -356,6 +356,7 @@ executable header.
>  * Module alignment tag::
>  * EFI boot services tag::
>  * Relocatable header tag::
> +* Module load preferences tag::

Please bump spec version to 2.1.

>  @end menu
>
> @@ -730,6 +731,46 @@ Boot loader should follow it. @samp{0} means none, @samp{1} means
>  load image at lowest possible address but not lower than min_addr
>  and @samp{2} means load image at highest possible address but not
>  higher than max_addr.
> +
> +@node Module load preferences tag
> +@subsection Module load preferences tag
> +
> +@example
> +@group
> +        +-------------------+
> +u16     | type = 11         |
> +u16     | flags             |
> +u32     | size = 20         |
> +u32     | min_addr          |
> +u32     | max_addr          |

I have an itching to add "align" member here like in the relocatable
header tag. I can imagine that some kernels may want aligned modules. If
you do that then we have to resolve conflict with the module alignment
tag. I think if both tags are in the image header then the bootloader
should use max(align, PAGE_SIZE). This behavior should be described in
one way or another next to both tags.

> +u32     | preference        |
> +        +-------------------+
> +@end group
> +@end example
> +

Please describe shortly what this tag does. You can find good example in
relocatable header tag.

> +This tag is independent to the relocatable header tag. All of the

This sentence should go to the end of the tag description.

> +address fields in this tag are physical addresses.
> +
> +The meaning of each field is as follows:
> +
> +@table @code
> +@item min_addr
> +Lowest possible physical address at which any modules should be
> +loaded. The bootloader cannot load any part of any modules below
> +this address.
> +
> +@item max_addr
> +Highest possible physical address at which any loaded modules should
> +end. The bootloader cannot load any part of any modules above this
> +address.
> +
> +@item preference
> +It contains load address placement suggestion for boot loader.
> +Boot loader should follow it. @samp{0} means load modules not lower
> +than min_addr and not higher than max_addr, but no preference on either
> +lower or higher address. @samp{1} means load modules at lowest possible
> +address but not lower than min_addr. @samp{2} means load modules at
> +highest possible address but not higher than max_addr.

Please copy preference description from relocatable header tag and
replace "image" with "module".

Daniel


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

* RE: [MULTIBOOT2 SPEC PATCH V2] multiboot2: Add module load and preference tag
  2020-05-13 15:53 ` Daniel Kiper
@ 2020-05-13 22:46   ` Chen, Zide
  2020-05-13 23:50     ` Chen, Zide
  0 siblings, 1 reply; 4+ messages in thread
From: Chen, Zide @ 2020-05-13 22:46 UTC (permalink / raw)
  To: Daniel Kiper; +Cc: grub-devel

Hi Daniel,

> -----Original Message-----
> From: Daniel Kiper <dkiper@net-space.pl>
> Sent: Wednesday, May 13, 2020 8:54 AM
> To: Chen, Zide <zide.chen@intel.com>
> Cc: grub-devel@gnu.org
> Subject: Re: [MULTIBOOT2 SPEC PATCH V2] multiboot2: Add module load and preference tag
> 
> > diff --git a/doc/multiboot.texi b/doc/multiboot.texi
> > index df8a0d056e76..758ef7fd1e2d 100644
> > --- a/doc/multiboot.texi
> > +++ b/doc/multiboot.texi
> > @@ -356,6 +356,7 @@ executable header.
> >  * Module alignment tag::
> >  * EFI boot services tag::
> >  * Relocatable header tag::
> > +* Module load preferences tag::
> 
> Please bump spec version to 2.1.

OK, will do it, also will add 2020 to the copyright in configure.ac.

 
> >  @end menu
> >
> > @@ -730,6 +731,46 @@ Boot loader should follow it. @samp{0} means none, @samp{1} means
> >  load image at lowest possible address but not lower than min_addr
> >  and @samp{2} means load image at highest possible address but not
> >  higher than max_addr.
> > +
> > +@node Module load preferences tag
> > +@subsection Module load preferences tag
> > +
> > +@example
> > +@group
> > +        +-------------------+
> > +u16     | type = 11         |
> > +u16     | flags             |
> > +u32     | size = 20         |
> > +u32     | min_addr          |
> > +u32     | max_addr          |
> 
> I have an itching to add "align" member here like in the relocatable
> header tag. I can imagine that some kernels may want aligned modules. If
> you do that then we have to resolve conflict with the module alignment
> tag. I think if both tags are in the image header then the bootloader
> should use max(align, PAGE_SIZE). This behavior should be described in
> one way or another next to both tags.

Yes, I thought about the align member.
Sure, I can add the it to the spec. Since we give user the flexibility to specify alignment,
why we would overwrite user's choice to force it to minimum PAGE_SIZE aligned?
How about pick the maximum alignment of the two tags?

But in GRUB's implementation, since GRUB ignores the module alignment tag, the behavior 
Could be these:

If align is zero in this tag: module alignment is PAGE_SIZE (

If align is none-zero, Grub will use whatever value it is to load modules.
 
> > +u32     | preference        |
> > +        +-------------------+
> > +@end group
> > +@end example
> > +
> 
> Please describe shortly what this tag does. You can find good example in
> relocatable header tag.

OK.

> > +This tag is independent to the relocatable header tag. All of the
> 
> This sentence should go to the end of the tag description.

OK.

 
> > +address fields in this tag are physical addresses.
> > +
> > +The meaning of each field is as follows:
> > +
> > +@table @code
> > +@item min_addr
> > +Lowest possible physical address at which any modules should be
> > +loaded. The bootloader cannot load any part of any modules below
> > +this address.
> > +
> > +@item max_addr
> > +Highest possible physical address at which any loaded modules should
> > +end. The bootloader cannot load any part of any modules above this
> > +address.
> > +
> > +@item preference
> > +It contains load address placement suggestion for boot loader.
> > +Boot loader should follow it. @samp{0} means load modules not lower
> > +than min_addr and not higher than max_addr, but no preference on either
> > +lower or higher address. @samp{1} means load modules at lowest possible
> > +address but not lower than min_addr. @samp{2} means load modules at
> > +highest possible address but not higher than max_addr.
> 
> Please copy preference description from relocatable header tag and
> replace "image" with "module".

Will do.

Best Regards,
Zide

> Daniel




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

* RE: [MULTIBOOT2 SPEC PATCH V2] multiboot2: Add module load and preference tag
  2020-05-13 22:46   ` Chen, Zide
@ 2020-05-13 23:50     ` Chen, Zide
  0 siblings, 0 replies; 4+ messages in thread
From: Chen, Zide @ 2020-05-13 23:50 UTC (permalink / raw)
  To: Daniel Kiper; +Cc: grub-devel

Hi Daniel,

> -----Original Message-----
> From: Chen, Zide
> Sent: Wednesday, May 13, 2020 3:39 PM
> To: 'Daniel Kiper' <dkiper@net-space.pl>
> Cc: grub-devel@gnu.org
> Subject: RE: [MULTIBOOT2 SPEC PATCH V2] multiboot2: Add module load and preference tag
> > >
> > > @@ -730,6 +731,46 @@ Boot loader should follow it. @samp{0} means none, @samp{1} means
> > >  load image at lowest possible address but not lower than min_addr
> > >  and @samp{2} means load image at highest possible address but not
> > >  higher than max_addr.
> > > +
> > > +@node Module load preferences tag
> > > +@subsection Module load preferences tag
> > > +
> > > +@example
> > > +@group
> > > +        +-------------------+
> > > +u16     | type = 11         |
> > > +u16     | flags             |
> > > +u32     | size = 20         |
> > > +u32     | min_addr          |
> > > +u32     | max_addr          |
> >
> > I have an itching to add "align" member here like in the relocatable
> > header tag. I can imagine that some kernels may want aligned modules. If
> > you do that then we have to resolve conflict with the module alignment
> > tag. I think if both tags are in the image header then the bootloader
> > should use max(align, PAGE_SIZE). This behavior should be described in
> > one way or another next to both tags.
> 
> Yes, I thought about the align member.
> Sure, I can add the it to the spec. Since we give user the flexibility to specify alignment,
> why we would overwrite user's choice to force it to minimum PAGE_SIZE aligned?
> How about pick the maximum alignment of the two tags?
> 
> But in GRUB's implementation, since GRUB ignores the module alignment tag, the behavior
> Could be these:
> 
> If align is zero in this tag: module alignment is PAGE_SIZE (
> 
> If align is none-zero, Grub will use whatever value it is to load modules.

You are right. Please ignore my previous comments. I have sent out the updated patch for review.

-Zide



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

end of thread, other threads:[~2020-05-13 23:50 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-07 22:09 [MULTIBOOT2 SPEC PATCH V2] multiboot2: Add module load and preference tag Zide Chen
2020-05-13 15:53 ` Daniel Kiper
2020-05-13 22:46   ` Chen, Zide
2020-05-13 23:50     ` Chen, Zide

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.