From: Rene Herman <rene.herman@gmail.com>
To: Al Viro <viro@ftp.linux.org.uk>
Cc: Jesper Juhl <jesper.juhl@gmail.com>,
linux-scsi@vger.kernel.org,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] Re: cciss: warning: right shift count >= width of type
Date: Sun, 12 Aug 2007 21:55:02 +0200 [thread overview]
Message-ID: <46BF6596.8040803@gmail.com> (raw)
In-Reply-To: <20070812065806.GC21089@ftp.linux.org.uk>
[-- Attachment #1: Type: text/plain, Size: 1142 bytes --]
On 08/12/2007 08:58 AM, Al Viro wrote:
> On Sun, Aug 12, 2007 at 03:21:57AM +0200, Rene Herman wrote:
>> + c->Request.CDB[2]= ((u64)start_blk >> 56) & 0xff; //MSB
>> + c->Request.CDB[3]= ((u64)start_blk >> 48) & 0xff;
>> + c->Request.CDB[4]= ((u64)start_blk >> 40) & 0xff;
>> + c->Request.CDB[5]= ((u64)start_blk >> 32) & 0xff;
>> + c->Request.CDB[6]= ((u64)start_blk >> 24) & 0xff;
>> + c->Request.CDB[7]= ((u64)start_blk >> 16) & 0xff;
>> + c->Request.CDB[8]= ((u64)start_blk >> 8) & 0xff;
>
> put_unaligned(cpu_to_be64(start_blk), &c->Request.CDB[2]);
>
> which is what's happening here anyway.
Well, yes. There are a few more of these in the driver and this wants a
maintainer (whom I can't reach @hp.com) comment.
Is that 16-bit one for CCISS_READ_10 really right? Either:
put_unaligned(cpu_to_be32(creq->nr_sectors), &c->Request.CDB[6]);
or possibly:
put_unaligned(cpu_to_be16(creq->nr_sectors), &c->Request.CDB[8]);
would look less surprising than the current 16-bit in 24-bit thing and the
"sect >> 24" comment there seems to imply the first?
(the implcit downcasting in that case is fine, right?)
Rene.
[-- Attachment #2: cciss.diff --]
[-- Type: text/plain, Size: 3028 bytes --]
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index 5acc6c4..9fb6b3c 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -40,6 +40,7 @@
#include <linux/blktrace_api.h>
#include <asm/uaccess.h>
#include <asm/io.h>
+#include <asm/unaligned.h>
#include <linux/dma-mapping.h>
#include <linux/blkdev.h>
@@ -1711,10 +1712,7 @@ static int fill_cmd(CommandList_struct *c, __u8 cmd, int ctlr, void *buff, size_
c->Request.Type.Direction = XFER_READ;
c->Request.Timeout = 0;
c->Request.CDB[0] = cmd;
- c->Request.CDB[6] = (size >> 24) & 0xFF; //MSB
- c->Request.CDB[7] = (size >> 16) & 0xFF;
- c->Request.CDB[8] = (size >> 8) & 0xFF;
- c->Request.CDB[9] = size & 0xFF;
+ put_unaligned(cpu_to_be32(size), &c->Request.CDB[6]);
break;
case CCISS_READ_CAPACITY:
@@ -1735,12 +1733,7 @@ static int fill_cmd(CommandList_struct *c, __u8 cmd, int ctlr, void *buff, size_
c->Request.Timeout = 0;
c->Request.CDB[0] = cmd;
c->Request.CDB[1] = 0x10;
- c->Request.CDB[10] = (size >> 24) & 0xFF;
- c->Request.CDB[11] = (size >> 16) & 0xFF;
- c->Request.CDB[12] = (size >> 8) & 0xFF;
- c->Request.CDB[13] = size & 0xFF;
- c->Request.Timeout = 0;
- c->Request.CDB[0] = cmd;
+ put_unaligned(cpu_to_be32(size), &c->Request.CDB[10]);
break;
case CCISS_CACHE_FLUSH:
c->Request.CDBLen = 12;
@@ -2598,29 +2591,15 @@ static void do_cciss_request(request_queue_t *q)
if (likely(blk_fs_request(creq))) {
if(h->cciss_read == CCISS_READ_10) {
c->Request.CDB[1] = 0;
- c->Request.CDB[2] = (start_blk >> 24) & 0xff; //MSB
- c->Request.CDB[3] = (start_blk >> 16) & 0xff;
- c->Request.CDB[4] = (start_blk >> 8) & 0xff;
- c->Request.CDB[5] = start_blk & 0xff;
- c->Request.CDB[6] = 0; // (sect >> 24) & 0xff; MSB
- c->Request.CDB[7] = (creq->nr_sectors >> 8) & 0xff;
- c->Request.CDB[8] = creq->nr_sectors & 0xff;
+ put_unaligned(cpu_to_be32(start_blk), &c->Request.CDB[2]);
+ c->Request.CDB[6] = 0;
+ put_unaligned(cpu_to_be16(creq->nr_sectors), &c->Request.CDB[7]);
c->Request.CDB[9] = c->Request.CDB[11] = c->Request.CDB[12] = 0;
} else {
c->Request.CDBLen = 16;
c->Request.CDB[1]= 0;
- c->Request.CDB[2]= (start_blk >> 56) & 0xff; //MSB
- c->Request.CDB[3]= (start_blk >> 48) & 0xff;
- c->Request.CDB[4]= (start_blk >> 40) & 0xff;
- c->Request.CDB[5]= (start_blk >> 32) & 0xff;
- c->Request.CDB[6]= (start_blk >> 24) & 0xff;
- c->Request.CDB[7]= (start_blk >> 16) & 0xff;
- c->Request.CDB[8]= (start_blk >> 8) & 0xff;
- c->Request.CDB[9]= start_blk & 0xff;
- c->Request.CDB[10]= (creq->nr_sectors >> 24) & 0xff;
- c->Request.CDB[11]= (creq->nr_sectors >> 16) & 0xff;
- c->Request.CDB[12]= (creq->nr_sectors >> 8) & 0xff;
- c->Request.CDB[13]= creq->nr_sectors & 0xff;
+ put_unaligned(cpu_to_be64(start_blk), &c->Request.CDB[2]);
+ put_unaligned(cpu_to_be32(creq->nr_sectors), &c->Request.CDB[10]);
c->Request.CDB[14] = c->Request.CDB[15] = 0;
}
} else if (blk_pc_request(creq)) {
next prev parent reply other threads:[~2007-08-12 19:58 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-12 0:28 cciss: warning: right shift count >= width of type Jesper Juhl
2007-08-12 0:56 ` Jesper Juhl
2007-08-12 1:25 ` [PATCH] " Rene Herman
2007-08-12 1:54 ` Rene Herman
2007-08-12 1:21 ` Rene Herman
2007-08-12 6:58 ` Al Viro
2007-08-12 19:55 ` Rene Herman [this message]
2007-08-12 20:32 ` James Bottomley
2007-08-12 23:08 ` Rene Herman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=46BF6596.8040803@gmail.com \
--to=rene.herman@gmail.com \
--cc=jesper.juhl@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=viro@ftp.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.