diff -Npaur a/src/kcompat.h b/src/kcompat.h --- a/src/kcompat.h 2019-09-09 14:28:11.384088231 -0400 +++ b/src/kcompat.h 2020-04-20 12:59:11.582750232 -0400 @@ -2818,7 +2818,9 @@ #define pci_disable_link_state(p, s) _kc_pci_disable_link_state(p, s) #else /* < 2.6.26 */ #define NETDEV_CAN_SET_GSO_MAX_SIZE -#ifdef HAVE_PCI_ASPM_H +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0) +#include +#else #include #endif #define HAVE_NETDEV_VLAN_FEATURES @@ -7088,4 +7090,10 @@ #define HAVE_TX_TIMEOUT_TXQUEUE #endif /* 5.6.0 */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 7, 0) +#define CPU_LATENCY_QOS +#define NO_PM_QOS_CPU_DMA_LATENCY +#define HAVE_PCI_AER_CLEAR +#endif /* 5.7.0 */ + #endif /* _KCOMPAT_H_ */ diff -Npaur a/src/netdev.c b/src/netdev.c --- a/src/netdev.c 2019-09-09 14:28:11.384088231 -0400 +++ b/src/netdev.c 2020-04-20 12:58:43.630808596 -0400 @@ -3710,26 +3710,13 @@ ew32(RXDCTL(0), rxdctl | 0x3); } -#ifdef HAVE_PM_QOS_REQUEST_LIST_NEW - pm_qos_update_request(&adapter->pm_qos_req, lat); -#elif defined(HAVE_PM_QOS_REQUEST_LIST) - pm_qos_update_request(&adapter->pm_qos_req, lat); -#else - pm_qos_update_requirement(PM_QOS_CPU_DMA_LATENCY, - adapter->netdev->name, lat); -#endif + + dev_info(&adapter->pdev->dev, + "Some CPU C-states have been disabled in order to enable jumbo frames\n"); + cpu_latency_qos_update_request(&adapter->pm_qos_req, lat); } else { -#ifdef HAVE_PM_QOS_REQUEST_LIST_NEW - pm_qos_update_request(&adapter->pm_qos_req, - PM_QOS_DEFAULT_VALUE); -#elif defined(HAVE_PM_QOS_REQUEST_LIST) - pm_qos_update_request(&adapter->pm_qos_req, - PM_QOS_DEFAULT_VALUE); -#else - pm_qos_update_requirement(PM_QOS_CPU_DMA_LATENCY, - adapter->netdev->name, - PM_QOS_DEFAULT_VALUE); -#endif + cpu_latency_qos_update_request(&adapter->pm_qos_req, + PM_QOS_DEFAULT_VALUE); } /* Enable Receives */ @@ -5185,16 +5172,7 @@ #endif /* DMA latency requirement to workaround jumbo issue */ -#ifdef HAVE_PM_QOS_REQUEST_LIST_NEW - pm_qos_add_request(&adapter->pm_qos_req, PM_QOS_CPU_DMA_LATENCY, - PM_QOS_DEFAULT_VALUE); -#elif defined(HAVE_PM_QOS_REQUEST_LIST) - pm_qos_add_request(&adapter->pm_qos_req, PM_QOS_CPU_DMA_LATENCY, - PM_QOS_DEFAULT_VALUE); -#else - pm_qos_add_requirement(PM_QOS_CPU_DMA_LATENCY, adapter->netdev->name, - PM_QOS_DEFAULT_VALUE); -#endif + cpu_latency_qos_add_request(&adapter->pm_qos_req, PM_QOS_DEFAULT_VALUE); /* before we allocate an interrupt, we must be ready to handle it. * Setting DEBUG_SHIRQ in the kernel makes it fire an interrupt @@ -5239,14 +5217,7 @@ return 0; err_req_irq: -#ifdef HAVE_PM_QOS_REQUEST_LIST_NEW - pm_qos_remove_request(&adapter->pm_qos_req); -#elif defined(HAVE_PM_QOS_REQUEST_LIST) - pm_qos_remove_request(&adapter->pm_qos_req); -#else - pm_qos_remove_requirement(PM_QOS_CPU_DMA_LATENCY, - adapter->netdev->name); -#endif + cpu_latency_qos_remove_request(&adapter->pm_qos_req); e1000e_release_hw_control(adapter); e1000_power_down_phy(adapter); e1000e_free_rx_resources(adapter->rx_ring); @@ -5254,7 +5225,7 @@ e1000e_free_tx_resources(adapter->tx_ring); err_setup_tx: e1000e_reset(adapter); - pm_runtime_put_sync(pci_dev_to_dev(pdev)); + pm_runtime_put_sync(&pdev->dev); return err; } @@ -5326,16 +5297,9 @@ !test_bit(__E1000_TESTING, &adapter->state)) e1000e_release_hw_control(adapter); -#ifdef HAVE_PM_QOS_REQUEST_LIST_NEW - pm_qos_remove_request(&adapter->pm_qos_req); -#elif defined(HAVE_PM_QOS_REQUEST_LIST) - pm_qos_remove_request(&adapter->pm_qos_req); -#else - pm_qos_remove_requirement(PM_QOS_CPU_DMA_LATENCY, - adapter->netdev->name); -#endif - - pm_runtime_put_sync(pci_dev_to_dev(pdev)); + cpu_latency_qos_remove_request(&adapter->pm_qos_req); + + pm_runtime_put_sync(&pdev->dev); return 0; } @@ -6682,7 +6646,7 @@ * @netdev: network interface device structure * @txqueue: txqueue **/ -#ifdef HAVE_TX_TIMEOUT_TXQUEUE +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0) static void e1000_tx_timeout(struct net_device *netdev, unsigned int txqueue) #else static void e1000_tx_timeout(struct net_device *netdev) @@ -8097,7 +8061,11 @@ result = PCI_ERS_RESULT_RECOVERED; } +#ifdef HAVE_PCI_AER_CLEAR + pci_aer_clear_nonfatal_status(pdev); +#else pci_cleanup_aer_uncorrect_error_status(pdev); +#endif return result; }