[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Fw: "partnew" Command Writes Wrong Ending Cylinder in MPT
From: |
Steve Burtchin |
Subject: |
Fw: "partnew" Command Writes Wrong Ending Cylinder in MPT |
Date: |
Sun, 4 Feb 2007 16:23:48 -0500 |
----- Original Message -----
From: "Steve Burtchin" <address@hidden>
To: "adrian15" <address@hidden>
Sent: Friday, February 02, 2007 6:45 AM
Subject: Re: "partnew" Command Writes Wrong Ending Cylinder in MPT
>
> ----- Original Message -----
> From: "adrian15" <address@hidden>
> To: "Steve Burtchin" <address@hidden>
> Sent: Thursday, February 01, 2007 6:30 AM
> Subject: Re: "partnew" Command Writes Wrong Ending Cylinder in MPT
>
>
> > See the attached cdrom once in English cdrom press 'c' key and you'll
> > get a grub console from which you can run the new command:
> >
> > partnewbeta
> >
> Thanks, this worked great!
>
>
> > I've also attached the builtins.c file so that you search for the
> > partnewbeta string and see what you need to add a new command.
> >
> So I put my "epteditbeta" function code in the body of builtins.c and also
> add an entry for it in the "builtin" structure at the end of the file.
That
> is very straightforward. The stuff I am unsure about is what has to be
put
> into "ChangeLog", "grub.texi ", "grub.info", or other file and how it
gets
> there (see the attachment). Some of this looks like it's needed.
>
> The only other question I had was the use of "entry" (see attached source
> code).
> In the lines:
> /* Adjust for "current" or "next" slot. */
> if (ept_slot == 'n') entry++;
> Have I made the right assumption of how "entry" is used?
>
>
> > > The data in the "buf_geom"
> > > structure seems to get passed around quite a bit (eg. the "geometry"
> > > function reports 1021 cylinders also [here its the value of
> > > "geom.cylinders"], if that matters?).
> >
> > Do you mean geom.cylinders instead of buf_geom.cylinders ...
interesting.
> >
> Exactly. It gets displayed here:
>
> grub_printf ("drive 0x%x: C/H/S = %d/%d/%d, "
> "The number of sectors = %d, %s\n",
> current_drive,
> geom.cylinders, geom.heads, geom.sectors,
> geom.total_sectors, msg);
>
> I would bet that "&geom.cylinders" is the same as "&buf_geom.cylinders".
>
> > > bufgeomcylinders = buf_geom.cylinders
> > > bufgeomcylinders+=2;
> > > if (cylinder >= bufgeomcylinders)
> > > cylinder = bufgeomcylinders - 1;
> >
> > That's the patch that I have applied.
> > >
> > >
> > > leaving the "buf_geom" structure unchanged, and avoiding the potential
> of
> > > awakening that earlier bug.
> >
> > I do not agree with you but you may be right so I've applied your patch.
> >
> You would know better than me. This is safest though, to leave the global
> "buf_geom.cylinders" alone. Even if no earlier bug, at least there is no
> risk of creating a new bug. It might have always maxed out at 1021 and
> never caused problem for anyone. Possibly only a serious risk for a
> partition beginning or ending at cylinder 1022 or 1023 with the os using
CHS
> addressing.
>
>
> > You'll tell me if you have any problem.
> >
> > adrian15
> >
> I have tested thoroughly and the patched code always writes the correct
> starting/ending cylinder IMO. I tested for all start/end cylinder values
> from 1019 thru 1024.
>
> There was another patch I had suggested for this function that you left
out
> of this beta. This lets you zero out a whole slot in the MPT with a
command
> like: "partnew (hd0,3) 0x00 0 0".
>
> /* Convert a LBA address to a CHS address in the INT 13 format. */
> auto void lba_to_chs (int lba, int *cl, int *ch, int *dh);
> void lba_to_chs (int lba, int *cl, int *ch, int *dh)
> {
> int cylinder, head, sector;
>
> /* begin patch */
> if (lba <= 0)
> {
> *cl = 0;
> *ch = 0;
> *dh = 0;
> }
> else
> {
>
> /* end patch */
> sector = lba % buf_geom.sectors + 1;
> head = (lba / buf_geom.sectors) % buf_geom.heads;
> cylinder = lba / (buf_geom.sectors * buf_geom.heads);
>
> if (cylinder >= buf_geom.cylinders)
> cylinder = buf_geom.cylinders - 1;
>
> *cl = sector | ((cylinder & 0x300) >> 2);
> *ch = cylinder & 0xFF;
> *dh = head;
>
> /* begin patch */
> }
>
> /* end patch */
> }
>
New_GRUB_Command_misc.txt
Description: Text document
EPTEDIT_Source.rtf
Description: MS-Word document
- Fw: "partnew" Command Writes Wrong Ending Cylinder in MPT, Steve Burtchin, 2007/02/04
- Fw: "partnew" Command Writes Wrong Ending Cylinder in MPT, Steve Burtchin, 2007/02/04
- Fw: "partnew" Command Writes Wrong Ending Cylinder in MPT, Steve Burtchin, 2007/02/04
- Fw: "partnew" Command Writes Wrong Ending Cylinder in MPT,
Steve Burtchin <=
- Fw: "partnew" Command Writes Wrong Ending Cylinder in MPT, Steve Burtchin, 2007/02/04
- Fw: "partnew" Command Writes Wrong Ending Cylinder in MPT, Steve Burtchin, 2007/02/04
- Re: "partnew" Command Writes Wrong Ending Cylinder in MPT, sburtchin, 2007/02/15