On 21/11/2014 10:27, Hannes Reinecke wrote:
> A read to ESP_INTRPT will clear ESP_STATUS and ESP_SSTEP. So read
> all status registers in one go to avoid losing information.

(ESP_STAT_TCNT is actually kept in the status register, it is cleared by
writing TCLO/MID/HI).

Reviewed-by: Paolo Bonzini <pbonz...@redhat.com>

> Signed-off-by: Hannes Reinecke <h...@suse.de>
> ---
>  drivers/scsi/esp_scsi.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/scsi/esp_scsi.c b/drivers/scsi/esp_scsi.c
> index fe3278e..92ab921 100644
> --- a/drivers/scsi/esp_scsi.c
> +++ b/drivers/scsi/esp_scsi.c
> @@ -982,7 +982,6 @@ static int esp_check_spur_intr(struct esp *esp)
>  
>       default:
>               if (!(esp->sreg & ESP_STAT_INTR)) {
> -                     esp->ireg = esp_read8(ESP_INTRPT);
>                       if (esp->ireg & ESP_INTR_SR)
>                               return 1;
>  
> @@ -2056,7 +2055,12 @@ static void __esp_interrupt(struct esp *esp)
>       int finish_reset, intr_done;
>       u8 phase;
>  
> +       /*
> +     * Once INTRPT is read STATUS and SSTEP are cleared.
> +     */
>       esp->sreg = esp_read8(ESP_STATUS);
> +     esp->seqreg = esp_read8(ESP_SSTEP);
> +     esp->ireg = esp_read8(ESP_INTRPT);
>  
>       if (esp->flags & ESP_FLAG_RESETTING) {
>               finish_reset = 1;
> @@ -2069,8 +2073,6 @@ static void __esp_interrupt(struct esp *esp)
>                       return;
>       }
>  
> -     esp->ireg = esp_read8(ESP_INTRPT);
> -
>       if (esp->ireg & ESP_INTR_SR)
>               finish_reset = 1;
>  
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to