All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrey Borzenkov <arvidjaar@gmail.com>
To: grub-devel@gnu.org
Subject: Re: [PATCH v0] Support to disable reed-solomon codes
Date: Sat, 2 Nov 2013 07:13:36 +0400	[thread overview]
Message-ID: <20131102071336.7cff1833@opensuse.site> (raw)
In-Reply-To: <1383350640-13907-1-git-send-email-jonmccune@google.com>

В Fri,  1 Nov 2013 17:04:00 -0700
Jon McCune <jonmccune@google.com> пишет:

>  * new grub-*-setup flag to disable insertion of reed solomon codes
>  * grub-install support for option --no-rs-codes
> 

What problem does it solve?

> Signed-off-by: Jon McCune <jonmccune@google.com>
> ---
>  include/grub/util/install.h |  4 ++--
>  util/grub-install.in        |  7 ++++++-
>  util/grub-setup.c           | 12 +++++++++++-
>  util/setup.c                | 48 +++++++++++++++++++++++----------------------
>  4 files changed, 44 insertions(+), 27 deletions(-)
> 
> diff --git a/include/grub/util/install.h b/include/grub/util/install.h
> index 7eb6141..9b33368 100644
> --- a/include/grub/util/install.h
> +++ b/include/grub/util/install.h
> @@ -53,12 +53,12 @@ void
>  grub_util_bios_setup (const char *dir,
>  		      const char *boot_file, const char *core_file,
>  		      const char *dest, int force,
> -		      int fs_probe, int allow_floppy);
> +		      int fs_probe, int allow_floppy, int no_rs_codes);
>  void
>  grub_util_sparc_setup (const char *dir,
>  		       const char *boot_file, const char *core_file,
>  		       const char *dest, int force,
> -		       int fs_probe, int allow_floppy);
> +		       int fs_probe, int allow_floppy, int no_rs_codes);
>  
>  char *
>  grub_install_get_image_targets_string (void);
> diff --git a/util/grub-install.in b/util/grub-install.in
> index 7cd089b..79d103f 100644
> --- a/util/grub-install.in
> +++ b/util/grub-install.in
> @@ -87,6 +87,7 @@ usage () {
>      print_option_help  "--removable" "$(gettext "the installation device is removable. This option is only available on EFI.")"
>      print_option_help  "--bootloader-id=$(gettext "ID")" "$(gettext "the ID of bootloader. This option is only available on EFI.")"
>      print_option_help "--efi-directory=$(gettext "DIR")" "$(gettext "use DIR as the EFI System Partition root.")"
> +    print_option_help "--no-rs-codes" "$(gettext "Do not apply any reed-solomon codes, even if there is enough space.")"
>  echo
>  gettext "INSTALL_DEVICE must be system device filename.";echo
>  echo
> @@ -100,6 +101,7 @@ gettext "Report bugs to <bug-grub@gnu.org>."; echo
>  allow_floppy=""
>  force_file_id=
>  efidir=
> +no_rs_codes=""
>  
>  # Check the arguments.
>  while test $# -gt 0
> @@ -199,6 +201,9 @@ do
>      --no-nvram)
>  	update_nvram=no ;;
>  
> +    --no-rs-codes)
> +	no_rs_codes="--no-rs-codes" ;;
> +
>      # This is an undocumented feature...
>      --debug)
>  	debug=yes ;;
> @@ -680,7 +685,7 @@ fi
>  # Perform the grub_modinfo_platform-dependent install
>  if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-pc" ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "sparc64-ieee1275" ] ; then
>      # Now perform the installation.
> -    "$grub_setup" ${allow_floppy} ${setup_verbose} ${setup_force} --directory="${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform" \
> +    "$grub_setup" ${allow_floppy} ${setup_verbose} ${setup_force} ${no_rs_codes} --directory="${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform" \
>  	--device-map="${device_map}" "${install_device}" || exit 1
>  elif [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-ieee1275" ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "powerpc-ieee1275" ]; then
>  
> diff --git a/util/grub-setup.c b/util/grub-setup.c
> index 90b9de0..088efcf 100644
> --- a/util/grub-setup.c
> +++ b/util/grub-setup.c
> @@ -83,6 +83,10 @@ static struct argp_option options[] = {
>        likely to make the install unbootable from HDD.  */
>     N_("make the drive also bootable as floppy (default for fdX devices). May break on some BIOSes."), 0},
>  
> +  {"no-rs-codes", 'n', 0,      0,
> +   N_("Do not apply any reed-solomon codes, even if there is enough space."), 0},
> +
> +
>    { 0, 0, 0, 0, 0, 0 }
>  };
>  
> @@ -118,6 +122,7 @@ struct arguments
>    int  fs_probe;
>    int allow_floppy;
>    char *device;
> +  int no_rs_codes;
>  };
>  
>  static error_t
> @@ -173,6 +178,10 @@ argp_parser (int key, char *arg, struct argp_state *state)
>          verbosity++;
>          break;
>  
> +      case 'n':
> +        arguments->no_rs_codes = 1;
> +        break;
> +
>        case ARGP_KEY_ARG:
>          if (state->arg_num == 0)
>            arguments->device = xstrdup(arg);
> @@ -292,7 +301,8 @@ main (int argc, char *argv[])
>  		   arguments.boot_file ? : DEFAULT_BOOT_FILE,
>  		   arguments.core_file ? : DEFAULT_CORE_FILE,
>  		   dest_dev, arguments.force,
> -		   arguments.fs_probe, arguments.allow_floppy);
> +		   arguments.fs_probe, arguments.allow_floppy,
> +		   arguments.no_rs_codes);
>  
>    /* Free resources.  */
>    grub_fini_all ();
> diff --git a/util/setup.c b/util/setup.c
> index 5b7c384..95f173e 100644
> --- a/util/setup.c
> +++ b/util/setup.c
> @@ -241,7 +241,7 @@ void
>  SETUP (const char *dir,
>         const char *boot_file, const char *core_file,
>         const char *dest, int force,
> -       int fs_probe, int allow_floppy)
> +       int fs_probe, int allow_floppy, int no_rs_codes)
>  {
>    char *core_path;
>    char *boot_img, *core_img, *boot_path;
> @@ -540,27 +540,29 @@ SETUP (const char *dir,
>      bl.first_block = (struct grub_boot_blocklist *) (core_img
>  						     + GRUB_DISK_SECTOR_SIZE
>  						     - sizeof (*bl.block));
> -
> -    grub_size_t no_rs_length;
> -    grub_set_unaligned32 ((core_img + GRUB_DISK_SECTOR_SIZE
> -			   + GRUB_KERNEL_I386_PC_REED_SOLOMON_REDUNDANCY),
> -			  grub_host_to_target32 (nsec * GRUB_DISK_SECTOR_SIZE - core_size));
> -    no_rs_length = grub_target_to_host16 
> -      (grub_get_unaligned16 (core_img
> -			     + GRUB_DISK_SECTOR_SIZE
> -			     + GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_LENGTH));
> -
> -    if (no_rs_length == 0xffff)
> -      grub_util_error ("%s", _("core.img version mismatch"));
> -
> -    void *tmp = xmalloc (core_size);
> -    grub_memcpy (tmp, core_img, core_size);
> -    grub_reed_solomon_add_redundancy (core_img + no_rs_length + GRUB_DISK_SECTOR_SIZE,
> -				      core_size - no_rs_length - GRUB_DISK_SECTOR_SIZE,
> -				      nsec * GRUB_DISK_SECTOR_SIZE
> -				      - core_size);
> -    assert (grub_memcmp (tmp, core_img, core_size) == 0);
> -    free (tmp);
> +    if (!no_rs_codes)
> +      {
> +        grub_size_t no_rs_length;
> +        grub_set_unaligned32 ((core_img + GRUB_DISK_SECTOR_SIZE
> +                               + GRUB_KERNEL_I386_PC_REED_SOLOMON_REDUNDANCY),
> +                              grub_host_to_target32 (nsec * GRUB_DISK_SECTOR_SIZE - core_size));
> +        no_rs_length = grub_target_to_host16
> +            (grub_get_unaligned16 (core_img
> +                                   + GRUB_DISK_SECTOR_SIZE
> +                                   + GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_LENGTH));
> +
> +        if (no_rs_length == 0xffff)
> +          grub_util_error ("%s", _("core.img version mismatch"));
> +
> +        void *tmp = xmalloc (core_size);
> +        grub_memcpy (tmp, core_img, core_size);
> +        grub_reed_solomon_add_redundancy (core_img + no_rs_length + GRUB_DISK_SECTOR_SIZE,
> +                                          core_size - no_rs_length - GRUB_DISK_SECTOR_SIZE,
> +                                          nsec * GRUB_DISK_SECTOR_SIZE
> +                                          - core_size);
> +        assert (grub_memcmp (tmp, core_img, core_size) == 0);
> +        free (tmp);
> +      }
>  
>      /* Write the core image onto the disk.  */
>      for (i = 0; i < nsec; i++)
> @@ -574,7 +576,7 @@ SETUP (const char *dir,
>    }
>  
>  unable_to_embed:
> -#endif
> +#endif  /* ifdef GRUB_SETUP_BIOS */
>  
>    if (dest_dev->disk->dev->id != root_dev->disk->dev->id)
>      grub_util_error ("%s", _("embedding is not possible, but this is required for "



  reply	other threads:[~2013-11-02  3:13 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-02  0:04 [PATCH v0] Support to disable reed-solomon codes Jon McCune
2013-11-02  3:13 ` Andrey Borzenkov [this message]
2013-11-03  3:05   ` Jonathan McCune
2013-11-03  3:33     ` Richard Laager
2013-11-03 22:57       ` Jonathan McCune

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20131102071336.7cff1833@opensuse.site \
    --to=arvidjaar@gmail.com \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.