NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: port-vax/51761: SCSI gets stuck on VAXstation 4000
The following reply was made to PR port-vax/51761; it has been noted by GNATS.
From: Felix Deichmann <flxd%NetBSD.org@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc:
Subject: Re: port-vax/51761: SCSI gets stuck on VAXstation 4000
Date: Fri, 6 Jan 2017 08:58:50 +0100
The SCSI issues are an effect of a gcc bug in its built-in ffs function
for vax.
scsipi_get_tag() in src/sys/dev/scsipi/scsipi_base.c uses ffs to obtain
a free tag from the pool. It will erroneously return tag id 0x38 (word
1, bit 24) after 0x1f has been reached (word 0, bit 31), instead of the
expected 0x20 (word 1, bit 0).
This is because the statement
bit = ffs(periph->periph_freetags[word]);
is compiled as
15b0: ea 00 20 48 ffs $0x0,$0x20,0x50(r10)[r8],r9
15b4: aa 50 59
r8 is obviously a byte index, while it should be a longword index like
variable "word" is a longword index into u_int32_t periph_freetags[].
A tested workaround is to use a generic function like inlined ffs32 from
<sys/bitops.h> instead of the gcc built-in ffs function.
Home |
Main Index |
Thread Index |
Old Index