Last active
September 18, 2020 02:01
-
-
Save randomvariable/aac349cf3da5f49d14d1f0f559144f91 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -Naur linux-4.19.138/drivers/net/vmxnet3/vmxnet3_drv.c ../SOURCES/linux-5.8/drivers/net/vmxnet3/vmxnet3_drv.c | |
--- linux-4.19.138/drivers/net/vmxnet3/vmxnet3_drv.c 2020-09-18 02:49:39.826513351 +0100 | |
+++ ../SOURCES/linux-5.8/drivers/net/vmxnet3/vmxnet3_drv.c 2020-09-18 02:58:22.467376972 +0100 | |
@@ -535,8 +535,8 @@ | |
} | |
sz = tq->tx_ring.size * sizeof(tq->buf_info[0]); | |
- tq->buf_info = dma_zalloc_coherent(&adapter->pdev->dev, sz, | |
- &tq->buf_info_pa, GFP_KERNEL); | |
+ tq->buf_info = dma_alloc_coherent(&adapter->pdev->dev, sz, | |
+ &tq->buf_info_pa, GFP_KERNEL); | |
if (!tq->buf_info) | |
goto err; | |
@@ -657,13 +657,12 @@ | |
vmxnet3_append_frag(struct sk_buff *skb, struct Vmxnet3_RxCompDesc *rcd, | |
struct vmxnet3_rx_buf_info *rbi) | |
{ | |
- struct skb_frag_struct *frag = skb_shinfo(skb)->frags + | |
- skb_shinfo(skb)->nr_frags; | |
+ skb_frag_t *frag = skb_shinfo(skb)->frags + skb_shinfo(skb)->nr_frags; | |
BUG_ON(skb_shinfo(skb)->nr_frags >= MAX_SKB_FRAGS); | |
__skb_frag_set_page(frag, rbi->page); | |
- frag->page_offset = 0; | |
+ skb_frag_off_set(frag, 0); | |
skb_frag_size_set(frag, rcd->len); | |
skb->data_len += rcd->len; | |
skb->truesize += PAGE_SIZE; | |
@@ -755,7 +754,7 @@ | |
} | |
for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { | |
- const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i]; | |
+ const skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; | |
u32 buf_size; | |
buf_offset = 0; | |
@@ -988,10 +987,7 @@ | |
tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr, 0, | |
IPPROTO_TCP, 0); | |
} else if (ctx->ipv6) { | |
- struct ipv6hdr *iph = ipv6_hdr(skb); | |
- | |
- tcph->check = ~csum_ipv6_magic(&iph->saddr, &iph->daddr, 0, | |
- IPPROTO_TCP, 0); | |
+ tcp_v6_gso_csum_prep(skb); | |
} | |
} | |
@@ -1001,7 +997,7 @@ | |
int i; | |
for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { | |
- const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i]; | |
+ const skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; | |
count += VMXNET3_TXD_NEEDED(skb_frag_size(frag)); | |
} | |
@@ -1891,8 +1887,8 @@ | |
sz = sizeof(struct vmxnet3_rx_buf_info) * (rq->rx_ring[0].size + | |
rq->rx_ring[1].size); | |
- bi = dma_zalloc_coherent(&adapter->pdev->dev, sz, &rq->buf_info_pa, | |
- GFP_KERNEL); | |
+ bi = dma_alloc_coherent(&adapter->pdev->dev, sz, &rq->buf_info_pa, | |
+ GFP_KERNEL); | |
if (!bi) | |
goto err; | |
@@ -3325,7 +3321,7 @@ | |
static void | |
-vmxnet3_tx_timeout(struct net_device *netdev) | |
+vmxnet3_tx_timeout(struct net_device *netdev, unsigned int txqueue) | |
{ | |
struct vmxnet3_adapter *adapter = netdev_priv(netdev); | |
adapter->tx_timeout_count++; | |
@@ -3373,6 +3369,7 @@ | |
.ndo_start_xmit = vmxnet3_xmit_frame, | |
.ndo_set_mac_address = vmxnet3_set_mac_addr, | |
.ndo_change_mtu = vmxnet3_change_mtu, | |
+ .ndo_fix_features = vmxnet3_fix_features, | |
.ndo_set_features = vmxnet3_set_features, | |
.ndo_get_stats64 = vmxnet3_get_stats64, | |
.ndo_tx_timeout = vmxnet3_tx_timeout, | |
@@ -3560,7 +3557,6 @@ | |
err = -ENOMEM; | |
goto err_ver; | |
} | |
- memset(adapter->coal_conf, 0, sizeof(*adapter->coal_conf)); | |
adapter->coal_conf->coalMode = VMXNET3_COALESCE_DISABLED; | |
adapter->default_coal_mode = true; | |
} | |
@@ -3787,13 +3783,19 @@ | |
} | |
if (adapter->wol & WAKE_ARP) { | |
- in_dev = in_dev_get(netdev); | |
- if (!in_dev) | |
+ rcu_read_lock(); | |
+ | |
+ in_dev = __in_dev_get_rcu(netdev); | |
+ if (!in_dev) { | |
+ rcu_read_unlock(); | |
goto skip_arp; | |
+ } | |
- ifa = (struct in_ifaddr *)in_dev->ifa_list; | |
- if (!ifa) | |
+ ifa = rcu_dereference(in_dev->ifa_list); | |
+ if (!ifa) { | |
+ rcu_read_unlock(); | |
goto skip_arp; | |
+ } | |
pmConf->filters[i].patternSize = ETH_HLEN + /* Ethernet header*/ | |
sizeof(struct arphdr) + /* ARP header */ | |
@@ -3813,7 +3815,9 @@ | |
/* The Unicast IPv4 address in 'tip' field. */ | |
arpreq += 2 * ETH_ALEN + sizeof(u32); | |
- *(u32 *)arpreq = ifa->ifa_address; | |
+ *(__be32 *)arpreq = ifa->ifa_address; | |
+ | |
+ rcu_read_unlock(); | |
/* The mask for the relevant bits. */ | |
pmConf->filters[i].mask[0] = 0x00; | |
@@ -3822,7 +3826,6 @@ | |
pmConf->filters[i].mask[3] = 0x00; | |
pmConf->filters[i].mask[4] = 0xC0; /* IPv4 TIP */ | |
pmConf->filters[i].mask[5] = 0x03; /* IPv4 TIP */ | |
- in_dev_put(in_dev); | |
pmConf->wakeUpEvents |= VMXNET3_PM_WAKEUP_FILTER; | |
i++; | |
diff -Naur linux-4.19.138/drivers/net/vmxnet3/vmxnet3_ethtool.c ../SOURCES/linux-5.8/drivers/net/vmxnet3/vmxnet3_ethtool.c | |
--- linux-4.19.138/drivers/net/vmxnet3/vmxnet3_ethtool.c 2020-09-18 02:49:39.825513356 +0100 | |
+++ ../SOURCES/linux-5.8/drivers/net/vmxnet3/vmxnet3_ethtool.c 2020-08-02 22:21:45.000000000 +0100 | |
@@ -257,6 +257,16 @@ | |
} | |
} | |
+netdev_features_t vmxnet3_fix_features(struct net_device *netdev, | |
+ netdev_features_t features) | |
+{ | |
+ /* If Rx checksum is disabled, then LRO should also be disabled */ | |
+ if (!(features & NETIF_F_RXCSUM)) | |
+ features &= ~NETIF_F_LRO; | |
+ | |
+ return features; | |
+} | |
+ | |
static void vmxnet3_enable_encap_offloads(struct net_device *netdev) | |
{ | |
struct vmxnet3_adapter *adapter = netdev_priv(netdev); | |
@@ -585,10 +595,8 @@ | |
} | |
if (VMXNET3_VERSION_GE_3(adapter)) { | |
- if (param->rx_mini_pending < 0 || | |
- param->rx_mini_pending > VMXNET3_RXDATA_DESC_MAX_SIZE) { | |
+ if (param->rx_mini_pending > VMXNET3_RXDATA_DESC_MAX_SIZE) | |
return -EINVAL; | |
- } | |
} else if (param->rx_mini_pending != 0) { | |
return -EINVAL; | |
} | |
@@ -1040,27 +1048,6 @@ | |
if (!VMXNET3_VERSION_GE_3(adapter)) | |
return -EOPNOTSUPP; | |
- if (ec->rx_coalesce_usecs_irq || | |
- ec->rx_max_coalesced_frames_irq || | |
- ec->tx_coalesce_usecs || | |
- ec->tx_coalesce_usecs_irq || | |
- ec->tx_max_coalesced_frames_irq || | |
- ec->stats_block_coalesce_usecs || | |
- ec->use_adaptive_tx_coalesce || | |
- ec->pkt_rate_low || | |
- ec->rx_coalesce_usecs_low || | |
- ec->rx_max_coalesced_frames_low || | |
- ec->tx_coalesce_usecs_low || | |
- ec->tx_max_coalesced_frames_low || | |
- ec->pkt_rate_high || | |
- ec->rx_coalesce_usecs_high || | |
- ec->rx_max_coalesced_frames_high || | |
- ec->tx_coalesce_usecs_high || | |
- ec->tx_max_coalesced_frames_high || | |
- ec->rate_sample_interval) { | |
- return -EINVAL; | |
- } | |
- | |
if ((ec->rx_coalesce_usecs == 0) && | |
(ec->use_adaptive_rx_coalesce == 0) && | |
(ec->tx_max_coalesced_frames == 0) && | |
@@ -1151,6 +1138,9 @@ | |
} | |
static const struct ethtool_ops vmxnet3_ethtool_ops = { | |
+ .supported_coalesce_params = ETHTOOL_COALESCE_RX_USECS | | |
+ ETHTOOL_COALESCE_MAX_FRAMES | | |
+ ETHTOOL_COALESCE_USE_ADAPTIVE_RX, | |
.get_drvinfo = vmxnet3_get_drvinfo, | |
.get_regs_len = vmxnet3_get_regs_len, | |
.get_regs = vmxnet3_get_regs, | |
diff -Naur linux-4.19.138/drivers/net/vmxnet3/vmxnet3_int.h ../SOURCES/linux-5.8/drivers/net/vmxnet3/vmxnet3_int.h | |
--- linux-4.19.138/drivers/net/vmxnet3/vmxnet3_int.h 2020-09-18 02:49:39.827513345 +0100 | |
+++ ../SOURCES/linux-5.8/drivers/net/vmxnet3/vmxnet3_int.h 2020-08-02 22:21:45.000000000 +0100 | |
@@ -69,12 +69,12 @@ | |
/* | |
* Version numbers | |
*/ | |
-#define VMXNET3_DRIVER_VERSION_STRING "1.5.1.0-k" | |
+#define VMXNET3_DRIVER_VERSION_STRING "1.5.0.0-k" | |
/* Each byte of this 32-bit integer encodes a version number in | |
* VMXNET3_DRIVER_VERSION_STRING. | |
*/ | |
-#define VMXNET3_DRIVER_VERSION_NUM 0x01050100 | |
+#define VMXNET3_DRIVER_VERSION_NUM 0x01050000 | |
#if defined(CONFIG_PCI_MSI) | |
/* RSS only makes sense if MSI-X is supported. */ | |
@@ -467,6 +467,9 @@ | |
void | |
vmxnet3_rq_destroy_all(struct vmxnet3_adapter *adapter); | |
+netdev_features_t | |
+vmxnet3_fix_features(struct net_device *netdev, netdev_features_t features); | |
+ | |
int | |
vmxnet3_set_features(struct net_device *netdev, netdev_features_t features); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment