Skip to content

Commit 1292500

Browse files
Frederik DeweerdtJames Bottomley
authored andcommitted
[SCSI] ultrastor: clean up inline asm warnings
To: [email protected] Cc: [email protected] Subject: [trivial patch] scsi/ultrastor: clean up inline asm warnings Hi, Compiling latest mainline with gcc 4.2.1 spews the following warnings: drivers/scsi/ultrastor.c: In function 'find_and_clear_bit_16': drivers/scsi/ultrastor.c:303: warning: matching constraint does not allow a register drivers/scsi/ultrastor.c:302: warning: matching constraint does not allow a register drivers/scsi/ultrastor.c: At top level: drivers/scsi/ultrastor.c:1202: warning: matching constraint does not allow a register drivers/scsi/ultrastor.c:1202: warning: matching constraint does not allow a register drivers/scsi/ultrastor.c: In function 'ultrastor_queuecommand': drivers/scsi/ultrastor.c:698: warning: matching constraint does not allow a register drivers/scsi/ultrastor.c:698: warning: matching constraint does not allow a register drivers/scsi/ultrastor.c:698: warning: matching constraint does not allow a register drivers/scsi/ultrastor.c:698: warning: matching constraint does not allow a register drivers/scsi/ultrastor.c:698: warning: matching constraint does not allow a register drivers/scsi/ultrastor.c:698: warning: matching constraint does not allow a register drivers/scsi/ultrastor.c:698: warning: matching constraint does not allow a register drivers/scsi/ultrastor.c:302: warning: matching constraint does not allow a register drivers/scsi/ultrastor.c:302: warning: matching constraint does not allow a register The following patch fixes it by using the '+' operator on the (*field) operand, marking it as read-write to gcc. I diffed the two resulting .s, and gcc produced the same code. This was tested with gcc 4.2.1 and gcc 3.4.3 Signed-off-by: Frederik Deweerdt <[email protected]> Cc: Adrian Bunk <[email protected]> Signed-off-by: James Bottomley <[email protected]>
1 parent 93a38fa commit 1292500

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

drivers/scsi/ultrastor.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -298,9 +298,16 @@ static inline int find_and_clear_bit_16(unsigned long *field)
298298
{
299299
int rv;
300300

301-
if (*field == 0) panic("No free mscp");
302-
asm("xorl %0,%0\n0:\tbsfw %1,%w0\n\tbtr %0,%1\n\tjnc 0b"
303-
: "=&r" (rv), "=m" (*field) : "1" (*field));
301+
if (*field == 0)
302+
panic("No free mscp");
303+
304+
asm volatile (
305+
"xorl %0,%0\n\t"
306+
"0: bsfw %1,%w0\n\t"
307+
"btr %0,%1\n\t"
308+
"jnc 0b"
309+
: "=&r" (rv), "=m" (*field) :);
310+
304311
return rv;
305312
}
306313

0 commit comments

Comments
 (0)