Annotation of linux/fs/fasterdisk.pat, revision 1.1

1.1     ! root        1: From [email protected] Sun Mar 15 20:01:06 1992
        !             2: Received: from klaava.Helsinki.FI by kruuna.helsinki.fi with SMTP id AA04345
        !             3:   (5.65c/IDA-1.4.4 for <[email protected]>); Sun, 15 Mar 1992 20:00:45 +0200
        !             4: Received: from csi.UOttawa.CA (csi0.csi.uottawa.ca) by klaava.Helsinki.FI (4.1/SMI-4.1)
        !             5:        id AA21712; Sun, 15 Mar 92 20:00:40 +0200
        !             6: Received: by csi.UOttawa.CA id AA00608
        !             7:   (5.65+/IDA-1.3.5 for [email protected]); Sun, 15 Mar 92 12:57:47 -0500
        !             8: From: Keith White <[email protected]>
        !             9: Message-Id: <[email protected]>
        !            10: Subject: reset-floppy fixed, double your disk speed (linux 0.95)
        !            11: To: [email protected] (Linus Torvalds)
        !            12: Date: Sun, 15 Mar 92 12:57:46 EST
        !            13: X-Mailer: ELM [version 2.3 PL11]
        !            14: Status: OR
        !            15: 
        !            16: A couple of things.
        !            17: 
        !            18: 1) I must be one of those lucky few who's been able to use linux0.95.
        !            19: However I was surprised to see that hard disk speed was slower.  This
        !            20: was until I remembered that I had patched fs/block_dev.c and
        !            21: include/asm/segment.h to support block moves to and from the fs
        !            22: segment.  These patches (very minimal it must be admitted) give a
        !            23: reasonable increase in speed for 'fsck':
        !            24:        original:       42.62 elapsed
        !            25:        patched:        22.06 elapsed
        !            26: These patches have no effect on sequential disk access (dd if=/dev/hda
        !            27: ...)  since most time is spent waiting for those small 2 sector
        !            28: transfers anyway.  The patches are included below.
        !            29: 
        !            30: 2) I don't run DOS so a floppy disk format program is sort of
        !            31: essential.  Lawrence Foard's (sp?) formatting routines have a few
        !            32: problems (nits).
        !            33:        a) The inter-sector gap should be larger for a format than it
        !            34: is for a read or write.
        !            35:        b) An interleave is not required (at least on my machine, a
        !            36: bottom of the line 386SX-16).
        !            37: 
        !            38: 3) I seem to have fixed the dreaded "reset-floppy called" problem --
        !            39: at least it works for me.  The posted fix does not work in my case.
        !            40: I'd send you these patches as well, but I only have diffs that include
        !            41: all the mods I did for the floppy format stuff.  The key point (I
        !            42: think) was to only reset twice during an error loop.  If a track was
        !            43: bad, the recalibrate would fail and call reset which would call
        !            44: recalibrate ...  If you're interested, I could try to separate the
        !            45: formatting stuff and all my debugging "printks" from the reset fix
        !            46: stuff and send the diffs.
        !            47: 
        !            48: ...keith ([email protected])
        !            49: 
        !            50: ---cut here---
        !            51: *** 1.1        1992/03/14 16:33:21
        !            52: --- include/asm/segment.h      1992/03/15 17:10:14
        !            53: ***************
        !            54: *** 63,65 ****
        !            55: --- 63,109 ----
        !            56:        __asm__("mov %0,%%fs"::"r" ((unsigned short) val));
        !            57:   }
        !            58:   
        !            59: + /*
        !            60: +  * these routines are added to use the movs instruction with data
        !            61: +  * in the fs segment.  No optimizations are done with regards to using
        !            62: +  * movsw or movsd 
        !            63: +  *
        !            64: +  * [email protected]
        !            65: +  */
        !            66: + 
        !            67: + #define memcpy_fromfs(dest,src,n) __asm__ (\
        !            68: +      "mov %%fs,%%ax; movl %%ax,%%ds\n\
        !            69: +      cld; rep; movsb\n\
        !            70: +      mov %%es,%%ax; mov %%ax,%%ds" \
        !            71: +      ::"D" ((long)(dest)), "S" ((long)(src)), "c" ((long) (n)) \
        !            72: +      :"di", "si", "cx", "ax");
        !            73: + #define memcpy_fromfs_w(dest,src,n) __asm__ (\
        !            74: +      "mov %%fs,%%ax; movl %%ax,%%ds\n\
        !            75: +      cld; rep; movsw\n\
        !            76: +      mov %%es,%%ax; mov %%ax,%%ds" \
        !            77: +      ::"D" ((long)(dest)), "S" ((long)(src)), "c" ((long) (n)) \
        !            78: +      :"di", "si", "cx", "ax");
        !            79: + #define memcpy_fromfs_l(dest,src,n) __asm__ (\
        !            80: +      "mov %%fs,%%ax; movl %%ax,%%ds\n\
        !            81: +      cld; rep; movsl\n\
        !            82: +      mov %%es,%%ax; mov %%ax,%%ds" \
        !            83: +      ::"D" ((long)(dest)), "S" ((long)(src)), "c" ((long) (n)) \
        !            84: +      :"di", "si", "cx", "ax");
        !            85: + #define memcpy_tofs(dest,src,n) __asm__ (\
        !            86: +      "mov %%fs,%%ax; mov %%ax,%%es\n\
        !            87: +      cld; rep; movsb\n\
        !            88: +      mov %%ds,%%ax; mov %%ax,%%es" \
        !            89: +      ::"D" ((long)(dest)), "S" ((long)(src)), "c" ((long) (n)) \
        !            90: +      :"di", "si", "cx", "ax");
        !            91: + #define memcpy_tofs_w(dest,src,n) __asm__ (\
        !            92: +      "mov %%fs,%%ax; mov %%ax,%%es\n\
        !            93: +      cld; rep; movsw\n\
        !            94: +      mov %%ds,%%ax; mov %%ax,%%es" \
        !            95: +      ::"D" ((long)(dest)), "S" ((long)(src)), "c" ((long) (n)) \
        !            96: +      :"di", "si", "cx", "ax");
        !            97: + #define memcpy_tofs_l(dest,src,n) __asm__ (\
        !            98: +      "mov %%fs,%%ax; mov %%ax,%%es\n\
        !            99: +      cld; rep; movsl\n\
        !           100: +      mov %%ds,%%ax; mov %%ax,%%es"\
        !           101: +      ::"D" ((long)(dest)), "S" ((long)(src)), "c" ((long) (n)) \
        !           102: +      :"di", "si", "cx", "ax");
        !           103: *** 1.1        1992/03/14 16:37:10
        !           104: --- fs/block_dev.c     1992/03/14 16:38:26
        !           105: ***************
        !           106: *** 47,54 ****
        !           107: --- 47,64 ----
        !           108:                filp->f_pos += chars;
        !           109:                written += chars;
        !           110:                count -= chars;
        !           111: + #ifdef notdef
        !           112:                while (chars-->0)
        !           113:                        *(p++) = get_fs_byte(buf++);
        !           114: + #else
        !           115: +              if ((chars&1) || ((long)p&1) || ((long)buf&1)) {
        !           116: +                      memcpy_fromfs(p, buf, chars);
        !           117: +              }
        !           118: +              else {
        !           119: +                      memcpy_fromfs_w(p, buf, chars>>1);
        !           120: +              }
        !           121: +              p += chars; buf += chars; chars = 0;
        !           122: + #endif
        !           123:                bh->b_dirt = 1;
        !           124:                brelse(bh);
        !           125:        }
        !           126: ***************
        !           127: *** 85,92 ****
        !           128: --- 95,112 ----
        !           129:                filp->f_pos += chars;
        !           130:                read += chars;
        !           131:                count -= chars;
        !           132: + #ifdef notdef
        !           133:                while (chars-->0)
        !           134:                        put_fs_byte(*(p++),buf++);
        !           135: + #else
        !           136: +              if ((chars&1) || ((long)buf&1) || ((long)p&1)) {
        !           137: +                      memcpy_tofs(buf, p, chars);
        !           138: +              }
        !           139: +              else {
        !           140: +                      memcpy_tofs_w(buf, p, chars>>1);
        !           141: +              }
        !           142: +              p += chars; buf += chars; chars = 0;
        !           143: + #endif
        !           144:                brelse(bh);
        !           145:        }
        !           146:        return read;
        !           147: ---cut here---
        !           148: 
        !           149: -- 
        !           150: BITNET:                [email protected] (being phased out)
        !           151: UUCP:          {...,nrcaer,cunews}!uotcsi2!kwhite
        !           152: INTERNET:      [email protected]
        !           153: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.