Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed7dc1df authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (30 commits)
  X25: remove duplicated #include
  tcp: use correct net ns in cookie_v4_check()
  rps: tcp: fix rps_sock_flow_table table updates
  ppp_generic: fix multilink fragment sizes
  syncookies: remove Kconfig text line about disabled-by-default
  ixgbe: only check pfc bits in hang logic if pfc is enabled
  net: check for refcount if pop a stacked dst_entry
  ixgbe: return IXGBE_ERR_RAR_INDEX when out of range
  act_pedit: access skb->data safely
  sfc: Store port number in net_device::dev_id
  epic100: Test __BIG_ENDIAN instead of (non-existent) CONFIG_BIG_ENDIAN
  tehuti: return -EFAULT on copy_to_user errors
  isdn/kcapi: return -EFAULT on copy_from_user errors
  e1000e: change logical negate to bitwise
  sfc: Get port number from CS_PORT_NUM, not PCI function number
  cls_u32: use skb_header_pointer() to dereference data safely
  TCP: tcp_hybla: Fix integer overflow in slow start increment
  act_nat: fix the wrong checksum when addr isn't in old_addr/mask
  net/fec: fix pm to survive to suspend/resume
  korina: count RX DMA OVR as rx_fifo_error
  ...
parents 7926e0bf ca733594
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1020,12 +1020,12 @@ static int old_capi_manufacturer(unsigned int cmd, void __user *data)
		if (cmd == AVMB1_ADDCARD) {
		   if ((retval = copy_from_user(&cdef, data,
					    sizeof(avmb1_carddef))))
			   return retval;
			   return -EFAULT;
		   cdef.cardtype = AVM_CARDTYPE_B1;
		} else {
		   if ((retval = copy_from_user(&cdef, data,
					    sizeof(avmb1_extcarddef))))
			   return retval;
			   return -EFAULT;
		}
		cparams.port = cdef.port;
		cparams.irq = cdef.irq;
@@ -1218,7 +1218,7 @@ int capi20_manufacturer(unsigned int cmd, void __user *data)
		kcapi_carddef cdef;

		if ((retval = copy_from_user(&cdef, data, sizeof(cdef))))
			return retval;
			return -EFAULT;

		cparams.port = cdef.port;
		cparams.irq = cdef.irq;
+13 −1
Original line number Diff line number Diff line
@@ -247,6 +247,7 @@ static const struct flash_spec flash_5709 = {
MODULE_DEVICE_TABLE(pci, bnx2_pci_tbl);

static void bnx2_init_napi(struct bnx2 *bp);
static void bnx2_del_napi(struct bnx2 *bp);

static inline u32 bnx2_tx_avail(struct bnx2 *bp, struct bnx2_tx_ring_info *txr)
{
@@ -6270,6 +6271,7 @@ open_err:
	bnx2_free_skbs(bp);
	bnx2_free_irq(bp);
	bnx2_free_mem(bp);
	bnx2_del_napi(bp);
	return rc;
}

@@ -6537,6 +6539,7 @@ bnx2_close(struct net_device *dev)
	bnx2_free_irq(bp);
	bnx2_free_skbs(bp);
	bnx2_free_mem(bp);
	bnx2_del_napi(bp);
	bp->link_up = 0;
	netif_carrier_off(bp->dev);
	bnx2_set_power_state(bp, PCI_D3hot);
@@ -8227,7 +8230,16 @@ bnx2_bus_string(struct bnx2 *bp, char *str)
	return str;
}

static void __devinit
static void
bnx2_del_napi(struct bnx2 *bp)
{
	int i;

	for (i = 0; i < bp->irq_nvecs; i++)
		netif_napi_del(&bp->bnx2_napi[i].napi);
}

static void
bnx2_init_napi(struct bnx2 *bp)
{
	int i;
+1 −1
Original line number Diff line number Diff line
@@ -2554,7 +2554,7 @@ static void e1000_init_manageability_pt(struct e1000_adapter *adapter)
			mdef = er32(MDEF(i));

			/* Ignore filters with anything other than IPMI ports */
			if (mdef & !(E1000_MDEF_PORT_623 | E1000_MDEF_PORT_664))
			if (mdef & ~(E1000_MDEF_PORT_623 | E1000_MDEF_PORT_664))
				continue;

			/* Enable this decision filter in MANC2H */
+7 −0
Original line number Diff line number Diff line
@@ -74,7 +74,14 @@ struct enic_msix_entry {
	void *devid;
};

#define ENIC_SET_APPLIED		(1 << 0)
#define ENIC_SET_REQUEST		(1 << 1)
#define ENIC_SET_NAME			(1 << 2)
#define ENIC_SET_INSTANCE		(1 << 3)
#define ENIC_SET_HOST			(1 << 4)

struct enic_port_profile {
	u32 set;
	u8 request;
	char name[PORT_PROFILE_MAX];
	u8 instance_uuid[PORT_UUID_MAX];
+97 −103
Original line number Diff line number Diff line
@@ -1029,8 +1029,7 @@ static int enic_dev_init_done(struct enic *enic, int *done, int *error)
	return err;
}

static int enic_set_port_profile(struct enic *enic, u8 request, u8 *mac,
	char *name, u8 *instance_uuid, u8 *host_uuid)
static int enic_set_port_profile(struct enic *enic, u8 *mac)
{
	struct vic_provinfo *vp;
	u8 oui[3] = VIC_PROVINFO_CISCO_OUI;
@@ -1040,26 +1039,35 @@ static int enic_set_port_profile(struct enic *enic, u8 request, u8 *mac,
		"%02X%02X-%02X%02X%02X%02X%0X%02X";
	int err;

	if (!name)
	err = enic_vnic_dev_deinit(enic);
	if (err)
		return err;

	switch (enic->pp.request) {

	case PORT_REQUEST_ASSOCIATE:

		if (!(enic->pp.set & ENIC_SET_NAME) || !strlen(enic->pp.name))
			return -EINVAL;

		if (!is_valid_ether_addr(mac))
			return -EADDRNOTAVAIL;

	vp = vic_provinfo_alloc(GFP_KERNEL, oui, VIC_PROVINFO_LINUX_TYPE);
		vp = vic_provinfo_alloc(GFP_KERNEL, oui,
			VIC_PROVINFO_LINUX_TYPE);
		if (!vp)
			return -ENOMEM;

		vic_provinfo_add_tlv(vp,
			VIC_LINUX_PROV_TLV_PORT_PROFILE_NAME_STR,
		strlen(name) + 1, name);
			strlen(enic->pp.name) + 1, enic->pp.name);

		vic_provinfo_add_tlv(vp,
			VIC_LINUX_PROV_TLV_CLIENT_MAC_ADDR,
			ETH_ALEN, mac);

	if (instance_uuid) {
		uuid = instance_uuid;
		if (enic->pp.set & ENIC_SET_INSTANCE) {
			uuid = enic->pp.instance_uuid;
			sprintf(uuid_str, uuid_fmt,
				uuid[0],  uuid[1],  uuid[2],  uuid[3],
				uuid[4],  uuid[5],  uuid[6],  uuid[7],
@@ -1070,8 +1078,8 @@ static int enic_set_port_profile(struct enic *enic, u8 request, u8 *mac,
				sizeof(uuid_str), uuid_str);
		}

	if (host_uuid) {
		uuid = host_uuid;
		if (enic->pp.set & ENIC_SET_HOST) {
			uuid = enic->pp.host_uuid;
			sprintf(uuid_str, uuid_fmt,
				uuid[0],  uuid[1],  uuid[2],  uuid[3],
				uuid[4],  uuid[5],  uuid[6],  uuid[7],
@@ -1082,55 +1090,61 @@ static int enic_set_port_profile(struct enic *enic, u8 request, u8 *mac,
				sizeof(uuid_str), uuid_str);
		}

	err = enic_vnic_dev_deinit(enic);
	if (err)
		goto err_out;

	memset(&enic->pp, 0, sizeof(enic->pp));

		err = enic_dev_init_prov(enic, vp);
		vic_provinfo_free(vp);
		if (err)
		goto err_out;

	enic->pp.request = request;
	memcpy(enic->pp.name, name, PORT_PROFILE_MAX);
	if (instance_uuid)
		memcpy(enic->pp.instance_uuid,
			instance_uuid, PORT_UUID_MAX);
	if (host_uuid)
		memcpy(enic->pp.host_uuid,
			host_uuid, PORT_UUID_MAX);
			return err;
		break;

err_out:
	vic_provinfo_free(vp);
	case PORT_REQUEST_DISASSOCIATE:
		break;

	return err;
	default:
		return -EINVAL;
	}

static int enic_unset_port_profile(struct enic *enic)
{
	memset(&enic->pp, 0, sizeof(enic->pp));
	return enic_vnic_dev_deinit(enic);
	enic->pp.set |= ENIC_SET_APPLIED;
	return 0;
}

static int enic_set_vf_port(struct net_device *netdev, int vf,
	struct nlattr *port[])
{
	struct enic *enic = netdev_priv(netdev);
	char *name = NULL;
	u8 *instance_uuid = NULL;
	u8 *host_uuid = NULL;
	u8 request = PORT_REQUEST_DISASSOCIATE;

	memset(&enic->pp, 0, sizeof(enic->pp));

	if (port[IFLA_PORT_REQUEST]) {
		enic->pp.set |= ENIC_SET_REQUEST;
		enic->pp.request = nla_get_u8(port[IFLA_PORT_REQUEST]);
	}

	if (port[IFLA_PORT_PROFILE]) {
		enic->pp.set |= ENIC_SET_NAME;
		memcpy(enic->pp.name, nla_data(port[IFLA_PORT_PROFILE]),
			PORT_PROFILE_MAX);
	}

	if (port[IFLA_PORT_INSTANCE_UUID]) {
		enic->pp.set |= ENIC_SET_INSTANCE;
		memcpy(enic->pp.instance_uuid,
			nla_data(port[IFLA_PORT_INSTANCE_UUID]), PORT_UUID_MAX);
	}

	if (port[IFLA_PORT_HOST_UUID]) {
		enic->pp.set |= ENIC_SET_HOST;
		memcpy(enic->pp.host_uuid,
			nla_data(port[IFLA_PORT_HOST_UUID]), PORT_UUID_MAX);
	}

	/* don't support VFs, yet */
	if (vf != PORT_SELF_VF)
		return -EOPNOTSUPP;

	if (port[IFLA_PORT_REQUEST])
		request = nla_get_u8(port[IFLA_PORT_REQUEST]);
	if (!(enic->pp.set & ENIC_SET_REQUEST))
		return -EOPNOTSUPP;

	switch (request) {
	case PORT_REQUEST_ASSOCIATE:
	if (enic->pp.request == PORT_REQUEST_ASSOCIATE) {

		/* If the interface mac addr hasn't been assigned,
		 * assign a random mac addr before setting port-
@@ -1139,30 +1153,9 @@ static int enic_set_vf_port(struct net_device *netdev, int vf,

		if (is_zero_ether_addr(netdev->dev_addr))
			random_ether_addr(netdev->dev_addr);

		if (port[IFLA_PORT_PROFILE])
			name = nla_data(port[IFLA_PORT_PROFILE]);

		if (port[IFLA_PORT_INSTANCE_UUID])
			instance_uuid =
				nla_data(port[IFLA_PORT_INSTANCE_UUID]);

		if (port[IFLA_PORT_HOST_UUID])
			host_uuid = nla_data(port[IFLA_PORT_HOST_UUID]);

		return enic_set_port_profile(enic, request,
			netdev->dev_addr, name,
			instance_uuid, host_uuid);

	case PORT_REQUEST_DISASSOCIATE:

		return enic_unset_port_profile(enic);

	default:
		break;
	}

	return -EOPNOTSUPP;
	return enic_set_port_profile(enic, netdev->dev_addr);
}

static int enic_get_vf_port(struct net_device *netdev, int vf,
@@ -1172,14 +1165,12 @@ static int enic_get_vf_port(struct net_device *netdev, int vf,
	int err, error, done;
	u16 response = PORT_PROFILE_RESPONSE_SUCCESS;

	/* don't support VFs, yet */
	if (vf != PORT_SELF_VF)
		return -EOPNOTSUPP;
	if (!(enic->pp.set & ENIC_SET_APPLIED))
		return -ENODATA;

	err = enic_dev_init_done(enic, &done, &error);

	if (err)
		return err;
		error = err;

	switch (error) {
	case ERR_SUCCESS:
@@ -1202,10 +1193,13 @@ static int enic_get_vf_port(struct net_device *netdev, int vf,

	NLA_PUT_U16(skb, IFLA_PORT_REQUEST, enic->pp.request);
	NLA_PUT_U16(skb, IFLA_PORT_RESPONSE, response);
	if (enic->pp.set & ENIC_SET_NAME)
		NLA_PUT(skb, IFLA_PORT_PROFILE, PORT_PROFILE_MAX,
			enic->pp.name);
	if (enic->pp.set & ENIC_SET_INSTANCE)
		NLA_PUT(skb, IFLA_PORT_INSTANCE_UUID, PORT_UUID_MAX,
			enic->pp.instance_uuid);
	if (enic->pp.set & ENIC_SET_HOST)
		NLA_PUT(skb, IFLA_PORT_HOST_UUID, PORT_UUID_MAX,
			enic->pp.host_uuid);

Loading