diff options
author | Frederik Deweerdt <deweerdt@free.fr> | 2008-01-16 11:19:08 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-01-25 12:09:10 -0500 |
commit | 1292500b159c00a8fece072b004f154e6fda9f48 (patch) | |
tree | 2b959a18518c0f54369b339f384770ffbca0174c /drivers/scsi | |
parent | 93a38fa2dd83fcaf65b2327fff65e364472388f9 (diff) |
[SCSI] ultrastor: clean up inline asm warnings
To: linux-kernel@vger.kernel.org
Cc: bunk@kernel.org
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 <frederik.deweerdt@gmail.com>
Cc: Adrian Bunk <trivial@kernel.org>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/ultrastor.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/scsi/ultrastor.c b/drivers/scsi/ultrastor.c index 1d3b02976d74..75eca6b22db5 100644 --- a/drivers/scsi/ultrastor.c +++ b/drivers/scsi/ultrastor.c | |||
@@ -298,9 +298,16 @@ static inline int find_and_clear_bit_16(unsigned long *field) | |||
298 | { | 298 | { |
299 | int rv; | 299 | int rv; |
300 | 300 | ||
301 | if (*field == 0) panic("No free mscp"); | 301 | if (*field == 0) |
302 | asm("xorl %0,%0\n0:\tbsfw %1,%w0\n\tbtr %0,%1\n\tjnc 0b" | 302 | panic("No free mscp"); |
303 | : "=&r" (rv), "=m" (*field) : "1" (*field)); | 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 | |||
304 | return rv; | 311 | return rv; |
305 | } | 312 | } |
306 | 313 | ||