Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

scsi: mpt3sas: function pointers of request descriptor

This code refactoring introduces function pointers.

Host uses Request Descriptors of different types for posting an entry onto
a request queue. Based on controller type and capabilities, host can also
use atomic descriptors other than normal descriptors. Using function
pointer will avoid if-else statements

Signed-off-by: Suganath Prabu S <suganath-prabu.subramani@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>

authored by

Suganath Prabu S and committed by
Martin K. Petersen
078a4cc1 881a9a54

+49 -42
+21 -17
drivers/scsi/mpt3sas/mpt3sas_base.c
··· 1282 1282 ack_request->EventContext = mpi_reply->EventContext; 1283 1283 ack_request->VF_ID = 0; /* TODO */ 1284 1284 ack_request->VP_ID = 0; 1285 - mpt3sas_base_put_smid_default(ioc, smid); 1285 + ioc->put_smid_default(ioc, smid); 1286 1286 1287 1287 out: 1288 1288 ··· 3485 3485 * @handle: device handle 3486 3486 */ 3487 3487 static void 3488 - _base_put_smid_mpi_ep_scsi_io(struct MPT3SAS_ADAPTER *ioc, u16 smid, u16 handle) 3488 + _base_put_smid_mpi_ep_scsi_io(struct MPT3SAS_ADAPTER *ioc, 3489 + u16 smid, u16 handle) 3489 3490 { 3490 3491 Mpi2RequestDescriptorUnion_t descriptor; 3491 3492 u64 *request = (u64 *)&descriptor; ··· 3530 3529 } 3531 3530 3532 3531 /** 3533 - * mpt3sas_base_put_smid_fast_path - send fast path request to firmware 3532 + * _base_put_smid_fast_path - send fast path request to firmware 3534 3533 * @ioc: per adapter object 3535 3534 * @smid: system request message index 3536 3535 * @handle: device handle 3537 3536 */ 3538 - void 3539 - mpt3sas_base_put_smid_fast_path(struct MPT3SAS_ADAPTER *ioc, u16 smid, 3537 + static void 3538 + _base_put_smid_fast_path(struct MPT3SAS_ADAPTER *ioc, u16 smid, 3540 3539 u16 handle) 3541 3540 { 3542 3541 Mpi2RequestDescriptorUnion_t descriptor; ··· 3553 3552 } 3554 3553 3555 3554 /** 3556 - * mpt3sas_base_put_smid_hi_priority - send Task Management request to firmware 3555 + * _base_put_smid_hi_priority - send Task Management request to firmware 3557 3556 * @ioc: per adapter object 3558 3557 * @smid: system request message index 3559 3558 * @msix_task: msix_task will be same as msix of IO incase of task abort else 0. 3560 3559 */ 3561 - void 3562 - mpt3sas_base_put_smid_hi_priority(struct MPT3SAS_ADAPTER *ioc, u16 smid, 3560 + static void 3561 + _base_put_smid_hi_priority(struct MPT3SAS_ADAPTER *ioc, u16 smid, 3563 3562 u16 msix_task) 3564 3563 { 3565 3564 Mpi2RequestDescriptorUnion_t descriptor; ··· 3617 3616 } 3618 3617 3619 3618 /** 3620 - * mpt3sas_base_put_smid_default - Default, primarily used for config pages 3619 + * _base_put_smid_default - Default, primarily used for config pages 3621 3620 * @ioc: per adapter object 3622 3621 * @smid: system request message index 3623 3622 */ 3624 - void 3625 - mpt3sas_base_put_smid_default(struct MPT3SAS_ADAPTER *ioc, u16 smid) 3623 + static void 3624 + _base_put_smid_default(struct MPT3SAS_ADAPTER *ioc, u16 smid) 3626 3625 { 3627 3626 Mpi2RequestDescriptorUnion_t descriptor; 3628 3627 void *mpi_req_iomem; ··· 3953 3952 ioc->build_sg(ioc, &mpi_request->SGL, 0, 0, fwpkg_data_dma, 3954 3953 data_length); 3955 3954 init_completion(&ioc->base_cmds.done); 3956 - mpt3sas_base_put_smid_default(ioc, smid); 3955 + ioc->put_smid_default(ioc, smid); 3957 3956 /* Wait for 15 seconds */ 3958 3957 wait_for_completion_timeout(&ioc->base_cmds.done, 3959 3958 FW_IMG_HDR_READ_TIMEOUT*HZ); ··· 5432 5431 mpi_request->Operation == MPI2_SAS_OP_PHY_LINK_RESET) 5433 5432 ioc->ioc_link_reset_in_progress = 1; 5434 5433 init_completion(&ioc->base_cmds.done); 5435 - mpt3sas_base_put_smid_default(ioc, smid); 5434 + ioc->put_smid_default(ioc, smid); 5436 5435 wait_for_completion_timeout(&ioc->base_cmds.done, 5437 5436 msecs_to_jiffies(10000)); 5438 5437 if ((mpi_request->Operation == MPI2_SAS_OP_PHY_HARD_RESET || ··· 5511 5510 ioc->base_cmds.smid = smid; 5512 5511 memcpy(request, mpi_request, sizeof(Mpi2SepReply_t)); 5513 5512 init_completion(&ioc->base_cmds.done); 5514 - mpt3sas_base_put_smid_default(ioc, smid); 5513 + ioc->put_smid_default(ioc, smid); 5515 5514 wait_for_completion_timeout(&ioc->base_cmds.done, 5516 5515 msecs_to_jiffies(10000)); 5517 5516 if (!(ioc->base_cmds.status & MPT3_CMD_COMPLETE)) { ··· 5915 5914 mpi_request->Function = MPI2_FUNCTION_PORT_ENABLE; 5916 5915 5917 5916 init_completion(&ioc->port_enable_cmds.done); 5918 - mpt3sas_base_put_smid_default(ioc, smid); 5917 + ioc->put_smid_default(ioc, smid); 5919 5918 wait_for_completion_timeout(&ioc->port_enable_cmds.done, 300*HZ); 5920 5919 if (!(ioc->port_enable_cmds.status & MPT3_CMD_COMPLETE)) { 5921 5920 ioc_err(ioc, "%s: timeout\n", __func__); ··· 5974 5973 memset(mpi_request, 0, sizeof(Mpi2PortEnableRequest_t)); 5975 5974 mpi_request->Function = MPI2_FUNCTION_PORT_ENABLE; 5976 5975 5977 - mpt3sas_base_put_smid_default(ioc, smid); 5976 + ioc->put_smid_default(ioc, smid); 5978 5977 return 0; 5979 5978 } 5980 5979 ··· 6090 6089 mpi_request->EventMasks[i] = 6091 6090 cpu_to_le32(ioc->event_masks[i]); 6092 6091 init_completion(&ioc->base_cmds.done); 6093 - mpt3sas_base_put_smid_default(ioc, smid); 6092 + ioc->put_smid_default(ioc, smid); 6094 6093 wait_for_completion_timeout(&ioc->base_cmds.done, 30*HZ); 6095 6094 if (!(ioc->base_cmds.status & MPT3_CMD_COMPLETE)) { 6096 6095 ioc_err(ioc, "%s: timeout\n", __func__); ··· 6588 6587 break; 6589 6588 } 6590 6589 6590 + ioc->put_smid_default = &_base_put_smid_default; 6591 + ioc->put_smid_fast_path = &_base_put_smid_fast_path; 6592 + ioc->put_smid_hi_priority = &_base_put_smid_hi_priority; 6591 6593 if (ioc->is_mcpu_endpoint) 6592 6594 ioc->put_smid_scsi_io = &_base_put_smid_mpi_ep_scsi_io; 6593 6595 else
+3
drivers/scsi/mpt3sas/mpt3sas_base.h
··· 1422 1422 u8 is_gen35_ioc; 1423 1423 u8 is_aero_ioc; 1424 1424 PUT_SMID_IO_FP_HIP put_smid_scsi_io; 1425 + PUT_SMID_IO_FP_HIP put_smid_fast_path; 1426 + PUT_SMID_IO_FP_HIP put_smid_hi_priority; 1427 + PUT_SMID_DEFAULT put_smid_default; 1425 1428 1426 1429 }; 1427 1430
+1 -1
drivers/scsi/mpt3sas/mpt3sas_config.c
··· 380 380 memcpy(config_request, mpi_request, sizeof(Mpi2ConfigRequest_t)); 381 381 _config_display_some_debug(ioc, smid, "config_request", NULL); 382 382 init_completion(&ioc->config_cmds.done); 383 - mpt3sas_base_put_smid_default(ioc, smid); 383 + ioc->put_smid_default(ioc, smid); 384 384 wait_for_completion_timeout(&ioc->config_cmds.done, timeout*HZ); 385 385 if (!(ioc->config_cmds.status & MPT3_CMD_COMPLETE)) { 386 386 mpt3sas_base_check_cmd_timeout(ioc,
+10 -10
drivers/scsi/mpt3sas/mpt3sas_ctl.c
··· 822 822 if (mpi_request->Function == MPI2_FUNCTION_SCSI_IO_REQUEST) 823 823 ioc->put_smid_scsi_io(ioc, smid, device_handle); 824 824 else 825 - mpt3sas_base_put_smid_default(ioc, smid); 825 + ioc->put_smid_default(ioc, smid); 826 826 break; 827 827 } 828 828 case MPI2_FUNCTION_SCSI_TASK_MGMT: ··· 859 859 tm_request->DevHandle)); 860 860 ioc->build_sg_mpi(ioc, psge, data_out_dma, data_out_sz, 861 861 data_in_dma, data_in_sz); 862 - mpt3sas_base_put_smid_hi_priority(ioc, smid, 0); 862 + ioc->put_smid_hi_priority(ioc, smid, 0); 863 863 break; 864 864 } 865 865 case MPI2_FUNCTION_SMP_PASSTHROUGH: ··· 890 890 } 891 891 ioc->build_sg(ioc, psge, data_out_dma, data_out_sz, data_in_dma, 892 892 data_in_sz); 893 - mpt3sas_base_put_smid_default(ioc, smid); 893 + ioc->put_smid_default(ioc, smid); 894 894 break; 895 895 } 896 896 case MPI2_FUNCTION_SATA_PASSTHROUGH: ··· 905 905 } 906 906 ioc->build_sg(ioc, psge, data_out_dma, data_out_sz, data_in_dma, 907 907 data_in_sz); 908 - mpt3sas_base_put_smid_default(ioc, smid); 908 + ioc->put_smid_default(ioc, smid); 909 909 break; 910 910 } 911 911 case MPI2_FUNCTION_FW_DOWNLOAD: ··· 913 913 { 914 914 ioc->build_sg(ioc, psge, data_out_dma, data_out_sz, data_in_dma, 915 915 data_in_sz); 916 - mpt3sas_base_put_smid_default(ioc, smid); 916 + ioc->put_smid_default(ioc, smid); 917 917 break; 918 918 } 919 919 case MPI2_FUNCTION_TOOLBOX: ··· 928 928 ioc->build_sg_mpi(ioc, psge, data_out_dma, data_out_sz, 929 929 data_in_dma, data_in_sz); 930 930 } 931 - mpt3sas_base_put_smid_default(ioc, smid); 931 + ioc->put_smid_default(ioc, smid); 932 932 break; 933 933 } 934 934 case MPI2_FUNCTION_SAS_IO_UNIT_CONTROL: ··· 948 948 default: 949 949 ioc->build_sg_mpi(ioc, psge, data_out_dma, data_out_sz, 950 950 data_in_dma, data_in_sz); 951 - mpt3sas_base_put_smid_default(ioc, smid); 951 + ioc->put_smid_default(ioc, smid); 952 952 break; 953 953 } 954 954 ··· 1576 1576 cpu_to_le32(ioc->product_specific[buffer_type][i]); 1577 1577 1578 1578 init_completion(&ioc->ctl_cmds.done); 1579 - mpt3sas_base_put_smid_default(ioc, smid); 1579 + ioc->put_smid_default(ioc, smid); 1580 1580 wait_for_completion_timeout(&ioc->ctl_cmds.done, 1581 1581 MPT3_IOCTL_DEFAULT_TIMEOUT*HZ); 1582 1582 ··· 1903 1903 mpi_request->VP_ID = 0; 1904 1904 1905 1905 init_completion(&ioc->ctl_cmds.done); 1906 - mpt3sas_base_put_smid_default(ioc, smid); 1906 + ioc->put_smid_default(ioc, smid); 1907 1907 wait_for_completion_timeout(&ioc->ctl_cmds.done, 1908 1908 MPT3_IOCTL_DEFAULT_TIMEOUT*HZ); 1909 1909 ··· 2151 2151 mpi_request->VP_ID = 0; 2152 2152 2153 2153 init_completion(&ioc->ctl_cmds.done); 2154 - mpt3sas_base_put_smid_default(ioc, smid); 2154 + ioc->put_smid_default(ioc, smid); 2155 2155 wait_for_completion_timeout(&ioc->ctl_cmds.done, 2156 2156 MPT3_IOCTL_DEFAULT_TIMEOUT*HZ); 2157 2157
+10 -10
drivers/scsi/mpt3sas/mpt3sas_scsih.c
··· 2685 2685 int_to_scsilun(lun, (struct scsi_lun *)mpi_request->LUN); 2686 2686 mpt3sas_scsih_set_tm_flag(ioc, handle); 2687 2687 init_completion(&ioc->tm_cmds.done); 2688 - mpt3sas_base_put_smid_hi_priority(ioc, smid, msix_task); 2688 + ioc->put_smid_hi_priority(ioc, smid, msix_task); 2689 2689 wait_for_completion_timeout(&ioc->tm_cmds.done, timeout*HZ); 2690 2690 if (!(ioc->tm_cmds.status & MPT3_CMD_COMPLETE)) { 2691 2691 if (mpt3sas_base_check_cmd_timeout(ioc, ··· 3659 3659 mpi_request->TaskType = MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET; 3660 3660 mpi_request->MsgFlags = tr_method; 3661 3661 set_bit(handle, ioc->device_remove_in_progress); 3662 - mpt3sas_base_put_smid_hi_priority(ioc, smid, 0); 3662 + ioc->put_smid_hi_priority(ioc, smid, 0); 3663 3663 mpt3sas_trigger_master(ioc, MASTER_TRIGGER_DEVICE_REMOVAL); 3664 3664 3665 3665 out: ··· 3755 3755 mpi_request->Function = MPI2_FUNCTION_SAS_IO_UNIT_CONTROL; 3756 3756 mpi_request->Operation = MPI2_SAS_OP_REMOVE_DEVICE; 3757 3757 mpi_request->DevHandle = mpi_request_tm->DevHandle; 3758 - mpt3sas_base_put_smid_default(ioc, smid_sas_ctrl); 3758 + ioc->put_smid_default(ioc, smid_sas_ctrl); 3759 3759 3760 3760 return _scsih_check_for_pending_tm(ioc, smid); 3761 3761 } ··· 3881 3881 mpi_request->Function = MPI2_FUNCTION_SCSI_TASK_MGMT; 3882 3882 mpi_request->DevHandle = cpu_to_le16(handle); 3883 3883 mpi_request->TaskType = MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET; 3884 - mpt3sas_base_put_smid_hi_priority(ioc, smid, 0); 3884 + ioc->put_smid_hi_priority(ioc, smid, 0); 3885 3885 } 3886 3886 3887 3887 /** ··· 3970 3970 ack_request->EventContext = event_context; 3971 3971 ack_request->VF_ID = 0; /* TODO */ 3972 3972 ack_request->VP_ID = 0; 3973 - mpt3sas_base_put_smid_default(ioc, smid); 3973 + ioc->put_smid_default(ioc, smid); 3974 3974 } 3975 3975 3976 3976 /** ··· 4026 4026 mpi_request->Function = MPI2_FUNCTION_SAS_IO_UNIT_CONTROL; 4027 4027 mpi_request->Operation = MPI2_SAS_OP_REMOVE_DEVICE; 4028 4028 mpi_request->DevHandle = cpu_to_le16(handle); 4029 - mpt3sas_base_put_smid_default(ioc, smid); 4029 + ioc->put_smid_default(ioc, smid); 4030 4030 } 4031 4031 4032 4032 /** ··· 4734 4734 if (sas_target_priv_data->flags & MPT_TARGET_FASTPATH_IO) { 4735 4735 mpi_request->IoFlags = cpu_to_le16(scmd->cmd_len | 4736 4736 MPI25_SCSIIO_IOFLAGS_FAST_PATH); 4737 - mpt3sas_base_put_smid_fast_path(ioc, smid, handle); 4737 + ioc->put_smid_fast_path(ioc, smid, handle); 4738 4738 } else 4739 4739 ioc->put_smid_scsi_io(ioc, smid, 4740 4740 le16_to_cpu(mpi_request->DevHandle)); 4741 4741 } else 4742 - mpt3sas_base_put_smid_default(ioc, smid); 4742 + ioc->put_smid_default(ioc, smid); 4743 4743 return 0; 4744 4744 4745 4745 out: ··· 7601 7601 handle, phys_disk_num)); 7602 7602 7603 7603 init_completion(&ioc->scsih_cmds.done); 7604 - mpt3sas_base_put_smid_default(ioc, smid); 7604 + ioc->put_smid_default(ioc, smid); 7605 7605 wait_for_completion_timeout(&ioc->scsih_cmds.done, 10*HZ); 7606 7606 7607 7607 if (!(ioc->scsih_cmds.status & MPT3_CMD_COMPLETE)) { ··· 9633 9633 if (!ioc->hide_ir_msg) 9634 9634 ioc_info(ioc, "IR shutdown (sending)\n"); 9635 9635 init_completion(&ioc->scsih_cmds.done); 9636 - mpt3sas_base_put_smid_default(ioc, smid); 9636 + ioc->put_smid_default(ioc, smid); 9637 9637 wait_for_completion_timeout(&ioc->scsih_cmds.done, 10*HZ); 9638 9638 9639 9639 if (!(ioc->scsih_cmds.status & MPT3_CMD_COMPLETE)) {
+4 -4
drivers/scsi/mpt3sas/mpt3sas_transport.c
··· 367 367 ioc_info(ioc, "report_manufacture - send to sas_addr(0x%016llx)\n", 368 368 (u64)sas_address)); 369 369 init_completion(&ioc->transport_cmds.done); 370 - mpt3sas_base_put_smid_default(ioc, smid); 370 + ioc->put_smid_default(ioc, smid); 371 371 wait_for_completion_timeout(&ioc->transport_cmds.done, 10*HZ); 372 372 373 373 if (!(ioc->transport_cmds.status & MPT3_CMD_COMPLETE)) { ··· 1139 1139 (u64)phy->identify.sas_address, 1140 1140 phy->number)); 1141 1141 init_completion(&ioc->transport_cmds.done); 1142 - mpt3sas_base_put_smid_default(ioc, smid); 1142 + ioc->put_smid_default(ioc, smid); 1143 1143 wait_for_completion_timeout(&ioc->transport_cmds.done, 10*HZ); 1144 1144 1145 1145 if (!(ioc->transport_cmds.status & MPT3_CMD_COMPLETE)) { ··· 1434 1434 (u64)phy->identify.sas_address, 1435 1435 phy->number, phy_operation)); 1436 1436 init_completion(&ioc->transport_cmds.done); 1437 - mpt3sas_base_put_smid_default(ioc, smid); 1437 + ioc->put_smid_default(ioc, smid); 1438 1438 wait_for_completion_timeout(&ioc->transport_cmds.done, 10*HZ); 1439 1439 1440 1440 if (!(ioc->transport_cmds.status & MPT3_CMD_COMPLETE)) { ··· 1911 1911 ioc_info(ioc, "%s: sending smp request\n", __func__)); 1912 1912 1913 1913 init_completion(&ioc->transport_cmds.done); 1914 - mpt3sas_base_put_smid_default(ioc, smid); 1914 + ioc->put_smid_default(ioc, smid); 1915 1915 wait_for_completion_timeout(&ioc->transport_cmds.done, 10*HZ); 1916 1916 1917 1917 if (!(ioc->transport_cmds.status & MPT3_CMD_COMPLETE)) {