On Thu, May 11, 2017, 01:21 Eric Snowberg <[email protected]> wrote:
> > > On May 10, 2017, at 4:42 PM, Vladimir 'phcoder' Serbinenko < > [email protected]> wrote: > > > > > > > > On Wed, Jun 29, 2016, 23:47 Eric Snowberg <[email protected]> > wrote: > > Add block-list GPT support for SPARC. The OBP "load" and "boot" methods > > are partition aware and neither command can see the partition table. Also > > neither command can address the entire physical disk. When the install > happens, > > grub generates the block-list entries based on the beginning of the > physical > > disk, not the beginning of the parition. This patch fixes the block-list > > entries so they match what OBP expects during boot for a GPT disk. > > > > T5 and above now supports GPT as well as VTOC. > > > > This patch has been tested on T5-2 and newer SPARC systems. > > > > Signed-off-by: Eric Snowberg <[email protected]> > > --- > > grub-core/osdep/linux/blocklist.c | 5 +++++ > > util/setup.c | 12 +++++++++--- > > 2 files changed, 14 insertions(+), 3 deletions(-) > > > > diff --git a/grub-core/osdep/linux/blocklist.c > b/grub-core/osdep/linux/blocklist.c > > index c77d608..caf8d4e 100644 > > --- a/grub-core/osdep/linux/blocklist.c > > +++ b/grub-core/osdep/linux/blocklist.c > > @@ -58,6 +58,11 @@ grub_install_get_blocklist (grub_device_t root_dev, > > struct fiemap fie1; > > int fd; > > > > +#ifdef __sparc__ > > + if (grub_strstr (container->partmap->name, "gpt")) > > + container_start = 0; > > +#endif > > + > > This makes ifdef conditional on platform of the tool, not of the > binaries and they can be different. > > Exactly, they are different, that is why the ifdef was added for SPARC. > The tool was putting the wrong value into the binary. > No. What I mean is that someone with x86 cpu fan prepare a disk for sparc64. He would compile tools for x86 and binaries for sparc64. With your code tool will end up with wrong offsets. > > > Also there are several implementations of blocklist retrieving for > different platform. This condition needs to be detected and adjusted for in > the caller (setup) > > How do you recommend I adjusted it in the setup when container_start is > obtained from grub_partition_get_start? > Just subtract partition offset in save_blocklists or its caller > > > > /* Write the first two sectors of the core image onto the disk. */ > > grub_util_info ("opening the core image `%s'", core_path); > > fd = open (core_path, O_RDONLY); > > diff --git a/util/setup.c b/util/setup.c > > index 8aa5a39..5908498 100644 > > --- a/util/setup.c > > +++ b/util/setup.c > > @@ -721,15 +721,21 @@ unable_to_embed: > > { > > char *buf, *ptr = core_img; > > size_t len = core_size; > > - grub_uint64_t blk; > > + grub_uint64_t blk, offset = 0; > > grub_partition_t container = core_dev->disk->partition; > > grub_err_t err; > > > > core_dev->disk->partition = 0; > > +#ifdef GRUB_SETUP_SPARC64 > > + { > > + if (grub_strstr (container->partmap->name, "gpt")) > > + offset = grub_partition_get_start (container); > > + } > > +#endif > > > > buf = xmalloc (core_size); > > blk = bl.first_sector; > > - err = grub_disk_read (core_dev->disk, blk, 0, > GRUB_DISK_SECTOR_SIZE, buf); > > + err = grub_disk_read (core_dev->disk, blk + offset, 0, > GRUB_DISK_SECTOR_SIZE, buf); > > if (err) > > grub_util_error (_("cannot read `%s': %s"), core_dev->disk->name, > > grub_errmsg); > > @@ -748,7 +754,7 @@ unable_to_embed: > > if (cur > len) > > cur = len; > > > > - err = grub_disk_read (core_dev->disk, blk, 0, cur, buf); > > + err = grub_disk_read (core_dev->disk, blk + offset, 0, cur, buf); > > if (err) > > grub_util_error (_("cannot read `%s': %s"), > core_dev->disk->name, > > grub_errmsg); > > -- > > 1.7.1 > > > > > > _______________________________________________ > > Grub-devel mailing list > > [email protected] > > https://lists.gnu.org/mailman/listinfo/grub-devel > > _______________________________________________ > > Grub-devel mailing list > > [email protected] > > https://lists.gnu.org/mailman/listinfo/grub-devel > > > _______________________________________________ > Grub-devel mailing list > [email protected] > https://lists.gnu.org/mailman/listinfo/grub-devel >
_______________________________________________ Grub-devel mailing list [email protected] https://lists.gnu.org/mailman/listinfo/grub-devel
