From patchwork Wed Aug 28 22:54:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Nguyen X-Patchwork-Id: 13782075 X-Patchwork-Delegate: kuba@kernel.org Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C63321AB51F for ; Wed, 28 Aug 2024 22:54:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724885693; cv=none; b=Oa3OIM1NANrHQoNqz/RDH7chPPnVu1PpL6YxisBHERsea6ECdH2n1Cz5SkQeMdzb2uED8JeKc0pUHbJRonQAlNLoSKHQ9OdotfGKqV+IpgsOHhiKT4CETe1w7chwp4ujeV/ZegQg104IFFCnJ0bF5nglqWz3e2vqTuZNKr/Ow4o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724885693; c=relaxed/simple; bh=v011Rq7J3nzGMn2HaEtQilllAQFzR0lZbL3gIU1/6q0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sCoAwQTYwTkBU1H5LDUfsOzg99hku1lBwSIp4llJbJfBCpdidrALJgu/tiBYY46E5tK5W/3QChFZi4B4ASMcGuGMgkHCfD43z2vR4yVUy501/PQ1cBnH/L/c/gmzpMqJVH8kDtutzeFEKnESjrTd+xlHdcqHd5OdA9UgbcRKhT0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=Wen/oEFr; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="Wen/oEFr" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1724885692; x=1756421692; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=v011Rq7J3nzGMn2HaEtQilllAQFzR0lZbL3gIU1/6q0=; b=Wen/oEFr7quIh33qai5gHctZgTdB26mMrNuBwkxwwFgCtDqXGNDD6MIK N6OpcKuwSpz92k0V+RJ3gJpIhD6nKy8RitKvYUfXFRPH3K5tCsxKTNOes IWHODJAsLlWOR3MPb9AmrLXkWHo7J66pS8QyT/tIR6Mr2f2RuWobpPoX1 T4bua2Hsvcq66+oetyYSS1jepXNXGd8++Ji5/x9ABT0QRWVg3UuZOnV4+ k11qN4G2O0h0qXzv46vH6VCCjumVco11mRqVZWsWdXELBuAc9bcp1wPQ0 jyc9y0+XVCYs03hDH0/oPV5HQUCIx4Pwano+9d4qCCvFWdMc5Il9+gf0b g==; X-CSE-ConnectionGUID: FjziRUm5QQWB2LyqNDXnBw== X-CSE-MsgGUID: ckKsIIIXST6kNjJ7kQpLTQ== X-IronPort-AV: E=McAfee;i="6700,10204,11178"; a="23408512" X-IronPort-AV: E=Sophos;i="6.10,184,1719903600"; d="scan'208";a="23408512" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Aug 2024 15:54:49 -0700 X-CSE-ConnectionGUID: F3SMv3kxRGyVvMFD4bHSKg== X-CSE-MsgGUID: PN+ZSi/CS5qBNmwJmzsCoQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.10,184,1719903600"; d="scan'208";a="63022900" Received: from anguy11-upstream.jf.intel.com ([10.166.9.133]) by fmviesa006.fm.intel.com with ESMTP; 28 Aug 2024 15:54:47 -0700 From: Tony Nguyen To: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, netdev@vger.kernel.org Cc: Daiwei Li , anthony.l.nguyen@intel.com, richardcochran@gmail.com, Vinicius Costa Gomes , Kurt Kanzenbach , Pucha Himasekhar Reddy Subject: [PATCH net 1/2] igb: Fix not clearing TimeSync interrupts for 82580 Date: Wed, 28 Aug 2024 15:54:41 -0700 Message-ID: <20240828225444.645154-2-anthony.l.nguyen@intel.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240828225444.645154-1-anthony.l.nguyen@intel.com> References: <20240828225444.645154-1-anthony.l.nguyen@intel.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org From: Daiwei Li 82580 NICs have a hardware bug that makes it necessary to write into the TSICR (TimeSync Interrupt Cause) register to clear it: https://lore.kernel.org/all/CDCB8BE0.1EC2C%25matthew.vick@intel.com/ Add a conditional so only for 82580 we write into the TSICR register, so we don't risk losing events for other models. Without this change, when running ptp4l with an Intel 82580 card, I get the following output: > timed out while polling for tx timestamp increasing tx_timestamp_timeout or > increasing kworker priority may correct this issue, but a driver bug likely > causes it This goes away with this change. This (partially) reverts commit ee14cc9ea19b ("igb: Fix missing time sync events"). Fixes: ee14cc9ea19b ("igb: Fix missing time sync events") Closes: https://lore.kernel.org/intel-wired-lan/CAN0jFd1kO0MMtOh8N2Ztxn6f7vvDKp2h507sMryobkBKe=xk=w@mail.gmail.com/ Tested-by: Daiwei Li Suggested-by: Vinicius Costa Gomes Signed-off-by: Daiwei Li Acked-by: Vinicius Costa Gomes Reviewed-by: Kurt Kanzenbach Tested-by: Pucha Himasekhar Reddy (A Contingent worker at Intel) Signed-off-by: Tony Nguyen --- drivers/net/ethernet/intel/igb/igb_main.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index 33a42b4c21e0..9dc7c60838ed 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -6960,10 +6960,20 @@ static void igb_extts(struct igb_adapter *adapter, int tsintr_tt) static void igb_tsync_interrupt(struct igb_adapter *adapter) { + const u32 mask = (TSINTR_SYS_WRAP | E1000_TSICR_TXTS | + TSINTR_TT0 | TSINTR_TT1 | + TSINTR_AUTT0 | TSINTR_AUTT1); struct e1000_hw *hw = &adapter->hw; u32 tsicr = rd32(E1000_TSICR); struct ptp_clock_event event; + if (hw->mac.type == e1000_82580) { + /* 82580 has a hardware bug that requires an explicit + * write to clear the TimeSync interrupt cause. + */ + wr32(E1000_TSICR, tsicr & mask); + } + if (tsicr & TSINTR_SYS_WRAP) { event.type = PTP_CLOCK_PPS; if (adapter->ptp_caps.pps) From patchwork Wed Aug 28 22:54:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Nguyen X-Patchwork-Id: 13782076 X-Patchwork-Delegate: kuba@kernel.org Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 479701AD408 for ; Wed, 28 Aug 2024 22:54:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724885694; cv=none; b=ouptH0wVikhidujk74E4jIe1/ccur59ROZ4+EIZvXDVVWGOho5+4TCBi4xw1QxcyE7XeLU1NHFdnopGqU33Wybc8p9UUWvflcECQ6IVIeWjSFyU2TAjcoxs7G2wABY0JsAXjD6bxn+QvN6rNEUZ2Yrfl4LhyNBqhRwfbb6mSj6s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724885694; c=relaxed/simple; bh=zOfPI6iD9GGwNcR7Y/5I+f8KApgll/BIOx4To/m49hQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kxHGnyBtrl0q+QMCELjraqbmZliXFOX6Lm84GYq6JyuP0gKuDB8anbzch9p4n4roZ71+ql4Eqi0il+xkhMlUu+N8V1X/y7uBhUVoMwoHfZ1awfj0zrh9M89FkM3JyIs5BtTSBZoKhJr/V518jYyBD6emOAXgMnZRAii0z18cfO4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=l2DJYEr7; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="l2DJYEr7" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1724885693; x=1756421693; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=zOfPI6iD9GGwNcR7Y/5I+f8KApgll/BIOx4To/m49hQ=; b=l2DJYEr7FEJ/gNmvzX0eTdxb9NOG/nwBYpp7Yk0/5Bnmj7szK+aF3hLa nPQ4p+JwG9Jqcs5tQxCZaBce7L0EW9oETo9aw4BpITAA7rf4bxaIfkZkG UkVR+L6w0fb5KOinouE5uKRnm5i7YDVmeVlUuueQ7/i2KI2EFqx1DW8x8 ucQwjmJLB0z0P4Ei2yvH9jwOXO9MJ6G/ZEjcVVJgZqlh/RcopIRklWZV4 gMC3fOnIFe41ZJytfY07yO656+SFnIzEw6k++GDCmNngdYovLpoWBaRR1 w9kSUWK4FgXgxSipdixSRNikwQvX/8BmVGO3fVz047+McUjHoAoJcS86T Q==; X-CSE-ConnectionGUID: cWchJgjWT2SQVp94nBV09g== X-CSE-MsgGUID: 4aKn6JAcQfGwQ6gWyxPUUg== X-IronPort-AV: E=McAfee;i="6700,10204,11178"; a="23408518" X-IronPort-AV: E=Sophos;i="6.10,184,1719903600"; d="scan'208";a="23408518" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Aug 2024 15:54:49 -0700 X-CSE-ConnectionGUID: HXmOH7FHTyuV1/e7fk6ccA== X-CSE-MsgGUID: pxBTuk44RtW7ATA0Gl27ew== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.10,184,1719903600"; d="scan'208";a="63022904" Received: from anguy11-upstream.jf.intel.com ([10.166.9.133]) by fmviesa006.fm.intel.com with ESMTP; 28 Aug 2024 15:54:48 -0700 From: Tony Nguyen To: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, netdev@vger.kernel.org Cc: Dawid Osuchowski , anthony.l.nguyen@intel.com, stephen@networkplumber.org, Igor Bagnucki , Pucha Himasekhar Reddy , Michal Schmidt Subject: [PATCH net 2/2] ice: Add netif_device_attach/detach into PF reset flow Date: Wed, 28 Aug 2024 15:54:42 -0700 Message-ID: <20240828225444.645154-3-anthony.l.nguyen@intel.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240828225444.645154-1-anthony.l.nguyen@intel.com> References: <20240828225444.645154-1-anthony.l.nguyen@intel.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org From: Dawid Osuchowski Ethtool callbacks can be executed while reset is in progress and try to access deleted resources, e.g. getting coalesce settings can result in a NULL pointer dereference seen below. Reproduction steps: Once the driver is fully initialized, trigger reset: # echo 1 > /sys/class/net//device/reset when reset is in progress try to get coalesce settings using ethtool: # ethtool -c BUG: kernel NULL pointer dereference, address: 0000000000000020 PGD 0 P4D 0 Oops: Oops: 0000 [#1] PREEMPT SMP PTI CPU: 11 PID: 19713 Comm: ethtool Tainted: G S 6.10.0-rc7+ #7 RIP: 0010:ice_get_q_coalesce+0x2e/0xa0 [ice] RSP: 0018:ffffbab1e9bcf6a8 EFLAGS: 00010206 RAX: 000000000000000c RBX: ffff94512305b028 RCX: 0000000000000000 RDX: 0000000000000000 RSI: ffff9451c3f2e588 RDI: ffff9451c3f2e588 RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000 R10: ffff9451c3f2e580 R11: 000000000000001f R12: ffff945121fa9000 R13: ffffbab1e9bcf760 R14: 0000000000000013 R15: ffffffff9e65dd40 FS: 00007faee5fbe740(0000) GS:ffff94546fd80000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000000000020 CR3: 0000000106c2e005 CR4: 00000000001706f0 Call Trace: ice_get_coalesce+0x17/0x30 [ice] coalesce_prepare_data+0x61/0x80 ethnl_default_doit+0xde/0x340 genl_family_rcv_msg_doit+0xf2/0x150 genl_rcv_msg+0x1b3/0x2c0 netlink_rcv_skb+0x5b/0x110 genl_rcv+0x28/0x40 netlink_unicast+0x19c/0x290 netlink_sendmsg+0x222/0x490 __sys_sendto+0x1df/0x1f0 __x64_sys_sendto+0x24/0x30 do_syscall_64+0x82/0x160 entry_SYSCALL_64_after_hwframe+0x76/0x7e RIP: 0033:0x7faee60d8e27 Calling netif_device_detach() before reset makes the net core not call the driver when ethtool command is issued, the attempt to execute an ethtool command during reset will result in the following message: netlink error: No such device instead of NULL pointer dereference. Once reset is done and ice_rebuild() is executing, the netif_device_attach() is called to allow for ethtool operations to occur again in a safe manner. Fixes: fcea6f3da546 ("ice: Add stats and ethtool support") Suggested-by: Jakub Kicinski Reviewed-by: Igor Bagnucki Signed-off-by: Dawid Osuchowski Tested-by: Pucha Himasekhar Reddy (A Contingent worker at Intel) Reviewed-by: Michal Schmidt Signed-off-by: Tony Nguyen --- drivers/net/ethernet/intel/ice/ice_main.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c index 6f97ed471fe9..46d3c5a34d6a 100644 --- a/drivers/net/ethernet/intel/ice/ice_main.c +++ b/drivers/net/ethernet/intel/ice/ice_main.c @@ -608,6 +608,9 @@ ice_prepare_for_reset(struct ice_pf *pf, enum ice_reset_req reset_type) memset(&vsi->mqprio_qopt, 0, sizeof(vsi->mqprio_qopt)); } } + + if (vsi->netdev) + netif_device_detach(vsi->netdev); skip: /* clear SW filtering DB */ @@ -7589,6 +7592,7 @@ static void ice_update_pf_netdev_link(struct ice_pf *pf) */ static void ice_rebuild(struct ice_pf *pf, enum ice_reset_req reset_type) { + struct ice_vsi *vsi = ice_get_main_vsi(pf); struct device *dev = ice_pf_to_dev(pf); struct ice_hw *hw = &pf->hw; bool dvm; @@ -7731,6 +7735,9 @@ static void ice_rebuild(struct ice_pf *pf, enum ice_reset_req reset_type) ice_rebuild_arfs(pf); } + if (vsi && vsi->netdev) + netif_device_attach(vsi->netdev); + ice_update_pf_netdev_link(pf); /* tell the firmware we are up */