Re: [PATCH V2] scsi:spraid: initial commit of Ramaxel spraid driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, 12 Dec 2021 02:56:01 +0000
yanling.song@xxxxxxxxx wrote:

> December 10, 2021 7:15 AM, "Bart Van Assche" <bvanassche@xxxxxxx>
> wrote:
> 
> > On 11/25/21 11:33 PM, Yanling Song wrote:
> >   
> >> +struct spraid_dev {
> >> + struct pci_dev *pdev;  
> > 
> > Why a pointer to struct pci_dev instead of embedding struct pci_dev
> > in this structure? The latter approach is more efficient.
> >   
> The pointer of pci_dev is from linux driver frame work probe()
> function, spraid driver does not allocate memory for it, just save
> the pointer.
> 
> >> + struct device *dev;  
> > 
> > What does this pointer represent? There is already a struct device
> > inside struct pci_dev. Can this member be left out?
> >   
> The pointer of dev is from struct pci_dev. It is saved in struct
> spraid_dev just for convenience: so that we do not need to get the
> dev from pci_dev every time when using dev.
> 
> >> + struct spraid_cmd *adm_cmds;
> >> + struct list_head adm_cmd_list;
> >> + spinlock_t adm_cmd_lock; /* spinlock for lock handling */
> >> +
> >> + struct spraid_cmd *ioq_ptcmds;
> >> + struct list_head ioq_pt_list;
> >> + spinlock_t ioq_pt_lock; /* spinlock for lock handling */
> >> +
> >> + struct work_struct scan_work;
> >> + struct work_struct timesyn_work;
> >> + struct work_struct reset_work;
> >> +
> >> + enum spraid_state state;
> >> + spinlock_t state_lock; /* spinlock for lock handling */
> >> + struct request_queue *bsg_queue;  
> > 
> > The "spinlock for lock handling" comments are not useful. Please
> > make these comments useful or remove these.
> >   
> Comments will be removed in the next version.
> 
> >> +#include <linux/version.h>  
> > 
> > Upstream drivers should not include this header file.
> >  
> Ok. Changes will be included in the next version.
> 
> >> +static u32 admin_tmout = 60;
> >> +module_param(admin_tmout, uint, 0644);
> >> +MODULE_PARM_DESC(admin_tmout, "admin commands timeout (seconds)");
> >> +  
> Will be changed to per SCSI host.
> 
> >> +static u32 scmd_tmout_pt = 30;
> >> +module_param(scmd_tmout_pt, uint, 0644);
> >> +MODULE_PARM_DESC(scmd_tmout_pt, "scsi commands timeout for
> >> passthrough(seconds)");
> >> +  
> Will be deleted.
> 
> >> +static u32 scmd_tmout_nonpt = 180;
> >> +module_param(scmd_tmout_nonpt, uint, 0644);
> >> +MODULE_PARM_DESC(scmd_tmout_nonpt, "scsi commands timeout for
> >> rawdisk&raid(seconds)");
> >> +  
> Will be splitted into two attributes of scsi host:scmd_tmout_rawdisk,
> scmd_tmout_vd
> 

After the internal discussion, the two parameters will be removed for
now.

> >> +static u32 wait_abl_tmout = 3;
> >> +module_param(wait_abl_tmout, uint, 0644);
> >> +MODULE_PARM_DESC(wait_abl_tmout, "wait abnormal io
> >> timeout(seconds)");
> >> +  
> Will be deleted.
> 
> >> +static bool use_sgl_force;
> >> +module_param(use_sgl_force, bool, 0644);
> >> +MODULE_PARM_DESC(use_sgl_force, "force IO use sgl format, default
> >> false");  
> >  
> Will be deleted.
>  
> > Consider leaving out all kernel module parameters. Kernel module
> > parameters are easy to introduce but can't be removed. Is it really
> > necessary that the above parameters can be configured? If so, most
> > of the above parameters probably should be per SCSI host or SCSI
> > device instead of module parameters. 
> Comments as the above.
> 
> >> +static u32 io_queue_depth = 1024;
> >> +module_param_cb(io_queue_depth, &ioq_depth_ops, &io_queue_depth,
> >> 0644); +MODULE_PARM_DESC(io_queue_depth, "set io queue depth,
> >> should >= 2");  
> > 
> > How does this differ from the SCSI sysfs attribute "can_queue"?
> >  
> Yes. it is the same as SCSI sysfs attribute "can_queue". 
> The maximum queue depth supported by hardware is 1024.  
> The parameter is to change the queue depth for different usages to
> get the best performance.
> 
>  
> >> +static unsigned char log_debug_switch;
> >> +module_param_cb(log_debug_switch, &log_debug_switch_ops,
> >> &log_debug_switch, 0644); +MODULE_PARM_DESC(log_debug_switch, "set
> >> log state, default non-zero for switch on");  
> > 
> > Can this parameter be left out by using pr_debug()?
> >  
> Ye. Will use pr_debug in the next version.
> 
>  
> >> +static unsigned char small_pool_num = 4;
> >> +module_param_cb(small_pool_num, &small_pool_num_ops,
> >> &small_pool_num, 0644); +MODULE_PARM_DESC(small_pool_num, "set prp
> >> small pool num, default 4, MAX 16");  
> > 
> > The description of the above parameter is too cryptic.
> >  
> Will add more comments:
> It was found that the spindlock of a single pool conflicts a lot with
> multiple CPUs. So multiple pools are introduced to reduce the
> conflictions. 
> 
>  
> > Thanks,
> > 
> > Bart.  




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux