RE: [PATCH 5/9] ocrdma: Driver for Emulex OneConnect RDMA adapter

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



> -----Original Message-----
> From: Hefty, Sean [mailto:sean.hefty@xxxxxxxxx]
> Sent: Thursday, March 22, 2012 6:14 AM
> To: Pandit, Parav; linux-rdma@xxxxxxxxxxxxxxx
> Subject: RE: [PATCH 5/9] ocrdma: Driver for Emulex OneConnect RDMA
> adapter
> 
> > +static int ocrdma_inet6addr_event(struct notifier_block *,
> > +				  unsigned long, void *);
> > +
> > +static struct notifier_block ocrdma_inet6addr_notifier = {
> > +	.notifier_call = ocrdma_inet6addr_event };
> > +
> > +int ocrdma_get_instance(void)
> > +{
> > +	int instance = 0;
> > +
> > +	/* Assign an unused number */
> > +	if (!idr_pre_get(&ocrdma_dev_id, GFP_KERNEL))
> > +		return -1;
> > +	if (idr_get_new(&ocrdma_dev_id, NULL, &instance))
> > +		return -1;
> > +	return instance;
> > +}
> > +
> > +void ocrdma_get_guid(struct ocrdma_dev *dev, u8 *guid) {
> > +	u8 mac_addr[6];
> > +
> > +	memcpy(&mac_addr[0], &dev->nic_info.mac_addr[0], ETH_ALEN);
> > +	guid[0] = mac_addr[0] ^ 2;
> > +	guid[1] = mac_addr[1];
> > +	guid[2] = mac_addr[2];
> > +	guid[3] = 0xff;
> > +	guid[4] = 0xfe;
> > +	guid[5] = mac_addr[3];
> > +	guid[6] = mac_addr[4];
> > +	guid[7] = mac_addr[5];
> > +}
> > +
> > +static void ocrdma_build_sgid_mac(union ib_gid *sgid, unsigned char
> > *mac_addr,
> > +				  bool is_vlan, u16 vlan_id)
> > +{
> > +	sgid->global.subnet_prefix = cpu_to_be64(0xfe80000000000000LL);
> > +	sgid->raw[8] = mac_addr[0] ^ 2;
> > +	sgid->raw[9] = mac_addr[1];
> > +	sgid->raw[10] = mac_addr[2];
> > +	if (is_vlan) {
> > +		sgid->raw[11] = vlan_id >> 8;
> > +		sgid->raw[12] = vlan_id & 0xff;
> > +	} else {
> > +		sgid->raw[11] = 0xff;
> > +		sgid->raw[12] = 0xfe;
> > +	}
> > +	sgid->raw[13] = mac_addr[3];
> > +	sgid->raw[14] = mac_addr[4];
> > +	sgid->raw[15] = mac_addr[5];
> > +}
> > +
> > +static void ocrdma_add_sgid(struct ocrdma_dev *dev, unsigned char
> *mac_addr,
> > +			    bool is_vlan, u16 vlan_id)
> > +{
> > +	int i;
> > +	bool found = false;
> > +	union ib_gid new_sgid;
> > +	int free_idx = OCRDMA_MAX_SGID;
> > +	unsigned long flags;
> > +
> > +	memset(&ocrdma_zero_sgid, 0, sizeof(union ib_gid));
> 
> ocrdma_zero_sgid should already be zeroed
> 
Yes. Removed memset().

> Actually, can't we either use in6addr_any instead?  I see that the mlx4 driver
> also has a zero gid.  So, if we don't want to overload the use of in6addr_any,
> we can define gid_zero in ib_core.

o.k. once its defined in ib_core, will remove this and provide a subsequent patch. It will be easier to handle it.

> 
> > +
> > +	ocrdma_build_sgid_mac(&new_sgid, mac_addr, is_vlan, vlan_id);
> > +
> > +	spin_lock_irqsave(&dev->sgid_lock, flags);
> > +	for (i = 0; i < OCRDMA_MAX_SGID; i++) {
> > +		if (!memcmp(&dev->sgid_tbl[i], &ocrdma_zero_sgid,
> > +			    sizeof(union ib_gid))) {
> > +			/* found free entry */
> > +			if (!found) {
> > +				free_idx = i;
> > +				found = true;
> > +				break;
> > +			}
> > +		} else if (!memcmp(&dev->sgid_tbl[i], &new_sgid,
> > +				   sizeof(union ib_gid))) {
> > +			/* entry already present, no addition is required. */
> > +			spin_unlock_irqrestore(&dev->sgid_lock, flags);
> > +			return;
> > +		}
> > +	}
> > +	/* if entry doesn't exist and if table has some space, add entry */
> > +	if (found)
> > +		memcpy(&dev->sgid_tbl[free_idx], &new_sgid,
> > +		       sizeof(union ib_gid));
> 
> can move memcpy into for loop and remove found flag
> 
Yes, removed.

> > +	spin_unlock_irqrestore(&dev->sgid_lock, flags); }

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Home]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]    [Yosemite Photos]    [Free Online Dating]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Devices]

Add to Google Powered by Linux