On Thu, May 11, 2017, 02:37 Vladimir 'phcoder' Serbinenko <[email protected]>
wrote:

>
>
> 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
>
Sorry, I meant *not* 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

Reply via email to