mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1446 commits) macvlan: fix panic if lowerdev in a bond tg3: Add braces around 5906 workaround. tg3: Fix NETIF_F_LOOPBACK error macvlan: remove one synchronize_rcu() call networking: NET_CLS_ROUTE4 depends on INET irda: Fix error propagation in ircomm_lmp_connect_response() irda: Kill set but unused variable 'bytes' in irlan_check_command_param() irda: Kill set but unused variable 'clen' in ircomm_connect_indication() rxrpc: Fix set but unused variable 'usage' in rxrpc_get_transport() be2net: Kill set but unused variable 'req' in lancer_fw_download() irda: Kill set but unused vars 'saddr' and 'daddr' in irlan_provider_connect_indication() atl1c: atl1c_resume() is only used when CONFIG_PM_SLEEP is defined. rxrpc: Fix set but unused variable 'usage' in rxrpc_get_peer(). rxrpc: Kill set but unused variable 'local' in rxrpc_UDP_error_handler() rxrpc: Kill set but unused variable 'sp' in rxrpc_process_connection() rxrpc: Kill set but unused variable 'sp' in rxrpc_rotate_tx_window() pkt_sched: Kill set but unused variable 'protocol' in tc_classify() isdn: capi: Use pr_debug() instead of ifdefs. tg3: Update version to 3.119 tg3: Apply rx_discards fix to 5719/5720 ... Fix up trivial conflicts in arch/x86/Kconfig and net/mac80211/agg-tx.c as per Davem.
This commit is contained in:
commit
06f4e926d2
1198 changed files with 126873 additions and 79635 deletions
|
|
@ -185,15 +185,20 @@ static int addr4_resolve(struct sockaddr_in *src_in,
|
|||
__be32 dst_ip = dst_in->sin_addr.s_addr;
|
||||
struct rtable *rt;
|
||||
struct neighbour *neigh;
|
||||
struct flowi4 fl4;
|
||||
int ret;
|
||||
|
||||
rt = ip_route_output(&init_net, dst_ip, src_ip, 0, addr->bound_dev_if);
|
||||
memset(&fl4, 0, sizeof(fl4));
|
||||
fl4.daddr = dst_ip;
|
||||
fl4.saddr = src_ip;
|
||||
fl4.flowi4_oif = addr->bound_dev_if;
|
||||
rt = ip_route_output_key(&init_net, &fl4);
|
||||
if (IS_ERR(rt)) {
|
||||
ret = PTR_ERR(rt);
|
||||
goto out;
|
||||
}
|
||||
src_in->sin_family = AF_INET;
|
||||
src_in->sin_addr.s_addr = rt->rt_src;
|
||||
src_in->sin_addr.s_addr = fl4.saddr;
|
||||
|
||||
if (rt->dst.dev->flags & IFF_LOOPBACK) {
|
||||
ret = rdma_translate_ip((struct sockaddr *) dst_in, addr);
|
||||
|
|
|
|||
|
|
@ -338,8 +338,9 @@ static struct rtable *find_route(struct t3cdev *dev, __be32 local_ip,
|
|||
__be16 peer_port, u8 tos)
|
||||
{
|
||||
struct rtable *rt;
|
||||
struct flowi4 fl4;
|
||||
|
||||
rt = ip_route_output_ports(&init_net, NULL, peer_ip, local_ip,
|
||||
rt = ip_route_output_ports(&init_net, &fl4, NULL, peer_ip, local_ip,
|
||||
peer_port, local_port, IPPROTO_TCP,
|
||||
tos, 0);
|
||||
if (IS_ERR(rt))
|
||||
|
|
|
|||
|
|
@ -315,8 +315,9 @@ static struct rtable *find_route(struct c4iw_dev *dev, __be32 local_ip,
|
|||
__be16 peer_port, u8 tos)
|
||||
{
|
||||
struct rtable *rt;
|
||||
struct flowi4 fl4;
|
||||
|
||||
rt = ip_route_output_ports(&init_net, NULL, peer_ip, local_ip,
|
||||
rt = ip_route_output_ports(&init_net, &fl4, NULL, peer_ip, local_ip,
|
||||
peer_port, local_port, IPPROTO_TCP,
|
||||
tos, 0);
|
||||
if (IS_ERR(rt))
|
||||
|
|
|
|||
|
|
@ -2885,9 +2885,8 @@ void nes_nic_ce_handler(struct nes_device *nesdev, struct nes_hw_nic_cq *cq)
|
|||
if ((cqe_errv &
|
||||
(NES_NIC_ERRV_BITS_IPV4_CSUM_ERR | NES_NIC_ERRV_BITS_TCPUDP_CSUM_ERR |
|
||||
NES_NIC_ERRV_BITS_IPH_ERR | NES_NIC_ERRV_BITS_WQE_OVERRUN)) == 0) {
|
||||
if (nesvnic->rx_checksum_disabled == 0) {
|
||||
if (nesvnic->netdev->features & NETIF_F_RXCSUM)
|
||||
rx_skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
}
|
||||
} else
|
||||
nes_debug(NES_DBG_CQ, "%s: unsuccessfully checksummed TCP or UDP packet."
|
||||
" errv = 0x%X, pkt_type = 0x%X.\n",
|
||||
|
|
@ -2897,7 +2896,7 @@ void nes_nic_ce_handler(struct nes_device *nesdev, struct nes_hw_nic_cq *cq)
|
|||
if ((cqe_errv &
|
||||
(NES_NIC_ERRV_BITS_IPV4_CSUM_ERR | NES_NIC_ERRV_BITS_IPH_ERR |
|
||||
NES_NIC_ERRV_BITS_WQE_OVERRUN)) == 0) {
|
||||
if (nesvnic->rx_checksum_disabled == 0) {
|
||||
if (nesvnic->netdev->features & NETIF_F_RXCSUM) {
|
||||
rx_skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
/* nes_debug(NES_DBG_CQ, "%s: Reporting successfully checksummed IPv4 packet.\n",
|
||||
nesvnic->netdev->name); */
|
||||
|
|
|
|||
|
|
@ -1245,7 +1245,6 @@ struct nes_vnic {
|
|||
u8 next_qp_nic_index;
|
||||
u8 of_device_registered;
|
||||
u8 rdma_enabled;
|
||||
u8 rx_checksum_disabled;
|
||||
u32 lro_max_aggr;
|
||||
struct net_lro_mgr lro_mgr;
|
||||
struct net_lro_desc lro_desc[NES_MAX_LRO_DESCRIPTORS];
|
||||
|
|
|
|||
|
|
@ -1093,34 +1093,6 @@ static const char nes_ethtool_stringset[][ETH_GSTRING_LEN] = {
|
|||
};
|
||||
#define NES_ETHTOOL_STAT_COUNT ARRAY_SIZE(nes_ethtool_stringset)
|
||||
|
||||
/**
|
||||
* nes_netdev_get_rx_csum
|
||||
*/
|
||||
static u32 nes_netdev_get_rx_csum (struct net_device *netdev)
|
||||
{
|
||||
struct nes_vnic *nesvnic = netdev_priv(netdev);
|
||||
|
||||
if (nesvnic->rx_checksum_disabled)
|
||||
return 0;
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* nes_netdev_set_rc_csum
|
||||
*/
|
||||
static int nes_netdev_set_rx_csum(struct net_device *netdev, u32 enable)
|
||||
{
|
||||
struct nes_vnic *nesvnic = netdev_priv(netdev);
|
||||
|
||||
if (enable)
|
||||
nesvnic->rx_checksum_disabled = 0;
|
||||
else
|
||||
nesvnic->rx_checksum_disabled = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* nes_netdev_get_sset_count
|
||||
|
|
@ -1521,7 +1493,7 @@ static int nes_netdev_get_settings(struct net_device *netdev, struct ethtool_cmd
|
|||
et_cmd->maxrxpkt = 511;
|
||||
|
||||
if (nesadapter->OneG_Mode) {
|
||||
et_cmd->speed = SPEED_1000;
|
||||
ethtool_cmd_speed_set(et_cmd, SPEED_1000);
|
||||
if (phy_type == NES_PHY_TYPE_PUMA_1G) {
|
||||
et_cmd->supported = SUPPORTED_1000baseT_Full;
|
||||
et_cmd->advertising = ADVERTISED_1000baseT_Full;
|
||||
|
|
@ -1560,7 +1532,7 @@ static int nes_netdev_get_settings(struct net_device *netdev, struct ethtool_cmd
|
|||
et_cmd->advertising = ADVERTISED_10000baseT_Full;
|
||||
et_cmd->phy_address = mac_index;
|
||||
}
|
||||
et_cmd->speed = SPEED_10000;
|
||||
ethtool_cmd_speed_set(et_cmd, SPEED_10000);
|
||||
et_cmd->autoneg = AUTONEG_DISABLE;
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1598,19 +1570,10 @@ static int nes_netdev_set_settings(struct net_device *netdev, struct ethtool_cmd
|
|||
}
|
||||
|
||||
|
||||
static int nes_netdev_set_flags(struct net_device *netdev, u32 flags)
|
||||
{
|
||||
return ethtool_op_set_flags(netdev, flags, ETH_FLAG_LRO);
|
||||
}
|
||||
|
||||
|
||||
static const struct ethtool_ops nes_ethtool_ops = {
|
||||
.get_link = ethtool_op_get_link,
|
||||
.get_settings = nes_netdev_get_settings,
|
||||
.set_settings = nes_netdev_set_settings,
|
||||
.get_tx_csum = ethtool_op_get_tx_csum,
|
||||
.get_rx_csum = nes_netdev_get_rx_csum,
|
||||
.get_sg = ethtool_op_get_sg,
|
||||
.get_strings = nes_netdev_get_strings,
|
||||
.get_sset_count = nes_netdev_get_sset_count,
|
||||
.get_ethtool_stats = nes_netdev_get_ethtool_stats,
|
||||
|
|
@ -1619,13 +1582,6 @@ static const struct ethtool_ops nes_ethtool_ops = {
|
|||
.set_coalesce = nes_netdev_set_coalesce,
|
||||
.get_pauseparam = nes_netdev_get_pauseparam,
|
||||
.set_pauseparam = nes_netdev_set_pauseparam,
|
||||
.set_tx_csum = ethtool_op_set_tx_csum,
|
||||
.set_rx_csum = nes_netdev_set_rx_csum,
|
||||
.set_sg = ethtool_op_set_sg,
|
||||
.get_tso = ethtool_op_get_tso,
|
||||
.set_tso = ethtool_op_set_tso,
|
||||
.get_flags = ethtool_op_get_flags,
|
||||
.set_flags = nes_netdev_set_flags,
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -1727,12 +1683,11 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
|
|||
netdev->dev_addr[5] = (u8)u64temp;
|
||||
memcpy(netdev->perm_addr, netdev->dev_addr, 6);
|
||||
|
||||
if ((nesvnic->logical_port < 2) || (nesdev->nesadapter->hw_rev != NE020_REV)) {
|
||||
netdev->features |= NETIF_F_TSO | NETIF_F_SG | NETIF_F_IP_CSUM;
|
||||
netdev->features |= NETIF_F_GSO | NETIF_F_TSO | NETIF_F_SG | NETIF_F_IP_CSUM;
|
||||
} else {
|
||||
netdev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
|
||||
}
|
||||
netdev->hw_features = NETIF_F_RXCSUM | NETIF_F_SG | NETIF_F_IP_CSUM;
|
||||
if ((nesvnic->logical_port < 2) || (nesdev->nesadapter->hw_rev != NE020_REV))
|
||||
netdev->hw_features |= NETIF_F_TSO;
|
||||
netdev->features |= netdev->hw_features;
|
||||
netdev->hw_features |= NETIF_F_LRO;
|
||||
|
||||
nes_debug(NES_DBG_INIT, "nesvnic = %p, reported features = 0x%lX, QPid = %d,"
|
||||
" nic_index = %d, logical_port = %d, mac_index = %d.\n",
|
||||
|
|
|
|||
|
|
@ -91,7 +91,6 @@ enum {
|
|||
IPOIB_STOP_REAPER = 7,
|
||||
IPOIB_FLAG_ADMIN_CM = 9,
|
||||
IPOIB_FLAG_UMCAST = 10,
|
||||
IPOIB_FLAG_CSUM = 11,
|
||||
|
||||
IPOIB_MAX_BACKOFF_SECONDS = 16,
|
||||
|
||||
|
|
|
|||
|
|
@ -1463,8 +1463,7 @@ static ssize_t set_mode(struct device *d, struct device_attribute *attr,
|
|||
set_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags);
|
||||
ipoib_warn(priv, "enabling connected mode "
|
||||
"will cause multicast packet drops\n");
|
||||
|
||||
dev->features &= ~(NETIF_F_IP_CSUM | NETIF_F_SG | NETIF_F_TSO);
|
||||
netdev_update_features(dev);
|
||||
rtnl_unlock();
|
||||
priv->tx_wr.send_flags &= ~IB_SEND_IP_CSUM;
|
||||
|
||||
|
|
@ -1474,13 +1473,7 @@ static ssize_t set_mode(struct device *d, struct device_attribute *attr,
|
|||
|
||||
if (!strcmp(buf, "datagram\n")) {
|
||||
clear_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags);
|
||||
|
||||
if (test_bit(IPOIB_FLAG_CSUM, &priv->flags)) {
|
||||
dev->features |= NETIF_F_IP_CSUM | NETIF_F_SG;
|
||||
priv->dev->features |= NETIF_F_GRO;
|
||||
if (priv->hca_caps & IB_DEVICE_UD_TSO)
|
||||
dev->features |= NETIF_F_TSO;
|
||||
}
|
||||
netdev_update_features(dev);
|
||||
dev_set_mtu(dev, min(priv->mcast_mtu, dev->mtu));
|
||||
rtnl_unlock();
|
||||
ipoib_flush_paths(dev);
|
||||
|
|
|
|||
|
|
@ -42,32 +42,6 @@ static void ipoib_get_drvinfo(struct net_device *netdev,
|
|||
strncpy(drvinfo->driver, "ipoib", sizeof(drvinfo->driver) - 1);
|
||||
}
|
||||
|
||||
static u32 ipoib_get_rx_csum(struct net_device *dev)
|
||||
{
|
||||
struct ipoib_dev_priv *priv = netdev_priv(dev);
|
||||
return test_bit(IPOIB_FLAG_CSUM, &priv->flags) &&
|
||||
!test_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags);
|
||||
}
|
||||
|
||||
static int ipoib_set_tso(struct net_device *dev, u32 data)
|
||||
{
|
||||
struct ipoib_dev_priv *priv = netdev_priv(dev);
|
||||
|
||||
if (data) {
|
||||
if (!test_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags) &&
|
||||
(dev->features & NETIF_F_SG) &&
|
||||
(priv->hca_caps & IB_DEVICE_UD_TSO)) {
|
||||
dev->features |= NETIF_F_TSO;
|
||||
} else {
|
||||
ipoib_warn(priv, "can't set TSO on\n");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
} else
|
||||
dev->features &= ~NETIF_F_TSO;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ipoib_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal)
|
||||
{
|
||||
|
|
@ -108,8 +82,6 @@ static int ipoib_set_coalesce(struct net_device *dev,
|
|||
|
||||
static const struct ethtool_ops ipoib_ethtool_ops = {
|
||||
.get_drvinfo = ipoib_get_drvinfo,
|
||||
.get_rx_csum = ipoib_get_rx_csum,
|
||||
.set_tso = ipoib_set_tso,
|
||||
.get_coalesce = ipoib_get_coalesce,
|
||||
.set_coalesce = ipoib_set_coalesce,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -292,7 +292,7 @@ static void ipoib_ib_handle_rx_wc(struct net_device *dev, struct ib_wc *wc)
|
|||
dev->stats.rx_bytes += skb->len;
|
||||
|
||||
skb->dev = dev;
|
||||
if (test_bit(IPOIB_FLAG_CSUM, &priv->flags) && likely(wc->csum_ok))
|
||||
if ((dev->features & NETIF_F_RXCSUM) && likely(wc->csum_ok))
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
|
||||
napi_gro_receive(&priv->napi, skb);
|
||||
|
|
|
|||
|
|
@ -171,6 +171,16 @@ static int ipoib_stop(struct net_device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static u32 ipoib_fix_features(struct net_device *dev, u32 features)
|
||||
{
|
||||
struct ipoib_dev_priv *priv = netdev_priv(dev);
|
||||
|
||||
if (test_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags))
|
||||
features &= ~(NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO);
|
||||
|
||||
return features;
|
||||
}
|
||||
|
||||
static int ipoib_change_mtu(struct net_device *dev, int new_mtu)
|
||||
{
|
||||
struct ipoib_dev_priv *priv = netdev_priv(dev);
|
||||
|
|
@ -970,6 +980,7 @@ static const struct net_device_ops ipoib_netdev_ops = {
|
|||
.ndo_open = ipoib_open,
|
||||
.ndo_stop = ipoib_stop,
|
||||
.ndo_change_mtu = ipoib_change_mtu,
|
||||
.ndo_fix_features = ipoib_fix_features,
|
||||
.ndo_start_xmit = ipoib_start_xmit,
|
||||
.ndo_tx_timeout = ipoib_timeout,
|
||||
.ndo_set_multicast_list = ipoib_set_mcast_list,
|
||||
|
|
@ -1154,19 +1165,18 @@ int ipoib_set_dev_features(struct ipoib_dev_priv *priv, struct ib_device *hca)
|
|||
kfree(device_attr);
|
||||
|
||||
if (priv->hca_caps & IB_DEVICE_UD_IP_CSUM) {
|
||||
set_bit(IPOIB_FLAG_CSUM, &priv->flags);
|
||||
priv->dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
|
||||
priv->dev->hw_features = NETIF_F_SG |
|
||||
NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
|
||||
|
||||
if (priv->hca_caps & IB_DEVICE_UD_TSO)
|
||||
priv->dev->hw_features |= NETIF_F_TSO;
|
||||
|
||||
priv->dev->features |= priv->dev->hw_features;
|
||||
}
|
||||
|
||||
priv->dev->features |= NETIF_F_GRO;
|
||||
|
||||
if (priv->dev->features & NETIF_F_SG && priv->hca_caps & IB_DEVICE_UD_TSO)
|
||||
priv->dev->features |= NETIF_F_TSO;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static struct net_device *ipoib_add_port(const char *format,
|
||||
struct ib_device *hca, u8 port)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue