• Martin Dalecki's avatar
    [PATCH] 2.5.26 IDE 99 · e9356da8
    Martin Dalecki authored
    Most noticable in the patch:
    
    1. we handle IRQ sharing now better then ever
    
    2. survives quite a lot of testing by few people. Forexample
    cat /dev/hdb > /dev/null, where /dev/hdb contains a CD-ROM
    with a big cratch on the surface making sure it's broken :-).
    it's BTW. amanzing how wide the cratch had to be until errors
    ocurred.
    
    3. Doesn't play with rq_rdev and friends
    
    Fri Jul 12 05:04:32 CEST 2002 ide-clean-99
    
    - Push nIEN disabling down at the place where we are finished with a particular
       request.
    
    - First round of command line parser cleanups by Gerald Champagne.
    
    - Unfold the drive eviction functions in do_request(). This allowed us to
       realize that we don't have to re-get the major/minor numbers of the device we
       are action on from the raw device field of the currently running request. One
       significant place less in kernel where major/minor data gets manipulated.
    
    - Move the big IDE_BUSY loop out of do_request to do_ide_request().  This makes
       us realize that we don't have to clear the IDE_BUSY bit just before
       reentering do_request to look for more requests still pending on the queue
       and set it immediately again.
    
       This is fixing a tinny race on the code path from IRQ or timer function,
       where we had a tinny window between the clearing of the IDE_BUSY bit and
       reentering the request queue for completely unrelated requests to come in to
       our way.
    
    - Don't return any value in do_reset1(). It's always ATA_OP_CONTINUES. Split it
       up in to two functions one for disks (well in fact channels) and one for
       ATAPI devices. It turns out that they can be moved to the places where they
       are used to clarify the code flow. The only function remaining is
       do_reset_channel() now.
    
    - Duplicate code from ide_do_drive_code explicitely in ide_raw_taskfile().
       Simplify ide_raw_taskfile() thereafter. Realize that ide_do_drive_cmd()
       is now only used by ATAPI devices. Move it therefore to atapi.c.
    
    - Do busy polling for ATAPI reset operations. This is much safer then the
       previous timer games played there. It simply doesn't make sense to give the
       bus up during such a subtile operation. We don't have to disable IRQs here as
       well, since we are already under the protection of the do_request mechanisms.
       (Well hopefully...)
    
    - Remove no longer used reset_poll() function. poll_timeout and friends are now
       used only in pdc4030 code. Those function where not called from IRQ context
       but they where set as handlers and not as expiry functions.
    
    - Return ATA_OP_CONTINUES instead of ATA_OP_FINISHED in ata_error(), to signal
       that we are willing to retry the operation until the maximal number of retry
       attempts is exceeded. Returning ATA_OP_FINISHED without prior end_request()
       hangs the system.
    
    - Apply trivia from DJ patch set.
    
    - Apply small configuration fix to ide-pci.c from Muli Ben-Yehuda.
    
    - Feed add_blkdev_randomness with information we already have in struct
       ata_channel *ch->major, instead of using the major(macro) on the request in
       question.
    
    - Make ide_raw_taskfile use the same request submission mechanism as
       tcq_invalidate_queue(). Something similar would be ideal for ioctl() code as
       well.
    
    - Implement actual device reset. Realize that the recalibration procedure is
       doomed by the standard. Don't try to recover by recalibrating devices
       therefore -just our retry mechanism should work in those cases. And suddenly
       the error handling code is IRQ safe.
    
    - Reinvent the ATA reset operation, since it is apparently needed. We still
       have to do the whole transfer timing reconfiguration there.
    
    - Move drive_is_ready(), which is in reality an attempt to check for IRQ
       requesters without clearing the IRQ line, over to the place where it belongs:
       device.c, which is the direct device access abstraction place.  Rename it to
       ata_status_irq() to prevent global name space pollution.
    
    - Updates to the pdc202xxx host chip controller setup code by Bart³omiej
       ¯o³nierkiewicz:
    
       Forward port 2.4 patch by Hank Yang from Promise:
    
    	- Add PDC20271 support
    	- Disable LBA48 support on PDC20262
    	- Fix ATAPI UDMA port value
    	- Add new quirk drive
    	- Adjust timings for all drives when using ATA133
    	- Update pdc202xx_reset() waiting time
    
    - Mark TCQ as dangerous and add some bits about it to the help.
    
    - Add some missing exports.
    
    - Some small ide-scsi.c host allocation fixes by sullivan.
    e9356da8
atapi.c 5.02 KB