All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hannes Reinecke <hare@suse.de>
To: Achim Leubner <Achim.Leubner@pmcs.com>,
	Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com>,
	"JBottomley@Parallels.com" <JBottomley@Parallels.com>,
	"linux-scsi@vger.kernel.org" <linux-scsi@vger.kernel.org>
Subject: Re: [PATCH 3/7] aacraid: 4KB sector support
Date: Wed, 18 Mar 2015 12:06:09 +0100	[thread overview]
Message-ID: <55095C21.3030102@suse.de> (raw)
In-Reply-To: <307F48E420013C4E85C75C93E532197AB8092033@BBYEXM01.pmc-sierra.internal>

On 03/17/2015 04:26 PM, Achim Leubner wrote:
> Reviewed-by: Achim Leubner <Achim.Leubner@pmcs.com>
> 
> 
> -----Original Message-----
> From: Mahesh Rajashekhara 
> Sent: Wednesday, March 4, 2015 9:38 AM
> To: JBottomley@Parallels.com; linux-scsi@vger.kernel.org
> Cc: aacraid@pmc-sierra.com; Harry Yang; Achim Leubner; Rajinikanth Pandurangan; Rich Bono; Mahesh Rajashekhara
> Subject: [PATCH 3/7] aacraid: 4KB sector support
> 
> Add 4KB sector support
> 
> Signed-off-by: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com>
> ---
>  drivers/scsi/aacraid/aachba.c  |  195 +++++++++++++++++++++++++++++++---------
>  drivers/scsi/aacraid/aacraid.h |   10 ++-
>  2 files changed, 160 insertions(+), 45 deletions(-)
> 
> diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c index b32e77d..0819644 100644
> --- a/drivers/scsi/aacraid/aachba.c
> +++ b/drivers/scsi/aacraid/aachba.c
> @@ -111,6 +111,41 @@
>  #define BYTE2(x) (unsigned char)((x) >> 16)  #define BYTE3(x) (unsigned char)((x) >> 24)
>  
> +/* MODE_SENSE data format */
> +typedef struct {
> +	struct {
> +		u8	data_length;
> +		u8	med_type;
> +		u8	dev_par;
> +		u8	bd_length;
> +	} __attribute__((packed)) hd;
> +	struct {
> +		u8	dens_code;
> +		u8	block_count[3];
> +		u8	reserved;
> +		u8	block_length[3];
> +	} __attribute__((packed)) bd;
> +		u8	mpc_buf[3];
> +} __attribute__((packed)) aac_modep_data;
> +
> +/* MODE_SENSE_10 data format */
> +typedef struct {
> +	struct {
> +		u8	data_length[2];
> +		u8	med_type;
> +		u8	dev_par;
> +		u8	rsrvd[2];
> +		u8	bd_length[2];
> +	} __attribute__((packed)) hd;
> +	struct {
> +		u8	dens_code;
> +		u8	block_count[3];
> +		u8	reserved;
> +		u8	block_length[3];
> +	} __attribute__((packed)) bd;
> +		u8	mpc_buf[3];
> +} __attribute__((packed)) aac_modep10_data;
> +
>  /*------------------------------------------------------------------------------
>   *              S T R U C T S / T Y P E D E F S
>   *----------------------------------------------------------------------------*/
> @@ -539,6 +574,13 @@ static void _aac_probe_container2(void * context, struct fib * fibptr)
>  		if ((le32_to_cpu(dresp->status) == ST_OK) &&
>  		    (le32_to_cpu(dresp->mnt[0].vol) != CT_NONE) &&
>  		    (le32_to_cpu(dresp->mnt[0].state) != FSCS_HIDDEN)) {
> +			if (!(fibptr->dev->supplement_adapter_info.SupportedOptions2 &
> +			    AAC_OPTION_VARIABLE_BLOCK_SIZE)) {
> +				dresp->mnt[0].fileinfo.bdevinfo.block_size = 0x200;
> +				fsa_dev_ptr->block_size = 0x200;
> +			} else {
> +				fsa_dev_ptr->block_size = le32_to_cpu(dresp->mnt[0].fileinfo.bdevinfo.block_size);
> +			}
>  			fsa_dev_ptr->valid = 1;
>  			/* sense_key holds the current state of the spin-up */
>  			if (dresp->mnt[0].state & cpu_to_le32(FSCS_NOT_READY)) @@ -586,7 +628,12 @@ static void _aac_probe_container1(void * context, struct fib * fibptr)
>  
>  	dinfo = (struct aac_query_mount *)fib_data(fibptr);
>  
> -	dinfo->command = cpu_to_le32(VM_NameServe64);
> +	if (fibptr->dev->supplement_adapter_info.SupportedOptions2 &
> +	    AAC_OPTION_VARIABLE_BLOCK_SIZE)
> +		dinfo->command = cpu_to_le32(VM_NameServeAllBlk);
> +	else
> +		dinfo->command = cpu_to_le32(VM_NameServe64);
> +
>  	dinfo->count = cpu_to_le32(scmd_id(scsicmd));
>  	dinfo->type = cpu_to_le32(FT_FILESYS);
>  
> @@ -621,7 +668,12 @@ static int _aac_probe_container(struct scsi_cmnd * scsicmd, int (*callback)(stru
>  
>  		dinfo = (struct aac_query_mount *)fib_data(fibptr);
>  
> -		dinfo->command = cpu_to_le32(VM_NameServe);
> +		if (fibptr->dev->supplement_adapter_info.SupportedOptions2 &
> +		    AAC_OPTION_VARIABLE_BLOCK_SIZE)
> +			dinfo->command = cpu_to_le32(VM_NameServeAllBlk);
> +		else
> +			dinfo->command = cpu_to_le32(VM_NameServe);
> +
>  		dinfo->count = cpu_to_le32(scmd_id(scsicmd));
>  		dinfo->type = cpu_to_le32(FT_FILESYS);
>  		scsicmd->SCp.ptr = (char *)callback;
> @@ -982,7 +1034,7 @@ static int aac_read_raw_io(struct fib * fib, struct scsi_cmnd * cmd, u64 lba, u3
>  		memset(readcmd2, 0, sizeof(struct aac_raw_io2));
>  		readcmd2->blockLow = cpu_to_le32((u32)(lba&0xffffffff));
>  		readcmd2->blockHigh = cpu_to_le32((u32)((lba&0xffffffff00000000LL)>>32));
> -		readcmd2->byteCount = cpu_to_le32(count<<9);
> +		readcmd2->byteCount = cpu_to_le32(count * 
> +dev->fsa_dev[scmd_id(cmd)].block_size);

Wrong indentation.

>  		readcmd2->cid = cpu_to_le16(scmd_id(cmd));
>  		readcmd2->flags = cpu_to_le16(RIO2_IO_TYPE_READ);
>  		ret = aac_build_sgraw2(cmd, readcmd2, @@ -997,7 +1049,7 @@ static int aac_read_raw_io(struct fib * fib, struct scsi_cmnd * cmd, u64 lba, u3
>  		readcmd = (struct aac_raw_io *) fib_data(fib);
>  		readcmd->block[0] = cpu_to_le32((u32)(lba&0xffffffff));
>  		readcmd->block[1] = cpu_to_le32((u32)((lba&0xffffffff00000000LL)>>32));
> -		readcmd->count = cpu_to_le32(count<<9);
> +		readcmd->count = cpu_to_le32(count * 
> +dev->fsa_dev[scmd_id(cmd)].block_size);

Same here.

>  		readcmd->cid = cpu_to_le16(scmd_id(cmd));
>  		readcmd->flags = cpu_to_le16(RIO_TYPE_READ);
>  		readcmd->bpTotal = 0;
> @@ -1062,6 +1114,7 @@ static int aac_read_block(struct fib * fib, struct scsi_cmnd * cmd, u64 lba, u32  {
>  	u16 fibsize;
>  	struct aac_read *readcmd;
> +	struct aac_dev *dev = fib->dev;
>  	long ret;
>  
>  	aac_fib_init(fib);
> @@ -1069,7 +1122,7 @@ static int aac_read_block(struct fib * fib, struct scsi_cmnd * cmd, u64 lba, u32
>  	readcmd->command = cpu_to_le32(VM_CtBlockRead);
>  	readcmd->cid = cpu_to_le32(scmd_id(cmd));
>  	readcmd->block = cpu_to_le32((u32)(lba&0xffffffff));
> -	readcmd->count = cpu_to_le32(count * 512);
> +	readcmd->count = cpu_to_le32(count * 
> +dev->fsa_dev[scmd_id(cmd)].block_size);
>  

Here.

>  	ret = aac_build_sg(cmd, &readcmd->sg);
>  	if (ret < 0)
> @@ -1104,7 +1157,7 @@ static int aac_write_raw_io(struct fib * fib, struct scsi_cmnd * cmd, u64 lba, u
>  		memset(writecmd2, 0, sizeof(struct aac_raw_io2));
>  		writecmd2->blockLow = cpu_to_le32((u32)(lba&0xffffffff));
>  		writecmd2->blockHigh = cpu_to_le32((u32)((lba&0xffffffff00000000LL)>>32));
> -		writecmd2->byteCount = cpu_to_le32(count<<9);
> +		writecmd2->byteCount = cpu_to_le32(count * 
> +dev->fsa_dev[scmd_id(cmd)].block_size);

Here.

>  		writecmd2->cid = cpu_to_le16(scmd_id(cmd));
>  		writecmd2->flags = (fua && ((aac_cache & 5) != 1) &&
>  						   (((aac_cache & 5) != 5) || !fib->dev->cache_protected)) ?
> @@ -1122,7 +1175,7 @@ static int aac_write_raw_io(struct fib * fib, struct scsi_cmnd * cmd, u64 lba, u
>  		writecmd = (struct aac_raw_io *) fib_data(fib);
>  		writecmd->block[0] = cpu_to_le32((u32)(lba&0xffffffff));
>  		writecmd->block[1] = cpu_to_le32((u32)((lba&0xffffffff00000000LL)>>32));
> -		writecmd->count = cpu_to_le32(count<<9);
> +		writecmd->count = cpu_to_le32(count * 
> +dev->fsa_dev[scmd_id(cmd)].block_size);

Here.

>  		writecmd->cid = cpu_to_le16(scmd_id(cmd));
>  		writecmd->flags = (fua && ((aac_cache & 5) != 1) &&
>  						   (((aac_cache & 5) != 5) || !fib->dev->cache_protected)) ?
> @@ -1190,6 +1243,7 @@ static int aac_write_block(struct fib * fib, struct scsi_cmnd * cmd, u64 lba, u3  {
>  	u16 fibsize;
>  	struct aac_write *writecmd;
> +	struct aac_dev *dev = fib->dev;
>  	long ret;
>  
>  	aac_fib_init(fib);
> @@ -1197,7 +1251,7 @@ static int aac_write_block(struct fib * fib, struct scsi_cmnd * cmd, u64 lba, u3
>  	writecmd->command = cpu_to_le32(VM_CtBlockWrite);
>  	writecmd->cid = cpu_to_le32(scmd_id(cmd));
>  	writecmd->block = cpu_to_le32((u32)(lba&0xffffffff));
> -	writecmd->count = cpu_to_le32(count * 512);
> +	writecmd->count = cpu_to_le32(count * 
> +dev->fsa_dev[scmd_id(cmd)].block_size);

And here.

>  	writecmd->sg.count = cpu_to_le32(1);
>  	/* ->stable is not used - it did mean which type of write */
>  
> @@ -2329,10 +2383,10 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
>  		cp[5] = (capacity >> 16) & 0xff;
>  		cp[6] = (capacity >> 8) & 0xff;
>  		cp[7] = (capacity >> 0) & 0xff;
> -		cp[8] = 0;
> -		cp[9] = 0;
> -		cp[10] = 2;
> -		cp[11] = 0;
> +		cp[8] = (fsa_dev_ptr[cid].block_size >> 24) & 0xff;
> +		cp[9] = (fsa_dev_ptr[cid].block_size >> 16) & 0xff;
> +		cp[10] = (fsa_dev_ptr[cid].block_size >> 8) & 0xff;
> +		cp[11] = (fsa_dev_ptr[cid].block_size) & 0xff;
>  		cp[12] = 0;
>  
>  		alloc_len = ((scsicmd->cmnd[10] << 24) @@ -2369,10 +2423,10 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
>  		cp[1] = (capacity >> 16) & 0xff;
>  		cp[2] = (capacity >> 8) & 0xff;
>  		cp[3] = (capacity >> 0) & 0xff;
> -		cp[4] = 0;
> -		cp[5] = 0;
> -		cp[6] = 2;
> -		cp[7] = 0;
> +		cp[4] = (fsa_dev_ptr[cid].block_size >> 24) & 0xff;
> +		cp[5] = (fsa_dev_ptr[cid].block_size >> 16) & 0xff;
> +		cp[6] = (fsa_dev_ptr[cid].block_size >> 8) & 0xff;
> +		cp[7] = (fsa_dev_ptr[cid].block_size) & 0xff;
>  		scsi_sg_copy_from_buffer(scsicmd, cp, sizeof(cp));
>  		/* Do not cache partition table for arrays */
>  		scsicmd->device->removable = 1;
> @@ -2385,30 +2439,55 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
>  
>  	case MODE_SENSE:
>  	{
> -		char mode_buf[7];
>  		int mode_buf_length = 4;
> +		u32 capacity;
> +		aac_modep_data mpd;
> +
> +		if (fsa_dev_ptr[cid].size <= 0x100000000ULL)
> +			capacity = fsa_dev_ptr[cid].size - 1;
> +		else
> +			capacity = (u32)-1;
>  
>  		dprintk((KERN_DEBUG "MODE SENSE command.\n"));
> -		mode_buf[0] = 3;	/* Mode data length */
> -		mode_buf[1] = 0;	/* Medium type - default */
> -		mode_buf[2] = 0;	/* Device-specific param,
> +		memset((char *)&mpd, 0, sizeof(aac_modep_data));
> +
> +		mpd.hd.data_length = sizeof(mpd.hd) - 1;	/* Mode data length */
> +		mpd.hd.med_type = 0;	/* Medium type - default */
> +		mpd.hd.dev_par = 0;	/* Device-specific param,
>  					   bit 8: 0/1 = write enabled/protected
>  					   bit 4: 0/1 = FUA enabled */
>  		if (dev->raw_io_interface && ((aac_cache & 5) != 1))
> -			mode_buf[2] = 0x10;
> -		mode_buf[3] = 0;	/* Block descriptor length */
> +			mpd.hd.dev_par = 0x10;
> +		if (scsicmd->cmnd[1] & 0x8) {
> +			mpd.hd.bd_length = 0;	/* Block descriptor length */
> +		} else {

No braces around conditions in a single line.

Remember to run './scripts/checkpatch.pl' before submission.

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		               zSeries & Storage
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2015-03-18 11:06 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-04  8:38 [PATCH 0/7] aacraid driver updates Mahesh Rajashekhara
2015-03-04  8:38 ` [PATCH 1/7] aacraid: AIF support for SES device add/remove Mahesh Rajashekhara
2015-03-17  7:05   ` Murthy Bhat
2015-03-17 15:24   ` Achim Leubner
2015-03-18 11:02     ` Hannes Reinecke
2015-03-04  8:38 ` [PATCH 2/7] aacraid: IOCTL pass-through command fix Mahesh Rajashekhara
2015-03-17  7:06   ` Murthy Bhat
2015-03-17 15:26   ` Achim Leubner
2015-03-18 11:03     ` Hannes Reinecke
2015-03-04  8:38 ` [PATCH 3/7] aacraid: 4KB sector support Mahesh Rajashekhara
2015-03-17  7:06   ` Murthy Bhat
2015-03-17 15:26   ` Achim Leubner
2015-03-18 11:06     ` Hannes Reinecke [this message]
2015-03-04  8:38 ` [PATCH 4/7] aacraid: MSI-x support Mahesh Rajashekhara
2015-03-17  7:06   ` Murthy Bhat
2015-03-17 15:27   ` Achim Leubner
2015-03-18 11:18     ` Hannes Reinecke
2015-03-04  8:38 ` [PATCH 5/7] aacraid: vpd page code 0x83 support Mahesh Rajashekhara
2015-03-17  7:06   ` Murthy Bhat
2015-03-17 15:27   ` Achim Leubner
2015-03-18 11:26     ` Hannes Reinecke
2015-03-04  8:38 ` [PATCH 6/7] aacraid: performance improvement changes Mahesh Rajashekhara
2015-03-17  7:07   ` Murthy Bhat
2015-03-17 15:27   ` Achim Leubner
2015-03-18 11:27     ` Hannes Reinecke
2015-03-04  8:38 ` [PATCH 7/7] aacraid: AIF raw device remove support Mahesh Rajashekhara
2015-03-17  7:07   ` Murthy Bhat
2015-03-17 15:28   ` Achim Leubner
2015-03-18 11:29     ` Hannes Reinecke
2015-03-26 14:43       ` Mahesh Rajashekhara
2015-03-16 11:24 ` [PATCH 0/7] aacraid driver updates Mahesh Rajashekhara
2015-03-16 12:49   ` James Bottomley

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=55095C21.3030102@suse.de \
    --to=hare@suse.de \
    --cc=Achim.Leubner@pmcs.com \
    --cc=JBottomley@Parallels.com \
    --cc=Mahesh.Rajashekhara@pmcs.com \
    --cc=linux-scsi@vger.kernel.org \
    /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.