From: Shannon Nelson Date: Thu, 10 Mar 2016 22:59:45 +0000 (-0800) Subject: i40e: Remove timer and task only if created X-Git-Tag: v4.1.12-92~121^2~85 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=d29bd971293c60945d4e3b5cad5c9c8acaf77c35;p=users%2Fjedix%2Flinux-maple.git i40e: Remove timer and task only if created Orabug: 23176970 In some error scenarios, we may find ourselves trying to remove a non-existent timer or worktask. This causes the kernel some bit of consternation, so don't do it. Signed-off-by: Shannon Nelson Tested-by: Andrew Bowers Signed-off-by: Jeff Kirsher (cherry picked from commit c99abb4cb8227bf8172c085213c91bf155c6618a) Signed-off-by: Brian Maly --- diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c index 27f7bfd3341c2..3a6205b0c22c8 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c @@ -11167,8 +11167,10 @@ static void i40e_remove(struct pci_dev *pdev) /* no more scheduling of any task */ set_bit(__I40E_SUSPENDED, &pf->state); set_bit(__I40E_DOWN, &pf->state); - del_timer_sync(&pf->service_timer); - cancel_work_sync(&pf->service_task); + if (pf->service_timer.data) + del_timer_sync(&pf->service_timer); + if (pf->service_task.func) + cancel_work_sync(&pf->service_task); if (pf->flags & I40E_FLAG_SRIOV_ENABLED) { i40e_free_vfs(pf);