diff mbox series

lsi: check if SIGP bit is already set in Wait reselect

Message ID 20190217113717.7077-1-svens@stackframe.org (mailing list archive)
State New, archived
Headers show
Series lsi: check if SIGP bit is already set in Wait reselect | expand

Commit Message

Sven Schnelle Feb. 17, 2019, 11:37 a.m. UTC
If SIGP is set, the 'Wait for Reselection' command should jump
immediately to the address stored in the second DWORD of the
instruction. This fixes spurious hangs in the HP-UX 11.11
installer when the SIGP bit gets set by the kernel before the
'Wait for Reselection' command is executed by SCRIPTS.

Signed-off-by: Sven Schnelle <svens@stackframe.org>
Tested-by: Helge Deller <deller@gmx.de>
---
 hw/scsi/lsi53c895a.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Sven Schnelle March 4, 2019, 8:24 a.m. UTC | #1
Hi List,

is this patch going to be accepted?

Thanks
Sven

On Sun, Feb 17, 2019 at 12:37:17PM +0100, Sven Schnelle wrote:
> If SIGP is set, the 'Wait for Reselection' command should jump
> immediately to the address stored in the second DWORD of the
> instruction. This fixes spurious hangs in the HP-UX 11.11
> installer when the SIGP bit gets set by the kernel before the
> 'Wait for Reselection' command is executed by SCRIPTS.
> 
> Signed-off-by: Sven Schnelle <svens@stackframe.org>
> Tested-by: Helge Deller <deller@gmx.de>
> ---
>  hw/scsi/lsi53c895a.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c
> index 8ba07f8756..bcff859bac 100644
> --- a/hw/scsi/lsi53c895a.c
> +++ b/hw/scsi/lsi53c895a.c
> @@ -1297,8 +1297,10 @@ again:
>                  }
>                  break;
>              case 2: /* Wait Reselect */
> -                if (!lsi_irq_on_rsl(s)) {
> -                    lsi_wait_reselect(s);
> +                if (s->istat0 & LSI_ISTAT0_SIGP) {
> +                    s->dsp = s->dnad;
> +                } else if (!lsi_irq_on_rsl(s)) {
> +                        lsi_wait_reselect(s);
>                  }
>                  break;
>              case 3: /* Set */
> -- 
> 2.20.1
> 
>
Paolo Bonzini March 4, 2019, 10:07 a.m. UTC | #2
On 04/03/19 09:24, Sven Schnelle wrote:
> Hi List,
> 
> is this patch going to be accepted?

Yes, I have queued it now.

Paolo

> 
> Thanks
> Sven
> 
> On Sun, Feb 17, 2019 at 12:37:17PM +0100, Sven Schnelle wrote:
>> If SIGP is set, the 'Wait for Reselection' command should jump
>> immediately to the address stored in the second DWORD of the
>> instruction. This fixes spurious hangs in the HP-UX 11.11
>> installer when the SIGP bit gets set by the kernel before the
>> 'Wait for Reselection' command is executed by SCRIPTS.
>>
>> Signed-off-by: Sven Schnelle <svens@stackframe.org>
>> Tested-by: Helge Deller <deller@gmx.de>
>> ---
>>  hw/scsi/lsi53c895a.c | 6 ++++--
>>  1 file changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c
>> index 8ba07f8756..bcff859bac 100644
>> --- a/hw/scsi/lsi53c895a.c
>> +++ b/hw/scsi/lsi53c895a.c
>> @@ -1297,8 +1297,10 @@ again:
>>                  }
>>                  break;
>>              case 2: /* Wait Reselect */
>> -                if (!lsi_irq_on_rsl(s)) {
>> -                    lsi_wait_reselect(s);
>> +                if (s->istat0 & LSI_ISTAT0_SIGP) {
>> +                    s->dsp = s->dnad;
>> +                } else if (!lsi_irq_on_rsl(s)) {
>> +                        lsi_wait_reselect(s);
>>                  }
>>                  break;
>>              case 3: /* Set */
>> -- 
>> 2.20.1
>>
>>
diff mbox series

Patch

diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c
index 8ba07f8756..bcff859bac 100644
--- a/hw/scsi/lsi53c895a.c
+++ b/hw/scsi/lsi53c895a.c
@@ -1297,8 +1297,10 @@  again:
                 }
                 break;
             case 2: /* Wait Reselect */
-                if (!lsi_irq_on_rsl(s)) {
-                    lsi_wait_reselect(s);
+                if (s->istat0 & LSI_ISTAT0_SIGP) {
+                    s->dsp = s->dnad;
+                } else if (!lsi_irq_on_rsl(s)) {
+                        lsi_wait_reselect(s);
                 }
                 break;
             case 3: /* Set */