From nobody Sat Feb 7 17:41:16 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011034.outbound.protection.outlook.com [52.101.65.34]) (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 9BABE338910; Fri, 23 Jan 2026 02:22:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769134950; cv=fail; b=LPqtB40X+ESG79WF8p07ePY2KXLCMsW+BQvfeIX5/boUIaZMh5mxCHfo99B/9qLc91GEXqkCNak2diSiaMeEr+QOdfCvd5uK2tss2E9MGqi2mACSJ0kU7BDkCQe320Kfg4osk9hS1jDn9MbMlyCgjloVS/4++t7KwHPT/vYj0VI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769134950; c=relaxed/simple; bh=U0A+x8QYh9ktZt48s4Xj/yNkUNriyCjzn/YD/YzIGus=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=PdRHvJERkvSMfqqDjuxXRTlQ90IBqxWQPqx4y0w8QSmROb4i2pQ9iXr7dv4+oiWmqR0nbsv5YNkUEEy3efvBWe60nNpMB+j/UJG2Lju2bRSYKscc52ck5JR9lWfNtWhAVveR75NFvmyOvTWUHP4nFr6+5LMe/xjGdZ0AgE5cECI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=gq8wZPQQ; arc=fail smtp.client-ip=52.101.65.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="gq8wZPQQ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=F+3d5GO3V2LIlU7udrLjGfEL5V7/+6kMlGFsXFLGXE4Gjwwbm3QhKsD4hd0VCGVzggXbNqknoJb8S+obM0oTFAkFsX3VnwDiGdF0+T3iB6Blpr3dxco/jYg1RcPrUe1h7oaTZz93I/l3TbO3/rkhVv17G1OGM8MAOdCPHbNUpSOfek/NNhLhv4ddUoBTqMmniuEgMfxxwktYwe1By50AShWTxp7CGMNPZ0pKUKEMMD7xRXi/3vx6qj/IicaPZFAnAsopzw/QoujW5PuwXCKe6DcV8WssjZVoIqrqmtJXGHtyZwmXircrcPvGx5HwpbOk0KdvI9Axy4jlbGgaHKg+hw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=eJth/+o77dQ5OhWnXLUdF+IpIMi1Eyqp6UHQhKEdstE=; b=MzkWXc+eOSznQnhNd6Jac5klh5MqvTqsxXFJIHID16yXs3s2uwtm2U0QsmafNnA6aP4yApbl/EaSpKuLEMD3oc9ZJwlX4Q5oeTSHqtdxBngXstfTRn1HcvzPuL9MNC8WHEtg4patmJnWxAx5HCkcd+cuCTr/sHrLU7YWXsTn8Ey0LYOGL8SKTpdxN/0qu7N/Qd9Oec7F5zUsKSEIC8lrqPWcrey9oJJtLj0xFKi3eve34shg/xZd4wSm2gid2yxB/PFeByBQtWcMco+1muw1GP607OnYILLyjALSVP0SQcD2Qn8euDaX9Vb6FWkPsD8f/A98CgyDMwnK332N8UnGNQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=eJth/+o77dQ5OhWnXLUdF+IpIMi1Eyqp6UHQhKEdstE=; b=gq8wZPQQPr8u+xMsAp0ahPmjUi7Dbn8PoZ5mCJSNAii4HqwNtLDH9h0bE3No3GfEFvQHouXRTHK/IuvKdZ0z5CPOpdRo0fczbiDo+1R/xwscBfIlu6YAhcexKRp5C7SSzkEu7U86RWN2gQnwwc8GalWzcdfQ2f9giiRBp2jCAF32ohDTMM4UL+kW6xUW3Rm7zTwyhCgZLw1mrUT/iCo2ZirgGYP2Aix6L6Sn/XU3af7sYazrDACvsx8upLMxCRyfvo6NYX5L6Zsk7AXvCAGbFx21K+3P+rsg1iIAVy3S9EdCCgBOKeTKGvzQcKQR2mpwPMk4SG6/mHZEsnaStlZiHg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by GV4PR04MB11974.eurprd04.prod.outlook.com (2603:10a6:150:2e8::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Fri, 23 Jan 2026 02:22:07 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%4]) with mapi id 15.20.9499.001; Fri, 23 Jan 2026 02:22:07 +0000 From: Wei Fang To: shenwei.wang@nxp.com, xiaoning.wang@nxp.com, frank.li@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, sdf@fomichev.me Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, bpf@vger.kernel.org Subject: [PATCH v4 net-next 01/15] net: fec: add fec_txq_trigger_xmit() helper Date: Fri, 23 Jan 2026 10:21:29 +0800 Message-Id: <20260123022143.4121797-2-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260123022143.4121797-1-wei.fang@nxp.com> References: <20260123022143.4121797-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0074.apcprd02.prod.outlook.com (2603:1096:4:90::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|GV4PR04MB11974:EE_ X-MS-Office365-Filtering-Correlation-Id: 3e4247c4-777b-49fa-9221-08de5a2634d5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|1800799024|7416014|376014|19092799006|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?0C+QCa0HR/VlDEXklMzbZh+Qm9IAlUqwT334WAGsJV2jFbeUkjMcCGq/LQAA?= =?us-ascii?Q?cWMxDuKxc34bhJPDB63MDwfWxJcZdaY6L687x3UduzfYszBXRc5l3WK+akQ0?= =?us-ascii?Q?z0cCOv8Hu5IIUgLhTNzDeMa807/oMYXiZszH3HH0P6ewdc7wV68KEUj14hQ3?= =?us-ascii?Q?sbV9oL4TzPq3jYljLDc2vldGcBSWTvc0ih+6hwgG2WRoNDnh471HPJkaSmr6?= =?us-ascii?Q?mZX84H6OZWa46WsATob/uq95fRcmdfBhb+Ic8LWT+XltnxvP0vSQdWc5Jkto?= =?us-ascii?Q?V0O1KFFPIje6fmZkF1OAQhNMadh6MrxRnigsjXI0GDxnXzZfcwShHMYyabo2?= =?us-ascii?Q?1qGzY6g6odyJlDbzXnIc/8t/76uJTpKOdoZtNBzzKCMZ4ccfuvUtrJp6yd+1?= =?us-ascii?Q?/5y+OrdyHBwjaE/IB0HpJEDx1rZ+G+h2yNrB5AXXQDPEmv+wK0u1GVxbNmqB?= =?us-ascii?Q?p4vxIV/Ze4op5PKh0SiMl9t4RxAcrXUQEP/h0WK4FcVzOkaFpA/Xo8niAQ0S?= =?us-ascii?Q?6nE5lxzDe00Tp3ay0JvEiL7xmufWuSufLGQXjYCeJ88/Eio2NUAn2h+diQe6?= =?us-ascii?Q?I0YMutCXs2MDQklL0ph/xZajWiZwMZYd31HGbJuuTCI/5XZrbjIOBQbZxP0G?= =?us-ascii?Q?/QnCJ5txK7cOsDOqxahO6yltLiIl01LZ3i8crTYJyEauw36T3WwdDVmBN0IV?= =?us-ascii?Q?WhJ4b2o27TTo42L+ObJHO/TbKqrAs0rGepZ5bZe6WZTWOJOSwGMb79uqQ/8v?= =?us-ascii?Q?d3HENf7bdhSEA+940dPFk4J0t0fwfm249oOkBcFqCVsm7WsLXMDsh7YsH5wr?= =?us-ascii?Q?rfCr92/J/J1PY7WNKO5TB/FJVo56qz06/SxFXwFFcnDXMiJuOMdF/pF6RMYL?= =?us-ascii?Q?blgfcJHWjUqZbGBRVmg4CKEAM4bL9rhfm93BomtbyTaYW142KgX4mohB9+sr?= =?us-ascii?Q?V1cHwrwFblzrewGCeWMN5S19VuY6ZIFvs5egD06wWYLBljYicSNx6hq0QUIl?= =?us-ascii?Q?Vb7Vci8SpujfEGP2nrGEmhHlbLcl1EbvbTC3R/092eO1IlLLhCdLxn0ptqfq?= =?us-ascii?Q?FWYwcjnDPw0kt/+grxsVjiPGzle3goI34Rnfwu+DNhuEYwsPSjRMcvI6xXB3?= =?us-ascii?Q?oZQ2G5lW5Hd9Tm0VpOw6DTqEZs0Nv3/W5tI48f1m7YUsBCQdMmA6K30kcaGO?= =?us-ascii?Q?vcctYy7SDOQDmRbzNLjH8Xrq9yth+0NNn2cKxprGAsJMW/S7gNHGipbR0jAC?= =?us-ascii?Q?fi6DTAd0D4r94ujyQacGYxc45DW+uw4YXKTOqdZ6Hy3CWHMEcqPpb5f9+pba?= =?us-ascii?Q?XcxK1QpWB6M4bmqEETwUfZfHDtNaKBUu0TtnpZazFu8eGjuyQFVBnOIIGsj/?= =?us-ascii?Q?3e8I0e4UFx6u+UgGYoZm2ztdn6cy6c8hrqmmU+BkyJehSsM/wQx+SvqkyTrA?= =?us-ascii?Q?KBpPkRZ+TZAR2FtAEmyvGbgwm/Q6Ny/c4KEL6VDZx96btBSnp76XZYMmu7dA?= =?us-ascii?Q?r+a8ohQ0a4DksmP/w/vNaJQv4LWQjkG92CpYeOlFgK+Bho/ul8wO4ZSycO0p?= =?us-ascii?Q?X3hZgIVvR3BXL8HHYIu+DGUxL1MsIIf6gqnDHJpSqqic2aUvfQqQpKnyYYEq?= =?us-ascii?Q?cgD8+erF1v6FE4fNoC/Ua5GI9p+YLaX446vAcqA56+EJ?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(1800799024)(7416014)(376014)(19092799006)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?JO/N4HsOZl8GfkWhxoqcKplN/eeKJT/kjtIBIsDXXZG/+0MHtDaALYXo5ZdB?= =?us-ascii?Q?rf7s2cVHq5bXvh9o+4DXg30dkB1G+kjTWpJT/J1mnXFfzHGtgesqx3yKjro9?= =?us-ascii?Q?ez7I3ToGJApxK7AeIBcMdJbCpe2Z9ujJRIh0HkWeoCCvjo317xRg1Ao03Ygz?= =?us-ascii?Q?MF2xBgsOR/OduaIRwaWwepBelETTwmFZTemtVN2iNhnUjvfZSrepaZJf6Usz?= =?us-ascii?Q?ByiyQjOwvtcdYsWZFHg3L7rY6JpsSp4bvQ9lZX2HR8CxRMeJKr4LKdckgL3H?= =?us-ascii?Q?bUz6+n+vY1KgrxDwcya0beWiUAS5M4jIPzcDEV+2gic6HNbqBHNGWYnQnTOZ?= =?us-ascii?Q?bmHn5gU5L5u1ClB4j2kGsNPxEf2Jz10slbhwdq9ZNalHiXT0LMouxfeio61K?= =?us-ascii?Q?mlXmfkI5jekdvXdb08KHoFTgmNo6svGgApbBSiIHxA1v0a9FCa1wHVVAFjTX?= =?us-ascii?Q?mSkNXnFQaNQAsCNcEwsabdSGV1TO0CrVl3zmByNB/K9ppFGWF6VtVWrFLnG7?= =?us-ascii?Q?7psmLfkcN3seXjb1/hmsM+jxg0XFy+tTSlqEopkUY3DmaKcAsRYGvuzobOOe?= =?us-ascii?Q?6kXabYHgob64r0H+zka+2XyTtlRdfS01P1oytgg3Z7VRO3eC/kkxVCB9BQT8?= =?us-ascii?Q?0Th9l+8SYvk61ROGAV5So33k+raBGoIqEyNRdkzkxnkQiHe+ci+RRd0AKfTb?= =?us-ascii?Q?d9dJqxdhwvOfNTrcLfzcKsoWllDMtfZpZssDd4qRx1rMSAXbzg9yrePJLcKc?= =?us-ascii?Q?wJTBEdM4iTtB0uJT2PuyRKUBGoTjVvsl6Iebg3eol6hik+0EYw/wu3hSIifx?= =?us-ascii?Q?5BSEfEqwsIowvM63/pQMaEohxne0yNNNcySbhQVVMZk6VfDFE971nMNYLcEa?= =?us-ascii?Q?ChsaND4kxtTh48K2taXNkeiZZC69xnL+8tL6A4zz5fKFrYuKAQf+YZ6ZOPGm?= =?us-ascii?Q?g7MJ8LHZIEKUne4Zb+9F/ybb8TP4Yjf2yNDQ6YUjomTUBE33+qZqI5Zf12jA?= =?us-ascii?Q?fCcxTykxpl+82zMtkvf+X+B1NgCPYEYf6iguBovpPBBvEH0Iht8NZV5jqdpe?= =?us-ascii?Q?iFS4UkRQuhgNI06W/M9IhFWpqV6LPVfqIwHBoj6iZ5Br4WrvXl6WOg5sTEbd?= =?us-ascii?Q?28enoTJcKKwq5uhySoBe8clUc0MBW5Er98WrJC8RRxE//JjEyB7tns6ST5oF?= =?us-ascii?Q?GrXi82U5eUX++iJvCmI7pp2EwXyNScAnrSMH6f4DQ8TugbOOM7rRmV+Q+INU?= =?us-ascii?Q?iRwV3s8YFi2QPlWH6tGFmN4L6E5VVK6p0SPJOlTDDtiWexd/dGK9DJvgwrmd?= =?us-ascii?Q?aamXgZ+XoJufMgXVY3emqsYaSLBZ3JLrdWoeTEQdWgI9S7Zx2jtmMGAC1rs0?= =?us-ascii?Q?q+/DCJzPbZ67qYLf2ib1f2amn3YBZiulI9JrxCjfmq6SWvgjgtBCj5sqV1Pq?= =?us-ascii?Q?LUC7k5q/LZFlDpjtY6ByfTmN0p7mQ8aNzK6mvT5eRnYfDtFMs6fjnSHPx53P?= =?us-ascii?Q?1vXBnJgzcU+ckNGhRkYun9TXIm8PaL4d8+K5zU2iSSW/+whWKrCAPXv3k8ch?= =?us-ascii?Q?W6IqaZB+9SBxeIpY2NzKYQoj8+3l5CeSrMQyPVsry8Ebfwai/gnrMVqjSlfY?= =?us-ascii?Q?6r68BHD/Zr1036T7gr8e4iYApN15xa2CSPSgry+zhTN0brPnsTIFAHE6k680?= =?us-ascii?Q?1GfkGiGyLYNclWqeoY5EuuXHK4l9/mf2hnaWnDgxjOWQg9+x0vJNeZdd0MKX?= =?us-ascii?Q?oVLz8yO51w=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3e4247c4-777b-49fa-9221-08de5a2634d5 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 02:22:07.6469 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: jNEZhWXtWAk9VyAQuHmTriedf/UujwqnVVla9H1/iZuVsGcdqlUHjlEpykdAz08e29yxR1PGoTc7/G2buDyU9Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11974 Content-Type: text/plain; charset="utf-8" Currently, the workaround for FEC_QUIRK_ERR007885 has three call sites, so add the helper fec_txq_trigger_xmit() to make the code more concise and reusable. Signed-off-by: Wei Fang Reviewed-by: Frank Li --- drivers/net/ethernet/freescale/fec_main.c | 32 ++++++++++------------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethern= et/freescale/fec_main.c index cfb56bf0e361..85bcca932fd2 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -508,6 +508,17 @@ fec_enet_create_page_pool(struct fec_enet_private *fep, return err; } =20 +static void fec_txq_trigger_xmit(struct fec_enet_private *fep, + struct fec_enet_priv_tx_q *txq) +{ + if (!(fep->quirks & FEC_QUIRK_ERR007885) || + !readl(txq->bd.reg_desc_active) || + !readl(txq->bd.reg_desc_active) || + !readl(txq->bd.reg_desc_active) || + !readl(txq->bd.reg_desc_active)) + writel(0, txq->bd.reg_desc_active); +} + static struct bufdesc * fec_enet_txq_submit_frag_skb(struct fec_enet_priv_tx_q *txq, struct sk_buff *skb, @@ -717,12 +728,7 @@ static int fec_enet_txq_submit_skb(struct fec_enet_pri= v_tx_q *txq, txq->bd.cur =3D bdp; =20 /* Trigger transmission start */ - if (!(fep->quirks & FEC_QUIRK_ERR007885) || - !readl(txq->bd.reg_desc_active) || - !readl(txq->bd.reg_desc_active) || - !readl(txq->bd.reg_desc_active) || - !readl(txq->bd.reg_desc_active)) - writel(0, txq->bd.reg_desc_active); + fec_txq_trigger_xmit(fep, txq); =20 return 0; } @@ -913,12 +919,7 @@ static int fec_enet_txq_submit_tso(struct fec_enet_pri= v_tx_q *txq, txq->bd.cur =3D bdp; =20 /* Trigger transmission start */ - if (!(fep->quirks & FEC_QUIRK_ERR007885) || - !readl(txq->bd.reg_desc_active) || - !readl(txq->bd.reg_desc_active) || - !readl(txq->bd.reg_desc_active) || - !readl(txq->bd.reg_desc_active)) - writel(0, txq->bd.reg_desc_active); + fec_txq_trigger_xmit(fep, txq); =20 return 0; =20 @@ -3935,12 +3936,7 @@ static int fec_enet_txq_xmit_frame(struct fec_enet_p= rivate *fep, txq->bd.cur =3D bdp; =20 /* Trigger transmission start */ - if (!(fep->quirks & FEC_QUIRK_ERR007885) || - !readl(txq->bd.reg_desc_active) || - !readl(txq->bd.reg_desc_active) || - !readl(txq->bd.reg_desc_active) || - !readl(txq->bd.reg_desc_active)) - writel(0, txq->bd.reg_desc_active); + fec_txq_trigger_xmit(fep, txq); =20 return 0; } --=20 2.34.1 From nobody Sat Feb 7 17:41:16 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011034.outbound.protection.outlook.com [52.101.65.34]) (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 D72012EBB86; Fri, 23 Jan 2026 02:22:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769134961; cv=fail; b=iqUEOqG27Kq3DRF6GDG78JB/d3c3i13WnvIoCmb5JaAAYgmy32xNZjt3gqoCa9Vj6YY8KlDCHlR8HDpg5WsbvPnBhotd3cmf9z9OfP8p8PjCUV5ueXHSXG7KkMfBmic3lMZnNfulzThtxfIhCE5WZTlEHvRBjkyPanIFayxM1q8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769134961; c=relaxed/simple; bh=++5BwbXI6gsLka6qAUzrvbfIDIWhlLfuMOnODDgcGVc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=usKOU9imx1Z82dnxmbVy8AthncJ8o8avK0ZGO3cZciUVMsPygnHwAIz0faMel3ftL+8LSMxrUe4P1UAyVV4ShrSDRcaUkacYG0kI1pcdOEL/5J0QCRImG12GCWFSwvnzWYiIg9m1iRJOHSuFyMVZx3oN3Uh+PpiPttRphkKK8ig= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=Sd20GIJk; arc=fail smtp.client-ip=52.101.65.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="Sd20GIJk" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WJWADVy1Eq3xli2oLWTat1AUsU/x9pA3/rafeSsFecTfNLg/krU939COfD3+5zsgCeosFksRvZgRsh+8ZYn8P2Pwu0LEC/FE4EJV+uFnDCJUdZMxm7HNF6MeYcTrgEl3DiYDvAhDSP7lt9ddvWaJNlAxNDeG2CA7hmFZ/aQvDbWDsmVmveM+ikNPd4Pt8xWuJuM1WeQR1jipiT+MnomIWoq+8cGfWHerwltHGjZknaecvQ4xjmPh00rMBQOVfyww5tR34oqu6Bt/Mf4KwuZ0w5vqL60NKFzfSOSWMSjsxHpMUVMfzTmZTJZ9sxpoRLhEXnfIFlaLiCyVpjjFO9HbdA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=9BkCGt8PQsr6pzPjEl54Zc8fTuQCm8RmbczY/wHYp68=; b=ZgSDeZl76HSktrthaJGNAVNaezSVD86pdNRBHHUodFgR5EzwTXjCIbdSXBg8vorHDoxoHmrwxa6N+l1RAuki9ilc7BIkvLojd/Kg11E068wUAlE36K2a4Gd8CIKhUv5fYkIjtmgJCzEQGYRSiTKayWH5HC+nYx2BWuC+NC2luVPSncVKZ5KcEypS10Vz7nUXgfbwonjC6h9+pzvMBRbt+T8U5keB8erueuopHBLAvgyCUTljf0uJ7y21Vti9Z747usCDBMpkUzn/4JeXp+KyesAmvp8LtDg8mfhonGEoeQAijrpEBR8/WkZhjc4/qsOmP9YLNtzkUSq0KzZLzwXwBw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9BkCGt8PQsr6pzPjEl54Zc8fTuQCm8RmbczY/wHYp68=; b=Sd20GIJkrUzWmvHx+F5S4s2mNFj8cfqnRns6uzoVjIkRRwGVRcZp1/hjDp7C40BK9IDMNLApvNORwDKaUoh+aJyJ9m8NYUIzZeZl8Mf/4gPF8xj1xnXVNi4k31sc/u1x3Lvm+s4t/+xLGjTZC+qE8a9zv06uVkn+OJFfbq8pJDs4HC/xnHwsYEbA9PaYH2i04yzY7ptUBSqw/Bh+RGyuu23UTrben2smlc8Ag2hhzQzrZHfiq27owj1R3NSI/rBiD7qIk00XoibtD1FI8GLjRgIRCy4eRsgJ9DqguEwfJxiTHq5kcpzq4F8lERhmN5OJp5mty3WVlLhV+OV1VWIVXg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by GV4PR04MB11974.eurprd04.prod.outlook.com (2603:10a6:150:2e8::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Fri, 23 Jan 2026 02:22:12 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%4]) with mapi id 15.20.9499.001; Fri, 23 Jan 2026 02:22:12 +0000 From: Wei Fang To: shenwei.wang@nxp.com, xiaoning.wang@nxp.com, frank.li@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, sdf@fomichev.me Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, bpf@vger.kernel.org Subject: [PATCH v4 net-next 02/15] net: fec: add fec_rx_error_check() to check RX errors Date: Fri, 23 Jan 2026 10:21:30 +0800 Message-Id: <20260123022143.4121797-3-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260123022143.4121797-1-wei.fang@nxp.com> References: <20260123022143.4121797-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0074.apcprd02.prod.outlook.com (2603:1096:4:90::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|GV4PR04MB11974:EE_ X-MS-Office365-Filtering-Correlation-Id: 38ac9446-da06-4229-f6e1-08de5a26379b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|1800799024|7416014|376014|19092799006|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?nVvpKd7VtnSWzd7w+MUihF4XGjdXNKdlOSrmkV/+F64/IKskBIflLLLPasL3?= =?us-ascii?Q?Sniz0GnLEEyezRF9gbkvnrbrEAFN/Bh0589ZSzkyBXBBfZNcLgL6TK9KduiD?= =?us-ascii?Q?DNOWjC2cnlIKwZSnfW4Qy85gmSIMfuzMaEuJEI+PObzrEiew3Ej6sbWwGPhz?= =?us-ascii?Q?/kPd/MztrR30N5DXelAhHTEzAitxLUe7aM8g0gcMlD4vYMk28yTMAuKIT93N?= =?us-ascii?Q?uOngqRQEp6UChxFGLHn+Dc1I3vOmgz1aygY02PfPKoVHijIsH9H74Rm/bs7m?= =?us-ascii?Q?5yG+7/egYYTUXvZEoCGkfYTFQn24bz3qdtsI+pbmtCQH5zHTJSAc5TlxYrrQ?= =?us-ascii?Q?DrEPjfmvZqf1QKl628hXeFaPgJUzrWlDEQmQQk/tJ7yTaS/Ybi1ypv26PRJ+?= =?us-ascii?Q?+j1lFu5+KO/gcihfplaeWy68W36i3zUHETS2zncLNj3wp4QFwinUGrSCyv2v?= =?us-ascii?Q?sSl4aQZN7f/LUD3HqIwQBV9eCc6h9yIsZyX7KUMc1+0pyN2v9te8hNCF4s9x?= =?us-ascii?Q?bmFHtl9SNloCZbf7U2YxSDMTJ/mcmM/8snfopwqudwt0/fiQ6cjkKSjISZbM?= =?us-ascii?Q?k1dlG+IaTgmeGh6CUJ8ih6D5A9vEyt0qtaddppqpyaOOOAriqflf4PViWAdQ?= =?us-ascii?Q?bibEAQk22Ie9QDoX3bA+oOIOLB0cSn5VofoPLgcpSzH9l+1jrLCKpBunhOJO?= =?us-ascii?Q?tUA/JFlrXpUQTG2IIkHhOFOQbJCtLUObbICax5cEQqqTNsMy5dhOHhYmfHOe?= =?us-ascii?Q?kbu/kEqMEYBFEPBWPVBLsxRqPrUlbnq1CT8IIq9ZUghzXCTcAqA8i32iWnsv?= =?us-ascii?Q?80dlKgUEyKtIH4HwOZf+kwUV5nCeLWn37+wGD9xK80YLJHBvXMzISBLZqt/B?= =?us-ascii?Q?xNBG3o3LDKbgmiqPBnM0OGjCz3JvIVhJ7WkjIg6zgndm1ZNTLNZFRwX9Usvr?= =?us-ascii?Q?coEHOli/Qs/Cwl968v3A6XaQj4qdgsOdGgxkJ/5gITMK1K+qZpT7+HxVfTsR?= =?us-ascii?Q?4P0tg8rfI73t1iZq0PH/TTVqPlcY5Eo1Aiy3MF+KrWl71Je58LkMH+VH0SVn?= =?us-ascii?Q?YrIu93FypU5YZZO0nqJDCSt+UQLLkOJp3rqd8plFk8qKaQJFvHiZThgHbvMF?= =?us-ascii?Q?S7fhCsRb38LDlUOTldfomenyRaJ1yY/oYq0twISC0FU4l5HCdJzR8mB0o8is?= =?us-ascii?Q?AMm2YkCeKKGByta5hY+kVgkylkG9TEqz+HrwPi5qKw8Nt7tbyLRic33gmhlg?= =?us-ascii?Q?IQf86lN91aWMIVKc+s0wjA5Wcou3PGAd/YLo5OQibw1fGJBloSl+ceUfA6Bq?= =?us-ascii?Q?l0UVrBWbLgygg7qc+a+1lUVWk0OnJmmPwo34A0rReHlNESyIyRlyrwA/Cy5E?= =?us-ascii?Q?v0BOeIwNgmSx+Whlc+ob6AzyNbIKs6LTzcta93RVriYGsX3b5d4oRei2+AwX?= =?us-ascii?Q?tAWg3MrqQhZuDLxi3pq04XzYBKCK8YFfAiretgkezI+zdkEtOjnLoOUqvt6A?= =?us-ascii?Q?1Z/tkAjGAamiGTzlyHiZBzLJmtgUDn1giVwdIyjIQlf9N/oSHYTLiag9t9Ua?= =?us-ascii?Q?x6oWDEJ7k9NdtoZfogNbHWqgd1JXMf1zamel5MzckRc+1ACNotEGS3XKNRiL?= =?us-ascii?Q?WsnluH+fYI3EoxfbPt8JaZerV92w7PndBWelrF0lo2PM?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(1800799024)(7416014)(376014)(19092799006)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?27NLtXhjAg242x1OOrIydYbe/I2k0N7jewPr7vjELWxhX3foCgAr9GoqOrMz?= =?us-ascii?Q?hgahio4ctoOT8JXf+d2tnnjdjeskBc1dP+gDOAPRfIZMZLEr24elsGXJKXzf?= =?us-ascii?Q?E/UPaIgz9DaRVXzCDuz7P/DIhqe0vk3xBU5+S+X/lG14jWKtqn/0n84Quwzt?= =?us-ascii?Q?8yP47Am4DegFHviF4jPub8LMlNQfsAibqQqRLhKcmxngWrOiCfh/T1KMmtvI?= =?us-ascii?Q?gcaXcLean/LjRxiVZWv1y66+KOOUprPRkLnKDB5ZABpOT9EHzk9u7kNBkciD?= =?us-ascii?Q?6LFxbnY7eb9RJrPM95aDQdLEDcybDRvZfOeWwT6Y5rdmN+iNjWl8Pkfd+rWx?= =?us-ascii?Q?02e5Yo40izqwq+23tmvaRME52q5uxpJPsohkDOJSZQFCJSdwJ1OMixeSpdRP?= =?us-ascii?Q?rHYBtbzNuLFegwJoRIGIKs6MaccHoGjfJWtlcWF9iZ1+xOUAH5pBg7I44nT6?= =?us-ascii?Q?RqWTBkB6xoet2JqI1NGkJLbOQ2h7Mmb5mRonhkdIXK1oFffJR2mP8GvN9ZJE?= =?us-ascii?Q?dyhwti/NauyoHEHb/BIw8NatEz94e1JUqdrRGRtEuF2jCE6PND64xW3bZo6M?= =?us-ascii?Q?L5umhA/erjyBCiKBa32IcJFgnRuaCSt3kiRTUU4+y0+2LljTYY+Lhg89T3/T?= =?us-ascii?Q?kBqQeqeeGiteWDqOjBQsIDSh8kovEykGe3iU3Z7EdeMnNjx84tW/rW+J4xKL?= =?us-ascii?Q?0HGJ1e1F+mH8Z71penn1fXD0in0rlgnUwb5X6tmJ7Ur500VBOqobZDbqZV4P?= =?us-ascii?Q?YTWqnJ1S3w1O0kXRVTU1tqOcyZC0PWXmmM1gaLwcbwdeIDOKvocZtc9vjLM/?= =?us-ascii?Q?T8ghxB6y0c1hXdC0IgzG4L0sqvqzLPAagq1lX9DgpXWkKysXonkiBckAi6+z?= =?us-ascii?Q?QrfkyxZQqyJ4Z+Fyq0qkxD1Bxr1rqvC4Ywc6sT1M33WsXz599w/SvVHBPPLZ?= =?us-ascii?Q?soUmwWWfE3ARchcmmUDYTOSZeKHs2nfGIQ7RD6uZMvOGhATOfNevyN7FPA/1?= =?us-ascii?Q?b6gXvWwpv5kpu2xlGLdxqP50GV0jt7clX4+yG6/dB00u8z8zEIqVEXTXHxnm?= =?us-ascii?Q?f5Zan+XvddE1qrXWk4UerVigVDSoyop8ym7nclWJzVTsnmjFP04WMnZ9Mm9P?= =?us-ascii?Q?Gs5EPDnncU7uZq53fNfGVx8uZARoypDtzrCmpIcPttw7uYgHZH2DvgCca2iM?= =?us-ascii?Q?mqRNPrw9ZsPTc4/whEMLWbbLZMaulmWol7oz86urBqZ8wbAyIZzvjiRsoODY?= =?us-ascii?Q?OuNvvviw4H30oCURWW5dC3EIC/cQL9yy5CZapJm83Col00S9sppVKr3LCfXx?= =?us-ascii?Q?XYHkIW4PgQ8TWFv1EVOnzoU3Fbu1pZpD3G3x+EtzJ7RTpj4SgrfItXPLlVnR?= =?us-ascii?Q?E9tBe8Jj+KsmdSMlPWTgL7hzVRemM10h86V470L4AhXjA7s4Px/9Tzk1vzph?= =?us-ascii?Q?8RVFJrA7nrVc9LF8SQuuqGxPiOWFOdLW/96wZiKR/MROOhS9KthB53WGxAB3?= =?us-ascii?Q?Nhm/xlQd/IVk3FTSWg3qdPhkg9v0zq313zSTB8+4hTXf+MY9tt3IPb787g8f?= =?us-ascii?Q?fbjARK9GCimtIVkgzX4t66q2J06KZFLiL9R58QJhs+b0J9AvxTpvN1eJIVVP?= =?us-ascii?Q?IvaOclo8ndOqKikJwsBeYl94jNNedZTV5KF2+rXZKVGKgshyIkoYhGBZTuqN?= =?us-ascii?Q?NSaU7Jlw4Ps6OHF4Fzrd6LoznuijUExt0XssDgIQ+bTyC0I1At1sq+msXN3z?= =?us-ascii?Q?to4qmjfoiQ=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 38ac9446-da06-4229-f6e1-08de5a26379b X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 02:22:12.3612 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: vNr2KMRk6VQ0WnHXpbC2Lk8V2kJ0+D1MZfq8hNrBivIJzv4DiAkKgGINSPFweVEewmGfrnHE27Pc9mN2c0R7Ig== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11974 Content-Type: text/plain; charset="utf-8" Extract fec_rx_error_check() from fec_enet_rx_queue(), this helper is used to check RX errors. And it will be used in XDP and XDP zero copy paths in subsequent patches. Signed-off-by: Wei Fang Reviewed-by: Frank Li --- drivers/net/ethernet/freescale/fec_main.c | 58 ++++++++++++++--------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethern= et/freescale/fec_main.c index 85bcca932fd2..0fa78ca9bc04 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -1746,6 +1746,41 @@ static void fec_enet_rx_vlan(const struct net_device= *ndev, struct sk_buff *skb) } } =20 +static int fec_rx_error_check(struct net_device *ndev, u16 status) +{ + if (status & (BD_ENET_RX_LG | BD_ENET_RX_SH | BD_ENET_RX_NO | + BD_ENET_RX_CR | BD_ENET_RX_OV | BD_ENET_RX_LAST | + BD_ENET_RX_CL)) { + ndev->stats.rx_errors++; + + if (status & BD_ENET_RX_OV) { + /* FIFO overrun */ + ndev->stats.rx_fifo_errors++; + return -EIO; + } + + if (status & (BD_ENET_RX_LG | BD_ENET_RX_SH | + BD_ENET_RX_LAST)) { + /* Frame too long or too short. */ + ndev->stats.rx_length_errors++; + if ((status & BD_ENET_RX_LAST) && net_ratelimit()) + netdev_err(ndev, "rcv is not +last\n"); + } + + /* CRC Error */ + if (status & BD_ENET_RX_CR) + ndev->stats.rx_crc_errors++; + + /* Report late collisions as a frame error. */ + if (status & (BD_ENET_RX_NO | BD_ENET_RX_CL)) + ndev->stats.rx_frame_errors++; + + return -EIO; + } + + return 0; +} + /* During a receive, the bd_rx.cur points to the current incoming buffer. * When we update through the ring, if the next incoming buffer has * not been given to the system, we just set the empty indicator, @@ -1806,29 +1841,8 @@ fec_enet_rx_queue(struct net_device *ndev, u16 queue= _id, int budget) =20 /* Check for errors. */ status ^=3D BD_ENET_RX_LAST; - if (status & (BD_ENET_RX_LG | BD_ENET_RX_SH | BD_ENET_RX_NO | - BD_ENET_RX_CR | BD_ENET_RX_OV | BD_ENET_RX_LAST | - BD_ENET_RX_CL)) { - ndev->stats.rx_errors++; - if (status & BD_ENET_RX_OV) { - /* FIFO overrun */ - ndev->stats.rx_fifo_errors++; - goto rx_processing_done; - } - if (status & (BD_ENET_RX_LG | BD_ENET_RX_SH - | BD_ENET_RX_LAST)) { - /* Frame too long or too short. */ - ndev->stats.rx_length_errors++; - if (status & BD_ENET_RX_LAST) - netdev_err(ndev, "rcv is not +last\n"); - } - if (status & BD_ENET_RX_CR) /* CRC Error */ - ndev->stats.rx_crc_errors++; - /* Report late collisions as a frame error. */ - if (status & (BD_ENET_RX_NO | BD_ENET_RX_CL)) - ndev->stats.rx_frame_errors++; + if (unlikely(fec_rx_error_check(ndev, status))) goto rx_processing_done; - } =20 /* Process the incoming frame. */ ndev->stats.rx_packets++; --=20 2.34.1 From nobody Sat Feb 7 17:41:16 2026 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010021.outbound.protection.outlook.com [52.101.69.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 169EA364E8D; Fri, 23 Jan 2026 02:22:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.21 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769134972; cv=fail; b=DBE9Q+JNyOutVBdW8E9bNOiPRhyjiXIKOn5Y/T7oK2oQK/RjYf+yJ8cO98nfCCPHfvbI52bxUvMONBipmJXIHDqnlput40+YknUbTr2C0EOnB2eKkksEon3rsTKP749eMUqpLB0OmAQ6EpRZky4QLb/vh99TuQHZvMdFyzOI1/s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769134972; c=relaxed/simple; bh=hrOXuo72j3c6ITj6huu2FimsWjiiEBCzUo+9DyENXR0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=l5OeE5M/aRxqwIVOnrETxkJtM+mnVyoFkxF26aJmGP+Hb0I7m2NFUEDj2M/FO20iVlXw6eP35MD4w8DA34PMLdMSS19zpYIWqYIStA87nVDXgJ+ydflPsOfnDh8jr7QY/4KUq9/FoyfI86E73TXxJ5tjkECgdZTniKB0SGEY1Vc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=RlQExZau; arc=fail smtp.client-ip=52.101.69.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="RlQExZau" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UR0O3TOiGw2VmOtGdqenGF0P4KxOJCdVc+KQEPwkRh7wuCVW9NLhKsjftJtA4QRtgJsoZUA/SqwFsf7PlDCQR72OrP1RnibkSyNvbi+MCtPTSbvE934hLsayWFBO7R6kz+P9aCK4mJsaJfHwFML6w5VnHcgdx/ZWwQbVdlLKqau1ny3nOesxsh/bP7I8ROND5BA7bPI3fEA3wMJz7qpxAIpyY8R/L2NpbTwNXf52OOOjLANXHlerFORoC6QWGE/HW7fpMpdGymlt3aTi0+BvHjlcrEvdYH4pao8cDhQkaHoN0B8UOOP+nLO9T2titofA+9HXCo8zXFQ9oU4mH1fWkw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=CUuI9yxuh89Kp3lTnrvIy34OFS5EOA5JgUX8IqWLaVA=; b=qiEA7HIG8HuuQ4Yn/b0trj179i83e1s3VuqYQ1I6o9txuRJAFdckKRLi1G4pJj7suwz6oS/BegXfbJoWsFPENtdALan2VGmV2+31+Nj5k4GxZ4HXLtodDLHOuPOucYizdL+l+J3WrzqlU0GVhq0p5jt0PLq10Y6hAV+vHir5mWsYWoK4v1FFiA/IkLyXVmuFJjHaLv90fqeUTsdIjlXetpc2cVlU8e+Ya7afapIdcPvRQr6xWwELoDaevpw0BPqsnPUdBOMx01VOoM4anNI26WXtjR+/tCVoena8JGYY4lPoGeO5S5i7nb+pguMad8TgaP7Bni3HDNDjf7HwAsrvpg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CUuI9yxuh89Kp3lTnrvIy34OFS5EOA5JgUX8IqWLaVA=; b=RlQExZauoj2HOQu1Hzl+Kku/Ho8Q5g/kIH6q0OsGwwKAWHUfjAgM+wAB+9b/1rqIatDXpx4boDcgU43SDmiWCT0RXIgRCpZ9KSk4o9nWIY5LY3h39ICZWUE5txddKTVoWFbGJKIfyoqxo1q01PKBCuHrwaqO1H7imM1E+2838CeVdJUj2X82zY1ZYZgEl6ukTom1SfAv1LekLu43lSJrLHSwNfMvfidG2jpABG/YVpCC2kjMMOSBsF2hntBAXfMVQVJ3sDdpruAB8awFZ3xttvDRcmP0+HCpyTHkHFhZngfRiZh4zgoRCpyhq0/qmpRlRQ5SpNUc/kx3G8cv6zU5Cg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by GV4PR04MB11974.eurprd04.prod.outlook.com (2603:10a6:150:2e8::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Fri, 23 Jan 2026 02:22:17 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%4]) with mapi id 15.20.9499.001; Fri, 23 Jan 2026 02:22:17 +0000 From: Wei Fang To: shenwei.wang@nxp.com, xiaoning.wang@nxp.com, frank.li@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, sdf@fomichev.me Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, bpf@vger.kernel.org Subject: [PATCH v4 net-next 03/15] net: fec: add rx_shift to indicate the extra bytes padded in front of RX frame Date: Fri, 23 Jan 2026 10:21:31 +0800 Message-Id: <20260123022143.4121797-4-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260123022143.4121797-1-wei.fang@nxp.com> References: <20260123022143.4121797-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0074.apcprd02.prod.outlook.com (2603:1096:4:90::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|GV4PR04MB11974:EE_ X-MS-Office365-Filtering-Correlation-Id: 7f93e093-fc31-427f-a0ec-08de5a263a70 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|1800799024|7416014|376014|19092799006|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?kMthG1vB0GwJvI0cjEmeU9+pyjdHEXY8rCpzEcQAzmpeueirHxf7EAPut4Hg?= =?us-ascii?Q?0S5OGb+UmFf2JbBNjv8oe7h16t135fYFMyYXAArpllErpb++oTxMDK8X3kR4?= =?us-ascii?Q?o7oR2KQnjEx3RZIPLjV9mrz7hugiD1UcGAd6zJPFs+8E//mR0gP/1Hu2BPlJ?= =?us-ascii?Q?m8Wvg5kVr/OESi7Tz5QLfcQSua3Tf9PhqTSjwQ26sQCmlB9jqBl5DE4LSkbw?= =?us-ascii?Q?VSOZWOxIynDVVjDAkyDGMFgD0K86rSMyxwQtX3uUX7gkm8FKyc/boxHsSBjX?= =?us-ascii?Q?y82WdO5r1JFsgD2s6WT1Pa/T0zpMMN4FpCHPjjS+ZmRkkkeLuWR7cPCxSwWR?= =?us-ascii?Q?4pkjIoskKZX98XXKw3SUg+9fOzM0Ejgk0uANjjWKkng5mZX++TT2/MiFdaoK?= =?us-ascii?Q?kBvrEys9OcGRDsOOAG/RgSvARE9SP+wU+bG5d6AhQrsUj1C459uR7xOLxpqp?= =?us-ascii?Q?BsFFCh4AEa7KsLYBgQLS/t5nt2ZDR4NCfvRkvr9nduclP9rI5GAUtbuaAyHy?= =?us-ascii?Q?6032YbxhA+16G+I211FIyqIiSAzDnBTe9feTEaErwQyWSNhRJsduh8spZM/p?= =?us-ascii?Q?4qDSWEydxKkekVn/1UDZOurY/LZ4sUWzf/nUI18PG88Fxa/+RJSpGzgNwAM2?= =?us-ascii?Q?o8oXxjVQr+24InFKefqN13/jgoFZhYRZlSeVJdkvtGpdaCKChJ7KWsmAQ3Oz?= =?us-ascii?Q?Y3yDevOoSkoYiLlFfDbFTWrwv0P9jRV7n/iqRdDagLIdI62/6/tHYZPzNRjM?= =?us-ascii?Q?i26ZcgcZEbd6k6pkyAyo6IGGp6hEAk1545PLy6NlD7dERczitQ834/rCBONi?= =?us-ascii?Q?sJDlu++PVph24zVVb57w+lVHKfIcHSxrVBePdtS3GWIUMpx+pSMPaWHeo1Oj?= =?us-ascii?Q?9HYQijwNwVp4QnVAHMUl8ejr8h7YhwUlUOaVP5aR2PadPXlGmjipIYcbNRx5?= =?us-ascii?Q?NSpFchcE/P0gldnXRFnqj4ecSNfZLusxV+1QcQiqI6p+A6fl+Fr+EDbDZJBO?= =?us-ascii?Q?DxmCHoaqOy70rHfKmEKfC96xu3Dy2GDWfWH1JRLS3XMOeskZo30aREd1px1O?= =?us-ascii?Q?kJYdoZ5q913uLYWNAu+UWuU8l3Vz2F2dxwYjKfgdSrBbxDBujD4iWT8JuNW3?= =?us-ascii?Q?iGcAmCf4hxKSvDay0xxDrs6W4rAdHdbe0jR7VYq9nvMmnXAZP1tVGugoievk?= =?us-ascii?Q?lYspDMzGZNUpYBrX/L5cRIvnUimOpJ+vJSaB+ybC2FqkX2e8YpUyBu8Im08p?= =?us-ascii?Q?+h1O5s2vFyInufCXonmEebAYUSgSOHa3R42MdU6TrV0sCgMPiNpEkLbJOnME?= =?us-ascii?Q?Gj3QgqHzAZtTn7Bm1jP0VGRXG5bgk5AdUl06zYTav+eKxv3BsOCJtgCaYcc6?= =?us-ascii?Q?SqJm/QeWnrTsSOTRTQ1DOiSv55rgX57NjCbzPReQX7RNlFX4yhke9ZyDmRqb?= =?us-ascii?Q?2ebrGH297qbW303Mq3kqdAXiftLe0q1i4F+MJkHInJKaMA3Oa3AE7UK2Szo2?= =?us-ascii?Q?w65AX68do6JtElwqR5Tm6+QN4dy1JR7FgSc3NX7f8jF7bNBuQjwCwNt4SQgL?= =?us-ascii?Q?34i+zQcYnRxqxirkMWHUSLl7z/TEPEel2ZNbj/EUQ8hxwW56DTdanPZIlokj?= =?us-ascii?Q?5n4BN/ZPhbyM5jzJqVLAkF06PHBsKsiJiYiC9tDSyhOf?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(1800799024)(7416014)(376014)(19092799006)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?UF637dnjrOoOyBHVpPaEw9ReAqsbM8CJztldwYYWMcuyGyvhoSILd/i1tqGN?= =?us-ascii?Q?SQfoNhER8a+V+g1xOn/pxWbmgPS4nqhJ88qKyD8YmbC8ogcmc91j6lV3o8+L?= =?us-ascii?Q?URZIdjvcxRIggXzgKFH643DM736PpLovlzJGViyPKMXtN9T+KfXDNgJVI56+?= =?us-ascii?Q?Jq4aABQmgSiECuTEieEqlV04XzY3Vb7dpZCResY/cXUQRYbhqe191R2ESbv3?= =?us-ascii?Q?rXx0ZNF538xbQL9WDLU1s8y7du+4o2VkTGTFpR+hGncUkkMbIL9nF02uqpk3?= =?us-ascii?Q?HwUGTLlMrJrZA8RtIIfxN72Xm46lFuBY7W8MCNsc9VXF6QNXUJZ4a5I/IYBJ?= =?us-ascii?Q?+d23wwAQ7xyul/9z3UxxR4ZRoISQtvrEPwOvgo+0/JbhUJXi/6ITmQpTGtm/?= =?us-ascii?Q?LYHNnOZJFKA0fCTd7PF8YVlqdaB8TWVHSXK+BcfXhFcQtftZizPz/EfqAieF?= =?us-ascii?Q?WYUd/D/3wow7462Jic+IHvXm+FMfRlfE/HF2h/5QOpAno6pxfHP3k2JKin8D?= =?us-ascii?Q?ezevJRI+rYT+y7MdVZBfsjF0EF2SPNfV34yuRc6fMbmNQGT0jK/4GPMoIy/w?= =?us-ascii?Q?U0HRd+S32Qj+Zzv1ug9d3pInEWqoLHquRexFqiyMxmx7ffZZE/t5KeUai3GH?= =?us-ascii?Q?8EO2kSj2V1aJw3kJRuJbTlN/7BZrQAe83chh9JHgGY3TWt6z3U0L6M9QysuY?= =?us-ascii?Q?KR6vt0Lqjx3GXu0MIkvVwc2SFBlU3VOAbFIHhN5I82tZ9RHDQ2JnWdZTotzE?= =?us-ascii?Q?lYT/ENPgq74AX7nHHP37Jm854fbwG3Pb9k20qlDO0YrZaQzeZv8ZpcjnO7bf?= =?us-ascii?Q?pVnapqV1x9N/b5nBpyQjhOL0hB0n4Lgi5wvR2+ulYG74WQ7BsX/15bhu+3Tv?= =?us-ascii?Q?Q3WZfHk2UwCcUDu0C9f3FFpk2bRWSa0ChU7Nmmmz4vdSeqotGnia8bJHFTjf?= =?us-ascii?Q?ed0F/f5+5QRTabXZAnLDxi2KkEvuQH/NT8g2MEGzwRVBC1CjjOEIpuIwncPU?= =?us-ascii?Q?8VkXpWz5jXul8fJHexDtuehJmjioyMcesiF7tIuIV7o8uCxd1UooHYRw2v8S?= =?us-ascii?Q?yUwdsqxU/KPu6vemWUce5+DUhFxzmb1CcB5LhuMkjJSVULTgvQqMcEIUjloH?= =?us-ascii?Q?EXYVnMpCJOduPnFTNW6gGLq+zH5lboHuNsAOWoewbG77GOWjrkMTaNFs1p0i?= =?us-ascii?Q?XmryF+JDMrs/g0QbjgkEcfyndM7R7sv5J1kO32lORqxSopgS3B7O4bJhpxj9?= =?us-ascii?Q?nOQDjoWuML64xrYDHirHVQeUyEA7QMx+T6i796OBbMg5t4eEpVdbh5F8ns5G?= =?us-ascii?Q?/i+1jm/hKCXD3Z7rHFSi330Cuo5aOQu4+SpvMjrwWtS0hARFR8y6lUOvL643?= =?us-ascii?Q?ise4QmdBan2P7oxFdR0+RAfUpiPNALvrmz5Dip1t7pFLI0zO0F/9GiF1bDWC?= =?us-ascii?Q?RA3mkoEinuOIiA/UaIXuznHLaQc7Fql72EZ9KQTqPu1mlrbDqxAGjvibNjaS?= =?us-ascii?Q?GXAqxcRxGIMDmxHsYj7QTkpA3xqFtVWdJD9XtjwEQlqS/L54NHFC4lhkVHSM?= =?us-ascii?Q?Y0+JawZm23zBkW2efffXsiwCf8u/8xFGclzL88/X0tY6gk/5pUNE+Crbo+gn?= =?us-ascii?Q?DfFG3K31HQ7Yle4i3kh4LghJ4zXwFg68+mB2VjnysC0moGSptD3ZtC5p6Mzi?= =?us-ascii?Q?2JJBZmEX1LYTq2JbAAflmQFIFPTawRj8BctAnYWlqBuFsJb7nrcDKg+sc1EL?= =?us-ascii?Q?i2uf3VUpMg=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7f93e093-fc31-427f-a0ec-08de5a263a70 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 02:22:17.0294 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: tB8XUPl2l5p5UnVPyFKHvLd1zIgeY/zTRkNn4YPAvLcJhTvI2GCFKHIxMqK3FRUr3str6S+IzoLtwDvYY1zp9A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11974 Content-Type: text/plain; charset="utf-8" The FEC of some platforms supports RX FIFO shift-16, it means the actual frame data starts at bit 16 of the first word read from RX FIFO aligning the Ethernet payload on a 32-bit boundary. The MAC writes two additional bytes in front of each frame received into the RX FIFO. Currently, the fec_enet_rx_queue() updates the data_start, sub_len and the rx_bytes statistics by checking whether FEC_QUIRK_HAS_RACC is set. This makes the code less concise, so rx_shift is added to represent the number of extra bytes padded in front of the RX frame. Furthermore, when adding separate RX handling functions for XDP copy mode and zero copy mode in the future, it will no longer be necessary to check FEC_QUIRK_HAS_RACC to update the corresponding variables. Signed-off-by: Wei Fang Reviewed-by: Frank Li --- drivers/net/ethernet/freescale/fec.h | 1 + drivers/net/ethernet/freescale/fec_main.c | 21 ++++++++------------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/fr= eescale/fec.h index fd9a93d02f8e..ad7aba1a8536 100644 --- a/drivers/net/ethernet/freescale/fec.h +++ b/drivers/net/ethernet/freescale/fec.h @@ -643,6 +643,7 @@ struct fec_enet_private { struct pm_qos_request pm_qos_req; =20 unsigned int tx_align; + unsigned int rx_shift; =20 /* hw interrupt coalesce */ unsigned int rx_pkts_itr; diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethern= et/freescale/fec_main.c index 0fa78ca9bc04..68410cb3ef0a 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -1799,22 +1799,14 @@ fec_enet_rx_queue(struct net_device *ndev, u16 queu= e_id, int budget) struct bufdesc_ex *ebdp =3D NULL; int index =3D 0; bool need_swap =3D fep->quirks & FEC_QUIRK_SWAP_FRAME; + u32 data_start =3D FEC_ENET_XDP_HEADROOM + fep->rx_shift; struct bpf_prog *xdp_prog =3D READ_ONCE(fep->xdp_prog); u32 ret, xdp_result =3D FEC_ENET_XDP_PASS; - u32 data_start =3D FEC_ENET_XDP_HEADROOM; + u32 sub_len =3D 4 + fep->rx_shift; int cpu =3D smp_processor_id(); struct xdp_buff xdp; struct page *page; __fec32 cbd_bufaddr; - u32 sub_len =3D 4; - - /*If it has the FEC_QUIRK_HAS_RACC quirk property, the bit of - * FEC_RACC_SHIFT16 is set by default in the probe function. - */ - if (fep->quirks & FEC_QUIRK_HAS_RACC) { - data_start +=3D 2; - sub_len +=3D 2; - } =20 #if defined(CONFIG_COLDFIRE) && !defined(CONFIG_COLDFIRE_COHERENT_DMA) /* @@ -1847,9 +1839,7 @@ fec_enet_rx_queue(struct net_device *ndev, u16 queue_= id, int budget) /* Process the incoming frame. */ ndev->stats.rx_packets++; pkt_len =3D fec16_to_cpu(bdp->cbd_datlen); - ndev->stats.rx_bytes +=3D pkt_len; - if (fep->quirks & FEC_QUIRK_HAS_RACC) - ndev->stats.rx_bytes -=3D 2; + ndev->stats.rx_bytes +=3D pkt_len - fep->rx_shift; =20 index =3D fec_enet_get_bd_index(bdp, &rxq->bd); page =3D rxq->rx_buf[index]; @@ -4602,6 +4592,11 @@ fec_probe(struct platform_device *pdev) =20 ndev->max_mtu =3D fep->max_buf_size - ETH_HLEN - ETH_FCS_LEN; =20 + if (fep->quirks & FEC_QUIRK_HAS_RACC) + fep->rx_shift =3D 2; + else + fep->rx_shift =3D 0; + ret =3D register_netdev(ndev); if (ret) goto failed_register; --=20 2.34.1 From nobody Sat Feb 7 17:41:16 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011034.outbound.protection.outlook.com [52.101.65.34]) (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 266E9369239; Fri, 23 Jan 2026 02:22:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769134980; cv=fail; b=C/HKD1FenxI50Qw0xZp/jqnHfb2w3tI8rsDvwgmVsgpcjRBNarVWNODd/9WGByxKrZ3KBocihfq220sUb5MR2Y1/z3ALzZUUxXZNqpzBxNfsmube03d01oegPxGUhwLKszOcTopzfduGEzEpvElZpzIXXcT6OggDN60FO9gTkXc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769134980; c=relaxed/simple; bh=fCBpTFMXDGCp+w5Gla4zwAqz7Q7C4omwxEXy3xX5jv4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=NKj0b3kWEegtVk4brJtpLQgYjufNFGkQXX+GrFS6YbIUbYMkUlszl+3oakrjIqQlz/SPK0H0qBy0OQKQH5s1M2vNo6Q7JqEd5T9fdY+Xht+el6abSEPjt7Z0v2uZX24sYbj+OJj3imVE1uRqXDT1FKclt+RQtYqYm5eOKLIp03A= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=cL79vBMg; arc=fail smtp.client-ip=52.101.65.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="cL79vBMg" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=msTjMUZKxDxqMi9uzMTgp5gvYEbie7jgs/aGi2Ap70hbpamW338oE1FK/I8Y4w+GooQFfWGrE6+l+Yn0GJWH5D65MgSxhjbkOoso+G3Jc1TiU1eTobF3UBS59a5+sCUXalVS/1cnfORTTaX8S/6lCGttJGFW0i1/0wg1w8KREkkJ6NO4S9Bid+7dNcwiQhGF4TZ2QWPyZLAKo9ODO9GwU8Bf+T92JoQG3h7bP4cgrnCKZ6Kukrz/LRQcKYs0uBuvCg1hxywK5nBGNCiDyrb01+kgzqrOZPErIy01GBlxy/j6nGAU12fQx+Dv5OQCWIzNo4HrZP1QlemKYXOfcN65AA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=+d9WkCqdg7LMSVp1VUabUHYeMpgZtSC/5qmDRiHfrCo=; b=sbeHG26CUMro5AcDUZWSyi83FetbJqY7v05M6vx9PUA4/mqwDzfGIOfm1ujT+VazZr65uPkBU6L6dmumT6DFpmxAyWg+nFOxf7uYJTMB4V4Hk64s64QrMEj5cMZl/HXU7ys6H6N7jFH/BGRmvKLC1e+0EWKtlrO9P4cByBCcGmzbPXDx4cfNVPgR5yFnbu4Lui8m4l09e9Ohnye3ik6rbxaYiJFdsi60bJaTgxhlFere0tBEI7v6Pmzrr/xOm+kX5sAMQY2XTzWdMphSkKU3761C29UKr3qpe3TTI36fB7FNqApeuhFHtydcwBw/M851xg+iZpSM/PXRcTn3hTHVuQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+d9WkCqdg7LMSVp1VUabUHYeMpgZtSC/5qmDRiHfrCo=; b=cL79vBMgE3q+TKhdE/oFwq45Y/kW9jEir8nr4FPolvFFqb/3R/EYZnvq1GTnBfvlld758vSKcULl7BLtv0yvs4iGr5Oe0iRAg1+XbyWgm+8XwGwZRakhzX36G33RBdcmgw+xSwXoJZVlccxl0N3Evr/99GrMd7fCIUZs7xTNLVVd02q5pcs729bW2h/Yb37Upl9ebAW7+sNF8PR5dFVtDD6GMahpnniGu0KLzuKxidEyDlI0mYKCo0yTJkU+xE6qDyVi4/txK/FxWEy+CZBocYUi1l/hXfmQ+m+0YDsBWYFdbsyS96NEk+pGu+3sSMka8SWVkcwkzvyUxPcTtmMDCw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by GV4PR04MB11974.eurprd04.prod.outlook.com (2603:10a6:150:2e8::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Fri, 23 Jan 2026 02:22:21 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%4]) with mapi id 15.20.9499.001; Fri, 23 Jan 2026 02:22:21 +0000 From: Wei Fang To: shenwei.wang@nxp.com, xiaoning.wang@nxp.com, frank.li@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, sdf@fomichev.me Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, bpf@vger.kernel.org Subject: [PATCH v4 net-next 04/15] net: fec: add fec_build_skb() to build a skb Date: Fri, 23 Jan 2026 10:21:32 +0800 Message-Id: <20260123022143.4121797-5-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260123022143.4121797-1-wei.fang@nxp.com> References: <20260123022143.4121797-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0074.apcprd02.prod.outlook.com (2603:1096:4:90::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|GV4PR04MB11974:EE_ X-MS-Office365-Filtering-Correlation-Id: 2f511ccc-5036-4551-4c98-08de5a263d31 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|1800799024|7416014|376014|19092799006|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?zcXejbeB5oN5njkoTPctvxnMDkXvKPXBI4C9vbLgG4tJASTyhYBUol7jz764?= =?us-ascii?Q?fMl/wAkeMHqY9KzYpaQ438bJWSzhIRMn8NMI+QR5ODNl4uqdTszeg8ySLeKW?= =?us-ascii?Q?jsl5g+WxIzd6Hs2KGHXHXfPTUaPmmRarRpwFkaCWR5yT0X9XAinw67J9bd7k?= =?us-ascii?Q?HUN6bPQmFyMxgOx0yaz3gChUnJFzBF79M5BGJxtI/ojWeCWhhNAe2RRXQtvX?= =?us-ascii?Q?c96vS4tb44TI5fBn9lmbUsw7gKN7yLCqOxE3hj8dx9TfZCXS2E6JG0raFZAR?= =?us-ascii?Q?N70TSGTL6lohBHJs4nNy4+/K97ZHqS73OHT4HIbEN8qOWs8jYo7qD5LIG8hf?= =?us-ascii?Q?IiuIxYWd9k/jt3GYZFpachcun29FE6QB65cjkWkLE7ypf3zhEcRpAFIQFBBz?= =?us-ascii?Q?I7FWiPAa+4ZjfkYx1gI7eSgcbcDbSrze4E+kSdOa/P3QjOKnZKemZjMJulUS?= =?us-ascii?Q?WOMORm6GbFqv9Kvd87/zQgF5YEjdoF4vC+x0MDI07UkWfVM9AGqCLFBekzAm?= =?us-ascii?Q?Qo9PewJhF3SPk2Zn4kc24KlZrekvJZYclYSHJv3q2geAYIHp835i6tV2zwhJ?= =?us-ascii?Q?zx8Sgbqd2+yDu03mWpBpOGLlxLqGncTdEx76Ntq6HLeKXE17Hi9FlhZ1wPUP?= =?us-ascii?Q?cUMh/t9yDk/TPPn0pqbh+hyB0eCqPiQ22qw0cgxjj9hsjryuFnLSLt0nRMzB?= =?us-ascii?Q?ft8zgMLuHTzArjNOUf3UEPUOj/7JLT32y6DYinVMS3hHB8Byb/5mBtF97snW?= =?us-ascii?Q?uJi35XkvORs0iuEsA0mDUDCUHK792FF3kFnCxZSRghbmk+5/BDTlQySZy6y7?= =?us-ascii?Q?1eVdXOVZHAFq74U4ug++lGsJalYqAbf1j8Oz/kWtULRpt1FhFyJ1uoomhTAP?= =?us-ascii?Q?tGKnjXlg7pSjy9ecIezeGkZX+xPiKFjjR9Xc06057/kWeKfwIQm9X6SIzKL4?= =?us-ascii?Q?pWl9H5I8USOC5jKLe6AjhoM8vjulQ5csa0vTFuQqm+hedUdPSqq6Il9k/fct?= =?us-ascii?Q?vMowie05jdyUyNIIUGfYT3RnB5GabFt5MSSinRoQq/4LSy2IMlR4r3SDw9vR?= =?us-ascii?Q?u3UuXRsA+E0FtqMXGgA7yDjPA5PVaqifbPWv2cLHQ18rhg0RrkgQjkmZdEvt?= =?us-ascii?Q?QcP7WaZGjzzplLW/PM67HqyxtpIWBtzmlW2pxkFJzB4scuATsL6pZ762VERJ?= =?us-ascii?Q?gUIOZ6XYrV+5iU5EUWn6e9uLBenWRJsicX+Ne1k6Ljnt/kHSA/1cJGrHW1We?= =?us-ascii?Q?QY3BEi5AFnCl0M5Jdf8LhLccVhz9X3nIkklw7w01ZIGevesMZi4cjUt0256m?= =?us-ascii?Q?MzNN6JCjFI+S9yfwuiy8B06JMSvxiIrX0F8vew0wc4fOTCwOtLnGX3u07IKn?= =?us-ascii?Q?ar4vtCjn7Nzqn0kD9z7N8rFv9LpbtgRrz2H1ZQkE/jTk6y94d4k+kpoWf6FQ?= =?us-ascii?Q?mgutiPbXh0OnUXK3oMIYAwvwp8tXqLGPBeXKY9v578LjVZKjVlpC/rb3w4bI?= =?us-ascii?Q?gBWvrQfZoCAA8AOXsNobp4Qey6bYySgRts7WEdMkwrSIauZAMf0ll4WAIWuE?= =?us-ascii?Q?dueKjSHFmGH0EBNhz58P2PF74TUuIvk3dJTaKBu6m5xFFl7ST6XmQyExsnYL?= =?us-ascii?Q?0SCaaWA00tBVVILc9g48A5s=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(1800799024)(7416014)(376014)(19092799006)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?87JHRyeuv6UQgxnOZSQoo4J+75wFm9nhQCtt9msGeecxB+BjCz/yJyh2QcjF?= =?us-ascii?Q?aL4R3n0uEngtHof+NbaSoaVcKT4iwHpwOI5ygM5OGaZxyffXlnlbQmprgNR1?= =?us-ascii?Q?RBDXmOQcYLjBQVsk9uzgm2f162DyjwSDitMg6dhxT/5fLO9oAtjesVNB7esx?= =?us-ascii?Q?ssNpBLhxQJ6I7tFKbVKeQJyGH/WxhPxNU/2uXm0aKq3qO6itxVPuTwoFQeAJ?= =?us-ascii?Q?357HwiDaFlwvjaGJ4yuquuF137WJ4rfhX8KtH8qXZajn0pI/BNftuTIHrEcd?= =?us-ascii?Q?HTMMfeqGQPvOqfg3hYlYzc4CK9uakOVxmgPuIb9I8vr+QHGSQSF+3HMM9wza?= =?us-ascii?Q?foztJu9EgU94zORIr74wTWVPLmRu23WtW7HdboVYMwb/VvydpiUt+dWwENF1?= =?us-ascii?Q?ibSUKTLsyUkOVMKxBagZwGu9ZlQUYTKwKmErF3fkNzvrEO72R2qAm9Qy29Ms?= =?us-ascii?Q?qF/CtQQ5vFW5wz6bR5A/szSEG4/U1GYBjhSdSMqFIq/3GDgRsqVVtjbB0z9w?= =?us-ascii?Q?dYdYBwbRFPvwX57CXdraA29EA5mb9v2PuEItQ7+ICbalX6DecfRCpeoQ2m8B?= =?us-ascii?Q?G31N9CVaFxMSTnT9VDvbxCTr9emEdPa1b+FSiv8y07Qw4KgGrs7iX4yhhUXO?= =?us-ascii?Q?V5Y2gSsyvxy1xj8UdcDohrTY1ulzq8O7c0WN7dfDQDZxqnu/GakjaicIuFfH?= =?us-ascii?Q?lCTXTe9WYxMnGsHFzwbXmbcWfWyZBl41Qdjo+b0Vu1BI3Eu1LtJi5MWYHxzZ?= =?us-ascii?Q?dHd/ZlMZHffwWSx7yeHy8ZpfmwHlHfrnq9OezGFEmns6kAlmh/l1tcyDlehl?= =?us-ascii?Q?E8zGc5WetMJqA+OAFSUSn8ofkXYDU7Uo5A9GwIaiy8DLw9Lz3voj1pybNVf1?= =?us-ascii?Q?u9rvaVqVcBwIHhUbw97R2UrlZyLOH1kOkqDXYik6wZpKN/HN1xIZJQzg+b82?= =?us-ascii?Q?Ip9NRQW26TtRNnD5U+hxXf6pXaAsd9dSTmaIT+bhAc5jEJLq9kQc8DXqzGMO?= =?us-ascii?Q?N2E9NMaspLhwa/XjBlCSrzh/wgoTkthhHTh9NkDzxnsRUKn1nax/eT9fX7Em?= =?us-ascii?Q?yZp5AOCTDUO4EFHUlf3D9dTlhq0343nXnl5+HRwx4VWqfE1E8eM1v3N8pKBy?= =?us-ascii?Q?nUn1uWhsNS1TL8FwIaQmouY24uLZ0hTqt74oRn2oBDfYT+8AdRaS+TaTrRV+?= =?us-ascii?Q?+6PiaNP3T/i+pEYPBLsS4eh8TQ9Rws9Ovq8gOBz1l1zst67/Z5vOQL78DATz?= =?us-ascii?Q?GsChBqWVLEKiEHz/d6rVa6+sXlgR5He+U96aD5W8eve5TYOJVLd4baHD378G?= =?us-ascii?Q?gK3o9+Uu6PChWlhqkRx3NLM0ynzEKEx014GyfHp8xsI9xkHf2qs1gbL5xEO2?= =?us-ascii?Q?iM8O70TEAp7J66e3msD5ud3W5xRO/jhYaqC8zFhtdBre78nyAXFH1b4JFbK7?= =?us-ascii?Q?zlID2ZFw72QcMPtpFYW4QwrNfTmv8pS4nAka38heFizjf1arPNwQz+r2kGid?= =?us-ascii?Q?uG+PBbCGSAQUctr+zs6aM1VQX4M8VVyyFJUKt/iT40Rjr8dCUBSVxrgexCV9?= =?us-ascii?Q?y7W/baBQQin7pfHH4Fpc6wroYNmf2lwC027AIaBrxy/jiVrT/sDlUguRwrLZ?= =?us-ascii?Q?UiH83C7VJtAbexNLGWy4CU6FSz94GDEINFO1e821yTEwUbA/M2cazBFD7IIC?= =?us-ascii?Q?mYo9hmxASG9j4QgyZ2t+jL605+5Lph4ayb0/qWpEeTE89leu?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2f511ccc-5036-4551-4c98-08de5a263d31 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 02:22:21.6740 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: WYgAAtWrjHG2BzCOmmOrnxAZL/fl3yT9l8YHsoJQhehMiQA6ZEI9f8aUxB7WiUxOldEr++EKo6d36itqTEvx0g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11974 Content-Type: text/plain; charset="utf-8" Extract the helper fec_build_skb() from fec_enet_rx_queue(), so that the code for building a skb is centralized in fec_build_skb(), which makes the code of fec_enet_rx_queue() more concise and readable. Signed-off-by: Wei Fang Reviewed-by: Frank Li --- drivers/net/ethernet/freescale/fec_main.c | 106 ++++++++++++---------- 1 file changed, 60 insertions(+), 46 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethern= et/freescale/fec_main.c index 68410cb3ef0a..7e8ac9d2a5ff 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -1781,6 +1781,59 @@ static int fec_rx_error_check(struct net_device *nde= v, u16 status) return 0; } =20 +static struct sk_buff *fec_build_skb(struct fec_enet_private *fep, + struct fec_enet_priv_rx_q *rxq, + struct bufdesc *bdp, + struct page *page, u32 len) +{ + struct net_device *ndev =3D fep->netdev; + struct bufdesc_ex *ebdp; + struct sk_buff *skb; + + skb =3D build_skb(page_address(page), + PAGE_SIZE << fep->pagepool_order); + if (unlikely(!skb)) { + page_pool_recycle_direct(rxq->page_pool, page); + ndev->stats.rx_dropped++; + if (net_ratelimit()) + netdev_err(ndev, "build_skb failed\n"); + + return NULL; + } + + skb_reserve(skb, FEC_ENET_XDP_HEADROOM + fep->rx_shift); + skb_put(skb, len); + skb_mark_for_recycle(skb); + + /* Get offloads from the enhanced buffer descriptor */ + if (fep->bufdesc_ex) { + ebdp =3D (struct bufdesc_ex *)bdp; + + /* If this is a VLAN packet remove the VLAN Tag */ + if (ebdp->cbd_esc & cpu_to_fec32(BD_ENET_RX_VLAN)) + fec_enet_rx_vlan(ndev, skb); + + /* Get receive timestamp from the skb */ + if (fep->hwts_rx_en) + fec_enet_hwtstamp(fep, fec32_to_cpu(ebdp->ts), + skb_hwtstamps(skb)); + + if (fep->csum_flags & FLAG_RX_CSUM_ENABLED) { + if (!(ebdp->cbd_esc & + cpu_to_fec32(FLAG_RX_CSUM_ERROR))) + /* don't check it */ + skb->ip_summed =3D CHECKSUM_UNNECESSARY; + else + skb_checksum_none_assert(skb); + } + } + + skb->protocol =3D eth_type_trans(skb, ndev); + skb_record_rx_queue(skb, rxq->bd.qid); + + return skb; +} + /* During a receive, the bd_rx.cur points to the current incoming buffer. * When we update through the ring, if the next incoming buffer has * not been given to the system, we just set the empty indicator, @@ -1796,7 +1849,6 @@ fec_enet_rx_queue(struct net_device *ndev, u16 queue_= id, int budget) struct sk_buff *skb; ushort pkt_len; int pkt_received =3D 0; - struct bufdesc_ex *ebdp =3D NULL; int index =3D 0; bool need_swap =3D fep->quirks & FEC_QUIRK_SWAP_FRAME; u32 data_start =3D FEC_ENET_XDP_HEADROOM + fep->rx_shift; @@ -1866,24 +1918,6 @@ fec_enet_rx_queue(struct net_device *ndev, u16 queue= _id, int budget) goto rx_processing_done; } =20 - /* The packet length includes FCS, but we don't want to - * include that when passing upstream as it messes up - * bridging applications. - */ - skb =3D build_skb(page_address(page), - PAGE_SIZE << fep->pagepool_order); - if (unlikely(!skb)) { - page_pool_recycle_direct(rxq->page_pool, page); - ndev->stats.rx_dropped++; - - netdev_err_once(ndev, "build_skb failed!\n"); - goto rx_processing_done; - } - - skb_reserve(skb, data_start); - skb_put(skb, pkt_len - sub_len); - skb_mark_for_recycle(skb); - if (unlikely(need_swap)) { u8 *data; =20 @@ -1891,34 +1925,14 @@ fec_enet_rx_queue(struct net_device *ndev, u16 queu= e_id, int budget) swap_buffer(data, pkt_len); } =20 - /* Extract the enhanced buffer descriptor */ - ebdp =3D NULL; - if (fep->bufdesc_ex) - ebdp =3D (struct bufdesc_ex *)bdp; - - /* If this is a VLAN packet remove the VLAN Tag */ - if (fep->bufdesc_ex && - (ebdp->cbd_esc & cpu_to_fec32(BD_ENET_RX_VLAN))) - fec_enet_rx_vlan(ndev, skb); - - skb->protocol =3D eth_type_trans(skb, ndev); - - /* Get receive timestamp from the skb */ - if (fep->hwts_rx_en && fep->bufdesc_ex) - fec_enet_hwtstamp(fep, fec32_to_cpu(ebdp->ts), - skb_hwtstamps(skb)); - - if (fep->bufdesc_ex && - (fep->csum_flags & FLAG_RX_CSUM_ENABLED)) { - if (!(ebdp->cbd_esc & cpu_to_fec32(FLAG_RX_CSUM_ERROR))) { - /* don't check it */ - skb->ip_summed =3D CHECKSUM_UNNECESSARY; - } else { - skb_checksum_none_assert(skb); - } - } + /* The packet length includes FCS, but we don't want to + * include that when passing upstream as it messes up + * bridging applications. + */ + skb =3D fec_build_skb(fep, rxq, bdp, page, pkt_len - sub_len); + if (!skb) + goto rx_processing_done; =20 - skb_record_rx_queue(skb, queue_id); napi_gro_receive(&fep->napi, skb); =20 rx_processing_done: --=20 2.34.1 From nobody Sat Feb 7 17:41:16 2026 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010021.outbound.protection.outlook.com [52.101.69.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 CF636346AC1; Fri, 23 Jan 2026 02:22:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.21 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769134980; cv=fail; b=brliPZAJqf3vGSRBH5tJmAgmDgFx+zaezC1MRrQO9Q/6W8OMLP72zThs8x199im/o5Azj6BUaoGV3kVCAaaZFsHTJhDMIkM7W0VOV+PYiYIhD9ppuXy5uFPHMtGt6a3TqsniCZj7tnHLi0tdMSpU526A/V3WZ13NUD4k28XxmUI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769134980; c=relaxed/simple; bh=PKnRTuy2nCS0OcVjBuU9b4aY9YxdjxJ7X54semzTMG4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=EM3I4P/3AbTK5thYIhzJR5caW5MmeIR+EkJhvl7WWsks4sTpP58UJbbBrDgKUTGLsln4E81y3xGSmb819DGviiuEEmIl5r7fe1Ug4ctrmPyAW8enqHWPn6IeCMi9k2IALo1/G3GZse/Gmp8qhycvSCQfTH2q7S9569kJDVgwPMY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=mzCu33cE; arc=fail smtp.client-ip=52.101.69.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="mzCu33cE" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hJpD8MhnaJL828clGO1mtTc5eERwKoEMTWXCLBaI3mD+zzJJFgxys+FvTn888DnYJ8MhpE1eHi2K0gUSW1o+xTPpzjd/meJPOB+GapxyZX5YoqnuckP9cmHsIDpCt+OdK3PAuJajmnsKe+R9fA3rJuGgYTHq5DLfrS1J9TlFKnt+SAA4WJeUJmeUMAjP9H+J4APgcKPAHecalzOYlL8+JLRqOdvLMTXvKztgnGgZ9xApRkDtefCoMfTFWuajU+PXYhW+wkqPCOELcgthwWrUbNJaoNMClHmCPDD+10pX/W8SC1w9os0IHGp6ZKjG0l3sBSOiGM/EJTym1o4kiaQpqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=qbHEHZYT8gvspdSmk5ZMSEj0QwUFHSSXLoZMqEr9J/g=; b=B29IH2U0CcJMt3uZkWPaq5eFtDj6meJmvYjafvkugVvTR0guR4JnReYSIkByxXP3t19tQ9+RNB9zKzk1bL3Vz6UbHGSQC9V/Y4fOltCK/pbq8d7/I+WYHFSRUhZrmc1s0T3Jdnnabrmh6kQobiUo7naYyd/7LVV3BEGnlDEnupHRCQDfHrBqsKI7pD4cbsRww5RL7GOqop6VymJ7p4WApCrHTfmWvqcr+d+YPytNWdjfRi1XYCTXp5Wi8b9k1fcTI8FXeM7wPTGW3mBkiw1KWWRKtnnVfsnm4NpRmniT9mqrdTLCU1/FlvQk02qXu1zIFtQ+HOwvZ0R4H3COSgZ1dA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qbHEHZYT8gvspdSmk5ZMSEj0QwUFHSSXLoZMqEr9J/g=; b=mzCu33cEug8nhGTBYExycDGj+/nGLVaCNb4AKyfcHnh+kkz0MUxLNGDYEegY+e9OkwUptCexxi7GHMZlKRNz4QEF+K7IAyOFlTICtZ+pSMRsLy8CEUCBrS4b5XY81uyPJ3wfnIveiuG3auYus1l/eQih47W/vOGWPKGNBWi8HNE6eaF2nyWrvNFWQ+6njx2Nv4rJd07IcMTZ8EgkmaUqjpzIxcaR6TF6odpiArho+W7gD06zkq9LK750oxpg2VN4wa0t6KOzD5UjgNlj3wM2QNQIurWiVlq/bAeiz4uXnJ8ahXmCLqXZh0f2fwmVI6m449WwwVbixQ6ZpNg+BCBv5g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by GV4PR04MB11974.eurprd04.prod.outlook.com (2603:10a6:150:2e8::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Fri, 23 Jan 2026 02:22:26 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%4]) with mapi id 15.20.9499.001; Fri, 23 Jan 2026 02:22:26 +0000 From: Wei Fang To: shenwei.wang@nxp.com, xiaoning.wang@nxp.com, frank.li@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, sdf@fomichev.me Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, bpf@vger.kernel.org Subject: [PATCH v4 net-next 05/15] net: fec: improve fec_enet_rx_queue() Date: Fri, 23 Jan 2026 10:21:33 +0800 Message-Id: <20260123022143.4121797-6-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260123022143.4121797-1-wei.fang@nxp.com> References: <20260123022143.4121797-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0074.apcprd02.prod.outlook.com (2603:1096:4:90::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|GV4PR04MB11974:EE_ X-MS-Office365-Filtering-Correlation-Id: 399b6033-54e9-467d-382e-08de5a263ff5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|1800799024|7416014|376014|19092799006|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?3htbuLQ5GgK/x/xjal3GVksumz41Bj1rcqcP+JrGHGTW/7ZLClhDI91fIFEN?= =?us-ascii?Q?QVmrn7gQug4u17mVTXHOMjDcONmjcLDtbUITEfk6S76Dtb8OsK4coMzIr8Es?= =?us-ascii?Q?xuLRSX92ta9t1PSaZalwuMVQqso/hajeOaoVu5xz3jg9AadrR8w6eH2PvsXH?= =?us-ascii?Q?ab34tO6cszC0ciTccjgwCoPbXxuX6h0DV+rOI+78+npAQvqNdIaGVy360xbE?= =?us-ascii?Q?WcJk17FmT9bRdX0h32bfa1r2Y3nHLySkp1SFqLJw38J7cafZyOZNrJZllHfW?= =?us-ascii?Q?RqCxEmQUMNBh/Ze6h0O9bc+Bl+qf4onFphVd/S2TpnweDaCVgqW25fvXV7TO?= =?us-ascii?Q?1VLN3h+BigaDJOzzuc9Ev3RWdRmi1H1F9A6LfGbTM8uUpzrb/uX6quBJNvRH?= =?us-ascii?Q?i5EgCvO9P3Auen7dMyrle6zdYlspcjtpHlj9Vs4Q7IsD1iCw1d6H0BcidBvo?= =?us-ascii?Q?xYdA6pwT5ohPS/wU5jcWwVI5UpON9Z6bNRgOXKX/ZyvRdq++spUWQUgOkE3G?= =?us-ascii?Q?XyBPz5kEcX0iDJPr1qLmcTJovRLLUoGeJdHBwyIcYAvpixujZ3cKyMh4LmpR?= =?us-ascii?Q?u40QfFk4BaxDYGXcVZGnWZ4jAz7eR4e2qT873140mp2AEf0wLpScLmnMOPq/?= =?us-ascii?Q?Tu6O6jGDuAQCNKBt+ocQA11SBPyAUVK0RG+ahPaz4Qds/Nu3/H3E7JuoUwM9?= =?us-ascii?Q?17JCbz8Qai2Gwji9XXl8Y+p1Hktm8iYfEHfnBQb4h2BGoTNUJGkbNDhtTDBG?= =?us-ascii?Q?rbfpN5JAePfmIfDfGAThDj0v/lXMsWgVw5yy6JJM/UEfjFLnLAd+E4tBwnv4?= =?us-ascii?Q?aAjd5+R2Zv0On5HEASxxAf/SepT/y+JC9JyCj3EIQM0vSnud43RBu6qNQtMI?= =?us-ascii?Q?wfIjJiL5gZt6Dtcd2kKc/456Fh+4GNsYEcqGtVMgmRlvQ1CaKgWkqvtZVtii?= =?us-ascii?Q?vDTX9thnYpm2oVAdKDffLMl2sLcsNCc3zgHmi9ba0CHadxEf8gbRT4mAO2CD?= =?us-ascii?Q?5DaNRQyYHRoywOuRdXixV33Fo6S7YfFIjXSXJ34ff7imM8D+wQ5QOoGrdfFo?= =?us-ascii?Q?yEhuISwanQu9s1h328RoyN4wy1Ud+UO0JAIglKVc8gvFBmPK1ByuYGuXEgfM?= =?us-ascii?Q?GhZZbFnGihtLl9ULpYkm+4JrxiNc356opDob1ZvXQzUqAD5MLtWJf8pEBHFQ?= =?us-ascii?Q?2Y/EljRGN5sVB4IIICBjBAT0Oj1hg+wd98aWiAKszJ1xYMH0HW8o4CIeouhY?= =?us-ascii?Q?rIjya2Jr9yx7bM1xw20aYbscS0vjA2ALdG2l5iPGhC4xgrbKTquE4izkGfE0?= =?us-ascii?Q?5SuWD8NHtAZ1zdJFulR0Ngu4RPbke1AwHylKEi3RURg81sxLvm8rLlQyMjj6?= =?us-ascii?Q?8N7akmX2p90/Upw4tXbJZZg78ZfFBZKQbVX3onwgGMw4CMlEkmuj1qj++6ax?= =?us-ascii?Q?AVbqEYwpoqKtvXFfK3/GGg71wiOQmvAjWrJ39kPBy2j2TPqGJF50ag4sVBlg?= =?us-ascii?Q?naDX50GHit2aIh46fUIviNJQlSYCKyyVpOJd3exIjTfa6wa3vn2qVtgsI5nt?= =?us-ascii?Q?UBDFsXZA737KQBlUzZwLAX6qJ81LgKfB2YKJf6Y7ISX+nQty/IRIqCdSQBk0?= =?us-ascii?Q?EAujSyMWGbvKXTRvpdmKLkE7OrzGDA8giiAxDlOJRdJZ?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(1800799024)(7416014)(376014)(19092799006)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?9tD13dp7Re5XddJ3MjKX4hB9OnmpsNokU5y5rUmNcG0yxxboOrcSmKTMdb4K?= =?us-ascii?Q?qetsYMaGjMvxd7mCajUV38JtPK6gVTINIkaQJeTmt64OnUzO6z1A2HnrREqi?= =?us-ascii?Q?UkGggrsdylJmhm0kC6/fHCfMVL9gFZbyv3YvtKhDDZC/OovdZIQZJSuhRmcR?= =?us-ascii?Q?++BDG/CFOH4cBsopzr/EjJG973E/lYeZcoGbL2sUCJSsWXNQD/1MALn+XN6B?= =?us-ascii?Q?BadCh7UOHtVlIaaqhjH4kktWFxzDWFrmtrkPcTrwVdzyC5bj8Xvcq+Wkbcnh?= =?us-ascii?Q?FtJ3DkgOZuWjW0E3ELGmEohVa7W+g0no9c2OJAgSDMF571Bken5VEi21k6nI?= =?us-ascii?Q?UoovGhQ3GHiZh5rd3F0HEJ55ki+vAWDDzJX0hQX7IgmpDK9ay+OS+YIP+07e?= =?us-ascii?Q?30HLTAZSrgHK0on0+qwSW4FCSuTK15FnLjAgmJskPT0SGUBntrRpEsmxyPM/?= =?us-ascii?Q?1s8/E4PvBSRr/z7DNVes7tYvbnMjq9a/qzGR/9Ak1m/2E2xq/5eSmcRned3d?= =?us-ascii?Q?k1oHvs0afmBOpM/+QLlDtC8LFizkz4zFeQmB+ua8aJ2AQVSQlzsfvEMH6e0j?= =?us-ascii?Q?1Bt0i/Np0kqApsW3z7u5XHM7HyVhig5v/uudhz71ER8slKMfTiyfMwPAKJ+f?= =?us-ascii?Q?33Ql8n5Uh9ozSbEXWIqtOHKNR4h923+X8HXrK0EoXghXw6Uts2zgN4QEovZT?= =?us-ascii?Q?aTRqITwdmMxpxN1nkjiIfuaikwbL/rFTuqOqSrTfs8CiN03ntcXPzVIM65x4?= =?us-ascii?Q?REGj9b4bYoQB9LkA7mBn2cDwYqJ92amTIYOyFup9D2qNtIFdrG4FFohZLAME?= =?us-ascii?Q?p5GkJWaGMB0Buynd512ezMK+Fs5p65LrsHzRpsdCFiy6n0Kv+sE/ZuLkd67g?= =?us-ascii?Q?vNJK0QovGbu6lffF6zo4fI2e+yMMPaIuBzOTGpMRP3nmjaIbEbqFel3Wu/w5?= =?us-ascii?Q?Lk2f2licIHUwvlsyoDux9g5jf8TGU+JE3SDYotp/jE549EkieAY4SELtFosa?= =?us-ascii?Q?A+swJVCYphdhJmSTsJVabDIepmiR4UAQphNQ8AYYgaQ0YbMzaUCN5H7P1fJK?= =?us-ascii?Q?1qvxv6LKjZTU4upYoofDQ4OnCkO3c7ilP/yzDIoiQXAkDcZq3gqZ443P5M1z?= =?us-ascii?Q?BcfxL3LJzg+0LpZItiW4Czn/uoKRxu2bwLkt/8DHrqDvAVUEmwG0/SbDn7Ck?= =?us-ascii?Q?HxBmHRrzZ7qUOjzlceCoeCP1o8EMq+PM86u3yETXIJfFqQNmSXDygvdH6EFA?= =?us-ascii?Q?J3mRsHM+6Pua1A3Ik+91yk/3bBFjKXqVZXiQAt1cq/KRUpObvqZLCcIwlZEy?= =?us-ascii?Q?of/TEO1HDrYEsMPSXodW6x3jRfNMZZTQQp3rSf24m/ntMyeaFFC1QK02/8BG?= =?us-ascii?Q?SFOl1x91wAj7e/y3bCT85Xgfr6GxkEhGRnwoLWk1ApGVu157jXEa0TBGEW1z?= =?us-ascii?Q?9dhB+7hDHS2JRZl17q7Rteho2wxq2t13+GmQByiFXJUKnYaC3Q87ClLww4Qh?= =?us-ascii?Q?GZcSe86k7yx8N6jSgnXgWC2Tw78kTEQspzJVQk7ddDpk8P1UcmHvvAI9wXUR?= =?us-ascii?Q?CYSoZXmNpG/I5k87iZ+zz21IiF5knqvBYF1rJ9EMAO5YZwH9ZSE/Y7IGxjDe?= =?us-ascii?Q?iuRbnI+9SAJDZnqVg/8wtggxmnQa+vGVKKD0Tup8x/rraRCskPR3yMU1TVlH?= =?us-ascii?Q?WgejPMK3wTXcQpThKe6YMNILeQOjeEGTZtuP6uH+QLMUy9Q4?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 399b6033-54e9-467d-382e-08de5a263ff5 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 02:22:26.3145 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8aTqaMbZ0gUwMqaJ713keyLuS2B1Rax+nwrwsFBLqsb7DG9OigewGcGBIWUrEa0+7EW4G3gNDIak1BAFi+whDw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11974 Content-Type: text/plain; charset="utf-8" This patch has made the following adjustments to fec_enet_rx_queue(). 1. The function parameters are modified to maintain the same style as subsequently added XDP-related interfaces. 2. Some variables are initialized at the time of declaration, and the order of local variables is updated to follow the reverse xmas tree style. 3. Replace variable cbd_bufaddr with dma. Signed-off-by: Wei Fang Reviewed-by: Frank Li --- drivers/net/ethernet/freescale/fec_main.c | 35 ++++++++++------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethern= et/freescale/fec_main.c index 7e8ac9d2a5ff..0529dc91c981 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -1839,26 +1839,25 @@ static struct sk_buff *fec_build_skb(struct fec_ene= t_private *fep, * not been given to the system, we just set the empty indicator, * effectively tossing the packet. */ -static int -fec_enet_rx_queue(struct net_device *ndev, u16 queue_id, int budget) +static int fec_enet_rx_queue(struct fec_enet_private *fep, + u16 queue, int budget) { - struct fec_enet_private *fep =3D netdev_priv(ndev); - struct fec_enet_priv_rx_q *rxq; - struct bufdesc *bdp; - unsigned short status; - struct sk_buff *skb; - ushort pkt_len; - int pkt_received =3D 0; - int index =3D 0; - bool need_swap =3D fep->quirks & FEC_QUIRK_SWAP_FRAME; u32 data_start =3D FEC_ENET_XDP_HEADROOM + fep->rx_shift; + struct fec_enet_priv_rx_q *rxq =3D fep->rx_queue[queue]; struct bpf_prog *xdp_prog =3D READ_ONCE(fep->xdp_prog); + bool need_swap =3D fep->quirks & FEC_QUIRK_SWAP_FRAME; u32 ret, xdp_result =3D FEC_ENET_XDP_PASS; + struct net_device *ndev =3D fep->netdev; + struct bufdesc *bdp =3D rxq->bd.cur; u32 sub_len =3D 4 + fep->rx_shift; int cpu =3D smp_processor_id(); + int pkt_received =3D 0; + u16 status, pkt_len; + struct sk_buff *skb; struct xdp_buff xdp; struct page *page; - __fec32 cbd_bufaddr; + dma_addr_t dma; + int index; =20 #if defined(CONFIG_COLDFIRE) && !defined(CONFIG_COLDFIRE_COHERENT_DMA) /* @@ -1867,12 +1866,10 @@ fec_enet_rx_queue(struct net_device *ndev, u16 queu= e_id, int budget) */ flush_cache_all(); #endif - rxq =3D fep->rx_queue[queue_id]; =20 /* First, grab all of the stats for the incoming packet. * These get messed up if we get called due to a busy condition. */ - bdp =3D rxq->bd.cur; xdp_init_buff(&xdp, PAGE_SIZE << fep->pagepool_order, &rxq->xdp_rxq); =20 while (!((status =3D fec16_to_cpu(bdp->cbd_sc)) & BD_ENET_RX_EMPTY)) { @@ -1881,7 +1878,7 @@ fec_enet_rx_queue(struct net_device *ndev, u16 queue_= id, int budget) break; pkt_received++; =20 - writel(FEC_ENET_RXF_GET(queue_id), fep->hwp + FEC_IEVENT); + writel(FEC_ENET_RXF_GET(queue), fep->hwp + FEC_IEVENT); =20 /* Check for errors. */ status ^=3D BD_ENET_RX_LAST; @@ -1895,15 +1892,13 @@ fec_enet_rx_queue(struct net_device *ndev, u16 queu= e_id, int budget) =20 index =3D fec_enet_get_bd_index(bdp, &rxq->bd); page =3D rxq->rx_buf[index]; - cbd_bufaddr =3D bdp->cbd_bufaddr; + dma =3D fec32_to_cpu(bdp->cbd_bufaddr); if (fec_enet_update_cbd(rxq, bdp, index)) { ndev->stats.rx_dropped++; goto rx_processing_done; } =20 - dma_sync_single_for_cpu(&fep->pdev->dev, - fec32_to_cpu(cbd_bufaddr), - pkt_len, + dma_sync_single_for_cpu(&fep->pdev->dev, dma, pkt_len, DMA_FROM_DEVICE); prefetch(page_address(page)); =20 @@ -1979,7 +1974,7 @@ static int fec_enet_rx(struct net_device *ndev, int b= udget) =20 /* Make sure that AVB queues are processed first. */ for (i =3D fep->num_rx_queues - 1; i >=3D 0; i--) - done +=3D fec_enet_rx_queue(ndev, i, budget - done); + done +=3D fec_enet_rx_queue(fep, i, budget - done); =20 return done; } --=20 2.34.1 From nobody Sat Feb 7 17:41:16 2026 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010021.outbound.protection.outlook.com [52.101.69.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 5838430AAB8; Fri, 23 Jan 2026 02:23:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.21 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769135028; cv=fail; b=Ev1N49hW8TYItaf+TsN6Msa8ZekQbnIw4IaYMmocq1P9u4XH1e7cTM5EEeifXlYLv26gHKCit0jScA4cMdJ8tiOkNQYXuoZPSyqErS42S6Fr1h679nHKuePt5CU1XQUL+crphkvi+Uy3TAVe1lN+KtcBm4XNS9G5rrhCgx1mjBE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769135028; c=relaxed/simple; bh=xYz1sFsdu0olCRgAKr/ByP69H8K9fVtA4KdG2fZV0NA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=JZljYwoBUBSi5gfI67F5VAPth2XY9aAD1ByqhhiYMsZhvDHUwRKpuHASicsLDcniSwJlU8pkDOx2X5RnxFZnz2zGYj5YxQBJNWssSp8xh1+0hFEkSuXmrqenExp7Nw4PqWZ3qN9zzAT3mOBe6eEwRbt5yxgGV4YUg8D1cBT5FdU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=ks74pUty; arc=fail smtp.client-ip=52.101.69.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="ks74pUty" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=C8OlYoj0uzmyxkkbl9REfxE+pe3TTjjt5LEqv83lKkx24oZHOJIdPKfKoDcmAb+HGaEbhSn+ndvA6feeuGrzMHtxohdNbQRkC+q7c54bYp74SvxWDSAewDboFJ6jF4lvf4CsaO2u+L0hEoL9CON0y3VbrRmX/YQc5D+jJKNHnuXx3GpEe0Eey/7bO83FXgecdNGwihiLsDGQD+PD4K/L+7gQzxs9uXH7y+EOnUZc9xmE52ysgcfz4EEe1txQFKCA03DM7aALfYCC63hVh1tYQtIXci56l1JRMmWbduzGVRGQE1vlsd1MoGP2Rdna9q8j7LBCGOaxYeCG0WMsCNBRFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=95h6F/7FVVkL2vmRhn8X0v4AHM/PT7tYFczJWtOZx64=; b=e1+I7PtESuyPPZD3GSq/nrEQ9GrpaG4DP7KtK+TA0WHgZemvdVMALNztRo3SlnRACZl1XCsinqiAcdzEhkFVPiNGFEs/0Ucz24mycMiRwiNFrtLdoFsQxt0hbtHqJAtBwz2umxZ0Dbb5H8cZ3WSV0o0cPv9NqJlaAMIcS4QIZdI2dR+Kti7VvViWPBHrcwqL9LRf66HWGyO95Wq4ef/1U82k/djgS4A/t71cteCNiQY3uXWirBItRiTWPA5Zwn3xK3diu5/x9NIY0mAOdi4kUcMgMobWj7X8NWq8e8qdQIzDXIDQMw3CjCcJZidsypfAO+OIEOdScWuhS7R0TVVjZA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=95h6F/7FVVkL2vmRhn8X0v4AHM/PT7tYFczJWtOZx64=; b=ks74pUtyiyCigKNlB+pOJsdCFG9L1BxwaH4owW3kANL96xzk/LHq2aFrZcYR0wqQlEb+XhsrhAbbWhmi2yQLh0fRji86DtWMRTjwyVhY8o353phrWtbxpubkmTn9Eih0Jl/e3EPolrJZmTFqVWGLZ4QdndE5b4rAtg60wtIRthBiNfFfHXnKSCePKN8j4yb9sfsb5hAzgkSvVJXfmOUFqq74QKVV1CBCOfucZFHOEJ53VcFJ76bsaA5HSVUXFvp9X76aFlbPWdcx3PJAslfShR8jV5sfCFGgNfWvJM3+S61TRw+EoZl+p1rINZBvViVUYKUqkPnyWFuiTPYr+fy3BA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by GV4PR04MB11974.eurprd04.prod.outlook.com (2603:10a6:150:2e8::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Fri, 23 Jan 2026 02:22:31 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%4]) with mapi id 15.20.9499.001; Fri, 23 Jan 2026 02:22:31 +0000 From: Wei Fang To: shenwei.wang@nxp.com, xiaoning.wang@nxp.com, frank.li@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, sdf@fomichev.me Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, bpf@vger.kernel.org Subject: [PATCH v4 net-next 06/15] net: fec: add fec_enet_rx_queue_xdp() for XDP path Date: Fri, 23 Jan 2026 10:21:34 +0800 Message-Id: <20260123022143.4121797-7-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260123022143.4121797-1-wei.fang@nxp.com> References: <20260123022143.4121797-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0074.apcprd02.prod.outlook.com (2603:1096:4:90::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|GV4PR04MB11974:EE_ X-MS-Office365-Filtering-Correlation-Id: 5d06e38a-414d-40c8-ff92-08de5a2642c2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|1800799024|7416014|376014|19092799006|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?3sIkFlhGQL9IZVgcSlPsiltBObepf4rN8fv/z/6jMctFLYBFJU8ek4AZWHzO?= =?us-ascii?Q?zfIU9v4vsuqQ5He3epeNl5rl64zTMnCQ9pi9PCsJztByaljJBuTzk8Vjenx8?= =?us-ascii?Q?5JJT9Z+4MGhWE8MdpesdDPWoTWZbzDOvZp7L+o+sFb7wT1HD+3RcGLvj57bo?= =?us-ascii?Q?KKNt/N88CELsTEDh7WJkCkGj7iP0dDCqR3maSWCKtvHZaBVXEj1RJFcHyu14?= =?us-ascii?Q?uKVPOS3xukgibKvZ3IW/+PjDA5shlm3F1kljCidWfJzSH5JlH0JzVt9IMCsL?= =?us-ascii?Q?VjnmAGh7SRAVs4qvUo9dhpIJYnAd25jJkGGMMp0K0iLKuzQJ4Ui2E7MJyHyY?= =?us-ascii?Q?4agZTWzx3x28n2EmQYmx+QFrJjAN1qnTXzb14Q96WDM1CIdYY3iBUzdil86F?= =?us-ascii?Q?6Oz3xzE5RSUgCSAffbtZ9D6mMddJId6PkxuEODusuIhJsbGHSC74GRYLh5F5?= =?us-ascii?Q?qqfYd+RkRC3VSktql1GwiST/OCt5Fr9hU0LULF9AiwlstXVOBFZQQzE1+VU1?= =?us-ascii?Q?WiowL94QgOt5KwNFndvA+ZzuTks7dA3TiCX6w0Gc4f/4/XvVXT8yIHdHg9aI?= =?us-ascii?Q?X+H//JiihO1C538ylw6oISsQ+fVKBScfps5giXqeJd0Klflvii2w6etOK1Kl?= =?us-ascii?Q?DOVJE4zODUZN0Lujkun43KZJ6nYkwnTH6faA3dBzJ1G83DojDFpaiG5vDOEv?= =?us-ascii?Q?J9+qfSLOfAq5ez+KjI8Ids1QkTSbmWcC8p6nvT32HvynfRI5qmutG8fr2Vfl?= =?us-ascii?Q?hP5fGdoNSgsrGbjVO/B1N/CpLeZtvsanQbngA7c1yKjS8ejgwsUmy6sQtE9L?= =?us-ascii?Q?wwn40Q2TBo+pD3Vbpjl8cvDf7Sn4CTwWaq5TMlGNU6F9+0k+KNFi4UIZqYBe?= =?us-ascii?Q?+WjlxMxcOBlRL7jvrr7nThl8ViY91umWpnLNS7GltUxmKV0XjT3zWXFm5/Sg?= =?us-ascii?Q?ePf6Styv9iF6k1Va5oV+XrUw2sgrnWN5fJlzAZZj8mQRR54c6UDqmbycDm4G?= =?us-ascii?Q?/xjmbgK6xltZ5bDy0PH7SHGKqMzFGO2wy5jUmb2MtooDqN5Dx5rrKcMkv/Nt?= =?us-ascii?Q?pa33GXo+5Q7OqEwimQjg9/WU3mu5f9u2rgZPrC0tC4DpyT3ir358bONTbMET?= =?us-ascii?Q?ajapGiFtzvwGnE32ORT5EzbXaa9yPsLDwgojzQrSroYbT8g3zdK/nWeQcKsb?= =?us-ascii?Q?ayOIFkQPMI9mMPpdFjxaOIVY8arrYnrAR18/bluGW5vUO9lebz5yPBZshKTX?= =?us-ascii?Q?lanYHnrfVlaLRPuDZ9BbjfIzZiM7xwuarI/2YjaTBmP35b8gr472vCba7H/m?= =?us-ascii?Q?sdkp27j/W9THpEnzTdTKpXCBMZ5o4XRiPuSuSGz7J6fLA9N1NkbiY3RjTBot?= =?us-ascii?Q?+I01Dgqppa+ReShTTOyG9LuMQIhlhqhiyYkP1nruMM7FAKHX8krPamHiiN0v?= =?us-ascii?Q?5+UYb8KVuBMv0kUqbFi+8VrMkp/B4S0MAZcIMim4ofpaGaQR53yUr+st5Vi/?= =?us-ascii?Q?PWXpTjdEvLJEJJ/lbujnKkKGlruv8Sl4PuPyGge00e5fP9nZoPA0qdPfZQ7/?= =?us-ascii?Q?ulXX7AV0N59WkXCkJQFYa8qPqJERh9ZmSrBVP8vbhmGbkPXr1dvde+LQT3g8?= =?us-ascii?Q?1GwBXQivwkvCmmcbrwiZv1BkNrvssDTXiLpjhj6WjpcV?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(1800799024)(7416014)(376014)(19092799006)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?/qrlXHtJSiHKG7vth5JmIdD64hm93VKOXP8vwvEbNNhUuIayOi6KEOFF/AXP?= =?us-ascii?Q?Z5aNIDVJcVzn7HYz81f77kyWevcSyjEZWlXAT3k2bjvakHM04Uicvz+s789i?= =?us-ascii?Q?ZDKsq5s3OlcwMi29U4fY/m84o5T6tIcayBk9F646kwUMuU3k6eEfj9Sl6olh?= =?us-ascii?Q?l0JT7MtvKljCies0Dt2qXRiFhOTCbie0gpISskls8IMZOpZc+y+OoeqmxmTM?= =?us-ascii?Q?/2kSOIfT6qvEoNE/aI2Idx5CKEMqbBFHpijlnTQ/FMQD2nvrz+Piqdchs5b4?= =?us-ascii?Q?PiWjZ2f2N6QmMxufRxS3n03L/Qj0Z0ea6A2Tmx4/6RwL2hPyvvUNTYodvAc5?= =?us-ascii?Q?Iw7OK+L0c9n701e7GkWdY0xFvAD/sE8CXw2VdPx4oWshohg519to8dDD5Ra5?= =?us-ascii?Q?ULaMQnfMfC45igXFFdL6tUJxClHDMFo22DHrgao4Phqfxe7Bl4pb1BmCoCdw?= =?us-ascii?Q?d/fxq+GySYCDQtqAR1E57ojoCjqtUftICTFFzHr4FLd8gNzx6doNLiZGRQ8p?= =?us-ascii?Q?npEgw3BvYU2BzOpCsEglhbLYfJpKiUcO1p/geZGgN2D/lrlEuPmwnPrbSTbt?= =?us-ascii?Q?nBwONyPPYko0FmKvBWKz5Cxgj/49NXsF7tqjAwagS0TJh4ZSAl+fR0MgORIO?= =?us-ascii?Q?Bnwd0TMcgzYHXJUpXo4BWzxbk+ExlSCEo6FHSHhcI8kHgysnBMECfFfPYWo+?= =?us-ascii?Q?PxC7uytYS52TsZxCzMIOp5YZY20yaC3s8TeSld5UixX7QDQvC8YE6202vRcl?= =?us-ascii?Q?VcU1oVxzAEPt1GHrvmg9N/jlEjmKfFJdCbRk/uGYbdLuj9EYjiOjKciX3QSg?= =?us-ascii?Q?Tb7LESpIqyMD/IozHOWP7QPzxGc+19DHAixmyOKCxTnDlDhPxY0Cb47dO/vB?= =?us-ascii?Q?qNN/6irVN5kH/KNFrDnfFfxqZR4FoyEJYtZW7DDE/KqDtipbPxR4LtHUiEna?= =?us-ascii?Q?Rayqcr4xQXGiXmdqZqEoHkfGwergdawJVZWhaCkTx+k/7oL60WcufLkAp1bi?= =?us-ascii?Q?DK5jwZLVO4+j9D4w7uXgwkcFuyAc5uqtbYie8MGEpo2Pc/ggtA9ygj9AIo0h?= =?us-ascii?Q?DiQaiB8lj9D/J7cdhZilwd9h3Qp2jO7rm1yuLJ1srhUVHmEqfSv+EM79yWCR?= =?us-ascii?Q?COTevOmApw3wCQwRwN9Rc70N8gCbBKs5NyrQ9Rqxdl5hVQM4zYh4Z7Mk10I/?= =?us-ascii?Q?gKvaACY0p+j76OeU2RKXzoh4JtQfYqFKTS7pl5veQKiz7KztSOQdlGYuBL+x?= =?us-ascii?Q?2gn1pAOzLz8XffPBopLQdkF7jJ4293z8ZIzw9cUWZcHBjxWCE8NA8p8cydXb?= =?us-ascii?Q?4Y7IC+RtsGYi+aSKE80nSGQfq0uWBSPoz0dbfETvL8HemxKg0S3/taJKb5Gh?= =?us-ascii?Q?v0O6b70W+Mlfm3w7zRIBqwair+Di2Ve33fvBbL51FC9MSvxITWPjX2jS6Ktl?= =?us-ascii?Q?LnAf8sMlF5fZo2hrYQERRV2IYl5WzKvGiCEoTaWIs0OWIdZg/BOprDEORiy8?= =?us-ascii?Q?3rv4w9wbQBvb+7qwqmyCdUv5w/JT3+ffHymF1kRpoQPk1oz0dy1RuEctQWv5?= =?us-ascii?Q?6EJsgNPrE3S+5AfqLo5fwBgigd33Ebd54GG/quUDRjIFRAf1VexvsD4EiOS8?= =?us-ascii?Q?AsXW/DefogvgyrJNxScJnLOKeClmvArET/JV2y4B5+K1VHOh/vMwXPxg9A/C?= =?us-ascii?Q?rW40kpA5zp0vMdH+9L6bsbU7wJnmyNudlcRBquKU6cmtLci4?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5d06e38a-414d-40c8-ff92-08de5a2642c2 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 02:22:31.0870 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: dvUKLetYBo4C5raeZ4vu8aguss1aUVSSY3eHfXFleX/Af+Dyvq+Ex5ubvcsiV+KKia8zH3zdzCdYlib7Hf3Adg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11974 Content-Type: text/plain; charset="utf-8" Currently, the processing of XDP path packets and protocol stack packets are both mixed in fec_enet_rx_queue(), which makes the logic somewhat confusing and debugging more difficult. Furthermore, some logic is not needed by each other. For example, the kernel path does not need to call xdp_init_buff(), and XDP path does not support swap_buffer(), etc. This prevents XDP from achieving its maximum performance. Therefore, XDP path packets processing has been separated from fec_enet_rx_queue() by adding the fec_enet_rx_queue_xdp() function to optimize XDP path logic and improve XDP performance. The XDP performance on the iMX93 platform was compared before and after applying this patch. Detailed results are as follows and we can see the performance has been improved. Env: i.MX93, packet size 64 bytes including FCS, only single core and RX BD ring are used to receive packets, flow-control is off. Before the patch is applied: xdp-bench tx eth0 Summary 396,868 rx/s 0 err,drop/s Summary 396,024 rx/s 0 err,drop/s xdp-bench drop eth0 Summary 684,781 rx/s 0 err/s Summary 675,746 rx/s 0 err/s xdp-bench pass eth0 Summary 208,552 rx/s 0 err,drop/s Summary 208,654 rx/s 0 err,drop/s xdp-bench redirect eth0 eth0 eth0->eth0 311,210 rx/s 0 err,drop/s 3= 11,208 xmit/s eth0->eth0 310,808 rx/s 0 err,drop/s 3= 10,809 xmit/s After the patch is applied: xdp-bench tx eth0 Summary 409,975 rx/s 0 err,drop/s Summary 411,073 rx/s 0 err,drop/s xdp-bench drop eth0 Summary 700,681 rx/s 0 err/s Summary 698,102 rx/s 0 err/s xdp-bench pass eth0 Summary 211,356 rx/s 0 err,drop/s Summary 210,629 rx/s 0 err,drop/s xdp-bench redirect eth0 eth0 eth0->eth0 320,351 rx/s 0 err,drop/s 3= 20,348 xmit/s eth0->eth0 318,988 rx/s 0 err,drop/s 3= 18,988 xmit/s Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/fec_main.c | 256 ++++++++++++++-------- 1 file changed, 170 insertions(+), 86 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethern= et/freescale/fec_main.c index 0529dc91c981..86447a7cb963 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -1665,71 +1665,6 @@ static int fec_enet_update_cbd(struct fec_enet_priv_= rx_q *rxq, return 0; } =20 -static u32 -fec_enet_run_xdp(struct fec_enet_private *fep, struct bpf_prog *prog, - struct xdp_buff *xdp, struct fec_enet_priv_rx_q *rxq, int cpu) -{ - unsigned int sync, len =3D xdp->data_end - xdp->data; - u32 ret =3D FEC_ENET_XDP_PASS; - struct page *page; - int err; - u32 act; - - act =3D bpf_prog_run_xdp(prog, xdp); - - /* Due xdp_adjust_tail and xdp_adjust_head: DMA sync for_device cover - * max len CPU touch - */ - sync =3D xdp->data_end - xdp->data; - sync =3D max(sync, len); - - switch (act) { - case XDP_PASS: - rxq->stats[RX_XDP_PASS]++; - ret =3D FEC_ENET_XDP_PASS; - break; - - case XDP_REDIRECT: - rxq->stats[RX_XDP_REDIRECT]++; - err =3D xdp_do_redirect(fep->netdev, xdp, prog); - if (unlikely(err)) - goto xdp_err; - - ret =3D FEC_ENET_XDP_REDIR; - break; - - case XDP_TX: - rxq->stats[RX_XDP_TX]++; - err =3D fec_enet_xdp_tx_xmit(fep, cpu, xdp, sync); - if (unlikely(err)) { - rxq->stats[RX_XDP_TX_ERRORS]++; - goto xdp_err; - } - - ret =3D FEC_ENET_XDP_TX; - break; - - default: - bpf_warn_invalid_xdp_action(fep->netdev, prog, act); - fallthrough; - - case XDP_ABORTED: - fallthrough; /* handle aborts by dropping packet */ - - case XDP_DROP: - rxq->stats[RX_XDP_DROP]++; -xdp_err: - ret =3D FEC_ENET_XDP_CONSUMED; - page =3D virt_to_head_page(xdp->data); - page_pool_put_page(rxq->page_pool, page, sync, true); - if (act !=3D XDP_DROP) - trace_xdp_exception(fep->netdev, prog, act); - break; - } - - return ret; -} - static void fec_enet_rx_vlan(const struct net_device *ndev, struct sk_buff= *skb) { if (ndev->features & NETIF_F_HW_VLAN_CTAG_RX) { @@ -1842,19 +1777,14 @@ static struct sk_buff *fec_build_skb(struct fec_ene= t_private *fep, static int fec_enet_rx_queue(struct fec_enet_private *fep, u16 queue, int budget) { - u32 data_start =3D FEC_ENET_XDP_HEADROOM + fep->rx_shift; struct fec_enet_priv_rx_q *rxq =3D fep->rx_queue[queue]; - struct bpf_prog *xdp_prog =3D READ_ONCE(fep->xdp_prog); bool need_swap =3D fep->quirks & FEC_QUIRK_SWAP_FRAME; - u32 ret, xdp_result =3D FEC_ENET_XDP_PASS; struct net_device *ndev =3D fep->netdev; struct bufdesc *bdp =3D rxq->bd.cur; u32 sub_len =3D 4 + fep->rx_shift; - int cpu =3D smp_processor_id(); int pkt_received =3D 0; u16 status, pkt_len; struct sk_buff *skb; - struct xdp_buff xdp; struct page *page; dma_addr_t dma; int index; @@ -1870,8 +1800,6 @@ static int fec_enet_rx_queue(struct fec_enet_private = *fep, /* First, grab all of the stats for the incoming packet. * These get messed up if we get called due to a busy condition. */ - xdp_init_buff(&xdp, PAGE_SIZE << fep->pagepool_order, &rxq->xdp_rxq); - while (!((status =3D fec16_to_cpu(bdp->cbd_sc)) & BD_ENET_RX_EMPTY)) { =20 if (pkt_received >=3D budget) @@ -1902,17 +1830,6 @@ static int fec_enet_rx_queue(struct fec_enet_private= *fep, DMA_FROM_DEVICE); prefetch(page_address(page)); =20 - if (xdp_prog) { - xdp_buff_clear_frags_flag(&xdp); - /* subtract 16bit shift and FCS */ - xdp_prepare_buff(&xdp, page_address(page), - data_start, pkt_len - sub_len, false); - ret =3D fec_enet_run_xdp(fep, xdp_prog, &xdp, rxq, cpu); - xdp_result |=3D ret; - if (ret !=3D FEC_ENET_XDP_PASS) - goto rx_processing_done; - } - if (unlikely(need_swap)) { u8 *data; =20 @@ -1961,7 +1878,168 @@ static int fec_enet_rx_queue(struct fec_enet_privat= e *fep, } rxq->bd.cur =3D bdp; =20 - if (xdp_result & FEC_ENET_XDP_REDIR) + return pkt_received; +} + +static void fec_xdp_drop(struct fec_enet_priv_rx_q *rxq, + struct xdp_buff *xdp, u32 sync) +{ + struct page *page =3D virt_to_head_page(xdp->data); + + page_pool_put_page(rxq->page_pool, page, sync, true); +} + +static int fec_enet_rx_queue_xdp(struct fec_enet_private *fep, int queue, + int budget, struct bpf_prog *prog) +{ + u32 data_start =3D FEC_ENET_XDP_HEADROOM + fep->rx_shift; + struct fec_enet_priv_rx_q *rxq =3D fep->rx_queue[queue]; + struct net_device *ndev =3D fep->netdev; + struct bufdesc *bdp =3D rxq->bd.cur; + u32 sub_len =3D 4 + fep->rx_shift; + int cpu =3D smp_processor_id(); + int pkt_received =3D 0; + struct sk_buff *skb; + u16 status, pkt_len; + struct xdp_buff xdp; + struct page *page; + u32 xdp_res =3D 0; + dma_addr_t dma; + int index, err; + u32 act, sync; + +#if defined(CONFIG_COLDFIRE) && !defined(CONFIG_COLDFIRE_COHERENT_DMA) + /* + * Hacky flush of all caches instead of using the DMA API for the TSO + * headers. + */ + flush_cache_all(); +#endif + + xdp_init_buff(&xdp, PAGE_SIZE << fep->pagepool_order, &rxq->xdp_rxq); + + while (!((status =3D fec16_to_cpu(bdp->cbd_sc)) & BD_ENET_RX_EMPTY)) { + if (pkt_received >=3D budget) + break; + pkt_received++; + + writel(FEC_ENET_RXF_GET(queue), fep->hwp + FEC_IEVENT); + + /* Check for errors. */ + status ^=3D BD_ENET_RX_LAST; + if (unlikely(fec_rx_error_check(ndev, status))) + goto rx_processing_done; + + /* Process the incoming frame. */ + ndev->stats.rx_packets++; + pkt_len =3D fec16_to_cpu(bdp->cbd_datlen); + ndev->stats.rx_bytes +=3D pkt_len - fep->rx_shift; + + index =3D fec_enet_get_bd_index(bdp, &rxq->bd); + page =3D rxq->rx_buf[index]; + dma =3D fec32_to_cpu(bdp->cbd_bufaddr); + + if (fec_enet_update_cbd(rxq, bdp, index)) { + ndev->stats.rx_dropped++; + goto rx_processing_done; + } + + dma_sync_single_for_cpu(&fep->pdev->dev, dma, pkt_len, + DMA_FROM_DEVICE); + prefetch(page_address(page)); + + xdp_buff_clear_frags_flag(&xdp); + /* subtract 16bit shift and FCS */ + pkt_len -=3D sub_len; + xdp_prepare_buff(&xdp, page_address(page), data_start, + pkt_len, false); + + act =3D bpf_prog_run_xdp(prog, &xdp); + /* Due xdp_adjust_tail and xdp_adjust_head: DMA sync + * for_device cover max len CPU touch. + */ + sync =3D xdp.data_end - xdp.data; + sync =3D max(sync, pkt_len); + + switch (act) { + case XDP_PASS: + rxq->stats[RX_XDP_PASS]++; + /* The packet length includes FCS, but we don't want to + * include that when passing upstream as it messes up + * bridging applications. + */ + skb =3D fec_build_skb(fep, rxq, bdp, page, pkt_len); + if (!skb) { + fec_xdp_drop(rxq, &xdp, sync); + trace_xdp_exception(ndev, prog, XDP_PASS); + } else { + napi_gro_receive(&fep->napi, skb); + } + break; + case XDP_REDIRECT: + rxq->stats[RX_XDP_REDIRECT]++; + err =3D xdp_do_redirect(ndev, &xdp, prog); + if (unlikely(err)) { + fec_xdp_drop(rxq, &xdp, sync); + trace_xdp_exception(ndev, prog, XDP_REDIRECT); + } else { + xdp_res |=3D FEC_ENET_XDP_REDIR; + } + break; + case XDP_TX: + rxq->stats[RX_XDP_TX]++; + err =3D fec_enet_xdp_tx_xmit(fep, cpu, &xdp, sync); + if (unlikely(err)) { + rxq->stats[RX_XDP_TX_ERRORS]++; + fec_xdp_drop(rxq, &xdp, sync); + trace_xdp_exception(ndev, prog, XDP_TX); + } + break; + default: + bpf_warn_invalid_xdp_action(ndev, prog, act); + fallthrough; + case XDP_ABORTED: + /* handle aborts by dropping packet */ + fallthrough; + case XDP_DROP: + rxq->stats[RX_XDP_DROP]++; + fec_xdp_drop(rxq, &xdp, sync); + break; + } + +rx_processing_done: + /* Clear the status flags for this buffer */ + status &=3D ~BD_ENET_RX_STATS; + /* Mark the buffer empty */ + status |=3D BD_ENET_RX_EMPTY; + + if (fep->bufdesc_ex) { + struct bufdesc_ex *ebdp =3D (struct bufdesc_ex *)bdp; + + ebdp->cbd_esc =3D cpu_to_fec32(BD_ENET_RX_INT); + ebdp->cbd_prot =3D 0; + ebdp->cbd_bdu =3D 0; + } + + /* Make sure the updates to rest of the descriptor are + * performed before transferring ownership. + */ + dma_wmb(); + bdp->cbd_sc =3D cpu_to_fec16(status); + + /* Update BD pointer to next entry */ + bdp =3D fec_enet_get_nextdesc(bdp, &rxq->bd); + + /* Doing this here will keep the FEC running while we process + * incoming frames. On a heavily loaded network, we should be + * able to keep up at the expense of system resources. + */ + writel(0, rxq->bd.reg_desc_active); + } + + rxq->bd.cur =3D bdp; + + if (xdp_res & FEC_ENET_XDP_REDIR) xdp_do_flush(); =20 return pkt_received; @@ -1970,11 +2048,17 @@ static int fec_enet_rx_queue(struct fec_enet_privat= e *fep, static int fec_enet_rx(struct net_device *ndev, int budget) { struct fec_enet_private *fep =3D netdev_priv(ndev); + struct bpf_prog *prog =3D READ_ONCE(fep->xdp_prog); int i, done =3D 0; =20 /* Make sure that AVB queues are processed first. */ - for (i =3D fep->num_rx_queues - 1; i >=3D 0; i--) - done +=3D fec_enet_rx_queue(fep, i, budget - done); + for (i =3D fep->num_rx_queues - 1; i >=3D 0; i--) { + if (prog) + done +=3D fec_enet_rx_queue_xdp(fep, i, budget - done, + prog); + else + done +=3D fec_enet_rx_queue(fep, i, budget - done); + } =20 return done; } --=20 2.34.1 From nobody Sat Feb 7 17:41:16 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011034.outbound.protection.outlook.com [52.101.65.34]) (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 6EC2537F737; Fri, 23 Jan 2026 02:23:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769134999; cv=fail; b=r6QPIlas+y3ld5dVAiLtCmk4n8zkEvIw5NiA0vw+/LUjm3tc8OqysvMk8d5YK0/hp1B9iSpKXkg97ijym6wbY1QYJ2tBNdSNXWSEaff9llcb9R32RX9e1L8T7t2bwWfbghiFTkQ03SZ1aDtoin4GvI8jPg/IFJrphtqH+ZA0270= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769134999; c=relaxed/simple; bh=83F6hpKD5emlga6Emz+3NyhKrKFPOtauPNrkpiQGNSU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Ye6G1VYCTquGTRE8hCXLs0hrnLpSDfbFOTbS7zyLPyct5YrtrNIcUX7x4c1pmfDro1bhAqsdVqVdq3822uTlV6PJrpX+9JLpRrDgkeDfUPcuxibB1GuO0FJXvBW35uB9QMbCT6xUW0ZgT2TByyNNvgVvgbM32ZpoA6EUqxDqk74= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=FyG/V52J; arc=fail smtp.client-ip=52.101.65.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="FyG/V52J" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uyWHWfbKdh2pm9XYSQtI1xNyGUiCjoOPOnYgytJC/B4iwTewVaiqpg6b+/WO2sfiCFI84wSoXP/5lfqu+SLYs/R0urRlUCqNCJ/7b2lXrvQ7MuxhV2ouLxTTVMx3h5496ViVii3DmuK7mkzd+OT+W64HFEKkpqy55DiQJyVbmHdYcTgaOQMacDRw/fBmMf+DdAsfaKTkF2iuOL5olmEHPYDL+8xPBBh4Yr8sag7gAABtc1Ezlp/dnnlRy6B93zs1g2v4TYekYecOxP/mnD8ZMdonue6qNOvEFC8S4wYSpn5mO2TVnf2p6ByGBhWJ9oRPe44ylPToR5nfLJpxRuQOxw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=fwIpD6yQVr1QMgKZfsUUT0iB2WzL9g0OWjJfphdF13Q=; b=h94tnLw9tW0tH/K6rydcCFqr6h6u87v6Dd/98u0Ot7yzo61tkNoS9rTEW8cODHgTOdKa4VL7Tdmd3qkfuzU6xvsuNPNlTPLzBB2MCBxkTEiMAYU+Q/5gZpK+70TygiGjxImi3XUema2KijXKtjov8qHYu20tDY48G9cBC9sqB0CLDQwgEPQ/oU0YeWTMjocmehntmTYhdb6j6TmSGJcbiXe+nFQhMqs4hPs4+84zp2lzC7ULpEvY1lFkdudmK0QyYQD33cfEFe5C7kJDXPEh8mHF+95dpRZoOl6Kb9X979U9eiIywqhd36RqMTdVnfg2kl7olpwKbGaEmWLAVxilow== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fwIpD6yQVr1QMgKZfsUUT0iB2WzL9g0OWjJfphdF13Q=; b=FyG/V52JhDRHiHkjnrQgZLksTbxKodNR/7AfoHLNKeeaXQQMSQ/08x1tAcpakQuGAEEjU/Vz+QbVxFsP8cuBHeEuBerxQCzI+nadp2Axdei/Jus+nghB3a+SpUWaZsuLk6MZZR/Ex5qkLrw7JoA+zgrshXSb62Jjq2/PN8M7/ESxjXNOylIqTclyUZKJWHGRKusPW+5YfxOnXzFuBm3BokToeTx/XGnb0fII9R2S8JhQm8PKxIXrv+jIHuDfumEK9/AYobQrVCnJ85ta+Ud8DGYrOkHJL89Ai0tIs49OY9nu9pjqZbNhwMj6qjuxxBGQQ+FApMIx76AVVm8D4GNk1Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by GV4PR04MB11974.eurprd04.prod.outlook.com (2603:10a6:150:2e8::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Fri, 23 Jan 2026 02:22:35 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%4]) with mapi id 15.20.9499.001; Fri, 23 Jan 2026 02:22:35 +0000 From: Wei Fang To: shenwei.wang@nxp.com, xiaoning.wang@nxp.com, frank.li@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, sdf@fomichev.me Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, bpf@vger.kernel.org Subject: [PATCH v4 net-next 07/15] net: fec: add tx_qid parameter to fec_enet_xdp_tx_xmit() Date: Fri, 23 Jan 2026 10:21:35 +0800 Message-Id: <20260123022143.4121797-8-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260123022143.4121797-1-wei.fang@nxp.com> References: <20260123022143.4121797-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0074.apcprd02.prod.outlook.com (2603:1096:4:90::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|GV4PR04MB11974:EE_ X-MS-Office365-Filtering-Correlation-Id: 5dfabe71-79f1-41de-a2de-08de5a2645ad X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|1800799024|7416014|376014|19092799006|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?htZtdj2aZ87Q8mLXpHaoJWV5TwGRIqqX6o6Rm3VjRFcwFFPNVIdXQxO86SzZ?= =?us-ascii?Q?EtVongunJP9yvAGWnN4nljvkQ9aSNACvZs6XkfMArVajSstamKOmJ6X871tu?= =?us-ascii?Q?dw8SesqaTJozBTzJmljoSsiGvyIzxtyBBRgwOTRIyShMyH78OuXFiSrZ02iv?= =?us-ascii?Q?CqgrbT1tg7OVijL7P1CrVixr3xM+nRLfpIokg99ue6xnw3JCtzkqgEcYpF9m?= =?us-ascii?Q?v8fzMg9LvsBgoprph+jR57rK9sotPUGqizC1JvRMSePmefkopY/u80iGI/4d?= =?us-ascii?Q?GKUol4KAGCHIMsBUarIigWnl9cdSjQbYHiT19D1zdpfZ97V7kszq+a6KiD6X?= =?us-ascii?Q?Hbhvk1SJiaI0qTHvHvqZdoLqSfaoZbmiUvz3oPwoCZogzm08ZK2IFtOktNlB?= =?us-ascii?Q?rzIj+MksLjhHaA1yFyKMJh9Zf5PqazSUK5bGoOHq87IJMqTYzbF6MRTgxG/0?= =?us-ascii?Q?/lPfNqLrJad0VyC+VbTSpEHHFg631v3e0ywTht1CWC0lgYMGlRQ6F3exikYI?= =?us-ascii?Q?5sTp+MQ7XIhRbLB894ZYkeDbk/7zLIpMBFccEEeGvi5MdC44yprDc+LVGVHl?= =?us-ascii?Q?/cHUQDpLj8kGFMv2CEZC8p6hP1V54enpHxGLcMzYE/SR83jNHsNKubNMeRGb?= =?us-ascii?Q?toMcSmIGfPMCmToD+9UnO0rPDhrNyPvLUK684R9lnBgggmtQXjqdr4lidjet?= =?us-ascii?Q?O1mrE5R8hSbFHK2mblOFqaWgCDFpbmw3H764QMVIYV4kR83uFYurZBsEoJ62?= =?us-ascii?Q?8aJnXcTIa3UBTexRZ1b84ap2wdbq1CeaBqwZ3UjqkzF2NMuOxqxv0z0D7KgN?= =?us-ascii?Q?t/YjJZmVBYuPxqI09hLQHme7NGBQrf1WNMgxzVhn5NkuogHGnokGO2RwOe2F?= =?us-ascii?Q?F1zPwniDWA9eSwJBo7tkYxvXLYBd8VXZoAIlkHVBNtiZp9jc43bVHnSozSHY?= =?us-ascii?Q?/RjYxgmtEEcD6wMu8U4awbHQM35SQXKlST09+VMC5x23fPhkbwVBUNpQm6Jf?= =?us-ascii?Q?e/x+gygjra0fpL/qqMZEZLK8YjZcFmCDaoEzkpWYI69lLTOrJyFNapMKRLBG?= =?us-ascii?Q?NOv7PX3kB3lRDX8OHp2eFgTXKicKMOpnrGcwMfaNNlr0CBmDILJFgpHba+aA?= =?us-ascii?Q?5suwouT10q0Uh9k0I3gJYpb2DxY3U8/loLpz6YYFozgxvbnyaNi+6gfthMHN?= =?us-ascii?Q?pnNVAmmdAWw9dpa6bpKbJr2f/6rWyQJGY6M7VqzinaLJY4272r6diGQN3Vj1?= =?us-ascii?Q?IShDGENJ3qx8NhVEcuNqJlpN5cSgpHilVua4ExtRLe/bQM4ypJQLu3FSESkP?= =?us-ascii?Q?+obwC0r7MKtqLI5VMi3jfHo+rV7HV0pjuMHO0OojFtXQIc6dZPcQk5e5HceS?= =?us-ascii?Q?5Oys1kZzwn8V6O/60xm0H7cwntOAI0uj+I6EgRWlHQbHfdbdaasraWp/xB6O?= =?us-ascii?Q?RwF3Oz5NHsmkEpnaZOCPC25dySRd2B1TcbzQISD12P43Oo0Xiqazh83o0ogW?= =?us-ascii?Q?njf3xW2T9s2ojB1r1YKrA9xofaxUn0/XzgPGJsGRRO/NJzZ1oG7pwxoCm4IT?= =?us-ascii?Q?RVNF7iDQYBeLeU2y4HKOuOmga0bQWRnogHvC7AQSVb30xHhYvb+K+ssuVtN5?= =?us-ascii?Q?EGOtFT/Ig8mdVksH+p43R5c=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(1800799024)(7416014)(376014)(19092799006)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?k78tLGf4MIjb2NN+QpmKOuKWQQOe5aRFI0lDt4ZVKQKEx46+VWG1rseeDUu6?= =?us-ascii?Q?NQy781NFoLLBXRuEmr5jwgldZe/taJBz+ZOJHICNDau1DYFvgwnEBsbcJhcd?= =?us-ascii?Q?8CdEdPXJtMMVTpX7uxscfUhQl2KGyhrkm6zsbGQnCNPgRVbkZrUzXo7OFsNN?= =?us-ascii?Q?lxhGcGG/8L6dg19YRQ+b0oHe2hebGNQ2fqrhesYVfx+9Ec+nA1cwZd947BoM?= =?us-ascii?Q?c6CT1PX7R6moAQ6RBG/iC93eKckuqpL2oqSL+zlon/F7rvUmYaJdIVULysUo?= =?us-ascii?Q?5d/DzGEmtwyf7I//sFxB9LsHNSzEEPu/Ns357ED/j6M5kvL4P0zXt+nxO4s8?= =?us-ascii?Q?yV71imJkGbF8KZG3UStUG+Ihb8Gna+Yud2l/wsGBZPwbX0THAojlRQ3l7nnZ?= =?us-ascii?Q?pTcP6RXWd71nvqGRieTQpWOtSb5MGP0B9ZIpMGKkhx0/Fqn6dRfcdHjuHizg?= =?us-ascii?Q?pjsmy3rFAnewfL4uA485O+QrK66TgXWvMT4iCu5NZtGbAodgABNwn+Fnz1w+?= =?us-ascii?Q?CF0qKUhb/kSRqeT/ZCsD3NZyqZQHEQm30LMf0/eQ5l7OpSbi9lDpKq4SNTbZ?= =?us-ascii?Q?ZcGSVdWwtxJI1um4+sq8LxbqwWGD+/5ZotH5hRmGj+LLoR+opFNDCV6E3Beu?= =?us-ascii?Q?IPudH1MmzlOaXyNTCmZGDVZJJChoNS62CCbRbcDB4q4louQhdWjZ+L0NFiYk?= =?us-ascii?Q?avHbKvoQgGBIH7++La9+9phQpfimBobC5498ZieOCcwm8Sqk19hUAXq5ts/9?= =?us-ascii?Q?1KS05WCOTbKk2w7kdR2R5758G/uQOnnBgogO65e82Iie+32grM27KNCwftPH?= =?us-ascii?Q?2dpbIOWA1q1AXH27xn//04N3wjB2Odwv3GDHaNQbH/wH5KiJw3R6ufrgLql7?= =?us-ascii?Q?ig0aIqQAemCHr1zOudrKrzjZDdmDOXLe/aDTsvaYD2Pf1LWoJTL+a7NwY2v/?= =?us-ascii?Q?K71tpOjRiMu2uV/WgCQaJj74by5wC7TsXqjAQ09zJ4uFcrQyAAiiI4vxbBbH?= =?us-ascii?Q?hpP7BYWE0c1QnCT/+Z/iJVjYTZnL2h1WUTt5XyX++KGfv39XjUr8psQyKtas?= =?us-ascii?Q?tfnxb4FksKvYpodC/NIu5rciah1A1rQF4lScPHDVYkV3CcUZQhN5yNBPwns3?= =?us-ascii?Q?iOWeYwJUaleaAYNujopTdIoEaBoor+BBwGH5enYtjmLQfgw9a5MqU06dt2nB?= =?us-ascii?Q?EsJbWcP+nFnz1mT34saz7a7w+Q08voLl6U14xuVONonWTikzA2Gs+o+dBVR0?= =?us-ascii?Q?2tidLqSQqFcog/2DMGigcfYKPkggyK8PQxKez/4yD2biyvNp5Me2aWk1wRhD?= =?us-ascii?Q?+tSHvOz+PjlRnT2Db1J5c3tgId6xSa9Z5jOmNhnzTM/00zUdzjzhzoFV+mq+?= =?us-ascii?Q?OinkHcM9BQqKrOh748Y3MR4N5c/BH0Kdlzlc+/6ePtU1Si6gxjn5Su6UJBeh?= =?us-ascii?Q?eRkE4znYvzqvteYRem8Dyq4Gh5ECAijkHhktgIHJKJIXyOLscDC5RbKLj6+8?= =?us-ascii?Q?HTMiRZn4C6JXf7Gq9X7Wtl3XnfqE8RhDv3TxObSD5I+9MP8OfkupdijV6qHE?= =?us-ascii?Q?H2BBfIbtwfF66qOcJRd24Kts+cwgbLjJh2ju7l2a+5gRXKO0woncdzhA6vF3?= =?us-ascii?Q?F3/UBnyudgWFx7YfeEdP76ZBDUMEHbhESGT3JYyWEsdtRwxLJiOLL51+JaP6?= =?us-ascii?Q?eG3BXA87INFuuHY3gEYykWBI4mC09ccfXYkZkf2OASpAkycd?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5dfabe71-79f1-41de-a2de-08de5a2645ad X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 02:22:35.8440 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: L29L1GY9HdlSYZY7qTRKuu04whuPhRJ+HSwFPEIMo37XOMUVnqI0n33BEMip9VoL8AFaM2hsWU4u1/XcjO7KHA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11974 Content-Type: text/plain; charset="utf-8" Remove fec_enet_xdp_get_tx_queue() from fec_enet_xdp_tx_xmit() and add the tx_qid parameter to it. Then, calculate the TX queue ID for XDP_TX frames in fec_enet_rx_queue_xdp(). This way, the TX queue ID only needs to be calculated once for XDP_TX frames during each NAPI polling. And since the number of RX queues and TX queues in FEC is generally equal, the RX queue ID can be directly used as the TX queue ID. In exceptional cases, fec_enet_xdp_get_tx_queue() is used to calculate the TX queue ID. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/fec_main.c | 38 +++++++++++------------ 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethern= et/freescale/fec_main.c index 86447a7cb963..b60c736da027 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -79,7 +79,7 @@ static void set_multicast_list(struct net_device *ndev); static void fec_enet_itr_coal_set(struct net_device *ndev); static int fec_enet_xdp_tx_xmit(struct fec_enet_private *fep, int cpu, struct xdp_buff *xdp, - u32 dma_sync_len); + u32 dma_sync_len, int queue); =20 #define DRIVER_NAME "fec" =20 @@ -1889,6 +1889,15 @@ static void fec_xdp_drop(struct fec_enet_priv_rx_q *= rxq, page_pool_put_page(rxq->page_pool, page, sync, true); } =20 +static int +fec_enet_xdp_get_tx_queue(struct fec_enet_private *fep, int index) +{ + if (unlikely(index < 0)) + return 0; + + return (index % fep->num_tx_queues); +} + static int fec_enet_rx_queue_xdp(struct fec_enet_private *fep, int queue, int budget, struct bpf_prog *prog) { @@ -1902,6 +1911,7 @@ static int fec_enet_rx_queue_xdp(struct fec_enet_priv= ate *fep, int queue, struct sk_buff *skb; u16 status, pkt_len; struct xdp_buff xdp; + int tx_qid =3D queue; struct page *page; u32 xdp_res =3D 0; dma_addr_t dma; @@ -1916,6 +1926,9 @@ static int fec_enet_rx_queue_xdp(struct fec_enet_priv= ate *fep, int queue, flush_cache_all(); #endif =20 + if (unlikely(tx_qid >=3D fep->num_tx_queues)) + tx_qid =3D fec_enet_xdp_get_tx_queue(fep, cpu); + xdp_init_buff(&xdp, PAGE_SIZE << fep->pagepool_order, &rxq->xdp_rxq); =20 while (!((status =3D fec16_to_cpu(bdp->cbd_sc)) & BD_ENET_RX_EMPTY)) { @@ -1988,7 +2001,7 @@ static int fec_enet_rx_queue_xdp(struct fec_enet_priv= ate *fep, int queue, break; case XDP_TX: rxq->stats[RX_XDP_TX]++; - err =3D fec_enet_xdp_tx_xmit(fep, cpu, &xdp, sync); + err =3D fec_enet_xdp_tx_xmit(fep, cpu, &xdp, sync, tx_qid); if (unlikely(err)) { rxq->stats[RX_XDP_TX_ERRORS]++; fec_xdp_drop(rxq, &xdp, sync); @@ -3938,15 +3951,6 @@ static int fec_enet_bpf(struct net_device *dev, stru= ct netdev_bpf *bpf) } } =20 -static int -fec_enet_xdp_get_tx_queue(struct fec_enet_private *fep, int index) -{ - if (unlikely(index < 0)) - return 0; - - return (index % fep->num_tx_queues); -} - static int fec_enet_txq_xmit_frame(struct fec_enet_private *fep, struct fec_enet_priv_tx_q *txq, void *frame, u32 dma_sync_len, @@ -4040,15 +4044,11 @@ static int fec_enet_txq_xmit_frame(struct fec_enet_= private *fep, =20 static int fec_enet_xdp_tx_xmit(struct fec_enet_private *fep, int cpu, struct xdp_buff *xdp, - u32 dma_sync_len) + u32 dma_sync_len, int queue) { - struct fec_enet_priv_tx_q *txq; - struct netdev_queue *nq; - int queue, ret; - - queue =3D fec_enet_xdp_get_tx_queue(fep, cpu); - txq =3D fep->tx_queue[queue]; - nq =3D netdev_get_tx_queue(fep->netdev, queue); + struct netdev_queue *nq =3D netdev_get_tx_queue(fep->netdev, queue); + struct fec_enet_priv_tx_q *txq =3D fep->tx_queue[queue]; + int ret; =20 __netif_tx_lock(nq, cpu); =20 --=20 2.34.1 From nobody Sat Feb 7 17:41:16 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011034.outbound.protection.outlook.com [52.101.65.34]) (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 4F3F436E493; Fri, 23 Jan 2026 02:23:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769135018; cv=fail; b=lVAQymcJhF/ghs2UZ87EgpC+m4B43Yim7E+OdIi33hebrIjYWgJqJ56u+hSoBoBnxO/oXKTJspQBx22JBzsI7oux+LsBTiKDLmmV55aCBkNTnh76qaAtVotQAyrkncpCT42LCIRq4seHIbPQnZ3I+wN9Ah8zGnkID+tr2s5ce4w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769135018; c=relaxed/simple; bh=bmMmh0w4BOq31WRsij3wZJGEP/E6AduAZ1d6wUNQjlM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Jd0Gq2qTLx86yfvja0if4krNUmCqVEOOtyXcOG3pG3gCSXKK0wMUwn5ORkL4nUSd4mXprL7qxjfijmSiMtjq8chxsCp5pfaAjFuBL3dNmBu7H/SwCXj81OeAXeLxVSAZGpngXiah3s2khVpgomNujCgNrNJ/D9sUeJ4jL6OARC8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=SDgDwIps; arc=fail smtp.client-ip=52.101.65.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="SDgDwIps" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YBBL7Hudu1tW9NuPX6giPG7q/+7iF9M2DWo590YIKn9s7yAjSmQR3LCw+MnuwNe70Ni0qdGBSmfACPdwv3JFL6Hosc6fl1hk+rqY2WPEGU5RpXWjJ7ihNV+n3DhjMyU5VMcecKjT9aksjJPMcYFgU4JmZ7Ku3wqqEQrv33uDNTStC6R4HloROliruYqQrLkr88WKBieb0feySFsX0qPrdfX03LMpZndi6GJxIHocVZu85aBX6IAWhCZQxAof9yUt8a4F9mHEXRukHxgXnWB59hOmg9tCmMzpyUWXG06Eft0x+3pzNmZf2RNWva1j+21TTs/+AcWlZ37n9OC4mS9LYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=joEZ/nfjW9irnpZXF1HLILnWOm7c8nlWmhV78GDgWlI=; b=ZvQo1LI4cCoWoU3hbQd0V4zHoDI/Ux+8nrbaJXEHx+ssMbZbansfOLiGbDv1UojNxPE7vj8KqC6M0XKjMoX9a6IhhYMnv2AuSa9boelmhKNkZafATOUNsNHR50BIrDlLLinL8qi7dlO/bKRrJ1GWabqF3dDrvJy8mjDl5RqIp+ZRKqK+jyqdIoAHuPoUUy9b94FVInLwh8t6+K0l3vWAk3K3zmodeK79JCkSiWXimGkO0KaIQ5B48bOtVJ94g5x8hkF0zLFUlkOqXaZ83yu3c5lQUNJ2I2NnM/gz6ZRDtyTaIM/n55xc4wY3AyUDt63ePNKaYaduLBd7TUOwn8f4kw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=joEZ/nfjW9irnpZXF1HLILnWOm7c8nlWmhV78GDgWlI=; b=SDgDwIpsdi3f6E83JJgwbxo9fWHE/Zzo0oOO8tRkrh99IaQHBNRUYEh4nR7rDgP8RK59qorcQr5boGpFpy97IWjiWPepW4eVi/gHOSXsb7tIQGrCXCxVI39nIXlofOeNQlUyw6lYZFCPTR+pWwR29j80vlRGUCQK10/HrtcnnjjzwH6DbKJdJzZ1FB0ne1PT8j6QA56op6P/rNPtfTwVopFoYndpnMy4ufHuDq1pdiVnci/sruhsEsfr9O2orzsxRG/T0HRIUG7EXQihkGCfwPiAewh6MH+LDQudXdKo797gvzwMRoSJI7ptE9XLH4vgHLVEV75FcBzzRoZQY6p7pw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by GV4PR04MB11974.eurprd04.prod.outlook.com (2603:10a6:150:2e8::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Fri, 23 Jan 2026 02:22:40 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%4]) with mapi id 15.20.9499.001; Fri, 23 Jan 2026 02:22:40 +0000 From: Wei Fang To: shenwei.wang@nxp.com, xiaoning.wang@nxp.com, frank.li@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, sdf@fomichev.me Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, bpf@vger.kernel.org Subject: [PATCH v4 net-next 08/15] net: fec: transmit XDP frames in bulk Date: Fri, 23 Jan 2026 10:21:36 +0800 Message-Id: <20260123022143.4121797-9-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260123022143.4121797-1-wei.fang@nxp.com> References: <20260123022143.4121797-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0074.apcprd02.prod.outlook.com (2603:1096:4:90::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|GV4PR04MB11974:EE_ X-MS-Office365-Filtering-Correlation-Id: d51cf2d8-1724-433a-698e-08de5a264864 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|1800799024|7416014|376014|19092799006|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?rWKSjaa9JLX05zqixvo4pM6txfTneLdYxGkYHySYRnuZ5fU+DlPEN/juzQJc?= =?us-ascii?Q?lZ2BdzwW/SmW2mIOSW2fpno9iOc5FgWox4vPIEh2XpbEjgVOUAO5Fom8TJM1?= =?us-ascii?Q?e7fZeS+VTWJYWwSHxCGfkM9kYCWTbqnG5PdHrcmTUItwgCn2Zo1nkFR15doU?= =?us-ascii?Q?k73Z643d52toYfOgBvsCNfXB/KdvnDdepEBaoCXhT+EyaNpDyTc395vHtNrw?= =?us-ascii?Q?bYbo5DInjHtIej/f1dHb4TXF+QQ8CwZjC0EgYX6Gxirui5GMuk4XQCF4Fprp?= =?us-ascii?Q?0UgyFqPx2l0WlwP1nDYXLMcBXN9NzWisny0r7qKu9FAxCQeQPgsOASb7bXej?= =?us-ascii?Q?/5850pz/IBDXWfeQeijKmbCXvjwRb6Wvu0MRCDRs5hQMlBANAF0wbslwXih5?= =?us-ascii?Q?+xlnGr1aJtABr9ms77lMrbiBmNrtoSn90Cp7F9dha+f5PM3otfKWeL7esoCy?= =?us-ascii?Q?Rs6g2uVf2ip2LPGOvPYeKUNdk5VVD4y7i62j5ViVfpxHB2U29Bb0qeDDn6hq?= =?us-ascii?Q?ILDEc7M3SxbivDJMRvQaxpU2zF5ZZxq4a/4U06T9Jc6BajvtDnbg3wPCwkyE?= =?us-ascii?Q?WFd1oS1atbYgxkB/5MQSDJoqTNEQ1tYMC8m6JHrU81HTUhbkbp1QBczcKYBT?= =?us-ascii?Q?WtEBS3s5IfgjSi1NwiBHzNxXjhHYQmTPmBSujvVozha2H/4vXxzXhQCamLi8?= =?us-ascii?Q?/T2RvUFWbnnZRDUTefjK8OYpqkaMC8eg9yHeeQELzb2f0ZXlCvjrcv0KjPPy?= =?us-ascii?Q?wJBYB38gem5wOK/z6cVdZ8XGDQRGDN950yLfFmnCtGgc6mnvxdJre6BSFYGE?= =?us-ascii?Q?TB0Wpq5Hy7WC/NVEaYqljzXFk3pCUbG4SpGri4QemUSVVR3ErF6RSpb1FDBU?= =?us-ascii?Q?Q/VPioXYLheC/u/MloLGxUA1m6FCaldg/5Ze6kWjadd0pYmi+dB3iim6bGgX?= =?us-ascii?Q?uDyI4hbA5mC5vJ7x7bwY9/T5sO6+0bHdOG2eHIqVeX7mdFf6QP+o7Zmd5e5v?= =?us-ascii?Q?pR6Qf93NrIN5CD6C1DFl+qJubWIuvSdjej4X6ESNJMPfvjqp8DwlXT5tzi4a?= =?us-ascii?Q?f50XqTi7Z9VhtrcmhRXsl8U7MKfn1j2BGqcH7F1xb0M8Q6SqPzzmpvMG6DoO?= =?us-ascii?Q?XsDE4JTwCIbni4nOujFdJMmNI07uEK4CigQAdyPNIGITDE7riBCENIU20sUB?= =?us-ascii?Q?MIYrakWmIHOcICa+oGyP9h59z1TC0tLwy9Zg3XmkYwbI+Y27Q+lE9tIEd2qA?= =?us-ascii?Q?uOCVC0xnbgD3EzQ/0DrzmTiHOYio2395rHkCnGbUadawan8ZPrb/OI37RooM?= =?us-ascii?Q?t5MhdnQ46h/k/AFXZvjBdIDD7NdKPaKlEPezp7OG11z8T8dSWskSfhed8MnB?= =?us-ascii?Q?HsCKSsACItqjL5D9RkRAmK8q/Ne7/Qxc5CA6Cb8Fa+zi+clyNF8lJdyPGAjW?= =?us-ascii?Q?Nyogj/aZeDZUm2xkYABllwatDsReYgxcqpQ5l0NB2er0N7L++zeFUUIxtFiI?= =?us-ascii?Q?53C/cvgjv4tStR06k+zaXCAuJmjbS/lBv+48bLTDIMcE9XPVmGvAEUbYEsgA?= =?us-ascii?Q?G2YhgJP2UNNhOdSAq29Bj9t6uE3BKlHSQHeQHrYfON1US53PveyycHre9dwd?= =?us-ascii?Q?xCZJB6Wf1mbQFPovZpbO0f2WtXIeFsCv7vVq2wGLEiXm?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(1800799024)(7416014)(376014)(19092799006)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?YBYZTzcVqjLJaae/iKBTSXgjCHQ/6G5/B7OXHRFT3qJlpr9znDeelDpeiy9U?= =?us-ascii?Q?/ZK6XK5TiKM49vLVZ/dav2AAZKy7Eyc6YSamMv+AyGRM3oee6QnsS+LLYgA3?= =?us-ascii?Q?EryAIfQmt7f18JzRDvxLYGLmxcZJu9el4RmRFsGIMYfR7MJMDfBIDy7zoQdb?= =?us-ascii?Q?4H/pRrChU/hXaloR7aRnmwPxtfz3hknfyoRrQ/cioEt+eNzLr+i0mNsGZZnq?= =?us-ascii?Q?xbfQvh26v3SfNqkEH3VHQqv+CDPIu2vz2RTBPlKuD7UwwwUG2IVTjdFgigRf?= =?us-ascii?Q?1YfLSp0VAQ2AMkHcoj/hXYChS+XEYzOyKR8WCMWdv6ue+FooM7E58/8d0fkE?= =?us-ascii?Q?VlAy+e/sBTAt2ncC3HR/ckBwRTu0ioYm2pDhlSeR1zs9STd9PHasmdzDHICY?= =?us-ascii?Q?U9cLhx8UasUoX0Gl8hysb9nQJrAVO+sUB8uRImYoeFR4CtNMwcULS8AhqEyi?= =?us-ascii?Q?3Y0ucdLtEs8Kw0VuRwiJeFovV5NllMNjk3/WmrroVrvsMSF3b8g8LXtcDh4i?= =?us-ascii?Q?lB31ZkITZXQmG7CQ8R0VSd1vX8AAzIcnATel3vxxyT0+tFWDnlfEDTY8aC2v?= =?us-ascii?Q?qDWVZb7HxHofDjZ4nhQBv4sbr/dd3RZlRPIVu2CT8ozro210642t4fwTXU4m?= =?us-ascii?Q?7oZ/KwgTDAV6XFYVtNfSTKA1OdrotgnTY8o9DJWqT8zx2szNqdz2Z7Z/5YBz?= =?us-ascii?Q?VAN+k+nGR/UbiNNdeJ7GDj9O6oOtSe6amXNJCAX0bsn5XgPKPh2Ap+nmyV1V?= =?us-ascii?Q?9GheHFvp25zG2YCbXS/R7CI2OrEkmELVXlQ3b3YsG1AJSQnFAprOvnf1xHio?= =?us-ascii?Q?yGolts6wzrDJ2o3BKWF2si8+8CeH22eBTSGh1MvvroJhVTIVA+vbBzaUaYpq?= =?us-ascii?Q?Yw9DzMjePGK5ief4b8xhpl/U1MQMrdxajpNPT+BVFNjxC7j5YO0caLauoI3b?= =?us-ascii?Q?SnOU8zdY6xwvRFigKwQUNDmRfxtV4/dP+6kJ0Z7Vhz9opMcZI39ejg8OzBxd?= =?us-ascii?Q?NmtdEeg6RSQLKUxDxUw/ZgbK8WLb1gmOXaLCnxCoUPYmvJERGgdSeUzJViZW?= =?us-ascii?Q?EYRpPOAenpnAtJmiNTZ+f/XWYFxeKUKt/oZXg9u4yGkcDeMh1v12Obo20w5M?= =?us-ascii?Q?HHwscHdePcWL/N9d0tABPkugbLUHQa8Wlg2wnlBXkjVC3vfHI4L3Vk/P7zqR?= =?us-ascii?Q?oBwX+zHJtVQ0O+WmEEzSZPqFtzEg7nw4oHxjGWCsbwlsyF6wfR2iuJiBrkgL?= =?us-ascii?Q?6T+kPSe7UgTXUIaQITUBY6/sO39WSQBam8es1o5PO4fd1CQalo9yLHPnHiKq?= =?us-ascii?Q?9NBayqNo/ISf+ZdDDwYPT3OEX0soh11cKjwCQhdf1P/vA8V8+hEscy6Q2T/E?= =?us-ascii?Q?9G0wYI0mD49jnY9hS/Syn0Jz0Qo11fbW5NIHc2w8FlDbEIVmjducKiYfjUL1?= =?us-ascii?Q?s/NLje+wvq9XLhRcAhvxrK66AAryu97ot41J7Z67zwJM1ykqKl7Zmh0NSgLs?= =?us-ascii?Q?mwkBcKJJfyBr3VBqjlsb+ozH0XlVt9cJYz4SIrXtWaF+dSJj8epkLNg9/kiU?= =?us-ascii?Q?+aiOsfCJWh7IGPuKsYbsGQHbfBagHfT+ddB1tJt0H3l/+R7SHMyjSRnOfAjy?= =?us-ascii?Q?7Y8zdbvXdnl93JRzgg9/ZpWZRghAMIXX7fSI5cadXrwip/0q4oy5RuSoY17x?= =?us-ascii?Q?NRQ9bUmHFAeALmK/QRLacrigUGUkN93HN0RUPU/xaY5D+fqer4m5vDGE7akT?= =?us-ascii?Q?Mj1mzyJ0Kw=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: d51cf2d8-1724-433a-698e-08de5a264864 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 02:22:40.5081 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: hkVvvYJ9gAoeIkVCRj/J19cqif/38U9ZzGXjDi5guFCmk8zz+BWPrCkC4CdJe6IWToOolUVT+NXlLSEwzkCnxw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11974 Content-Type: text/plain; charset="utf-8" Currently, the driver writes the ENET_TDAR register for every XDP frame to trigger transmit start. Frequent MMIO writes consume more CPU cycles and may reduce XDP TX performance, so transmit XDP frames in bulk. Signed-off-by: Wei Fang Reviewed-by: Frank Li --- drivers/net/ethernet/freescale/fec_main.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethern= et/freescale/fec_main.c index b60c736da027..c927ab5ad8a8 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -2006,6 +2006,8 @@ static int fec_enet_rx_queue_xdp(struct fec_enet_priv= ate *fep, int queue, rxq->stats[RX_XDP_TX_ERRORS]++; fec_xdp_drop(rxq, &xdp, sync); trace_xdp_exception(ndev, prog, XDP_TX); + } else { + xdp_res |=3D FEC_ENET_XDP_TX; } break; default: @@ -2055,6 +2057,10 @@ static int fec_enet_rx_queue_xdp(struct fec_enet_pri= vate *fep, int queue, if (xdp_res & FEC_ENET_XDP_REDIR) xdp_do_flush(); =20 + if (xdp_res & FEC_ENET_XDP_TX) + /* Trigger transmission start */ + fec_txq_trigger_xmit(fep, fep->tx_queue[tx_qid]); + return pkt_received; } =20 @@ -4036,9 +4042,6 @@ static int fec_enet_txq_xmit_frame(struct fec_enet_pr= ivate *fep, =20 txq->bd.cur =3D bdp; =20 - /* Trigger transmission start */ - fec_txq_trigger_xmit(fep, txq); - return 0; } =20 @@ -4088,6 +4091,9 @@ static int fec_enet_xdp_xmit(struct net_device *dev, sent_frames++; } =20 + if (sent_frames) + fec_txq_trigger_xmit(fep, txq); + __netif_tx_unlock(nq); =20 return sent_frames; --=20 2.34.1 From nobody Sat Feb 7 17:41:16 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011034.outbound.protection.outlook.com [52.101.65.34]) (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 002A6385EEB; Fri, 23 Jan 2026 02:23:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769135058; cv=fail; b=JMMJq0XfwdczlOuMftnotrKhdSxfHxz24/AxtHCOghdCU0Lms7MpVYnWl5/uVmyZZHpC81lbKJYJzuhdL70IACm7wxAah2qpe7l/mRs/RmNyR+jL8mFV+EC0LnlHysAPMaZJqC5l8ttrP+ZyDhsc+/dWaIPlKf1bPT7aotbypkY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769135058; c=relaxed/simple; bh=LJaBZDLGsVzkUnV6jwACgYaMtntPfS7ZS8lGzsZ2JzM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=WL37VsQbp5UQkN79EgS5qcShdmgmglKLsReSSGbgQYAsuZWr0IlVQeDj64KmsYksZWEpj1vHGpsWr0SBeFYfbQngAxELKVG5j6hfwxjCZIB0posBvpRcOSLjTggw8zY5qJ8p6tEIFcl+U3XTKAu+yVuL2Ieb7AAwY5qxbspiOgo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=PUUsGbzY; arc=fail smtp.client-ip=52.101.65.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="PUUsGbzY" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AqHbtzEX78mjbcJ+h07UT7mTkgVaJJR3E2xK/Y1UwJTa9dwTWVeJMRO0CvVSoyDRbgAigtZo4nxuLazs3lO6A3O1drKnRZZhjG2OvaBiuIBVsxznMVfeKSgjjXjFbBU7nL+J69MzuPjfzVOdbdKE3WSHQLrtROMrc0c5Gwqjop0XblQACGjIT9kBA3fuqGT68Rpkrn4oFYR4tw0d/j12xdD6hP7nKXl6qrcxXpcumo/LqHpnRCIBglqtj4r+DLX6s24D/4tUCCq+y1YKi5DV4RUJr7ozx76Og0oIkANfojijDzoPvLOINM3bQkgYnC1lQanwsQ47yniiZcwV/5LLyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZdKx3aTF4+M18OkMCC09P25K94+un9kL5OO0k9sQQmw=; b=RDy3nm64zS70zV+x/DGngSgVQWMN3YFAZFcwHvHXoE2KfGtbkCL59wJXgl19aJwOZrgU5/TdGpMWFE70YK0yyctIbLIljeo58twMTHH/Cxc3QPIp03B11nlXUPuqxSNbC4WuDytWB9KNj9+RZiqW901J90mwjp7mIxazaov9K4t4NEHLV82fSJG5s3gcvF2idYr7OIjDU2O9h1ggEK1xmOQamikRzj5zBGZNjgDRXnDgbxTvsWZ8VhcozDHDU2m3bTk1NTTALRGCzfee9NYqSHtQP8qg3xvkVC2iWlh3UQWi5tTGPR7ArD+kg125t5Y4c6UL0SYYOnf1ASet0v/0sw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZdKx3aTF4+M18OkMCC09P25K94+un9kL5OO0k9sQQmw=; b=PUUsGbzYNh7oc3AdAkyYWWrOjpvC008CeUqPf4V2b6m1VZeYTMboLv6/3OihuF4gwcFc8kZwdR0KVBhy7GmKuekQvSQuQEFkVQndvzQ63zpfajQiLmC0JfrMUbuHoSMgZUQIosIRTgKFDJaOjoGLXGjxLyRGr1klsNA6LFdXuW3Wvgly6+xdMHPmsg45MKgq+us6G6zPqR1Fmbev46cxp/QEp9PnCILaK1R013rzu8tarA1G3ytVCg2KeOLMw/4x6tuaVYOWpRGWFXwoulrPJomtJIJLnIrUrUbmrmn/QCqiRe3TqW2dzA7m/kZLd3Tdb3YBGdpREvO40c0Gj/bg3g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by GV4PR04MB11974.eurprd04.prod.outlook.com (2603:10a6:150:2e8::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Fri, 23 Jan 2026 02:22:45 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%4]) with mapi id 15.20.9499.001; Fri, 23 Jan 2026 02:22:45 +0000 From: Wei Fang To: shenwei.wang@nxp.com, xiaoning.wang@nxp.com, frank.li@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, sdf@fomichev.me Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, bpf@vger.kernel.org Subject: [PATCH v4 net-next 09/15] net: fec: remove unnecessary NULL pointer check when clearing TX BD ring Date: Fri, 23 Jan 2026 10:21:37 +0800 Message-Id: <20260123022143.4121797-10-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260123022143.4121797-1-wei.fang@nxp.com> References: <20260123022143.4121797-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0074.apcprd02.prod.outlook.com (2603:1096:4:90::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|GV4PR04MB11974:EE_ X-MS-Office365-Filtering-Correlation-Id: 8ae95e03-fe96-4484-00bb-08de5a264b2f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|1800799024|7416014|376014|19092799006|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?HplasFhK77Yr2uxOBEhTm7CuPhsNL5cHF0Lq0puzgrF/g/MIFv8FhLtYQpQh?= =?us-ascii?Q?azoAgW96n/nhZMyQJsl+ti6SJ7yUz9Ejw29myP0CpSlrQjjWavV89e4wzcQp?= =?us-ascii?Q?k29mpddeEn6CpEeg1oPDqAsHtLSX1P3n+8rb9GMf6goLeVp/ieWjdgoUlH5+?= =?us-ascii?Q?WgxCWxa2D/5TRE5g26yTf06VQaErleJMxU5yBQKa9tqXOGWhPeL7JgcvdpiG?= =?us-ascii?Q?sRiZkYBGt8252/OmH3Fq5Tjbv64Q1mSpdJnEBcI5/G2yLaa90OB5Rr6uN4tV?= =?us-ascii?Q?xHF1dq5R+20tjqs17HGe9wpCnToLWXxRrxjEKKHt6qYwX6OQIOaUXVF1uZwn?= =?us-ascii?Q?bFqMbXPgz3wg1Ebmyy0RgLwodnVqiJ2/3uUuapHERjWI37VzcGpES7idau/J?= =?us-ascii?Q?bQo4SspZYGX/qZYUCVJ1neArIh0/SjxuMnroiCaGpxYnCH6ds+NhfZyEUrdp?= =?us-ascii?Q?0Srr54asLHTMttIYDof4xSo3kh24tOnTvlhKSOjgMJCsJuSPS4lzflyo5A54?= =?us-ascii?Q?Rv6dATW3U9syczsjbh5hBomAofKbAgsjYci6VUSeYqP7Ck2eRL2pJVljoV9u?= =?us-ascii?Q?Wl5in6FSz/ZaeyjF13g5FeHaBLIS25W78xiiOUzTPnpVhanEo+nkH2uVh13c?= =?us-ascii?Q?rthcRvGLMQH9jeSCB3ZmdIg0CzADuzKEwO5bdsq+HF4sgGYQDygVFSlDW3Ty?= =?us-ascii?Q?bmNTCe35AmVM4C/kEPQpW/EBC9fbD5Uql1MUgJzVTEvwpihmVf6AkAYYQWt9?= =?us-ascii?Q?zM7/xd+aVNCyioc05gEeIz9gjW1Jsdv8XaJQ/2D4QNhgpos6JO2YEA9KThxQ?= =?us-ascii?Q?imE0Du0OEdx6kRVj4/NtaqBOOT+e23QiW/oveYf2ewfd6ldL/IZzvFTxvdsR?= =?us-ascii?Q?XE6KeCNwtmIjTNvnP1TuIe7VKjjyLBbhkz5b3VdNuUSUWIo4YkHKfvuJsT6Q?= =?us-ascii?Q?6xdKYTo4l0GNi/r736H+PEoJ3hxXPgqL1OKmxLXelAh/n7jZocgW+QrXVPJO?= =?us-ascii?Q?F7iQltwnSmpE7vGZhr98z7IXyWCIlkHXYbhyOkmdG0WcgG0gBSNr8m8R7GkJ?= =?us-ascii?Q?43wG2W4J2yg0XppfgjE1OCOAQ27YUwl1FwwW9fsO0XD4lKNtyLuLi/saX6iw?= =?us-ascii?Q?fo7H2+w4r5RqrAahw5wEUgstflodtA8Bgl2//7SH7IUXOvBD0jWIwruPzskG?= =?us-ascii?Q?6qDOQP32p8GxfZ42gEJF+rMmlnhLV3KS9YJGClsWqaGInjZ3uiqtbFDofK+7?= =?us-ascii?Q?c1Q5eRxuIU8Jk54fXXaLQnmEFMa2z15egrC8ZMJ3YN/F86HH1t3bIba7Ag2V?= =?us-ascii?Q?miMjZ52elmpqHJd1pYcheOXda9AYQ7DmEM7yfinyP1p+mmVEDBDj9bFy1ckR?= =?us-ascii?Q?rdtcSi8VHUrdbrchJF/SSgFJI3hLpSV8SKxueC6H8iET236uidoGv+AWJ9MH?= =?us-ascii?Q?8ANFkD0VjzdutIhYKejZ75H1TtUKk7DeadXp8+iAfvbJUsSOtsaXpmol5e2E?= =?us-ascii?Q?HS+BnNcENwKt1kspgisbTT30/nK31cJ8w7mjVAqE5ij6r3oLLZW90DVi/xfb?= =?us-ascii?Q?bLDiaYViOTR/HXC3x4g3zJr6SGtr21Mz3GmgnkhtTULotT2KM7uzpnzkhe4K?= =?us-ascii?Q?pwr0uJRXvcovv7xrTPiXce8=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(1800799024)(7416014)(376014)(19092799006)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?sAj5A648LklnivQre1ycWwhMfRdKkLgaVt4yl8RK8rztgmK91d8VPLpQqSyD?= =?us-ascii?Q?sG1vrw4fVXSi8Ll8u8hC86E+hOypUr9ZSUQ+cFjbh+MSIQKg9tcMRjU4Kkj1?= =?us-ascii?Q?QpQ3zdda0bagogC0ILgEhWLzSPBMWXRRGiEQdQ4aSyzqgfuA+pw/WAST+Bqg?= =?us-ascii?Q?Ky89Ifa85YY9r0mUL56q0bcmVuXQvND5yAhyddllwihLpK+aKDAignrPYy+1?= =?us-ascii?Q?JdS/TAn5sYZwn/heGe4TsG8vIYvxxVH++3fL7f/c5QGN7tWMAhsgHFGjyITm?= =?us-ascii?Q?3xiQ+YzZKLei1R3ldFZzTfbLmAYwptPtpm1XJtWF0k6ZnAYojTWwLQ5+FrQO?= =?us-ascii?Q?+P/Xlm3iAMudCAstaRtgXjJ2L+w4plUM+IyJD1vpMdZDPI3QKfqswr7I245S?= =?us-ascii?Q?CEuRoH10kyAbB9k2PXnT74VLTR0h6RHSwtQbGmTI6YNwn7gW8mtQF9Uno/8n?= =?us-ascii?Q?w+H0x88RZMGXhrc3NDWu0K/J67q/AE5o+fxVHxnwJASA+FWgzDlRhsALxQH2?= =?us-ascii?Q?M3eccTUkGVmFE2KxFHn04uQg95A0LHdQHQ2wS4ttsw0dgDRC3SpOy6e7+JP4?= =?us-ascii?Q?msimJzPsVmkI7kc/BnRpmj/dmseGprqdYZPdeFpTMM+dP+Sv+7TYNUfEtUJF?= =?us-ascii?Q?qSyuGtGYKzeb0+leLkmRwe2ufERUXtKrhS7CXJAvqlS3f+I0iudPDcxm0/86?= =?us-ascii?Q?Fb1ZYvESQtizo+I/n5cgTE020d+nR0RhJZ8Z4Lpu0Er0ujHdYgvyjL8sTEwV?= =?us-ascii?Q?j8j6QmU5Iz8TasVgiZQ2YeHyBkgk/w72X0VQUXQ8/ktAxNRySwmEGo84Xwlm?= =?us-ascii?Q?mEixRIEshE6HdQaSNf/kFuBW7wSP12v1/JyIf6JDFxXQiRncRJqR/+M54jQR?= =?us-ascii?Q?tdVgLPwP1k4PHdyqoYOFRmuiH4Ejk+6vySgLyBKSk7gENFOD7J3PSggfG0WE?= =?us-ascii?Q?cs5HDl7wacOSQwdjgs2B9ECTmOGmOacgxSdQOWu3GspSgvQkcEescZvc1nPt?= =?us-ascii?Q?wYxLxWqUxJve7zFNJ01On7cQzgmmjhpi4ekVNp8yC+GDk50kFtKoymz2hFh4?= =?us-ascii?Q?KXTGj7o0TwRlpmEfjspInIKmsEMj48Td1wbq+hpQUxyfsuE6lVDy3sf9KFns?= =?us-ascii?Q?QO9rOOShAHZulbSXSOj5FQ0w3yF+6I7IEWjLNm7BIByTGDvA816b02Od1+td?= =?us-ascii?Q?WPS/v9/GMZPD0mSKiD7OKca/nx9DWmxqqCKWUK9bN82fELW4rvp7woaI5DX1?= =?us-ascii?Q?X7NKGuuSnuz8GjpAeq8hiFDZ6kB2s0e9CCs9Je8ZsvuxT+icrCU2Vry9fE/t?= =?us-ascii?Q?zgv1ctjvzwBhCm9JRnkMBxaQ57ks5ReLozDgOuUNoUA+h//k4oLXvEkLR3Oi?= =?us-ascii?Q?lwVtW4uQ1wS82JxjQFeXBb8kDHI669MtAdjR2BteeYj0AV2/P1K8wh9k5A3d?= =?us-ascii?Q?Os1jI2q+oEpM/e8yEf8BhmeplBq35ST6tMKmIuwBLDX/lyoGjcZFlaewSYuO?= =?us-ascii?Q?lBMxSEqwgS/KN1D9eZt83b7sBSUnfGyK0zXskUV/mzsvVkQ/IeKREVI0sXhB?= =?us-ascii?Q?VcANbBpwkFxpBFAZNEsv3iTRajdrUQY8FklGLL6nnE+Rzv6UL9Lwx4CalI3Y?= =?us-ascii?Q?EKRlvW/BTTjJPMiSNKt11wgP6nhEWY7lDXH1zbT2LX29uAhksXhW0f7uY4DM?= =?us-ascii?Q?39/4QqsJa6oT7qAezYMR+YEu0JJFoshKdPBa/cCV7OxyEbZBony0pdT3+esI?= =?us-ascii?Q?4yQ/KUFfBQ=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8ae95e03-fe96-4484-00bb-08de5a264b2f X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 02:22:45.2283 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: T3jJfwxRy827dsbub9SSFdqy6SWC36UaLqNeyA4Y2Twl88yRowEUkHirVPDOjB/kJQK5cJXbTt49jP2pmNdjKw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11974 Content-Type: text/plain; charset="utf-8" The tx_buf pointer will not NULL when its type is FEC_TXBUF_T_XDP_NDO or FEC_TXBUF_T_XDP_TX. If the type is FEC_TXBUF_T_SKB, dev_kfree_skb_any() will do NULL pointer check. So it is unnecessary to do NULL pointer check in fec_enet_bd_init() and fec_enet_tx_queue(). Signed-off-by: Wei Fang Reviewed-by: Frank Li --- drivers/net/ethernet/freescale/fec_main.c | 35 ++++++++--------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethern= et/freescale/fec_main.c index c927ab5ad8a8..2d486a62c178 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -1032,24 +1032,19 @@ static void fec_enet_bd_init(struct net_device *dev) fec32_to_cpu(bdp->cbd_bufaddr), fec16_to_cpu(bdp->cbd_datlen), DMA_TO_DEVICE); - if (txq->tx_buf[i].buf_p) - dev_kfree_skb_any(txq->tx_buf[i].buf_p); + dev_kfree_skb_any(txq->tx_buf[i].buf_p); } else if (txq->tx_buf[i].type =3D=3D FEC_TXBUF_T_XDP_NDO) { - if (bdp->cbd_bufaddr) - dma_unmap_single(&fep->pdev->dev, - fec32_to_cpu(bdp->cbd_bufaddr), - fec16_to_cpu(bdp->cbd_datlen), - DMA_TO_DEVICE); + dma_unmap_single(&fep->pdev->dev, + fec32_to_cpu(bdp->cbd_bufaddr), + fec16_to_cpu(bdp->cbd_datlen), + DMA_TO_DEVICE); =20 - if (txq->tx_buf[i].buf_p) - xdp_return_frame(txq->tx_buf[i].buf_p); + xdp_return_frame(txq->tx_buf[i].buf_p); } else { struct page *page =3D txq->tx_buf[i].buf_p; =20 - if (page) - page_pool_put_page(pp_page_to_nmdesc(page)->pp, - page, 0, - false); + page_pool_put_page(pp_page_to_nmdesc(page)->pp, + page, 0, false); } =20 txq->tx_buf[i].buf_p =3D NULL; @@ -1537,21 +1532,15 @@ fec_enet_tx_queue(struct net_device *ndev, u16 queu= e_id, int budget) =20 if (txq->tx_buf[index].type =3D=3D FEC_TXBUF_T_XDP_NDO) { xdpf =3D txq->tx_buf[index].buf_p; - if (bdp->cbd_bufaddr) - dma_unmap_single(&fep->pdev->dev, - fec32_to_cpu(bdp->cbd_bufaddr), - fec16_to_cpu(bdp->cbd_datlen), - DMA_TO_DEVICE); + dma_unmap_single(&fep->pdev->dev, + fec32_to_cpu(bdp->cbd_bufaddr), + fec16_to_cpu(bdp->cbd_datlen), + DMA_TO_DEVICE); } else { page =3D txq->tx_buf[index].buf_p; } =20 bdp->cbd_bufaddr =3D cpu_to_fec32(0); - if (unlikely(!txq->tx_buf[index].buf_p)) { - txq->tx_buf[index].type =3D FEC_TXBUF_T_SKB; - goto tx_buf_done; - } - frame_len =3D fec16_to_cpu(bdp->cbd_datlen); } =20 --=20 2.34.1 From nobody Sat Feb 7 17:41:16 2026 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010021.outbound.protection.outlook.com [52.101.69.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 7702F389DE1; Fri, 23 Jan 2026 02:23:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.21 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769135060; cv=fail; b=hzR///nfnLGNn+CkCvRcSfMvwiHI8GkIBkDIOhz1c/JU5wLpcS3oAfbLnoGRlinJWJrk4yncmPLfZLqo5/8aXw4/R8QC7uYGLuFdws5EpzK2pYb+ycTVlU1DZFPnbWkJzRigvzYWYJ7QaYFzw3gUfZ31wXXt5edLWoY7I1Oqke4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769135060; c=relaxed/simple; bh=i+5hRXS5o4Wi/zYiDKJYJUgn4+pxSJ/EESB/cyAhHsE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=b1bBU4cOwyq+BHOpUwEJL+AdBIyWn/FrJ0B1tvrpr2mMg6AJy8mIQyCVUAGjQCqJfURWzHa+VrkTIzdVBH4WE91q/9yIgjmfRP7S916frgngyCiWXXpNRuqMuHgF2XTPPQxppWR8vgRJ0tqg+zSl2B/Qm+PdIS+u5jCND0Fcj0c= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=NOMa+8vu; arc=fail smtp.client-ip=52.101.69.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="NOMa+8vu" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Cy/hBjxNPIe7u8s1ilfzCv1t/iEgSi/AZMGEkeR7RWtuyDeT65GKPXIIJ8QGf/IfxVuanMHj4cyar4WoUtMTu8UBv7did5k/qckqoXLqvXAZdn96FfEQe1NfEXln38dwqDCjDB9U+4J3l4GhvoijeXQqkWM5spv3RiXbfETIrCOgMytimGCCvWAElKzWG+qccaDV8sRYrtCFknWRa6eipKN2fKInLjhoXv3ext91YWY5mNpZSA+HoWEB51p3pUeRdjQIn6GEsGF9emK0E37TBIDnGh/TyUFbsyGbngZ2xeybgVCLF/u+E3Sugf2U05MNzjyA8yWkRdtpzyOYV9lWsw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=96NSnKr25dOsQcYSEb13/zRMQlkthS86iFhVkQnPLhI=; b=atXu86fsI4PnVbn+AQ9Tusrm8OBV/hYD923twj7UJO2Fi3oJ31RqI1tKUkLBr6D3/KuXv4RmPNaYEkHC1DP3o94VOSXOh7ur2VFojcpQx/q8IpTmB5uPWb0wnZuEM/uRjykohQtFWpyUgvbL7osN276yKhMmykmIu6QS/pUPXyf8d5oIC4rnon0epxgQOKhteuRNYs7FD8+bspT81FtuhH4vig+eRBYKFIin+SVTyxlOULpJLgP2REgotVuaBXXoWVUZ/zKn4zN0JaEcnon4XHF0ooWTvg5JpcjopTb4/Y2qsH1Rq6eLQy3Yv286QW7YtevUtLqG65h4BqH+l5OZHg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=96NSnKr25dOsQcYSEb13/zRMQlkthS86iFhVkQnPLhI=; b=NOMa+8vufCacRDvXQQA7BABBQ3iMgdJRyj1n5inKdqQzzRv/U+y13D0T2CQ+8D8Sferda6+LIdHt73NO7JR8cjOfxVOaYM8n/g9pHvC1tLlozSh7YEAVpVaANtcKbMKs/p7ar3cp39XZt2oVkKZgKQkxborxjQrrvNeejht8fc592InZ5B9bPudqpTkDncnm+8KR/u2t186xgOVu4bGTBEDeI0E89w3/saej8Mb4rgW8wUQVdJVVovdBpvYBBcUwIEF2VgEBAR5Gu+HD5UU4kyjCM36tLy6y4dR88PKAs4yCCBG7puI7aHPQhIWtkOFjxbhvPDoaR1ESItQ+2V5cHg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by GV4PR04MB11974.eurprd04.prod.outlook.com (2603:10a6:150:2e8::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Fri, 23 Jan 2026 02:22:49 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%4]) with mapi id 15.20.9499.001; Fri, 23 Jan 2026 02:22:49 +0000 From: Wei Fang To: shenwei.wang@nxp.com, xiaoning.wang@nxp.com, frank.li@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, sdf@fomichev.me Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, bpf@vger.kernel.org Subject: [PATCH v4 net-next 10/15] net: fec: use switch statement to check the type of tx_buf Date: Fri, 23 Jan 2026 10:21:38 +0800 Message-Id: <20260123022143.4121797-11-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260123022143.4121797-1-wei.fang@nxp.com> References: <20260123022143.4121797-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0074.apcprd02.prod.outlook.com (2603:1096:4:90::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|GV4PR04MB11974:EE_ X-MS-Office365-Filtering-Correlation-Id: 86b53266-eab0-4c15-c01b-08de5a264e09 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|1800799024|7416014|376014|19092799006|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?AyVyN6b0ZWWo9gPCMrfOkdZORmW8K+UYCjJQ9yDV5+c2HQ7SNHYaJgbTgTgF?= =?us-ascii?Q?bK5yHeZ8NsmP5+AsvW9NeqPrdUB/tV36XGpVuq0mjMYPeQhLUX2uX/uayQwY?= =?us-ascii?Q?vQCe+Ac1EJ2uH9kv5czgZYJxbrxqcUASKzNXm7RyfhtvhrGyTz5amTgl2ZLg?= =?us-ascii?Q?wdWc3AjEa5y6s6qkdpOnnlWCuj8NySfiekvVALM6ahj6/qS0Bfrr/5+TBRuC?= =?us-ascii?Q?8KcKuyg/DyfVIYwuav0nSvludOQ95BLjH8TIcJ57B9170VtZ0L1I7gQYeLvu?= =?us-ascii?Q?MZwsf3+ZQbfDvb76GUIPCx+VWw6Z2c9LYbyoGZtkzMAwyhJZEBJIscgUS30v?= =?us-ascii?Q?hc+9lUm7sCUI+hAr3twWuh7R9lQMI+JKgbcTALUvt3/l6Zv0oYU+xC7C5GMG?= =?us-ascii?Q?/A64syW5xymIhzU9BoGCFomcCoUtqm743HmXDnfWGHS6eM62ZePbtlkL7WMj?= =?us-ascii?Q?Jzm787oDyuWUPkX8wiGwWIHx6x6RGAdQm+usA3YhEb22j0iVek0JssWVokwd?= =?us-ascii?Q?cJntVZJP917JyGriXz05QgIxrDAycfFJN6F5l7Stiz6/yRkX11JuKoE1H3Qd?= =?us-ascii?Q?FtmRo0vGl8gCbr1i/CgaYkvhERzMzYYA3XyRnof4xKvJaYTchvsDG7cR23Zn?= =?us-ascii?Q?2Pb5jXcHDtNH3bUdyfjbx5kvTzbxcb0/Pe6TPdKQ82PcNwk3Arqq2Cw9QRPY?= =?us-ascii?Q?JoL9dwF5UbaTCMgfaJ1Z/0Xpq8Y/ks4C+wSCwO/PlRFXTIB8LT0pXRDa+jcZ?= =?us-ascii?Q?IVmfX7S6EZroyuChvvQ6zQucJkLfqydj5Cuvnwn+dORwN3Et6p37plGxpYGU?= =?us-ascii?Q?d+Mg7yl6boNzEzz2Dpva9KYRdronGG8C5TK1RY6IaISuKsexcPb1yZ4L4C2I?= =?us-ascii?Q?CfxKBOU0WWnSxtHpPOck+Rl867mnXEIcn7gDAkExcExICO0XgjYzqufUjiI4?= =?us-ascii?Q?Lc5jqqksTYy6NI/L3qIY6tF/8s9xo4Ua5F/W9+xXSIA/BqLAhzIcPAE0qdxd?= =?us-ascii?Q?nayw5BFDlO72c0gmkKf9bQFrupHAGebPY+NXYyTh829GsQwXxv5rZFqND4NW?= =?us-ascii?Q?Hl8aLwr2HEMMV8G3Td7G8sglmdNmz/uTUfHV1xHNo6bXmAqef22vVQjftg5O?= =?us-ascii?Q?X7qs3aWhkzAIGF0hj6IT3vl3JS9XLFcATd3j05cd7WTFzXhNc+Xeyzio58dX?= =?us-ascii?Q?Bvi3hEKB5zJ1YCNYYuf1pSAaEw91VrXBYWvOEYJH5+hTrCb25BgJ5Sg3b8kZ?= =?us-ascii?Q?+i3RUxaAj9rKbwcLSQiIXNDRbg3uL7TcN/TJwn2DNTvw+E3xAOoYWq15E7z9?= =?us-ascii?Q?NX2Wmit3jTcvKGuYmHsHSjg6lbooJzx0pJfke11AOAAboTrELZvkjVZpxv62?= =?us-ascii?Q?lHTheyYyKsQ/XmLgteBlhmChVTxnYmGMevIcITBgIQQeirlAu6rT63szCaSW?= =?us-ascii?Q?Z+EoB86FUvoOsh9KVMBw+d0GwlC86qXrScLzkz33X4nrwohrRPegsB74gGFr?= =?us-ascii?Q?VETwId3yq6+Mhz10U0WJJZEOhOfdC39sMlWjZ9Dyvnk4qgQsp228SEENwA52?= =?us-ascii?Q?/J8b0vjO/qUnc8yL2CyMJcr5EzxqwRfWh+ODuAGlriUTi4M/wkjzH4p5C4AV?= =?us-ascii?Q?F41GTEZ7hxzHCAMjVsj4WDI=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(1800799024)(7416014)(376014)(19092799006)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?7yjVxI6OMeH7W81BlpScVjEIz2RyJe9tRa1oMDrEIgjK5abgg97m1z5as9A6?= =?us-ascii?Q?2S5paFrfh9IxablczfwUmlYi/zWLNzNhldyZ8QJSkxt1Jvw7HzLyX5LKmJo7?= =?us-ascii?Q?NcAUZ4X8ZWXsqMzPCv8xDzMEFn4i+SdQfQL3WvJ7HFZGmhH61nRMmdf9GXn9?= =?us-ascii?Q?bI4E8B0hUCRXKNkqO6DATQ/Vl41KNHPjwo6rcCAcE1QYoHslBS8uFymi3cBl?= =?us-ascii?Q?0kvbIWfNd9h+Zb8YNHIMK7LtNEpr91yGtgE19X2qx0Gqs0yUhFgYS9q7sXng?= =?us-ascii?Q?veurP62llcfm8JYPy9q37Q4ZFZ2iNfuCGwbLZ4OYQbJLa5xbSLWBq0yAvmyI?= =?us-ascii?Q?EFA8ElHxK+7f2L7oxpc/7JJ6UhMut9K1v+LYcGpBVjL7pDzJlBv2ziXMrqYw?= =?us-ascii?Q?26fzeBGcOtA2AijBwkAJvhRAMkBnM0fNbehuMnU24yoCdycm8YHuzW7d0lQn?= =?us-ascii?Q?OpAFEJLt2FUWDsvtMR70ppFLPlnf5wwitxvZuKKmRQkSYpU+3hWBE4seHfz7?= =?us-ascii?Q?ckATgc8yfmwFJmvIOcS0kf4ZV8kyCA0ilOc7J6ZiR+OQ7aPh/6mvuW4Kmlac?= =?us-ascii?Q?CszFHVfaTcwdzqrGlt/WtSLQfZez6PKylZ0JlJjTK+tRCx9wOg6p881YteaU?= =?us-ascii?Q?yuTZcoh6giybVRQBEHkmYRZ+XQOl329qF8A/LZJQFz72/3yYYpMyxSsJR5tE?= =?us-ascii?Q?vR6+LCMH8Vvc5ZA8ug4O6isChpgeu17mBb7qvw/zrjKvLwITXPRqtIxpUr9o?= =?us-ascii?Q?Ur5/Kkz+8QysK3inyM5ViXQu3lpNW2MGRzrNtXq5HoLY+0qGEtzq0aA35GZk?= =?us-ascii?Q?2IWXfnORHB/wuKoI5PV7A2A0v+EdHDYsUfhEkCPfYvCKUJ6mLimBBdnGRfSK?= =?us-ascii?Q?LXTQMBqBsMrhBe1lF86UF0YubHbNwJZDdwZChr3PYdepNUCRdrhB+cjYHaHL?= =?us-ascii?Q?cJT+d4+//0Nhkoiv4q131p0h4CWYs82CBWHYYgxHVlWvZ2fIKeI4prpMpSb/?= =?us-ascii?Q?o0Rt1kpbqpC8qCUG4MzunwouOFgl0n1OK2Uh50spkpGrK/egplGvd96BHCU6?= =?us-ascii?Q?a4OHeGP5ct5KS8hRZxUD9KhRLX84prSHx60dEVNhjxaJnM5rcTpGKocPlxmH?= =?us-ascii?Q?3NSe3WeL2OoJpPR9M2eC2JVj8ql0MmX7TSMcH7JkzsBn200HBkr0KMjzHh4g?= =?us-ascii?Q?VmfS/+qJ8JeUMDsJstngjE78+pKLoV7DGveywMqObkFXXU0QVqx5waEes+b7?= =?us-ascii?Q?yZIYANikFUV3wMDkCPwhs5tOnqubh1LsF1XlEUijIeAalW9/GutwLBVcSO4b?= =?us-ascii?Q?CsBPrL6IpkxoMIlnssmB1s1cT19K4ILqUoGzmzzKQdn3hSXC5omfMOKARPkQ?= =?us-ascii?Q?n7f6nQKi+6cBSHfHIvKdT2LF6ku4rDXhZ9XjCwc8ICtcv06iZfKbvW/iUGa8?= =?us-ascii?Q?3YbryxxsHdNiQweuS7cNwNYJkCt8kGCMOJy2c3+IZDTwUFbqONv6KHqYSlZZ?= =?us-ascii?Q?Dm7UpkxUVE5RiZilKnR9mqpOss0KnRX5zgMrnVRGR8vlyCRz0ratEXrapM5c?= =?us-ascii?Q?V6eVjkhl2NBv1b+W1yGl3K/axCcbeMes7si6RFpxlpL7cwlHSVztp0bwzvS0?= =?us-ascii?Q?UurRYxWSigvy1Q629IutncI+uQWdVswypeuHUfqMJEu+FEuEHd/0hW6QdOTD?= =?us-ascii?Q?h7yi/SNNgIUXDKYC/tgrHejUk0gQyyUplRqjMaBCBH7ub9f+Mfp87RhQBkyM?= =?us-ascii?Q?GglBVUx2lQ=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 86b53266-eab0-4c15-c01b-08de5a264e09 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 02:22:49.8626 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: oSpw3PTt7bUexEsHYoFtaQCTlM6+Gr5pGcga2rndQJR8jL5Y5SaWLou21PDinoxrldmg1bmlLQ0Ff5l/YVeJRg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11974 Content-Type: text/plain; charset="utf-8" The tx_buf has three types: FEC_TXBUF_T_SKB, FEC_TXBUF_T_XDP_NDO and FEC_TXBUF_T_XDP_TX. Currently, the driver uses 'if...else...' statements to check the type and perform the corresponding processing. This is very detrimental to future expansion. To support AF_XDP zero-copy mode, two new types will be added in the future, continuing to use 'if...else...' would be a very bad coding style. So the 'if...else...' statements in the current driver are replaced with switch statements. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/fec_main.c | 134 ++++++++++++---------- 1 file changed, 73 insertions(+), 61 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethern= et/freescale/fec_main.c index 2d486a62c178..25747b9aac28 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -1023,9 +1023,13 @@ static void fec_enet_bd_init(struct net_device *dev) txq->bd.cur =3D bdp; =20 for (i =3D 0; i < txq->bd.ring_size; i++) { + struct page *page; + /* Initialize the BD for every fragment in the page. */ bdp->cbd_sc =3D cpu_to_fec16(0); - if (txq->tx_buf[i].type =3D=3D FEC_TXBUF_T_SKB) { + + switch (txq->tx_buf[i].type) { + case FEC_TXBUF_T_SKB: if (bdp->cbd_bufaddr && !IS_TSO_HEADER(txq, fec32_to_cpu(bdp->cbd_bufaddr))) dma_unmap_single(&fep->pdev->dev, @@ -1033,18 +1037,21 @@ static void fec_enet_bd_init(struct net_device *dev) fec16_to_cpu(bdp->cbd_datlen), DMA_TO_DEVICE); dev_kfree_skb_any(txq->tx_buf[i].buf_p); - } else if (txq->tx_buf[i].type =3D=3D FEC_TXBUF_T_XDP_NDO) { + break; + case FEC_TXBUF_T_XDP_NDO: dma_unmap_single(&fep->pdev->dev, fec32_to_cpu(bdp->cbd_bufaddr), fec16_to_cpu(bdp->cbd_datlen), DMA_TO_DEVICE); - xdp_return_frame(txq->tx_buf[i].buf_p); - } else { - struct page *page =3D txq->tx_buf[i].buf_p; - + break; + case FEC_TXBUF_T_XDP_TX: + page =3D txq->tx_buf[i].buf_p; page_pool_put_page(pp_page_to_nmdesc(page)->pp, page, 0, false); + break; + default: + break; } =20 txq->tx_buf[i].buf_p =3D NULL; @@ -1509,39 +1516,69 @@ fec_enet_tx_queue(struct net_device *ndev, u16 queu= e_id, int budget) break; =20 index =3D fec_enet_get_bd_index(bdp, &txq->bd); + frame_len =3D fec16_to_cpu(bdp->cbd_datlen); =20 - if (txq->tx_buf[index].type =3D=3D FEC_TXBUF_T_SKB) { - skb =3D txq->tx_buf[index].buf_p; + switch (txq->tx_buf[index].type) { + case FEC_TXBUF_T_SKB: if (bdp->cbd_bufaddr && !IS_TSO_HEADER(txq, fec32_to_cpu(bdp->cbd_bufaddr))) dma_unmap_single(&fep->pdev->dev, fec32_to_cpu(bdp->cbd_bufaddr), - fec16_to_cpu(bdp->cbd_datlen), - DMA_TO_DEVICE); + frame_len, DMA_TO_DEVICE); + bdp->cbd_bufaddr =3D cpu_to_fec32(0); + skb =3D txq->tx_buf[index].buf_p; if (!skb) goto tx_buf_done; - } else { + + frame_len =3D skb->len; + + /* NOTE: SKBTX_IN_PROGRESS being set does not imply it's we who + * are to time stamp the packet, so we still need to check time + * stamping enabled flag. + */ + if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS && + fep->hwts_tx_en) && fep->bufdesc_ex) { + struct bufdesc_ex *ebdp =3D (struct bufdesc_ex *)bdp; + struct skb_shared_hwtstamps shhwtstamps; + + fec_enet_hwtstamp(fep, fec32_to_cpu(ebdp->ts), &shhwtstamps); + skb_tstamp_tx(skb, &shhwtstamps); + } + + /* Free the sk buffer associated with this last transmit */ + napi_consume_skb(skb, budget); + break; + case FEC_TXBUF_T_XDP_NDO: /* Tx processing cannot call any XDP (or page pool) APIs if * the "budget" is 0. Because NAPI is called with budget of * 0 (such as netpoll) indicates we may be in an IRQ context, * however, we can't use the page pool from IRQ context. */ if (unlikely(!budget)) - break; + goto out; =20 - if (txq->tx_buf[index].type =3D=3D FEC_TXBUF_T_XDP_NDO) { - xdpf =3D txq->tx_buf[index].buf_p; - dma_unmap_single(&fep->pdev->dev, - fec32_to_cpu(bdp->cbd_bufaddr), - fec16_to_cpu(bdp->cbd_datlen), - DMA_TO_DEVICE); - } else { - page =3D txq->tx_buf[index].buf_p; - } + xdpf =3D txq->tx_buf[index].buf_p; + dma_unmap_single(&fep->pdev->dev, + fec32_to_cpu(bdp->cbd_bufaddr), + frame_len, DMA_TO_DEVICE); + bdp->cbd_bufaddr =3D cpu_to_fec32(0); + xdp_return_frame_rx_napi(xdpf); + break; + case FEC_TXBUF_T_XDP_TX: + if (unlikely(!budget)) + goto out; =20 bdp->cbd_bufaddr =3D cpu_to_fec32(0); - frame_len =3D fec16_to_cpu(bdp->cbd_datlen); + page =3D txq->tx_buf[index].buf_p; + /* The dma_sync_size =3D 0 as XDP_TX has already synced + * DMA for_device + */ + page_pool_put_page(pp_page_to_nmdesc(page)->pp, page, + 0, true); + break; + default: + break; } =20 /* Check for errors. */ @@ -1561,11 +1598,7 @@ fec_enet_tx_queue(struct net_device *ndev, u16 queue= _id, int budget) ndev->stats.tx_carrier_errors++; } else { ndev->stats.tx_packets++; - - if (txq->tx_buf[index].type =3D=3D FEC_TXBUF_T_SKB) - ndev->stats.tx_bytes +=3D skb->len; - else - ndev->stats.tx_bytes +=3D frame_len; + ndev->stats.tx_bytes +=3D frame_len; } =20 /* Deferred means some collisions occurred during transmit, @@ -1574,30 +1607,6 @@ fec_enet_tx_queue(struct net_device *ndev, u16 queue= _id, int budget) if (status & BD_ENET_TX_DEF) ndev->stats.collisions++; =20 - if (txq->tx_buf[index].type =3D=3D FEC_TXBUF_T_SKB) { - /* NOTE: SKBTX_IN_PROGRESS being set does not imply it's we who - * are to time stamp the packet, so we still need to check time - * stamping enabled flag. - */ - if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS && - fep->hwts_tx_en) && fep->bufdesc_ex) { - struct skb_shared_hwtstamps shhwtstamps; - struct bufdesc_ex *ebdp =3D (struct bufdesc_ex *)bdp; - - fec_enet_hwtstamp(fep, fec32_to_cpu(ebdp->ts), &shhwtstamps); - skb_tstamp_tx(skb, &shhwtstamps); - } - - /* Free the sk buffer associated with this last transmit */ - napi_consume_skb(skb, budget); - } else if (txq->tx_buf[index].type =3D=3D FEC_TXBUF_T_XDP_NDO) { - xdp_return_frame_rx_napi(xdpf); - } else { /* recycle pages of XDP_TX frames */ - /* The dma_sync_size =3D 0 as XDP_TX has already synced DMA for_device = */ - page_pool_put_page(pp_page_to_nmdesc(page)->pp, page, - 0, true); - } - txq->tx_buf[index].buf_p =3D NULL; /* restore default tx buffer type: FEC_TXBUF_T_SKB */ txq->tx_buf[index].type =3D FEC_TXBUF_T_SKB; @@ -1621,6 +1630,8 @@ fec_enet_tx_queue(struct net_device *ndev, u16 queue_= id, int budget) } } =20 +out: + /* ERR006358: Keep the transmitter going */ if (bdp !=3D txq->bd.cur && readl(txq->bd.reg_desc_active) =3D=3D 0) @@ -3414,6 +3425,7 @@ static void fec_enet_free_buffers(struct net_device *= ndev) unsigned int i; struct fec_enet_priv_tx_q *txq; struct fec_enet_priv_rx_q *rxq; + struct page *page; unsigned int q; =20 for (q =3D 0; q < fep->num_rx_queues; q++) { @@ -3437,20 +3449,20 @@ static void fec_enet_free_buffers(struct net_device= *ndev) kfree(txq->tx_bounce[i]); txq->tx_bounce[i] =3D NULL; =20 - if (!txq->tx_buf[i].buf_p) { - txq->tx_buf[i].type =3D FEC_TXBUF_T_SKB; - continue; - } - - if (txq->tx_buf[i].type =3D=3D FEC_TXBUF_T_SKB) { + switch (txq->tx_buf[i].type) { + case FEC_TXBUF_T_SKB: dev_kfree_skb(txq->tx_buf[i].buf_p); - } else if (txq->tx_buf[i].type =3D=3D FEC_TXBUF_T_XDP_NDO) { + break; + case FEC_TXBUF_T_XDP_NDO: xdp_return_frame(txq->tx_buf[i].buf_p); - } else { - struct page *page =3D txq->tx_buf[i].buf_p; - + break; + case FEC_TXBUF_T_XDP_TX: + page =3D txq->tx_buf[i].buf_p; page_pool_put_page(pp_page_to_nmdesc(page)->pp, page, 0, false); + break; + default: + break; } =20 txq->tx_buf[i].buf_p =3D NULL; --=20 2.34.1 From nobody Sat Feb 7 17:41:16 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011034.outbound.protection.outlook.com [52.101.65.34]) (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 C72663876C7; Fri, 23 Jan 2026 02:24:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769135078; cv=fail; b=S4MvqZRg/AZxh7g7kCth3hYQQ/GeghEGVVhZMb9Nri3+DtZYIhKuzY59AvpvyAgv8Oewd2ecYW1CcQYd3N6ECpNgwqIW7hYmjJeEzyQgtGaTUGzUd+Rq7wO6IYjBffnJQkybIWMn6jEbL6dVtQcM1vOA4wTxdljngaCTsRD2Kgg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769135078; c=relaxed/simple; bh=nmnr8WXQJZZbzk5Xh+fdWh9kUX7kgdnP6iYq8plSmrg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=uM7ztR4PqrZc1QkiIytRfhQusFsIoBLJn71oGqEj+D4u2RF7Io1QLWLXlynpBrNGxjaPR8Ca1gkuvfR8RWjqicwccLLf6g4fRCMQHhpjn2Qb+piRjX2NrTwoRYghAtBzUziUIj2oFKlFOI2Snn4yhQNbhMclHHevvScUvtyBIcA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=gkb8a4dI; arc=fail smtp.client-ip=52.101.65.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="gkb8a4dI" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fEJWQlylkg37sVrRX1YynyhOJ5U7k4MEOfAhKH2m/L9RoIiq4ZoLmffiqFvuCI2pIaZ9eeqzIbNAVie+B38RDVDZAX8rXvMuSrVldDW8Sg4K/eGmaB5r8RiY/50ehk3fkQ4Bw7x5tkjntUL8ExRKDR+RbADkZO7YE8bvfR22BVejIlB3bafm2nIaCGHwJv4/DKcn1yEJM8O4SDSzvmnL9x4fHNnRt5AJcChRn8bX0mRkV4zWpE9l6ZlhlGRXCO8uVjnRl7codG6ilOls9bBX8a7t1jYi8euwj4Azgpbp0Jw4kdCPmAxn0YUfRsJmYnXJllvFRrFoSe2aSvXpubiREw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=kl2ZK6HUfn9ngvABJCFwenjm2BF/j9qYGh4O3B/Zn/M=; b=dDFWplA8scPE+YcPJCnQHlQ/Ts+lDTscGHXT6r+VK3tCbUDC7qD0B5HIDhd0A8FzrzTeASuN7FOd5CGN4ORsaSLsX4eaaGbFoImdCEZmU12WKt5z2xxebJWzolGpDYxBjdlfTyj5S1Y1fM7phaMqnFpBq5itIrR39o1BfS5S8Rm76d/H4mEebhNIYhN/2Fa83cRltSlsN7qPAUzbIAd1C7zXnm7cA2V111qRmqowF+hpZRbDMSqZ1b4Y30KQLroObgAfVIff4VOwY5DoSxDx5lOwB0uoLQEMGfNViVZclPLHTifwmhXGCVbskvHaKGRG1WIPFD+nO74rbdG42pW/hA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kl2ZK6HUfn9ngvABJCFwenjm2BF/j9qYGh4O3B/Zn/M=; b=gkb8a4dIc90pBmmWpL56cKSWBK2kqA/apf8mo+ihuKSvCv6ZjsVS60b/984IdQmC64pjv+GImWH1h1Yp/3QDZhpsPP7+kj+Jp2eWJfVbmNUrHwPL/cwuCvfnAeKJ3nOCvNtLnC/XdVPRb33Y+ROoxQaUPmHE9by4N/4SnQydLHLPkLR371iAMdDEWZPs+DGoQPKQ2XYd+fjSkUu/ffgKKCkWNdWBdEm4UvzHFUwhPJitgvB+2pN14isAi2V+pQpe+/sB2UhSb9DZPRO8lIPwgNN/zn6+nEFWiWZrVtHdCsCQafsrK/7w/tf3jDYozU0nUxvJQItpP0AhxoOrdun5hw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by GV4PR04MB11974.eurprd04.prod.outlook.com (2603:10a6:150:2e8::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Fri, 23 Jan 2026 02:22:54 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%4]) with mapi id 15.20.9499.001; Fri, 23 Jan 2026 02:22:54 +0000 From: Wei Fang To: shenwei.wang@nxp.com, xiaoning.wang@nxp.com, frank.li@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, sdf@fomichev.me Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, bpf@vger.kernel.org Subject: [PATCH v4 net-next 11/15] net: fec: remove the size parameter from fec_enet_create_page_pool() Date: Fri, 23 Jan 2026 10:21:39 +0800 Message-Id: <20260123022143.4121797-12-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260123022143.4121797-1-wei.fang@nxp.com> References: <20260123022143.4121797-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0074.apcprd02.prod.outlook.com (2603:1096:4:90::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|GV4PR04MB11974:EE_ X-MS-Office365-Filtering-Correlation-Id: d7c688bb-e2dc-4bc6-82e7-08de5a2650c1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|1800799024|7416014|376014|19092799006|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?WCI3q/JUjIILMIbKEI0Q/To063s2YfKQgl+acGKqQszrTFwChNLtS6j6NdPj?= =?us-ascii?Q?/wgveJqdZgpAQPhosnPCVOV7tgh+0miPOVI+Uaded63i/HTPeX4lggaUdUDC?= =?us-ascii?Q?peHzc6jctLDGEHjC3VE6cnFEjFfKRGMfVyPR8caBL2k89zoB8GidjpfRX/QN?= =?us-ascii?Q?SndnE7jtWeu+JwQPT2h6+ThTmbX8/nCEz5PV/2+X07nRvg4BXtD0fNq5h1Da?= =?us-ascii?Q?11jtB5oPJrtA42YfF2lgvMwle4NqF6k3gVkncnomEHYrGMC1BgilxQJTyDjg?= =?us-ascii?Q?kl1nGVFbYXrRFN8J3t8s5Y/rSaINl0ledjx3rEFd02VoFR1kWE1E5dEjNEGP?= =?us-ascii?Q?y1IjZ5eg1nGwcF0GqtrbUpUDc+Li/f67ABL2QpGJ03H2O0SA9PlolyTNVy0j?= =?us-ascii?Q?B+zPqwzl+P/hSjvm9yJq1nSosfdL3YJut6Lw0lhaeIQwJA86Kpq+uWhTmM8s?= =?us-ascii?Q?mNRQ+ZZP43OOhKAXmHiVA0ZwUl3OdLbv7HyYO1tIoddQucXpAyLr7nwodpVE?= =?us-ascii?Q?RSq8Gw5Yjy6zpH9Wv2PHzUxjBEH3QaQfDz6ODCqeglzNQSfaTfrdCnXBM7pc?= =?us-ascii?Q?OkrwR6JRIB1zIKcBo0XxZkeqG/GscsyYcSX96Hm3+MjwbmcqPo0eLRnTbPW4?= =?us-ascii?Q?uNK5PmXlSi6EZXHqN6ltjXEA5v7QYCwAEGrdcS0u9lg/+3vJ5Q0rK0Ydks1v?= =?us-ascii?Q?cUpmP2C3KRn85tgUxyIa3hyI9EmCTdlIlNDfjSQVsgoVVwvShbW1xOEUjV+7?= =?us-ascii?Q?LEarotLtZdgc+8WrExFA1YPxQGsj1PYe+sFcdo9yagwUMWrpClFx4WfmkYmL?= =?us-ascii?Q?+LYT0FO0fF7tfWDnyk/c0X+CkPY06cAKes3z6XFmal05BdOl19d3LnKSiJWO?= =?us-ascii?Q?4luoEHj+kK+wRcakUZeEhQoNdixghcbqhhajJEtsE65pxm9YXeslQTued4Tv?= =?us-ascii?Q?JgL/MkGa0OJhuEsiM51yAHedMbyL8faj0vgelmvL4B4LTTsZ6mCGbJbbdu9L?= =?us-ascii?Q?3aq9pzexpdIJb8VwR64z0P5mNcTPamUwvaj8JepygJSJRaDk5jHMTjI5d4PT?= =?us-ascii?Q?KUIq7ORZsuNNVXhcOzgHpd3aRr6T+LvQTu+nOg+dcAQiYw6hZ1uFVVxjR/4b?= =?us-ascii?Q?wuYP8TEHOafWfm0ikerFlGMWJBUq9FY3wFwkk3IXIeBeypqAlHm3E59xr2EE?= =?us-ascii?Q?OUSSoS9zn9kgl9tbx/yntO2J7TsbuWPXu2RwOIKXaP6NqeRm3mB4l1fTTgGy?= =?us-ascii?Q?UX9yQ8GEkPZs1zmXhw3L2UBM6+HokVbMdcUywASRAIV8KWyKIg2bDJLdFkex?= =?us-ascii?Q?m4A0c/YjAKxTTHePPaC1kfUu7yrjPt01LzRXXrt/dSEa3O2kBynPG9zeBI6V?= =?us-ascii?Q?KLJ0T5y4WiLUaYPvFyUXtjft2DnAjXGXXciJ0uFS1eiz97+cJgCLX6/LeprN?= =?us-ascii?Q?SVkk9ACnR7zBfTXYLsOrqt6/fRBWEczEiC0faHsY8ln/1tfNUaq+rlzKwQTZ?= =?us-ascii?Q?YpdJDQ9WaSWEShCZ9hfByihoMLmh8ESwMel7KDydClZXp/I5U/J1fptjaV31?= =?us-ascii?Q?Q9seXTCOS/M3FaZKSkb3H6+za0zx489uhqcLLZCwITtEs+jrgExOuW1hVbik?= =?us-ascii?Q?+F+SVcSYCAXb/AvHq6W7CGRwAgi4eSwtnD/KPmfkNLqY?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(1800799024)(7416014)(376014)(19092799006)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?yKXYkiPGvvtK60dE1vsPkz/viDWHKf3Hz18mig90UO5PXkBZ0cppb5kxV1hu?= =?us-ascii?Q?xnqNxM3WkRzAY7dvVjVJpbcrgB0v9L/lbxbEB77Pbw9mLQSDfM/kRgbvsLdt?= =?us-ascii?Q?1Rl9eUJTiWfTaGTic6ff37WvX/8i2igDutCvthz+GUXRqJp4xfthARQ1UJT8?= =?us-ascii?Q?342Sq8J1dz8aVsRLSpXBXuAmv0GjoABhvFduQTk3sfAfIFC+qXEqHUFInXgc?= =?us-ascii?Q?Du1ncYEwD9KcUFCombArQN3mUcUD1aySRMDzUf09MmlE5dU4VdtxJm7/Mjiq?= =?us-ascii?Q?7U4N6IdmsUGcjDNe8mhBqh9Eyd+YRI43CjDyEqg8n9ad8EEuTba0AgUeuejH?= =?us-ascii?Q?vaK4vbIbN6nz9dGoluFTdK81VmIGinmMqrDxtfc1/mGmIJ/joNnHTzhRNIcU?= =?us-ascii?Q?3hGnCMlT+ee7T6tKBCRebvw4woCWxAfAOXql5tPI7tbOWtcYIcCp++RMbCOv?= =?us-ascii?Q?fPmphCM1YchMIi1iZQwgSgZnJRUerviuIDxD303ebeTbuAkMEA0vhpxQHG1J?= =?us-ascii?Q?/ft03ugp6cdIFx9IQrNS0sDS6+SPNN98Th4PaR6LgywFZcae6ugY4mxPFuu0?= =?us-ascii?Q?BYDb16zk9OmruUgN5vhbqQyBLSsCnQVx1C4YywqyZZ36iKnleMKQLIwsREdQ?= =?us-ascii?Q?wd7zafFMYX6oMNAg9nC8RYZdUGiZFthmQH3nutp+Mt4r38NCDonV3phHTG7S?= =?us-ascii?Q?lZZNuJJLyNFCuBtx20ZvomP9orDxQO7cQeIOGopDVduwP5lz/K2LziuuGErP?= =?us-ascii?Q?EAp8032pCkogWKd98NDb4DnDx4lDz3iejfaZ0G/72ERObq5bk3v6bSP25jzV?= =?us-ascii?Q?WlL6CdS/m9HAQ+qrovqxgi1MEFrVAr79VqFIJ78MjxD8oKKhlXAaMk/WNxhl?= =?us-ascii?Q?AZRBxPuNXyOfzx+e9i0SevzC8/ERz/jlVbJP35dRptHJTJXsgP9fzAnYmVaj?= =?us-ascii?Q?t+11UhCjxHEkXIWai8FT5KJdWx8sBNpsoDvr6Bd4pzXm+uk8ryPEZKlHLbNH?= =?us-ascii?Q?U8woLycN4LSu9KL5A7M4TL5iPvk9/lHv+QFCa34R0OTAho7DOP1hDx5M6V02?= =?us-ascii?Q?pXshWWFyP51oAgFVhQU0h7G8Omyc4bK0VfyV+t2lkft9S+Xp5WhFCnxTTh6j?= =?us-ascii?Q?XedEKbCTQ6sM/5kmSJeD7ANuKTP7F19KgzeWHikEXr+lcW9uZv7YwMkVFioD?= =?us-ascii?Q?GJ29CMAeRV9DPPTeKzjhRCBgHvLFqtzY4LSwfQjTw97BUwUzt7jGAr6huPnt?= =?us-ascii?Q?2IabhV5sYwbO27EHs4ZotdxbthMOIyKsizsV+w6KabPYnwZFO/9hky/1Pif7?= =?us-ascii?Q?pomHT9B1qn3djJKFpY75xoyPdTABDCDwQ8R/N1HbKibFQs+UtA+veaoMClOn?= =?us-ascii?Q?z8K7NDGtx1bYWLwjpPJuXEdsWWm0iVLBg3Ae0cntxtZp8C3UXX1xr6qsw56u?= =?us-ascii?Q?eyiCiaN72W+7Pm8rv9ryo+CbPzTipzzx7Pe/DQa6g5bJLvBJsXC9CV1mJeVI?= =?us-ascii?Q?gAnXYcxfpApa+brzs0OqbB6nSYylPXrQRitHaoMQGAPrUzwjC6myJZUaxNFB?= =?us-ascii?Q?DHEjL+Ya91GPAmMYK88X77wsbV2ci72bs5VBsF1o/Kqgoa/SnK14m4suPzYv?= =?us-ascii?Q?Agh9m18uUTwXDMIGb5iH3dwNgL+AcZfmAcFgvmfpL/ajLX+RR5MKvqD3zArp?= =?us-ascii?Q?uYpUDAgE8x04iOFW4eYiNEDNU4+mPlykKfEJireoyEzYfcBSyeSFGkskluF/?= =?us-ascii?Q?GzgjqELQgQ=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: d7c688bb-e2dc-4bc6-82e7-08de5a2650c1 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 02:22:54.4792 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Rd49oCQ5UpUgZ1HMV3JLaySK2lIMr7cmOyZ8sNedG0+eH+uezXUdFZboWTjJYqCVrbvtwhPRO+Aj5iba2GNZAQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11974 Content-Type: text/plain; charset="utf-8" Remove the size parameter from fec_enet_create_page_pool(), since rxq->bd.ring_size already contains this information. Signed-off-by: Wei Fang Reviewed-by: Frank Li --- drivers/net/ethernet/freescale/fec_main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethern= et/freescale/fec_main.c index 25747b9aac28..4f230767dcfb 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -467,13 +467,13 @@ fec_enet_clear_csum(struct sk_buff *skb, struct net_d= evice *ndev) =20 static int fec_enet_create_page_pool(struct fec_enet_private *fep, - struct fec_enet_priv_rx_q *rxq, int size) + struct fec_enet_priv_rx_q *rxq) { struct bpf_prog *xdp_prog =3D READ_ONCE(fep->xdp_prog); struct page_pool_params pp_params =3D { .order =3D fep->pagepool_order, .flags =3D PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV, - .pool_size =3D size, + .pool_size =3D rxq->bd.ring_size, .nid =3D dev_to_node(&fep->pdev->dev), .dev =3D &fep->pdev->dev, .dma_dir =3D xdp_prog ? DMA_BIDIRECTIONAL : DMA_FROM_DEVICE, @@ -3552,7 +3552,7 @@ fec_enet_alloc_rxq_buffers(struct net_device *ndev, u= nsigned int queue) rxq =3D fep->rx_queue[queue]; bdp =3D rxq->bd.base; =20 - err =3D fec_enet_create_page_pool(fep, rxq, rxq->bd.ring_size); + err =3D fec_enet_create_page_pool(fep, rxq); if (err < 0) { netdev_err(ndev, "%s failed queue %d (%d)\n", __func__, queue, err); return err; --=20 2.34.1 From nobody Sat Feb 7 17:41:16 2026 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010021.outbound.protection.outlook.com [52.101.69.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 5559A3815CE; Fri, 23 Jan 2026 02:24:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.21 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769135071; cv=fail; b=AYLwAOZpOltiNGnFBTn+tuv25y5orpYvsNPh5Z3kD/R5i0P1lLBg9UIPZ9u2JnVjVSfA5MxxqgOTMe7/1gYCtjpq6Gbqd4ysJ/DnB2m0ho27YMwe+GVplArJQfq5QDwBKD257m8/YYID6TBIvQe/tEsdWddYWspj3St5286heN4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769135071; c=relaxed/simple; bh=XToXUv6+7fRNWVsxauLxdB+/pSrRn9eJw1kMrpSyDBc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Nt2ok8sScyRiSOvGGQItqemtwAakjdqcM4oC1WublMrhuYMB2hUExKmgEfFOS9baukC+HO9YgDNMEgqC6a9K9N5/1rya50eeTPknZj51bsRuMbiCjneHt5sAoRQ07Itvd/XYSEJISagn+NDmjE/sluO9hu7Ci/S09Yzq+0Ly1dA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=LjuLfUWf; arc=fail smtp.client-ip=52.101.69.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="LjuLfUWf" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wn6u1bfDlgVPfBBzOmHwQW1Og7VXHQfm8jVo9Ggd43hMgOYuLzP6qGm8Kr/Sdnoq4ZNMUnXdABJsuccQ8p2yhzx10XlpgQ22qq1sBSgRz9KWjxw9IqJ5WZ6KwGCtCubZ3cav5QzmL0/h4hEJCjvVy/sD16vE5+dyMOhLIEIteUrHKpEkf+A/jw079SrGH6OvAJCcPHuwr5Zdh9OQHjcEDdh4IJ4F6VAV3ZjV6zNjwaVyFrd6lKTW5CNgQ7NU6Hko4FRSbmFm+caedij26FQZT1z8QvvBfQEi5kgHmQBw/t3GNy4FXNUVbtHvAoSmy3pVPdIiiP5df6EF9E+RdnvT5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=9Pem+p0+oliZmpq7NgnSirf9vUCptK54CY7bOxy1cRo=; b=s5jfWuPAjfDXn/E+78142TuimGI7ZPnvni+6/zZ6mMYl5MehUy+CtXq/goq2Jjyg4x2IQcjHsII01HCIfuXcV8nwTPS/XITDBal/ohqlDM4dprYrpVy+eDgZtcpKNVZFiEakEu/xKWSbWI11VVOXLZoGqXjKhD6UiPZEBT+6zaesK2qu5IVKfigywaISYyxEpFyuyvgitCIGTT8+U7LbOpibwmMwWsmOqnUkiBvqTGTin1QkF989E0CN3sGeGj+naCMAztHKxeAtP1ek6ckeUen4I8ZlaXHzeln172wzkrvXFvQXoAMulIe8YlB5OID+31oNxfXdFyML41Gz5IhZIg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9Pem+p0+oliZmpq7NgnSirf9vUCptK54CY7bOxy1cRo=; b=LjuLfUWfXEAKV4WgRE/ptSLcebv5vKBNnLVwcKP8b9R4/yCauEpWk4Jl8Ist0Bkdus0eS1fLSvS/QCyl9N/5Chn8msPloWX9cDhfwRoShIaYcb/WrfLFEvu7kTRygF6bpd+N1DeBQVzCpNoddaABMHFemV3k2hWUy5g3xthpoS3F1oOks5ewnyYhJ+zFhQWAxc56lDNNCpq0/C10ZHqAZ6HLKM651qHsJnamwg98ESbbDZODn8Imvg2AIGOGPC4MTNalFujuMv3OMrlI+f6qj18AdoBOZZyC6PJYEhkdV+CyfxErRkVzTn00SATE8lPzr+yl1OyUY/1aAJT8TdYMgw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by GV4PR04MB11974.eurprd04.prod.outlook.com (2603:10a6:150:2e8::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Fri, 23 Jan 2026 02:22:59 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%4]) with mapi id 15.20.9499.001; Fri, 23 Jan 2026 02:22:59 +0000 From: Wei Fang To: shenwei.wang@nxp.com, xiaoning.wang@nxp.com, frank.li@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, sdf@fomichev.me Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, bpf@vger.kernel.org Subject: [PATCH v4 net-next 12/15] net: fec: move xdp_rxq_info* APIs out of fec_enet_create_page_pool() Date: Fri, 23 Jan 2026 10:21:40 +0800 Message-Id: <20260123022143.4121797-13-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260123022143.4121797-1-wei.fang@nxp.com> References: <20260123022143.4121797-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0074.apcprd02.prod.outlook.com (2603:1096:4:90::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|GV4PR04MB11974:EE_ X-MS-Office365-Filtering-Correlation-Id: 15c30f51-ff3b-4dba-0c87-08de5a265393 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|1800799024|7416014|376014|19092799006|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?cUasEhUN9VriPiZ3rLBdjM7ClGdv+GoL/x6ZgYvcyqADzpwPxQ33wWffwtJj?= =?us-ascii?Q?TpqNO9olXph0p3Ps6+zkMHtbpKMdmQ3zegxtyq1PxFRTH4JZQFmIN4DNuzVW?= =?us-ascii?Q?07P1C2f+4/fzGsP7EIQcq2I3XjVX1mIwy7Orb7pxw+Q7e7cZRBrOjfwvqiUI?= =?us-ascii?Q?uonaes0ukaMlHhEVsfAzdY2Qp9xVEc9/HG2WJ1PcPhk/cunD1s61yCD9Xq3u?= =?us-ascii?Q?/PVTE7s1IbL/zIOq/7CfF3spFrvl4fNugvtdoSfXlXn6IJLkGd7Bd5dDUHwJ?= =?us-ascii?Q?mCHE1gdZhYrogvGrUbiAAIVNZhU3R4agxD8oybp4NXsuVOlXmFArj3VZyo7N?= =?us-ascii?Q?BYwdCjNwFXXR35q1SMmH16PT1Ws9i7zbl4LECbPr+nUqhuXbAx6t0uQstFHm?= =?us-ascii?Q?d2iOVO+fa+aR/wqDPspOqexwsCGfRxgmxprsvpHdyLIAlFqZFUOaHl8vwvKX?= =?us-ascii?Q?QVWh/dHdm2O9mO018jDfRrmMXXyXZycgqr98Fa6RnmpGk+FvQwZeV0Ltbi0S?= =?us-ascii?Q?iziamDj2nS1zlAN7yIjNxu2DfJjVNT3MAhnYDUbOvO/oIy3zslRim8Re1q1e?= =?us-ascii?Q?lkaMP/AN6eOjwDz1Y4oJkAf2jtv0HRWn1cuiqCtwpMULbEsTS5Sh9sXww9qA?= =?us-ascii?Q?IYLbLWm56lkYqpWiqw++eGXqH7pjOf1qOCOf3fmYLPBaYe1D51dClCOYADHq?= =?us-ascii?Q?b5wL5ZFVEtSqWMNrEC9QCvLfxuD+7fDoU33nVdaUMd3wzRPYO/FP8dSKkRC4?= =?us-ascii?Q?DkYqyQDddh3fb+3i62rGeYd87JEhaDRVnkJoavp0D2pK9eaKnip8kYmvRd3+?= =?us-ascii?Q?JxqlbWkMuQC5LI4BK+bDVWYqiyn9+hWYc9n6NDA5zBMlKkmA2S/qsrFfpqNx?= =?us-ascii?Q?iMlOf2iykBrs0lso7o4vp8Ick0l6sry7fMoudZwfAltcePDOBq9avvMkldVp?= =?us-ascii?Q?28qYvBWrfCdnWMgilFeGKux9xQMHKXmKV7/7WCzQJFCe8nLg8/TvNe9oldbj?= =?us-ascii?Q?s8SLouqduVXkfz+5MrzEirMZQEw2cxn3IDSuKIGhO2TlT2/nx81H2XSNDK8n?= =?us-ascii?Q?45IUOJf47kc7FxQoM9U4pOFZZdKbiTQdJTyZf48Pgm9+LV9jYid68D9dIzB0?= =?us-ascii?Q?L+HFxn48ZB4Ns6klue+ekrM23JS83nJy6g9NmFrdVB0a/Rlnw+IIKA6il5g3?= =?us-ascii?Q?ae07pELYjYp7oAoqbklS04eKeG0Q+7X9h2jan/OD2BW8JuaUSOZ43XKFsZlA?= =?us-ascii?Q?9oZFwN3TETsPpG6FRpXP3+tS9vllws5DgfY9lJeGuykc1QnLa207IOP4r3JU?= =?us-ascii?Q?AHjPFN5QZSEwJycZQwLzBOj46QPyI5BJXsnx9F6m6nZMxK1OIv2l4YBZwPHo?= =?us-ascii?Q?3uybNW1VQU1AxAGoDdS3R2xWMWpKVz1H2gdFx7r/KXV0xcwF1P3DZguSdzgH?= =?us-ascii?Q?INxt1FcZ0cUEEGpwG6GWgIjJalpZZMUEf0jNJ+spOyCyds1bhfebvMUtUKxu?= =?us-ascii?Q?hUafWN4SDNU6OMMy88SYfEk1yrqB55gx3O1nx3deWmHJLDVNE9kQlSFHAwjc?= =?us-ascii?Q?UgRSxxNyDiZEmQyiM0nK9VcZdNbKzMUlcIbReRabzeHzhfRiGkyaeWLqpGAy?= =?us-ascii?Q?ys6SSYyCXg4J2UbEw0ZdjiqUQso1rrFVZG1BKQ8uQDRA?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(1800799024)(7416014)(376014)(19092799006)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?OuSRzP2Ckyr+4wv8u9jhOh9q+3Jr1Ec0v/CxkgfDFh3E3ZwDY81l5o5+s+FW?= =?us-ascii?Q?XydOZ9d+wWE6PmYRDrioCeGM/ZLDc9q2Qapgjr0s7KNIcCN1bakmjt6AJp60?= =?us-ascii?Q?SYQUgAx7yq1+s8RjGFIoxIeboRmK1TP/ENUWtuwe5xoitqOCv7+Ps1d8nG/j?= =?us-ascii?Q?9w5BzmNPEm92JBYBF8bnuPZuI0FlrjEDbLx0KSKZFBzErh96kG4Q72Llx+tZ?= =?us-ascii?Q?9ieGzufDhJC7wNIU3vtDP1sSCYnsYjQ6EOX1LGY7A5fryooeLZlxpFPKcZSn?= =?us-ascii?Q?CSKt44cGWR4TccgA3AcDsfkhuPt5zycbwIEnlzDf+4HHjaxprSc3npTvV8Wp?= =?us-ascii?Q?oKzOQSceqWPaKo+q390UBfRsZU5N1xAh87x4jGv8OVEmhJvMbo/uexaNi0sR?= =?us-ascii?Q?7sUa7qVrlKhXy+OyjwxR8KRB0gYBFvjl+KdZX5vxywunPW11itQ8sD70ZMbv?= =?us-ascii?Q?7FutUqh7NApBlEUH4pbEijOW0+n4ijwBu++6J8EYRB6r5bXakyQUtQx2/z35?= =?us-ascii?Q?vF9mhAGtNZtuRfqDfBRrmXL75B7A2e5K7ar4zDXPYwMxcqZeXseGD7ibzz/Y?= =?us-ascii?Q?jQttD3z+aG02UL/htDWjSCn1wZureoQRlx4bbWtcg/EuNmxzW2dnBKt9sXav?= =?us-ascii?Q?MTdPkcrxIxnxFNOtfZZCNa3EKl4bzD5jRGt3vy+EfoAP0ORlOvHhF39FID3y?= =?us-ascii?Q?V0LzRg28krZ8xrJgkG2uTuWmrSOVFKZjkcDofF+CgYNp2B2TEkc+48TM2GY1?= =?us-ascii?Q?kWp9ZPklMGC474lm1G8l8fu3bg+h+1PksLv1xn1slkCAK8wBErFfTKlDURJw?= =?us-ascii?Q?M1N+8JVlc+4oQAUayytbu76rW/IuazS2xmlz4N2Ab0C3C6ds1SWsAqq2Gy5K?= =?us-ascii?Q?po5sliMNHOopem0U7RafXXg1Ncypc170l/BjN/tDxds+/QqjufO/zKjXAKLE?= =?us-ascii?Q?GQNeyRWJ8y1r+2FHbk3rc95qJ4wz1maCFwVcOhV+9vjzZ9m+DRJYlb8s62nt?= =?us-ascii?Q?JRWglxpXJb95YvS2XDjRqcTG/IwpmRs7xqk7z0ngwVImoGT/qp53YVh8cggn?= =?us-ascii?Q?xfVDocWbwDmSh+Bj0JSKzRzmihP5rJJpFxV7bRkhHlhzgpgLI7Faz6VGG28V?= =?us-ascii?Q?8uiyTPTlZi2lSAmGZd1026dCi5EtJUBFdCPyJtJUP8AftzcrZBapHMnXYOBf?= =?us-ascii?Q?yYCdHUd8tp/WX524K5m1pZNm46NsUl022NUTYIVW0CJ5372gBbDFcLiJcE8w?= =?us-ascii?Q?yydXJMlD/LnEU1nrSJFaOgnO8EFIRslFdtBCYJe+XDsLLgf060fjmPU16NT8?= =?us-ascii?Q?M54g7klQp1esqaulzP1YLw6s9curm8r/n/rN8YRNURirid3lCxtzGYoyjfoc?= =?us-ascii?Q?dryQKqDUk7P5KVuDCCp0VMReygieekzOUZTRlF47luRhzXaqnmJzA8Ds1bJp?= =?us-ascii?Q?HSc/4g6b5NrWhHSJDoJRds/oOHRHr47he1mS1SLj03ShghV6x97HG/PFOVJx?= =?us-ascii?Q?xkXnVHkISFrNG/FzFJuJbbv8DrbUhHPWRRGIagU4NiL9fNYfAvdcUYy5fMK1?= =?us-ascii?Q?hb5QV695frSnSXfe6T37oHR1Hy03duR/HzwJirZDYoDGaBJW/cgwIyyNJeCC?= =?us-ascii?Q?XAKB6OzKGonwCCs8c4sUpILaBWpAjUvuuZ2zgfr2AN3VdUd7ondfQyGfVllZ?= =?us-ascii?Q?cB/MkPKz6AZ1T6W+TP/rWu7Jm7YMtw/f0L9qin8c4n7LhmDaElHyKhVFAYTg?= =?us-ascii?Q?SazHZgophw=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 15c30f51-ff3b-4dba-0c87-08de5a265393 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 02:22:59.1634 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iTu60CDQfKG4bbXYXmsYu8wHtNKWEff2PrrSlwP+3q7iAdgjxBaWN+pm5GcTLY1QQCmwCxOI5dDMjLlr8r8lQg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11974 Content-Type: text/plain; charset="utf-8" Extract fec_xdp_rxq_info_reg() from fec_enet_create_page_pool() and move it out of fec_enet_create_page_pool(), so that it can be reused in the subsequent patches to support XDP zero copy mode. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/fec_main.c | 58 ++++++++++++++++------- 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethern= et/freescale/fec_main.c index 4f230767dcfb..c5ba532e00a8 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -489,23 +489,7 @@ fec_enet_create_page_pool(struct fec_enet_private *fep, return err; } =20 - err =3D xdp_rxq_info_reg(&rxq->xdp_rxq, fep->netdev, rxq->id, 0); - if (err < 0) - goto err_free_pp; - - err =3D xdp_rxq_info_reg_mem_model(&rxq->xdp_rxq, MEM_TYPE_PAGE_POOL, - rxq->page_pool); - if (err) - goto err_unregister_rxq; - return 0; - -err_unregister_rxq: - xdp_rxq_info_unreg(&rxq->xdp_rxq); -err_free_pp: - page_pool_destroy(rxq->page_pool); - rxq->page_pool =3D NULL; - return err; } =20 static void fec_txq_trigger_xmit(struct fec_enet_private *fep, @@ -3419,6 +3403,38 @@ static const struct ethtool_ops fec_enet_ethtool_ops= =3D { .self_test =3D net_selftest, }; =20 +static int fec_xdp_rxq_info_reg(struct fec_enet_private *fep, + struct fec_enet_priv_rx_q *rxq) +{ + struct net_device *ndev =3D fep->netdev; + int err; + + err =3D xdp_rxq_info_reg(&rxq->xdp_rxq, ndev, rxq->id, 0); + if (err) { + netdev_err(ndev, "Failed to register xdp rxq info\n"); + return err; + } + + err =3D xdp_rxq_info_reg_mem_model(&rxq->xdp_rxq, MEM_TYPE_PAGE_POOL, + rxq->page_pool); + if (err) { + netdev_err(ndev, "Failed to register XDP mem model\n"); + xdp_rxq_info_unreg(&rxq->xdp_rxq); + + return err; + } + + return 0; +} + +static void fec_xdp_rxq_info_unreg(struct fec_enet_priv_rx_q *rxq) +{ + if (xdp_rxq_info_is_reg(&rxq->xdp_rxq)) { + xdp_rxq_info_unreg_mem_model(&rxq->xdp_rxq); + xdp_rxq_info_unreg(&rxq->xdp_rxq); + } +} + static void fec_enet_free_buffers(struct net_device *ndev) { struct fec_enet_private *fep =3D netdev_priv(ndev); @@ -3430,6 +3446,9 @@ static void fec_enet_free_buffers(struct net_device *= ndev) =20 for (q =3D 0; q < fep->num_rx_queues; q++) { rxq =3D fep->rx_queue[q]; + + fec_xdp_rxq_info_unreg(rxq); + for (i =3D 0; i < rxq->bd.ring_size; i++) page_pool_put_full_page(rxq->page_pool, rxq->rx_buf[i], false); @@ -3437,8 +3456,6 @@ static void fec_enet_free_buffers(struct net_device *= ndev) for (i =3D 0; i < XDP_STATS_TOTAL; i++) rxq->stats[i] =3D 0; =20 - if (xdp_rxq_info_is_reg(&rxq->xdp_rxq)) - xdp_rxq_info_unreg(&rxq->xdp_rxq); page_pool_destroy(rxq->page_pool); rxq->page_pool =3D NULL; } @@ -3593,6 +3610,11 @@ fec_enet_alloc_rxq_buffers(struct net_device *ndev, = unsigned int queue) /* Set the last buffer to wrap. */ bdp =3D fec_enet_get_prevdesc(bdp, &rxq->bd); bdp->cbd_sc |=3D cpu_to_fec16(BD_ENET_RX_WRAP); + + err =3D fec_xdp_rxq_info_reg(fep, rxq); + if (err) + goto err_alloc; + return 0; =20 err_alloc: --=20 2.34.1 From nobody Sat Feb 7 17:41:16 2026 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010021.outbound.protection.outlook.com [52.101.69.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 3ACA438A9C3; Fri, 23 Jan 2026 02:24:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.21 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769135090; cv=fail; b=PAW5J2SEzahBICC/wrcU8yvu71TVY5OldeM+dYis6MCmd7blKxFWX5Gz0rnA3LfiX84/zf/PqXBYbX+yWKCkSsard/VidhXDlvIgJlM4sXG7NvRC2wKiws0ffJ/HGX/OZUnH4QaOrFCoO0tuuHOx3/nBHGqgd4YHtoVdRX/Fvjc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769135090; c=relaxed/simple; bh=zrfs4Kb8bpoMWvItAHIuMMURSztlljbbsEL3GSlhXmc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=j6D+i4d2XclfllZGo0zqfA+TUb6Cmjdpu35X8G8eWnYivr0OXJNfARGOQp6UFT0zBuXB+Qy3EMnvbsv5xxaMXWnz7QKAUY+j3n2fWVVlQet8qW8W+JzcC+EtK5+k96KmPKIBH1TcnoofJ10S+IVo5Lh6oqV7OytToqGZFr9QnGQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=UXIPhv9b; arc=fail smtp.client-ip=52.101.69.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="UXIPhv9b" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JW3Lpy84USH+2vztIYzfy3SVteVea4Yi9ra9ULT3XNs1xtiv9LPfGU7LOIOt9rcX8PmlY52iREWaGbat54xEtfFOsBpFtrZ7oB7ZhWBXXf4x7GLI1aw7hoWKx3xb9ZHu+15yPcMGz2oHzDUu8rKyPuBhMMn2DQLpAb28B97mXOCiz8LLXklL8ja9m07G6CVRXNE4aXNaxWz7CjZMp31z/oBRK2N9XN3+UXQkMoG4lZIwIxJps7Ro0QlBt6rwd8P/Z/uzurLM8DIHEG0cMrxCU7DquIlyp/lEVvnsnmTOU/AkMn34AXKaPipzj8q6UKq/mesmwvhjA0DSe0/vR7mjdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=BbCVF3f0EAWx/wk7by5kl99yGJgBRfUnkDUW7EqZLIs=; b=U0oLN1Xl1qU4FwhqCXn3XR4Zc37RlE7TrN2K32xsJZW6XYFhmIKOsRVFM6SUhYkS7ZbFsG0EgzDrv8HBIrnMJog/1a0CwuBHvBUFSXGWfK+MZML3vtzC5ChM7YAydzq3QjCd0Sn+LeRJtMW6AdhztU4QDczfHLEKPj1O2lysE73nVmepOTG2vOrKXC3D7TdaemuGu+Kd9amrdpHr3nVnOsw2dmbLRHTccHGVzg8BDXsOBKuWzQa9yU8tH5rNsgVpMopzhGjp8UqeTbco4+SChJuEusmdHOVtY8zHcpGZozGH+ZlYVXArYK3D3sH0SOOIxy9OaMpFcrcS0FEBgStJ7w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BbCVF3f0EAWx/wk7by5kl99yGJgBRfUnkDUW7EqZLIs=; b=UXIPhv9bRqsmyYda2CmAWRER7lqgQOAzSpPb86q6umBiix7Y7XLsfjYbirWFBRqzMQf43BwVujVEYUTgQ2PHYOIF0bxC1HpdpI6aFMoLdVncB8gnq0ae3JPWtRtpJCcWRpnXXqm9unxseYL816MvFtNQ783tH2pFeEn25IyQLFz3M36QytWu8Ysdtq0lm+jioPoOG95VC3MmR06Sj17fi31sYWWolkjiE1pStXxp9EMMQxt68MShDLbHYZBTMd0JaT0Bo7/CmyXL0DIlgpUQhbMPHdO22kVjVNJNA8ixucWxgBs9jUblse9ofo3TzmxSM+eagZQXfa0ns0NMq772OQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by GV4PR04MB11974.eurprd04.prod.outlook.com (2603:10a6:150:2e8::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Fri, 23 Jan 2026 02:23:03 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%4]) with mapi id 15.20.9499.001; Fri, 23 Jan 2026 02:23:03 +0000 From: Wei Fang To: shenwei.wang@nxp.com, xiaoning.wang@nxp.com, frank.li@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, sdf@fomichev.me Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, bpf@vger.kernel.org Subject: [PATCH v4 net-next 13/15] net: fec: add fec_alloc_rxq_buffers_pp() to allocate buffers from page pool Date: Fri, 23 Jan 2026 10:21:41 +0800 Message-Id: <20260123022143.4121797-14-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260123022143.4121797-1-wei.fang@nxp.com> References: <20260123022143.4121797-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0074.apcprd02.prod.outlook.com (2603:1096:4:90::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|GV4PR04MB11974:EE_ X-MS-Office365-Filtering-Correlation-Id: 0e3018e5-1cc7-4d34-f4ce-08de5a265655 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|1800799024|7416014|376014|19092799006|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?tgeK+34+RdAtyY+510oDUYAanlTBaOo+wx2TvmCmdDK7out8GitwREDqqBKx?= =?us-ascii?Q?mgJd614f4BC6tfWyX5kyKobpojAoek5Nn5fMyjIhoW5rCAMVj+G9F8tfYAZ/?= =?us-ascii?Q?8tUtt3SadiqgAs8ZVaFUa7FEzhuSYMcF6ll8VS10pPl88cQZ7zW7Ise5eawo?= =?us-ascii?Q?Mz8bPkmdvP7Prwx4fYFDrZfCDV8xVbVgy4aVvPBSB1L63WhoxFW83gJUAK1H?= =?us-ascii?Q?00MTMbaI2RF9VsW3bBBxSHg0u+WV/aHCbY6wGzhrKkvV6MGPfClpcvxZxffF?= =?us-ascii?Q?S/TNnLnm5je7bUb7vRXF/uyhM6SJ2mYbMxarvoD7yabvzZx5l3kFCgzsVQTV?= =?us-ascii?Q?8Kw4PaDWmxBMc9AW4XM7DGGXJvtJPih2t6V8k0vRKHpMm5pJ6oeEuKVeUN2A?= =?us-ascii?Q?ISz3ZohVUYIba+ZqOJgLT4tbMctLr/gAWlo6zeneC9AinwY7kNpuPw10t0AW?= =?us-ascii?Q?c0rVh6ukWiSU6IPTBG9GlS2m0y7GXC76vQeFbvejGFDSf0c/1ss1Jb2Ox5jb?= =?us-ascii?Q?oDIz2gLY1jL8P7ZviR7JzXwvWJ1ACRwuJFM4ewKvozUO1hJyoqU21HZ4gssd?= =?us-ascii?Q?ORjTiGPu2TVRiwWnK4hWFTSrxw+OAKdReXssHMMmiQ9MPgb16Fxcxm/DH4oR?= =?us-ascii?Q?Ha3w2g9b3vBBLniDDndMENOMlHTWS29iV2d2btww24AUUqg4b94RxOv/jeGI?= =?us-ascii?Q?V735nUnOXNi5zedrxArouMRDqlBqUfQAHbIhBNt9vmiZygSDHKfY2LjNSusG?= =?us-ascii?Q?cr02PNlGFEzLoCNq3r8ici6nZYK7TMXUYqrukV3pO7U95rAh/t3IB4WaCx2L?= =?us-ascii?Q?Z/bdSDy4dpWBr2AJ5UlsQ69Cpz/g2Wc/wZN7DORmOkQQ2MbML6HBbFtamPu3?= =?us-ascii?Q?6RUOlAJV5j9zyou8r7p7uj3O/681mIjp0D5Rx31jta4k98Fc9WEhT1T2llf8?= =?us-ascii?Q?nSGO4tkbWO8HFfU45Lr0IvHj4CkrogEmrEpIdIHIs9PF6eAyCf0R9ujf6Bcz?= =?us-ascii?Q?+9EfXAaJ+Cz17lOBRMYnwiJHyqfVEkrgFYB3eKViYe5yDz2+kpa9aHO+y65D?= =?us-ascii?Q?iStyuxbdGlbW1kFRA2in6/ixugxfA8AyumdQ+b5tif5Fx6A8LVkjni4Ag9hf?= =?us-ascii?Q?wQ1LMDZ3pEALHFJL83b2lhLedaqexu+xb+5nDL70OpSh5oH7gNCxsJcZ9SBx?= =?us-ascii?Q?v1NNl5N6/Taav+2hcBiLJ9nZ9LsdGc4xg7jh6V6+zgG+eqmBIIkCqgV5SJYD?= =?us-ascii?Q?QOyYbrk42OzQJKAfA/qcZmDRb9TvXXP+9LyfT9HlI9czSfXGcuk+soGwLOip?= =?us-ascii?Q?KPlNKJrQqmRtUIZ4kbEFtH6yOKacM4GFR3G/QoGQ0jrwp7YM3YBQtI0B4p53?= =?us-ascii?Q?6gR6JRU93senvQx8G5da3eOc/jhGTLhWmYGYzYsd/jeB4AphLIZ/wpN3v7/P?= =?us-ascii?Q?EzRaJfgCkdrTfPKeSHEjaLNZMjo8xk0GR71Jx8kY6df4uQELabg3r9UbrcGz?= =?us-ascii?Q?iSsXjukxB2emCG4uLcLyv+byb40EMvinRCDw6aUYw6QY8YIIQrK2QDz4h8vR?= =?us-ascii?Q?X/FkkKK7VydG5cE12zz575MJ4QY/avSOA9JTf603pIkTD++Qxh2cJOaadOWg?= =?us-ascii?Q?d70+g4F1+csM80X1emS/Mh8K6MeryIUKxzxSem2RsIJ0?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(1800799024)(7416014)(376014)(19092799006)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?FMTKsbp2U1GrHBk4wCDfTuOdA9pYnP2QwpiBBKAySO37RSRomGUjBPYJJPO7?= =?us-ascii?Q?vAcQ5Jv3O3nGsphic38H/XoF4cLdy3nt/zmTIYe+NsmVNaKWo5/OBGVXQW7R?= =?us-ascii?Q?QOwOL3w9B4fMmPkOjc1hwSOzJ71awYrr1+YJWcLNepZ7u0dbKviQCz5rceYU?= =?us-ascii?Q?BuCxJ6G0SlAo0wCO/ceBixjOO3aZuRXKXnoZkFIGgQ9AIzR8RE8J/hf2FtD5?= =?us-ascii?Q?GJAUpKg2waYISyTMBYYjndyLfjIQ/aWGhLFnDU+/C8ESXqIeXwvRcwN47jO8?= =?us-ascii?Q?fahUT95PD3kQtvvvusFt0pJGX2kiBgj7HqykYzqdar6D/T+bpsi9B6j72NxA?= =?us-ascii?Q?zL8QO0c3E8NVurVAGWNEf4P5/mPlHTSjLVzYGVKVjKtJlugAHvtaB+xH6Ij3?= =?us-ascii?Q?IeKlRmAz2fefAk3nZ0sl1CQAU6e3Xz5ctjNKWUVHMo8xA0xCVdwLH1Di+Wpv?= =?us-ascii?Q?FY4tHUE7sn8AovqZEnUUCaKW37lkPG84eeVB8skeM3gtwsRY1VGaUxp8Ss/W?= =?us-ascii?Q?vRJEXPlN+PcYXkm4ZBD8+zNF2j5mh0V3VPpA1T95aEt+AwSIky0lHLDzZH7a?= =?us-ascii?Q?D8OyfdK0/E4EhjU9vlLOsIuuqln/jCGWeIAk7Q+5/x7Qdo043PyY/wHhV98b?= =?us-ascii?Q?zVHikCo8elEVbyuHwCJkY+rQJbROF8DrlMrvkmqVmMz92f6dTVCG5ZIj8l6/?= =?us-ascii?Q?d84+UFO9njHryg4/RWWvsh9tIunb3FsuK+BoU2Na93hPByrPmvS5jEJg6ov/?= =?us-ascii?Q?twj3uU8pQeVyatRwOsaj565/uJkoX+Nmzecw7YWgfcouqS3sv2LjRDsWvyXA?= =?us-ascii?Q?sNgNFMVQOYq/3aLaSASvw+6iP59UMvgE9D2PFBWOdHGGcAfxLKU57JVsD2uZ?= =?us-ascii?Q?nWx195GedhnmZEQEsT+TNXE1y81afqkGu2vL7e/zzvPgIs6Bl8lmxXGsXbZ6?= =?us-ascii?Q?XjlYfDwzk32po8e8YJoe38EJTT59Vxrwpev45uI8qYY8skcNh2uw5Ic6t5Z1?= =?us-ascii?Q?I1Y38N+xlWikDqh3vHfcRU3qOrwnqq5r4dNRLoCbZR+Xi8e6WF0KEfZAPXQS?= =?us-ascii?Q?Kli8LczJPaZLSb4L8DC9B0S2LXJg8KpY+10Qc31qC1kmOVSQTflPdwf7B4JK?= =?us-ascii?Q?a0IPRcOf1R2YPKP0z9jnuc9ZTJnd4IHTP77WZDgmhqql10toGYvhZ66nWWDC?= =?us-ascii?Q?folZx+esbybuASiTjql/2hsVy//LVEK1iThnqfGuoE4s/7mcculIeSgAbFha?= =?us-ascii?Q?oKUsAuN3VItFMhFoYyOO+JDssNnT221W8wiGh1/vuPIaIM9WVusFpBXVOh+J?= =?us-ascii?Q?kUsd5djOSeIIP+sSuLxZ5nHDECN2g8XF69k6g4AgYeWBOTyQY/Y+1HMHmCHt?= =?us-ascii?Q?Gg8hz8sREy5NgrJC+d644nWdrse9VDK/qKCT7PsBkIKTrfeJfZRwVm2Zsv/W?= =?us-ascii?Q?L5a9Uypu1LRDDby8eHUx0pvFCSyIzpk8Rz1RTAILs8B2tiP76zMLo/gXYbmo?= =?us-ascii?Q?j2/TsmkVrai9WajS1UhnTyoxCwhdoQ2XwjBMR2WvomY2vpcRe6bj6Gq+Bxv/?= =?us-ascii?Q?/tPI17+ktfiCfvuj93ppMHwT2lTb09WMYN6D+uIXZ502wwFikkP8KVm0sT+D?= =?us-ascii?Q?ZI2iWxzhyLbaxqAouE4dlhZp0G4PR+L7volC+7G4zXeu5Sqsr9N9sG5Su+H3?= =?us-ascii?Q?RKKkcdH3IbPhkul+3UYuyn9EPN5U2/I41CYg4WLGQ1GsmN6FyWhVvfGN46oh?= =?us-ascii?Q?M1Gox+zF8g=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0e3018e5-1cc7-4d34-f4ce-08de5a265655 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 02:23:03.7837 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: apjblQNzQZkXGLNT9SG1WwPp42MIDVOW95ZInFHcO8cWg6ZUlQrtQgfUUmLH+7sZDLjCdE24HOXpv8QvIMwZYw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11974 Content-Type: text/plain; charset="utf-8" Currently, the buffers of RX queue are allocated from the page pool. In the subsequent patches to support XDP zero copy, the RX buffers will be allocated from the UMEM. Therefore, extract fec_alloc_rxq_buffers_pp() from fec_enet_alloc_rxq_buffers() and we will add another helper to allocate RX buffers from UMEM for the XDP zero copy mode. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/fec_main.c | 78 ++++++++++++++++------- 1 file changed, 54 insertions(+), 24 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethern= et/freescale/fec_main.c index c5ba532e00a8..867694d6d54d 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -3435,6 +3435,24 @@ static void fec_xdp_rxq_info_unreg(struct fec_enet_p= riv_rx_q *rxq) } } =20 +static void fec_free_rxq_buffers(struct fec_enet_priv_rx_q *rxq) +{ + int i; + + for (i =3D 0; i < rxq->bd.ring_size; i++) { + struct page *page =3D rxq->rx_buf[i]; + + if (!page) + continue; + + page_pool_put_full_page(rxq->page_pool, page, false); + rxq->rx_buf[i] =3D NULL; + } + + page_pool_destroy(rxq->page_pool); + rxq->page_pool =3D NULL; +} + static void fec_enet_free_buffers(struct net_device *ndev) { struct fec_enet_private *fep =3D netdev_priv(ndev); @@ -3448,16 +3466,10 @@ static void fec_enet_free_buffers(struct net_device= *ndev) rxq =3D fep->rx_queue[q]; =20 fec_xdp_rxq_info_unreg(rxq); - - for (i =3D 0; i < rxq->bd.ring_size; i++) - page_pool_put_full_page(rxq->page_pool, rxq->rx_buf[i], - false); + fec_free_rxq_buffers(rxq); =20 for (i =3D 0; i < XDP_STATS_TOTAL; i++) rxq->stats[i] =3D 0; - - page_pool_destroy(rxq->page_pool); - rxq->page_pool =3D NULL; } =20 for (q =3D 0; q < fep->num_tx_queues; q++) { @@ -3556,22 +3568,18 @@ static int fec_enet_alloc_queue(struct net_device *= ndev) return ret; } =20 -static int -fec_enet_alloc_rxq_buffers(struct net_device *ndev, unsigned int queue) +static int fec_alloc_rxq_buffers_pp(struct fec_enet_private *fep, + struct fec_enet_priv_rx_q *rxq) { - struct fec_enet_private *fep =3D netdev_priv(ndev); - struct fec_enet_priv_rx_q *rxq; + struct bufdesc *bdp =3D rxq->bd.base; dma_addr_t phys_addr; - struct bufdesc *bdp; struct page *page; int i, err; =20 - rxq =3D fep->rx_queue[queue]; - bdp =3D rxq->bd.base; - err =3D fec_enet_create_page_pool(fep, rxq); if (err < 0) { - netdev_err(ndev, "%s failed queue %d (%d)\n", __func__, queue, err); + netdev_err(fep->netdev, "%s failed queue %d (%d)\n", + __func__, rxq->bd.qid, err); return err; } =20 @@ -3590,8 +3598,10 @@ fec_enet_alloc_rxq_buffers(struct net_device *ndev, = unsigned int queue) =20 for (i =3D 0; i < rxq->bd.ring_size; i++) { page =3D page_pool_dev_alloc_pages(rxq->page_pool); - if (!page) - goto err_alloc; + if (!page) { + err =3D -ENOMEM; + goto free_rx_buffers; + } =20 phys_addr =3D page_pool_get_dma_addr(page) + FEC_ENET_XDP_HEADROOM; bdp->cbd_bufaddr =3D cpu_to_fec32(phys_addr); @@ -3601,6 +3611,7 @@ fec_enet_alloc_rxq_buffers(struct net_device *ndev, u= nsigned int queue) =20 if (fep->bufdesc_ex) { struct bufdesc_ex *ebdp =3D (struct bufdesc_ex *)bdp; + ebdp->cbd_esc =3D cpu_to_fec32(BD_ENET_RX_INT); } =20 @@ -3611,15 +3622,34 @@ fec_enet_alloc_rxq_buffers(struct net_device *ndev,= unsigned int queue) bdp =3D fec_enet_get_prevdesc(bdp, &rxq->bd); bdp->cbd_sc |=3D cpu_to_fec16(BD_ENET_RX_WRAP); =20 - err =3D fec_xdp_rxq_info_reg(fep, rxq); + return 0; + +free_rx_buffers: + fec_free_rxq_buffers(rxq); + + return err; +} + +static int +fec_enet_alloc_rxq_buffers(struct net_device *ndev, unsigned int queue) +{ + struct fec_enet_private *fep =3D netdev_priv(ndev); + struct fec_enet_priv_rx_q *rxq; + int err; + + rxq =3D fep->rx_queue[queue]; + err =3D fec_alloc_rxq_buffers_pp(fep, rxq); if (err) - goto err_alloc; + return err; =20 - return 0; + err =3D fec_xdp_rxq_info_reg(fep, rxq); + if (err) { + fec_free_rxq_buffers(rxq); =20 - err_alloc: - fec_enet_free_buffers(ndev); - return -ENOMEM; + return err; + } + + return 0; } =20 static int --=20 2.34.1 From nobody Sat Feb 7 17:41:16 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011034.outbound.protection.outlook.com [52.101.65.34]) (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 CC4DA38946E; Fri, 23 Jan 2026 02:24:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769135097; cv=fail; b=tvMYvZ24/+2KhU7AZlTvjN2OhxqqgpC7BPmCprgg4JTDgHCXC/TshxWhV72jAD9FtDSXL+RHq+rMZDc8KiNkbxOGLtDRrPQx2RXbjcIajzuDJw5fJXjOyrm3xO10lwPoOPrk3wDg9mBNSo6gE6p/jJLFgJ35c+PSgqB33pgDUVI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769135097; c=relaxed/simple; bh=p1eGHM7lpN9ym3Ozi3DwUxPhsNVsEdryk2unUxrP6Tw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=G4alhAOK/HbkcD2CC7LIrnIuzIszUJLAf7eMu7sd1T6afEbAyHJzFlz2/dvzQBBCHJHGSZk6jZu/jsxNerYdzz/rJ/g1F3LNL/VgtnSGbmiU466n34WLs+0keN+47u9OWLulY+e9y0HTYTMASIwDgT1LmGQ4I50XwxDz9YUAUAc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=EkqB0K4i; arc=fail smtp.client-ip=52.101.65.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="EkqB0K4i" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WwSNE2K97b8a6qD2yxoKF28b7faPZHvXIdWPxXYWFX2Qg4P73bklXPldT3eyBpeu6BT2rDPB33NeVr9j9deLrjJGV5KbgMEqtDQx33AafELhrtJ6COuyXYV2ze1qfoJ6qiBd9IT6MqaKehsse5f5heLNO9vmtmjo0aUE9NgNrVBNvlfkfuS6c8YZua3YLQN2KjGHx7csRMHTqOsykSmbxMqxyIihkNpRkHfai869XK5N5d2adxmrZo1L3O9RVISlwwI4s6PUXlA3H6KWi4xMcI5YoJGtmNtuTFJWwPN2bF0J/FuWx0YXxI+kRG34pDhxQGgl2P52UXGbzrf2cNox1Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=2BrAGMnDthBj7sdLDxycpQbG/fzuiWC1joQos3OkrDQ=; b=MFYmi6jd1KDVzxgivVRwlxA0KGmOdLWevIMmmdh/3VA3M3M5uNiMRgtbLDr/VTKliotX+3fPP0Qeky78kjL0EX6LW8oJoVbsLQJHT6KW00oW7kMf6ybNSMCTUejcGg38qeEvQfOb0Z0l3oIgsH6ruVqKy9QekhxE3Op3AS1PhjVDlCpAXAJR0HwJFnH7psKoPa2lwe9ACqxFPSCmUmZfVHEakn8glH7fj/yKFHWYbJLutcIIvEmiTaISWV0BT7EKKsM4AwZabNebQ5ALhpLLM9DqpD+OkF/AhOjLpD+lc4+yE0UKK5AVPn+p+ncq0EPhyTEWZWUaDEypldtOK7F8zw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2BrAGMnDthBj7sdLDxycpQbG/fzuiWC1joQos3OkrDQ=; b=EkqB0K4i3vCOWze3kByC6fXlTSidYSCWvFyqAUBo+CvlH+OmF474Kbh4Kqt6WJsh5rjrSRayGPczjDDAv+/qsvzWE9VwCyGkfe+Mj4FI1PvcQIU/cHyLSvB5s3PDXkJWztYSvh/1RUZ2ogSF9EW3Hf4Sv3vfZtsMnPZBptcue3FO8YnNSCJCioQAyeh7xuhPpp8eOLCa659EggmWoNc8eBXEz/HGGD5SQntr3rV0mGs6rrzbE7Ggm8FZQPnA3LowMoXbm1pUbTYPzyJz9426xgqCi+5FCKA8Mg6kKplqbQoI0xT56FqbgVqaLt5oVgsDqcaSsj4wwbMFN7CZYc0/yA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by GV4PR04MB11974.eurprd04.prod.outlook.com (2603:10a6:150:2e8::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Fri, 23 Jan 2026 02:23:08 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%4]) with mapi id 15.20.9499.001; Fri, 23 Jan 2026 02:23:08 +0000 From: Wei Fang To: shenwei.wang@nxp.com, xiaoning.wang@nxp.com, frank.li@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, sdf@fomichev.me Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, bpf@vger.kernel.org Subject: [PATCH v4 net-next 14/15] net: fec: improve fec_enet_tx_queue() Date: Fri, 23 Jan 2026 10:21:42 +0800 Message-Id: <20260123022143.4121797-15-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260123022143.4121797-1-wei.fang@nxp.com> References: <20260123022143.4121797-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0074.apcprd02.prod.outlook.com (2603:1096:4:90::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|GV4PR04MB11974:EE_ X-MS-Office365-Filtering-Correlation-Id: fff07e5d-5bc2-4756-6993-08de5a26590a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|1800799024|7416014|376014|19092799006|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Z7EIqNZEjlKQniJuNwFchY6XViAIxtoRsNIpKInIcVKBbVVJM/4fY7Fazj42?= =?us-ascii?Q?vTM8pdbsksmWNX9iLPuLgF3qmSgpLZAPcCBECUgKbmHtLg/Q4vt2KpG4b5yx?= =?us-ascii?Q?U5v6aNqrH8a8q8plxWoiSlpq1OmQjdv6CxA/6BSPXkbeCuSODuUWUxKuEocQ?= =?us-ascii?Q?ofJ+5fKRaG08z1e9jV7p/ekc8D9XxzI6sGmBZj2BRuXztBxZ4Hb+xRgjGMTo?= =?us-ascii?Q?hKTwDw8hYFVuxRxndW1xx48h5PTwscZNEkZanvG34aP4XHsFL7S47Gz33+1Y?= =?us-ascii?Q?ZidxeCk6v/yHkRCfR7F78jcdsxgXlEwvk3cZnvYPEA2U4/C4PiMlD6FgmsV/?= =?us-ascii?Q?j7y1HwvQgr2zldJaid7VWSpKgdbZyEfy/7bzBs2NBfjG6pwVic8iknN5ci7x?= =?us-ascii?Q?sN4YZ+NRhxHbwRgZso3PxyXgj3QHLfk8cvt70AJulrTpFWCtLrWGXdCLEbv9?= =?us-ascii?Q?ZD9tJ9W4dx1GoGWaP38iXZBKgnXxPhIj9RVWerFEgtOR7BOwmE8zYMY7Y5NQ?= =?us-ascii?Q?uQ2cWD3UH5I/PLo8nD8nu/fC6nDR1viLVvG61DijVYOB++p0cXidY2d5h0Ju?= =?us-ascii?Q?Re4e8ubMkH7W0f/adMmeBRxc8k897QGVPaxk8xUaiHNdESOFQeh0okgp/v+0?= =?us-ascii?Q?75WR3m00uSPf09ckMEuByz0fubWKcOwjMh1GXNqxNeDQXDyM3qNEMrA1z5nx?= =?us-ascii?Q?CMK1/Jss86ac8s0xFZr7gYOim7glQt5RDuORzcp0TXXQ+IUUn3rMGTbaFFlG?= =?us-ascii?Q?FQI1R9E46SSUEAbYpHkMVbu5mKwZrpB5F4M9v9TurweSAOJML17mxubr7CxP?= =?us-ascii?Q?4zrjLAoSlkvPOc1eNEmPeijy4YqZz67/ym5iCidKXnfVayqWM9yklQ/9kmUf?= =?us-ascii?Q?Ganfce9L1szdMbHkw9ASJx6UgenL7cjHcV+Ld3SMRbRo7TKwRDsAOwYsNWdP?= =?us-ascii?Q?rblKb8NEj4UdvLzuh1qbO1GmV6Cj4WkdozXyAW15VYSDeJU221CNpvxgjkSR?= =?us-ascii?Q?Uc82qmisMM501IDuOLg78NHOH8XkQzoADaR8TxPA0s7kKqtFnViE14uF2p4N?= =?us-ascii?Q?3nzz+f/NRatuPxo0FvwaQ91F2lw8WY+cuFuESYQCmU/9SFUfzls9ioOOuJ/Z?= =?us-ascii?Q?ymjQGOnOnoo5KgOaD+DIQuzkbDVHmpnDNkh6ee+HCA3Z16Z7I6/bQy9ADE0S?= =?us-ascii?Q?LbW++o3cv32ohM8qgtNbUJm+ZcTslRRcf2MOrU4YXKaxPlHmlb6RbzZh45GP?= =?us-ascii?Q?zANBTNbwlKE4M+HaSFjN2QA85d4/nd4pKUAfN5jiZkA+e4m7PwH0ztySqFg7?= =?us-ascii?Q?dcaUFkTwC3clRkv9MWjRah+cCxQA627TpvxMm+xMzjQ5bTZhYvW4zIs+mXzi?= =?us-ascii?Q?dVD4l27elKgN9JMHSMR4+rOs7W6+syrK6o3WoWgiLXipvK0+ohiKME/gGQIO?= =?us-ascii?Q?kRb3lJ0Q/93Zw7pieTk7JQjz07gZvXAOyt9BSY5bPkcymWny9doCPYvkEqiJ?= =?us-ascii?Q?8I7HSNw05GzGyuPr3wRaWvB7elNWxSRXyK4NgnNp5+RcmtblZ/WWg7P+8ARm?= =?us-ascii?Q?NWcAuyDBef13a/s10K2I2rnAn/JPEktFbVHIQ2Aj5yQGoqK9IA9saHQWuVjH?= =?us-ascii?Q?/DR01Hyj9YNPXXQ/0kNoZOCNf9qor7mYF9atspTt6dLE?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(1800799024)(7416014)(376014)(19092799006)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?/duMlT6S1/KlVznkxbmoZkFZYApQVckMUiUSwX5RSne3a9DuFFtcorvrdIaW?= =?us-ascii?Q?4suVJzCgrrK5s8dmV7xzU7OWweI/ootpzy8k2Kgl959GZABAjvxP9SW6VidI?= =?us-ascii?Q?7gmWPeFPkP6gqHCxofWZbDWqXSjaAFE6x+RKriYLQPEXsO6eLM0wAzlQLv85?= =?us-ascii?Q?+IdvxncHDKVwkaUn3DfBelvFxd/rtuR6fHH1gicrNzu+q+fKLzRd6Nt6HuSs?= =?us-ascii?Q?fqHdoZvmq2b2Ld6WeI9re944AK2LK7MrodOzLJrAtjGEuSR/D2cPMgC6tV9d?= =?us-ascii?Q?avVHq7S7nQRW3vRwDaMhHhGb3KnzJTtHq1RONoOgihOrrYlk3+fIZKaFuxNZ?= =?us-ascii?Q?U2oUaJd6lSErD9ch1Ce+I2LPy8bBfh6MroQPuI3U3mzo/yIEDZ+3lpqdsvDZ?= =?us-ascii?Q?n+NDXN2TYqjxm+DtSKscFHwD2dnDI+sZSx0KbKUXF86YGdfrLVyD3+vVKbWK?= =?us-ascii?Q?hVPtzlLqE0nzUszRTrCB7Kd5lC0ia/DqGk1D3oHM17waz1tMgf7su9m9Uljr?= =?us-ascii?Q?KcKDrD8fWx+nTqQUIMtYiSGSy781rw2TFMifHevU7qiNwdNcrOdC6NriGO9B?= =?us-ascii?Q?F8aELDutdIVunptIu0Bs1Ftd6KcYYMpQEANdJFXFImVHhQTfN6lRh5a24qT6?= =?us-ascii?Q?WZnqGbWMzab03LX0AUM8z7RsECmYVuX/8DHqtSBn091glX7RaL+fz7EpDFJ7?= =?us-ascii?Q?KFJNP67cJEVvaKwFAxflbx5vtjrf1qBB2yeYSEJJ7khZgu/ccOvwxxPVNiWr?= =?us-ascii?Q?PaNyE8LNU/TZtgLDgpaWhbDgVP0W+w82wOrP4DFQYMozKNIoDcUIBaOusbOB?= =?us-ascii?Q?t3/DPo/xdSm91/P2ZFskxTawMDiWPEKGs7iOJkUQ6Jl/ksAxoQz/ThcKwXgd?= =?us-ascii?Q?ylusM1zBA7MZe7PVmYm7u8d9Z4+OhMcgq+5LhOL3vchMpgd5iz/QBDguhXGi?= =?us-ascii?Q?abXL2eIsQPdRzP/LrxDsncYjrvt3LiR3w0aMuPBPxDhuUxk5hMcrvV4hMzw7?= =?us-ascii?Q?uPQAuO7knlLJykWEGjhywhkK6Qt4p+oIT88rCWvs1R/tCasn4qhXnbJd+7AQ?= =?us-ascii?Q?XOtc5dcLec+Ai3LeSsi2nxmYGTENOTLZVWtQzEj5QSyb8nxlotxohqqJRoPT?= =?us-ascii?Q?o9lUuSMYHFof7n406SDCKyBmEveFmG9SA13OTz68UdW3Sj3LXZ2hzJzDKuM4?= =?us-ascii?Q?JLA2MhkzCFfGAoOZ/b892yYHqNt66cekhO9TMHqLBvKtus0YuaNAO3lv2Ubp?= =?us-ascii?Q?kUEDpGwYbRtzlTZKE7VldWynhsFfulME8bc+yjGneTbqU+y7HdJ5njUh+0um?= =?us-ascii?Q?rdY4l4lJDr+pX+yI0RsjA+kk84kkQbpmUFeH0AO1epDzMX8Wdi+rudUPFZJW?= =?us-ascii?Q?/He+GJrvFMq3VHBTO2iJm19uzw1sOTahg3pEAZZ4RenJW4csH55GmSaIATN2?= =?us-ascii?Q?nlRIhG7/UKcTz1+h6ybPldWXLmBZSM5/LhT2VEdtzTBby+U1m6pr1lJApVSj?= =?us-ascii?Q?SS9MjD6U7RloCbik1SkZFqOuTlkuAvhA9sHOjak7yTTxQ3iuHnDUkMaEKwz1?= =?us-ascii?Q?ok2Hy61KhhDY56d/H+8UjF4JrKwwXKGVoO8Rk1vQsah/H1nmSiG+/sC/V1b0?= =?us-ascii?Q?RP0kme7C4pktA9Ov8Hc7SAQPNd/2Le9rkLwJAr9deNe5LLGSf7sg3oe8e1n6?= =?us-ascii?Q?AA/iBrPjfSUaEcgHnarUU2jULIIplDTZpdSZUcYppy+fh9G2EAldGDtM1Ooe?= =?us-ascii?Q?HahUF0bUWA=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: fff07e5d-5bc2-4756-6993-08de5a26590a X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 02:23:08.3820 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: rg0BvIzlJidtvITZuBWBWYFb3MTkds/D4F78RaxaXpMqiqUcp9LkTdZlNcVxHxvmhAX67MqeBUy6gOIn86NjGA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11974 Content-Type: text/plain; charset="utf-8" To support AF_XDP zero-copy mode in the subsequent patch, the following adjustments have been made to fec_tx_queue(). 1. Change the parameters of fec_tx_queue(). 2. Some variables are initialized at the time of declaration, and the order of local variables is updated to follow the reverse xmas tree style. 3. Remove the variable xdpf and add the variable tx_buf. Signed-off-by: Wei Fang Reviewed-by: Frank Li --- drivers/net/ethernet/freescale/fec_main.c | 43 +++++++++-------------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethern= et/freescale/fec_main.c index 867694d6d54d..c19ae60b04d7 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -1467,27 +1467,18 @@ fec_enet_hwtstamp(struct fec_enet_private *fep, uns= igned ts, hwtstamps->hwtstamp =3D ns_to_ktime(ns); } =20 -static void -fec_enet_tx_queue(struct net_device *ndev, u16 queue_id, int budget) +static void fec_enet_tx_queue(struct fec_enet_private *fep, + u16 queue, int budget) { - struct fec_enet_private *fep; - struct xdp_frame *xdpf; - struct bufdesc *bdp; + struct netdev_queue *nq =3D netdev_get_tx_queue(fep->netdev, queue); + struct fec_enet_priv_tx_q *txq =3D fep->tx_queue[queue]; + struct net_device *ndev =3D fep->netdev; + struct bufdesc *bdp =3D txq->dirty_tx; + int index, frame_len, entries_free; + struct fec_tx_buffer *tx_buf; unsigned short status; - struct sk_buff *skb; - struct fec_enet_priv_tx_q *txq; - struct netdev_queue *nq; - int index =3D 0; - int entries_free; + struct sk_buff *skb; struct page *page; - int frame_len; - - fep =3D netdev_priv(ndev); - - txq =3D fep->tx_queue[queue_id]; - /* get next bdp of dirty_tx */ - nq =3D netdev_get_tx_queue(ndev, queue_id); - bdp =3D txq->dirty_tx; =20 /* get next bdp of dirty_tx */ bdp =3D fec_enet_get_nextdesc(bdp, &txq->bd); @@ -1500,9 +1491,10 @@ fec_enet_tx_queue(struct net_device *ndev, u16 queue= _id, int budget) break; =20 index =3D fec_enet_get_bd_index(bdp, &txq->bd); + tx_buf =3D &txq->tx_buf[index]; frame_len =3D fec16_to_cpu(bdp->cbd_datlen); =20 - switch (txq->tx_buf[index].type) { + switch (tx_buf->type) { case FEC_TXBUF_T_SKB: if (bdp->cbd_bufaddr && !IS_TSO_HEADER(txq, fec32_to_cpu(bdp->cbd_bufaddr))) @@ -1511,7 +1503,7 @@ fec_enet_tx_queue(struct net_device *ndev, u16 queue_= id, int budget) frame_len, DMA_TO_DEVICE); =20 bdp->cbd_bufaddr =3D cpu_to_fec32(0); - skb =3D txq->tx_buf[index].buf_p; + skb =3D tx_buf->buf_p; if (!skb) goto tx_buf_done; =20 @@ -1542,19 +1534,18 @@ fec_enet_tx_queue(struct net_device *ndev, u16 queu= e_id, int budget) if (unlikely(!budget)) goto out; =20 - xdpf =3D txq->tx_buf[index].buf_p; dma_unmap_single(&fep->pdev->dev, fec32_to_cpu(bdp->cbd_bufaddr), frame_len, DMA_TO_DEVICE); bdp->cbd_bufaddr =3D cpu_to_fec32(0); - xdp_return_frame_rx_napi(xdpf); + xdp_return_frame_rx_napi(tx_buf->buf_p); break; case FEC_TXBUF_T_XDP_TX: if (unlikely(!budget)) goto out; =20 bdp->cbd_bufaddr =3D cpu_to_fec32(0); - page =3D txq->tx_buf[index].buf_p; + page =3D tx_buf->buf_p; /* The dma_sync_size =3D 0 as XDP_TX has already synced * DMA for_device */ @@ -1591,9 +1582,9 @@ fec_enet_tx_queue(struct net_device *ndev, u16 queue_= id, int budget) if (status & BD_ENET_TX_DEF) ndev->stats.collisions++; =20 - txq->tx_buf[index].buf_p =3D NULL; + tx_buf->buf_p =3D NULL; /* restore default tx buffer type: FEC_TXBUF_T_SKB */ - txq->tx_buf[index].type =3D FEC_TXBUF_T_SKB; + tx_buf->type =3D FEC_TXBUF_T_SKB; =20 tx_buf_done: /* Make sure the update to bdp and tx_buf are performed @@ -1629,7 +1620,7 @@ static void fec_enet_tx(struct net_device *ndev, int = budget) =20 /* Make sure that AVB queues are processed first. */ for (i =3D fep->num_tx_queues - 1; i >=3D 0; i--) - fec_enet_tx_queue(ndev, i, budget); + fec_enet_tx_queue(fep, i, budget); } =20 static int fec_enet_update_cbd(struct fec_enet_priv_rx_q *rxq, --=20 2.34.1 From nobody Sat Feb 7 17:41:16 2026 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010021.outbound.protection.outlook.com [52.101.69.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 9465D389DE5; Fri, 23 Jan 2026 02:24:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.21 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769135108; cv=fail; b=mQ9cufNozBXeZMLaFui5N3Ehd4g/V6Slovqshc055V3Bi3F+YuEmeZcud9+HLmDiID36S9YWJkEqUblUCXzq6zwpCLEKt0yU95hra0pgJe1HZfdeFMWykjU11XBLVxh+fhS7LxSGLZbAbb7D0qzeyfhew7/tg+wTmZfoc1gqUSc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769135108; c=relaxed/simple; bh=Rm+hK46f2KR+G74UE3oghx9H/1kPHP0YHSjaLNMH/Bc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=pshiFq7cjjqHNjU5HUgKIh19RFfUmpHGvr6H5e1FYHF+a+sK+O9qZwaQNRjb2JS9DOAcn4ip9J9AjYHFSUZogOtgKiOto7BsuxvYiTHmU+ipBUgquAOA7kHGXb1aIjYfLFvUi1udg+GqJcZyvutY12u3Aa79lbrdGopoModWNEk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=E+AOvF4C; arc=fail smtp.client-ip=52.101.69.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="E+AOvF4C" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=esykxtBDYt8vCO7QBn3GQv9yT+xv+4wLQB7j44v1P0G8DmhQwajLnMZ0Zt5J8mSnA7jTqOzaQawXgNgDi0bFaJV0Kg5fdF0ThkbXZITAesxuVHAGpe21laBSkIw/LSjF0gAYgQwlO00cHCTCeTWr5XoH203zXHy3hP3AeuFNTHA6rgXCLq3ZYDc3x6pPsV9GLGzxv/hIFTwL2vBxcH0rYeNXORfjvr1qitJtkCC/8CBeQWsGFX8u8JlsjLA5UQULe2riABnCDJdAskIndKJQe1D/s2i+9crj3qAeNDWN/aruXx1nGNeKMJ3JcYupFIP0BCijSufc7RIsUJ6ZpJPWGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=4xjuNu3qzM5vQ0KPk+X8Z3eIkrbf+GjN843AbOal3QY=; b=oH1dW3YGl0dY9VHN4p4ST51bxdZH8MTm2OjDSYe8MRo1NIriQN40zqmKVL0kQ4FZf0nmyQo7fbHYUYNBn1CzABu892Ebo4kWbu2yNIODWpZwi+ZBa9uMhHdSu3jHiP3r6n4IBGUofSvOo4kzTdilXMX6IVGn3AiOf2O4CGzprHBzPXq8O3ta9iWyiUXKmMMcJiM0oTXT9sC98eZhkmSQUtJPdn8b2o2ctUhp32Le0XwZEfqvj/vWtk0jLN9CkZgcO/R1NcGbuB9+BlsJtOiFdov9VIdpWU8Ai5yqVZFJmwORdI+2LHUhgqRoI5eDbHHKpuLWyUr7J0Nb9vWc0OqJjA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4xjuNu3qzM5vQ0KPk+X8Z3eIkrbf+GjN843AbOal3QY=; b=E+AOvF4CVPuGUYug9fNqdpsMo73U33MP7m0D2Kytz0hjgrPGUvxjr9CLcHbsHcR944bZt7SLEwvEmCKHPC+3OorJE3DU1XPpj3T/Gr5r48cTQr6PvyUsfqiiM0qwAoO1/4ku10x1SzgGsPwXw3vr7XkLAWo7rYNp+VlZJXkrGvziKsctz8VwmUEf0PDb/C7InHccCKXi/2nYv+aoWekbgvrjFHb0FESH/z/uzokrvXBDx4zD11X5RocRP/MDg2ue9RvvpJbBN1ZhJhE9G5J6MNwshpYnIgpTfXexf3GC19oJFzB7r0/dXhVO2hg5wMw9PatBpgW3+8LnHgb+ZZYmcQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by GV4PR04MB11974.eurprd04.prod.outlook.com (2603:10a6:150:2e8::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Fri, 23 Jan 2026 02:23:13 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%4]) with mapi id 15.20.9499.001; Fri, 23 Jan 2026 02:23:13 +0000 From: Wei Fang To: shenwei.wang@nxp.com, xiaoning.wang@nxp.com, frank.li@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, sdf@fomichev.me Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, bpf@vger.kernel.org Subject: [PATCH v4 net-next 15/15] net: fec: add AF_XDP zero-copy support Date: Fri, 23 Jan 2026 10:21:43 +0800 Message-Id: <20260123022143.4121797-16-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260123022143.4121797-1-wei.fang@nxp.com> References: <20260123022143.4121797-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0074.apcprd02.prod.outlook.com (2603:1096:4:90::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|GV4PR04MB11974:EE_ X-MS-Office365-Filtering-Correlation-Id: c68fc768-a0ec-4ea8-ca9e-08de5a265bcd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|1800799024|7416014|376014|19092799006|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?/LwTRqJjzpFJZIrWTNgdVwOaEnuW4CNwKSPHql/vOgbWgyEieSizejhMAPBi?= =?us-ascii?Q?jjSm9s/V/zzn7SOwXBoPhFOMRXG4j1dS+H0w0MyAkQyRU2PeO7yOQ+SJRqV1?= =?us-ascii?Q?+4Rg8CpSA4IHOSAUNMH6exiGSM+lH+F6q45QgRIuQNdwOVhAwigVSJez8qOK?= =?us-ascii?Q?k/MUMpgqDizn3kv8Y5UrbBtQKa6CTl5Ofd3BeZlJDqlMDnHvOqhVDVDxKiqr?= =?us-ascii?Q?c63uWLeUeqe8qB6NuM2TiJr+qgOOonMOVF6gouCLLhbA6ekFDE6pgT4yJl8i?= =?us-ascii?Q?I8qdYKqZ8wy5Zzm3zZQOAgau5u30TQ0hMz7h5gV2ow9IlRdYpj3zc7MAYXn6?= =?us-ascii?Q?fgL2WVecjTlw4MFsylaJ5FCyyIzuyJ/+7pIo98oq/z+2bW9ugb1siRMGYZjD?= =?us-ascii?Q?/7o8hI7+QDrmscfyA6Fb1vC5O5IiReoCLkarbfxszgDwAkiOx5A934t0EIor?= =?us-ascii?Q?bZoZUDr8lv5A6V95UG9Oe65us19Mvb/3F4Bar3HsQjVgUmd06odtnazQXd4O?= =?us-ascii?Q?SG9WDU7lnU29U0adGXS+O3b3qmew7ADh298LpjDzaV35Eurf1a+OLw/vDAm+?= =?us-ascii?Q?ezBbHAXV5mVzBweSYIQLbdF4TfBv2ivZowu8Kjd348c2mqPguz+/PYO6VUbe?= =?us-ascii?Q?H+Ja5toybZenzzvQ3S7r+uaUmzRjOGiT/JlMBXE+/MY/EK2Bu/bgFAfi/Mgd?= =?us-ascii?Q?YoK2aLrMqemILA01ZfkT4Ml/uGKmPNKW5Q1HnSseI5JXzUr7gN1ci93PS5yL?= =?us-ascii?Q?Tw9tWQIWTR96Va0htOIa5Igmig9gpZsoh6m0+4CrVQukxL7hJ0mLyV/3h3Xy?= =?us-ascii?Q?8u5YlL7cOuLip3JCFcVRKcazmpekiABasEdn5OjlSaDrNDJz9s8pP5Vf7XUV?= =?us-ascii?Q?4J1sWkRPqdz5b5Nus9zRNttmODsSkaIV4wRDUsvn5yuJiDcPo671/5UbFEqn?= =?us-ascii?Q?192o1Hl3wTs8PyWD2jomyiMj57c/1sjRzEEBHl+m9iJenhImOtu4Naz19ydK?= =?us-ascii?Q?uEFnZOoBoEUl74hfnCtSYdAsERSKUvKY7bzGS5oUl3Q3Z28o+AputLJ5xrEe?= =?us-ascii?Q?d0/nMXSfiZSrGQOYN6HR9SbOmEGstzH3G21T1sSbcjkPyozILkySvtvacqOc?= =?us-ascii?Q?aMzD8SVOgoUEfW9EdGYJ0NvpcNWjpptSG7BCTlpKMXPw4G38Ns3Mm6T0SMaN?= =?us-ascii?Q?ijHDs/F8uUiBHD9asvWHJ7d0uVZyheo/WqiECgPEOzENR5eQslAFbNGbpG5H?= =?us-ascii?Q?48hV5jgfscyfiSCxEspl07irmORgkpWjCqiKA55xP5zCzcT8fvg1YbKINtnx?= =?us-ascii?Q?VxPjo20ch39fBWNRnPAx7RH3wOgKRpLqSujc/xxIApnldfRcWq7a4wVOE1lU?= =?us-ascii?Q?KDrM7S/Y35rLsqzmRRn+9Vqgx0yWDlLG8pJ1GVdpCXCfbRzdqxGiO95xNDVT?= =?us-ascii?Q?jnYwZ5ivI71Ltx4mEeTtGMd4XhKVex+tPTN75Cf21nprx7bAlrFEyCUOp8de?= =?us-ascii?Q?1VfZsHJCUVsaM6vIfkoKavaZy/mZ26ZvTu1VZkHXuKBv0n4m5At4+LjCLU/j?= =?us-ascii?Q?9pkP5Gt5Sy0sjN9139quv6hdM3Xj8yY+FOL4LdGluO3zBEEk5Hn2zlRZ46mc?= =?us-ascii?Q?KcoHhItjVD25JcP3yabp8UH92O/AtPRkV3ShF30WF0nL?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(1800799024)(7416014)(376014)(19092799006)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?SCmxsEBKjvL52ooMdyvLjq3J/DP2lJ2KUlpMATuw0jUDP9+mmlDSZwiLEYZI?= =?us-ascii?Q?Mrzu+uf5dSsrVHDjUsjgy8TbMJqpmd8JnwTf0QKb1CLcnsCmPM658b3D0aN8?= =?us-ascii?Q?mNnh6ZXCj2o8yRNbajXMvGHM5mc2vR4Gvak7NQZ6Y4o0gldALgQzEaw+8j0p?= =?us-ascii?Q?ArwFbBHa7Z1w1GZnkvhpoFi1RZoXsXwaFOz/rrd2ByavS9fZh8YaciKZzPEw?= =?us-ascii?Q?boBCRVG8RXcmAgEW6Tr6pNJlpk7GKF1BoZsL92tDwh0hGSqwToIUsBaR0hAi?= =?us-ascii?Q?GpqR6nb9Jnwqx9IOloBrCrik7qXqzrlSkO6D/fx/oJMtRVIMTUf/on7rexxB?= =?us-ascii?Q?wtw8/mQ8YQJ8cBuOQforJ9ECSGhy6Y8n7jchRL8AwStWCMyJZd707jJ5kZR4?= =?us-ascii?Q?Kkl5IWOLMQJoBz9qNnowxMM52kuKkxjht1Uela08CqNFLWtPx8tQfUsbdLr6?= =?us-ascii?Q?KLVc3CK90I5/XBbTELGeovm+0E81HMCU1gEikmy6vvJe6GqJF3EaxDlLt9tE?= =?us-ascii?Q?fBUaTg2IpFSS0Q+n0pQD7ZODHIlbPEq9W8QysQmntM1RseeOElSPLmxQE0si?= =?us-ascii?Q?FX0TjZ7EIpwC0WIMfQqO54vJ+2aoHYlzdNlUBK8Fm9MKBuF0q18Qv0gkHRHU?= =?us-ascii?Q?bMO3Cq6ntbv6X47QYXLPgduJJdNJ1V9Jen6In2g2lVcTjfFSclliVaOCuXso?= =?us-ascii?Q?cKiVtGypzIScubpjtcDJm9BIEUEc6U4oYy62flUrD0TbpbAElvUsEpIUS5fg?= =?us-ascii?Q?PJsfRZd7RiJuTeuRW89A6iRXG40Sv1847LJ+y3MRAQLBTf0uzsZSn9se/3K1?= =?us-ascii?Q?V54nrGDgyis0INn/CODM0M50bspZzRWbqnX+SWHhTB7fqpc35egU1ZPEoRuK?= =?us-ascii?Q?+iG6BNWNIM+MG3awil5Nu5Gpr+h1fmjzu9SoLknIkxKKwc6VRqsYh+sm8ggL?= =?us-ascii?Q?iJwlbhAf6Un2Mg5ZcHmWC+7CnV0mpCpJCDkli19Q1Z2lYNM8NLDwf7oN51I/?= =?us-ascii?Q?hJ67oHvLGscbqeNup2E4LHnvyjCW7jl+5neHdpoF9h+2Vzir+60bVZ7Pevlk?= =?us-ascii?Q?VfquNPeNh0wfh6ZqNzv7GTcZMRH58HVZA93S5bjZwcOrm5/QynFcwfVlRUHP?= =?us-ascii?Q?i5zqDR1ngdG8sPmT/pNnDtOjOcxHUpYJcYAGS3W9lEltblQ2vq8hpQHjkVIp?= =?us-ascii?Q?2567lnOMsvwMU3VtrPov0RK1m0VYxiEu+TXwZWFhOiFn62+bCNy5RtZSCzEx?= =?us-ascii?Q?oE2S9ps0dBBaQNt8m7bT3ay3//n+AUnZjE7ufbnSbemfMcnKdPDu2/CmT4I4?= =?us-ascii?Q?oqtCYYhNugDJpwwh1H5pwFhGC4TDb8qPlhx1v2lhc8FNYkuhuo/cvMheJcAu?= =?us-ascii?Q?+jgJ46DLPTDqe2sFdUosnqaM6eOvam5/8tukaiiid8SfTBBNwwV9l50QWydT?= =?us-ascii?Q?ZOUufHApLEGASD/mOtAWROGda1kb32fTB+pA+FWRR/UnY+FBJQWBEdTX1xK+?= =?us-ascii?Q?7veEoz5UO9XuChhaDxG7v+cJ719CkBZ/jI1r2kozDjV/bXs9Zp+WyHs9ncFc?= =?us-ascii?Q?NkrHQzyljMRSMINkeiH2S7kBZfPjB/33eaF0I4wd51Ve33EnuWXJQDMt6jXH?= =?us-ascii?Q?5TtRizvbbue5C6CXFFkCgm50PLPd6aq8WVie35D3HGeWzU4SOXzmgSBG/XE/?= =?us-ascii?Q?2O2tHEm4jTSlZjB3TBMMYbEpPfXO/CsZ0lpAdLB1JZPFPA333ZP3rTpPxrII?= =?us-ascii?Q?HjHoE3RNRA=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: c68fc768-a0ec-4ea8-ca9e-08de5a265bcd X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 02:23:13.1785 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XDvyAj5Dg9C7O35IYrnyIJme4gnmD0n4vurbgVTrLcuta7TxaMvfO1kPjejiYMygJm0zFr8fok108J3shq1cLw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11974 Content-Type: text/plain; charset="utf-8" Add AF_XDP zero-copy support for both TX and RX. For RX, instead of allocating buffers from the page pool, the buffers are allocated from xsk pool, so fec_alloc_rxq_buffers_zc() is added to allocate RX buffers from xsk pool. And fec_enet_rx_queue_xsk() is used to process the frames from the RX queue which is bound to the AF_XDP socket. Similar to the XDP copy mode, the zero-copy mode also supports XDP_TX, XDP_PASS, XDP_DROP and XDP_REDIRECT actions. In addition, fec_enet_xsk_tx_xmit() is similar to fec_enet_xdp_tx_xmit() and is used to handle XDP_TX action in zero-copy mode. For TX, there are two cases, one is the frames from the AF_XDP socket, so fec_enet_xsk_xmit() is added to directly transmit the frames from the socket and the buffer type is marked as FEC_TXBUF_T_XSK_XMIT. The other one is the frams from the RX queue (XDP_TX action), the buffer type is marked as FEC_TXBUF_T_XSK_TX. Therefore, fec_enet_tx_queue() could correctly clean the TX queue base on the buffer type. Also, some tests have been done on the i.MX93-EVK board with the xdpsock tool, the following are the results. Env: i.MX93 connects to a packet generator, the link speed is 1Gbps, and flow-control is off. The RX packet size is 64 bytes including FCS. Only one RX queue (CPU) is used to receive frames. 1. MAC swap L2 forwarding 1.1 Zero-copy mode root@imx93evk:~# ./xdpsock -i eth0 -l -z sock0@eth0:0 l2fwd xdp-drv pps pkts 1.00 rx 414715 415455 tx 414715 415455 1.2 Copy mode root@imx93evk:~# ./xdpsock -i eth0 -l -c sock0@eth0:0 l2fwd xdp-drv pps pkts 1.00 rx 356396 356609 tx 356396 356609 2. TX only 2.1 Zero-copy mode root@imx93evk:~# ./xdpsock -i eth0 -t -s 64 -z sock0@eth0:0 txonly xdp-drv pps pkts 1.00 rx 0 0 tx 1119573 1126720 2.2 Copy mode root@imx93evk:~# ./xdpsock -i eth0 -t -s 64 -c sock0@eth0:0 txonly xdp-drv pps pkts 1.00 rx 0 0 tx 406864 407616 Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/fec.h | 13 +- drivers/net/ethernet/freescale/fec_main.c | 612 ++++++++++++++++++++-- 2 files changed, 583 insertions(+), 42 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/fr= eescale/fec.h index ad7aba1a8536..7176803146f3 100644 --- a/drivers/net/ethernet/freescale/fec.h +++ b/drivers/net/ethernet/freescale/fec.h @@ -340,6 +340,7 @@ struct bufdesc_ex { #define FEC_ENET_TX_FRPPG (PAGE_SIZE / FEC_ENET_TX_FRSIZE) #define TX_RING_SIZE 1024 /* Must be power of two */ #define TX_RING_MOD_MASK 511 /* for this to work */ +#define FEC_XSK_TX_BUDGET_MAX 256 =20 #define BD_ENET_RX_INT 0x00800000 #define BD_ENET_RX_PTP ((ushort)0x0400) @@ -528,6 +529,8 @@ enum fec_txbuf_type { FEC_TXBUF_T_SKB, FEC_TXBUF_T_XDP_NDO, FEC_TXBUF_T_XDP_TX, + FEC_TXBUF_T_XSK_XMIT, + FEC_TXBUF_T_XSK_TX, }; =20 struct fec_tx_buffer { @@ -539,6 +542,7 @@ struct fec_enet_priv_tx_q { struct bufdesc_prop bd; unsigned char *tx_bounce[TX_RING_SIZE]; struct fec_tx_buffer tx_buf[TX_RING_SIZE]; + struct xsk_buff_pool *xsk_pool; =20 unsigned short tx_stop_threshold; unsigned short tx_wake_threshold; @@ -548,9 +552,16 @@ struct fec_enet_priv_tx_q { dma_addr_t tso_hdrs_dma; }; =20 +union fec_rx_buffer { + void *buf_p; + struct page *page; + struct xdp_buff *xdp; +}; + struct fec_enet_priv_rx_q { struct bufdesc_prop bd; - struct page *rx_buf[RX_RING_SIZE]; + union fec_rx_buffer rx_buf[RX_RING_SIZE]; + struct xsk_buff_pool *xsk_pool; =20 /* page_pool */ struct page_pool *page_pool; diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethern= et/freescale/fec_main.c index c19ae60b04d7..d3e54dcf6a4c 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -71,6 +71,7 @@ #include #include #include +#include #include =20 #include "fec.h" @@ -1034,6 +1035,9 @@ static void fec_enet_bd_init(struct net_device *dev) page_pool_put_page(pp_page_to_nmdesc(page)->pp, page, 0, false); break; + case FEC_TXBUF_T_XSK_TX: + xsk_buff_free(txq->tx_buf[i].buf_p); + break; default: break; } @@ -1467,8 +1471,91 @@ fec_enet_hwtstamp(struct fec_enet_private *fep, unsi= gned ts, hwtstamps->hwtstamp =3D ns_to_ktime(ns); } =20 -static void fec_enet_tx_queue(struct fec_enet_private *fep, - u16 queue, int budget) +static bool fec_enet_xsk_xmit(struct fec_enet_private *fep, + struct xsk_buff_pool *pool, + u32 queue) +{ + struct fec_enet_priv_tx_q *txq =3D fep->tx_queue[queue]; + struct xdp_desc *xsk_desc =3D pool->tx_descs; + int cpu =3D smp_processor_id(); + int free_bds, budget, batch; + struct netdev_queue *nq; + struct bufdesc *bdp; + dma_addr_t dma; + u32 estatus; + u16 status; + int i, j; + + nq =3D netdev_get_tx_queue(fep->netdev, queue); + __netif_tx_lock(nq, cpu); + + txq_trans_cond_update(nq); + free_bds =3D fec_enet_get_free_txdesc_num(txq); + if (!free_bds) + goto tx_unlock; + + budget =3D min(free_bds, FEC_XSK_TX_BUDGET_MAX); + batch =3D xsk_tx_peek_release_desc_batch(pool, budget); + if (!batch) + goto tx_unlock; + + bdp =3D txq->bd.cur; + for (i =3D 0; i < batch; i++) { + dma =3D xsk_buff_raw_get_dma(pool, xsk_desc[i].addr); + xsk_buff_raw_dma_sync_for_device(pool, dma, xsk_desc[i].len); + + j =3D fec_enet_get_bd_index(bdp, &txq->bd); + txq->tx_buf[j].type =3D FEC_TXBUF_T_XSK_XMIT; + txq->tx_buf[j].buf_p =3D NULL; + + status =3D fec16_to_cpu(bdp->cbd_sc); + status &=3D ~BD_ENET_TX_STATS; + status |=3D BD_ENET_TX_INTR | BD_ENET_TX_LAST; + bdp->cbd_datlen =3D cpu_to_fec16(xsk_desc[i].len); + bdp->cbd_bufaddr =3D cpu_to_fec32(dma); + + if (fep->bufdesc_ex) { + struct bufdesc_ex *ebdp =3D (struct bufdesc_ex *)bdp; + + estatus =3D BD_ENET_TX_INT; + if (fep->quirks & FEC_QUIRK_HAS_AVB) + estatus |=3D FEC_TX_BD_FTYPE(txq->bd.qid); + + ebdp->cbd_bdu =3D 0; + ebdp->cbd_esc =3D cpu_to_fec32(estatus); + } + + /* Make sure the updates to rest of the descriptor are performed + * before transferring ownership. + */ + dma_wmb(); + + /* Send it on its way. Tell FEC it's ready, interrupt when done, + * it's the last BD of the frame, and to put the CRC on the end. + */ + status |=3D BD_ENET_TX_READY | BD_ENET_TX_TC; + bdp->cbd_sc =3D cpu_to_fec16(status); + dma_wmb(); + + bdp =3D fec_enet_get_nextdesc(bdp, &txq->bd); + txq->bd.cur =3D bdp; + } + + /* Trigger transmission start */ + fec_txq_trigger_xmit(fep, txq); + + __netif_tx_unlock(nq); + + return batch < budget; + +tx_unlock: + __netif_tx_unlock(nq); + + return true; +} + +static int fec_enet_tx_queue(struct fec_enet_private *fep, + u16 queue, int budget) { struct netdev_queue *nq =3D netdev_get_tx_queue(fep->netdev, queue); struct fec_enet_priv_tx_q *txq =3D fep->tx_queue[queue]; @@ -1479,6 +1566,7 @@ static void fec_enet_tx_queue(struct fec_enet_private= *fep, unsigned short status; struct sk_buff *skb; struct page *page; + int xsk_cnt =3D 0; =20 /* get next bdp of dirty_tx */ bdp =3D fec_enet_get_nextdesc(bdp, &txq->bd); @@ -1552,6 +1640,14 @@ static void fec_enet_tx_queue(struct fec_enet_privat= e *fep, page_pool_put_page(pp_page_to_nmdesc(page)->pp, page, 0, true); break; + case FEC_TXBUF_T_XSK_XMIT: + bdp->cbd_bufaddr =3D cpu_to_fec32(0); + xsk_cnt++; + break; + case FEC_TXBUF_T_XSK_TX: + bdp->cbd_bufaddr =3D cpu_to_fec32(0); + xsk_buff_free(tx_buf->buf_p); + break; default: break; } @@ -1611,16 +1707,37 @@ static void fec_enet_tx_queue(struct fec_enet_priva= te *fep, if (bdp !=3D txq->bd.cur && readl(txq->bd.reg_desc_active) =3D=3D 0) writel(0, txq->bd.reg_desc_active); + + if (txq->xsk_pool) { + struct xsk_buff_pool *pool =3D txq->xsk_pool; + + if (xsk_cnt) + xsk_tx_completed(pool, xsk_cnt); + + if (xsk_uses_need_wakeup(pool)) + xsk_set_tx_need_wakeup(pool); + + /* If the condition is true, it indicates that there are still + * packets to be transmitted, so return "budget" to make the + * NAPI continue polling. + */ + if (!fec_enet_xsk_xmit(fep, pool, queue)) + return budget; + } + + return 0; } =20 -static void fec_enet_tx(struct net_device *ndev, int budget) +static int fec_enet_tx(struct net_device *ndev, int budget) { struct fec_enet_private *fep =3D netdev_priv(ndev); - int i; + int i, count =3D 0; =20 /* Make sure that AVB queues are processed first. */ for (i =3D fep->num_tx_queues - 1; i >=3D 0; i--) - fec_enet_tx_queue(fep, i, budget); + count +=3D fec_enet_tx_queue(fep, i, budget); + + return count; } =20 static int fec_enet_update_cbd(struct fec_enet_priv_rx_q *rxq, @@ -1633,13 +1750,30 @@ static int fec_enet_update_cbd(struct fec_enet_priv= _rx_q *rxq, if (unlikely(!new_page)) return -ENOMEM; =20 - rxq->rx_buf[index] =3D new_page; + rxq->rx_buf[index].page =3D new_page; phys_addr =3D page_pool_get_dma_addr(new_page) + FEC_ENET_XDP_HEADROOM; bdp->cbd_bufaddr =3D cpu_to_fec32(phys_addr); =20 return 0; } =20 +static int fec_enet_update_cbd_zc(struct fec_enet_priv_rx_q *rxq, + struct bufdesc *bdp, int index) +{ + struct xdp_buff *new_xdp; + dma_addr_t phys_addr; + + new_xdp =3D xsk_buff_alloc(rxq->xsk_pool); + if (unlikely(!new_xdp)) + return -ENOMEM; + + rxq->rx_buf[index].xdp =3D new_xdp; + phys_addr =3D xsk_buff_xdp_get_dma(new_xdp); + bdp->cbd_bufaddr =3D cpu_to_fec32(phys_addr); + + return 0; +} + static void fec_enet_rx_vlan(const struct net_device *ndev, struct sk_buff= *skb) { if (ndev->features & NETIF_F_HW_VLAN_CTAG_RX) { @@ -1794,7 +1928,7 @@ static int fec_enet_rx_queue(struct fec_enet_private = *fep, ndev->stats.rx_bytes +=3D pkt_len - fep->rx_shift; =20 index =3D fec_enet_get_bd_index(bdp, &rxq->bd); - page =3D rxq->rx_buf[index]; + page =3D rxq->rx_buf[index].page; dma =3D fec32_to_cpu(bdp->cbd_bufaddr); if (fec_enet_update_cbd(rxq, bdp, index)) { ndev->stats.rx_dropped++; @@ -1924,7 +2058,7 @@ static int fec_enet_rx_queue_xdp(struct fec_enet_priv= ate *fep, int queue, ndev->stats.rx_bytes +=3D pkt_len - fep->rx_shift; =20 index =3D fec_enet_get_bd_index(bdp, &rxq->bd); - page =3D rxq->rx_buf[index]; + page =3D rxq->rx_buf[index].page; dma =3D fec32_to_cpu(bdp->cbd_bufaddr); =20 if (fec_enet_update_cbd(rxq, bdp, index)) { @@ -2039,6 +2173,250 @@ static int fec_enet_rx_queue_xdp(struct fec_enet_pr= ivate *fep, int queue, return pkt_received; } =20 +static struct sk_buff *fec_build_skb_zc(struct xdp_buff *xsk, + struct napi_struct *napi) +{ + size_t len =3D xdp_get_buff_len(xsk); + struct sk_buff *skb; + + skb =3D napi_alloc_skb(napi, len); + if (unlikely(!skb)) { + xsk_buff_free(xsk); + return NULL; + } + + skb_put_data(skb, xsk->data, len); + xsk_buff_free(xsk); + + return skb; +} + +static int fec_enet_xsk_tx_xmit(struct fec_enet_private *fep, + struct xdp_buff *xsk, int cpu, + int queue) +{ + struct netdev_queue *nq =3D netdev_get_tx_queue(fep->netdev, queue); + struct fec_enet_priv_tx_q *txq =3D fep->tx_queue[queue]; + u32 offset =3D xsk->data - xsk->data_hard_start; + u32 headroom =3D txq->xsk_pool->headroom; + u32 len =3D xsk->data_end - xsk->data; + u32 index, status, estatus; + struct bufdesc *bdp; + dma_addr_t dma; + + __netif_tx_lock(nq, cpu); + + /* Avoid tx timeout as XDP shares the queue with kernel stack */ + txq_trans_cond_update(nq); + + if (!fec_enet_get_free_txdesc_num(txq)) { + __netif_tx_unlock(nq); + + return -EBUSY; + } + + /* Fill in a Tx ring entry */ + bdp =3D txq->bd.cur; + status =3D fec16_to_cpu(bdp->cbd_sc); + status &=3D ~BD_ENET_TX_STATS; + + index =3D fec_enet_get_bd_index(bdp, &txq->bd); + dma =3D xsk_buff_xdp_get_frame_dma(xsk) + headroom + offset; + + xsk_buff_raw_dma_sync_for_device(txq->xsk_pool, dma, len); + + txq->tx_buf[index].buf_p =3D xsk; + txq->tx_buf[index].type =3D FEC_TXBUF_T_XSK_TX; + + status |=3D (BD_ENET_TX_INTR | BD_ENET_TX_LAST); + if (fep->bufdesc_ex) + estatus =3D BD_ENET_TX_INT; + + bdp->cbd_bufaddr =3D cpu_to_fec32(dma); + bdp->cbd_datlen =3D cpu_to_fec16(len); + + if (fep->bufdesc_ex) { + struct bufdesc_ex *ebdp =3D (struct bufdesc_ex *)bdp; + + if (fep->quirks & FEC_QUIRK_HAS_AVB) + estatus |=3D FEC_TX_BD_FTYPE(txq->bd.qid); + + ebdp->cbd_bdu =3D 0; + ebdp->cbd_esc =3D cpu_to_fec32(estatus); + } + + status |=3D (BD_ENET_TX_READY | BD_ENET_TX_TC); + bdp->cbd_sc =3D cpu_to_fec16(status); + dma_wmb(); + + bdp =3D fec_enet_get_nextdesc(bdp, &txq->bd); + txq->bd.cur =3D bdp; + + __netif_tx_unlock(nq); + + return 0; +} + +static int fec_enet_rx_queue_xsk(struct fec_enet_private *fep, int queue, + int budget, struct bpf_prog *prog) +{ + u32 data_start =3D FEC_ENET_XDP_HEADROOM + fep->rx_shift; + struct fec_enet_priv_rx_q *rxq =3D fep->rx_queue[queue]; + struct net_device *ndev =3D fep->netdev; + struct bufdesc *bdp =3D rxq->bd.cur; + u32 sub_len =3D 4 + fep->rx_shift; + int cpu =3D smp_processor_id(); + bool wakeup_xsk =3D false; + struct xdp_buff *xsk; + int pkt_received =3D 0; + struct sk_buff *skb; + u16 status, pkt_len; + u32 xdp_res =3D 0; + int index, err; + u32 act; + +#if defined(CONFIG_COLDFIRE) && !defined(CONFIG_COLDFIRE_COHERENT_DMA) + /* + * Hacky flush of all caches instead of using the DMA API for the TSO + * headers. + */ + flush_cache_all(); +#endif + + while (!((status =3D fec16_to_cpu(bdp->cbd_sc)) & BD_ENET_RX_EMPTY)) { + if (pkt_received >=3D budget) + break; + pkt_received++; + + writel(FEC_ENET_RXF_GET(queue), fep->hwp + FEC_IEVENT); + + /* Check for errors. */ + status ^=3D BD_ENET_RX_LAST; + if (unlikely(fec_rx_error_check(ndev, status))) + goto rx_processing_done; + + /* Process the incoming frame. */ + ndev->stats.rx_packets++; + pkt_len =3D fec16_to_cpu(bdp->cbd_datlen); + ndev->stats.rx_bytes +=3D pkt_len - fep->rx_shift; + + index =3D fec_enet_get_bd_index(bdp, &rxq->bd); + xsk =3D rxq->rx_buf[index].xdp; + + if (fec_enet_update_cbd_zc(rxq, bdp, index)) { + ndev->stats.rx_dropped++; + goto rx_processing_done; + } + + pkt_len -=3D sub_len; + xsk->data =3D xsk->data_hard_start + data_start; + /* Subtract FCS and 16bit shift */ + xsk->data_end =3D xsk->data + pkt_len; + xsk->data_meta =3D xsk->data; + xsk_buff_dma_sync_for_cpu(xsk); + + /* If the XSK pool is enabled before the bpf program is + * installed, or the bpf program is uninstalled before + * the XSK pool is disabled. prog will be NULL and we + * need to set a default XDP_PASS action. + */ + if (unlikely(!prog)) + act =3D XDP_PASS; + else + act =3D bpf_prog_run_xdp(prog, xsk); + + switch (act) { + case XDP_PASS: + rxq->stats[RX_XDP_PASS]++; + skb =3D fec_build_skb_zc(xsk, &fep->napi); + if (unlikely(!skb)) + ndev->stats.rx_dropped++; + else + napi_gro_receive(&fep->napi, skb); + break; + case XDP_TX: + rxq->stats[RX_XDP_TX]++; + err =3D fec_enet_xsk_tx_xmit(fep, xsk, cpu, queue); + if (unlikely(err)) { + rxq->stats[RX_XDP_TX_ERRORS]++; + xsk_buff_free(xsk); + } else { + xdp_res |=3D FEC_ENET_XDP_TX; + } + break; + case XDP_REDIRECT: + rxq->stats[RX_XDP_REDIRECT]++; + err =3D xdp_do_redirect(ndev, xsk, prog); + if (unlikely(err)) { + if (err =3D=3D -ENOBUFS) + wakeup_xsk =3D true; + + rxq->stats[RX_XDP_DROP]++; + xsk_buff_free(xsk); + } else { + xdp_res |=3D FEC_ENET_XDP_REDIR; + } + break; + default: + bpf_warn_invalid_xdp_action(ndev, prog, act); + fallthrough; + case XDP_ABORTED: + trace_xdp_exception(ndev, prog, act); + fallthrough; + case XDP_DROP: + rxq->stats[RX_XDP_DROP]++; + xsk_buff_free(xsk); + break; + } + +rx_processing_done: + /* Clear the status flags for this buffer */ + status &=3D ~BD_ENET_RX_STATS; + /* Mark the buffer empty */ + status |=3D BD_ENET_RX_EMPTY; + + if (fep->bufdesc_ex) { + struct bufdesc_ex *ebdp =3D (struct bufdesc_ex *)bdp; + + ebdp->cbd_esc =3D cpu_to_fec32(BD_ENET_RX_INT); + ebdp->cbd_prot =3D 0; + ebdp->cbd_bdu =3D 0; + } + + /* Make sure the updates to rest of the descriptor are + * performed before transferring ownership. + */ + dma_wmb(); + bdp->cbd_sc =3D cpu_to_fec16(status); + + /* Update BD pointer to next entry */ + bdp =3D fec_enet_get_nextdesc(bdp, &rxq->bd); + + /* Doing this here will keep the FEC running while we process + * incoming frames. On a heavily loaded network, we should be + * able to keep up at the expense of system resources. + */ + writel(0, rxq->bd.reg_desc_active); + } + + rxq->bd.cur =3D bdp; + + if (xdp_res & FEC_ENET_XDP_REDIR) + xdp_do_flush(); + + if (xdp_res & FEC_ENET_XDP_TX) + fec_txq_trigger_xmit(fep, fep->tx_queue[queue]); + + if (rxq->xsk_pool && xsk_uses_need_wakeup(rxq->xsk_pool)) { + if (wakeup_xsk) + xsk_set_rx_need_wakeup(rxq->xsk_pool); + else + xsk_clear_rx_need_wakeup(rxq->xsk_pool); + } + + return pkt_received; +} + static int fec_enet_rx(struct net_device *ndev, int budget) { struct fec_enet_private *fep =3D netdev_priv(ndev); @@ -2047,11 +2425,15 @@ static int fec_enet_rx(struct net_device *ndev, int= budget) =20 /* Make sure that AVB queues are processed first. */ for (i =3D fep->num_rx_queues - 1; i >=3D 0; i--) { - if (prog) - done +=3D fec_enet_rx_queue_xdp(fep, i, budget - done, - prog); + struct fec_enet_priv_rx_q *rxq =3D fep->rx_queue[i]; + int batch =3D budget - done; + + if (rxq->xsk_pool) + done +=3D fec_enet_rx_queue_xsk(fep, i, batch, prog); + else if (prog) + done +=3D fec_enet_rx_queue_xdp(fep, i, batch, prog); else - done +=3D fec_enet_rx_queue(fep, i, budget - done); + done +=3D fec_enet_rx_queue(fep, i, batch); } =20 return done; @@ -2095,19 +2477,22 @@ static int fec_enet_rx_napi(struct napi_struct *nap= i, int budget) { struct net_device *ndev =3D napi->dev; struct fec_enet_private *fep =3D netdev_priv(ndev); - int done =3D 0; + int rx_done =3D 0, tx_done =3D 0; + int max_done; =20 do { - done +=3D fec_enet_rx(ndev, budget - done); - fec_enet_tx(ndev, budget); - } while ((done < budget) && fec_enet_collect_events(fep)); + rx_done +=3D fec_enet_rx(ndev, budget - rx_done); + tx_done +=3D fec_enet_tx(ndev, budget); + max_done =3D max(rx_done, tx_done); + } while ((max_done < budget) && fec_enet_collect_events(fep)); =20 - if (done < budget) { - napi_complete_done(napi, done); + if (max_done < budget) { + napi_complete_done(napi, max_done); writel(FEC_DEFAULT_IMASK, fep->hwp + FEC_IMASK); + return max_done; } =20 - return done; + return budget; } =20 /* -----------------------------------------------------------------------= -- */ @@ -3398,7 +3783,8 @@ static int fec_xdp_rxq_info_reg(struct fec_enet_priva= te *fep, struct fec_enet_priv_rx_q *rxq) { struct net_device *ndev =3D fep->netdev; - int err; + void *allocator; + int type, err; =20 err =3D xdp_rxq_info_reg(&rxq->xdp_rxq, ndev, rxq->id, 0); if (err) { @@ -3406,8 +3792,9 @@ static int fec_xdp_rxq_info_reg(struct fec_enet_priva= te *fep, return err; } =20 - err =3D xdp_rxq_info_reg_mem_model(&rxq->xdp_rxq, MEM_TYPE_PAGE_POOL, - rxq->page_pool); + allocator =3D rxq->xsk_pool ? NULL : rxq->page_pool; + type =3D rxq->xsk_pool ? MEM_TYPE_XSK_BUFF_POOL : MEM_TYPE_PAGE_POOL; + err =3D xdp_rxq_info_reg_mem_model(&rxq->xdp_rxq, type, allocator); if (err) { netdev_err(ndev, "Failed to register XDP mem model\n"); xdp_rxq_info_unreg(&rxq->xdp_rxq); @@ -3415,6 +3802,9 @@ static int fec_xdp_rxq_info_reg(struct fec_enet_priva= te *fep, return err; } =20 + if (rxq->xsk_pool) + xsk_pool_set_rxq_info(rxq->xsk_pool, &rxq->xdp_rxq); + return 0; } =20 @@ -3428,20 +3818,28 @@ static void fec_xdp_rxq_info_unreg(struct fec_enet_= priv_rx_q *rxq) =20 static void fec_free_rxq_buffers(struct fec_enet_priv_rx_q *rxq) { + bool xsk =3D !!rxq->xsk_pool; int i; =20 for (i =3D 0; i < rxq->bd.ring_size; i++) { - struct page *page =3D rxq->rx_buf[i]; + union fec_rx_buffer *buf =3D &rxq->rx_buf[i]; =20 - if (!page) + if (!buf->buf_p) continue; =20 - page_pool_put_full_page(rxq->page_pool, page, false); - rxq->rx_buf[i] =3D NULL; + if (xsk) + xsk_buff_free(buf->xdp); + else + page_pool_put_full_page(rxq->page_pool, + buf->page, false); + + rxq->rx_buf[i].buf_p =3D NULL; } =20 - page_pool_destroy(rxq->page_pool); - rxq->page_pool =3D NULL; + if (!xsk) { + page_pool_destroy(rxq->page_pool); + rxq->page_pool =3D NULL; + } } =20 static void fec_enet_free_buffers(struct net_device *ndev) @@ -3481,6 +3879,9 @@ static void fec_enet_free_buffers(struct net_device *= ndev) page_pool_put_page(pp_page_to_nmdesc(page)->pp, page, 0, false); break; + case FEC_TXBUF_T_XSK_TX: + xsk_buff_free(txq->tx_buf[i].buf_p); + break; default: break; } @@ -3597,7 +3998,7 @@ static int fec_alloc_rxq_buffers_pp(struct fec_enet_p= rivate *fep, phys_addr =3D page_pool_get_dma_addr(page) + FEC_ENET_XDP_HEADROOM; bdp->cbd_bufaddr =3D cpu_to_fec32(phys_addr); =20 - rxq->rx_buf[i] =3D page; + rxq->rx_buf[i].page =3D page; bdp->cbd_sc =3D cpu_to_fec16(BD_ENET_RX_EMPTY); =20 if (fep->bufdesc_ex) { @@ -3621,6 +4022,40 @@ static int fec_alloc_rxq_buffers_pp(struct fec_enet_= private *fep, return err; } =20 +static int fec_alloc_rxq_buffers_zc(struct fec_enet_private *fep, + struct fec_enet_priv_rx_q *rxq) +{ + struct bufdesc *bdp =3D rxq->bd.base; + union fec_rx_buffer *buf; + dma_addr_t phys_addr; + int i; + + for (i =3D 0; i < rxq->bd.ring_size; i++) { + buf =3D &rxq->rx_buf[i]; + buf->xdp =3D xsk_buff_alloc(rxq->xsk_pool); + if (!buf->xdp) + return -ENOMEM; + + phys_addr =3D xsk_buff_xdp_get_dma(buf->xdp); + bdp->cbd_bufaddr =3D cpu_to_fec32(phys_addr); + bdp->cbd_sc =3D cpu_to_fec16(BD_ENET_RX_EMPTY); + + if (fep->bufdesc_ex) { + struct bufdesc_ex *ebdp =3D (struct bufdesc_ex *)bdp; + + ebdp->cbd_esc =3D cpu_to_fec32(BD_ENET_RX_INT); + } + + bdp =3D fec_enet_get_nextdesc(bdp, &rxq->bd); + } + + /* Set the last buffer to wrap. */ + bdp =3D fec_enet_get_prevdesc(bdp, &rxq->bd); + bdp->cbd_sc |=3D cpu_to_fec16(BD_ENET_RX_WRAP); + + return 0; +} + static int fec_enet_alloc_rxq_buffers(struct net_device *ndev, unsigned int queue) { @@ -3629,9 +4064,16 @@ fec_enet_alloc_rxq_buffers(struct net_device *ndev, = unsigned int queue) int err; =20 rxq =3D fep->rx_queue[queue]; - err =3D fec_alloc_rxq_buffers_pp(fep, rxq); - if (err) - return err; + if (rxq->xsk_pool) { + /* RX XDP ZC buffer pool may not be populated, e.g. + * xdpsock TX-only. + */ + fec_alloc_rxq_buffers_zc(fep, rxq); + } else { + err =3D fec_alloc_rxq_buffers_pp(fep, rxq); + if (err) + return err; + } =20 err =3D fec_xdp_rxq_info_reg(fep, rxq); if (err) { @@ -3954,21 +4396,83 @@ static u16 fec_enet_select_queue(struct net_device = *ndev, struct sk_buff *skb, return fec_enet_vlan_pri_to_queue[vlan_tag >> 13]; } =20 +static int fec_setup_xsk_pool(struct net_device *ndev, + struct xsk_buff_pool *pool, + u16 queue) +{ + struct fec_enet_private *fep =3D netdev_priv(ndev); + bool is_run =3D netif_running(ndev); + struct fec_enet_priv_rx_q *rxq; + struct fec_enet_priv_tx_q *txq; + bool enable =3D !!pool; + int err; + + if (queue >=3D fep->num_rx_queues || queue >=3D fep->num_tx_queues) + return -ERANGE; + + if (is_run) { + napi_disable(&fep->napi); + netif_tx_disable(ndev); + synchronize_rcu(); + fec_enet_free_buffers(ndev); + } + + rxq =3D fep->rx_queue[queue]; + txq =3D fep->tx_queue[queue]; + + if (enable) { + err =3D xsk_pool_dma_map(pool, &fep->pdev->dev, 0); + if (err) { + netdev_err(ndev, "Failed to map xsk pool\n"); + return err; + } + + rxq->xsk_pool =3D pool; + txq->xsk_pool =3D pool; + } else { + xsk_pool_dma_unmap(rxq->xsk_pool, 0); + rxq->xsk_pool =3D NULL; + txq->xsk_pool =3D NULL; + } + + if (is_run) { + err =3D fec_enet_alloc_buffers(ndev); + if (err) { + netdev_err(ndev, "Failed to alloc buffers\n"); + goto err_alloc_buffers; + } + + fec_restart(ndev); + napi_enable(&fep->napi); + netif_tx_start_all_queues(ndev); + } + + return 0; + +err_alloc_buffers: + if (enable) { + xsk_pool_dma_unmap(pool, 0); + rxq->xsk_pool =3D NULL; + txq->xsk_pool =3D NULL; + } + + return err; +} + static int fec_enet_bpf(struct net_device *dev, struct netdev_bpf *bpf) { struct fec_enet_private *fep =3D netdev_priv(dev); bool is_run =3D netif_running(dev); struct bpf_prog *old_prog; =20 + /* No need to support the SoCs that require to do the frame swap + * because the performance wouldn't be better than the skb mode. + */ + if (fep->quirks & FEC_QUIRK_SWAP_FRAME) + return -EOPNOTSUPP; + switch (bpf->command) { case XDP_SETUP_PROG: - /* No need to support the SoCs that require to - * do the frame swap because the performance wouldn't be - * better than the skb mode. - */ - if (fep->quirks & FEC_QUIRK_SWAP_FRAME) - return -EOPNOTSUPP; - if (!bpf->prog) xdp_features_clear_redirect_target(dev); =20 @@ -3994,7 +4498,8 @@ static int fec_enet_bpf(struct net_device *dev, struc= t netdev_bpf *bpf) return 0; =20 case XDP_SETUP_XSK_POOL: - return -EOPNOTSUPP; + return fec_setup_xsk_pool(dev, bpf->xsk.pool, + bpf->xsk.queue_id); =20 default: return -EOPNOTSUPP; @@ -4143,6 +4648,29 @@ static int fec_enet_xdp_xmit(struct net_device *dev, return sent_frames; } =20 +static int fec_enet_xsk_wakeup(struct net_device *ndev, u32 queue, u32 fla= gs) +{ + struct fec_enet_private *fep =3D netdev_priv(ndev); + struct fec_enet_priv_rx_q *rxq; + + if (!netif_running(ndev) || !netif_carrier_ok(ndev)) + return -ENETDOWN; + + if (queue >=3D fep->num_rx_queues || queue >=3D fep->num_tx_queues) + return -ERANGE; + + rxq =3D fep->rx_queue[queue]; + if (!rxq->xsk_pool) + return -EINVAL; + + if (!napi_if_scheduled_mark_missed(&fep->napi)) { + if (likely(napi_schedule_prep(&fep->napi))) + __napi_schedule(&fep->napi); + } + + return 0; +} + static int fec_hwtstamp_get(struct net_device *ndev, struct kernel_hwtstamp_config *config) { @@ -4205,6 +4733,7 @@ static const struct net_device_ops fec_netdev_ops =3D= { .ndo_set_features =3D fec_set_features, .ndo_bpf =3D fec_enet_bpf, .ndo_xdp_xmit =3D fec_enet_xdp_xmit, + .ndo_xsk_wakeup =3D fec_enet_xsk_wakeup, .ndo_hwtstamp_get =3D fec_hwtstamp_get, .ndo_hwtstamp_set =3D fec_hwtstamp_set, }; @@ -4332,7 +4861,8 @@ static int fec_enet_init(struct net_device *ndev) =20 if (!(fep->quirks & FEC_QUIRK_SWAP_FRAME)) ndev->xdp_features =3D NETDEV_XDP_ACT_BASIC | - NETDEV_XDP_ACT_REDIRECT; + NETDEV_XDP_ACT_REDIRECT | + NETDEV_XDP_ACT_XSK_ZEROCOPY; =20 fec_restart(ndev); =20 --=20 2.34.1