Looks like a bug in the 7300 disk driver

a.b.sherman andys at genesis.ATT.COM
Fri Jan 13 08:06:31 AEST 1989


In article <5660 at cbmvax.UUCP> ditto at cbmvax.UUCP (Michael "Ford" Ditto) writes:
>In article <513 at genesis.ATT.COM> andys at shlepper.ATT.COM (a.b.sherman) writes:
>>It is *NOT* a feature it's a bug.  See below.
>[ ... ]
>>Why a CHARACTER device must program its DMA device in BLOCK
>>multiples escapes me.  Regardless of the block size, you can always
>>tell a DMA controller to transfer X bytes or X words.
>
>Well, there's your problem:  It's not a CHARACTER device.  The /dev/r*
>devices are RAW device interfaces; that's what the 'r' stands for.  When
>you access any raw device, you have to do it in accordance with that
>particular device's physical requirements.  In the case of the Unix PC's
>hard disk interface (and those of most other computers), partial block
>transfers are not possible.  The so-called "block" device can be used
>for more "structured" access (like 4 bytes at a time, etc.).
>
>According to the "Unix Implementation" paper by Ken Thompson, the term
>"character I/O" is "a complete misnomer".


Most of this is true.  However, I disagree with the assertion that
most computers' disk controllers require you to DMA in sector
multiples.  I believe that most or all disk controllers will require
that you begin your I/O *on a sector boundary*, because you can only
seek to a sector.  However, the transfer length is generally given
as a word count, not a sector count.  If you give a word count of 2
on a 16-bit controller, you will get 4 bytes.  I *have* seen the
restriction that the transfer must be a multiple of the word size,
because you DMA words, not bytes, on most busses.
-- 
andy sherman / at&t bell laboratories (medical diagnostic systems)
room 2e-108 / 185 monmouth pkwy / west long branch, nj 07764-1394
(201) 870-7018 / andys at shlepper.ATT.COM
...The views and opinions are my own.  Who else would want them?



More information about the Unix-pc.general mailing list