port_info->phy_info[i].identify.phy_id = port_info->phy_info[i].phy_id; 
mptsas_probe_expander_phys(MPT_ADAPTER *ioc, u32 *handle, int *index){	struct mptsas_portinfo *port_info, *p;	int error = -ENOMEM, i, j;	port_info = kmalloc(sizeof(*port_info), GFP_KERNEL);	if (!port_info)		goto out;	memset(port_info, 0, sizeof(*port_info));	error = mptsas_sas_expander_pg0(ioc, port_info,		(MPI_SAS_EXPAND_PGAD_FORM_GET_NEXT_HANDLE <<		 MPI_SAS_EXPAND_PGAD_FORM_SHIFT), *handle);	if (error)		goto out_free_port_info;	*handle = port_info->handle;	list_add_tail(&port_info->list, &ioc->sas_topology);	for (i = 0; i < port_info->num_phys; i++) {		struct device *parent;		mptsas_sas_expander_pg1(ioc, &port_info->phy_info[i],			(MPI_SAS_EXPAND_PGAD_FORM_HANDLE_PHY_NUM <<			 MPI_SAS_EXPAND_PGAD_FORM_SHIFT), (i << 16) + *handle);		if (port_info->phy_info[i].identify.handle) {			mptsas_sas_device_pg0(ioc,				&port_info->phy_info[i].identify,				(MPI_SAS_DEVICE_PGAD_FORM_HANDLE <<				 MPI_SAS_DEVICE_PGAD_FORM_SHIFT),				port_info->phy_info[i].identify.handle);		}		if (port_info->phy_info[i].attached.handle) {			mptsas_sas_device_pg0(ioc,				&port_info->phy_info[i].attached,				(MPI_SAS_DEVICE_PGAD_FORM_HANDLE <<				 MPI_SAS_DEVICE_PGAD_FORM_SHIFT),				port_info->phy_info[i].attached.handle);		}		/*		 * If we find a parent port handle this expander is		 * attached to another expander, else it hangs of the		 * HBA phys.		 */		parent = &ioc->sh->shost_gendev;		list_for_each_entry(p, &ioc->sas_topology, list) {			for (j = 0; j < p->num_phys; j++) {				if (port_info->phy_info[i].identify.handle ==						p->phy_info[j].attached.handle)					parent = &p->phy_info[j].rphy->dev;			}		}		mptsas_probe_one_phy(parent, &port_info->phy_info[i], *index);		(*index)++;	}	return 0; out_free_port_info:	kfree(port_info); out:	return error;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/16192896ea8e03d18d4228023500607b00df49e6/mptsas.c/buggy/drivers/message/fusion/mptsas.c