qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [QEMU] [PATCH v2 0/8] Add Qemu to SeaBIOS LCHS interfac


From: Sam Eiderman
Subject: Re: [Qemu-devel] [QEMU] [PATCH v2 0/8] Add Qemu to SeaBIOS LCHS interface
Date: Mon, 17 Jun 2019 10:59:36 +0300


> On 17 Jun 2019, at 9:50, Gerd Hoffmann <address@hidden> wrote:
> 
>  Hi,
> 
>>> Ok, given that seabios has no setup any manual configuration needs to be 
>>> done via qemu.
>>> 
>>> But why do we need a new interface for that?  IDE can pass the geometry
>>> to the guest.  virtio-blk has support too (VIRTIO_BLK_F_GEOMETRY).
>>> Likewise scsi (MODE_PAGE_HD_GEOMETRY).  So this should be doable without
>>> any qemu changes.
>> 
>> This was indeed considered (all 3 methods) but it has the following issues:
>> 
>> Physical geometries of devices must now also be logical geometries with 
>> translation=none.
> 
> Yes.
> 
>> When the OS will query these devices - It will now see different physical 
>> geometries, adapted to be logical geometries.
> 
> Yes.
> 
>> I’m not sure even how to implement this without breaking existing
>> compatibility - since we don’t want to affect logical geometries of
>> currently used guests.
> 
> We can copy the logic which calculates lchs from seabios to qemu and use
> it for pchs.
> 
> The tricky part of this is how to do the switch without requiring a
> lockstep update of seabios and qemu.  seabios can't easily know whenever
> it should use the current logic (current qemu) or whenever it should
> simply use pchs with translation=none (updated qemu).
> 
> Hmm ...
> 
>> MODE_PAGE_HD_GEOMETRY does not contain the spts, only cylinders (as 3
>> byte number) and heads (as 1 byte number) and computes the spts using:
> 
> Well, there also is MODE_PAGE_FLEXIBLE_DISK_GEOMETRY.
> 
>> Moving a scsi-hd/virtio-blk with 255 physical heads to ide-hd, we will
>> still need to report 255 heads - this is possible since a whole byte
>> can be used in the “ide identify” command, but goes against the spec
>> of a maximum of 16 heads for IDE.
> 
> Why do you want migrate _to_ IDE?

Even without migration, now under SeaBIOS probably most IDE disks
report 255 heads and 63 spts due to LBA translation, while exposing
up to 16 physical heads (IDE spec).
So you can’t really report in ATA identify command your wanted logical
heads (255).

This can be solved in a very complicated way:

For virtio-blk disks - report bios geometries as physical geometries.
This might break current compatibility (showing different physical geometries)
For scsi disks - report bios geometries as physical geometries.
Implement MODE_PAGE_FLEXIBLE_DISK_GEOMETRY and translation=none - this new 
interface will help with compatibility
For IDE disks - specially craft valid physical geometries (heads <= 16) with a 
specific translation,
This is super complicated, for example to make an IDE disk report lchs of 32 
heads, 56 spts, you need a physical geometry of 16 heads, 56 spts and report 
2046 cylinders with a "large" translation - which will effectively cut down the 
number of cylinders by 2 to 1023 and multiply the heads by 2 to 32, achieving 
the desired lchs. Also we can not even make an IDE report 255 heads with 56 
spts with any translation (this is an actual value from production) - so the 
disk must be moved to scsi-hd/virtio-blk - which also breaks compatibility.

This implementation creates 3 different non conventional (PV) ways of reporting 
lchs directly between Qemu and SeaBIOS - which add a lot of technical depth for 
resolving a legacy issue. A fw-cfg value named “bootdevices” (or 
“bios-geometry”) is much more straightforward and makes it more 
readable/explicit.

WDYT?

> 
>> Overall this approach is much more complicated.
> 
> Well, adding new fw_cfg interfaces has a long term maintenance cost.
> So there should be a pretty good reason for them.
> 
> cheers,
>  Gerd
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]