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

[Xen-changelog] Improve the IDE HD geometry auto detection algorithm.



# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID e3dcc10765ea3512306665b07c621ba80da5cde8
# Parent  2420e309074b3761ebeb289c03da4109659d0dad

Improve the IDE HD geometry auto detection algorithm.
Signed-off-by: Nitin A Kamble <nitin.a.kamble@xxxxxxxxx>
Signed-off-by: Asit K Mallick <asit.k.mallick@xxxxxxxxx>
Signed-off-by: Arun Sharma <arun.sharma@xxxxxxxxx>

diff -r 2420e309074b -r e3dcc10765ea tools/ioemu/hw/ide.c
--- a/tools/ioemu/hw/ide.c      Fri Jul  1 17:26:37 2005
+++ b/tools/ioemu/hw/ide.c      Fri Jul  1 21:24:09 2005
@@ -1850,7 +1850,11 @@
                a cylinder boundary */
             s->heads = p->end_head + 1;
             s->sectors = p->end_sector & 63;
+            if (s->sectors == 0)
+                continue;
             s->cylinders = s->nb_sectors / (s->heads * s->sectors);
+            if (s->cylinders < 1 || s->cylinders > 16383)
+                continue;
 #if 0
             printf("guessed partition: CHS=%d %d %d\n", 
                    s->cylinders, s->heads, s->sectors);
@@ -1884,8 +1888,12 @@
                 s->sectors = secs;
             } else {
                 ide_guess_geometry(s);
-                if (s->cylinders == 0) {
-                    /* if no geometry, use a LBA compatible one */
+
+                /* if heads > 16, it means that a BIOS LBA
+                   translation was active, so the default
+                   hardware geometry is OK */
+                if ((s->heads > 16) || (s->cylinders == 0)) {
+                    /* if no geometry, use a standard physical disk geometry */
                     cylinders = nb_sectors / (16 * 63);
                     if (cylinders > 16383)
                         cylinders = 16383;

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.