lkml.org 
[lkml]   [1999]   [Jul]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH] /proc/ide/hd?/geometry (un)signedness 2.2.10, 2.3.8
Hi, 

check this:

| emma@emma1:~ > uname -a
| Linux emma1 2.2.10 #4 Wed Jun 23 22:58:57 CEST 1999 i586 unknown
| emma@emma1:~ > cat /proc/ide/hda/geometry
> physical -25976/16/63
| logical 2482/255/63

(Western Digital Caviar AC420400, 20 GB UDMA drive)

Should not in ide-proc.c around line 715 the sprintf parameters %hi be
replaced by %hu so that the kernel returns the proper "39560" cylinder
count? Looking at ide.h, the cyl is unsigned short anyways so %hi is
actually really wrong (Just wondering why gcc doesn't warn although
-Wall is set).

Find the patch against 2.2.10 attached. (Also works for 2.3.8 with 9
line offset, untested since 2.3.8 doesn't compile for me.)



Below the hdparm -i stuff for that drive:

| Model=WDC AC420400D, FwRev=J58OA30K, SerialNo=WD-WT662
| Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
> RawCHS=39560/16/63, TrkSize=0, SectSize=0, ECCbytes=34
| BuffType=3(DualPortCache), BuffSize=1966kB, MaxMultSect=16, MultSect=off
| DblWordIO=no, maxPIO=2(fast), DMA=yes, maxDMA=2(fast)
| CurCHS=2482/255/63, CurSects=39876480, LBA=yes, LBAsects=39876480
| tDMA={min:120,rec:120}, DMA modes: mword0 mword1 mword2
| IORDY=on/off, tPIO={min:240,w/IORDY:120}, PIO modes: mode3 mode4



BTW: What will happen for IDE drives that are larger than 32256 MB (31.5 GB
== 33.8 marketing GB)? That's the limit for 65535/16/63 geometry.


Find the patch attached as MIME text.

Please CC: your replies.

--
Matthias Andree

There's no place like ~
--- linux/drivers/block/ide-proc.c.orig Sat Jul 3 11:52:17 1999
+++ linux/drivers/block/ide-proc.c Sat Jul 3 11:55:26 1999
@@ -515,10 +515,10 @@
ide_drive_t *drive = (ide_drive_t *) data;
char *out = page;
int len;

- out += sprintf(out,"physical %hi/%hi/%hi\n", drive->cyl, drive->head, drive->sect);
- out += sprintf(out,"logical %hi/%hi/%hi\n", drive->bios_cyl, drive->bios_head, drive->bios_sect);
+ out += sprintf(out,"physical %hu/%hu/%hu\n", drive->cyl, drive->head, drive->sect);
+ out += sprintf(out,"logical %hu/%hu/%hu\n", drive->bios_cyl, drive->bios_head, drive->bios_sect);
len = out - page;
PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
}
\
 
 \ /
  Last update: 2005-03-22 13:52    [W:0.211 / U:0.020 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site