public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Linux 2.5.3-pre1-aia1
@ 2002-01-18  2:27 Anton Altaparmakov
  2002-01-18 17:32 ` Davide Libenzi
  0 siblings, 1 reply; 57+ messages in thread
From: Anton Altaparmakov @ 2002-01-18  2:27 UTC (permalink / raw)
  To: linux-kernel

Since the new IDE core from Andre is now solid as reported by various 
people on IRC, here is my local patch (stable for me) which you can apply 
to play with the shiny new IDE core (IDE core fix is same as 
ata-253p1-2.bz2 from Jens). (-:

Patch available from:

http://www-stu.christs.cam.ac.uk/~aia21/linux/patch-2.5.3-pre1-aia1
http://www-stu.christs.cam.ac.uk/~aia21/linux/patch-2.5.3-pre1-aia1.bz2
http://www-stu.christs.cam.ac.uk/~aia21/linux/patch-2.5.3-pre1-aia1.gz

Linux 2.5.3-pre1-aia1

o       Fix new IDE core                        (Jens Axboe, Andre Hedrick)
+       Configure help entries for IDE          (Andre Hedrick, Rob Radez, me)
+       Reduce NTFS vmalloc use (NTFS 1.1.22)   (me)
o       Compile fixes for dnotify               (me)
o       Compile fixes for via82cxxx             (me)

Patches marked "+" have been submitted to Linus by me already.

Enjoy,

Anton


-- 
   "I've not lost my mind. It's backed up on tape somewhere." - Unknown
-- 
Anton Altaparmakov <aia21 at cam.ac.uk> (replace at with @)
Linux NTFS Maintainer / WWW: http://linux-ntfs.sf.net/
ICQ: 8561279 / WWW: http://www-stu.christs.cam.ac.uk/~aia21/


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-18  2:27 Linux 2.5.3-pre1-aia1 Anton Altaparmakov
@ 2002-01-18 17:32 ` Davide Libenzi
  2002-01-18 19:05   ` Jens Axboe
  2002-01-18 19:26   ` Andre Hedrick
  0 siblings, 2 replies; 57+ messages in thread
From: Davide Libenzi @ 2002-01-18 17:32 UTC (permalink / raw)
  To: Anton Altaparmakov; +Cc: Linus Torvalds, Jens Axboe, lkml

On Fri, 18 Jan 2002, Anton Altaparmakov wrote:

> Since the new IDE core from Andre is now solid as reported by various
> people on IRC, here is my local patch (stable for me) which you can apply
> to play with the shiny new IDE core (IDE core fix is same as
> ata-253p1-2.bz2 from Jens). (-:

I would like to say the same. I worked with the fixed kernel
2.5.3-pre1+ata-253p1-2 yesterday w/out problems. I rebootedt the machine
before leaving the office yesterday night and this morning it had a full
screen :

hda: lost interrupt
hda: lost interrupt
hda: lost interrupt
hda: lost interrupt
hda: lost interrupt

I have to say that something like :

All work and no play makes Jack a dull boy ...
All work and no play makes Jack a dull boy ...
All work and no play makes Jack a dull boy ...

would have scared me more, but still i think there's some tuning to play
with ...




- Davide



^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-18 17:32 ` Davide Libenzi
@ 2002-01-18 19:05   ` Jens Axboe
  2002-01-18 19:23     ` Davide Libenzi
  2002-01-18 19:26   ` Andre Hedrick
  1 sibling, 1 reply; 57+ messages in thread
From: Jens Axboe @ 2002-01-18 19:05 UTC (permalink / raw)
  To: Davide Libenzi; +Cc: Anton Altaparmakov, Linus Torvalds, lkml

On Fri, Jan 18 2002, Davide Libenzi wrote:
> On Fri, 18 Jan 2002, Anton Altaparmakov wrote:
> 
> > Since the new IDE core from Andre is now solid as reported by various
> > people on IRC, here is my local patch (stable for me) which you can apply
> > to play with the shiny new IDE core (IDE core fix is same as
> > ata-253p1-2.bz2 from Jens). (-:
> 
> I would like to say the same. I worked with the fixed kernel
> 2.5.3-pre1+ata-253p1-2 yesterday w/out problems. I rebootedt the machine
> before leaving the office yesterday night and this morning it had a full
> screen :
> 
> hda: lost interrupt
> hda: lost interrupt
> hda: lost interrupt
> hda: lost interrupt
> hda: lost interrupt

What mode? PIO and no multi mode, or?

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-18 19:05   ` Jens Axboe
@ 2002-01-18 19:23     ` Davide Libenzi
  2002-01-18 19:28       ` Andre Hedrick
  0 siblings, 1 reply; 57+ messages in thread
From: Davide Libenzi @ 2002-01-18 19:23 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Anton Altaparmakov, Linus Torvalds, lkml

On Fri, 18 Jan 2002, Jens Axboe wrote:

> On Fri, Jan 18 2002, Davide Libenzi wrote:
> > On Fri, 18 Jan 2002, Anton Altaparmakov wrote:
> >
> > > Since the new IDE core from Andre is now solid as reported by various
> > > people on IRC, here is my local patch (stable for me) which you can apply
> > > to play with the shiny new IDE core (IDE core fix is same as
> > > ata-253p1-2.bz2 from Jens). (-:
> >
> > I would like to say the same. I worked with the fixed kernel
> > 2.5.3-pre1+ata-253p1-2 yesterday w/out problems. I rebootedt the machine
> > before leaving the office yesterday night and this morning it had a full
> > screen :
> >
> > hda: lost interrupt
> > hda: lost interrupt
> > hda: lost interrupt
> > hda: lost interrupt
> > hda: lost interrupt
>
> What mode? PIO and no multi mode, or?


This is what reports me 2.5.2 :


[root@blue1 davide]# cat /proc/ide/hda/settings
name                    value           min             max             mode
----                    -----           ---             ---             ----
bios_cyl                2495            0               65535           rw
bios_head               255             0               255             rw
bios_sect               63              0               63              rw
breada_readahead        4               0               127             rw
bswap                   0               0               1               r
current_speed           0               0               69              rw
failures                0               0               65535           rw
file_readahead          124             0               16384           rw
ide_scsi                0               0               1               rw
init_speed              0               0               69              rw
io_32bit                0               0               3               rw
keepsettings            0               0               1               rw
lun                     0               0               7               rw
max_failures            1               0               65535           rw
multcount               8               0               8               rw
nice1                   1               0               1               rw
nowerr                  0               0               1               rw
number                  0               0               3               rw
pio_mode                write-only      0               255             w
slow                    0               0               1               rw
unmaskirq               0               0               1               rw
using_dma               0               0               1               rw





Linux version 2.5.2-mqo1 (root@blue1.dev.mcafeelabs.com) (gcc version 3.0.3) #12 Wed Jan 16 09:49:54 PST 2002
BIOS-provided physical RAM map:
 BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
 BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
 BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
 BIOS-e820: 0000000000100000 - 0000000010000000 (usable)
 BIOS-e820: 00000000ffff0000 - 0000000100000000 (reserved)
On node 0 totalpages: 65536
zone(0): 4096 pages.
zone(1): 61440 pages.
zone(2): 0 pages.
Kernel command line: auto BOOT_IMAGE=2.5.2-mqo1 ro root=305 BOOT_FILE=/boot/vmlinuz-2.5.2-mqo1
Initializing CPU#0
Detected 999.554 MHz processor.
Console: colour VGA+ 80x25
Calibrating delay loop... 1992.29 BogoMIPS
Memory: 255896k/262144k available (1229k kernel code, 5860k reserved, 341k data, 204k init, 0k highmem)
Dentry-cache hash table entries: 32768 (order: 6, 262144 bytes)
Inode-cache hash table entries: 16384 (order: 5, 131072 bytes)
Mount-cache hash table entries: 4096 (order: 3, 32768 bytes)
Buffer-cache hash table entries: 16384 (order: 4, 65536 bytes)
Page-cache hash table entries: 65536 (order: 6, 262144 bytes)
CPU: Before vendor init, caps: 0183f9ff c1c7f9ff 00000000, vendor = 2
CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)
CPU: L2 Cache: 256K (64 bytes/line)
CPU: After vendor init, caps: 0183f9ff c1c7f9ff 00000000 00000000
Intel machine check architecture supported.
Intel machine check reporting enabled on CPU#0.
CPU:     After generic, caps: 0183f9ff c1c7f9ff 00000000 00000000
CPU:             Common caps: 0183f9ff c1c7f9ff 00000000 00000000
CPU: AMD Athlon(tm) Processor stepping 02
Enabling fast FPU save and restore... done.
Checking 'hlt' instruction... OK.
POSIX conformance testing by UNIFIX
mtrr: v1.40 (20010327) Richard Gooch (rgooch@atnf.csiro.au)
mtrr: detected mtrr type: Intel
PCI: PCI BIOS revision 2.10 entry at 0xfb350, last bus=1
PCI: Using configuration type 1
PCI: Probing PCI hardware
PCI: Using IRQ router VIA [1106/0686] at 00:07.0
isapnp: Scanning for PnP cards...
isapnp: No Plug & Play device found
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Starting kswapd
BIO: pool of 256 setup, 14Kb (56 bytes/bio)
biovec: init pool 0, 1 entries, 12 bytes
biovec: init pool 1, 4 entries, 48 bytes
biovec: init pool 2, 16 entries, 192 bytes
biovec: init pool 3, 64 entries, 768 bytes
biovec: init pool 4, 128 entries, 1536 bytes
biovec: init pool 5, 256 entries, 3072 bytes
pty: 256 Unix98 ptys configured
Serial driver version 5.05c (2001-07-08) with MANY_PORTS SHARE_IRQ SERIAL_PCI enabled
ttyS00 at 0x03f8 (irq = 4) is a 16550A
ttyS01 at 0x02f8 (irq = 3) is a 16550A
block: 256 slots per queue, batch=32
Uniform Multi-Platform E-IDE driver Revision: 6.32
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
VP_IDE: IDE controller on PCI slot 00:07.1
VP_IDE: chipset revision 16
VP_IDE: not 100% native mode: will probe irqs later
    ide0: BM-DMA at 0xd000-0xd007, BIOS settings: hda:DMA, hdb:DMA
    ide1: BM-DMA at 0xd008-0xd00f, BIOS settings: hdc:pio, hdd:pio
hda: WDC WD205BA, ATA DISK drive
hdb: CD-ROM 50X L, ATAPI CD/DVD-ROM drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
hda: 40088160 sectors (20525 MB) w/2048KiB Cache, CHS=2495/255/63
hdb: ATAPI 50X CD-ROM drive, 128kB Cache
Uniform CD-ROM driver Revision: 3.12
Partition check:
 hda: hda1 hda2 < hda5 hda6 hda7 >
Floppy drive(s): fd0 is 1.44M
FDC 0 is a post-1991 82077
eepro100.c:v1.09j-t 9/29/99 Donald Becker http://cesdis.gsfc.nasa.gov/linux/drivers/eepro100.html
eepro100.c: $Revision: 1.36 $ 2000/11/17 Modified by Andrey V. Savochkin <saw@saw.sw.com.sg> and others
PCI: Found IRQ 11 for device 00:14.0
PCI: Sharing IRQ 11 with 00:07.2
PCI: Sharing IRQ 11 with 00:07.3
eth0: Intel Corp. 82557 [Ethernet Pro 100], 00:02:B3:11:E5:92, IRQ 11.
  Board assembly 721383-016, Physical connectors present: RJ45
  Primary interface chip i82555 PHY #1.
  General self-test: passed.
  Serial sub-system self-test: passed.
  Internal registers self-test: passed.
  ROM checksum self-test: passed (0x04f4518b).
Linux agpgart interface v0.99 (c) Jeff Hartmann
agpgart: Maximum main memory to use for agp memory: 204M
agpgart: Detected Via Apollo Pro KT133 chipset
agpgart: AGP aperture is 32M @ 0xd4000000
Linux Kernel Card Services 3.1.22
  options:  [pci] [cardbus] [pm]
usb.c: registered new driver hub
uhci.c: USB Universal Host Controller Interface driver v1.1
PCI: Found IRQ 11 for device 00:07.2
PCI: Sharing IRQ 11 with 00:07.3
PCI: Sharing IRQ 11 with 00:14.0
uhci.c: USB UHCI at I/O 0xd400, IRQ 11
usb.c: new USB bus registered, assigned bus number 1
hub.c: USB hub found at /
hub.c: 2 ports detected
PCI: Found IRQ 11 for device 00:07.3
PCI: Sharing IRQ 11 with 00:07.2
PCI: Sharing IRQ 11 with 00:14.0
uhci.c: USB UHCI at I/O 0xd800, IRQ 11
usb.c: new USB bus registered, assigned bus number 2
hub.c: USB hub found at /
hub.c: 2 ports detected
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP, IGMP
IP: routing cache hash table of 2048 buckets, 16Kbytes
TCP: Hash tables configured (established 16384 bind 32768)
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
ds: no socket drivers loaded!
VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 204k freed
Adding Swap: 530104k swap-space (priority -1)
NFS: NFSv3 not supported.
nfs warning: mount version older than kernel




- Davide




^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-18 17:32 ` Davide Libenzi
  2002-01-18 19:05   ` Jens Axboe
@ 2002-01-18 19:26   ` Andre Hedrick
  1 sibling, 0 replies; 57+ messages in thread
From: Andre Hedrick @ 2002-01-18 19:26 UTC (permalink / raw)
  To: Davide Libenzi; +Cc: Anton Altaparmakov, Linus Torvalds, Jens Axboe, lkml



Since we are limited to 4k pages or 8 sectors transfers in multimode
for now, please set hdparm -m8 /dev/hdX.

http://www.kernel.org/pub/linux/kernel/people/hedrick/acb-io-2.5.3/ata-253p1-2+axboe1+fixes.patch.bz2

This should be a valid patch and it includes some extras for Jens.

On Fri, 18 Jan 2002, Davide Libenzi wrote:

> On Fri, 18 Jan 2002, Anton Altaparmakov wrote:
> 
> > Since the new IDE core from Andre is now solid as reported by various
> > people on IRC, here is my local patch (stable for me) which you can apply
> > to play with the shiny new IDE core (IDE core fix is same as
> > ata-253p1-2.bz2 from Jens). (-:
> 
> I would like to say the same. I worked with the fixed kernel
> 2.5.3-pre1+ata-253p1-2 yesterday w/out problems. I rebootedt the machine
> before leaving the office yesterday night and this morning it had a full
> screen :
> 
> hda: lost interrupt
> hda: lost interrupt
> hda: lost interrupt
> hda: lost interrupt
> hda: lost interrupt
> 
> I have to say that something like :
> 
> All work and no play makes Jack a dull boy ...
> All work and no play makes Jack a dull boy ...
> All work and no play makes Jack a dull boy ...
> 
> would have scared me more, but still i think there's some tuning to play
> with ...
> 
> 
> 
> 
> - Davide
> 
> 
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
> 

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-18 19:23     ` Davide Libenzi
@ 2002-01-18 19:28       ` Andre Hedrick
  2002-01-18 19:48         ` Davide Libenzi
  0 siblings, 1 reply; 57+ messages in thread
From: Andre Hedrick @ 2002-01-18 19:28 UTC (permalink / raw)
  To: Davide Libenzi; +Cc: Jens Axboe, Anton Altaparmakov, Linus Torvalds, lkml

On Fri, 18 Jan 2002, Davide Libenzi wrote:

> On Fri, 18 Jan 2002, Jens Axboe wrote:
> 
> > On Fri, Jan 18 2002, Davide Libenzi wrote:
> > > On Fri, 18 Jan 2002, Anton Altaparmakov wrote:
> > >
> > > > Since the new IDE core from Andre is now solid as reported by various
> > > > people on IRC, here is my local patch (stable for me) which you can apply
> > > > to play with the shiny new IDE core (IDE core fix is same as
> > > > ata-253p1-2.bz2 from Jens). (-:
> > >
> > > I would like to say the same. I worked with the fixed kernel
> > > 2.5.3-pre1+ata-253p1-2 yesterday w/out problems. I rebootedt the machine
> > > before leaving the office yesterday night and this morning it had a full
> > > screen :
> > >
> > > hda: lost interrupt
> > > hda: lost interrupt
> > > hda: lost interrupt
> > > hda: lost interrupt
> > > hda: lost interrupt
> >
> > What mode? PIO and no multi mode, or?
> 
> 
> This is what reports me 2.5.2 :
> 
> 
> [root@blue1 davide]# cat /proc/ide/hda/settings
> name                    value           min             max             mode
> ----                    -----           ---             ---             ----
> bios_cyl                2495            0               65535           rw
> bios_head               255             0               255             rw
> bios_sect               63              0               63              rw
> breada_readahead        4               0               127             rw
> bswap                   0               0               1               r
> current_speed           0               0               69              rw
> failures                0               0               65535           rw
> file_readahead          124             0               16384           rw
> ide_scsi                0               0               1               rw
> init_speed              0               0               69              rw
> io_32bit                0               0               3               rw
> keepsettings            0               0               1               rw
> lun                     0               0               7               rw
> max_failures            1               0               65535           rw
> multcount               8               0               8               rw

There is a / 2 factor here, thus reality is 16,0,16

> nice1                   1               0               1               rw
> nowerr                  0               0               1               rw
> number                  0               0               3               rw
> pio_mode                write-only      0               255             w
> slow                    0               0               1               rw
> unmaskirq               0               0               1               rw
> using_dma               0               0               1               rw
> 
> 
> 
> 
> 
> Linux version 2.5.2-mqo1 (root@blue1.dev.mcafeelabs.com) (gcc version 3.0.3) #12 Wed Jan 16 09:49:54 PST 2002
> BIOS-provided physical RAM map:
>  BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
>  BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
>  BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
>  BIOS-e820: 0000000000100000 - 0000000010000000 (usable)
>  BIOS-e820: 00000000ffff0000 - 0000000100000000 (reserved)
> On node 0 totalpages: 65536
> zone(0): 4096 pages.
> zone(1): 61440 pages.
> zone(2): 0 pages.
> Kernel command line: auto BOOT_IMAGE=2.5.2-mqo1 ro root=305 BOOT_FILE=/boot/vmlinuz-2.5.2-mqo1
> Initializing CPU#0
> Detected 999.554 MHz processor.
> Console: colour VGA+ 80x25
> Calibrating delay loop... 1992.29 BogoMIPS
> Memory: 255896k/262144k available (1229k kernel code, 5860k reserved, 341k data, 204k init, 0k highmem)
> Dentry-cache hash table entries: 32768 (order: 6, 262144 bytes)
> Inode-cache hash table entries: 16384 (order: 5, 131072 bytes)
> Mount-cache hash table entries: 4096 (order: 3, 32768 bytes)
> Buffer-cache hash table entries: 16384 (order: 4, 65536 bytes)
> Page-cache hash table entries: 65536 (order: 6, 262144 bytes)
> CPU: Before vendor init, caps: 0183f9ff c1c7f9ff 00000000, vendor = 2
> CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)
> CPU: L2 Cache: 256K (64 bytes/line)
> CPU: After vendor init, caps: 0183f9ff c1c7f9ff 00000000 00000000
> Intel machine check architecture supported.
> Intel machine check reporting enabled on CPU#0.
> CPU:     After generic, caps: 0183f9ff c1c7f9ff 00000000 00000000
> CPU:             Common caps: 0183f9ff c1c7f9ff 00000000 00000000
> CPU: AMD Athlon(tm) Processor stepping 02
> Enabling fast FPU save and restore... done.
> Checking 'hlt' instruction... OK.
> POSIX conformance testing by UNIFIX
> mtrr: v1.40 (20010327) Richard Gooch (rgooch@atnf.csiro.au)
> mtrr: detected mtrr type: Intel
> PCI: PCI BIOS revision 2.10 entry at 0xfb350, last bus=1
> PCI: Using configuration type 1
> PCI: Probing PCI hardware
> PCI: Using IRQ router VIA [1106/0686] at 00:07.0
> isapnp: Scanning for PnP cards...
> isapnp: No Plug & Play device found
> Linux NET4.0 for Linux 2.4
> Based upon Swansea University Computer Society NET3.039
> Starting kswapd
> BIO: pool of 256 setup, 14Kb (56 bytes/bio)
> biovec: init pool 0, 1 entries, 12 bytes
> biovec: init pool 1, 4 entries, 48 bytes
> biovec: init pool 2, 16 entries, 192 bytes
> biovec: init pool 3, 64 entries, 768 bytes
> biovec: init pool 4, 128 entries, 1536 bytes
> biovec: init pool 5, 256 entries, 3072 bytes
> pty: 256 Unix98 ptys configured
> Serial driver version 5.05c (2001-07-08) with MANY_PORTS SHARE_IRQ SERIAL_PCI enabled
> ttyS00 at 0x03f8 (irq = 4) is a 16550A
> ttyS01 at 0x02f8 (irq = 3) is a 16550A
> block: 256 slots per queue, batch=32
> Uniform Multi-Platform E-IDE driver Revision: 6.32
> ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
> VP_IDE: IDE controller on PCI slot 00:07.1
> VP_IDE: chipset revision 16
> VP_IDE: not 100% native mode: will probe irqs later
>     ide0: BM-DMA at 0xd000-0xd007, BIOS settings: hda:DMA, hdb:DMA
>     ide1: BM-DMA at 0xd008-0xd00f, BIOS settings: hdc:pio, hdd:pio
> hda: WDC WD205BA, ATA DISK drive
> hdb: CD-ROM 50X L, ATAPI CD/DVD-ROM drive
> ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
> hda: 40088160 sectors (20525 MB) w/2048KiB Cache, CHS=2495/255/63
> hdb: ATAPI 50X CD-ROM drive, 128kB Cache
> Uniform CD-ROM driver Revision: 3.12
> Partition check:
>  hda: hda1 hda2 < hda5 hda6 hda7 >
> Floppy drive(s): fd0 is 1.44M
> FDC 0 is a post-1991 82077
> eepro100.c:v1.09j-t 9/29/99 Donald Becker http://cesdis.gsfc.nasa.gov/linux/drivers/eepro100.html
> eepro100.c: $Revision: 1.36 $ 2000/11/17 Modified by Andrey V. Savochkin <saw@saw.sw.com.sg> and others
> PCI: Found IRQ 11 for device 00:14.0
> PCI: Sharing IRQ 11 with 00:07.2
> PCI: Sharing IRQ 11 with 00:07.3
> eth0: Intel Corp. 82557 [Ethernet Pro 100], 00:02:B3:11:E5:92, IRQ 11.
>   Board assembly 721383-016, Physical connectors present: RJ45
>   Primary interface chip i82555 PHY #1.
>   General self-test: passed.
>   Serial sub-system self-test: passed.
>   Internal registers self-test: passed.
>   ROM checksum self-test: passed (0x04f4518b).
> Linux agpgart interface v0.99 (c) Jeff Hartmann
> agpgart: Maximum main memory to use for agp memory: 204M
> agpgart: Detected Via Apollo Pro KT133 chipset
> agpgart: AGP aperture is 32M @ 0xd4000000
> Linux Kernel Card Services 3.1.22
>   options:  [pci] [cardbus] [pm]
> usb.c: registered new driver hub
> uhci.c: USB Universal Host Controller Interface driver v1.1
> PCI: Found IRQ 11 for device 00:07.2
> PCI: Sharing IRQ 11 with 00:07.3
> PCI: Sharing IRQ 11 with 00:14.0
> uhci.c: USB UHCI at I/O 0xd400, IRQ 11
> usb.c: new USB bus registered, assigned bus number 1
> hub.c: USB hub found at /
> hub.c: 2 ports detected
> PCI: Found IRQ 11 for device 00:07.3
> PCI: Sharing IRQ 11 with 00:07.2
> PCI: Sharing IRQ 11 with 00:14.0
> uhci.c: USB UHCI at I/O 0xd800, IRQ 11
> usb.c: new USB bus registered, assigned bus number 2
> hub.c: USB hub found at /
> hub.c: 2 ports detected
> NET4: Linux TCP/IP 1.0 for NET4.0
> IP Protocols: ICMP, UDP, TCP, IGMP
> IP: routing cache hash table of 2048 buckets, 16Kbytes
> TCP: Hash tables configured (established 16384 bind 32768)
> NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
> ds: no socket drivers loaded!
> VFS: Mounted root (ext2 filesystem) readonly.
> Freeing unused kernel memory: 204k freed
> Adding Swap: 530104k swap-space (priority -1)
> NFS: NFSv3 not supported.
> nfs warning: mount version older than kernel
> 
> 
> 
> 
> - Davide
> 
> 
> 
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
> 

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-18 19:48         ` Davide Libenzi
@ 2002-01-18 19:40           ` Andre Hedrick
  2002-01-18 19:44           ` Andre Hedrick
  2002-01-19 11:40           ` Jens Axboe
  2 siblings, 0 replies; 57+ messages in thread
From: Andre Hedrick @ 2002-01-18 19:40 UTC (permalink / raw)
  To: Davide Libenzi
  Cc: Andre Hedrick, Jens Axboe, Anton Altaparmakov, Linus Torvalds,
	lkml

On Fri, 18 Jan 2002, Davide Libenzi wrote:

> > > multcount               8               0               8               rw
> >
> > There is a / 2 factor here, thus reality is 16,0,16
> 
> Guys, instead of requiring an -m8 to every user that is observing this
> problem, isn't it better that you limit it inside the driver until things
> gets fixed ?

Yes, and is more fun than it sounds.  The original driver alway checked
for max-capabilities and set accordingly, but things have changed.

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-18 19:48         ` Davide Libenzi
  2002-01-18 19:40           ` Andre Hedrick
@ 2002-01-18 19:44           ` Andre Hedrick
  2002-01-19 11:40           ` Jens Axboe
  2 siblings, 0 replies; 57+ messages in thread
From: Andre Hedrick @ 2002-01-18 19:44 UTC (permalink / raw)
  To: Davide Libenzi; +Cc: Jens Axboe, Anton Altaparmakov, Linus Torvalds, lkml

On Fri, 18 Jan 2002, Davide Libenzi wrote:

> On Fri, 18 Jan 2002, Andre Hedrick wrote:
> > > multcount               8               0               8               rw
> >
> > There is a / 2 factor here, thus reality is 16,0,16
> 
> Guys, instead of requiring an -m8 to every user that is observing this
> problem, isn't it better that you limit it inside the driver until things
> gets fixed ?

Better yet is to # out CONFIG_IDEDISK_MULTI_MODE option in Config.in for
now.

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development



^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-18 19:28       ` Andre Hedrick
@ 2002-01-18 19:48         ` Davide Libenzi
  2002-01-18 19:40           ` Andre Hedrick
                             ` (2 more replies)
  0 siblings, 3 replies; 57+ messages in thread
From: Davide Libenzi @ 2002-01-18 19:48 UTC (permalink / raw)
  To: Andre Hedrick; +Cc: Jens Axboe, Anton Altaparmakov, Linus Torvalds, lkml

On Fri, 18 Jan 2002, Andre Hedrick wrote:

> On Fri, 18 Jan 2002, Davide Libenzi wrote:
>
> > On Fri, 18 Jan 2002, Jens Axboe wrote:
> >
> > > On Fri, Jan 18 2002, Davide Libenzi wrote:
> > > > On Fri, 18 Jan 2002, Anton Altaparmakov wrote:
> > > >
> > > > > Since the new IDE core from Andre is now solid as reported by various
> > > > > people on IRC, here is my local patch (stable for me) which you can apply
> > > > > to play with the shiny new IDE core (IDE core fix is same as
> > > > > ata-253p1-2.bz2 from Jens). (-:
> > > >
> > > > I would like to say the same. I worked with the fixed kernel
> > > > 2.5.3-pre1+ata-253p1-2 yesterday w/out problems. I rebootedt the machine
> > > > before leaving the office yesterday night and this morning it had a full
> > > > screen :
> > > >
> > > > hda: lost interrupt
> > > > hda: lost interrupt
> > > > hda: lost interrupt
> > > > hda: lost interrupt
> > > > hda: lost interrupt
> > >
> > > What mode? PIO and no multi mode, or?
> >
> >
> > This is what reports me 2.5.2 :
> >
> >
> > [root@blue1 davide]# cat /proc/ide/hda/settings
> > name                    value           min             max             mode
> > ----                    -----           ---             ---             ----
> > bios_cyl                2495            0               65535           rw
> > bios_head               255             0               255             rw
> > bios_sect               63              0               63              rw
> > breada_readahead        4               0               127             rw
> > bswap                   0               0               1               r
> > current_speed           0               0               69              rw
> > failures                0               0               65535           rw
> > file_readahead          124             0               16384           rw
> > ide_scsi                0               0               1               rw
> > init_speed              0               0               69              rw
> > io_32bit                0               0               3               rw
> > keepsettings            0               0               1               rw
> > lun                     0               0               7               rw
> > max_failures            1               0               65535           rw
> > multcount               8               0               8               rw
>
> There is a / 2 factor here, thus reality is 16,0,16

Guys, instead of requiring an -m8 to every user that is observing this
problem, isn't it better that you limit it inside the driver until things
gets fixed ?




- Davide



^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-19 11:40           ` Jens Axboe
@ 2002-01-19 11:37             ` Andre Hedrick
  2002-01-19 15:45               ` Jens Axboe
  0 siblings, 1 reply; 57+ messages in thread
From: Andre Hedrick @ 2002-01-19 11:37 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Davide Libenzi, Anton Altaparmakov, Linus Torvalds, lkml

On Sat, 19 Jan 2002, Jens Axboe wrote:

> On Fri, Jan 18 2002, Davide Libenzi wrote:
> > Guys, instead of requiring an -m8 to every user that is observing this
> > problem, isn't it better that you limit it inside the driver until things
> > gets fixed ?
> 
> There is no -m8 limit, 2.5.3-pre1 + ata253p1-2 patch handles any set
> multi mode value.
> 
> -- 
> Jens Axboe
> 

And that will generate the [lost interrupt], and I have it fixed at all
levels too now.


Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-18 19:48         ` Davide Libenzi
  2002-01-18 19:40           ` Andre Hedrick
  2002-01-18 19:44           ` Andre Hedrick
@ 2002-01-19 11:40           ` Jens Axboe
  2002-01-19 11:37             ` Andre Hedrick
  2 siblings, 1 reply; 57+ messages in thread
From: Jens Axboe @ 2002-01-19 11:40 UTC (permalink / raw)
  To: Davide Libenzi; +Cc: Andre Hedrick, Anton Altaparmakov, Linus Torvalds, lkml

On Fri, Jan 18 2002, Davide Libenzi wrote:
> Guys, instead of requiring an -m8 to every user that is observing this
> problem, isn't it better that you limit it inside the driver until things
> gets fixed ?

There is no -m8 limit, 2.5.3-pre1 + ata253p1-2 patch handles any set
multi mode value.

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-19 11:37             ` Andre Hedrick
@ 2002-01-19 15:45               ` Jens Axboe
  2002-01-19 20:36                 ` Andre Hedrick
  0 siblings, 1 reply; 57+ messages in thread
From: Jens Axboe @ 2002-01-19 15:45 UTC (permalink / raw)
  To: Andre Hedrick; +Cc: Davide Libenzi, Anton Altaparmakov, Linus Torvalds, lkml

On Sat, Jan 19 2002, Andre Hedrick wrote:
> On Sat, 19 Jan 2002, Jens Axboe wrote:
> 
> > On Fri, Jan 18 2002, Davide Libenzi wrote:
> > > Guys, instead of requiring an -m8 to every user that is observing this
> > > problem, isn't it better that you limit it inside the driver until things
> > > gets fixed ?
> > 
> > There is no -m8 limit, 2.5.3-pre1 + ata253p1-2 patch handles any set
> > multi mode value.
> > 
> > -- 
> > Jens Axboe
> > 
> 
> And that will generate the [lost interrupt], and I have it fixed at all
> levels too now.

How so? I don't see the problem.

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-19 15:45               ` Jens Axboe
@ 2002-01-19 20:36                 ` Andre Hedrick
  2002-01-19 21:44                   ` Davide Libenzi
  2002-01-20 10:48                   ` Jens Axboe
  0 siblings, 2 replies; 57+ messages in thread
From: Andre Hedrick @ 2002-01-19 20:36 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Davide Libenzi, Anton Altaparmakov, Linus Torvalds, lkml

On Sat, 19 Jan 2002, Jens Axboe wrote:

> On Sat, Jan 19 2002, Andre Hedrick wrote:
> > On Sat, 19 Jan 2002, Jens Axboe wrote:
> > 
> > > On Fri, Jan 18 2002, Davide Libenzi wrote:
> > > > Guys, instead of requiring an -m8 to every user that is observing this
> > > > problem, isn't it better that you limit it inside the driver until things
> > > > gets fixed ?
> > > 
> > > There is no -m8 limit, 2.5.3-pre1 + ata253p1-2 patch handles any set
> > > multi mode value.
> > > 
> > > -- 
> > > Jens Axboe
> > > 
> > 
> > And that will generate the [lost interrupt], and I have it fixed at all
> > levels too now.
> 
> How so? I don't see the problem.

Unlike ATAPI which will generally send you more data than requested on
itw own, ATA devices do not like enjoy or play the game.  Additionally the
current code asks for 16 sectors, but we do not do the request copy
anymore, and this mean for every 4k of paging we are soliciting for 8k.
We only read out 4k thus the device has the the next 4k we may be wanting
ready.  Look at it as a dirty prefetch, but eventally the drive is going
to want to go south, thus [lost interrupt]

Basically as the Block maintainer, you pointed out I am restricted to 4k
chunking in PIO.  You decided, in the interest of the block glue layer
into the driver, to force early end request per Linus's requirements to
return back every 4k completed to block regardless of the size of the
total data requested.

For the above two condition to be properly satisfied, I have to adjust
and apply one driver policy make the driver behave and give the desired
results.  We should note this will conform with future IDEMA proposals
being submitted to the T committees.

Regards,

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-19 20:36                 ` Andre Hedrick
@ 2002-01-19 21:44                   ` Davide Libenzi
  2002-01-20  0:31                     ` Andre Hedrick
  2002-01-20 10:48                   ` Jens Axboe
  1 sibling, 1 reply; 57+ messages in thread
From: Davide Libenzi @ 2002-01-19 21:44 UTC (permalink / raw)
  To: Andre Hedrick; +Cc: Jens Axboe, Anton Altaparmakov, Linus Torvalds, lkml

On Sat, 19 Jan 2002, Andre Hedrick wrote:

> On Sat, 19 Jan 2002, Jens Axboe wrote:
>
> > On Sat, Jan 19 2002, Andre Hedrick wrote:
> > > On Sat, 19 Jan 2002, Jens Axboe wrote:
> > >
> > > > On Fri, Jan 18 2002, Davide Libenzi wrote:
> > > > > Guys, instead of requiring an -m8 to every user that is observing this
> > > > > problem, isn't it better that you limit it inside the driver until things
> > > > > gets fixed ?
> > > >
> > > > There is no -m8 limit, 2.5.3-pre1 + ata253p1-2 patch handles any set
> > > > multi mode value.
> > > >
> > > > --
> > > > Jens Axboe
> > > >
> > >
> > > And that will generate the [lost interrupt], and I have it fixed at all
> > > levels too now.
> >
> > How so? I don't see the problem.
>
> Unlike ATAPI which will generally send you more data than requested on
> itw own, ATA devices do not like enjoy or play the game.  Additionally the
> current code asks for 16 sectors, but we do not do the request copy
> anymore, and this mean for every 4k of paging we are soliciting for 8k.
> We only read out 4k thus the device has the the next 4k we may be wanting
> ready.  Look at it as a dirty prefetch, but eventally the drive is going
> to want to go south, thus [lost interrupt]
>
> Basically as the Block maintainer, you pointed out I am restricted to 4k
> chunking in PIO.  You decided, in the interest of the block glue layer
> into the driver, to force early end request per Linus's requirements to
> return back every 4k completed to block regardless of the size of the
> total data requested.
>
> For the above two condition to be properly satisfied, I have to adjust
> and apply one driver policy make the driver behave and give the desired
> results.  We should note this will conform with future IDEMA proposals
> being submitted to the T committees.

That was it. By limiting the sector count request i was able to fix it.
Do you've any permanent/not-hackish fix for this ?




- Davide



^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-19 21:44                   ` Davide Libenzi
@ 2002-01-20  0:31                     ` Andre Hedrick
  2002-01-20  2:02                       ` Davide Libenzi
  0 siblings, 1 reply; 57+ messages in thread
From: Andre Hedrick @ 2002-01-20  0:31 UTC (permalink / raw)
  To: Davide Libenzi; +Cc: Jens Axboe, Anton Altaparmakov, Linus Torvalds, lkml


Yes,

I have a patch against 2.5.3-pre1 clean, and is up on kernel.org's upload
site, but k.o is down.  It can also be gotten off
	http://www.linuxdiskcert.org/
It is a tiny 37k patch and bzip2'd to 8k.


On Sat, 19 Jan 2002, Davide Libenzi wrote:

> On Sat, 19 Jan 2002, Andre Hedrick wrote:
> 
> > On Sat, 19 Jan 2002, Jens Axboe wrote:
> >
> > > On Sat, Jan 19 2002, Andre Hedrick wrote:
> > > > On Sat, 19 Jan 2002, Jens Axboe wrote:
> > > >
> > > > > On Fri, Jan 18 2002, Davide Libenzi wrote:
> > > > > > Guys, instead of requiring an -m8 to every user that is observing this
> > > > > > problem, isn't it better that you limit it inside the driver until things
> > > > > > gets fixed ?
> > > > >
> > > > > There is no -m8 limit, 2.5.3-pre1 + ata253p1-2 patch handles any set
> > > > > multi mode value.
> > > > >
> > > > > --
> > > > > Jens Axboe
> > > > >
> > > >
> > > > And that will generate the [lost interrupt], and I have it fixed at all
> > > > levels too now.
> > >
> > > How so? I don't see the problem.
> >
> > Unlike ATAPI which will generally send you more data than requested on
> > itw own, ATA devices do not like enjoy or play the game.  Additionally the
> > current code asks for 16 sectors, but we do not do the request copy
> > anymore, and this mean for every 4k of paging we are soliciting for 8k.
> > We only read out 4k thus the device has the the next 4k we may be wanting
> > ready.  Look at it as a dirty prefetch, but eventally the drive is going
> > to want to go south, thus [lost interrupt]
> >
> > Basically as the Block maintainer, you pointed out I am restricted to 4k
> > chunking in PIO.  You decided, in the interest of the block glue layer
> > into the driver, to force early end request per Linus's requirements to
> > return back every 4k completed to block regardless of the size of the
> > total data requested.
> >
> > For the above two condition to be properly satisfied, I have to adjust
> > and apply one driver policy make the driver behave and give the desired
> > results.  We should note this will conform with future IDEMA proposals
> > being submitted to the T committees.
> 
> That was it. By limiting the sector count request i was able to fix it.
> Do you've any permanent/not-hackish fix for this ?
> 
> 
> 
> 
> - Davide
> 
> 

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-20  0:31                     ` Andre Hedrick
@ 2002-01-20  2:02                       ` Davide Libenzi
  0 siblings, 0 replies; 57+ messages in thread
From: Davide Libenzi @ 2002-01-20  2:02 UTC (permalink / raw)
  To: Andre Hedrick; +Cc: Jens Axboe, Anton Altaparmakov, Linus Torvalds, lkml

On Sat, 19 Jan 2002, Andre Hedrick wrote:

>
> Yes,
>
> I have a patch against 2.5.3-pre1 clean, and is up on kernel.org's upload
> site, but k.o is down.  It can also be gotten off
> 	http://www.linuxdiskcert.org/
> It is a tiny 37k patch and bzip2'd to 8k.

By applying the patch posted by Anton ( patch-2.5.3-pre1-aia2 ) the
problem persist. The machine seems usable but time to time the timer hit
and lost interrupt shows up. I'm going to try your patch now.




- Davide



^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-19 20:36                 ` Andre Hedrick
  2002-01-19 21:44                   ` Davide Libenzi
@ 2002-01-20 10:48                   ` Jens Axboe
  2002-01-20 18:55                     ` Davide Libenzi
  2002-01-21  1:48                     ` Andre Hedrick
  1 sibling, 2 replies; 57+ messages in thread
From: Jens Axboe @ 2002-01-20 10:48 UTC (permalink / raw)
  To: Andre Hedrick; +Cc: Davide Libenzi, Anton Altaparmakov, Linus Torvalds, lkml

On Sat, Jan 19 2002, Andre Hedrick wrote:
> > On Sat, Jan 19 2002, Andre Hedrick wrote:
> > > On Sat, 19 Jan 2002, Jens Axboe wrote:
> > > 
> > > > On Fri, Jan 18 2002, Davide Libenzi wrote:
> > > > > Guys, instead of requiring an -m8 to every user that is observing this
> > > > > problem, isn't it better that you limit it inside the driver until things
> > > > > gets fixed ?
> > > > 
> > > > There is no -m8 limit, 2.5.3-pre1 + ata253p1-2 patch handles any set
> > > > multi mode value.
> > > > 
> > > > -- 
> > > > Jens Axboe
> > > > 
> > > 
> > > And that will generate the [lost interrupt], and I have it fixed at all
> > > levels too now.
> > 
> > How so? I don't see the problem.
> 
> Unlike ATAPI which will generally send you more data than requested on
> itw own, ATA devices do not like enjoy or play the game.  Additionally the

Unrelated ATAPI fodder :-)

> current code asks for 16 sectors, but we do not do the request copy
> anymore, and this mean for every 4k of paging we are soliciting for 8k.

The (now) missing copy is unrelated.

> We only read out 4k thus the device has the the next 4k we may be wanting
> ready.  Look at it as a dirty prefetch, but eventally the drive is going
> to want to go south, thus [lost interrupt]

Even if the drive is programmed for 16 sectors in multi mode, it still
must honor lower transfer sizes. The fix I did was not to limit this,
but rather to only setup transfers for the amount of sectors in the
first chunk. This is indeed necessary now that we do not have a copy of
the request to fool around with.

> Basically as the Block maintainer, you pointed out I am restricted to 4k
> chunking in PIO.  You decided, in the interest of the block glue layer
> into the driver, to force early end request per Linus's requirements to
> return back every 4k completed to block regardless of the size of the
> total data requested.

Correct. The solution I did (which was one of the two I suggested) is
still the cleanest, IMHO.

> For the above two condition to be properly satisfied, I have to adjust
> and apply one driver policy make the driver behave and give the desired
> results.  We should note this will conform with future IDEMA proposals
> being submitted to the T committees.

I still don't see a description of why this would cause a lost
interrupt. What is the flaw in my theory and/or code?

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-20 10:48                   ` Jens Axboe
@ 2002-01-20 18:55                     ` Davide Libenzi
  2002-01-21  0:12                       ` Andre Hedrick
  2002-01-21  1:48                     ` Andre Hedrick
  1 sibling, 1 reply; 57+ messages in thread
From: Davide Libenzi @ 2002-01-20 18:55 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Andre Hedrick, Anton Altaparmakov, Linus Torvalds, lkml

On Sun, 20 Jan 2002, Jens Axboe wrote:

> On Sat, Jan 19 2002, Andre Hedrick wrote:
> > > On Sat, Jan 19 2002, Andre Hedrick wrote:
> > > > On Sat, 19 Jan 2002, Jens Axboe wrote:
> > > >
> > > > > On Fri, Jan 18 2002, Davide Libenzi wrote:
> > > > > > Guys, instead of requiring an -m8 to every user that is observing this
> > > > > > problem, isn't it better that you limit it inside the driver until things
> > > > > > gets fixed ?
> > > > >
> > > > > There is no -m8 limit, 2.5.3-pre1 + ata253p1-2 patch handles any set
> > > > > multi mode value.
> > > > >
> > > > > --
> > > > > Jens Axboe
> > > > >
> > > >
> > > > And that will generate the [lost interrupt], and I have it fixed at all
> > > > levels too now.
> > >
> > > How so? I don't see the problem.
> >
> > Unlike ATAPI which will generally send you more data than requested on
> > itw own, ATA devices do not like enjoy or play the game.  Additionally the
>
> Unrelated ATAPI fodder :-)
>
> > current code asks for 16 sectors, but we do not do the request copy
> > anymore, and this mean for every 4k of paging we are soliciting for 8k.
>
> The (now) missing copy is unrelated.
>
> > We only read out 4k thus the device has the the next 4k we may be wanting
> > ready.  Look at it as a dirty prefetch, but eventally the drive is going
> > to want to go south, thus [lost interrupt]
>
> Even if the drive is programmed for 16 sectors in multi mode, it still
> must honor lower transfer sizes. The fix I did was not to limit this,
> but rather to only setup transfers for the amount of sectors in the
> first chunk. This is indeed necessary now that we do not have a copy of
> the request to fool around with.
>
> > Basically as the Block maintainer, you pointed out I am restricted to 4k
> > chunking in PIO.  You decided, in the interest of the block glue layer
> > into the driver, to force early end request per Linus's requirements to
> > return back every 4k completed to block regardless of the size of the
> > total data requested.
>
> Correct. The solution I did (which was one of the two I suggested) is
> still the cleanest, IMHO.
>
> > For the above two condition to be properly satisfied, I have to adjust
> > and apply one driver policy make the driver behave and give the desired
> > results.  We should note this will conform with future IDEMA proposals
> > being submitted to the T committees.
>
> I still don't see a description of why this would cause a lost
> interrupt. What is the flaw in my theory and/or code?

Guys, i'm sorry to report you bad news but i still get 'lost interrupt'
with all applied patches ( Anton and Andre ).




- Davide



^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-20 18:55                     ` Davide Libenzi
@ 2002-01-21  0:12                       ` Andre Hedrick
  2002-01-21 10:43                         ` Vojtech Pavlik
  0 siblings, 1 reply; 57+ messages in thread
From: Andre Hedrick @ 2002-01-21  0:12 UTC (permalink / raw)
  To: Davide Libenzi; +Cc: Jens Axboe, Anton Altaparmakov, Linus Torvalds, lkml

On Sun, 20 Jan 2002, Davide Libenzi wrote:

> On Sun, 20 Jan 2002, Jens Axboe wrote:
> 
> > On Sat, Jan 19 2002, Andre Hedrick wrote:
> > > > On Sat, Jan 19 2002, Andre Hedrick wrote:
> > > > > On Sat, 19 Jan 2002, Jens Axboe wrote:
> > > > >
> > > > > > On Fri, Jan 18 2002, Davide Libenzi wrote:
> > > > > > > Guys, instead of requiring an -m8 to every user that is observing this
> > > > > > > problem, isn't it better that you limit it inside the driver until things
> > > > > > > gets fixed ?
> > > > > >
> > > > > > There is no -m8 limit, 2.5.3-pre1 + ata253p1-2 patch handles any set
> > > > > > multi mode value.
> > > > > >
> > > > > > --
> > > > > > Jens Axboe
> > > > > >
> > > > >
> > > > > And that will generate the [lost interrupt], and I have it fixed at all
> > > > > levels too now.
> > > >
> > > > How so? I don't see the problem.
> > >
> > > Unlike ATAPI which will generally send you more data than requested on
> > > itw own, ATA devices do not like enjoy or play the game.  Additionally the
> >
> > Unrelated ATAPI fodder :-)
> >
> > > current code asks for 16 sectors, but we do not do the request copy
> > > anymore, and this mean for every 4k of paging we are soliciting for 8k.
> >
> > The (now) missing copy is unrelated.
> >
> > > We only read out 4k thus the device has the the next 4k we may be wanting
> > > ready.  Look at it as a dirty prefetch, but eventally the drive is going
> > > to want to go south, thus [lost interrupt]
> >
> > Even if the drive is programmed for 16 sectors in multi mode, it still
> > must honor lower transfer sizes. The fix I did was not to limit this,
> > but rather to only setup transfers for the amount of sectors in the
> > first chunk. This is indeed necessary now that we do not have a copy of
> > the request to fool around with.

Listen and for just a second okay.

Since the set multimode command is similar to the set transfer rate, if
you program the drive to run at U100 but the host can feed only U33 you
have problems.  Much of this simple arguement is the same answer for
multimode.

Same thing here but a variation, of the operations,

> > > Basically as the Block maintainer, you pointed out I am restricted to 4k
> > > chunking in PIO.  You decided, in the interest of the block glue layer
> > > into the driver, to force early end request per Linus's requirements to
> > > return back every 4k completed to block regardless of the size of the
> > > total data requested.
> >
> > Correct. The solution I did (which was one of the two I suggested) is
> > still the cleanest, IMHO.

The "cleanest" != techincal correctness, it may be the cleanest for
current infrastructure of BLOCK, but by no means is it techincally
correct.  It is more of the darwinism of hammer a square object into a
round hole.

> > > For the above two condition to be properly satisfied, I have to adjust
> > > and apply one driver policy make the driver behave and give the desired
> > > results.  We should note this will conform with future IDEMA proposals
> > > being submitted to the T committees.
> >
> > I still don't see a description of why this would cause a lost
> > interrupt. What is the flaw in my theory and/or code?

Because you think of the OS as defining the guidelines and the reality is
the hardware defines the rules and the OS has to work around.  I am happy
to allow you to continue to modify the ISR behavor and the command
behavor, and I am willing to be proven wrong.  When the problem does not
go away, I will request we return to the rules of the hardware.  And this
may require a MEMPOOL just like SCSI.

> Guys, i'm sorry to report you bad news but i still get 'lost interrupt'
> with all applied patches ( Anton and Andre ).

Regards,

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development



^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-20 10:48                   ` Jens Axboe
  2002-01-20 18:55                     ` Davide Libenzi
@ 2002-01-21  1:48                     ` Andre Hedrick
  2002-01-21  7:36                       ` Jens Axboe
  1 sibling, 1 reply; 57+ messages in thread
From: Andre Hedrick @ 2002-01-21  1:48 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Davide Libenzi, Anton Altaparmakov, Linus Torvalds, lkml

On Sun, 20 Jan 2002, Jens Axboe wrote:

> On Sat, Jan 19 2002, Andre Hedrick wrote:
> > > On Sat, Jan 19 2002, Andre Hedrick wrote:
> > > > On Sat, 19 Jan 2002, Jens Axboe wrote:
> > > > 
> > > > > On Fri, Jan 18 2002, Davide Libenzi wrote:
> > > > > > Guys, instead of requiring an -m8 to every user that is observing this
> > > > > > problem, isn't it better that you limit it inside the driver until things
> > > > > > gets fixed ?
> > > > > 
> > > > > There is no -m8 limit, 2.5.3-pre1 + ata253p1-2 patch handles any set
> > > > > multi mode value.
> > > > > 
> > > > > -- 
> > > > > Jens Axboe
> > > > > 
> > > > 
> > > > And that will generate the [lost interrupt], and I have it fixed at all
> > > > levels too now.
> > > 
> > > How so? I don't see the problem.
> > 
> > Unlike ATAPI which will generally send you more data than requested on
> > itw own, ATA devices do not like enjoy or play the game.  Additionally the
> 
> Unrelated ATAPI fodder :-)
> 
> > current code asks for 16 sectors, but we do not do the request copy
> > anymore, and this mean for every 4k of paging we are soliciting for 8k.
> 
> The (now) missing copy is unrelated.
> 
> > We only read out 4k thus the device has the the next 4k we may be wanting
> > ready.  Look at it as a dirty prefetch, but eventally the drive is going
> > to want to go south, thus [lost interrupt]
> 
> Even if the drive is programmed for 16 sectors in multi mode, it still
> must honor lower transfer sizes. The fix I did was not to limit this,
> but rather to only setup transfers for the amount of sectors in the
> first chunk. This is indeed necessary now that we do not have a copy of
> the request to fool around with.
> 
> > Basically as the Block maintainer, you pointed out I am restricted to 4k
> > chunking in PIO.  You decided, in the interest of the block glue layer
> > into the driver, to force early end request per Linus's requirements to
> > return back every 4k completed to block regardless of the size of the
> > total data requested.
> 
> Correct. The solution I did (which was one of the two I suggested) is
> still the cleanest, IMHO.
> 
> > For the above two condition to be properly satisfied, I have to adjust
> > and apply one driver policy make the driver behave and give the desired
> > results.  We should note this will conform with future IDEMA proposals
> > being submitted to the T committees.
> 
> I still don't see a description of why this would cause a lost
> interrupt. What is the flaw in my theory and/or code?

We issue a setmultimode command and the driver defaults to maximum or 16
sectors in most cases.  This means the drive is expecting 16 sectors, and
your design is to issue only 8 sectors or less.  The issuing of 8 sectors
or less in the sector_count, while the device is expecting 16 is a setup
for problems.

The effective operations your changes have created without addressing all
the variables is to terminate the command in process.  Therefore, the
decision made by you was to restrict the transfers to be process to the
count in rq->current_nr_sectors.  There is no bounds checking based on the
command executed.

*****************************
The questions to ask "How would the host terminate a command in progress, 
since BSY=1 (or DRQ=1) at this point?   Is that done via a DEVICE_RESET or
SRST write?"

Let me quote "Hale Landis" (one of the Fathers of ATA).

On an ATA device a H/W Reset or S/W reset is required to terminate a
command in progress. Writing to the Command register while BSY=1 or
BSY=0:DRQ=1 is illegal.

On an ATAPI device a H/W Reset or S/W reset or DEVICE RESET is
required to terminate a command in progress (and that includes PACKET
commands). Writing a value other than 08H (DEVICE RESET) to the
Command register while BSY=1 or BSY=0:DRQ=1 is illegal.
*****************************

Now what you have created is an illegal operation.

If the device is expecting a fixed amount of data and you stop it in
mid-stream and do not reset the device and issue a second command for
transfer, expect the device to go south.

If we are going to operate in this mode of brokeness, then let me finish
the change to of the command structure to make the driver work in that
environment.

Regards,

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development



^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21  1:48                     ` Andre Hedrick
@ 2002-01-21  7:36                       ` Jens Axboe
  2002-01-21  7:46                         ` Andre Hedrick
  0 siblings, 1 reply; 57+ messages in thread
From: Jens Axboe @ 2002-01-21  7:36 UTC (permalink / raw)
  To: Andre Hedrick; +Cc: Davide Libenzi, Anton Altaparmakov, Linus Torvalds, lkml

On Sun, Jan 20 2002, Andre Hedrick wrote:
> > Even if the drive is programmed for 16 sectors in multi mode, it still
> > must honor lower transfer sizes. The fix I did was not to limit this,
> > but rather to only setup transfers for the amount of sectors in the
> > first chunk. This is indeed necessary now that we do not have a copy of
> > the request to fool around with.
> > 
> > > Basically as the Block maintainer, you pointed out I am restricted to 4k
> > > chunking in PIO.  You decided, in the interest of the block glue layer
> > > into the driver, to force early end request per Linus's requirements to
> > > return back every 4k completed to block regardless of the size of the
> > > total data requested.
> > 
> > Correct. The solution I did (which was one of the two I suggested) is
> > still the cleanest, IMHO.
> > 
> > > For the above two condition to be properly satisfied, I have to adjust
> > > and apply one driver policy make the driver behave and give the desired
> > > results.  We should note this will conform with future IDEMA proposals
> > > being submitted to the T committees.
> > 
> > I still don't see a description of why this would cause a lost
> > interrupt. What is the flaw in my theory and/or code?
> 
> We issue a setmultimode command and the driver defaults to maximum or 16
> sectors in most cases.  This means the drive is expecting 16 sectors, and

Correct so far.

> your design is to issue only 8 sectors or less.  The issuing of 8 sectors
> or less in the sector_count, while the device is expecting 16 is a setup
> for problems.

No it's not. By your standards, that would mean that if the device is
setup for 16 sector multi mode, then I could never ever issue requests
less than that (without doing some crap 'toss away extra data' stuff).
How else would you handle, eg, 2 sector requests with multi mode set?

> The effective operations your changes have created without addressing all
> the variables is to terminate the command in process.  Therefore, the
> decision made by you was to restrict the transfers to be process to the
> count in rq->current_nr_sectors.  There is no bounds checking based on the
> command executed.

I'm not stopping a request in progress. I told the drive that the
request is current_nr_sectors big, so once it finishes transferring
current_nr_sectors sectors it truly thinks it's really done with that
request. And it is. However, I'm leaving the request on the queue (or,
really, ide_end_request is not taking it off because
end_that_request_first is not indicating it's complete). So I'm simply
starting from scratch with the remaining data. See?

> *****************************
> The questions to ask "How would the host terminate a command in progress, 
> since BSY=1 (or DRQ=1) at this point?   Is that done via a DEVICE_RESET or
> SRST write?"

[snip]

Moot, there's no premature termination going on.

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21  7:36                       ` Jens Axboe
@ 2002-01-21  7:46                         ` Andre Hedrick
  2002-01-21  8:01                           ` Jens Axboe
  0 siblings, 1 reply; 57+ messages in thread
From: Andre Hedrick @ 2002-01-21  7:46 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Davide Libenzi, Anton Altaparmakov, Linus Torvalds, lkml

On Mon, 21 Jan 2002, Jens Axboe wrote:

> On Sun, Jan 20 2002, Andre Hedrick wrote:
> > > Even if the drive is programmed for 16 sectors in multi mode, it still
> > > must honor lower transfer sizes. The fix I did was not to limit this,
> > > but rather to only setup transfers for the amount of sectors in the
> > > first chunk. This is indeed necessary now that we do not have a copy of
> > > the request to fool around with.
> > > 
> > > > Basically as the Block maintainer, you pointed out I am restricted to 4k
> > > > chunking in PIO.  You decided, in the interest of the block glue layer
> > > > into the driver, to force early end request per Linus's requirements to
> > > > return back every 4k completed to block regardless of the size of the
> > > > total data requested.
> > > 
> > > Correct. The solution I did (which was one of the two I suggested) is
> > > still the cleanest, IMHO.
> > > 
> > > > For the above two condition to be properly satisfied, I have to adjust
> > > > and apply one driver policy make the driver behave and give the desired
> > > > results.  We should note this will conform with future IDEMA proposals
> > > > being submitted to the T committees.
> > > 
> > > I still don't see a description of why this would cause a lost
> > > interrupt. What is the flaw in my theory and/or code?
> > 
> > We issue a setmultimode command and the driver defaults to maximum or 16
> > sectors in most cases.  This means the drive is expecting 16 sectors, and
> 
> Correct so far.
> 
> > your design is to issue only 8 sectors or less.  The issuing of 8 sectors
> > or less in the sector_count, while the device is expecting 16 is a setup
> > for problems.
> 
> No it's not. By your standards, that would mean that if the device is
> setup for 16 sector multi mode, then I could never ever issue requests
> less than that (without doing some crap 'toss away extra data' stuff).
> How else would you handle, eg, 2 sector requests with multi mode set?

Change the opcode in the command block to single sector, if
rq->current_nr_sectors != drive->multcount.

> > The effective operations your changes have created without addressing all
> > the variables is to terminate the command in process.  Therefore, the
> > decision made by you was to restrict the transfers to be process to the
> > count in rq->current_nr_sectors.  There is no bounds checking based on the
> > command executed.
> 
> I'm not stopping a request in progress. I told the drive that the
> request is current_nr_sectors big, so once it finishes transferring
> current_nr_sectors sectors it truly thinks it's really done with that
> request. And it is. However, I'm leaving the request on the queue (or,
> really, ide_end_request is not taking it off because
> end_that_request_first is not indicating it's complete). So I'm simply
> starting from scratch with the remaining data. See?

I know what you are doing, and I am trying to mate the requirement to use
the hardware to what you are sending down.  The question you need to
answer is issuing a request for multi-sector transfers less than what the
device is expecting, sane and correct.  If you tell me it is correct,
please show me where I read something wrong in the specification.

> > *****************************
> > The questions to ask "How would the host terminate a command in progress, 
> > since BSY=1 (or DRQ=1) at this point?   Is that done via a DEVICE_RESET or
> > SRST write?"
> 
> [snip]
> 
> Moot, there's no premature termination going on.

>From the OS/HOST side you are 100% correct.
>From the device side, do you know that for a fact?
Please read the difference in the two state-machine diagrams, the have the
same name phasing, but each describes which end of the cable you are on
and the expected behavors.

Respectfully,

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21  7:46                         ` Andre Hedrick
@ 2002-01-21  8:01                           ` Jens Axboe
  2002-01-21  8:42                             ` Andre Hedrick
  0 siblings, 1 reply; 57+ messages in thread
From: Jens Axboe @ 2002-01-21  8:01 UTC (permalink / raw)
  To: Andre Hedrick; +Cc: Davide Libenzi, Anton Altaparmakov, Linus Torvalds, lkml

On Sun, Jan 20 2002, Andre Hedrick wrote:
> > No it's not. By your standards, that would mean that if the device is
> > setup for 16 sector multi mode, then I could never ever issue requests
> > less than that (without doing some crap 'toss away extra data' stuff).
> > How else would you handle, eg, 2 sector requests with multi mode set?
> 
> Change the opcode in the command block to single sector, if
> rq->current_nr_sectors != drive->multcount.

That crossed my mind too, however that's not what we've been doing in
the past and multi mode has worked fine.

> > > The effective operations your changes have created without addressing all
> > > the variables is to terminate the command in process.  Therefore, the
> > > decision made by you was to restrict the transfers to be process to the
> > > count in rq->current_nr_sectors.  There is no bounds checking based on the
> > > command executed.
> > 
> > I'm not stopping a request in progress. I told the drive that the
> > request is current_nr_sectors big, so once it finishes transferring
> > current_nr_sectors sectors it truly thinks it's really done with that
> > request. And it is. However, I'm leaving the request on the queue (or,
> > really, ide_end_request is not taking it off because
> > end_that_request_first is not indicating it's complete). So I'm simply
> > starting from scratch with the remaining data. See?
> 
> I know what you are doing, and I am trying to mate the requirement to use

Yes

> the hardware to what you are sending down.  The question you need to
> answer is issuing a request for multi-sector transfers less than what the
> device is expecting, sane and correct.  If you tell me it is correct,
> please show me where I read something wrong in the specification.

You are saying that even when I do:

	/* this is our request */
	rq->nr_sectors = 48;
	rq->current_nr_sectors = 8;

	/* drive->mult_count has been programmed to 16 */

	/* bla bla command setup */
	OUT_BYTE(rq->current_nr_sectors, IDE_NSECTOR_REG);
	ide_set_hander(...);
	OUT_BYTE(WIN_MULTREAD, IDE_COMMAND_REG);

The drive will be wanting to transfer _16_ sectors, even though I told
it that I want _8_. This sounds very strange to me, and it means that
2.2/2.4 etc should have never worked in multi mode. I'll go find the
spec now... I am just talking out of my ass.

> > > *****************************
> > > The questions to ask "How would the host terminate a command in progress, 
> > > since BSY=1 (or DRQ=1) at this point?   Is that done via a DEVICE_RESET or
> > > SRST write?"
> > 
> > [snip]
> > 
> > Moot, there's no premature termination going on.
> 
> >From the OS/HOST side you are 100% correct.

Yep

> >From the device side, do you know that for a fact?

No

> Please read the difference in the two state-machine diagrams, the have the
> same name phasing, but each describes which end of the cable you are on
> and the expected behavors.

I will do so now, I think I've stated my speculation above and in
earlier mails :-)

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21  8:01                           ` Jens Axboe
@ 2002-01-21  8:42                             ` Andre Hedrick
  2002-01-21  9:00                               ` Jens Axboe
  0 siblings, 1 reply; 57+ messages in thread
From: Andre Hedrick @ 2002-01-21  8:42 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Davide Libenzi, Anton Altaparmakov, Linus Torvalds, lkml

On Mon, 21 Jan 2002, Jens Axboe wrote:

> On Sun, Jan 20 2002, Andre Hedrick wrote:
> > > No it's not. By your standards, that would mean that if the device is
> > > setup for 16 sector multi mode, then I could never ever issue requests
> > > less than that (without doing some crap 'toss away extra data' stuff).
> > > How else would you handle, eg, 2 sector requests with multi mode set?
> > 
> > Change the opcode in the command block to single sector, if
> > rq->current_nr_sectors != drive->multcount.
> 
> That crossed my mind too, however that's not what we've been doing in
> the past and multi mode has worked fine.

And we have not done a lot of things in the past.
Mind the fact, before you changed max-sectors from 128 to 255 != 256, he
problems maybe a direct result.  Mind the fact, it is my fault for not
telling you about the issue.

Since 128 and 256 are clearly 2,4,8,16 divisable and clean, as a result we
kind of masked the problem, but 255 is not at all the same issue.

Mind you Mark Lord did get this correct in the copy buffer issue, but the
bug introduced by 255 is the only problem I can trace to be suspect.

> > > > The effective operations your changes have created without addressing all
> > > > the variables is to terminate the command in process.  Therefore, the
> > > > decision made by you was to restrict the transfers to be process to the
> > > > count in rq->current_nr_sectors.  There is no bounds checking based on the
> > > > command executed.
> > > 
> > > I'm not stopping a request in progress. I told the drive that the
> > > request is current_nr_sectors big, so once it finishes transferring
> > > current_nr_sectors sectors it truly thinks it's really done with that
> > > request. And it is. However, I'm leaving the request on the queue (or,
> > > really, ide_end_request is not taking it off because
> > > end_that_request_first is not indicating it's complete). So I'm simply
> > > starting from scratch with the remaining data. See?
> > 
> > I know what you are doing, and I am trying to mate the requirement to use
> 
> Yes

Good we are still in agreement.

> > the hardware to what you are sending down.  The question you need to
> > answer is issuing a request for multi-sector transfers less than what the
> > device is expecting, sane and correct.  If you tell me it is correct,
> > please show me where I read something wrong in the specification.
> 
> You are saying that even when I do:
> 
> 	/* this is our request */
> 	rq->nr_sectors = 48;
> 	rq->current_nr_sectors = 8;
> 
> 	/* drive->mult_count has been programmed to 16 */

You exectute WIN_MULTREAD and it behaves based on what the device has been
programmed to do respond.

If you want 8 sectors only, by golly you had better tell it expect 8
sectors and then you can interrupt upon completion.

If it expects 16 sectors and you stop at 8, and issue a new command,
expect the device to go south.

> 	/* bla bla command setup */
> 	OUT_BYTE(rq->current_nr_sectors, IDE_NSECTOR_REG);
> 	ide_set_hander(...);
> 	OUT_BYTE(WIN_MULTREAD, IDE_COMMAND_REG);
> 
> The drive will be wanting to transfer _16_ sectors, even though I told
> it that I want _8_. This sounds very strange to me, and it means that
> 2.2/2.4 etc should have never worked in multi mode. I'll go find the
> spec now... I am just talking out of my ass.

See above.  And if the DRIVE or SPEC is wrong because we are doing it by
the book, we know where to raise a stink.

> > > > *****************************
> > > > The questions to ask "How would the host terminate a command in progress, 
> > > > since BSY=1 (or DRQ=1) at this point?   Is that done via a DEVICE_RESET or
> > > > SRST write?"
> > > 
> > > [snip]
> > > 
> > > Moot, there's no premature termination going on.
> > 
> > >From the OS/HOST side you are 100% correct.
> 
> Yep
> 
> > >From the device side, do you know that for a fact?
> 
> No
> 
> > Please read the difference in the two state-machine diagrams, the have the
> > same name phasing, but each describes which end of the cable you are on
> > and the expected behavors.
> 
> I will do so now, I think I've stated my speculation above and in
> earlier mails :-)

ERM, no ... This is a classic miscommunication event.
You have the analyzers, look for yourself.


Respectfully,

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21  9:00                               ` Jens Axboe
@ 2002-01-21  8:59                                 ` Andre Hedrick
  2002-01-21  9:07                                   ` Jens Axboe
  0 siblings, 1 reply; 57+ messages in thread
From: Andre Hedrick @ 2002-01-21  8:59 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Davide Libenzi, Anton Altaparmakov, Linus Torvalds, lkml

On Mon, 21 Jan 2002, Jens Axboe wrote:

> 
> (have read up on mult now)
> 
> On Mon, Jan 21 2002, Andre Hedrick wrote:
> > > On Sun, Jan 20 2002, Andre Hedrick wrote:
> > > > > No it's not. By your standards, that would mean that if the device is
> > > > > setup for 16 sector multi mode, then I could never ever issue requests
> > > > > less than that (without doing some crap 'toss away extra data' stuff).
> > > > > How else would you handle, eg, 2 sector requests with multi mode set?
> > > > 
> > > > Change the opcode in the command block to single sector, if
> > > > rq->current_nr_sectors != drive->multcount.
> > > 
> > > That crossed my mind too, however that's not what we've been doing in
> > > the past and multi mode has worked fine.
> > 
> > And we have not done a lot of things in the past.
> > Mind the fact, before you changed max-sectors from 128 to 255 != 256, he
> > problems maybe a direct result.  Mind the fact, it is my fault for not
> > telling you about the issue.
> > 
> > Since 128 and 256 are clearly 2,4,8,16 divisable and clean, as a result we
> > kind of masked the problem, but 255 is not at all the same issue.
> 
> But, eg, 24 sectors is not and we would still be starting a multi
> read/write for that...
> 
> > Mind you Mark Lord did get this correct in the copy buffer issue, but the
> > bug introduced by 255 is the only problem I can trace to be suspect.
> 
> 255 is effectively 248 (256 - 8), however that is still not correct when
> modulo a 16 multi sector setting.
> 
> > > > the hardware to what you are sending down.  The question you need to
> > > > answer is issuing a request for multi-sector transfers less than what the
> > > > device is expecting, sane and correct.  If you tell me it is correct,
> > > > please show me where I read something wrong in the specification.
> > > 
> > > You are saying that even when I do:
> > > 
> > > 	/* this is our request */
> > > 	rq->nr_sectors = 48;
> > > 	rq->current_nr_sectors = 8;
> > > 
> > > 	/* drive->mult_count has been programmed to 16 */
> > 
> > You exectute WIN_MULTREAD and it behaves based on what the device has been
> > programmed to do respond.
> > 
> > If you want 8 sectors only, by golly you had better tell it expect 8
> > sectors and then you can interrupt upon completion.
> > 
> > If it expects 16 sectors and you stop at 8, and issue a new command,
> > expect the device to go south.
> 
> This really sucks, it means we cannot safely use multi mode for a
> variety of request sizes. I agree with your earlier comment. Here's what
> I think we should be doing: when requesting multi mode, limit to 8
> sectors like in your patch. This is by far the most commen multiple,
> that's why. When starting a request, use WIN_MULT* only for cases where
> (rq->nr_sectors % drive->mult_count) == 0. If that doesn't hold, simply
> use WIN_READ or WIN_WRITE.
> 
> Applied the 2.5.3-pre2 sched SMP fix, booting -pre2 and then hacking up
> a patch.

Why I have already done it, just take and apply.

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21  8:42                             ` Andre Hedrick
@ 2002-01-21  9:00                               ` Jens Axboe
  2002-01-21  8:59                                 ` Andre Hedrick
  0 siblings, 1 reply; 57+ messages in thread
From: Jens Axboe @ 2002-01-21  9:00 UTC (permalink / raw)
  To: Andre Hedrick; +Cc: Davide Libenzi, Anton Altaparmakov, Linus Torvalds, lkml


(have read up on mult now)

On Mon, Jan 21 2002, Andre Hedrick wrote:
> > On Sun, Jan 20 2002, Andre Hedrick wrote:
> > > > No it's not. By your standards, that would mean that if the device is
> > > > setup for 16 sector multi mode, then I could never ever issue requests
> > > > less than that (without doing some crap 'toss away extra data' stuff).
> > > > How else would you handle, eg, 2 sector requests with multi mode set?
> > > 
> > > Change the opcode in the command block to single sector, if
> > > rq->current_nr_sectors != drive->multcount.
> > 
> > That crossed my mind too, however that's not what we've been doing in
> > the past and multi mode has worked fine.
> 
> And we have not done a lot of things in the past.
> Mind the fact, before you changed max-sectors from 128 to 255 != 256, he
> problems maybe a direct result.  Mind the fact, it is my fault for not
> telling you about the issue.
> 
> Since 128 and 256 are clearly 2,4,8,16 divisable and clean, as a result we
> kind of masked the problem, but 255 is not at all the same issue.

But, eg, 24 sectors is not and we would still be starting a multi
read/write for that...

> Mind you Mark Lord did get this correct in the copy buffer issue, but the
> bug introduced by 255 is the only problem I can trace to be suspect.

255 is effectively 248 (256 - 8), however that is still not correct when
modulo a 16 multi sector setting.

> > > the hardware to what you are sending down.  The question you need to
> > > answer is issuing a request for multi-sector transfers less than what the
> > > device is expecting, sane and correct.  If you tell me it is correct,
> > > please show me where I read something wrong in the specification.
> > 
> > You are saying that even when I do:
> > 
> > 	/* this is our request */
> > 	rq->nr_sectors = 48;
> > 	rq->current_nr_sectors = 8;
> > 
> > 	/* drive->mult_count has been programmed to 16 */
> 
> You exectute WIN_MULTREAD and it behaves based on what the device has been
> programmed to do respond.
> 
> If you want 8 sectors only, by golly you had better tell it expect 8
> sectors and then you can interrupt upon completion.
> 
> If it expects 16 sectors and you stop at 8, and issue a new command,
> expect the device to go south.

This really sucks, it means we cannot safely use multi mode for a
variety of request sizes. I agree with your earlier comment. Here's what
I think we should be doing: when requesting multi mode, limit to 8
sectors like in your patch. This is by far the most commen multiple,
that's why. When starting a request, use WIN_MULT* only for cases where
(rq->nr_sectors % drive->mult_count) == 0. If that doesn't hold, simply
use WIN_READ or WIN_WRITE.

Applied the 2.5.3-pre2 sched SMP fix, booting -pre2 and then hacking up
a patch.

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21  8:59                                 ` Andre Hedrick
@ 2002-01-21  9:07                                   ` Jens Axboe
  2002-01-21  9:48                                     ` Andre Hedrick
  0 siblings, 1 reply; 57+ messages in thread
From: Jens Axboe @ 2002-01-21  9:07 UTC (permalink / raw)
  To: Andre Hedrick; +Cc: Davide Libenzi, Anton Altaparmakov, Linus Torvalds, lkml

On Mon, Jan 21 2002, Andre Hedrick wrote:
> > This really sucks, it means we cannot safely use multi mode for a
> > variety of request sizes. I agree with your earlier comment. Here's what
> > I think we should be doing: when requesting multi mode, limit to 8
> > sectors like in your patch. This is by far the most commen multiple,
> > that's why. When starting a request, use WIN_MULT* only for cases where
> > (rq->nr_sectors % drive->mult_count) == 0. If that doesn't hold, simply
> > use WIN_READ or WIN_WRITE.
> > 
> > Applied the 2.5.3-pre2 sched SMP fix, booting -pre2 and then hacking up
> > a patch.
> 
> Why I have already done it, just take and apply.

Cool, where is it?

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21  9:07                                   ` Jens Axboe
@ 2002-01-21  9:48                                     ` Andre Hedrick
  0 siblings, 0 replies; 57+ messages in thread
From: Andre Hedrick @ 2002-01-21  9:48 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Davide Libenzi, Anton Altaparmakov, Linus Torvalds, lkml

On Mon, 21 Jan 2002, Jens Axboe wrote:

> On Mon, Jan 21 2002, Andre Hedrick wrote:
> > > This really sucks, it means we cannot safely use multi mode for a
> > > variety of request sizes. I agree with your earlier comment. Here's what
> > > I think we should be doing: when requesting multi mode, limit to 8
> > > sectors like in your patch. This is by far the most commen multiple,
> > > that's why. When starting a request, use WIN_MULT* only for cases where
> > > (rq->nr_sectors % drive->mult_count) == 0. If that doesn't hold, simply
> > > use WIN_READ or WIN_WRITE.
> > > 
> > > Applied the 2.5.3-pre2 sched SMP fix, booting -pre2 and then hacking up
> > > a patch.
> > 
> > Why I have already done it, just take and apply.
> 
> Cool, where is it?

Attached, and please do not pick and choose.

I moved and added things for a reason as not to loose hard work, because
of writing the ISR's to the purity of the spec, and then we modify ISR's 
to fit the kernel and not the other way around.  I do have a just  reason
to request a MEMPOOL, which would be exclusively used for PIO operations.
Then we get out of the mess we are in and get in to serious compliance to
how the hardware works.

Thus in the offline comments about the creation of an ata_request_struct,
a mempool allocation for PIO is justified.  Since the correct solution of
DMA timeouts is to void the request and assume no data down is valid.
Thus PIO is next.

If we look at the overhead in the generation of a new request for each and
every time we do a PIO transfer it is scary.  Think about this issue for
more than the time it takes to hit the delete key.

Respectfully,

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21  0:12                       ` Andre Hedrick
@ 2002-01-21 10:43                         ` Vojtech Pavlik
  2002-01-21 10:48                           ` Jens Axboe
  2002-01-21 11:22                           ` Andre Hedrick
  0 siblings, 2 replies; 57+ messages in thread
From: Vojtech Pavlik @ 2002-01-21 10:43 UTC (permalink / raw)
  To: Andre Hedrick
  Cc: Davide Libenzi, Jens Axboe, Anton Altaparmakov, Linus Torvalds,
	lkml

On Sun, Jan 20, 2002 at 04:12:36PM -0800, Andre Hedrick wrote:

> > > > We only read out 4k thus the device has the the next 4k we may be wanting
> > > > ready.  Look at it as a dirty prefetch, but eventally the drive is going
> > > > to want to go south, thus [lost interrupt]
> > >
> > > Even if the drive is programmed for 16 sectors in multi mode, it still
> > > must honor lower transfer sizes. The fix I did was not to limit this,
> > > but rather to only setup transfers for the amount of sectors in the
> > > first chunk. This is indeed necessary now that we do not have a copy of
> > > the request to fool around with.
> 
> Listen and for just a second okay.
> 
> Since the set multimode command is similar to the set transfer rate, if
> you program the drive to run at U100 but the host can feed only U33 you
> have problems.  Much of this simple arguement is the same answer for
> multimode.
> 
> Same thing here but a variation, of the operations,

So you're saying that if you program the drive to multimode 16, you
can't read a single sector and always have to read 16? That not only
doesn't make sense to me, but it also contradicts anything that I've
heard before.

-- 
Vojtech Pavlik
SuSE Labs

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21 10:43                         ` Vojtech Pavlik
@ 2002-01-21 10:48                           ` Jens Axboe
  2002-01-21 10:56                             ` Jens Axboe
  2002-01-21 11:14                             ` Vojtech Pavlik
  2002-01-21 11:22                           ` Andre Hedrick
  1 sibling, 2 replies; 57+ messages in thread
From: Jens Axboe @ 2002-01-21 10:48 UTC (permalink / raw)
  To: Vojtech Pavlik
  Cc: Andre Hedrick, Davide Libenzi, Anton Altaparmakov, Linus Torvalds,
	lkml

On Mon, Jan 21 2002, Vojtech Pavlik wrote:
> On Sun, Jan 20, 2002 at 04:12:36PM -0800, Andre Hedrick wrote:
> 
> > > > > We only read out 4k thus the device has the the next 4k we may be wanting
> > > > > ready.  Look at it as a dirty prefetch, but eventally the drive is going
> > > > > to want to go south, thus [lost interrupt]
> > > >
> > > > Even if the drive is programmed for 16 sectors in multi mode, it still
> > > > must honor lower transfer sizes. The fix I did was not to limit this,
> > > > but rather to only setup transfers for the amount of sectors in the
> > > > first chunk. This is indeed necessary now that we do not have a copy of
> > > > the request to fool around with.
> > 
> > Listen and for just a second okay.
> > 
> > Since the set multimode command is similar to the set transfer rate, if
> > you program the drive to run at U100 but the host can feed only U33 you
> > have problems.  Much of this simple arguement is the same answer for
> > multimode.
> > 
> > Same thing here but a variation, of the operations,
> 
> So you're saying that if you program the drive to multimode 16, you
> can't read a single sector and always have to read 16? That not only
> doesn't make sense to me, but it also contradicts anything that I've
> heard before.

Well it didn't/doesn't make sense to me either, let me quote spec
though:

(READ_MULTIPLE)

"If the number of requested sectors is not evenly divisible by the block
count, as many full blocks as possible are transferred, followed by a
final, partial block transfer."

(block count being the multi setting here)

I actually misread this the first time around, it seems my original code
was indeed correct (and that 2.4 of course also is). For the example 24
sector request and multi mode of 16, the drive _will_ only expect 8
sectors in the final run. That makes sense to me again, I couldn't
understand the apparent brain damage in the model Andre suggested.

Time for a new patch...

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21 10:48                           ` Jens Axboe
@ 2002-01-21 10:56                             ` Jens Axboe
  2002-01-21 17:44                               ` Davide Libenzi
  2002-01-21 11:14                             ` Vojtech Pavlik
  1 sibling, 1 reply; 57+ messages in thread
From: Jens Axboe @ 2002-01-21 10:56 UTC (permalink / raw)
  To: Vojtech Pavlik
  Cc: Andre Hedrick, Davide Libenzi, Anton Altaparmakov, Linus Torvalds,
	lkml

On Mon, Jan 21 2002, Jens Axboe wrote:
> Time for a new patch...

Actually, then I did get it right in 2.5.3-pre2 so no issues. Only
problem is the 48-bit addressing nr_sectors bug, however that can't hit
right now so it's not an issue.

That just leaves Davide's lost interrupt issue, lets look into that
now...

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21 10:48                           ` Jens Axboe
  2002-01-21 10:56                             ` Jens Axboe
@ 2002-01-21 11:14                             ` Vojtech Pavlik
  2002-01-21 11:29                               ` Jens Axboe
  2002-01-21 11:34                               ` Andre Hedrick
  1 sibling, 2 replies; 57+ messages in thread
From: Vojtech Pavlik @ 2002-01-21 11:14 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Andre Hedrick, Davide Libenzi, Anton Altaparmakov, Linus Torvalds,
	lkml

On Mon, Jan 21, 2002 at 11:48:30AM +0100, Jens Axboe wrote:
> On Mon, Jan 21 2002, Vojtech Pavlik wrote:
> > On Sun, Jan 20, 2002 at 04:12:36PM -0800, Andre Hedrick wrote:
> > 
> > > > > > We only read out 4k thus the device has the the next 4k we may be wanting
> > > > > > ready.  Look at it as a dirty prefetch, but eventally the drive is going
> > > > > > to want to go south, thus [lost interrupt]
> > > > >
> > > > > Even if the drive is programmed for 16 sectors in multi mode, it still
> > > > > must honor lower transfer sizes. The fix I did was not to limit this,
> > > > > but rather to only setup transfers for the amount of sectors in the
> > > > > first chunk. This is indeed necessary now that we do not have a copy of
> > > > > the request to fool around with.
> > > 
> > > Listen and for just a second okay.
> > > 
> > > Since the set multimode command is similar to the set transfer rate, if
> > > you program the drive to run at U100 but the host can feed only U33 you
> > > have problems.  Much of this simple arguement is the same answer for
> > > multimode.
> > > 
> > > Same thing here but a variation, of the operations,
> > 
> > So you're saying that if you program the drive to multimode 16, you
> > can't read a single sector and always have to read 16? That not only
> > doesn't make sense to me, but it also contradicts anything that I've
> > heard before.
> 
> Well it didn't/doesn't make sense to me either, let me quote spec
> though:
> 
> (READ_MULTIPLE)
> 
> "If the number of requested sectors is not evenly divisible by the block
> count, as many full blocks as possible are transferred, followed by a
> final, partial block transfer."
> 
> (block count being the multi setting here)
> 
> I actually misread this the first time around, it seems my original code
> was indeed correct (and that 2.4 of course also is). For the example 24
> sector request and multi mode of 16, the drive _will_ only expect 8
> sectors in the final run. That makes sense to me again, I couldn't
> understand the apparent brain damage in the model Andre suggested.
> 
> Time for a new patch...

I always thought it is like this (and this is what I still believe after
having read the sprcification):

---
SET_MUTIPLE 16 sectors
---
READ_MULTIPLE 24 sectors
IRQ
PIO transfer 16 sectors
IRQ
PIO transfer 8 sectors
---

Where am I wrong?

By the way, the device *isn't* required to support any lower multiple
count than the maximum one it advertizes. Ugly.

-- 
Vojtech Pavlik
SuSE Labs

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21 10:43                         ` Vojtech Pavlik
  2002-01-21 10:48                           ` Jens Axboe
@ 2002-01-21 11:22                           ` Andre Hedrick
  2002-01-21 11:32                             ` Vojtech Pavlik
  1 sibling, 1 reply; 57+ messages in thread
From: Andre Hedrick @ 2002-01-21 11:22 UTC (permalink / raw)
  To: Vojtech Pavlik
  Cc: Davide Libenzi, Jens Axboe, Anton Altaparmakov, Linus Torvalds,
	lkml

On Mon, 21 Jan 2002, Vojtech Pavlik wrote:

> On Sun, Jan 20, 2002 at 04:12:36PM -0800, Andre Hedrick wrote:
> 
> > > > > We only read out 4k thus the device has the the next 4k we may be wanting
> > > > > ready.  Look at it as a dirty prefetch, but eventally the drive is going
> > > > > to want to go south, thus [lost interrupt]
> > > >
> > > > Even if the drive is programmed for 16 sectors in multi mode, it still
> > > > must honor lower transfer sizes. The fix I did was not to limit this,
> > > > but rather to only setup transfers for the amount of sectors in the
> > > > first chunk. This is indeed necessary now that we do not have a copy of
> > > > the request to fool around with.
> > 
> > Listen and for just a second okay.
> > 
> > Since the set multimode command is similar to the set transfer rate, if
> > you program the drive to run at U100 but the host can feed only U33 you
> > have problems.  Much of this simple arguement is the same answer for
> > multimode.
> > 
> > Same thing here but a variation, of the operations,
> 
> So you're saying that if you program the drive to multimode 16, you
> can't read a single sector and always have to read 16? That not only
> doesn't make sense to me, but it also contradicts anything that I've
> heard before.

Vojtech,

If the device is programmed for to do 16 sectors in multimode, it and you
issue a read/write multiple pio and short change the device it is not
going to like it.  However if it is programmed for multimode and you issue
single sector pio transfers command opcodes it is fine.

Do we differ?

Regards,



Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21 11:14                             ` Vojtech Pavlik
@ 2002-01-21 11:29                               ` Jens Axboe
  2002-01-21 11:38                                 ` Vojtech Pavlik
  2002-01-21 11:34                               ` Andre Hedrick
  1 sibling, 1 reply; 57+ messages in thread
From: Jens Axboe @ 2002-01-21 11:29 UTC (permalink / raw)
  To: Vojtech Pavlik
  Cc: Andre Hedrick, Davide Libenzi, Anton Altaparmakov, Linus Torvalds,
	lkml

On Mon, Jan 21 2002, Vojtech Pavlik wrote:
> I always thought it is like this (and this is what I still believe after
> having read the sprcification):
> 
> ---
> SET_MUTIPLE 16 sectors
> ---
> READ_MULTIPLE 24 sectors
> IRQ
> PIO transfer 16 sectors
> IRQ
> PIO transfer 8 sectors
> ---
> 
> Where am I wrong?

I agree completely, see previous mail.

> By the way, the device *isn't* required to support any lower multiple
> count than the maximum one it advertizes. Ugly.

Oh? That basically narrows down the multi count value from hdparm to a
boolean on-or-off. I'd be surprised to see any drives break with lower
multi count in real life, though..

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21 11:22                           ` Andre Hedrick
@ 2002-01-21 11:32                             ` Vojtech Pavlik
  2002-01-21 11:34                               ` Jens Axboe
  0 siblings, 1 reply; 57+ messages in thread
From: Vojtech Pavlik @ 2002-01-21 11:32 UTC (permalink / raw)
  To: Andre Hedrick
  Cc: Davide Libenzi, Jens Axboe, Anton Altaparmakov, Linus Torvalds,
	lkml

On Mon, Jan 21, 2002 at 03:22:20AM -0800, Andre Hedrick wrote:
> On Mon, 21 Jan 2002, Vojtech Pavlik wrote:
> 
> > On Sun, Jan 20, 2002 at 04:12:36PM -0800, Andre Hedrick wrote:
> > 
> > > > > > We only read out 4k thus the device has the the next 4k we may be wanting
> > > > > > ready.  Look at it as a dirty prefetch, but eventally the drive is going
> > > > > > to want to go south, thus [lost interrupt]
> > > > >
> > > > > Even if the drive is programmed for 16 sectors in multi mode, it still
> > > > > must honor lower transfer sizes. The fix I did was not to limit this,
> > > > > but rather to only setup transfers for the amount of sectors in the
> > > > > first chunk. This is indeed necessary now that we do not have a copy of
> > > > > the request to fool around with.
> > > 
> > > Listen and for just a second okay.
> > > 
> > > Since the set multimode command is similar to the set transfer rate, if
> > > you program the drive to run at U100 but the host can feed only U33 you
> > > have problems.  Much of this simple arguement is the same answer for
> > > multimode.
> > > 
> > > Same thing here but a variation, of the operations,
> > 
> > So you're saying that if you program the drive to multimode 16, you
> > can't read a single sector and always have to read 16? That not only
> > doesn't make sense to me, but it also contradicts anything that I've
> > heard before.
> 
> Vojtech,
> 
> If the device is programmed for to do 16 sectors in multimode, it and you
> issue a read/write multiple pio and short change the device it is not
> going to like it.  However if it is programmed for multimode and you issue
> single sector pio transfers command opcodes it is fine.
> 
> Do we differ?

I think so. Check my mail from 11:14:56 GMT today. I fully understand
that if I supply less data to the device than it expects or get less
from it than it has, it'll be a problem. But I think the specification
doesn't prohibit reading amounts not divisible by multimode setting via
the multimode command. I've read it quite carefully again.

-- 
Vojtech Pavlik
SuSE Labs

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21 11:14                             ` Vojtech Pavlik
  2002-01-21 11:29                               ` Jens Axboe
@ 2002-01-21 11:34                               ` Andre Hedrick
  2002-01-21 17:44                                 ` Jens Axboe
  1 sibling, 1 reply; 57+ messages in thread
From: Andre Hedrick @ 2002-01-21 11:34 UTC (permalink / raw)
  To: Vojtech Pavlik
  Cc: Jens Axboe, Davide Libenzi, Anton Altaparmakov, Linus Torvalds,
	lkml

On Mon, 21 Jan 2002, Vojtech Pavlik wrote:

> On Mon, Jan 21, 2002 at 11:48:30AM +0100, Jens Axboe wrote:
> > On Mon, Jan 21 2002, Vojtech Pavlik wrote:
> > > On Sun, Jan 20, 2002 at 04:12:36PM -0800, Andre Hedrick wrote:
> > > 
> > > > > > > We only read out 4k thus the device has the the next 4k we may be wanting
> > > > > > > ready.  Look at it as a dirty prefetch, but eventally the drive is going
> > > > > > > to want to go south, thus [lost interrupt]
> > > > > >
> > > > > > Even if the drive is programmed for 16 sectors in multi mode, it still
> > > > > > must honor lower transfer sizes. The fix I did was not to limit this,
> > > > > > but rather to only setup transfers for the amount of sectors in the
> > > > > > first chunk. This is indeed necessary now that we do not have a copy of
> > > > > > the request to fool around with.
> > > > 
> > > > Listen and for just a second okay.
> > > > 
> > > > Since the set multimode command is similar to the set transfer rate, if
> > > > you program the drive to run at U100 but the host can feed only U33 you
> > > > have problems.  Much of this simple arguement is the same answer for
> > > > multimode.
> > > > 
> > > > Same thing here but a variation, of the operations,
> > > 
> > > So you're saying that if you program the drive to multimode 16, you
> > > can't read a single sector and always have to read 16? That not only
> > > doesn't make sense to me, but it also contradicts anything that I've
> > > heard before.
> > 
> > Well it didn't/doesn't make sense to me either, let me quote spec
> > though:
> > 
> > (READ_MULTIPLE)
> > 
> > "If the number of requested sectors is not evenly divisible by the block
> > count, as many full blocks as possible are transferred, followed by a
> > final, partial block transfer."
> > 
> > (block count being the multi setting here)
> > 
> > I actually misread this the first time around, it seems my original code
> > was indeed correct (and that 2.4 of course also is). For the example 24
> > sector request and multi mode of 16, the drive _will_ only expect 8
> > sectors in the final run. That makes sense to me again, I couldn't
> > understand the apparent brain damage in the model Andre suggested.
> > 
> > Time for a new patch...
> 
> I always thought it is like this (and this is what I still believe after
> having read the sprcification):
> 
> ---
> SET_MUTIPLE 16 sectors
> ---
> READ_MULTIPLE 24 sectors
> IRQ
> PIO transfer 16 sectors
> IRQ
> PIO transfer 8 sectors
> ---
> 
> Where am I wrong?
> 
> By the way, the device *isn't* required to support any lower multiple
> count than the maximum one it advertizes. Ugly.

No but the HOST is to obey the requirements of the device.
The spec is written from the drive side not the host side.

"All Ye Hosts, SHALL address me in such a manner as described, or be
aborted or I SHALL remain in an undertermined state."

Note only recently have the HOSTS been about to setup guidelines for what
is sane and not stupid for the device to do or behave.

Again, the HOST(Linux) is not following the device side rules so expect
difficulty when we depart.  The Brain Damage is how to talk to the
hardware, and it is clear we are not doing it right because we are bending
the rules stuff it into and API that not acceptable.  However we are
stuck.  Again, simplicity works, generate a MEMPOOL for PIO such that the
buffer pages are contigious and the 4k page dance is a NOOP.  Until that
time we will be fussing about.

Regards,


Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21 11:32                             ` Vojtech Pavlik
@ 2002-01-21 11:34                               ` Jens Axboe
  0 siblings, 0 replies; 57+ messages in thread
From: Jens Axboe @ 2002-01-21 11:34 UTC (permalink / raw)
  To: Vojtech Pavlik
  Cc: Andre Hedrick, Davide Libenzi, Anton Altaparmakov, Linus Torvalds,
	lkml

On Mon, Jan 21 2002, Vojtech Pavlik wrote:
> > If the device is programmed for to do 16 sectors in multimode, it and you
> > issue a read/write multiple pio and short change the device it is not
> > going to like it.  However if it is programmed for multimode and you issue
> > single sector pio transfers command opcodes it is fine.
> > 
> > Do we differ?
> 
> I think so. Check my mail from 11:14:56 GMT today. I fully understand
> that if I supply less data to the device than it expects or get less
> from it than it has, it'll be a problem. But I think the specification
> doesn't prohibit reading amounts not divisible by multimode setting via
> the multimode command. I've read it quite carefully again.

Like I said, if this was indeed a problem it would be _trivial_ to break
2.2/2.4 IDE with enabled multi mode... Basically it would be hard to get
_anything_ done.

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21 11:29                               ` Jens Axboe
@ 2002-01-21 11:38                                 ` Vojtech Pavlik
  2002-01-21 11:51                                   ` Andre Hedrick
  0 siblings, 1 reply; 57+ messages in thread
From: Vojtech Pavlik @ 2002-01-21 11:38 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Andre Hedrick, Davide Libenzi, Anton Altaparmakov, Linus Torvalds,
	lkml

On Mon, Jan 21, 2002 at 12:29:54PM +0100, Jens Axboe wrote:
> On Mon, Jan 21 2002, Vojtech Pavlik wrote:
> > I always thought it is like this (and this is what I still believe after
> > having read the sprcification):
> > 
> > ---
> > SET_MUTIPLE 16 sectors
> > ---
> > READ_MULTIPLE 24 sectors
> > IRQ
> > PIO transfer 16 sectors
> > IRQ
> > PIO transfer 8 sectors
> > ---
> > 
> > Where am I wrong?
> 
> I agree completely, see previous mail.
> 
> > By the way, the device *isn't* required to support any lower multiple
> > count than the maximum one it advertizes. Ugly.
> 
> Oh? That basically narrows down the multi count value from hdparm to a
> boolean on-or-off. I'd be surprised to see any drives break with lower
> multi count in real life, though..

The spec seems to mandate to check the Identify data again after setting
new Multmode to see whether the drive supported the value we wanted to
program it to.

-- 
Vojtech Pavlik
SuSE Labs

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21 11:38                                 ` Vojtech Pavlik
@ 2002-01-21 11:51                                   ` Andre Hedrick
  0 siblings, 0 replies; 57+ messages in thread
From: Andre Hedrick @ 2002-01-21 11:51 UTC (permalink / raw)
  To: Vojtech Pavlik
  Cc: Jens Axboe, Davide Libenzi, Anton Altaparmakov, Linus Torvalds,
	lkml

On Mon, 21 Jan 2002, Vojtech Pavlik wrote:

> On Mon, Jan 21, 2002 at 12:29:54PM +0100, Jens Axboe wrote:
> > On Mon, Jan 21 2002, Vojtech Pavlik wrote:
> > > I always thought it is like this (and this is what I still believe after
> > > having read the sprcification):
> > > 
> > > ---
> > > SET_MUTIPLE 16 sectors
> > > ---
> > > READ_MULTIPLE 24 sectors
> > > IRQ
> > > PIO transfer 16 sectors
> > > IRQ
> > > PIO transfer 8 sectors
> > > ---
> > > 
> > > Where am I wrong?
> > 
> > I agree completely, see previous mail.
> > 
> > > By the way, the device *isn't* required to support any lower multiple
> > > count than the maximum one it advertizes. Ugly.
> > 
> > Oh? That basically narrows down the multi count value from hdparm to a
> > boolean on-or-off. I'd be surprised to see any drives break with lower
> > multi count in real life, though..
> 
> The spec seems to mandate to check the Identify data again after setting
> new Multmode to see whether the drive supported the value we wanted to
> program it to.

Forget the TEXT in the command description, cause what you are looking for
is not there.  It is stated and expressed in the state-diagrams, only.
There is minimal text, and only timing profiles for the device
manufacturers.  How to make it go is in the pictures and the text is only
supporting information.

That is why it is so painful to decode, and why it does not fit into the
requirements of early return of ever 4k or page of data back to the upper
layers.  So if we can not do the entire transfer w/ contigious memory we
are forced into this game of jump through the hoops.

Regards,

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21 10:56                             ` Jens Axboe
@ 2002-01-21 17:44                               ` Davide Libenzi
  0 siblings, 0 replies; 57+ messages in thread
From: Davide Libenzi @ 2002-01-21 17:44 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Vojtech Pavlik, Andre Hedrick, Anton Altaparmakov, Linus Torvalds,
	lkml

On Mon, 21 Jan 2002, Jens Axboe wrote:

> On Mon, Jan 21 2002, Jens Axboe wrote:
> > Time for a new patch...
>
> Actually, then I did get it right in 2.5.3-pre2 so no issues. Only
> problem is the 48-bit addressing nr_sectors bug, however that can't hit
> right now so it's not an issue.
>
> That just leaves Davide's lost interrupt issue, lets look into that
> now...

Guys, am i the only fool in town getting this one ?



- Davide



^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21 11:34                               ` Andre Hedrick
@ 2002-01-21 17:44                                 ` Jens Axboe
  2002-01-21 20:18                                   ` Andre Hedrick
  2002-01-21 21:44                                   ` Andre Hedrick
  0 siblings, 2 replies; 57+ messages in thread
From: Jens Axboe @ 2002-01-21 17:44 UTC (permalink / raw)
  To: Andre Hedrick
  Cc: Vojtech Pavlik, Davide Libenzi, Anton Altaparmakov,
	Linus Torvalds, lkml

On Mon, Jan 21 2002, Andre Hedrick wrote:
> > I always thought it is like this (and this is what I still believe after
> > having read the sprcification):
> > 
> > ---
> > SET_MUTIPLE 16 sectors
> > ---
> > READ_MULTIPLE 24 sectors
> > IRQ
> > PIO transfer 16 sectors
> > IRQ
> > PIO transfer 8 sectors
> > ---
> > 
> > Where am I wrong?
> > 
> > By the way, the device *isn't* required to support any lower multiple
> > count than the maximum one it advertizes. Ugly.
> 
> No but the HOST is to obey the requirements of the device.
> The spec is written from the drive side not the host side.
> 
> "All Ye Hosts, SHALL address me in such a manner as described, or be
> aborted or I SHALL remain in an undertermined state."
> 
> Note only recently have the HOSTS been about to setup guidelines for what
> is sane and not stupid for the device to do or behave.
> 
> Again, the HOST(Linux) is not following the device side rules so expect
> difficulty when we depart.  The Brain Damage is how to talk to the
> hardware, and it is clear we are not doing it right because we are bending
> the rules stuff it into and API that not acceptable.  However we are
> stuck.  Again, simplicity works, generate a MEMPOOL for PIO such that the
> buffer pages are contigious and the 4k page dance is a NOOP.  Until that
> time we will be fussing about.

Andre,

Do you know how to say "I was wrong"? You are walking off-track again.
It's clearly the way that Vojtech and I describe, otherwise current code
would just not work. And 2.4, 2.2, 2.0 neither.

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21 17:44                                 ` Jens Axboe
@ 2002-01-21 20:18                                   ` Andre Hedrick
  2002-01-21 22:57                                     ` Vojtech Pavlik
  2002-01-21 21:44                                   ` Andre Hedrick
  1 sibling, 1 reply; 57+ messages in thread
From: Andre Hedrick @ 2002-01-21 20:18 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Vojtech Pavlik, Davide Libenzi, Anton Altaparmakov,
	Linus Torvalds, lkml

On Mon, 21 Jan 2002, Jens Axboe wrote:

> On Mon, Jan 21 2002, Andre Hedrick wrote:
> > > I always thought it is like this (and this is what I still believe after
> > > having read the sprcification):
> > > 
> > > ---
> > > SET_MUTIPLE 16 sectors
> > > ---
> > > READ_MULTIPLE 24 sectors
> > > IRQ
> > > PIO transfer 16 sectors
> > > IRQ
> > > PIO transfer 8 sectors
> > > ---
> > > 
> > > Where am I wrong?
> > > 
> > > By the way, the device *isn't* required to support any lower multiple
> > > count than the maximum one it advertizes. Ugly.
> > 
> > No but the HOST is to obey the requirements of the device.
> > The spec is written from the drive side not the host side.
> > 
> > "All Ye Hosts, SHALL address me in such a manner as described, or be
> > aborted or I SHALL remain in an undertermined state."
> > 
> > Note only recently have the HOSTS been about to setup guidelines for what
> > is sane and not stupid for the device to do or behave.
> > 
> > Again, the HOST(Linux) is not following the device side rules so expect
> > difficulty when we depart.  The Brain Damage is how to talk to the
> > hardware, and it is clear we are not doing it right because we are bending
> > the rules stuff it into and API that not acceptable.  However we are
> > stuck.  Again, simplicity works, generate a MEMPOOL for PIO such that the
> > buffer pages are contigious and the 4k page dance is a NOOP.  Until that
> > time we will be fussing about.
> 
> Andre,
> 
> Do you know how to say "I was wrong"? You are walking off-track again.
> It's clearly the way that Vojtech and I describe, otherwise current code
> would just not work. And 2.4, 2.2, 2.0 neither.

I will and have done so in the past when I am, and it would be nice if you
and Linus could do the same.  However since both are going to enforce the
partial completion of IO on page boundaries or 4k, and you are not
allowed to pause or stop in the middle of a command execution to play
memory games under ATA/IDE PIO rules, period.

You two have limited me to having a single 4k or one page of memory per
request.  Regardless if the rq->buffer pointer list is handed to me, I can
not use or walk it with out having to jump in and out of a memory window.

So if you want partial completions of 4k boundaries then do not send down
requests bigger than 4k, or give me back the rq scratch pad copy (and I do
not want it back, it is lame), or grant the mempool for the atomic io of
the request and it must be contigious to the allow a clean walk of the
buffer from head to tail.

<insert your reasons why it will never be granted here>

Linux's requirements are against the hardware, thus why it does not work.

I have stated if (rq->current_nr_sectors != drive_multicount) do single
sector and restrict the data-io to rq->current_nr_sectors.
So it is clear for everyone "rq->current_nr_sectors" is bounded to be
1,2,3,4,5,6,7,8 sectors of data io.  It is not allowed to do any more
because is of the 4k rule.

Now if we want to do multi_count, on a dynamic range from 1-8 because that
is the range of "rq->current_nr_sectors" fine state it clearly and I will
adjust.  Since we are in PIO we have already had screwups some where, and
so grinding the IO to a single page or less is okay, but you two take the
heat for the performance kill-joy.

Respectfully,

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21 17:44                                 ` Jens Axboe
  2002-01-21 20:18                                   ` Andre Hedrick
@ 2002-01-21 21:44                                   ` Andre Hedrick
  2002-01-22  7:32                                     ` Jens Axboe
  1 sibling, 1 reply; 57+ messages in thread
From: Andre Hedrick @ 2002-01-21 21:44 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Vojtech Pavlik, Davide Libenzi, Anton Altaparmakov,
	Linus Torvalds, lkml

On Mon, 21 Jan 2002, Jens Axboe wrote:

> On Mon, Jan 21 2002, Andre Hedrick wrote:
> > > I always thought it is like this (and this is what I still believe after
> > > having read the sprcification):
> > > 
> > > ---
> > > SET_MUTIPLE 16 sectors
> > > ---
> > > READ_MULTIPLE 24 sectors
> > > IRQ
> > > PIO transfer 16 sectors
> > > IRQ
> > > PIO transfer 8 sectors
> > > ---
> > > 
> > > Where am I wrong?
> > > 
> > > By the way, the device *isn't* required to support any lower multiple
> > > count than the maximum one it advertizes. Ugly.
> > 
> > No but the HOST is to obey the requirements of the device.
> > The spec is written from the drive side not the host side.
> > 
> > "All Ye Hosts, SHALL address me in such a manner as described, or be
> > aborted or I SHALL remain in an undertermined state."
> > 
> > Note only recently have the HOSTS been about to setup guidelines for what
> > is sane and not stupid for the device to do or behave.
> > 
> > Again, the HOST(Linux) is not following the device side rules so expect
> > difficulty when we depart.  The Brain Damage is how to talk to the
> > hardware, and it is clear we are not doing it right because we are bending
> > the rules stuff it into and API that not acceptable.  However we are
> > stuck.  Again, simplicity works, generate a MEMPOOL for PIO such that the
> > buffer pages are contigious and the 4k page dance is a NOOP.  Until that
> > time we will be fussing about.
> 
> Andre,
> 
> Do you know how to say "I was wrong"? You are walking off-track again.
> It's clearly the way that Vojtech and I describe, otherwise current code
> would just not work. And 2.4, 2.2, 2.0 neither.

255 * 512bytes != 128K  BUG
256 * 512bytes == 128K

You insure we will fail on alignemnt.

You have stated BLOCK can not deal with correct sector alignments, and
thus 255 so please fix it first.  I have accepted this brokeness in BLOCK
and dropped to 128 sectors or a clean 64k.

If we restrict multi-sector PIO to 8 sectors we can do multi interrupt
ATOMIC disk IO on the paging alignments, but you have enforced single
sector IO in the multi-sector writing and can not see the difference.
If rq->current_nr_sectors is less than 8 we do PIO single sector IO, but
we are doing that now w/ the copy paste changes from the old ide-disk.c
stuff that we are attempting deleting.

You are making mistakes left and right because you think you understand
the hardware.  I thought we had an agreement, BLOCK stops at DO_REQUEST.
Now you are altering the driver core, and the ISR's.  BLOCK has no
business in dictating how to talk to the hardware, especially since it
violates the specification willfully and without need.

We do a DMA of two PRD's of 128 sectors and 127 sectors, thus a mess.

So at this point pull it and put back the munge for before and I will fix
it completely and return a turn-key, now that I understand the brokeness
of the interface I am deal w/ on both sides.

Until you understand the execution of the command block is ATOMIC it will
never work.  Also when the SCSI-MID Layer is deleted, you will have a
repeat of this issue on a much grander scale.  Eric was a brilliant to
hide the nature of the transport layer in the SCSI-MID Layer and return
back partial completion against his ATOMIC Command IO calls.

Had I been as clever as him in the past nobody would know the difference.

Respectfully,

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21 20:18                                   ` Andre Hedrick
@ 2002-01-21 22:57                                     ` Vojtech Pavlik
  2002-01-21 23:53                                       ` Andre Hedrick
  0 siblings, 1 reply; 57+ messages in thread
From: Vojtech Pavlik @ 2002-01-21 22:57 UTC (permalink / raw)
  To: Andre Hedrick
  Cc: Jens Axboe, Davide Libenzi, Anton Altaparmakov, Linus Torvalds,
	lkml

On Mon, Jan 21, 2002 at 12:18:21PM -0800, Andre Hedrick wrote:

> > > Again, the HOST(Linux) is not following the device side rules so expect
> > > difficulty when we depart.  The Brain Damage is how to talk to the
> > > hardware, and it is clear we are not doing it right because we are bending
> > > the rules stuff it into and API that not acceptable.  However we are
> > > stuck.  Again, simplicity works, generate a MEMPOOL for PIO such that the
> > > buffer pages are contigious and the 4k page dance is a NOOP.  Until that
> > > time we will be fussing about.
> > 
> > Andre,
> > 
> > Do you know how to say "I was wrong"? You are walking off-track again.
> > It's clearly the way that Vojtech and I describe, otherwise current code
> > would just not work. And 2.4, 2.2, 2.0 neither.
> 
> I will and have done so in the past when I am, and it would be nice if you
> and Linus could do the same.  However since both are going to enforce the
> partial completion of IO on page boundaries or 4k, and you are not
> allowed to pause or stop in the middle of a command execution to play
> memory games under ATA/IDE PIO rules, period.

Maybe I'm again totally off-the-track, but I see no reason why I
couldn't stop in the middle of a PIO transfer (that is anytime, not even
on a sector boundary), do whatever I wish, like change the destination
buffer or whatever, and then continue. Sure, I can't send ANY commands
to the drive, and reading the status might not be a good idea either,
but I believe I can do anything else on the system. Is there a reason
why this shouldn't be possible?

-- 
Vojtech Pavlik
SuSE Labs

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21 22:57                                     ` Vojtech Pavlik
@ 2002-01-21 23:53                                       ` Andre Hedrick
  2002-01-22  7:20                                         ` Vojtech Pavlik
  0 siblings, 1 reply; 57+ messages in thread
From: Andre Hedrick @ 2002-01-21 23:53 UTC (permalink / raw)
  To: Vojtech Pavlik
  Cc: Jens Axboe, Davide Libenzi, Anton Altaparmakov, Linus Torvalds,
	lkml

On Mon, 21 Jan 2002, Vojtech Pavlik wrote:

> On Mon, Jan 21, 2002 at 12:18:21PM -0800, Andre Hedrick wrote:
> 
> > > > Again, the HOST(Linux) is not following the device side rules so expect
> > > > difficulty when we depart.  The Brain Damage is how to talk to the
> > > > hardware, and it is clear we are not doing it right because we are bending
> > > > the rules stuff it into and API that not acceptable.  However we are
> > > > stuck.  Again, simplicity works, generate a MEMPOOL for PIO such that the
> > > > buffer pages are contigious and the 4k page dance is a NOOP.  Until that
> > > > time we will be fussing about.
> > > 
> > > Andre,
> > > 
> > > Do you know how to say "I was wrong"? You are walking off-track again.
> > > It's clearly the way that Vojtech and I describe, otherwise current code
> > > would just not work. And 2.4, 2.2, 2.0 neither.
> > 
> > I will and have done so in the past when I am, and it would be nice if you
> > and Linus could do the same.  However since both are going to enforce the
> > partial completion of IO on page boundaries or 4k, and you are not
> > allowed to pause or stop in the middle of a command execution to play
> > memory games under ATA/IDE PIO rules, period.
> 
> Maybe I'm again totally off-the-track, but I see no reason why I
> couldn't stop in the middle of a PIO transfer (that is anytime, not even
> on a sector boundary), do whatever I wish, like change the destination
> buffer or whatever, and then continue. Sure, I can't send ANY commands
> to the drive, and reading the status might not be a good idea either,
> but I believe I can do anything else on the system. Is there a reason
> why this shouldn't be possible?

Okay if the execution of the command block is ATOMIC, and we want to stop
an ATOMIC operation to go alter buffers?  But that is not the real
question.  The real question is do we stop and ATOMIC process to return
data of a partial completeion, and then return to a HALTED ATOMIC and hope
it will still go?

DEAD Method:
issue atomic write 255 sectors
	write 8 sector or 4k or 1 page of memory

	interrupt_issued
		exit atomic write
			update top layer buffers
			return;
	continue write_loop;
	exit on completion and update remainder.

BASTARDIZED Method:
issue write 255 sectors
	truncate to max of 8 sectors
	issue atomic write 8 sectors
		interrupt_issued
		end request and notify 4k page complete
	make new request and merge and repeat.
	note there is a new memcpy fo new request. (max 16 to completion)


OLD Method, with Request Page Walking:
issue atomic write 255 sectors
        write sectors
        interrupt_issued
		walk copy of request
	continue write_loop;
	exit on completion and request and free local buffer.

CORRECT Method:
collect contigious physical buffer of 255 sectors
memcpy_to_local (one memcpy)
issue atomic write 255 sectors
	write sectors
	interrupt_issued
		update pointer
	continue write_loop;
	exit on completion and request and free local buffer.

The price of the overhead and the direct flakyness of the driver we are
running from is returning, so the alternative is to disable MULTI-Sector
Operations.

Respectfully,

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21 23:53                                       ` Andre Hedrick
@ 2002-01-22  7:20                                         ` Vojtech Pavlik
  2002-01-22  7:52                                           ` Andre Hedrick
  2002-01-22 16:49                                           ` Linus Torvalds
  0 siblings, 2 replies; 57+ messages in thread
From: Vojtech Pavlik @ 2002-01-22  7:20 UTC (permalink / raw)
  To: Andre Hedrick
  Cc: Jens Axboe, Davide Libenzi, Anton Altaparmakov, Linus Torvalds,
	lkml

On Mon, Jan 21, 2002 at 03:53:20PM -0800, Andre Hedrick wrote:
> On Mon, 21 Jan 2002, Vojtech Pavlik wrote:
> 
> > On Mon, Jan 21, 2002 at 12:18:21PM -0800, Andre Hedrick wrote:
> > 
> > > > > Again, the HOST(Linux) is not following the device side rules so expect
> > > > > difficulty when we depart.  The Brain Damage is how to talk to the
> > > > > hardware, and it is clear we are not doing it right because we are bending
> > > > > the rules stuff it into and API that not acceptable.  However we are
> > > > > stuck.  Again, simplicity works, generate a MEMPOOL for PIO such that the
> > > > > buffer pages are contigious and the 4k page dance is a NOOP.  Until that
> > > > > time we will be fussing about.
> > > > 
> > > > Andre,
> > > > 
> > > > Do you know how to say "I was wrong"? You are walking off-track again.
> > > > It's clearly the way that Vojtech and I describe, otherwise current code
> > > > would just not work. And 2.4, 2.2, 2.0 neither.
> > > 
> > > I will and have done so in the past when I am, and it would be nice if you
> > > and Linus could do the same.  However since both are going to enforce the
> > > partial completion of IO on page boundaries or 4k, and you are not
> > > allowed to pause or stop in the middle of a command execution to play
> > > memory games under ATA/IDE PIO rules, period.
> > 
> > Maybe I'm again totally off-the-track, but I see no reason why I
> > couldn't stop in the middle of a PIO transfer (that is anytime, not even
> > on a sector boundary), do whatever I wish, like change the destination
> > buffer or whatever, and then continue. Sure, I can't send ANY commands
> > to the drive, and reading the status might not be a good idea either,
> > but I believe I can do anything else on the system. Is there a reason
> > why this shouldn't be possible?
> 
> Okay if the execution of the command block is ATOMIC, and we want to stop
> an ATOMIC operation to go alter buffers? 

YES! I think you got it! Because atomic here doesn't mean 'do it all as
soon as possible with no delay', but 'do nothing else on the ATA bus
inbetween'.

> But that is not the real question.  The real question is do we stop
> and ATOMIC process to return data of a partial completeion, and then
> return to a HALTED ATOMIC and hope it will still go?

Yes, and we can do this, and there is no reason why this should not
work.

> DEAD Method:
> issue atomic write 255 sectors
> 	write 8 sector or 4k or 1 page of memory
> 
> 	interrupt_issued
> 		exit atomic write
> 			update top layer buffers
> 			return;
> 	continue write_loop;
> 	exit on completion and update remainder.
> 
> BASTARDIZED Method:
> issue write 255 sectors
> 	truncate to max of 8 sectors
> 	issue atomic write 8 sectors
> 		interrupt_issued
> 		end request and notify 4k page complete
> 	make new request and merge and repeat.
> 	note there is a new memcpy fo new request. (max 16 to completion)
> 
> 
> OLD Method, with Request Page Walking:
> issue atomic write 255 sectors
>         write sectors
>         interrupt_issued
> 		walk copy of request
> 	continue write_loop;
> 	exit on completion and request and free local buffer.
> 
> CORRECT Method:
> collect contigious physical buffer of 255 sectors
> memcpy_to_local (one memcpy)
> issue atomic write 255 sectors
> 	write sectors
> 	interrupt_issued
> 		update pointer
> 	continue write_loop;
> 	exit on completion and request and free local buffer.
> 
> The price of the overhead and the direct flakyness of the driver we are
> running from is returning, so the alternative is to disable MULTI-Sector
> Operations.

That's pretty much nonsense, beg my pardon. The real correct way would
be:

issue read of 255 sectors using READ_MULTI, max_mult = 16
receive interrupt
	inw() first 4k to buffer A
	inw() second 4k to buffer B
don't do anything else until the next interrupt

There is absolutely no need for an intermediate scratch buffer, you can
put the inw()ed data anywhere you like, and if you need any post
processing, you can do it as well, at any time.

-- 
Vojtech Pavlik
SuSE Labs

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-21 21:44                                   ` Andre Hedrick
@ 2002-01-22  7:32                                     ` Jens Axboe
  0 siblings, 0 replies; 57+ messages in thread
From: Jens Axboe @ 2002-01-22  7:32 UTC (permalink / raw)
  To: Andre Hedrick
  Cc: Vojtech Pavlik, Davide Libenzi, Anton Altaparmakov,
	Linus Torvalds, lkml

On Mon, Jan 21 2002, Andre Hedrick wrote:
> 255 * 512bytes != 128K  BUG
> 256 * 512bytes == 128K
> 
> You insure we will fail on alignemnt.
> 
> You have stated BLOCK can not deal with correct sector alignments, and
> thus 255 so please fix it first.  I have accepted this brokeness in BLOCK
> and dropped to 128 sectors or a clean 64k.

What statement? The block layer gives you the allignment that _you_
need. Heck, all you have to do is make a simple api call and define your
rules. Nobody is trying to cram anything down your throat. 255 is just
the kernel default, nothing more.

> If we restrict multi-sector PIO to 8 sectors we can do multi interrupt
> ATOMIC disk IO on the paging alignments, but you have enforced single
> sector IO in the multi-sector writing and can not see the difference.

False, I've enforced current_nr_sectors transfers in multi-sector write.
But Andre please understand that changes like this are never final, feel
free to alter it and make it work any other way. Fact is, we needed a
change that made pio and multi mode _work_ right now -- my change does
that, and it's not all that bad.

> If rq->current_nr_sectors is less than 8 we do PIO single sector IO, but
> we are doing that now w/ the copy paste changes from the old ide-disk.c
> stuff that we are attempting deleting.

Well I'm sorry for making changes to your isr's, but they were broken.

> You are making mistakes left and right because you think you understand
> the hardware.  I thought we had an agreement, BLOCK stops at DO_REQUEST.
> Now you are altering the driver core, and the ISR's.  BLOCK has no
> business in dictating how to talk to the hardware, especially since it
> violates the specification willfully and without need.

?! I can't do anything but block stuff now, what a pity. Please tell me
where the block layer is dictating what you must do.

> We do a DMA of two PRD's of 128 sectors and 127 sectors, thus a mess.

I can add a

	BUG_ON(rq->nr_sectors == 255);

for you if you want, that will not happen.

> So at this point pull it and put back the munge for before and I will fix
> it completely and return a turn-key, now that I understand the brokeness
> of the interface I am deal w/ on both sides.

What is broken?

> Until you understand the execution of the command block is ATOMIC it will
> never work.  Also when the SCSI-MID Layer is deleted, you will have a
> repeat of this issue on a much grander scale.  Eric was a brilliant to
> hide the nature of the transport layer in the SCSI-MID Layer and return
> back partial completion against his ATOMIC Command IO calls.

Oh like the partial completion I added in ide_end_request?

Please calm down Andre, lets not start another round of flames.

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-22  7:20                                         ` Vojtech Pavlik
@ 2002-01-22  7:52                                           ` Andre Hedrick
  2002-01-22  8:16                                             ` Jens Axboe
  2002-01-22 16:49                                           ` Linus Torvalds
  1 sibling, 1 reply; 57+ messages in thread
From: Andre Hedrick @ 2002-01-22  7:52 UTC (permalink / raw)
  To: Vojtech Pavlik
  Cc: Jens Axboe, Davide Libenzi, Anton Altaparmakov, Linus Torvalds,
	lkml

On Tue, 22 Jan 2002, Vojtech Pavlik wrote:

> On Mon, Jan 21, 2002 at 03:53:20PM -0800, Andre Hedrick wrote:
> > On Mon, 21 Jan 2002, Vojtech Pavlik wrote:
> > Okay if the execution of the command block is ATOMIC, and we want to stop
> > an ATOMIC operation to go alter buffers? 
> 
> YES! I think you got it! Because atomic here doesn't mean 'do it all as
> soon as possible with no delay', but 'do nothing else on the ATA bus
> inbetween'.

In order to do this you can not issue a sector request larger than an
addressable buffer, since the request walking of the rq->buffer is not
allowed.

> > But that is not the real question.  The real question is do we stop
> > and ATOMIC process to return data of a partial completeion, and then
> > return to a HALTED ATOMIC and hope it will still go?
> 
> Yes, and we can do this, and there is no reason why this should not
> work.

PONDERING ....

> > DEAD Method:
> > issue atomic write 255 sectors
> > 	write 8 sector or 4k or 1 page of memory
> > 
> > 	interrupt_issued
> > 		exit atomic write
> > 			update top layer buffers
> > 			return;
> > 	continue write_loop;
> > 	exit on completion and update remainder.
> > 
> > BASTARDIZED Method:
> > issue write 255 sectors
> > 	truncate to max of 8 sectors
> > 	issue atomic write 8 sectors
> > 		interrupt_issued
> > 		end request and notify 4k page complete
> > 	make new request and merge and repeat.
> > 	note there is a new memcpy fo new request. (max 16 to completion)
> > 
> > 
> > OLD Method, with Request Page Walking:
> > issue atomic write 255 sectors
> >         write sectors
> >         interrupt_issued
> > 		walk copy of request
> > 	continue write_loop;
> > 	exit on completion and request and free local buffer.
> > 
> > CORRECT Method:
> > collect contigious physical buffer of 255 sectors
> > memcpy_to_local (one memcpy)
> > issue atomic write 255 sectors
> > 	write sectors
> > 	interrupt_issued
> > 		update pointer
> > 	continue write_loop;
> > 	exit on completion and request and free local buffer.
> > 
> > The price of the overhead and the direct flakyness of the driver we are
> > running from is returning, so the alternative is to disable MULTI-Sector
> > Operations.
> 
> That's pretty much nonsense, beg my pardon. The real correct way would
> be:

We agreed upon error is the "memcpy_to_local" and "free local buffer".

If a low-memory contigious physical buffers was allocated and all the
bounce_memory locations were copied there before submition to the lower
levels, the drives could run down the buffer and be done, preserve the
entire request for error handling when a write to media fails.

> issue read of 255 sectors using READ_MULTI, max_mult = 16
> receive interrupt
> 	inw() first 4k to buffer A
> 	inw() second 4k to buffer B
> don't do anything else until the next interrupt

The second buffer has been taken away, so this is not possible.

> There is absolutely no need for an intermediate scratch buffer, you can
> put the inw()ed data anywhere you like, and if you need any post
> processing, you can do it as well, at any time.

Explain where buffer B come from, because I am totally lost on the above.

I am totally worn out and do not care about the issue anymore for now.

Regards

--a


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-22  7:52                                           ` Andre Hedrick
@ 2002-01-22  8:16                                             ` Jens Axboe
  2002-01-22  9:45                                               ` Andre Hedrick
  0 siblings, 1 reply; 57+ messages in thread
From: Jens Axboe @ 2002-01-22  8:16 UTC (permalink / raw)
  To: Andre Hedrick
  Cc: Vojtech Pavlik, Davide Libenzi, Anton Altaparmakov,
	Linus Torvalds, lkml

On Mon, Jan 21 2002, Andre Hedrick wrote:
> > On Mon, Jan 21, 2002 at 03:53:20PM -0800, Andre Hedrick wrote:
> > > On Mon, 21 Jan 2002, Vojtech Pavlik wrote:
> > > Okay if the execution of the command block is ATOMIC, and we want to stop
> > > an ATOMIC operation to go alter buffers? 
> > 
> > YES! I think you got it! Because atomic here doesn't mean 'do it all as
> > soon as possible with no delay', but 'do nothing else on the ATA bus
> > inbetween'.
> 
> In order to do this you can not issue a sector request larger than an
> addressable buffer, since the request walking of the rq->buffer is not
> allowed.

It's not that it's not allowed, it's that it doesn't work the way you
want it. ->buffer is just the first segment, which is 8 sectors max,
that much is correct. But nothing prevents your from ending the front
of the request and continuing and the drive will never know. Just see
task_mulin_intr.

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-22  8:16                                             ` Jens Axboe
@ 2002-01-22  9:45                                               ` Andre Hedrick
  2002-01-22 10:06                                                 ` Jens Axboe
  2002-01-22 10:26                                                 ` Linux 2.5.3-pre1-aia1 Anton Altaparmakov
  0 siblings, 2 replies; 57+ messages in thread
From: Andre Hedrick @ 2002-01-22  9:45 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Vojtech Pavlik, Davide Libenzi, Anton Altaparmakov,
	Linus Torvalds, lkml


A CLUE HAS ARRIVED ...

On Tue, 22 Jan 2002, Jens Axboe wrote:

> On Mon, Jan 21 2002, Andre Hedrick wrote:
> > > On Mon, Jan 21, 2002 at 03:53:20PM -0800, Andre Hedrick wrote:
> > > > On Mon, 21 Jan 2002, Vojtech Pavlik wrote:
> > > > Okay if the execution of the command block is ATOMIC, and we want to stop
> > > > an ATOMIC operation to go alter buffers? 
> > > 
> > > YES! I think you got it! Because atomic here doesn't mean 'do it all as
> > > soon as possible with no delay', but 'do nothing else on the ATA bus
> > > inbetween'.
> > 
> > In order to do this you can not issue a sector request larger than an
> > addressable buffer, since the request walking of the rq->buffer is not
> > allowed.
> 
> It's not that it's not allowed, it's that it doesn't work the way you
> want it. ->buffer is just the first segment, which is 8 sectors max,
> that much is correct. But nothing prevents your from ending the front
> of the request and continuing and the drive will never know. Just see
> task_mulin_intr.

Is this not the effect of stopping the actual IO?
Then you have to issue another ACB to restart the IO for the next segment?
The device has to know when to stop sending.

ERM, the pain is sinking in .....

It may be possible to do this is paging requirement if on a READ(any pio),
reset or update the rq->buffer prior to reading from the data register.
Now what guarentee will the driver have if a the buffer being a full 8
sectors before the first read, and if that is not enough for the complete
segment transaction, then if we reduce the expected transfers size between
interrupts, it will allow for larger values to be put into the
sector_count register.  This reduction must correspond to the expected and
required 4k page.

This I can do, and we can move forward.

If the update of the rq->buffer occurrs afterwards, we may face a
driver--device race w/ an early and missied interrupt asserted.

This sounds like what "Davide Libenzi" is reporting.
Not really a losted, but arrived while the rq->buffer is being updated.
Thus ordering of events are wrong.

forced to set max_multi_sector to page size.

cmd->(buffer must be attached)->isr(statDRQ|BSY,read2buffer)->reload_isr()
	isr_n(get_new_buffer,statDRQ|BSY,read2buffer)->reload_isr()

if we relaunch because of statDRQ|BSY is not correct, we need to know the
new buffer is loaded.

writing becomes more interesting.

I have to overlay lay Linux on to the state diagrams and then redraft.

Cheers,

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development



^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-22  9:45                                               ` Andre Hedrick
@ 2002-01-22 10:06                                                 ` Jens Axboe
  2002-01-22 23:18                                                   ` END GAME (Re: Linux 2.5.3-pre1-aia1) Andre Hedrick
  2002-01-22 10:26                                                 ` Linux 2.5.3-pre1-aia1 Anton Altaparmakov
  1 sibling, 1 reply; 57+ messages in thread
From: Jens Axboe @ 2002-01-22 10:06 UTC (permalink / raw)
  To: Andre Hedrick
  Cc: Vojtech Pavlik, Davide Libenzi, Anton Altaparmakov,
	Linus Torvalds, lkml

On Tue, Jan 22 2002, Andre Hedrick wrote:
> 
> A CLUE HAS ARRIVED ...
> 
> On Tue, 22 Jan 2002, Jens Axboe wrote:
> 
> > On Mon, Jan 21 2002, Andre Hedrick wrote:
> > > > On Mon, Jan 21, 2002 at 03:53:20PM -0800, Andre Hedrick wrote:
> > > > > On Mon, 21 Jan 2002, Vojtech Pavlik wrote:
> > > > > Okay if the execution of the command block is ATOMIC, and we want to stop
> > > > > an ATOMIC operation to go alter buffers? 
> > > > 
> > > > YES! I think you got it! Because atomic here doesn't mean 'do it all as
> > > > soon as possible with no delay', but 'do nothing else on the ATA bus
> > > > inbetween'.
> > > 
> > > In order to do this you can not issue a sector request larger than an
> > > addressable buffer, since the request walking of the rq->buffer is not
> > > allowed.
> > 
> > It's not that it's not allowed, it's that it doesn't work the way you
> > want it. ->buffer is just the first segment, which is 8 sectors max,
> > that much is correct. But nothing prevents your from ending the front
> > of the request and continuing and the drive will never know. Just see
> > task_mulin_intr.
> 
> Is this not the effect of stopping the actual IO?

No, not at all. It goes something like this (for multi read, the case
discussed here). Settings for this sample-run are:

- multi mode set to 16 sectors
- request: nr_sectors 24 sectors, current_nr_sectors 8. request is thus
  split in 3 parts, we need to partially complete it do finish it.

o ide_do_request, get new active request
o start_request, hand off to ide-disk:do_rw_disk()
o do_rw_disk: setup taskfile, arm interrupt handler, return

[interrupt triggers]

o status is good, we can transfer the 16 sectors the drive expects

o taskfile_input_data for 8 sectors:

	nsect = rq->current_nr_sectors;
	if (nsect > msect)
		nsect = msect;

o call ide_end_request to indicate completion of these 8 sectors.
	o calls end_that_request_last to complete the first buffer head
	  in the request, resetup request for next transfer.

o ide_end_request returns 1, request is not complete.

o taskfile_input_data for 8 sectors.

o call ide_end_request again, still returns 1 (now we have 8 sectors
  left in the request)

o now we have transferred the 16 sectors inside the interrupt handler,
  since request is not complete rearm interrupt handler and return.

Next time task_mulin_intr is fired, we do the remaining 8 sectors. This
time the drive knows to expect only 8 sectors, since we originally
programmed it for 24 sectors total for this request.

> Then you have to issue another ACB to restart the IO for the next segment?
> The device has to know when to stop sending.

Nope, see the above.

> It may be possible to do this is paging requirement if on a READ(any pio),
> reset or update the rq->buffer prior to reading from the data register.

Yes that's very important, the ordering must be right or we are screwed.

> Now what guarentee will the driver have if a the buffer being a full 8
> sectors before the first read, and if that is not enough for the complete
> segment transaction, then if we reduce the expected transfers size between
> interrupts, it will allow for larger values to be put into the
> sector_count register.  This reduction must correspond to the expected and
> required 4k page.

But why? The above scenario works.

> This I can do, and we can move forward.
> 
> If the update of the rq->buffer occurrs afterwards, we may face a
> driver--device race w/ an early and missied interrupt asserted.

We don't care about rq->buffer at all. What is important is correct (and
ordered) rq->current_nr_sectors updates so that ide_map_rq returns the
right transfer location.

> This sounds like what "Davide Libenzi" is reporting.
> Not really a losted, but arrived while the rq->buffer is being updated.
> Thus ordering of events are wrong.

It very well could be.

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-22  9:45                                               ` Andre Hedrick
  2002-01-22 10:06                                                 ` Jens Axboe
@ 2002-01-22 10:26                                                 ` Anton Altaparmakov
  1 sibling, 0 replies; 57+ messages in thread
From: Anton Altaparmakov @ 2002-01-22 10:26 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Andre Hedrick, Vojtech Pavlik, Davide Libenzi, Linus Torvalds,
	lkml

Hi Jens,

A quick question which is I think what Andre is really concerned about when 
talking about atomicity... or if he is not then I would be. (-;

At 10:06 22/01/02, Jens Axboe wrote:
>On Tue, Jan 22 2002, Andre Hedrick wrote:
> >
> > A CLUE HAS ARRIVED ...
> >
> > On Tue, 22 Jan 2002, Jens Axboe wrote:
> >
> > > On Mon, Jan 21 2002, Andre Hedrick wrote:
> > > > > On Mon, Jan 21, 2002 at 03:53:20PM -0800, Andre Hedrick wrote:
> > > > > > On Mon, 21 Jan 2002, Vojtech Pavlik wrote:
> > > > > > Okay if the execution of the command block is ATOMIC, and we 
> want to stop
> > > > > > an ATOMIC operation to go alter buffers?
> > > > >
> > > > > YES! I think you got it! Because atomic here doesn't mean 'do it 
> all as
> > > > > soon as possible with no delay', but 'do nothing else on the ATA bus
> > > > > inbetween'.
> > > >
> > > > In order to do this you can not issue a sector request larger than an
> > > > addressable buffer, since the request walking of the rq->buffer is not
> > > > allowed.
> > >
> > > It's not that it's not allowed, it's that it doesn't work the way you
> > > want it. ->buffer is just the first segment, which is 8 sectors max,
> > > that much is correct. But nothing prevents your from ending the front
> > > of the request and continuing and the drive will never know. Just see
> > > task_mulin_intr.
> >
> > Is this not the effect of stopping the actual IO?
>
>No, not at all. It goes something like this (for multi read, the case
>discussed here). Settings for this sample-run are:
>
>- multi mode set to 16 sectors
>- request: nr_sectors 24 sectors, current_nr_sectors 8. request is thus
>   split in 3 parts, we need to partially complete it do finish it.
>
>o ide_do_request, get new active request
>o start_request, hand off to ide-disk:do_rw_disk()
>o do_rw_disk: setup taskfile, arm interrupt handler, return
>
>[interrupt triggers]
>
>o status is good, we can transfer the 16 sectors the drive expects

Is it possible that the request is aborted at any point between here...

>o taskfile_input_data for 8 sectors:
>
>         nsect = rq->current_nr_sectors;
>         if (nsect > msect)
>                 nsect = msect;

>o call ide_end_request to indicate completion of these 8 sectors.
>         o calls end_that_request_last to complete the first buffer head
>           in the request, resetup request for next transfer.
>
>o ide_end_request returns 1, request is not complete.

... and ide_end_request returning 1 here so that ide_end_request would in 
fact not return 1?

If not, then there is no problem. The operation is atomic, it's just a 
switch from one destination page to another (taking this particular example 
and 4k page size), whether the switch happens fast enough is a different 
cattle of fish altogether...

If yes, I see where Andre is complaining: an abort at this position would 
leave the drive in "io in flight" state and you get "lost interrupt" and 
possibly you all goes pear shaped the first time the next command goes to 
the drive (unless it happens to be the appropriate reset command).

I hope that makes any sense?

Best regards,

Anton

>o taskfile_input_data for 8 sectors.
>
>o call ide_end_request again, still returns 1 (now we have 8 sectors
>   left in the request)
>
>o now we have transferred the 16 sectors inside the interrupt handler,
>   since request is not complete rearm interrupt handler and return.
>
>Next time task_mulin_intr is fired, we do the remaining 8 sectors. This
>time the drive knows to expect only 8 sectors, since we originally
>programmed it for 24 sectors total for this request.
>
> > Then you have to issue another ACB to restart the IO for the next segment?
> > The device has to know when to stop sending.
>
>Nope, see the above.
>
> > It may be possible to do this is paging requirement if on a READ(any pio),
> > reset or update the rq->buffer prior to reading from the data register.
>
>Yes that's very important, the ordering must be right or we are screwed.
>
> > Now what guarentee will the driver have if a the buffer being a full 8
> > sectors before the first read, and if that is not enough for the complete
> > segment transaction, then if we reduce the expected transfers size between
> > interrupts, it will allow for larger values to be put into the
> > sector_count register.  This reduction must correspond to the expected and
> > required 4k page.
>
>But why? The above scenario works.
>
> > This I can do, and we can move forward.
> >
> > If the update of the rq->buffer occurrs afterwards, we may face a
> > driver--device race w/ an early and missied interrupt asserted.
>
>We don't care about rq->buffer at all. What is important is correct (and
>ordered) rq->current_nr_sectors updates so that ide_map_rq returns the
>right transfer location.
>
> > This sounds like what "Davide Libenzi" is reporting.
> > Not really a losted, but arrived while the rq->buffer is being updated.
> > Thus ordering of events are wrong.
>
>It very well could be.
>
>--
>Jens Axboe

-- 
   "I've not lost my mind. It's backed up on tape somewhere." - Unknown
-- 
Anton Altaparmakov <aia21 at cam.ac.uk> (replace at with @)
Linux NTFS Maintainer / WWW: http://linux-ntfs.sf.net/
ICQ: 8561279 / WWW: http://www-stu.christs.cam.ac.uk/~aia21/


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-22  7:20                                         ` Vojtech Pavlik
  2002-01-22  7:52                                           ` Andre Hedrick
@ 2002-01-22 16:49                                           ` Linus Torvalds
  2002-01-22 18:45                                             ` Andre Hedrick
  1 sibling, 1 reply; 57+ messages in thread
From: Linus Torvalds @ 2002-01-22 16:49 UTC (permalink / raw)
  To: Vojtech Pavlik
  Cc: Andre Hedrick, Jens Axboe, Davide Libenzi, Anton Altaparmakov,
	lkml


On Tue, 22 Jan 2002, Vojtech Pavlik wrote:
>
> That's pretty much nonsense, beg my pardon. The real correct way would
> be:
>
> issue read of 255 sectors using READ_MULTI, max_mult = 16
> receive interrupt
> 	inw() first 4k to buffer A
> 	inw() second 4k to buffer B
> don't do anything else until the next interrupt

Definitely.

There is no way the controller can even _know_ the difference between

 - one large 8kB "rep insw" instruction
 - two (or more) smaller chunks of "rep insw" adding up to 8kB worth of
   "inw"

as long as there are no other IO instructions to that controller in
between. The two look _exactly_ the same on the bus - there aren't even
any bursting issues (you can only burst on MMIO, not PIO accesses).

Sure, there are some timing issues, but (a) data cache misses are much
bigger things than just a few instructions, and (b) we allow interrupts
from other devices anyway, so the timing _really_ isn't even an issue.

So just call "ata_input_data()" several times in a loop for discontinuous
buffers. I told Andre this before.

			Linus


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: Linux 2.5.3-pre1-aia1
  2002-01-22 16:49                                           ` Linus Torvalds
@ 2002-01-22 18:45                                             ` Andre Hedrick
  0 siblings, 0 replies; 57+ messages in thread
From: Andre Hedrick @ 2002-01-22 18:45 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Vojtech Pavlik, Jens Axboe, Davide Libenzi, Anton Altaparmakov,
	lkml

On Tue, 22 Jan 2002, Linus Torvalds wrote:

> 
> On Tue, 22 Jan 2002, Vojtech Pavlik wrote:
> >
> > That's pretty much nonsense, beg my pardon. The real correct way would
> > be:
> >
> > issue read of 255 sectors using READ_MULTI, max_mult = 16
> > receive interrupt
> > 	inw() first 4k to buffer A
> > 	inw() second 4k to buffer B
> > don't do anything else until the next interrupt
> 
> Definitely.
> 
> There is no way the controller can even _know_ the difference between
> 
>  - one large 8kB "rep insw" instruction
>  - two (or more) smaller chunks of "rep insw" adding up to 8kB worth of
>    "inw"
> 
> as long as there are no other IO instructions to that controller in
> between. The two look _exactly_ the same on the bus - there aren't even
> any bursting issues (you can only burst on MMIO, not PIO accesses).
> 
> Sure, there are some timing issues, but (a) data cache misses are much
> bigger things than just a few instructions, and (b) we allow interrupts
> from other devices anyway, so the timing _really_ isn't even an issue.
> 
> So just call "ata_input_data()" several times in a loop for discontinuous
> buffers. I told Andre this before.

Linus,

Then do you mind if we add a page alignment (on the page) to the buffer
based on the rq->current_nr_sectors and to insure a complete page of all
4k of data is present?  Only because during the transition between
these two states HPIOO0:HPIOO1 is data permitted.  If you touch the data
register to write or read and by chance (almost always in Linux) you do
not have a enough data to complete the HPIOO1, the ide_end_request stops
the data process.  It is only proper to to reject unaligned pages when it
is known to invoke an cause HOST:DEVICE pair problems.

Since the only way to insure the correct amount data is present and not
risk/create a device driver race, is to reject unaligned pages.

So understand you (Linus) clearly and no mistakes are made in translation,
you want, approve, and specify data transfers on on unaligned pages.  You
require the data-phase at HPIOO1(trasnfer data) to leave and go hunt for
more unaligned pages to complete the transaction.  There is a problem
because nowhere can I find a transition point go find more data.

Some how you have gotten it in you head it is legal and correct to issue
partial data blocks, and has thrown me for a loop.

Respectfully,

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

* END GAME (Re: Linux 2.5.3-pre1-aia1)
  2002-01-22 10:06                                                 ` Jens Axboe
@ 2002-01-22 23:18                                                   ` Andre Hedrick
  2002-01-23  8:55                                                     ` Jens Axboe
  0 siblings, 1 reply; 57+ messages in thread
From: Andre Hedrick @ 2002-01-22 23:18 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Vojtech Pavlik, Davide Libenzi, Anton Altaparmakov,
	Linus Torvalds, lkml


Linus, Jens,

I need a function that performs the kmapping to return a pointer with all
the data needed for that transaction of the data phase, and will cross
pages correctly, and may cross more than 2 pages at a time in PIO.
I do not care how you do.

char * majic_voodoo_mapping (
	struct request *rq,
	int nsect,
	unsigned long *flags)
{
	char * buffer_walk = ide_map_rq(rq, &flags);
	nsect -= ide_rq_offset(rq);
	do {
		buffer_walk += get_some_more(rq, nsect);
	} while (nsect)
	return buffer_walk;
}

This should solve all the problems in the data-phases and let the driver
run correctly. The result is on each "get_some_more" will all BLOCK/BIO to
return the partial competions of at least one page

The function would behave like ide_end_request but only to adjust the 
buffer in process, and make block/bio deal with munging it back to the top
layers on the partial completions, it will not stop the data IO process of
the ATOMIC command in process.

There is a possible place in while hanging on the HPIOO1 T-BAR to safely
leave and collect "ALL" of the buffer to be put down once we start IO'ing.
If it return with only a partial, YOU WILL HANG THE DRIVE, with one
acception the REMAINDER of the BLOCK_DATA transaction.

You get your early partial complete, and a correct running driver.
Better yet, I will shut my PIEHOLE!

Cheers,

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: END GAME (Re: Linux 2.5.3-pre1-aia1)
  2002-01-22 23:18                                                   ` END GAME (Re: Linux 2.5.3-pre1-aia1) Andre Hedrick
@ 2002-01-23  8:55                                                     ` Jens Axboe
  2002-01-23 20:57                                                       ` Andre Hedrick
  0 siblings, 1 reply; 57+ messages in thread
From: Jens Axboe @ 2002-01-23  8:55 UTC (permalink / raw)
  To: Andre Hedrick
  Cc: Vojtech Pavlik, Davide Libenzi, Anton Altaparmakov,
	Linus Torvalds, lkml

On Tue, Jan 22 2002, Andre Hedrick wrote:
> 
> Linus, Jens,
> 
> I need a function that performs the kmapping to return a pointer with all
> the data needed for that transaction of the data phase, and will cross
> pages correctly, and may cross more than 2 pages at a time in PIO.
> I do not care how you do.
> 
> char * majic_voodoo_mapping (
> 	struct request *rq,
> 	int nsect,
> 	unsigned long *flags)
> {
> 	char * buffer_walk = ide_map_rq(rq, &flags);
> 	nsect -= ide_rq_offset(rq);
> 	do {
> 		buffer_walk += get_some_more(rq, nsect);
> 	} while (nsect)
> 	return buffer_walk;
> }
> 
> This should solve all the problems in the data-phases and let the driver
> run correctly. The result is on each "get_some_more" will all BLOCK/BIO to
> return the partial competions of at least one page
> 
> The function would behave like ide_end_request but only to adjust the 
> buffer in process, and make block/bio deal with munging it back to the top
> layers on the partial completions, it will not stop the data IO process of
> the ATOMIC command in process.

That _is_ what ide_end_request is doing, it is not stopping any data I/O
in progress. It is also atomic. What exactly do you think is missing?

> Better yet, I will shut my PIEHOLE!

Oh, that'll be the day. Lets just say I'm not running to get my
calendar and the big fat marker. :-)

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: END GAME (Re: Linux 2.5.3-pre1-aia1)
  2002-01-23  8:55                                                     ` Jens Axboe
@ 2002-01-23 20:57                                                       ` Andre Hedrick
  0 siblings, 0 replies; 57+ messages in thread
From: Andre Hedrick @ 2002-01-23 20:57 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Vojtech Pavlik, Davide Libenzi, Anton Altaparmakov,
	Linus Torvalds, lkml

On Wed, 23 Jan 2002, Jens Axboe wrote:

> On Tue, Jan 22 2002, Andre Hedrick wrote:
> > 
> > Linus, Jens,
> > 
> > I need a function that performs the kmapping to return a pointer with all
> > the data needed for that transaction of the data phase, and will cross
> > pages correctly, and may cross more than 2 pages at a time in PIO.
> > I do not care how you do.
> > 
> > char * majic_voodoo_mapping (
> > 	struct request *rq,
> > 	int nsect,
> > 	unsigned long *flags)
> > {
> > 	char * buffer_walk = ide_map_rq(rq, &flags);
> > 	nsect -= ide_rq_offset(rq);
> > 	do {
> > 		buffer_walk += get_some_more(rq, nsect);
> > 	} while (nsect)
> > 	return buffer_walk;
> > }

When I chatted w/ Anton, he suggested a char ** to allow page walking.
This is more in line for allowing a rq->bio_list walking.

Obviously I may not have the correct item but the idea should be clean.

> > This should solve all the problems in the data-phases and let the driver
> > run correctly. The result is on each "get_some_more" will all BLOCK/BIO to
> > return the partial competions of at least one page
> > 
> > The function would behave like ide_end_request but only to adjust the 
> > buffer in process, and make block/bio deal with munging it back to the top
> > layers on the partial completions, it will not stop the data IO process of
> > the ATOMIC command in process.
> 
> That _is_ what ide_end_request is doing, it is not stopping any data I/O
> in progress. It is also atomic. What exactly do you think is missing?

If you are provided with an acceptable solution to make BLOCK/BIO more
flexable to the needs of the hardware, that is a possible answer and
should be acceptable, provided it does not violate other layers ?

> > Better yet, I will shut my PIEHOLE!
> 
> Oh, that'll be the day. Lets just say I'm not running to get my
> calendar and the big fat marker. :-)

Don't worry, I will FedEX one to you so you will not have to search.

Cheers,

Andre Hedrick
Linux Disk Certification Project                Linux ATA Development


^ permalink raw reply	[flat|nested] 57+ messages in thread

end of thread, other threads:[~2002-01-23 21:05 UTC | newest]

Thread overview: 57+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-01-18  2:27 Linux 2.5.3-pre1-aia1 Anton Altaparmakov
2002-01-18 17:32 ` Davide Libenzi
2002-01-18 19:05   ` Jens Axboe
2002-01-18 19:23     ` Davide Libenzi
2002-01-18 19:28       ` Andre Hedrick
2002-01-18 19:48         ` Davide Libenzi
2002-01-18 19:40           ` Andre Hedrick
2002-01-18 19:44           ` Andre Hedrick
2002-01-19 11:40           ` Jens Axboe
2002-01-19 11:37             ` Andre Hedrick
2002-01-19 15:45               ` Jens Axboe
2002-01-19 20:36                 ` Andre Hedrick
2002-01-19 21:44                   ` Davide Libenzi
2002-01-20  0:31                     ` Andre Hedrick
2002-01-20  2:02                       ` Davide Libenzi
2002-01-20 10:48                   ` Jens Axboe
2002-01-20 18:55                     ` Davide Libenzi
2002-01-21  0:12                       ` Andre Hedrick
2002-01-21 10:43                         ` Vojtech Pavlik
2002-01-21 10:48                           ` Jens Axboe
2002-01-21 10:56                             ` Jens Axboe
2002-01-21 17:44                               ` Davide Libenzi
2002-01-21 11:14                             ` Vojtech Pavlik
2002-01-21 11:29                               ` Jens Axboe
2002-01-21 11:38                                 ` Vojtech Pavlik
2002-01-21 11:51                                   ` Andre Hedrick
2002-01-21 11:34                               ` Andre Hedrick
2002-01-21 17:44                                 ` Jens Axboe
2002-01-21 20:18                                   ` Andre Hedrick
2002-01-21 22:57                                     ` Vojtech Pavlik
2002-01-21 23:53                                       ` Andre Hedrick
2002-01-22  7:20                                         ` Vojtech Pavlik
2002-01-22  7:52                                           ` Andre Hedrick
2002-01-22  8:16                                             ` Jens Axboe
2002-01-22  9:45                                               ` Andre Hedrick
2002-01-22 10:06                                                 ` Jens Axboe
2002-01-22 23:18                                                   ` END GAME (Re: Linux 2.5.3-pre1-aia1) Andre Hedrick
2002-01-23  8:55                                                     ` Jens Axboe
2002-01-23 20:57                                                       ` Andre Hedrick
2002-01-22 10:26                                                 ` Linux 2.5.3-pre1-aia1 Anton Altaparmakov
2002-01-22 16:49                                           ` Linus Torvalds
2002-01-22 18:45                                             ` Andre Hedrick
2002-01-21 21:44                                   ` Andre Hedrick
2002-01-22  7:32                                     ` Jens Axboe
2002-01-21 11:22                           ` Andre Hedrick
2002-01-21 11:32                             ` Vojtech Pavlik
2002-01-21 11:34                               ` Jens Axboe
2002-01-21  1:48                     ` Andre Hedrick
2002-01-21  7:36                       ` Jens Axboe
2002-01-21  7:46                         ` Andre Hedrick
2002-01-21  8:01                           ` Jens Axboe
2002-01-21  8:42                             ` Andre Hedrick
2002-01-21  9:00                               ` Jens Axboe
2002-01-21  8:59                                 ` Andre Hedrick
2002-01-21  9:07                                   ` Jens Axboe
2002-01-21  9:48                                     ` Andre Hedrick
2002-01-18 19:26   ` Andre Hedrick

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox