RE: [PATCH v4 14/19] IB/core: Add IB_DEVICE_OPA_MAD_SUPPORT device cap flag
InfiniBandInfiniBand InfiniBand Verbs iWARP InfiniBand iWARP Verbs (subset of IBV, with specific connection establishment requirements that don't exist with IBV) RoCE EthernetInfiniBand Verbs (but with different addressing because of the different link layer) OPA OPA InfiniBand Verbs Verbs is an interface definition to hardware that has been twisted to be a software API and extended to expose vendor-specific implementation 'features' as extensions. It is not a transport. The device capability bits seems to have evolved to mean: vendor A implemented some random 'feature' in their hardware and wants all applications to now check for this 'feature' and change their code to use it. Basically, what gets defined as a device cap is rather arbitrary. - Sean
RE: [PATCH v4 14/19] IB/core: Add IB_DEVICE_OPA_MAD_SUPPORT device cap flag
InfiniBand InfiniBand InfiniBand Verbs iWARP InfiniBand iWARP Verbs (subset of IBV, with specific connection establishment requirements that don't exist with IBV) RoCEEthernetInfiniBand Verbs (but with different addressing because of the different link layer) OPA OPA InfiniBand Verbs Verbs is an interface definition to hardware that has been twisted to be a software API and extended to expose vendor-specific implementation 'features' as extensions. It is not a transport. The device capability bits seems to have evolved to mean: vendor A implemented some random 'feature' in their hardware and wants all applications to now check for this 'feature' and change their code to use it. Basically, what gets defined as a device cap is rather arbitrary. This was the point I was trying to make and the reason the OPA MAD support was implemented as a device capability. Ira
Re: [PATCH, resend] IB/srp: Add 64-bit LUN support
On 03/04/15 14:16, Yann Droneaud wrote: Le mercredi 04 mars 2015 à 11:01 +0100, Bart Van Assche a écrit : diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c index a0e24a8..e427454 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.c +++ b/drivers/infiniband/ulp/srp/ib_srp.c @@ -3146,7 +3146,7 @@ static ssize_t srp_create_target(struct device *dev, target_host-transportt = ib_srp_transport_template; target_host-max_channel = 0; target_host-max_id = 1; -target_host-max_lun = SRP_MAX_LUN; +target_host-max_lun = -1LL; I guess you can remove SRP_MAX_LUN from drivers/infiniband/ulp/srp/ib_srp.h too. Hello Yann, That sounds like a good idea to me. I will update this patch accordingly. Bart. -- To unsubscribe from this list: send the line unsubscribe linux-rdma in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v2] IB/srp: Add 64-bit LUN support
The SCSI standard defines 64-bit values for LUNs. Large arrays employing large or hierarchical LUN numbers become more and more common. So update the SRP initiator to use 64-bit LUN numbers. See also Hannes Reinecke, commit 9cb78c16f5da (scsi: use 64-bit LUNs), June 2014. The largest LUN number that has been tested is 0xd2003fff. The following structure sizes have been verified with gdb: * sizeof(struct srp_cmd) = 48 * sizeof(struct srp_tsk_mgmt) = 48 * sizeof(struct srp_aer_req) = 36 The ibmvscsi changes have been compile tested only (on a PPC system). Signed-off-by: Bart Van Assche bart.vanass...@sandisk.com Reviewed-by: Hannes Reinecke h...@suse.de Reviewed-by: Sagi Grimberg sa...@mellanox.com Cc: Sebastian Parschauer sebastian.rie...@profitbricks.com Cc: Brian King brk...@linux.vnet.ibm.com Cc: Nathan Fontenot nf...@linux.vnet.ibm.com Cc: Tyrel Datwyler tyr...@linux.vnet.ibm.com --- Changes compared to v1: - Removed SRP_MAX_LUN definition from ib_srp.h drivers/infiniband/ulp/srp/ib_srp.c | 12 ++-- drivers/infiniband/ulp/srp/ib_srp.h | 1 - drivers/scsi/ibmvscsi/ibmvscsi.c| 6 +++--- include/scsi/srp.h | 7 --- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c index a0e24a8..e427454 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.c +++ b/drivers/infiniband/ulp/srp/ib_srp.c @@ -1842,7 +1842,7 @@ static void srp_process_aer_req(struct srp_rdma_ch *ch, s32 delta = be32_to_cpu(req-req_lim_delta); shost_printk(KERN_ERR, target-scsi_host, PFX -ignoring AER for LUN %llu\n, be64_to_cpu(req-lun)); +ignoring AER for LUN %llu\n, scsilun_to_int(req-lun)); if (srp_response_common(ch, delta, rsp, sizeof(rsp))) shost_printk(KERN_ERR, target-scsi_host, PFX @@ -2034,7 +2034,7 @@ static int srp_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scmnd) memset(cmd, 0, sizeof *cmd); cmd-opcode = SRP_CMD; - cmd-lun= cpu_to_be64((u64) scmnd-device-lun 48); + int_to_scsilun(scmnd-device-lun, cmd-lun); cmd-tag= tag; memcpy(cmd-cdb, scmnd-cmnd, scmnd-cmd_len); @@ -2414,8 +2414,8 @@ srp_change_queue_depth(struct scsi_device *sdev, int qdepth) return scsi_change_queue_depth(sdev, qdepth); } -static int srp_send_tsk_mgmt(struct srp_rdma_ch *ch, u64 req_tag, -unsigned int lun, u8 func) +static int srp_send_tsk_mgmt(struct srp_rdma_ch *ch, u64 req_tag, u64 lun, +u8 func) { struct srp_target_port *target = ch-target; struct srp_rport *rport = target-rport; @@ -2449,7 +2449,7 @@ static int srp_send_tsk_mgmt(struct srp_rdma_ch *ch, u64 req_tag, memset(tsk_mgmt, 0, sizeof *tsk_mgmt); tsk_mgmt-opcode= SRP_TSK_MGMT; - tsk_mgmt-lun = cpu_to_be64((u64) lun 48); + int_to_scsilun(lun, tsk_mgmt-lun); tsk_mgmt-tag = req_tag | SRP_TAG_TSK_MGMT; tsk_mgmt-tsk_mgmt_func = func; tsk_mgmt-task_tag = req_tag; @@ -3146,7 +3146,7 @@ static ssize_t srp_create_target(struct device *dev, target_host-transportt = ib_srp_transport_template; target_host-max_channel = 0; target_host-max_id = 1; - target_host-max_lun = SRP_MAX_LUN; + target_host-max_lun = -1LL; target_host-max_cmd_len = sizeof ((struct srp_cmd *) (void *) 0L)-cdb; target = host_to_target(target_host); diff --git a/drivers/infiniband/ulp/srp/ib_srp.h b/drivers/infiniband/ulp/srp/ib_srp.h index a611556..ce6dcf8 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.h +++ b/drivers/infiniband/ulp/srp/ib_srp.h @@ -54,7 +54,6 @@ enum { SRP_DLID_REDIRECT = 2, SRP_STALE_CONN = 3, - SRP_MAX_LUN = 512, SRP_DEF_SG_TABLESIZE= 12, SRP_DEFAULT_QUEUE_SIZE = 1 6, diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c index acea5d6..6a41c36 100644 --- a/drivers/scsi/ibmvscsi/ibmvscsi.c +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c @@ -1053,7 +1053,7 @@ static int ibmvscsi_queuecommand_lck(struct scsi_cmnd *cmnd, memset(srp_cmd, 0x00, SRP_MAX_IU_LEN); srp_cmd-opcode = SRP_CMD; memcpy(srp_cmd-cdb, cmnd-cmnd, sizeof(srp_cmd-cdb)); - srp_cmd-lun = cpu_to_be64(((u64)lun) 48); + int_to_scsilun(lun, srp_cmd-lun); if (!map_data_for_srp_cmd(cmnd, evt_struct, srp_cmd, hostdata-dev)) { if (!firmware_has_feature(FW_FEATURE_CMO)) @@ -1529,7 +1529,7 @@ static int ibmvscsi_eh_abort_handler(struct scsi_cmnd *cmd) /* Set up an abort SRP command */ memset(tsk_mgmt, 0x00, sizeof(*tsk_mgmt)); tsk_mgmt-opcode = SRP_TSK_MGMT; - tsk_mgmt-lun = cpu_to_be64(((u64) lun) 48); +
[PATCH, resend] IB/srp: Add 64-bit LUN support
The SCSI standard defines 64-bit values for LUNs. Large arrays employing large or hierarchical LUN numbers become more and more common. So update the SRP initiator to use 64-bit LUN numbers. See also Hannes Reinecke, commit 9cb78c16f5da (scsi: use 64-bit LUNs), June 2014. The largest LUN number that has been tested is 0xd2003fff. Checked the following structure sizes with gdb: * sizeof(struct srp_cmd) = 48 * sizeof(struct srp_tsk_mgmt) = 48 * sizeof(struct srp_aer_req) = 36 The ibmvscsi changes have been compile tested only on a PPC system. Signed-off-by: Bart Van Assche bart.vanass...@sandisk.com Reviewed-by: Hannes Reinecke h...@suse.de Cc: Sagi Grimberg sa...@mellanox.com Cc: Sebastian Parschauer sebastian.rie...@profitbricks.com Cc: Brian King brk...@linux.vnet.ibm.com Cc: Nathan Fontenot nf...@linux.vnet.ibm.com Cc: Tyrel Datwyler tyr...@linux.vnet.ibm.com --- drivers/infiniband/ulp/srp/ib_srp.c | 12 ++-- drivers/scsi/ibmvscsi/ibmvscsi.c| 6 +++--- include/scsi/srp.h | 7 --- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c index a0e24a8..e427454 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.c +++ b/drivers/infiniband/ulp/srp/ib_srp.c @@ -1842,7 +1842,7 @@ static void srp_process_aer_req(struct srp_rdma_ch *ch, s32 delta = be32_to_cpu(req-req_lim_delta); shost_printk(KERN_ERR, target-scsi_host, PFX -ignoring AER for LUN %llu\n, be64_to_cpu(req-lun)); +ignoring AER for LUN %llu\n, scsilun_to_int(req-lun)); if (srp_response_common(ch, delta, rsp, sizeof(rsp))) shost_printk(KERN_ERR, target-scsi_host, PFX @@ -2034,7 +2034,7 @@ static int srp_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scmnd) memset(cmd, 0, sizeof *cmd); cmd-opcode = SRP_CMD; - cmd-lun= cpu_to_be64((u64) scmnd-device-lun 48); + int_to_scsilun(scmnd-device-lun, cmd-lun); cmd-tag= tag; memcpy(cmd-cdb, scmnd-cmnd, scmnd-cmd_len); @@ -2414,8 +2414,8 @@ srp_change_queue_depth(struct scsi_device *sdev, int qdepth) return scsi_change_queue_depth(sdev, qdepth); } -static int srp_send_tsk_mgmt(struct srp_rdma_ch *ch, u64 req_tag, -unsigned int lun, u8 func) +static int srp_send_tsk_mgmt(struct srp_rdma_ch *ch, u64 req_tag, u64 lun, +u8 func) { struct srp_target_port *target = ch-target; struct srp_rport *rport = target-rport; @@ -2449,7 +2449,7 @@ static int srp_send_tsk_mgmt(struct srp_rdma_ch *ch, u64 req_tag, memset(tsk_mgmt, 0, sizeof *tsk_mgmt); tsk_mgmt-opcode= SRP_TSK_MGMT; - tsk_mgmt-lun = cpu_to_be64((u64) lun 48); + int_to_scsilun(lun, tsk_mgmt-lun); tsk_mgmt-tag = req_tag | SRP_TAG_TSK_MGMT; tsk_mgmt-tsk_mgmt_func = func; tsk_mgmt-task_tag = req_tag; @@ -3146,7 +3146,7 @@ static ssize_t srp_create_target(struct device *dev, target_host-transportt = ib_srp_transport_template; target_host-max_channel = 0; target_host-max_id = 1; - target_host-max_lun = SRP_MAX_LUN; + target_host-max_lun = -1LL; target_host-max_cmd_len = sizeof ((struct srp_cmd *) (void *) 0L)-cdb; target = host_to_target(target_host); diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c index acea5d6..6a41c36 100644 --- a/drivers/scsi/ibmvscsi/ibmvscsi.c +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c @@ -1053,7 +1053,7 @@ static int ibmvscsi_queuecommand_lck(struct scsi_cmnd *cmnd, memset(srp_cmd, 0x00, SRP_MAX_IU_LEN); srp_cmd-opcode = SRP_CMD; memcpy(srp_cmd-cdb, cmnd-cmnd, sizeof(srp_cmd-cdb)); - srp_cmd-lun = cpu_to_be64(((u64)lun) 48); + int_to_scsilun(lun, srp_cmd-lun); if (!map_data_for_srp_cmd(cmnd, evt_struct, srp_cmd, hostdata-dev)) { if (!firmware_has_feature(FW_FEATURE_CMO)) @@ -1529,7 +1529,7 @@ static int ibmvscsi_eh_abort_handler(struct scsi_cmnd *cmd) /* Set up an abort SRP command */ memset(tsk_mgmt, 0x00, sizeof(*tsk_mgmt)); tsk_mgmt-opcode = SRP_TSK_MGMT; - tsk_mgmt-lun = cpu_to_be64(((u64) lun) 48); + int_to_scsilun(lun, tsk_mgmt-lun); tsk_mgmt-tsk_mgmt_func = SRP_TSK_ABORT_TASK; tsk_mgmt-task_tag = (u64) found_evt; @@ -1652,7 +1652,7 @@ static int ibmvscsi_eh_device_reset_handler(struct scsi_cmnd *cmd) /* Set up a lun reset SRP command */ memset(tsk_mgmt, 0x00, sizeof(*tsk_mgmt)); tsk_mgmt-opcode = SRP_TSK_MGMT; - tsk_mgmt-lun = cpu_to_be64(((u64) lun) 48); + int_to_scsilun(lun, tsk_mgmt-lun); tsk_mgmt-tsk_mgmt_func = SRP_TSK_LUN_RESET;
Re: [PATCH, resend] IB/srp: Add 64-bit LUN support
On 3/4/2015 12:01 PM, Bart Van Assche wrote: The SCSI standard defines 64-bit values for LUNs. Large arrays employing large or hierarchical LUN numbers become more and more common. So update the SRP initiator to use 64-bit LUN numbers. See also Hannes Reinecke, commit 9cb78c16f5da (scsi: use 64-bit LUNs), June 2014. The largest LUN number that has been tested is 0xd2003fff. Checked the following structure sizes with gdb: * sizeof(struct srp_cmd) = 48 * sizeof(struct srp_tsk_mgmt) = 48 * sizeof(struct srp_aer_req) = 36 The ibmvscsi changes have been compile tested only on a PPC system. Signed-off-by: Bart Van Assche bart.vanass...@sandisk.com Reviewed-by: Hannes Reinecke h...@suse.de Cc: Sagi Grimberg sa...@mellanox.com Cc: Sebastian Parschauer sebastian.rie...@profitbricks.com Cc: Brian King brk...@linux.vnet.ibm.com Cc: Nathan Fontenot nf...@linux.vnet.ibm.com Cc: Tyrel Datwyler tyr...@linux.vnet.ibm.com --- drivers/infiniband/ulp/srp/ib_srp.c | 12 ++-- drivers/scsi/ibmvscsi/ibmvscsi.c| 6 +++--- include/scsi/srp.h | 7 --- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c index a0e24a8..e427454 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.c +++ b/drivers/infiniband/ulp/srp/ib_srp.c @@ -1842,7 +1842,7 @@ static void srp_process_aer_req(struct srp_rdma_ch *ch, s32 delta = be32_to_cpu(req-req_lim_delta); shost_printk(KERN_ERR, target-scsi_host, PFX -ignoring AER for LUN %llu\n, be64_to_cpu(req-lun)); +ignoring AER for LUN %llu\n, scsilun_to_int(req-lun)); if (srp_response_common(ch, delta, rsp, sizeof(rsp))) shost_printk(KERN_ERR, target-scsi_host, PFX @@ -2034,7 +2034,7 @@ static int srp_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scmnd) memset(cmd, 0, sizeof *cmd); cmd-opcode = SRP_CMD; - cmd-lun= cpu_to_be64((u64) scmnd-device-lun 48); + int_to_scsilun(scmnd-device-lun, cmd-lun); cmd-tag= tag; memcpy(cmd-cdb, scmnd-cmnd, scmnd-cmd_len); @@ -2414,8 +2414,8 @@ srp_change_queue_depth(struct scsi_device *sdev, int qdepth) return scsi_change_queue_depth(sdev, qdepth); } -static int srp_send_tsk_mgmt(struct srp_rdma_ch *ch, u64 req_tag, -unsigned int lun, u8 func) +static int srp_send_tsk_mgmt(struct srp_rdma_ch *ch, u64 req_tag, u64 lun, +u8 func) { struct srp_target_port *target = ch-target; struct srp_rport *rport = target-rport; @@ -2449,7 +2449,7 @@ static int srp_send_tsk_mgmt(struct srp_rdma_ch *ch, u64 req_tag, memset(tsk_mgmt, 0, sizeof *tsk_mgmt); tsk_mgmt-opcode = SRP_TSK_MGMT; - tsk_mgmt-lun= cpu_to_be64((u64) lun 48); + int_to_scsilun(lun, tsk_mgmt-lun); tsk_mgmt-tag= req_tag | SRP_TAG_TSK_MGMT; tsk_mgmt-tsk_mgmt_func = func; tsk_mgmt-task_tag = req_tag; @@ -3146,7 +3146,7 @@ static ssize_t srp_create_target(struct device *dev, target_host-transportt = ib_srp_transport_template; target_host-max_channel = 0; target_host-max_id = 1; - target_host-max_lun = SRP_MAX_LUN; + target_host-max_lun = -1LL; target_host-max_cmd_len = sizeof ((struct srp_cmd *) (void *) 0L)-cdb; target = host_to_target(target_host); diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c index acea5d6..6a41c36 100644 --- a/drivers/scsi/ibmvscsi/ibmvscsi.c +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c @@ -1053,7 +1053,7 @@ static int ibmvscsi_queuecommand_lck(struct scsi_cmnd *cmnd, memset(srp_cmd, 0x00, SRP_MAX_IU_LEN); srp_cmd-opcode = SRP_CMD; memcpy(srp_cmd-cdb, cmnd-cmnd, sizeof(srp_cmd-cdb)); - srp_cmd-lun = cpu_to_be64(((u64)lun) 48); + int_to_scsilun(lun, srp_cmd-lun); if (!map_data_for_srp_cmd(cmnd, evt_struct, srp_cmd, hostdata-dev)) { if (!firmware_has_feature(FW_FEATURE_CMO)) @@ -1529,7 +1529,7 @@ static int ibmvscsi_eh_abort_handler(struct scsi_cmnd *cmd) /* Set up an abort SRP command */ memset(tsk_mgmt, 0x00, sizeof(*tsk_mgmt)); tsk_mgmt-opcode = SRP_TSK_MGMT; - tsk_mgmt-lun = cpu_to_be64(((u64) lun) 48); + int_to_scsilun(lun, tsk_mgmt-lun); tsk_mgmt-tsk_mgmt_func = SRP_TSK_ABORT_TASK; tsk_mgmt-task_tag = (u64) found_evt; @@ -1652,7 +1652,7 @@ static int ibmvscsi_eh_device_reset_handler(struct scsi_cmnd *cmd) /* Set up a lun reset SRP command */ memset(tsk_mgmt, 0x00, sizeof(*tsk_mgmt)); tsk_mgmt-opcode = SRP_TSK_MGMT; - tsk_mgmt-lun = cpu_to_be64(((u64) lun) 48); + int_to_scsilun(lun, tsk_mgmt-lun);
Re: [PATCH, resend] IB/srp: Add 64-bit LUN support
Hi, Le mercredi 04 mars 2015 à 11:01 +0100, Bart Van Assche a écrit : The SCSI standard defines 64-bit values for LUNs. Large arrays employing large or hierarchical LUN numbers become more and more common. So update the SRP initiator to use 64-bit LUN numbers. See also Hannes Reinecke, commit 9cb78c16f5da (scsi: use 64-bit LUNs), June 2014. Thanks for the added description. The largest LUN number that has been tested is 0xd2003fff. Checked the following structure sizes with gdb: * sizeof(struct srp_cmd) = 48 * sizeof(struct srp_tsk_mgmt) = 48 * sizeof(struct srp_aer_req) = 36 The ibmvscsi changes have been compile tested only on a PPC system. Signed-off-by: Bart Van Assche bart.vanass...@sandisk.com Reviewed-by: Hannes Reinecke h...@suse.de Cc: Sagi Grimberg sa...@mellanox.com Cc: Sebastian Parschauer sebastian.rie...@profitbricks.com Cc: Brian King brk...@linux.vnet.ibm.com Cc: Nathan Fontenot nf...@linux.vnet.ibm.com Cc: Tyrel Datwyler tyr...@linux.vnet.ibm.com --- drivers/infiniband/ulp/srp/ib_srp.c | 12 ++-- drivers/scsi/ibmvscsi/ibmvscsi.c| 6 +++--- include/scsi/srp.h | 7 --- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c index a0e24a8..e427454 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.c +++ b/drivers/infiniband/ulp/srp/ib_srp.c @@ -3146,7 +3146,7 @@ static ssize_t srp_create_target(struct device *dev, target_host-transportt = ib_srp_transport_template; target_host-max_channel = 0; target_host-max_id = 1; - target_host-max_lun = SRP_MAX_LUN; + target_host-max_lun = -1LL; I guess you can remove SRP_MAX_LUN from drivers/infiniband/ulp/srp/ib_srp.h too. target_host-max_cmd_len = sizeof ((struct srp_cmd *) (void *) 0L)-cdb; target = host_to_target(target_host); diff --git a/include/scsi/srp.h b/include/scsi/srp.h index 1ae84db..5be834d 100644 --- a/include/scsi/srp.h +++ b/include/scsi/srp.h @@ -42,6 +42,7 @@ */ #include linux/types.h +#include scsi/scsi.h enum { SRP_LOGIN_REQ = 0x00, @@ -54,7 +54,6 @@ enum { SRP_DLID_REDIRECT = 2, SRP_STALE_CONN = 3, - SRP_MAX_LUN = 512, SRP_DEF_SG_TABLESIZE= 12, SRP_DEFAULT_QUEUE_SIZE = 1 6, Regards. -- Yann Droneaud OPTEYA -- To unsubscribe from this list: send the line unsubscribe linux-rdma in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html