From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1VcRet-0006W5-7g for mharc-grub-devel@gnu.org; Fri, 01 Nov 2013 23:13:55 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42633) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VcRel-0006VD-Qc for grub-devel@gnu.org; Fri, 01 Nov 2013 23:13:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VcReg-0001zz-Qz for grub-devel@gnu.org; Fri, 01 Nov 2013 23:13:47 -0400 Received: from mail-la0-x232.google.com ([2a00:1450:4010:c03::232]:38180) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VcReg-0001zm-6Z for grub-devel@gnu.org; Fri, 01 Nov 2013 23:13:42 -0400 Received: by mail-la0-f50.google.com with SMTP id eo20so550044lab.9 for ; Fri, 01 Nov 2013 20:13:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:subject:message-id:in-reply-to:references:mime-version :content-type:content-transfer-encoding; bh=gM9pe/jabYcgQ71Tm6DJEz7AySq5FKvEabHnQszJ5pI=; b=W8OaeMNVi1Ef1FrvUK6XOK5zbibm3IV+S66J4gdsMzKw7XgbBM4XRzzW4z7zae1dmn u7z4/AR3UU99WTdp4QW57Z/rf9+q2DB7sDvIBIwh2dvCGt3X7IBl0fr5pON2JEH215j6 L2c7R6Itc4RoSjXIJCegyFi+6VPwam4HGkq9ZRAKBd3IcQPIYZtEsSx3hZM+7/vrCyA1 NQPRmoQfJupr6CbVENvJjkyzf5Jft2pTnJaB/fc/neOOawO72w9l+QfNitoTdtTImza7 y7KALzy3y6tgK0hV5CSs7wdmhG8r6qzFgPQXpBn6HUiMdJIyzQCJh4iT3as+vLf35rMH U6oQ== X-Received: by 10.152.45.42 with SMTP id j10mr3723157lam.15.1383362019439; Fri, 01 Nov 2013 20:13:39 -0700 (PDT) Received: from opensuse.site (ppp91-76-174-89.pppoe.mtu-net.ru. [91.76.174.89]) by mx.google.com with ESMTPSA id f4sm11054170lah.0.2013.11.01.20.13.38 for (version=SSLv3 cipher=RC4-SHA bits=128/128); Fri, 01 Nov 2013 20:13:38 -0700 (PDT) Date: Sat, 2 Nov 2013 07:13:36 +0400 From: Andrey Borzenkov To: grub-devel@gnu.org Subject: Re: [PATCH v0] Support to disable reed-solomon codes Message-ID: <20131102071336.7cff1833@opensuse.site> In-Reply-To: <1383350640-13907-1-git-send-email-jonmccune@google.com> References: <1383350640-13907-1-git-send-email-jonmccune@google.com> X-Mailer: Claws Mail 3.9.2 (GTK+ 2.24.18; x86_64-suse-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: 8bit X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:4010:c03::232 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 02 Nov 2013 03:13:53 -0000 В Fri, 1 Nov 2013 17:04:00 -0700 Jon McCune пишет: > * 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 > --- > 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 ."; 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 "