public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
From: Yanling Song <songyl@ramaxel.com>
To: Bart Van Assche <bvanassche@acm.org>
Cc: <martin.petersen@oracle.com>, <linux-scsi@vger.kernel.org>,
	<songyl@ramaxel.com>
Subject: Re: [PATCH] spraid: initial commit of Ramaxel spraid driver
Date: Sat, 9 Oct 2021 13:32:07 +0000	[thread overview]
Message-ID: <20211009133207.789ad116@songyl> (raw)
In-Reply-To: <526271c5-a745-7666-6b18-9eb61898f1db@acm.org>

On Fri, 8 Oct 2021 20:58:17 -0700
Bart Van Assche <bvanassche@acm.org> wrote:

> On 9/29/21 20:47, Yanling Song wrote:
> > +#define dev_log_dbg(dev, fmt, ...)	do { \
> > +	if (unlikely(log_debug_switch))	\
> > +		dev_info(dev, "[%s] [%d] " fmt,	\
> > +			__func__, __LINE__, ##__VA_ARGS__);
> > \ +} while (0)  
> 
> Please use pr_debug() instead of introducing dev_log_dbg().

Ok. Will use pr_debug in the next version.

> 
> > +static inline
> > +struct spraid_admin_request *spraid_admin_req(struct request *req)
> > +{
> > +	return blk_mq_rq_to_pdu(req);
> > +}  
> 
> Please read the section with the title "The inline disease" in 
> Documentation/process/coding-style.rst.

Ok. Will use MACRO to replace inline in the next version.

> 
> > +static inline bool spraid_is_rw_scmd(struct scsi_cmnd *scmd)
> > +{
> > +	switch (scmd->cmnd[0]) {
> > +	case READ_6:
> > +	case READ_10:
> > +	case READ_12:
> > +	case READ_16:
> > +	case READ_32:
> > +	case WRITE_6:
> > +	case WRITE_10:
> > +	case WRITE_12:
> > +	case WRITE_16:
> > +	case WRITE_32:
> > +		return true;
> > +	default:
> > +		return false;
> > +	}
> > +}  
> 
> Please use op_is_write() instead of reimplementing it.

op_is_write() does not meet our requirement: Both read and write
commands have to be checked, not just write command.

> 
> > +	if (scmd->sc_data_direction == DMA_TO_DEVICE) {
> > +		rw->opcode = SPRAID_CMD_WRITE;
> > +	} else if (scmd->sc_data_direction == DMA_FROM_DEVICE) {
> > +		rw->opcode = SPRAID_CMD_READ;
> > +	} else {
> > +		dev_err(hdev->dev, "Invalid IO for unsupported
> > data direction: %d\n",
> > +			scmd->sc_data_direction);
> > +		WARN_ON(1);
> > +	}
> > +
> > +	/* 6-byte READ(0x08) or WRITE(0x0A) cdb */
> > +	if (scmd->cmd_len == 6) {
> > +		datalength = (u32)(scmd->cmnd[4] == 0 ?
> > +				IO_6_DEFAULT_TX_LEN :
> > scmd->cmnd[4]);
> > +		start_lba_lo = ((u32)scmd->cmnd[1] << 16) |
> > +				((u32)scmd->cmnd[2] << 8) |
> > (u32)scmd->cmnd[3]; +
> > +		start_lba_lo &= 0x1FFFFF;
> > +	}
> > +
> > +	/* 10-byte READ(0x28) or WRITE(0x2A) cdb */
> > +	else if (scmd->cmd_len == 10) {
> > +		datalength = (u32)scmd->cmnd[8] |
> > ((u32)scmd->cmnd[7] << 8);
> > +		start_lba_lo = ((u32)scmd->cmnd[2] << 24) |
> > +				((u32)scmd->cmnd[3] << 16) |
> > +				((u32)scmd->cmnd[4] << 8) |
> > (u32)scmd->cmnd[5]; +
> > +		if (scmd->cmnd[1] & FUA_MASK)
> > +			control |= SPRAID_RW_FUA;
> > +	}
> > +
> > +	/* 12-byte READ(0xA8) or WRITE(0xAA) cdb */
> > +	else if (scmd->cmd_len == 12) {
> > +		datalength = ((u32)scmd->cmnd[6] << 24) |
> > +				((u32)scmd->cmnd[7] << 16) |
> > +				((u32)scmd->cmnd[8] << 8) |
> > (u32)scmd->cmnd[9];
> > +		start_lba_lo = ((u32)scmd->cmnd[2] << 24) |
> > +				((u32)scmd->cmnd[3] << 16) |
> > +				((u32)scmd->cmnd[4] << 8) |
> > (u32)scmd->cmnd[5]; +
> > +		if (scmd->cmnd[1] & FUA_MASK)
> > +			control |= SPRAID_RW_FUA;
> > +	}
> > +	/* 16-byte READ(0x88) or WRITE(0x8A) cdb */
> > +	else if (scmd->cmd_len == 16) {
> > +		datalength = ((u32)scmd->cmnd[10] << 24) |
> > +			((u32)scmd->cmnd[11] << 16) |
> > +			((u32)scmd->cmnd[12] << 8) |
> > (u32)scmd->cmnd[13];
> > +		start_lba_lo = ((u32)scmd->cmnd[6] << 24) |
> > +			((u32)scmd->cmnd[7] << 16) |
> > +			((u32)scmd->cmnd[8] << 8) |
> > (u32)scmd->cmnd[9];
> > +		start_lba_hi = ((u32)scmd->cmnd[2] << 24) |
> > +			((u32)scmd->cmnd[3] << 16) |
> > +			((u32)scmd->cmnd[4] << 8) |
> > (u32)scmd->cmnd[5]; +
> > +		if (scmd->cmnd[1] & FUA_MASK)
> > +			control |= SPRAID_RW_FUA;
> > +	}
> > +	/* 32-byte READ(0x88) or WRITE(0x8A) cdb */
> > +	else if (scmd->cmd_len == 32) {
> > +		datalength = ((u32)scmd->cmnd[28] << 24) |
> > +			((u32)scmd->cmnd[29] << 16) |
> > +			((u32)scmd->cmnd[30] << 8) |
> > (u32)scmd->cmnd[31];
> > +		start_lba_lo = ((u32)scmd->cmnd[16] << 24) |
> > +			((u32)scmd->cmnd[17] << 16) |
> > +			((u32)scmd->cmnd[18] << 8) |
> > (u32)scmd->cmnd[19];
> > +		start_lba_hi = ((u32)scmd->cmnd[12] << 24) |
> > +			((u32)scmd->cmnd[13] << 16) |
> > +			((u32)scmd->cmnd[14] << 8) |
> > (u32)scmd->cmnd[15]; +
> > +		if (scmd->cmnd[10] & FUA_MASK)
> > +			control |= SPRAID_RW_FUA;
> > +	}  
> 
> Please remove all of the above code and use blk_rq_pos(), 
> blk_rq_sectors() and rq->cmd_flags & REQ_FUA instead.

I did not quite get your point. The above is commonly used in many
similar use cases. For example: megasas_build_ldio() in
megaraid_sas_base.c. 
What's the benefit to switch to another way: use
blk_rq_pos(),blk_rq_sectors()?

> 
> > +	spraid_wq = alloc_workqueue("spraid-wq", WQ_UNBOUND |
> > WQ_MEM_RECLAIM | WQ_SYSFS, 0);
> > +	if (!spraid_wq)
> > +		return -ENOMEM;  
> 
> Why does this driver create a workqueue? Why is system_wq not good
> enough?

In my opinion, there is not much difference by using system_wq or using
a dedicated wq to execute a work.
but the dedicated wq is must to execute some serial works. It is easy
to add more serial works later if using a dedicated wq here.

> 
> Thanks,
> 
> Bart.


  reply	other threads:[~2021-10-09 13:32 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-30  3:47 [PATCH] spraid: initial commit of Ramaxel spraid driver Yanling Song
2021-09-30  5:36 ` Randy Dunlap
2021-10-01  1:03   ` Yanling Song
2021-10-01  4:15 ` Christoph Hellwig
2021-10-08  9:22   ` Yanling Song
2021-10-09  3:58 ` Bart Van Assche
2021-10-09 13:32   ` Yanling Song [this message]
2021-10-10  3:52     ` Bart Van Assche
2021-10-11  8:34       ` Yanling Song
2021-10-11 19:40         ` Bart Van Assche
2021-10-12 11:10           ` Yanling Song
2021-10-11 19:54 ` Bart Van Assche
2021-10-12 14:49   ` Yanling Song
2021-10-12 16:59     ` Bart Van Assche
2021-10-13  6:50       ` Yanling Song
2021-10-13 22:00         ` Bart Van Assche
2021-10-15  5:48           ` Yanling Song
2021-10-20  0:33           ` Yanling Song
2021-10-20  3:24             ` Bart Van Assche
2021-11-03  1:43               ` Yanling Song
2021-11-05 13:02               ` Yanling Song
2021-11-05 16:13                 ` Bart Van Assche
2021-11-06  8:30                   ` Yanling Song

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=20211009133207.789ad116@songyl \
    --to=songyl@ramaxel.com \
    --cc=bvanassche@acm.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox