diff options
Diffstat (limited to 'kmod/igb/igb_main.c')
-rw-r--r-- | kmod/igb/igb_main.c | 87 |
1 files changed, 74 insertions, 13 deletions
diff --git a/kmod/igb/igb_main.c b/kmod/igb/igb_main.c index 51ff75fe..3ae792c0 100644 --- a/kmod/igb/igb_main.c +++ b/kmod/igb/igb_main.c @@ -122,11 +122,17 @@ static void igb_clean_all_tx_rings(struct igb_adapter *); static void igb_clean_all_rx_rings(struct igb_adapter *); static void igb_clean_tx_ring(struct igb_ring *); static void igb_set_rx_mode(struct net_device *); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0) +static void igb_update_phy_info(struct timer_list *); +static void igb_watchdog(struct timer_list *); +static void igb_dma_err_timer(struct timer_list *); +#else static void igb_update_phy_info(unsigned long); static void igb_watchdog(unsigned long); +static void igb_dma_err_timer(unsigned long data); +#endif static void igb_watchdog_task(struct work_struct *); static void igb_dma_err_task(struct work_struct *); -static void igb_dma_err_timer(unsigned long data); /* AVB specific */ #ifdef HAVE_NDO_SELECT_QUEUE_ACCEL_FALLBACK static u16 igb_select_queue(struct net_device *dev, struct sk_buff *skb, @@ -215,7 +221,11 @@ static long igb_ioctl_file(struct file *file, unsigned int cmd, unsigned long arg); static void igb_vm_open(struct vm_area_struct *vma); static void igb_vm_close(struct vm_area_struct *vma); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0) +static int igb_vm_fault(struct vm_fault *fdata); +#else static int igb_vm_fault(struct vm_area_struct *area, struct vm_fault *fdata); +#endif static int igb_mmap(struct file *file, struct vm_area_struct *vma); static ssize_t igb_read(struct file *file, char __user *buf, size_t count, loff_t *pos); @@ -459,7 +469,7 @@ static void igb_cache_ring_register(struct igb_adapter *adapter) u32 e1000_read_reg(struct e1000_hw *hw, u32 reg) { struct igb_adapter *igb = container_of(hw, struct igb_adapter, hw); - u8 __iomem *hw_addr = ACCESS_ONCE(hw->hw_addr); + u8 __iomem *hw_addr = READ_ONCE(hw->hw_addr); u32 value = 0; if (E1000_REMOVED(hw_addr)) @@ -1091,8 +1101,13 @@ static void igb_set_interrupt_capability(struct igb_adapter *adapter, bool msix) for (i = 0; i < numvecs; i++) adapter->msix_entries[i].entry = i; - err = pci_enable_msix(pdev, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0) + err = pci_enable_msix_exact(pdev, adapter->msix_entries, numvecs); +#else + err = pci_enable_msix(pdev, + adapter->msix_entries, numvecs); +#endif if (err == 0) break; } @@ -1811,7 +1826,7 @@ static s32 igb_init_i2c(struct igb_adapter *adapter) * igb_up - Open the interface and prepare it to handle traffic * @adapter: board private structure **/ -int igb_up(struct igb_adapter *adapter) +void igb_up(struct igb_adapter *adapter) { struct e1000_hw *hw = &adapter->hw; int i; @@ -1855,7 +1870,6 @@ int igb_up(struct igb_adapter *adapter) (!hw->dev_spec._82575.eee_disable)) adapter->eee_advert = MDIO_EEE_100TX | MDIO_EEE_1000T; - return 0; } void igb_down(struct igb_adapter *adapter) @@ -2878,6 +2892,13 @@ static int igb_probe(struct pci_dev *pdev, /* Check if Media Autosense is enabled */ if (hw->mac.type == e1000_82580) igb_init_mas(adapter); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0) + timer_setup(&adapter->watchdog_timer, &igb_watchdog, 0); + if (adapter->flags & IGB_FLAG_DETECT_BAD_DMA) + timer_setup(&adapter->dma_err_timer, &igb_dma_err_timer, 0); + timer_setup(&adapter->phy_info_timer, &igb_update_phy_info, 0); +#else setup_timer(&adapter->watchdog_timer, &igb_watchdog, (unsigned long) adapter); if (adapter->flags & IGB_FLAG_DETECT_BAD_DMA) @@ -2885,6 +2906,7 @@ static int igb_probe(struct pci_dev *pdev, (unsigned long) adapter); setup_timer(&adapter->phy_info_timer, &igb_update_phy_info, (unsigned long) adapter); +#endif INIT_WORK(&adapter->reset_task, igb_reset_task); INIT_WORK(&adapter->watchdog_task, igb_watchdog_task); @@ -4674,9 +4696,19 @@ static void igb_spoof_check(struct igb_adapter *adapter) /* Need to wait a few seconds after link up to get diagnostic information from * the phy */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0) +static void igb_update_phy_info(struct timer_list *timer) +#else static void igb_update_phy_info(unsigned long data) +#endif { - struct igb_adapter *adapter = (struct igb_adapter *) data; + struct igb_adapter *adapter; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0) + adapter = container_of(timer, struct igb_adapter, watchdog_timer); +#else + adapter = (struct igb_adapter *) data; +#endif e1000_get_phy_info(&adapter->hw); } @@ -4726,9 +4758,20 @@ bool igb_has_link(struct igb_adapter *adapter) * igb_watchdog - Timer Call-back * @data: pointer to adapter cast into an unsigned long **/ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0) +static void igb_watchdog(struct timer_list *timer) +#else static void igb_watchdog(unsigned long data) +#endif { - struct igb_adapter *adapter = (struct igb_adapter *)data; + struct igb_adapter *adapter; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0) + adapter = container_of(timer, struct igb_adapter, watchdog_timer); +#else + adapter = (struct igb_adapter *)data; +#endif + /* Do the rest outside of interrupt context */ schedule_work(&adapter->watchdog_task); } @@ -4984,9 +5027,20 @@ dma_timer_reset: * igb_dma_err_timer - Timer Call-back * @data: pointer to adapter cast into an unsigned long **/ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0) +static void igb_dma_err_timer(struct timer_list *timer) +#else static void igb_dma_err_timer(unsigned long data) +#endif { - struct igb_adapter *adapter = (struct igb_adapter *)data; + struct igb_adapter *adapter; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0) + adapter = container_of(timer, struct igb_adapter, dma_err_timer); +#else + adapter = (struct igb_adapter *)data; +#endif + /* Do the rest outside of interrupt context */ schedule_work(&adapter->dma_err_task); } @@ -9607,10 +9661,7 @@ static void igb_io_resume(struct pci_dev *pdev) } if (netif_running(netdev)) { - if (igb_up(adapter)) { - dev_err(pci_dev_to_dev(pdev), "igb_up failed after reset\n"); - return; - } + igb_up(adapter); } netif_device_attach(netdev); @@ -10219,7 +10270,14 @@ static int igb_bind(struct file *file, void __user *argp) if (copy_from_user(&req, argp, sizeof(req))) return -EFAULT; + + /* + * Set the last character of req.iface to '/0' to + * guarantee null termination of req.iface string + * param in printk call. + */ + req.iface[IGB_BIND_NAMESZ-1] = 0; printk("bind to iface %s\n", req.iface); if (igb_priv == NULL) { @@ -10702,8 +10760,11 @@ static void igb_vm_open(struct vm_area_struct *vma) static void igb_vm_close(struct vm_area_struct *vma) { } - +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0) +static int igb_vm_fault(struct vm_fault *fdata) +#else static int igb_vm_fault(struct vm_area_struct *area, struct vm_fault *fdata) +#endif { return VM_FAULT_SIGBUS; } |