Re: [RFC 3/6] qedi: Add QLogic FastLinQ offload iSCSI driver framework.
On 19/10/16 3:32 PM, "Johannes Thumshirn"wrote: >On Wed, Oct 19, 2016 at 01:01:10AM -0400, manish.rangan...@cavium.com >wrote: >> From: Manish Rangankar >> >> The QLogic FastLinQ Driver for iSCSI (qedi) is the iSCSI specific module >> for 41000 Series Converged Network Adapters by QLogic. >> >> This patch consists of following changes: >> - MAINTAINERS Makefile and Kconfig changes for qedi, >> - PCI driver registration, >> - iSCSI host level initialization, >> - Debugfs and log level infrastructure. >> >> Signed-off-by: Nilesh Javali >> Signed-off-by: Adheer Chandravanshi >> Signed-off-by: Chad Dupuis >> Signed-off-by: Saurav Kashyap >> Signed-off-by: Arun Easi >> Signed-off-by: Manish Rangankar >> --- > >[...] > >> +/* MSI-X fastpath handler code */ >> +static irqreturn_t qedi_msix_handler(int irq, void *dev_id) >> +{ >> +struct qedi_fastpath *fp = dev_id; >> +struct qedi_ctx *qedi = fp->qedi; >> +bool wake_io_thread = true; >> + >> +qed_sb_ack(fp->sb_info, IGU_INT_DISABLE, 0); >> + >> +process_again: >> +wake_io_thread = qedi_process_completions(fp); >> +if (wake_io_thread) { >> +QEDI_INFO(>dbg_ctx, QEDI_LOG_DISC, >> + "process already running\n"); >> +} >> + >> +if (qedi_fp_has_work(fp) == 0) >> +qed_sb_update_sb_idx(fp->sb_info); >> + >> +/* Check for more work */ >> +rmb(); >> + >> +if (qedi_fp_has_work(fp) == 0) >> +qed_sb_ack(fp->sb_info, IGU_INT_ENABLE, 1); >> +else >> +goto process_again; >> + >> +return IRQ_HANDLED; >> +} > >You might want to consider workqueues here. If there is no serious objection with current per-cpu threads implementation then we will like to do workqueue changes just after first submission. This is because, for this change we have go through complete validation cycle on our part. Thanks, Manish R. -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [RFC 3/6] qedi: Add QLogic FastLinQ offload iSCSI driver framework.
Thanks Hannes for the review, please see my comments below, On 19/10/16 1:15 PM, "Hannes Reinecke"wrote: >On 10/19/2016 07:01 AM, manish.rangan...@cavium.com wrote: >> From: Manish Rangankar >> >> The QLogic FastLinQ Driver for iSCSI (qedi) is the iSCSI specific module >> for 41000 Series Converged Network Adapters by QLogic. >> >> This patch consists of following changes: >> - MAINTAINERS Makefile and Kconfig changes for qedi, >> - PCI driver registration, >> - iSCSI host level initialization, >> - Debugfs and log level infrastructure. >> >> Signed-off-by: Nilesh Javali >> Signed-off-by: Adheer Chandravanshi >> Signed-off-by: Chad Dupuis >> Signed-off-by: Saurav Kashyap >> Signed-off-by: Arun Easi >> Signed-off-by: Manish Rangankar >> --- >> MAINTAINERS |6 + >> drivers/net/ethernet/qlogic/Kconfig | 12 - >> drivers/scsi/Kconfig|1 + >> drivers/scsi/Makefile |1 + >> drivers/scsi/qedi/Kconfig | 10 + >> drivers/scsi/qedi/Makefile |5 + >> drivers/scsi/qedi/qedi.h| 286 +++ >> drivers/scsi/qedi/qedi_dbg.c| 143 >> drivers/scsi/qedi/qedi_dbg.h| 144 >> drivers/scsi/qedi/qedi_debugfs.c| 244 ++ >> drivers/scsi/qedi/qedi_hsi.h| 52 ++ >> drivers/scsi/qedi/qedi_main.c | 1550 >>+++ >> drivers/scsi/qedi/qedi_sysfs.c | 52 ++ >> drivers/scsi/qedi/qedi_version.h| 14 + >> 14 files changed, 2508 insertions(+), 12 deletions(-) >> create mode 100644 drivers/scsi/qedi/Kconfig >> create mode 100644 drivers/scsi/qedi/Makefile >> create mode 100644 drivers/scsi/qedi/qedi.h >> create mode 100644 drivers/scsi/qedi/qedi_dbg.c >> create mode 100644 drivers/scsi/qedi/qedi_dbg.h >> create mode 100644 drivers/scsi/qedi/qedi_debugfs.c >> create mode 100644 drivers/scsi/qedi/qedi_hsi.h >> create mode 100644 drivers/scsi/qedi/qedi_main.c >> create mode 100644 drivers/scsi/qedi/qedi_sysfs.c >> create mode 100644 drivers/scsi/qedi/qedi_version.h >> >> diff --git a/MAINTAINERS b/MAINTAINERS >> index 5e925a2..906d05f 100644 >> --- a/MAINTAINERS >> +++ b/MAINTAINERS >> @@ -9909,6 +9909,12 @@ F:drivers/net/ethernet/qlogic/qed/ >> F: include/linux/qed/ >> F: drivers/net/ethernet/qlogic/qede/ >> >> +QLOGIC QL41xxx ISCSI DRIVER >> +M: qlogic-storage-upstr...@cavium.com >> +L: linux-scsi@vger.kernel.org >> +S: Supported >> +F: drivers/scsi/qedi/ >> + >> QNX4 FILESYSTEM >> M: Anders Larsen >> W: http://www.alarsen.net/linux/qnx4fs/ >> diff --git a/drivers/net/ethernet/qlogic/Kconfig >>b/drivers/net/ethernet/qlogic/Kconfig >> index bad4fae..28b4366 100644 >> --- a/drivers/net/ethernet/qlogic/Kconfig >> +++ b/drivers/net/ethernet/qlogic/Kconfig >> @@ -121,16 +121,4 @@ config INFINIBAND_QEDR >> config QED_ISCSI >> bool >> >> -config QEDI >> -tristate "QLogic QED 25/40/100Gb iSCSI driver" >> -depends on QED >> -select QED_LL2 >> -select QED_ISCSI >> -default n >> ----help--- >> - This provides a temporary node that allows the compilation >> - and logical testing of the hardware offload iSCSI support >> - for QLogic QED. This would be replaced by the 'real' option >> - once the QEDI driver is added [+relocated]. >> - >> endif # NET_VENDOR_QLOGIC >Huh? You just introduce this one in patch 1/6. >Please fold them together so that this can be omitted. Yes, we will remove this in the next revision. -- snipped -- >> @@ -0,0 +1,52 @@ >> +/* >> + * QLogic iSCSI Offload Driver >> + * Copyright (c) 2016 Cavium Inc. >> + * >> + * This software is available under the terms of the GNU General >>Public License >> + * (GPL) Version 2, available from the file COPYING in the main >>directory of >> + * this source tree. >> + */ >> +#ifndef __QEDI_HSI__ >> +#define __QEDI_HSI__ >> +// >> +/* Add include to common target */ >> +// >> +#include >> + >Please use kernel-doc style for comments Will do. --snipped-- >> +static void qedi_int_fp(struct qedi_ctx *qedi) >> +{ >> +struct qedi_fastpath *fp; >> +int id; >> + >> +memset((void *)qedi->fp_array, 0, MIN_NUM_CPUS_MSIX(qedi) * >> + sizeof(*qedi->fp_array)); >> +memset((void *)qedi->sb_array, 0, MIN_NUM_CPUS_MSIX(qedi) * >> + sizeof(*qedi->sb_array)); >> + >> +for (id = 0; id < MIN_NUM_CPUS_MSIX(qedi); id++) { >> +fp = >fp_array[id]; >> +fp->sb_info = >sb_array[id]; >> +fp->sb_id = id; >> +fp->qedi = qedi; >> +snprintf(fp->name, sizeof(fp->name), "%s-fp-%d", >> + "qedi", id); >> + >> +/*
Re: [RFC 3/6] qedi: Add QLogic FastLinQ offload iSCSI driver framework.
Thanks Johannes for the review, please see comments below, On 19/10/16 3:32 PM, "Johannes Thumshirn"wrote: >On Wed, Oct 19, 2016 at 01:01:10AM -0400, manish.rangan...@cavium.com >wrote: >> From: Manish Rangankar >> >> The QLogic FastLinQ Driver for iSCSI (qedi) is the iSCSI specific module >> for 41000 Series Converged Network Adapters by QLogic. >> >> This patch consists of following changes: >> - MAINTAINERS Makefile and Kconfig changes for qedi, >> - PCI driver registration, >> - iSCSI host level initialization, >> - Debugfs and log level infrastructure. >> >> Signed-off-by: Nilesh Javali >> Signed-off-by: Adheer Chandravanshi >> Signed-off-by: Chad Dupuis >> Signed-off-by: Saurav Kashyap >> Signed-off-by: Arun Easi >> Signed-off-by: Manish Rangankar >> --- > >[...] > >> +static inline void *qedi_get_task_mem(struct qed_iscsi_tid *info, u32 >>tid) >> +{ >> +return (void *)(info->blocks[tid / info->num_tids_per_block] + >> +(tid % info->num_tids_per_block) * info->size); >> +} > >Unnecessary cast here. Noted > > >[...] > >> +void >> +qedi_dbg_err(struct qedi_dbg_ctx *qedi, const char *func, u32 line, >> + const char *fmt, ...) >> +{ >> +va_list va; >> +struct va_format vaf; >> +char nfunc[32]; >> + >> +memset(nfunc, 0, sizeof(nfunc)); >> +memcpy(nfunc, func, sizeof(nfunc) - 1); >> + >> +va_start(va, fmt); >> + >> +vaf.fmt = fmt; >> +vaf.va = >> + >> +if (likely(qedi) && likely(qedi->pdev)) >> +pr_crit("[%s]:[%s:%d]:%d: %pV", dev_name(>pdev->dev), >> +nfunc, line, qedi->host_no, ); >> +else >> +pr_crit("[:00:00.0]:[%s:%d]: %pV", nfunc, line, ); > >pr_crit, seriously? We will change it to pr_err. > >[...] > >> +static void qedi_int_fp(struct qedi_ctx *qedi) >> +{ >> +struct qedi_fastpath *fp; >> +int id; >> + >> +memset((void *)qedi->fp_array, 0, MIN_NUM_CPUS_MSIX(qedi) * >> + sizeof(*qedi->fp_array)); >> +memset((void *)qedi->sb_array, 0, MIN_NUM_CPUS_MSIX(qedi) * >> + sizeof(*qedi->sb_array)); > >I don't think the cast is necessary here. Noted > >[...] > >> +static int qedi_setup_cid_que(struct qedi_ctx *qedi) >> +{ >> +int i; >> + >> +qedi->cid_que.cid_que_base = kmalloc((qedi->max_active_conns * >> + sizeof(u32)), GFP_KERNEL); >> +if (!qedi->cid_que.cid_que_base) >> +return -ENOMEM; >> + >> +qedi->cid_que.conn_cid_tbl = kmalloc((qedi->max_active_conns * >> + sizeof(struct qedi_conn *)), >> + GFP_KERNEL); > >Please use kmalloc_array() here. Will do. > >[...] > >> +/* MSI-X fastpath handler code */ >> +static irqreturn_t qedi_msix_handler(int irq, void *dev_id) >> +{ >> +struct qedi_fastpath *fp = dev_id; >> +struct qedi_ctx *qedi = fp->qedi; >> +bool wake_io_thread = true; >> + >> +qed_sb_ack(fp->sb_info, IGU_INT_DISABLE, 0); >> + >> +process_again: >> +wake_io_thread = qedi_process_completions(fp); >> +if (wake_io_thread) { >> +QEDI_INFO(>dbg_ctx, QEDI_LOG_DISC, >> + "process already running\n"); >> +} >> + >> +if (qedi_fp_has_work(fp) == 0) >> +qed_sb_update_sb_idx(fp->sb_info); >> + >> +/* Check for more work */ >> +rmb(); >> + >> +if (qedi_fp_has_work(fp) == 0) >> +qed_sb_ack(fp->sb_info, IGU_INT_ENABLE, 1); >> +else >> +goto process_again; >> + >> +return IRQ_HANDLED; >> +} > >You might want to consider workqueues here. We will revisit this code. > >[...] > >> +static int qedi_alloc_itt(struct qedi_ctx *qedi) >> +{ >> +qedi->itt_map = kzalloc((sizeof(struct qedi_itt_map) * >> +MAX_ISCSI_TASK_ENTRIES), GFP_KERNEL); > >that screams for kcalloc() > >> +if (!qedi->itt_map) { >> +QEDI_ERR(>dbg_ctx, >> + "Unable to allocate itt map array memory\n"); >> +return -ENOMEM; >> +} >> +return 0; >> +} >> + >> +static void qedi_free_itt(struct qedi_ctx *qedi) >> +{ >> +kfree(qedi->itt_map); >> +} >> + >> +static struct qed_ll2_cb_ops qedi_ll2_cb_ops = { >> +.rx_cb = qedi_ll2_rx, >> +.tx_cb = NULL, >> +}; >> + >> +static int qedi_percpu_io_thread(void *arg) >> +{ >> +struct qedi_percpu_s *p = arg; >> +struct qedi_work *work, *tmp; >> +unsigned long flags; >> +LIST_HEAD(work_list); >> + >> +set_user_nice(current, -20); >> + >> +while (!kthread_should_stop()) { >> +spin_lock_irqsave(>p_work_lock, flags); >> +while (!list_empty(>work_list)) { >> +list_splice_init(>work_list, _list); >> +
Re: [RFC 3/6] qedi: Add QLogic FastLinQ offload iSCSI driver framework.
On Wed, Oct 19, 2016 at 01:01:10AM -0400, manish.rangan...@cavium.com wrote: > From: Manish Rangankar> > The QLogic FastLinQ Driver for iSCSI (qedi) is the iSCSI specific module > for 41000 Series Converged Network Adapters by QLogic. > > This patch consists of following changes: > - MAINTAINERS Makefile and Kconfig changes for qedi, > - PCI driver registration, > - iSCSI host level initialization, > - Debugfs and log level infrastructure. > > Signed-off-by: Nilesh Javali > Signed-off-by: Adheer Chandravanshi > Signed-off-by: Chad Dupuis > Signed-off-by: Saurav Kashyap > Signed-off-by: Arun Easi > Signed-off-by: Manish Rangankar > --- [...] > +static inline void *qedi_get_task_mem(struct qed_iscsi_tid *info, u32 tid) > +{ > + return (void *)(info->blocks[tid / info->num_tids_per_block] + > + (tid % info->num_tids_per_block) * info->size); > +} Unnecessary cast here. [...] > +void > +qedi_dbg_err(struct qedi_dbg_ctx *qedi, const char *func, u32 line, > + const char *fmt, ...) > +{ > + va_list va; > + struct va_format vaf; > + char nfunc[32]; > + > + memset(nfunc, 0, sizeof(nfunc)); > + memcpy(nfunc, func, sizeof(nfunc) - 1); > + > + va_start(va, fmt); > + > + vaf.fmt = fmt; > + vaf.va = > + > + if (likely(qedi) && likely(qedi->pdev)) > + pr_crit("[%s]:[%s:%d]:%d: %pV", dev_name(>pdev->dev), > + nfunc, line, qedi->host_no, ); > + else > + pr_crit("[:00:00.0]:[%s:%d]: %pV", nfunc, line, ); pr_crit, seriously? [...] > +static void qedi_int_fp(struct qedi_ctx *qedi) > +{ > + struct qedi_fastpath *fp; > + int id; > + > + memset((void *)qedi->fp_array, 0, MIN_NUM_CPUS_MSIX(qedi) * > +sizeof(*qedi->fp_array)); > + memset((void *)qedi->sb_array, 0, MIN_NUM_CPUS_MSIX(qedi) * > +sizeof(*qedi->sb_array)); I don't think the cast is necessary here. [...] > +static int qedi_setup_cid_que(struct qedi_ctx *qedi) > +{ > + int i; > + > + qedi->cid_que.cid_que_base = kmalloc((qedi->max_active_conns * > + sizeof(u32)), GFP_KERNEL); > + if (!qedi->cid_que.cid_que_base) > + return -ENOMEM; > + > + qedi->cid_que.conn_cid_tbl = kmalloc((qedi->max_active_conns * > + sizeof(struct qedi_conn *)), > + GFP_KERNEL); Please use kmalloc_array() here. [...] > +/* MSI-X fastpath handler code */ > +static irqreturn_t qedi_msix_handler(int irq, void *dev_id) > +{ > + struct qedi_fastpath *fp = dev_id; > + struct qedi_ctx *qedi = fp->qedi; > + bool wake_io_thread = true; > + > + qed_sb_ack(fp->sb_info, IGU_INT_DISABLE, 0); > + > +process_again: > + wake_io_thread = qedi_process_completions(fp); > + if (wake_io_thread) { > + QEDI_INFO(>dbg_ctx, QEDI_LOG_DISC, > + "process already running\n"); > + } > + > + if (qedi_fp_has_work(fp) == 0) > + qed_sb_update_sb_idx(fp->sb_info); > + > + /* Check for more work */ > + rmb(); > + > + if (qedi_fp_has_work(fp) == 0) > + qed_sb_ack(fp->sb_info, IGU_INT_ENABLE, 1); > + else > + goto process_again; > + > + return IRQ_HANDLED; > +} You might want to consider workqueues here. [...] > +static int qedi_alloc_itt(struct qedi_ctx *qedi) > +{ > + qedi->itt_map = kzalloc((sizeof(struct qedi_itt_map) * > + MAX_ISCSI_TASK_ENTRIES), GFP_KERNEL); that screams for kcalloc() > + if (!qedi->itt_map) { > + QEDI_ERR(>dbg_ctx, > + "Unable to allocate itt map array memory\n"); > + return -ENOMEM; > + } > + return 0; > +} > + > +static void qedi_free_itt(struct qedi_ctx *qedi) > +{ > + kfree(qedi->itt_map); > +} > + > +static struct qed_ll2_cb_ops qedi_ll2_cb_ops = { > + .rx_cb = qedi_ll2_rx, > + .tx_cb = NULL, > +}; > + > +static int qedi_percpu_io_thread(void *arg) > +{ > + struct qedi_percpu_s *p = arg; > + struct qedi_work *work, *tmp; > + unsigned long flags; > + LIST_HEAD(work_list); > + > + set_user_nice(current, -20); > + > + while (!kthread_should_stop()) { > + spin_lock_irqsave(>p_work_lock, flags); > + while (!list_empty(>work_list)) { > + list_splice_init(>work_list, _list); > + spin_unlock_irqrestore(>p_work_lock, flags); > + > + list_for_each_entry_safe(work, tmp, _list, list) { > + list_del_init(>list); > + qedi_fp_process_cqes(work->qedi, >cqe, > +
Re: [RFC 3/6] qedi: Add QLogic FastLinQ offload iSCSI driver framework.
On 10/19/2016 07:01 AM, manish.rangan...@cavium.com wrote: > From: Manish Rangankar> > The QLogic FastLinQ Driver for iSCSI (qedi) is the iSCSI specific module > for 41000 Series Converged Network Adapters by QLogic. > > This patch consists of following changes: > - MAINTAINERS Makefile and Kconfig changes for qedi, > - PCI driver registration, > - iSCSI host level initialization, > - Debugfs and log level infrastructure. > > Signed-off-by: Nilesh Javali > Signed-off-by: Adheer Chandravanshi > Signed-off-by: Chad Dupuis > Signed-off-by: Saurav Kashyap > Signed-off-by: Arun Easi > Signed-off-by: Manish Rangankar > --- > MAINTAINERS |6 + > drivers/net/ethernet/qlogic/Kconfig | 12 - > drivers/scsi/Kconfig|1 + > drivers/scsi/Makefile |1 + > drivers/scsi/qedi/Kconfig | 10 + > drivers/scsi/qedi/Makefile |5 + > drivers/scsi/qedi/qedi.h| 286 +++ > drivers/scsi/qedi/qedi_dbg.c| 143 > drivers/scsi/qedi/qedi_dbg.h| 144 > drivers/scsi/qedi/qedi_debugfs.c| 244 ++ > drivers/scsi/qedi/qedi_hsi.h| 52 ++ > drivers/scsi/qedi/qedi_main.c | 1550 > +++ > drivers/scsi/qedi/qedi_sysfs.c | 52 ++ > drivers/scsi/qedi/qedi_version.h| 14 + > 14 files changed, 2508 insertions(+), 12 deletions(-) > create mode 100644 drivers/scsi/qedi/Kconfig > create mode 100644 drivers/scsi/qedi/Makefile > create mode 100644 drivers/scsi/qedi/qedi.h > create mode 100644 drivers/scsi/qedi/qedi_dbg.c > create mode 100644 drivers/scsi/qedi/qedi_dbg.h > create mode 100644 drivers/scsi/qedi/qedi_debugfs.c > create mode 100644 drivers/scsi/qedi/qedi_hsi.h > create mode 100644 drivers/scsi/qedi/qedi_main.c > create mode 100644 drivers/scsi/qedi/qedi_sysfs.c > create mode 100644 drivers/scsi/qedi/qedi_version.h > > diff --git a/MAINTAINERS b/MAINTAINERS > index 5e925a2..906d05f 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -9909,6 +9909,12 @@ F: drivers/net/ethernet/qlogic/qed/ > F: include/linux/qed/ > F: drivers/net/ethernet/qlogic/qede/ > > +QLOGIC QL41xxx ISCSI DRIVER > +M: qlogic-storage-upstr...@cavium.com > +L: linux-scsi@vger.kernel.org > +S: Supported > +F: drivers/scsi/qedi/ > + > QNX4 FILESYSTEM > M: Anders Larsen > W: http://www.alarsen.net/linux/qnx4fs/ > diff --git a/drivers/net/ethernet/qlogic/Kconfig > b/drivers/net/ethernet/qlogic/Kconfig > index bad4fae..28b4366 100644 > --- a/drivers/net/ethernet/qlogic/Kconfig > +++ b/drivers/net/ethernet/qlogic/Kconfig > @@ -121,16 +121,4 @@ config INFINIBAND_QEDR > config QED_ISCSI > bool > > -config QEDI > - tristate "QLogic QED 25/40/100Gb iSCSI driver" > - depends on QED > - select QED_LL2 > - select QED_ISCSI > - default n > - ---help--- > - This provides a temporary node that allows the compilation > - and logical testing of the hardware offload iSCSI support > - for QLogic QED. This would be replaced by the 'real' option > - once the QEDI driver is added [+relocated]. > - > endif # NET_VENDOR_QLOGIC Huh? You just introduce this one in patch 1/6. Please fold them together so that this can be omitted. > diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig > index 3e2bdb9..5cf03db 100644 > --- a/drivers/scsi/Kconfig > +++ b/drivers/scsi/Kconfig > @@ -1254,6 +1254,7 @@ config SCSI_QLOGICPTI > > source "drivers/scsi/qla2xxx/Kconfig" > source "drivers/scsi/qla4xxx/Kconfig" > +source "drivers/scsi/qedi/Kconfig" > > config SCSI_LPFC > tristate "Emulex LightPulse Fibre Channel Support" > diff --git a/drivers/scsi/Makefile b/drivers/scsi/Makefile > index 38d938d..da9e312 100644 > --- a/drivers/scsi/Makefile > +++ b/drivers/scsi/Makefile > @@ -132,6 +132,7 @@ obj-$(CONFIG_PS3_ROM) += ps3rom.o > obj-$(CONFIG_SCSI_CXGB3_ISCSI) += libiscsi.o libiscsi_tcp.o cxgbi/ > obj-$(CONFIG_SCSI_CXGB4_ISCSI) += libiscsi.o libiscsi_tcp.o cxgbi/ > obj-$(CONFIG_SCSI_BNX2_ISCSI)+= libiscsi.o bnx2i/ > +obj-$(CONFIG_QEDI) += libiscsi.o qedi/ > obj-$(CONFIG_BE2ISCSI) += libiscsi.o be2iscsi/ > obj-$(CONFIG_SCSI_ESAS2R)+= esas2r/ > obj-$(CONFIG_SCSI_PMCRAID) += pmcraid.o > diff --git a/drivers/scsi/qedi/Kconfig b/drivers/scsi/qedi/Kconfig > new file mode 100644 > index 000..23ca8a2 > --- /dev/null > +++ b/drivers/scsi/qedi/Kconfig > @@ -0,0 +1,10 @@ > +config QEDI > + tristate "QLogic QEDI 25/40/100Gb iSCSI Initiator Driver Support" > + depends on PCI && SCSI > + depends on QED > + select SCSI_ISCSI_ATTRS > + select QED_LL2 > + select QED_ISCSI > + ---help--- > + This
[RFC 3/6] qedi: Add QLogic FastLinQ offload iSCSI driver framework.
From: Manish RangankarThe QLogic FastLinQ Driver for iSCSI (qedi) is the iSCSI specific module for 41000 Series Converged Network Adapters by QLogic. This patch consists of following changes: - MAINTAINERS Makefile and Kconfig changes for qedi, - PCI driver registration, - iSCSI host level initialization, - Debugfs and log level infrastructure. Signed-off-by: Nilesh Javali Signed-off-by: Adheer Chandravanshi Signed-off-by: Chad Dupuis Signed-off-by: Saurav Kashyap Signed-off-by: Arun Easi Signed-off-by: Manish Rangankar --- MAINTAINERS |6 + drivers/net/ethernet/qlogic/Kconfig | 12 - drivers/scsi/Kconfig|1 + drivers/scsi/Makefile |1 + drivers/scsi/qedi/Kconfig | 10 + drivers/scsi/qedi/Makefile |5 + drivers/scsi/qedi/qedi.h| 286 +++ drivers/scsi/qedi/qedi_dbg.c| 143 drivers/scsi/qedi/qedi_dbg.h| 144 drivers/scsi/qedi/qedi_debugfs.c| 244 ++ drivers/scsi/qedi/qedi_hsi.h| 52 ++ drivers/scsi/qedi/qedi_main.c | 1550 +++ drivers/scsi/qedi/qedi_sysfs.c | 52 ++ drivers/scsi/qedi/qedi_version.h| 14 + 14 files changed, 2508 insertions(+), 12 deletions(-) create mode 100644 drivers/scsi/qedi/Kconfig create mode 100644 drivers/scsi/qedi/Makefile create mode 100644 drivers/scsi/qedi/qedi.h create mode 100644 drivers/scsi/qedi/qedi_dbg.c create mode 100644 drivers/scsi/qedi/qedi_dbg.h create mode 100644 drivers/scsi/qedi/qedi_debugfs.c create mode 100644 drivers/scsi/qedi/qedi_hsi.h create mode 100644 drivers/scsi/qedi/qedi_main.c create mode 100644 drivers/scsi/qedi/qedi_sysfs.c create mode 100644 drivers/scsi/qedi/qedi_version.h diff --git a/MAINTAINERS b/MAINTAINERS index 5e925a2..906d05f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -9909,6 +9909,12 @@ F: drivers/net/ethernet/qlogic/qed/ F: include/linux/qed/ F: drivers/net/ethernet/qlogic/qede/ +QLOGIC QL41xxx ISCSI DRIVER +M: qlogic-storage-upstr...@cavium.com +L: linux-scsi@vger.kernel.org +S: Supported +F: drivers/scsi/qedi/ + QNX4 FILESYSTEM M: Anders Larsen W: http://www.alarsen.net/linux/qnx4fs/ diff --git a/drivers/net/ethernet/qlogic/Kconfig b/drivers/net/ethernet/qlogic/Kconfig index bad4fae..28b4366 100644 --- a/drivers/net/ethernet/qlogic/Kconfig +++ b/drivers/net/ethernet/qlogic/Kconfig @@ -121,16 +121,4 @@ config INFINIBAND_QEDR config QED_ISCSI bool -config QEDI - tristate "QLogic QED 25/40/100Gb iSCSI driver" - depends on QED - select QED_LL2 - select QED_ISCSI - default n - ---help--- - This provides a temporary node that allows the compilation - and logical testing of the hardware offload iSCSI support - for QLogic QED. This would be replaced by the 'real' option - once the QEDI driver is added [+relocated]. - endif # NET_VENDOR_QLOGIC diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig index 3e2bdb9..5cf03db 100644 --- a/drivers/scsi/Kconfig +++ b/drivers/scsi/Kconfig @@ -1254,6 +1254,7 @@ config SCSI_QLOGICPTI source "drivers/scsi/qla2xxx/Kconfig" source "drivers/scsi/qla4xxx/Kconfig" +source "drivers/scsi/qedi/Kconfig" config SCSI_LPFC tristate "Emulex LightPulse Fibre Channel Support" diff --git a/drivers/scsi/Makefile b/drivers/scsi/Makefile index 38d938d..da9e312 100644 --- a/drivers/scsi/Makefile +++ b/drivers/scsi/Makefile @@ -132,6 +132,7 @@ obj-$(CONFIG_PS3_ROM) += ps3rom.o obj-$(CONFIG_SCSI_CXGB3_ISCSI) += libiscsi.o libiscsi_tcp.o cxgbi/ obj-$(CONFIG_SCSI_CXGB4_ISCSI) += libiscsi.o libiscsi_tcp.o cxgbi/ obj-$(CONFIG_SCSI_BNX2_ISCSI) += libiscsi.o bnx2i/ +obj-$(CONFIG_QEDI) += libiscsi.o qedi/ obj-$(CONFIG_BE2ISCSI) += libiscsi.o be2iscsi/ obj-$(CONFIG_SCSI_ESAS2R) += esas2r/ obj-$(CONFIG_SCSI_PMCRAID) += pmcraid.o diff --git a/drivers/scsi/qedi/Kconfig b/drivers/scsi/qedi/Kconfig new file mode 100644 index 000..23ca8a2 --- /dev/null +++ b/drivers/scsi/qedi/Kconfig @@ -0,0 +1,10 @@ +config QEDI + tristate "QLogic QEDI 25/40/100Gb iSCSI Initiator Driver Support" + depends on PCI && SCSI + depends on QED + select SCSI_ISCSI_ATTRS + select QED_LL2 + select QED_ISCSI + ---help--- + This driver supports iSCSI offload for the QLogic FastLinQ + 41000 Series Converged Network Adapters. diff --git a/drivers/scsi/qedi/Makefile b/drivers/scsi/qedi/Makefile new file mode 100644 index 000..2b3e16b --- /dev/null +++ b/drivers/scsi/qedi/Makefile @@ -0,0 +1,5 @@ +obj-$(CONFIG_QEDI) := qedi.o +qedi-y := qedi_main.o qedi_iscsi.o qedi_fw.o qedi_sysfs.o \