Micro-optimize the code for CDB parsing in several device handlers.

BSD-signed-off-by: Bart Van Assche <bvanassche@acm.org>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@3948 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
Vladislav Bolkhovitin
2011-12-02 02:41:15 +00:00
parent 4a3988e274
commit 0af423256f
4 changed files with 10 additions and 17 deletions
+2 -2
View File
@@ -22,6 +22,7 @@
#include <linux/cdrom.h>
#include <scsi/scsi_host.h>
#include <linux/slab.h>
#include <asm/unaligned.h>
#define LOG_PREFIX "dev_cdrom"
@@ -135,8 +136,7 @@ static int cdrom_attach(struct scst_device *dev)
}
if (rc == 0) {
int sector_size = ((buffer[4] << 24) | (buffer[5] << 16) |
(buffer[6] << 8) | (buffer[7] << 0));
uint32_t sector_size = get_unaligned_be32(&buffer[4]);
if (sector_size == 0)
params->block_shift = CDROM_DEF_BLOCK_SHIFT;
else
+1 -2
View File
@@ -230,8 +230,7 @@ static int disk_attach(struct scst_device *dev)
}
}
if (rc == 0) {
int sector_size = ((buffer[4] << 24) | (buffer[5] << 16) |
(buffer[6] << 8) | (buffer[7] << 0));
uint32_t sector_size = get_unaligned_be32(&buffer[4]);
if (sector_size == 0)
params->block_shift = DISK_DEF_BLOCK_SHIFT;
else
+2 -2
View File
@@ -26,6 +26,7 @@
#include <linux/init.h>
#include <scsi/scsi_host.h>
#include <linux/slab.h>
#include <asm/unaligned.h>
#define LOG_PREFIX "dev_modisk"
@@ -232,8 +233,7 @@ static int modisk_attach(struct scst_device *dev)
}
if (rc == 0) {
int sector_size = ((buffer[4] << 24) | (buffer[5] << 16) |
(buffer[6] << 8) | (buffer[7] << 0));
uint32_t sector_size = get_unaligned_be32(&buffer[4]);
if (sector_size == 0)
params->block_shift = MODISK_DEF_BLOCK_SHIFT;
else
+5 -11
View File
@@ -26,6 +26,7 @@
#include <linux/init.h>
#include <scsi/scsi_host.h>
#include <linux/slab.h>
#include <asm/unaligned.h>
#define LOG_PREFIX "dev_tape"
@@ -219,9 +220,7 @@ static int tape_attach(struct scst_device *dev)
if (rc == 0) {
int medium_type, mode, speed, density;
if (buffer[3] == 8) {
params->block_size = ((buffer[9] << 16) |
(buffer[10] << 8) |
(buffer[11] << 0));
params->block_size = get_unaligned_be24(&buffer[9]);
} else
params->block_size = TAPE_DEF_BLOCK_SIZE;
medium_type = buffer[1];
@@ -336,15 +335,10 @@ static int tape_done(struct scst_cmd *cmd)
if ((cmd->sense[2] & 0x0f) == BLANK_CHECK)
/* No need for EOM in this case */
cmd->sense[2] &= 0xcf;
TransferLength = ((cmd->cdb[2] << 16) |
(cmd->cdb[3] << 8) | cmd->cdb[4]);
TransferLength = get_unaligned_be24(&cmd->cdb[2]);
/* Compute the residual count */
if ((cmd->sense[0] & 0x80) != 0) {
Residue = ((cmd->sense[3] << 24) |
(cmd->sense[4] << 16) |
(cmd->sense[5] << 8) |
cmd->sense[6]);
}
if ((cmd->sense[0] & 0x80) != 0)
Residue = get_unaligned_be32(&cmd->sense[3]);
TRACE_DBG("Checking the sense key "
"sn[2]=%x cmd->cdb[0,1]=%x,%x TransLen/Resid"
" %d/%d", (int)cmd->sense[2], cmd->cdb[0],