cregit-Linux how code gets into the kernel

Release 4.14 drivers/message/fusion/mptsas.c

/*
 *  linux/drivers/message/fusion/mptsas.c
 *      For use with LSI PCI chip/adapter(s)
 *      running LSI Fusion MPT (Message Passing Technology) firmware.
 *
 *  Copyright (c) 1999-2008 LSI Corporation
 *  (mailto:DL-MPTFusionLinux@lsi.com)
 */
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
/*
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 of the License.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    NO WARRANTY
    THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
    CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT
    LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
    solely responsible for determining the appropriateness of using and
    distributing the Program and assumes all risks associated with its
    exercise of rights under this Agreement, including but not limited to
    the risks and costs of program errors, damage to or loss of data,
    programs or equipment, and unavailability or interruption of operations.

    DISCLAIMER OF LIABILITY
    NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND
    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
    USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
    HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/init.h>
#include <linux/errno.h>
#include <linux/jiffies.h>
#include <linux/workqueue.h>
#include <linux/delay.h>	/* for mdelay */

#include <scsi/scsi.h>
#include <scsi/scsi_cmnd.h>
#include <scsi/scsi_device.h>
#include <scsi/scsi_host.h>
#include <scsi/scsi_transport_sas.h>
#include <scsi/scsi_transport.h>
#include <scsi/scsi_dbg.h>

#include "mptbase.h"
#include "mptscsih.h"
#include "mptsas.h"



#define my_NAME		"Fusion MPT SAS Host driver"

#define my_VERSION	MPT_LINUX_VERSION_COMMON

#define MYNAM		"mptsas"

/*
 * Reserved channel for integrated raid
 */

#define MPTSAS_RAID_CHANNEL	1


#define SAS_CONFIG_PAGE_TIMEOUT		30

MODULE_AUTHOR(MODULEAUTHOR);

MODULE_DESCRIPTION(my_NAME);
MODULE_LICENSE("GPL");

MODULE_VERSION(my_VERSION);


static int mpt_pt_clear;
module_param(mpt_pt_clear, int, 0);
MODULE_PARM_DESC(mpt_pt_clear,
		" Clear persistency table: enable=1  "
		"(default=MPTSCSIH_PT_CLEAR=0)");

/* scsi-mid layer global parmeter is max_report_luns, which is 511 */

#define MPTSAS_MAX_LUN (16895)

static int max_lun = MPTSAS_MAX_LUN;
module_param(max_lun, int, 0);
MODULE_PARM_DESC(max_lun, " max lun, default=16895 ");


static int mpt_loadtime_max_sectors = 8192;
module_param(mpt_loadtime_max_sectors, int, 0);
MODULE_PARM_DESC(mpt_loadtime_max_sectors,
		" Maximum sector define for Host Bus Adaptor.Range 64 to 8192 default=8192");


static u8	mptsasDoneCtx = MPT_MAX_PROTOCOL_DRIVERS;

static u8	mptsasTaskCtx = MPT_MAX_PROTOCOL_DRIVERS;

static u8	mptsasInternalCtx = MPT_MAX_PROTOCOL_DRIVERS; 
/* Used only for internal commands */

static u8	mptsasMgmtCtx = MPT_MAX_PROTOCOL_DRIVERS;

static u8	mptsasDeviceResetCtx = MPT_MAX_PROTOCOL_DRIVERS;

static void mptsas_firmware_event_work(struct work_struct *work);
static void mptsas_send_sas_event(struct fw_event_work *fw_event);
static void mptsas_send_raid_event(struct fw_event_work *fw_event);
static void mptsas_send_ir2_event(struct fw_event_work *fw_event);
static void mptsas_parse_device_info(struct sas_identify *identify,
		struct mptsas_devinfo *device_info);
static inline void mptsas_set_rphy(MPT_ADAPTER *ioc,
		struct mptsas_phyinfo *phy_info, struct sas_rphy *rphy);
static struct mptsas_phyinfo	*mptsas_find_phyinfo_by_sas_address
		(MPT_ADAPTER *ioc, u64 sas_address);
static int mptsas_sas_device_pg0(MPT_ADAPTER *ioc,
	struct mptsas_devinfo *device_info, u32 form, u32 form_specific);
static int mptsas_sas_enclosure_pg0(MPT_ADAPTER *ioc,
	struct mptsas_enclosure *enclosure, u32 form, u32 form_specific);
static int mptsas_add_end_device(MPT_ADAPTER *ioc,
	struct mptsas_phyinfo *phy_info);
static void mptsas_del_end_device(MPT_ADAPTER *ioc,
	struct mptsas_phyinfo *phy_info);
static void mptsas_send_link_status_event(struct fw_event_work *fw_event);
static struct mptsas_portinfo	*mptsas_find_portinfo_by_sas_address
		(MPT_ADAPTER *ioc, u64 sas_address);
static void mptsas_expander_delete(MPT_ADAPTER *ioc,
		struct mptsas_portinfo *port_info, u8 force);
static void mptsas_send_expander_event(struct fw_event_work *fw_event);
static void mptsas_not_responding_devices(MPT_ADAPTER *ioc);
static void mptsas_scan_sas_topology(MPT_ADAPTER *ioc);
static void mptsas_broadcast_primative_work(struct fw_event_work *fw_event);
static void mptsas_handle_queue_full_event(struct fw_event_work *fw_event);
static void mptsas_volume_delete(MPT_ADAPTER *ioc, u8 id);
void	mptsas_schedule_target_reset(void *ioc);


static void mptsas_print_phy_data(MPT_ADAPTER *ioc, MPI_SAS_IO_UNIT0_PHY_DATA *phy_data) { dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "---- IO UNIT PAGE 0 ------------\n", ioc->name)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Handle=0x%X\n", ioc->name, le16_to_cpu(phy_data->AttachedDeviceHandle))); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Controller Handle=0x%X\n", ioc->name, le16_to_cpu(phy_data->ControllerDevHandle))); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Port=0x%X\n", ioc->name, phy_data->Port)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Port Flags=0x%X\n", ioc->name, phy_data->PortFlags)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "PHY Flags=0x%X\n", ioc->name, phy_data->PhyFlags)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Negotiated Link Rate=0x%X\n", ioc->name, phy_data->NegotiatedLinkRate)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Controller PHY Device Info=0x%X\n", ioc->name, le32_to_cpu(phy_data->ControllerPhyDeviceInfo))); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "DiscoveryStatus=0x%X\n\n", ioc->name, le32_to_cpu(phy_data->DiscoveryStatus))); }

Contributors

PersonTokensPropCommitsCommitProp
Christoph Hellwig9951.30%250.00%
Sathya Prakash M R4925.39%125.00%
Eric Moore4523.32%125.00%
Total193100.00%4100.00%


static void mptsas_print_phy_pg0(MPT_ADAPTER *ioc, SasPhyPage0_t *pg0) { __le64 sas_address; memcpy(&sas_address, &pg0->SASAddress, sizeof(__le64)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "---- SAS PHY PAGE 0 ------------\n", ioc->name)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Attached Device Handle=0x%X\n", ioc->name, le16_to_cpu(pg0->AttachedDevHandle))); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "SAS Address=0x%llX\n", ioc->name, (unsigned long long)le64_to_cpu(sas_address))); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Attached PHY Identifier=0x%X\n", ioc->name, pg0->AttachedPhyIdentifier)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Attached Device Info=0x%X\n", ioc->name, le32_to_cpu(pg0->AttachedDeviceInfo))); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Programmed Link Rate=0x%X\n", ioc->name, pg0->ProgrammedLinkRate)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Change Count=0x%X\n", ioc->name, pg0->ChangeCount)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "PHY Info=0x%X\n\n", ioc->name, le32_to_cpu(pg0->PhyInfo))); }

Contributors

PersonTokensPropCommitsCommitProp
Christoph Hellwig11257.14%250.00%
Sathya Prakash M R4422.45%125.00%
Eric Moore4020.41%125.00%
Total196100.00%4100.00%


static void mptsas_print_phy_pg1(MPT_ADAPTER *ioc, SasPhyPage1_t *pg1) { dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "---- SAS PHY PAGE 1 ------------\n", ioc->name)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Invalid Dword Count=0x%x\n", ioc->name, pg1->InvalidDwordCount)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Running Disparity Error Count=0x%x\n", ioc->name, pg1->RunningDisparityErrorCount)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Loss Dword Synch Count=0x%x\n", ioc->name, pg1->LossDwordSynchCount)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "PHY Reset Problem Count=0x%x\n\n", ioc->name, pg1->PhyResetProblemCount)); }

Contributors

PersonTokensPropCommitsCommitProp
Christoph Hellwig5148.57%133.33%
Sathya Prakash M R2927.62%133.33%
Eric Moore2523.81%133.33%
Total105100.00%3100.00%


static void mptsas_print_device_pg0(MPT_ADAPTER *ioc, SasDevicePage0_t *pg0) { __le64 sas_address; memcpy(&sas_address, &pg0->SASAddress, sizeof(__le64)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "---- SAS DEVICE PAGE 0 ---------\n", ioc->name)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Handle=0x%X\n", ioc->name, le16_to_cpu(pg0->DevHandle))); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Parent Handle=0x%X\n", ioc->name, le16_to_cpu(pg0->ParentDevHandle))); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Enclosure Handle=0x%X\n", ioc->name, le16_to_cpu(pg0->EnclosureHandle))); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Slot=0x%X\n", ioc->name, le16_to_cpu(pg0->Slot))); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "SAS Address=0x%llX\n", ioc->name, (unsigned long long)le64_to_cpu(sas_address))); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Target ID=0x%X\n", ioc->name, pg0->TargetID)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Bus=0x%X\n", ioc->name, pg0->Bus)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Parent Phy Num=0x%X\n", ioc->name, pg0->PhyNum)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Access Status=0x%X\n", ioc->name, le16_to_cpu(pg0->AccessStatus))); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Device Info=0x%X\n", ioc->name, le32_to_cpu(pg0->DeviceInfo))); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Flags=0x%X\n", ioc->name, le16_to_cpu(pg0->Flags))); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Physical Port=0x%X\n\n", ioc->name, pg0->PhysicalPort)); }

Contributors

PersonTokensPropCommitsCommitProp
Christoph Hellwig16454.13%350.00%
Eric Moore7023.10%233.33%
Sathya Prakash M R6922.77%116.67%
Total303100.00%6100.00%


static void mptsas_print_expander_pg1(MPT_ADAPTER *ioc, SasExpanderPage1_t *pg1) { dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "---- SAS EXPANDER PAGE 1 ------------\n", ioc->name)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Physical Port=0x%X\n", ioc->name, pg1->PhysicalPort)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "PHY Identifier=0x%X\n", ioc->name, pg1->PhyIdentifier)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Negotiated Link Rate=0x%X\n", ioc->name, pg1->NegotiatedLinkRate)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Programmed Link Rate=0x%X\n", ioc->name, pg1->ProgrammedLinkRate)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Hardware Link Rate=0x%X\n", ioc->name, pg1->HwLinkRate)); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Owner Device Handle=0x%X\n", ioc->name, le16_to_cpu(pg1->OwnerDevHandle))); dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Attached Device Handle=0x%X\n\n", ioc->name, le16_to_cpu(pg1->AttachedDevHandle))); }

Contributors

PersonTokensPropCommitsCommitProp
Christoph Hellwig8349.40%250.00%
Sathya Prakash M R4526.79%125.00%
Eric Moore4023.81%125.00%
Total168100.00%4100.00%

/* inhibit sas firmware event handling */
static void mptsas_fw_event_off(MPT_ADAPTER *ioc) { unsigned long flags; spin_lock_irqsave(&ioc->fw_event_lock, flags); ioc->fw_events_off = 1; ioc->sas_discovery_quiesce_io = 0; spin_unlock_irqrestore(&ioc->fw_event_lock, flags); }

Contributors

PersonTokensPropCommitsCommitProp
Kashyap Desai3473.91%133.33%
Christoph Hellwig1226.09%266.67%
Total46100.00%3100.00%

/* enable sas firmware event handling */
static void mptsas_fw_event_on(MPT_ADAPTER *ioc) { unsigned long flags; spin_lock_irqsave(&ioc->fw_event_lock, flags); ioc->fw_events_off = 0; spin_unlock_irqrestore(&ioc->fw_event_lock, flags); }

Contributors

PersonTokensPropCommitsCommitProp
Kashyap Desai3075.00%133.33%
Christoph Hellwig1025.00%266.67%
Total40100.00%3100.00%

/* queue a sas firmware event */
static void mptsas_add_fw_event(MPT_ADAPTER *ioc, struct fw_event_work *fw_event, unsigned long delay) { unsigned long flags; spin_lock_irqsave(&ioc->fw_event_lock, flags); list_add_tail(&fw_event->list, &ioc->fw_event_list); INIT_DELAYED_WORK(&fw_event->work, mptsas_firmware_event_work); devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: add (fw_event=0x%p)" "on cpuid %d\n", ioc->name, __func__, fw_event, smp_processor_id())); queue_delayed_work_on(smp_processor_id(), ioc->fw_event_q, &fw_event->work, delay); spin_unlock_irqrestore(&ioc->fw_event_lock, flags); }

Contributors

PersonTokensPropCommitsCommitProp
Kashyap Desai8782.08%266.67%
Michael Reed1917.92%133.33%
Total106100.00%3100.00%

/* requeue a sas firmware event */
static void mptsas_requeue_fw_event(MPT_ADAPTER *ioc, struct fw_event_work *fw_event, unsigned long delay) { unsigned long flags; spin_lock_irqsave(&ioc->fw_event_lock, flags); devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: reschedule task " "(fw_event=0x%p)on cpuid %d\n", ioc->name, __func__, fw_event, smp_processor_id())); fw_event->retries++; queue_delayed_work_on(smp_processor_id(), ioc->fw_event_q, &fw_event->work, msecs_to_jiffies(delay)); spin_unlock_irqrestore(&ioc->fw_event_lock, flags); }

Contributors

PersonTokensPropCommitsCommitProp
Kashyap Desai91100.00%2100.00%
Total91100.00%2100.00%

/* free memory associated to a sas firmware event */
static void mptsas_free_fw_event(MPT_ADAPTER *ioc, struct fw_event_work *fw_event) { unsigned long flags; spin_lock_irqsave(&ioc->fw_event_lock, flags); devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: kfree (fw_event=0x%p)\n", ioc->name, __func__, fw_event)); list_del(&fw_event->list); kfree(fw_event); spin_unlock_irqrestore(&ioc->fw_event_lock, flags); }

Contributors

PersonTokensPropCommitsCommitProp
Kashyap Desai5476.06%150.00%
Eric Moore1723.94%150.00%
Total71100.00%2100.00%

/* walk the firmware event queue, and either stop or wait for * outstanding events to complete */
static void mptsas_cleanup_fw_event_q(MPT_ADAPTER *ioc) { struct fw_event_work *fw_event, *next; struct mptsas_target_reset_event *target_reset_list, *n; MPT_SCSI_HOST *hd = shost_priv(ioc->sh); /* flush the target_reset_list */ if (!list_empty(&hd->target_reset_list)) { list_for_each_entry_safe(target_reset_list, n, &hd->target_reset_list, list) { dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: removing target reset for id=%d\n", ioc->name, __func__, target_reset_list->sas_event_data.TargetID)); list_del(&target_reset_list->list); kfree(target_reset_list); } } if (list_empty(&ioc->fw_event_list) || !ioc->fw_event_q || in_interrupt()) return; list_for_each_entry_safe(fw_event, next, &ioc->fw_event_list, list) { if (cancel_delayed_work(&fw_event->work)) mptsas_free_fw_event(ioc, fw_event); } }

Contributors

PersonTokensPropCommitsCommitProp
Kashyap Desai9967.35%111.11%
Eric Moore2416.33%444.44%
Christoph Hellwig138.84%222.22%
Sathya Prakash M R106.80%111.11%
Harvey Harrison10.68%111.11%
Total147100.00%9100.00%


static inline MPT_ADAPTER *phy_to_ioc(struct sas_phy *phy) { struct Scsi_Host *shost = dev_to_shost(phy->dev.parent); return ((MPT_SCSI_HOST *)shost->hostdata)->ioc; }

Contributors

PersonTokensPropCommitsCommitProp
Kashyap Desai2870.00%150.00%
Eric Moore1230.00%150.00%
Total40100.00%2100.00%


static inline MPT_ADAPTER *rphy_to_ioc(struct sas_rphy *rphy) { struct Scsi_Host *shost = dev_to_shost(rphy->dev.parent->parent); return ((MPT_SCSI_HOST *)shost->hostdata)->ioc; }

Contributors

PersonTokensPropCommitsCommitProp
Kashyap Desai2354.76%125.00%
Eric Moore1638.10%250.00%
Sathya Prakash M R37.14%125.00%
Total42100.00%4100.00%

/* * mptsas_find_portinfo_by_handle * * This function should be called with the sas_topology_mutex already held */
static struct mptsas_portinfo * mptsas_find_portinfo_by_handle(MPT_ADAPTER *ioc, u16 handle) { struct mptsas_portinfo *port_info, *rc=NULL; int i; list_for_each_entry(port_info, &ioc->sas_topology, list) for (i = 0; i < port_info->num_phys; i++) if (port_info->phy_info[i].identify.handle == handle) { rc = port_info; goto out; } out: return rc; }

Contributors

PersonTokensPropCommitsCommitProp
Kashyap Desai7087.50%266.67%
Eric Moore1012.50%133.33%
Total80100.00%3100.00%

/** * mptsas_find_portinfo_by_sas_address - * @ioc: Pointer to MPT_ADAPTER structure * @handle: * * This function should be called with the sas_topology_mutex already held * **/
static struct mptsas_portinfo * mptsas_find_portinfo_by_sas_address(MPT_ADAPTER *ioc, u64 sas_address) { struct mptsas_portinfo *port_info, *rc = NULL; int i; if (sas_address >= ioc->hba_port_sas_addr && sas_address < (ioc->hba_port_sas_addr + ioc->hba_port_num_phy)) return ioc->hba_port_info; mutex_lock(&ioc->sas_topology_mutex); list_for_each_entry(port_info, &ioc->sas_topology, list) for (i = 0; i < port_info->num_phys; i++) if (port_info->phy_info[i].identify.sas_address == sas_address) { rc = port_info; goto out; } out: mutex_unlock(&ioc->sas_topology_mutex); return rc; }

Contributors

PersonTokensPropCommitsCommitProp
Kashyap Desai10385.12%240.00%
Eric Moore129.92%240.00%
Sathya Prakash M R64.96%120.00%
Total121100.00%5100.00%

/* * Returns true if there is a scsi end device */
static inline int mptsas_is_end_device(struct mptsas_devinfo * attached) { if ((attached->sas_address) && (attached->device_info & MPI_SAS_DEVICE_INFO_END_DEVICE) && ((attached->device_info & MPI_SAS_DEVICE_INFO_SSP_TARGET) | (attached->device_info & MPI_SAS_DEVICE_INFO_STP_TARGET) | (attached->device_info & MPI_SAS_DEVICE_INFO_SATA_DEVICE))) return 1; else return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Kashyap Desai4472.13%150.00%
Eric Moore1727.87%150.00%
Total61100.00%2100.00%

/* no mutex */
static void mptsas_port_delete(MPT_ADAPTER *ioc, struct mptsas_portinfo_details * port_details) { struct mptsas_portinfo *port_info; struct mptsas_phyinfo *phy_info; u8 i; if (!port_details) return; port_info = port_details->port_info; phy_info = port_info->phy_info; dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: [%p]: num_phys=%02d " "bitmask=0x%016llX\n", ioc->name, __func__, port_details, port_details->num_phys, (unsigned long long) port_details->phy_bitmask)); for (i = 0; i < port_info->num_phys; i++, phy_info++) { if(phy_info->port_details != port_details) continue; memset(&phy_info->attached, 0, sizeof(struct mptsas_devinfo)); mptsas_set_rphy(ioc, phy_info, NULL); phy_info->port_details = NULL; } kfree(port_details); }

Contributors

PersonTokensPropCommitsCommitProp
Eric Moore8659.72%250.00%
Kashyap Desai5739.58%125.00%
Sathya Prakash M R10.69%125.00%
Total144100.00%4100.00%


static inline struct sas_rphy * mptsas_get_rphy(struct mptsas_phyinfo *phy_info) { if (phy_info->port_details) return phy_info->port_details->rphy; else return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
Kashyap Desai2270.97%150.00%
Eric Moore929.03%150.00%
Total31100.00%2100.00%


static inline void mptsas_set_rphy(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info, struct sas_rphy *rphy) { if (phy_info->port_details) { phy_info->port_details->rphy = rphy; dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT "sas_rphy_add: rphy=%p\n", ioc->name, rphy)); } if (rphy) { dsaswideprintk(ioc, dev_printk(KERN_DEBUG, &rphy->dev, MYIOC_s_FMT "add:", ioc->name)); dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT "rphy=%p release=%p\n", ioc->name, rphy, rphy->dev.release)); } }

Contributors

PersonTokensPropCommitsCommitProp
Kashyap Desai5552.38%125.00%
Eric Moore3735.24%250.00%
Sathya Prakash M R1312.38%125.00%
Total105100.00%4100.00%


static inline struct sas_port * mptsas_get_port(struct mptsas_phyinfo *phy_info) { if (phy_info->port_details) return phy_info->port_details->port; else return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
Kashyap Desai2270.97%150.00%
Eric Moore929.03%150.00%
Total31100.00%2100.00%


static inline void mptsas_set_port(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info, struct sas_port *port) { if (phy_info->port_details) phy_info->port_details->port = port; if (port) { dsaswideprintk(ioc, dev_printk(KERN_DEBUG, &port->dev, MYIOC_s_FMT "add:", ioc->name)); dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT "port=%p release=%p\n", ioc->name, port, port->dev.release)); } }

Contributors

PersonTokensPropCommitsCommitProp
Kashyap Desai5361.63%125.00%
Eric Moore2630.23%250.00%
Sathya Prakash M R78.14%125.00%
Total86100.00%4100.00%


static inline struct scsi_target * mptsas_get_starget(struct mptsas_phyinfo *phy_info) { if (phy_info->port_details) return phy_info->port_details->starget; else return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
Kashyap Desai2580.65%133.33%
Eric Moore619.35%266.67%
Total31100.00%3100.00%


static inline void mptsas_set_starget(struct mptsas_phyinfo *phy_info, struct scsi_target * starget) { if (phy_info->port_details) phy_info->port_details->starget = starget; }

Contributors

PersonTokensPropCommitsCommitProp
Kashyap Desai2890.32%150.00%
Eric Moore39.68%150.00%
Total31100.00%2100.00%

/** * mptsas_add_device_component - * @ioc: Pointer to MPT_ADAPTER structure * @channel: fw mapped id's * @id: * @sas_address: * @device_info: * **/
static void mptsas_add_device_component(MPT_ADAPTER *ioc, u8 channel, u8 id, u64 sas_address, u32 device_info, u16 slot, u64 enclosure_logical_id) { struct mptsas_device_info *sas_info, *next; struct scsi_device *sdev; struct scsi_target *starget; struct sas_rphy *rphy; /* * Delete all matching devices out of the list */ mutex_lock(&ioc->sas_device_info_mutex); list_for_each_entry_safe(sas_info, next, &ioc->sas_device_info_list, list) { if (!sas_info->is_logical_volume && (sas_info->sas_address == sas_address || (sas_info->fw.channel == channel && sas_info->fw.id == id))) { list_del(&