• Martin Dalecki's avatar
    [PATCH] 2.5.20 IDE 85 · 856dd13d
    Martin Dalecki authored
     - Work a bit on the automatic CRC error recovery handling. System still hangs.
       But one thing for sure - we don't have to use any specialized irq handler for
       it.
    
     - Since ioctl don't any longer submit requests to the queue without
       rq->special set, we can safely remove args_error handling from
       start_request.
    
     - Make REQ_SPECIAL usage in ide-floppy obvious.
    
     - Use REQ_SPECIAL everywhere instead of REQ_DRIVE_ACB. This is actually a bit
       dangerous but should work as far as I can see.
    
     - Unfold the now not REQ_SPECIAL specific dequeing part of ide_end_drive_cmd().
       Turns out that we can thereafter remove the calls to ide_end_drice_cmd() at
       places where the request type isn't REQ_SPECIAL all any longer. (tcq.c)
    
    
     - After the above operation it turns out that there are just two places where
       ide_end_drive_cmd remains, namely: ata_error, task_no_data_intr
       drive_cmd_intr.
    
       We can avoid it by changing the logics in ata_error a slightly.
    
       So now just to cases remain where ide_end_drive_cmd remains used:
       drive_cmd_intr and task_no_data_intr.
    
     - Now looking  a bit closer we can realize that drive_cmd_intr and
       task_no_data_intr can be easly merged together, since the usage of
       task_no_data_intr implied taskfile.sector_number == 0.
    
     - Use one single ata_special_intr function for the handling of interrupts
       submitted through ide_raw_cmd.
    
     - Move the remaining artefacts of ide_end_drive_cmd directly to
       ata_special_intr. Oh we don't need to check for REQ_SPECIAL any longer there,
       since the context is already known.
    
     - Set the ata_special_intr handler and command type directly inside
       ide_raw_taskfile to save code.
    856dd13d
tcq.c 14.5 KB