Loading drivers/net/ethernet/cortina/gemini.c +2 −13 Original line number Diff line number Diff line Loading @@ -79,8 +79,7 @@ MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)"); #define GMAC0_IRQ4_8 (GMAC0_MIB_INT_BIT | GMAC0_RX_OVERRUN_INT_BIT) #define GMAC_OFFLOAD_FEATURES (NETIF_F_SG | NETIF_F_IP_CSUM | \ NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM | \ NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6) NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM) /** * struct gmac_queue_page - page buffer per-page info Loading Loading @@ -1143,23 +1142,13 @@ static int gmac_map_tx_bufs(struct net_device *netdev, struct sk_buff *skb, struct gmac_txdesc *txd; skb_frag_t *skb_frag; dma_addr_t mapping; unsigned short mtu; void *buffer; int ret; mtu = ETH_HLEN; mtu += netdev->mtu; if (skb->protocol == htons(ETH_P_8021Q)) mtu += VLAN_HLEN; /* TODO: implement proper TSO using MTU in word3 */ word1 = skb->len; word3 = SOF_BIT; if (word1 > mtu) { word1 |= TSS_MTU_ENABLE_BIT; word3 |= mtu; } if (skb->len >= ETH_FRAME_LEN) { /* Hardware offloaded checksumming isn't working on frames * bigger than 1514 bytes. A hypothesis about this is that the Loading drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c +13 −13 Original line number Diff line number Diff line Loading @@ -130,9 +130,15 @@ static int mlxbf_gige_open(struct net_device *netdev) { struct mlxbf_gige *priv = netdev_priv(netdev); struct phy_device *phydev = netdev->phydev; u64 control; u64 int_en; int err; /* Perform general init of GigE block */ control = readq(priv->base + MLXBF_GIGE_CONTROL); control |= MLXBF_GIGE_CONTROL_PORT_EN; writeq(control, priv->base + MLXBF_GIGE_CONTROL); err = mlxbf_gige_request_irqs(priv); if (err) return err; Loading @@ -147,14 +153,14 @@ static int mlxbf_gige_open(struct net_device *netdev) */ priv->valid_polarity = 0; err = mlxbf_gige_rx_init(priv); phy_start(phydev); err = mlxbf_gige_tx_init(priv); if (err) goto free_irqs; err = mlxbf_gige_tx_init(priv); err = mlxbf_gige_rx_init(priv); if (err) goto rx_deinit; phy_start(phydev); goto tx_deinit; netif_napi_add(netdev, &priv->napi, mlxbf_gige_poll); napi_enable(&priv->napi); Loading @@ -176,8 +182,8 @@ static int mlxbf_gige_open(struct net_device *netdev) return 0; rx_deinit: mlxbf_gige_rx_deinit(priv); tx_deinit: mlxbf_gige_tx_deinit(priv); free_irqs: mlxbf_gige_free_irqs(priv); Loading Loading @@ -365,7 +371,6 @@ static int mlxbf_gige_probe(struct platform_device *pdev) void __iomem *plu_base; void __iomem *base; int addr, phy_irq; u64 control; int err; base = devm_platform_ioremap_resource(pdev, MLXBF_GIGE_RES_MAC); Loading @@ -380,11 +385,6 @@ static int mlxbf_gige_probe(struct platform_device *pdev) if (IS_ERR(plu_base)) return PTR_ERR(plu_base); /* Perform general init of GigE block */ control = readq(base + MLXBF_GIGE_CONTROL); control |= MLXBF_GIGE_CONTROL_PORT_EN; writeq(control, base + MLXBF_GIGE_CONTROL); netdev = devm_alloc_etherdev(&pdev->dev, sizeof(*priv)); if (!netdev) return -ENOMEM; Loading drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_rx.c +3 −3 Original line number Diff line number Diff line Loading @@ -142,6 +142,9 @@ int mlxbf_gige_rx_init(struct mlxbf_gige *priv) writeq(MLXBF_GIGE_RX_MAC_FILTER_COUNT_PASS_EN, priv->base + MLXBF_GIGE_RX_MAC_FILTER_COUNT_PASS); writeq(ilog2(priv->rx_q_entries), priv->base + MLXBF_GIGE_RX_WQE_SIZE_LOG2); /* Clear MLXBF_GIGE_INT_MASK 'receive pkt' bit to * indicate readiness to receive interrupts */ Loading @@ -154,9 +157,6 @@ int mlxbf_gige_rx_init(struct mlxbf_gige *priv) data |= MLXBF_GIGE_RX_DMA_EN; writeq(data, priv->base + MLXBF_GIGE_RX_DMA); writeq(ilog2(priv->rx_q_entries), priv->base + MLXBF_GIGE_RX_WQE_SIZE_LOG2); return 0; free_wqe_and_skb: Loading drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c +2 −7 Original line number Diff line number Diff line Loading @@ -553,15 +553,12 @@ static void stmmac_get_per_qstats(struct stmmac_priv *priv, u64 *data) u32 rx_cnt = priv->plat->rx_queues_to_use; unsigned int start; int q, stat; u64 *pos; char *p; pos = data; for (q = 0; q < tx_cnt; q++) { struct stmmac_txq_stats *txq_stats = &priv->xstats.txq_stats[q]; struct stmmac_txq_stats snapshot; data = pos; do { start = u64_stats_fetch_begin(&txq_stats->syncp); snapshot = *txq_stats; Loading @@ -569,17 +566,15 @@ static void stmmac_get_per_qstats(struct stmmac_priv *priv, u64 *data) p = (char *)&snapshot + offsetof(struct stmmac_txq_stats, tx_pkt_n); for (stat = 0; stat < STMMAC_TXQ_STATS; stat++) { *data++ += (*(u64 *)p); *data++ = (*(u64 *)p); p += sizeof(u64); } } pos = data; for (q = 0; q < rx_cnt; q++) { struct stmmac_rxq_stats *rxq_stats = &priv->xstats.rxq_stats[q]; struct stmmac_rxq_stats snapshot; data = pos; do { start = u64_stats_fetch_begin(&rxq_stats->syncp); snapshot = *rxq_stats; Loading @@ -587,7 +582,7 @@ static void stmmac_get_per_qstats(struct stmmac_priv *priv, u64 *data) p = (char *)&snapshot + offsetof(struct stmmac_rxq_stats, rx_pkt_n); for (stat = 0; stat < STMMAC_RXQ_STATS; stat++) { *data++ += (*(u64 *)p); *data++ = (*(u64 *)p); p += sizeof(u64); } } Loading net/ipv6/ip6_tunnel.c +13 −13 Original line number Diff line number Diff line Loading @@ -399,7 +399,7 @@ __u16 ip6_tnl_parse_tlv_enc_lim(struct sk_buff *skb, __u8 *raw) const struct ipv6hdr *ipv6h = (const struct ipv6hdr *)raw; unsigned int nhoff = raw - skb->data; unsigned int off = nhoff + sizeof(*ipv6h); u8 next, nexthdr = ipv6h->nexthdr; u8 nexthdr = ipv6h->nexthdr; while (ipv6_ext_hdr(nexthdr) && nexthdr != NEXTHDR_NONE) { struct ipv6_opt_hdr *hdr; Loading @@ -410,26 +410,26 @@ __u16 ip6_tnl_parse_tlv_enc_lim(struct sk_buff *skb, __u8 *raw) hdr = (struct ipv6_opt_hdr *)(skb->data + off); if (nexthdr == NEXTHDR_FRAGMENT) { struct frag_hdr *frag_hdr = (struct frag_hdr *) hdr; if (frag_hdr->frag_off) break; optlen = 8; } else if (nexthdr == NEXTHDR_AUTH) { optlen = ipv6_authlen(hdr); } else { optlen = ipv6_optlen(hdr); } /* cache hdr->nexthdr, since pskb_may_pull() might * invalidate hdr */ next = hdr->nexthdr; if (nexthdr == NEXTHDR_DEST) { u16 i = 2; /* Remember : hdr is no longer valid at this point. */ if (!pskb_may_pull(skb, off + optlen)) break; hdr = (struct ipv6_opt_hdr *)(skb->data + off); if (nexthdr == NEXTHDR_FRAGMENT) { struct frag_hdr *frag_hdr = (struct frag_hdr *)hdr; if (frag_hdr->frag_off) break; } if (nexthdr == NEXTHDR_DEST) { u16 i = 2; while (1) { struct ipv6_tlv_tnl_enc_lim *tel; Loading @@ -449,7 +449,7 @@ __u16 ip6_tnl_parse_tlv_enc_lim(struct sk_buff *skb, __u8 *raw) i++; } } nexthdr = next; nexthdr = hdr->nexthdr; off += optlen; } return 0; Loading Loading
drivers/net/ethernet/cortina/gemini.c +2 −13 Original line number Diff line number Diff line Loading @@ -79,8 +79,7 @@ MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)"); #define GMAC0_IRQ4_8 (GMAC0_MIB_INT_BIT | GMAC0_RX_OVERRUN_INT_BIT) #define GMAC_OFFLOAD_FEATURES (NETIF_F_SG | NETIF_F_IP_CSUM | \ NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM | \ NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6) NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM) /** * struct gmac_queue_page - page buffer per-page info Loading Loading @@ -1143,23 +1142,13 @@ static int gmac_map_tx_bufs(struct net_device *netdev, struct sk_buff *skb, struct gmac_txdesc *txd; skb_frag_t *skb_frag; dma_addr_t mapping; unsigned short mtu; void *buffer; int ret; mtu = ETH_HLEN; mtu += netdev->mtu; if (skb->protocol == htons(ETH_P_8021Q)) mtu += VLAN_HLEN; /* TODO: implement proper TSO using MTU in word3 */ word1 = skb->len; word3 = SOF_BIT; if (word1 > mtu) { word1 |= TSS_MTU_ENABLE_BIT; word3 |= mtu; } if (skb->len >= ETH_FRAME_LEN) { /* Hardware offloaded checksumming isn't working on frames * bigger than 1514 bytes. A hypothesis about this is that the Loading
drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c +13 −13 Original line number Diff line number Diff line Loading @@ -130,9 +130,15 @@ static int mlxbf_gige_open(struct net_device *netdev) { struct mlxbf_gige *priv = netdev_priv(netdev); struct phy_device *phydev = netdev->phydev; u64 control; u64 int_en; int err; /* Perform general init of GigE block */ control = readq(priv->base + MLXBF_GIGE_CONTROL); control |= MLXBF_GIGE_CONTROL_PORT_EN; writeq(control, priv->base + MLXBF_GIGE_CONTROL); err = mlxbf_gige_request_irqs(priv); if (err) return err; Loading @@ -147,14 +153,14 @@ static int mlxbf_gige_open(struct net_device *netdev) */ priv->valid_polarity = 0; err = mlxbf_gige_rx_init(priv); phy_start(phydev); err = mlxbf_gige_tx_init(priv); if (err) goto free_irqs; err = mlxbf_gige_tx_init(priv); err = mlxbf_gige_rx_init(priv); if (err) goto rx_deinit; phy_start(phydev); goto tx_deinit; netif_napi_add(netdev, &priv->napi, mlxbf_gige_poll); napi_enable(&priv->napi); Loading @@ -176,8 +182,8 @@ static int mlxbf_gige_open(struct net_device *netdev) return 0; rx_deinit: mlxbf_gige_rx_deinit(priv); tx_deinit: mlxbf_gige_tx_deinit(priv); free_irqs: mlxbf_gige_free_irqs(priv); Loading Loading @@ -365,7 +371,6 @@ static int mlxbf_gige_probe(struct platform_device *pdev) void __iomem *plu_base; void __iomem *base; int addr, phy_irq; u64 control; int err; base = devm_platform_ioremap_resource(pdev, MLXBF_GIGE_RES_MAC); Loading @@ -380,11 +385,6 @@ static int mlxbf_gige_probe(struct platform_device *pdev) if (IS_ERR(plu_base)) return PTR_ERR(plu_base); /* Perform general init of GigE block */ control = readq(base + MLXBF_GIGE_CONTROL); control |= MLXBF_GIGE_CONTROL_PORT_EN; writeq(control, base + MLXBF_GIGE_CONTROL); netdev = devm_alloc_etherdev(&pdev->dev, sizeof(*priv)); if (!netdev) return -ENOMEM; Loading
drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_rx.c +3 −3 Original line number Diff line number Diff line Loading @@ -142,6 +142,9 @@ int mlxbf_gige_rx_init(struct mlxbf_gige *priv) writeq(MLXBF_GIGE_RX_MAC_FILTER_COUNT_PASS_EN, priv->base + MLXBF_GIGE_RX_MAC_FILTER_COUNT_PASS); writeq(ilog2(priv->rx_q_entries), priv->base + MLXBF_GIGE_RX_WQE_SIZE_LOG2); /* Clear MLXBF_GIGE_INT_MASK 'receive pkt' bit to * indicate readiness to receive interrupts */ Loading @@ -154,9 +157,6 @@ int mlxbf_gige_rx_init(struct mlxbf_gige *priv) data |= MLXBF_GIGE_RX_DMA_EN; writeq(data, priv->base + MLXBF_GIGE_RX_DMA); writeq(ilog2(priv->rx_q_entries), priv->base + MLXBF_GIGE_RX_WQE_SIZE_LOG2); return 0; free_wqe_and_skb: Loading
drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c +2 −7 Original line number Diff line number Diff line Loading @@ -553,15 +553,12 @@ static void stmmac_get_per_qstats(struct stmmac_priv *priv, u64 *data) u32 rx_cnt = priv->plat->rx_queues_to_use; unsigned int start; int q, stat; u64 *pos; char *p; pos = data; for (q = 0; q < tx_cnt; q++) { struct stmmac_txq_stats *txq_stats = &priv->xstats.txq_stats[q]; struct stmmac_txq_stats snapshot; data = pos; do { start = u64_stats_fetch_begin(&txq_stats->syncp); snapshot = *txq_stats; Loading @@ -569,17 +566,15 @@ static void stmmac_get_per_qstats(struct stmmac_priv *priv, u64 *data) p = (char *)&snapshot + offsetof(struct stmmac_txq_stats, tx_pkt_n); for (stat = 0; stat < STMMAC_TXQ_STATS; stat++) { *data++ += (*(u64 *)p); *data++ = (*(u64 *)p); p += sizeof(u64); } } pos = data; for (q = 0; q < rx_cnt; q++) { struct stmmac_rxq_stats *rxq_stats = &priv->xstats.rxq_stats[q]; struct stmmac_rxq_stats snapshot; data = pos; do { start = u64_stats_fetch_begin(&rxq_stats->syncp); snapshot = *rxq_stats; Loading @@ -587,7 +582,7 @@ static void stmmac_get_per_qstats(struct stmmac_priv *priv, u64 *data) p = (char *)&snapshot + offsetof(struct stmmac_rxq_stats, rx_pkt_n); for (stat = 0; stat < STMMAC_RXQ_STATS; stat++) { *data++ += (*(u64 *)p); *data++ = (*(u64 *)p); p += sizeof(u64); } } Loading
net/ipv6/ip6_tunnel.c +13 −13 Original line number Diff line number Diff line Loading @@ -399,7 +399,7 @@ __u16 ip6_tnl_parse_tlv_enc_lim(struct sk_buff *skb, __u8 *raw) const struct ipv6hdr *ipv6h = (const struct ipv6hdr *)raw; unsigned int nhoff = raw - skb->data; unsigned int off = nhoff + sizeof(*ipv6h); u8 next, nexthdr = ipv6h->nexthdr; u8 nexthdr = ipv6h->nexthdr; while (ipv6_ext_hdr(nexthdr) && nexthdr != NEXTHDR_NONE) { struct ipv6_opt_hdr *hdr; Loading @@ -410,26 +410,26 @@ __u16 ip6_tnl_parse_tlv_enc_lim(struct sk_buff *skb, __u8 *raw) hdr = (struct ipv6_opt_hdr *)(skb->data + off); if (nexthdr == NEXTHDR_FRAGMENT) { struct frag_hdr *frag_hdr = (struct frag_hdr *) hdr; if (frag_hdr->frag_off) break; optlen = 8; } else if (nexthdr == NEXTHDR_AUTH) { optlen = ipv6_authlen(hdr); } else { optlen = ipv6_optlen(hdr); } /* cache hdr->nexthdr, since pskb_may_pull() might * invalidate hdr */ next = hdr->nexthdr; if (nexthdr == NEXTHDR_DEST) { u16 i = 2; /* Remember : hdr is no longer valid at this point. */ if (!pskb_may_pull(skb, off + optlen)) break; hdr = (struct ipv6_opt_hdr *)(skb->data + off); if (nexthdr == NEXTHDR_FRAGMENT) { struct frag_hdr *frag_hdr = (struct frag_hdr *)hdr; if (frag_hdr->frag_off) break; } if (nexthdr == NEXTHDR_DEST) { u16 i = 2; while (1) { struct ipv6_tlv_tnl_enc_lim *tel; Loading @@ -449,7 +449,7 @@ __u16 ip6_tnl_parse_tlv_enc_lim(struct sk_buff *skb, __u8 *raw) i++; } } nexthdr = next; nexthdr = hdr->nexthdr; off += optlen; } return 0; Loading