From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A6FB6C433F5 for ; Fri, 10 Dec 2021 16:32:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:From:References:Cc:To: Subject:Date:Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=GyPxbinjQlCvP7TlWcWxBSbVDmPFjgGHvabGaRcEzII=; b=xc8jG1WA6QpbYXhnGBlM6Bx9UI ivLxKdaRaPJxgB7Yon8ZaGMKq5+eZ899Zp9y1SEiiQBvSPr6Y/YkKqXfEa/lw57NykD3GsasogUpz Fb4OR/9pJwI1GmeVoL4zX49dqgSuQo3yw5bDb/HCvgD+K1F76n8sBmvG6CPq8N3g+cBQFhsOGIbHf 1774oDYybIT0TVYLjUsiAFLkXCndVOVEk4IrG9AOVzxfNNL1OBXrkyVMDC7c0hLmfstBgjKR8kTSd HAEnD+SRe0vFGVaa8wOq9X7X+r/r40r8eusr2FLz5+1aIdOWRAgnKa3aJp/O9HFxYVim5pDw1wYEW Dl5NvXeQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mvimm-002bMe-ES; Fri, 10 Dec 2021 16:30:16 +0000 Received: from mail-eopbgr70087.outbound.protection.outlook.com ([40.107.7.87] helo=EUR04-HE1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mvimh-002bJr-T5 for linux-arm-kernel@lists.infradead.org; Fri, 10 Dec 2021 16:30:14 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lAxrCvFp0Y7NEHNrNqCHbV49NTNhHdZnIfNYoEzdnyV8XGfaqFpjYh5V4imS9FRfqHeOCi6woLK22zDuCQFdWw5iob7wRRmMcd1O5r+6XawjP9JWyTXUaTGshbbTrvLtS1HWWYlc262pL3FnbXgeOAmuevgM3I67dVxP9iLHcUJdUIAemN+rI7g2nnFGmqq+kZU6XMMTOUAEGN2ki1u278DbP0I4mGdNu62SNs+QPbP1vzXXsMYjOEuhMZ+2yXb/fXs4PTyNsdt0geAgSRrffMrCiFgcc44NlGci7jp+n+9bpBGxrs274EeCnFjOO7G4QmQV76VXufUCjcW6fCBXsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=OAY0EsyUa90Ie5o3DYtOjr7KNYOoyK2dRYtoEjx6NDQ=; b=VoHFIjO3QiWEkTQaYMoUcLpm1hrO+VR+23tFopRWSOwqm0Im21Mg13jH4GyXHjhd8hLLyaNbW8Wz4BmHZFHUT/+ozMpxcXb2DtmuyXctq5Hn9T0NgN43GWCHRxPqUzbbxueodxqxL/Uc/ygT7rShVXEiGs5KvzvXk4HDNn+hmVJP6Y23w+Mu3A+vHyIzhQHU4gYxYxhqwGpNVK/SpujxsK8geGU69LeerlYPYmGM4dd2G1O/rhg4s/wbg7kHX/621A250vIBU+kCEcYcq0W4oaB6wzM06vtwwukr62kqPkEuSVGBG+I9dtr2C2cL63WF3FxOVNOnGjaomywE7+Laog== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OAY0EsyUa90Ie5o3DYtOjr7KNYOoyK2dRYtoEjx6NDQ=; b=HYw5EJk+Nc2wE/vQVMvhuE1TB3NLF/W3wDOOJ/oCka750anT0f1kfFTprG4Gch/GQjcMQ8lIlXxlvXIzurTRvS6mdh8aX5+KCRBbAVe57Bqs+re9kJ9g/3i2ZtToRziIaUzBhPLk5sHxRjrt0DLKG+xoj9cw1Gm+tLtavCUWC1Y= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from DU2PR04MB8807.eurprd04.prod.outlook.com (2603:10a6:10:2e2::23) by DU2PR04MB8933.eurprd04.prod.outlook.com (2603:10a6:10:2e0::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4778.14; Fri, 10 Dec 2021 16:30:06 +0000 Received: from DU2PR04MB8807.eurprd04.prod.outlook.com ([fe80::59d5:83c8:cb6a:a115]) by DU2PR04MB8807.eurprd04.prod.outlook.com ([fe80::59d5:83c8:cb6a:a115%6]) with mapi id 15.20.4755.022; Fri, 10 Dec 2021 16:30:06 +0000 Message-ID: Date: Fri, 10 Dec 2021 17:30:02 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.3.2 Subject: Re: [PATCH net-next 1/2] net: stmmac: fix tc flower deletion for VLAN priority Rx steering Content-Language: en-GB To: Ong Boon Leong , Giuseppe Cavallaro , Alexandre Torgue , Jose Abreu , "David S . Miller" , Jakub Kicinski , Maxime Coquelin , alexandre.torgue@foss.st.com, Kurt Kanzenbach Cc: netdev@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org References: <20211209151631.138326-1-boon.leong.ong@intel.com> <20211209151631.138326-2-boon.leong.ong@intel.com> From: Yannick Vignon In-Reply-To: <20211209151631.138326-2-boon.leong.ong@intel.com> X-ClientProxiedBy: ZR0P278CA0100.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:23::15) To DU2PR04MB8807.eurprd04.prod.outlook.com (2603:10a6:10:2e2::23) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [172.16.18.246] (80.215.138.131) by ZR0P278CA0100.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:23::15) with Microsoft SMTP Server (version=TLS1_2, cipher=) via Frontend Transport; Fri, 10 Dec 2021 16:30:04 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b28eef4d-00bb-4fd0-d4a2-08d9bbfa52f3 X-MS-TrafficTypeDiagnostic: DU2PR04MB8933:EE_ X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-LD-Processed: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635,ExtAddr X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5797; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PR9HCRwTa/6sW5YmiYPw/ezC5S3wYbwLr0R0WD4KU0i7pWdlyVQYRNndZwIYP/557GDFSlNgHCSQ6FTcc+sGZM18xFjSb2PRTsI52F7vcExSCqfGZMMbaMXv1C6nMF3jm6VWFHYaVpDz9I98xFlHexqtcZS01aTbe6Qk2+VztyTCvFFDpwZ7+S6M4jW+3SpnGOcneJy7snMtfA56BBGGr+DivyAVyhzK3VLm3MVjj6w0NDG10saPZJ27IFyhb+iSXEAYyB4EHSLhldZA5q+Mt2CRu3wgBr400aY9p89DXnCi3xixHNMNi2IfuRTMhGhQtFJs7h+bTBQqRv4jIVYnFjBSRxkA3hzXEaVMUXICiLwjQQU4Y5472+iJJ0+OVKB/KNqNuoeN8ikUpmANi/LKE8zGFB1xdaezxQ12qWROxpK2gFO2oXfupi0VTC4234/pqM/C4n8hxamyyNTLClqAtsZavoIbKmVUKCW7vRMjwG/mOYdvtPq7gTkT/EF9BstbSmGbUj9G22JmjeUqBa3wHD1Z9HS9pXtkRZxq2y2im4jFmf+psl/VoXAZre2V3V1gAPntVmbUtdd2H4efHRhUt1eCCiOnrOQ3dJilNM+5gXPZ96mPAaELnJYAZW+/j3B/d0wrIJ27L4Op+Jrt3qX99tw2QI7jVr2koyj0Uh7KixJnXHTI1K8SXi7mV0Cjl3xjp+VgH0aZZAREwxq4m1+LMzUJ2TeRmOSR7QaoPdr1I6tvLjRTX2RrKKN+kplEanxp5j+rc9QLYVx/s4snqPdoxQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU2PR04MB8807.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(16576012)(26005)(4326008)(8936002)(66946007)(186003)(38100700002)(52116002)(31686004)(38350700002)(66476007)(8676002)(66556008)(44832011)(956004)(2906002)(5660300002)(30864003)(6486002)(86362001)(31696002)(53546011)(7416002)(110136005)(45080400002)(83380400001)(2616005)(508600001)(316002)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YUNwMjgrcGpveGR0WUdwU09zWmhaZFcwU09Qa0pnUTVoTFJ5UGZIYnBvUmVW?= =?utf-8?B?UDh5L2hqZU9uRjhuOWR5eS9yVWozMjRhSXNiNjh5QW1WeVgyUTlHZ3lMekY0?= =?utf-8?B?K1Y0UU9BRHZjUnd2eUlRbzBQWHhSQU9xNGw2cW1Hb1FBV0FHSVdzc0hkK0Rs?= =?utf-8?B?QThZaGRHOVZaOTBid1BWRDNOcDR5OHQ0UkUvRFpRd0JmRXpPcTFCSlhMNE9E?= =?utf-8?B?b2ZkalZqQ2djK1VSTXRoU1padzlNMlZsVi9CMUx5QXByTmJPY0tKM3c3L2lt?= =?utf-8?B?eG9HZWRqVUpBbWV0cUFtYVg2RkpqcE10QUMydFFkeXVqYzJMRTQxUTI4eHZV?= =?utf-8?B?blp0aXhRbHJJUVlScEFRak0rcTVtZXdMS21XU3NBbm0yYjJkKytPZXhtYW8v?= =?utf-8?B?YmQ1dTlHNG9uM0o0emppK3VZTG9Cdk1GSVJmUE4wbTVBYWQvNCtjdHg4Z0ts?= =?utf-8?B?NHdJanhIaURtaXZkdUJoRTJQditHL2tlbjhYVjB4YXZ3TTZkSnRJSnliYzJt?= =?utf-8?B?SUl3YUgzcTdQK3BGYlBvdFBlMzRDbWNibDBUaXRmMjk1UTYrWjJzZ21jUXJX?= =?utf-8?B?SjI0M1ExK2hUcVYvamlTMzdFVWxNMHB5S1hNOXh2SVlSTllqUGQ2RHZ4RC9R?= =?utf-8?B?TCtSWkl3S2tISk5jQm41WXNIQWFIYVNaZnZNaXp6aVV2aGU0S2J2eS9jU3N5?= =?utf-8?B?OHprYVBvbkZKL1ZKR2p5Z2t0WVdRR3hqNHJOME1Ka3luOGJ2UzhaVTFXWUdo?= =?utf-8?B?UWd1NFo4N3VLditEeUJKY2hJYkZDekExMGNLSEdRYTYybkMyOFpQOUJVTFJO?= =?utf-8?B?MktSNkIxOFdac3o2RUFvcDJnSzJkbjdUczF4MGsyNUMxaFZaVjVIOUEzdkd3?= =?utf-8?B?REIrdTU4dEEzbzFVaHBpb2Rja1ZRZ2NBL3laOHR2b09NWldnMmp2Y3F0am9n?= =?utf-8?B?bnBnb1pxNHlQMjFFYzBiZjg5SDJOb0J6cTJkQ3JpdVY0TVpFV1p6aEtJVFVZ?= =?utf-8?B?QWhLRExueERJdEhKVWNBZy9yMXFQUk4zVWp4NnVoRkI2Qm14K3F4ZVp5dmx6?= =?utf-8?B?M0xrY1ZkcVh4aUxic3ZHQWgzMmRnU2s1KzBIUzVjRWtWOTF6QkpqdnNoclFG?= =?utf-8?B?eklxblNLUkFmSVBkdjdhUVZEZGo3a3F1MXFNNkZLblNVMDY0MGEwOWRzbEhT?= =?utf-8?B?Q0FzbHZUdVpNSXVQUUNtWFlpdnJDS2IvSUhKcmQ4d1dTRGZORmtjYTNsUVcv?= =?utf-8?B?ZVRza204MGdCZmNkS2ZXVERUaWFHTEdSQ1lPdFVzcWg5U2ZUMllXMDUwN1Bo?= =?utf-8?B?b2JPMVBZd2E1dzloVXl5QVB3MkJPNFBDUkpwRStId2EvWkY5d3VSWVgycHhL?= =?utf-8?B?TkloaHh2M1V6Z3BVTTRZTDcxMTZKQmQxc3ZCVk83N2dSaHZ3ZlRSTFlxQUVE?= =?utf-8?B?TDNobUREQStiYi9DUE42VDJMSHFWVzB1UUFreEpCZ1F3dG0yczJBeElsaVAw?= =?utf-8?B?ZzhkZHAxd2Q0M0YydWRzditMYjRGd1loakRiNUR6MTE1K2swUUx2OERLekpR?= =?utf-8?B?VHdqajFoNllKRDdDZFVLbmltQzVxV0p2NUJVVHBFL2JpRUs5UDFUa1ZMYkRY?= =?utf-8?B?UmdKdGkyZGJ2VHpsMkVPaWtRNFRaVTB5SE9kRFozVCtGSklad3hzdkMveTZQ?= =?utf-8?B?UUxqcFJEUHoxRlZEYitJMk1scWJsTzVJam5jdW5jbi8zVEJJcVpDZmtEUmE4?= =?utf-8?B?OUx2YVhNN2tSN1RYNTRCVHhjTVg1dERJNlVQbWhIUGY5ckRCcDRGa1hiOTI4?= =?utf-8?B?Z2dXdmp0MG1BYVpMdnA0blVpMm5PTk5IMW93RDRuTnNybVZHeHExQ0s4QnVP?= =?utf-8?B?bVlaZ1pZUlFiWmJBRlNha1N2SlkrdUxwV1RvTVFnUHgrckFFZnlsOCtEa1RT?= =?utf-8?B?aG5FM3BQTEU4dUVCZWNnS1ZOS2sxdlFGNFBBeW5NWUhFck96Y0F5TzBLcDM2?= =?utf-8?B?QmF1WFhPTTBOWkdoLzJjVHhXTWk1bnpyVTdWTEdtNi82MlhsRzZLT3pNYmll?= =?utf-8?B?cDh3MnFtUm4zWjBZYjV5cHRTWUtOaGhFNjdGVnVPajd0M2hXOURRTkhDdCtq?= =?utf-8?B?V0hhNHAxL3lnQmFmT2hhWCtLM1ovMUVhK0VablV4YjArUWtzamhNVUw0d3pL?= =?utf-8?Q?4jjkCde3WMg9EhtXgWUylYM=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b28eef4d-00bb-4fd0-d4a2-08d9bbfa52f3 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8807.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Dec 2021 16:30:06.3210 (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: 4nMndS4kbfX6Ep2wVPaW+1T85UOq2zS5iyKyYMMy3omaSqMnP0de36E9VWTMtu+AZpiymKB8lS46MjYQyIkmXg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR04MB8933 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211210_083012_246536_F698667E X-CRM114-Status: GOOD ( 16.29 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi, On 12/9/2021 4:16 PM, Ong Boon Leong wrote: > To replicate the issue:- > > 1) Add 2 flower filters for VLAN Priority based frame steering:- > $ IFDEVNAME=eth0 > $ tc qdisc add dev $IFDEVNAME ingress > $ tc qdisc add dev $IFDEVNAME root mqprio num_tc 8 \ > map 0 1 2 3 4 5 6 7 0 0 0 0 0 0 0 0 \ > queues 1@0 1@1 1@2 1@3 1@4 1@5 1@6 1@7 hw 0 > $ tc filter add dev $IFDEVNAME parent ffff: protocol 802.1Q \ > flower vlan_prio 0 hw_tc 0 > $ tc filter add dev $IFDEVNAME parent ffff: protocol 802.1Q \ > flower vlan_prio 1 hw_tc 1 > > 2) Get the 'pref' id > $ tc filter show dev $IFDEVNAME ingress > > 3) Delete a specific tc flower record > $ tc filter del dev $IFDEVNAME parent ffff: pref 49151 > > From dmesg, we will observe kernel NULL pointer ooops > > [ 197.170464] BUG: kernel NULL pointer dereference, address: 0000000000000000 > [ 197.171367] #PF: supervisor read access in kernel mode > [ 197.171367] #PF: error_code(0x0000) - not-present page > [ 197.171367] PGD 0 P4D 0 > [ 197.171367] Oops: 0000 [#1] PREEMPT SMP NOPTI > [ 197.171367] CPU: 0 PID: 3216 Comm: tc Tainted: G U E 5.16.0-rc2+ #12 > [ 197.171367] Hardware name: Intel Corporation Elkhart Lake Embedded Platform/ElkhartLake LPDDR4x T3 CRB, BIOS EHLSFWI1.R00.3273.A04.2107240322 07/24/2021 > [ 197.171367] RIP: 0010:tc_setup_cls+0x20b/0x4a0 [stmmac] > [ 197.171367] Code: fe ff ff c7 43 14 00 00 00 00 48 c7 03 00 00 00 00 c7 43 1c 00 00 00 00 49 8b 44 24 28 48 8b bd b0 00 00 00 41 0f b7 54 24 58 <48> 8b 00 0f bf 8f 38 08 00 00 81 ea e0 ff 00 00 8b 00 25 00 04 00 > [ 197.171367] RSP: 0018:ffff940940a037c0 EFLAGS: 00010246 > [ 197.171367] RAX: 0000000000000000 RBX: ffff92e826cae2c8 RCX: ffff92e825f39000 > [ 197.171367] RDX: 0000000000000000 RSI: ffff92e826cae2a8 RDI: ffff92e82f0c0000 > [ 197.171367] RBP: ffff92e82f0c0940 R08: 0000000000000000 R09: ffff92e825f39434 > [ 197.171367] R10: ffff92e826c5af00 R11: ffff940940a038a8 R12: ffff940940a038a8 > [ 197.171367] R13: 0000000000000000 R14: 0000000000000000 R15: ffff92e830a5b600 > [ 197.171367] FS: 00007fa7b0c47740(0000) GS:ffff92e964200000(0000) knlGS:0000000000000000 > [ 197.171367] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > [ 197.171367] CR2: 0000000000000000 CR3: 0000000124c50000 CR4: 0000000000350ef0 > [ 197.171367] Call Trace: > [ 197.171367] > [ 197.171367] ? __stmmac_disable_all_queues+0xa8/0xe0 [stmmac] > [ 197.171367] stmmac_setup_tc_block_cb+0x70/0x110 [stmmac] > [ 197.171367] tc_setup_cb_destroy+0xb3/0x180 > [ 197.171367] fl_hw_destroy_filter+0x94/0xc0 [cls_flower] > [ 197.171367] __fl_delete+0x16a/0x180 [cls_flower] > [ 197.171367] fl_destroy+0xb9/0x140 [cls_flower] > [ 197.171367] tcf_proto_destroy+0x1d/0xa0 > [ 197.171367] tc_del_tfilter+0x3c9/0x7b0 > [ 197.171367] ? tc_dump_tfilter+0x310/0x310 > [ 197.171367] rtnetlink_rcv_msg+0x2bf/0x370 > [ 197.171367] ? preempt_count_add+0x68/0xa0 > [ 197.171367] ? _raw_spin_lock_irqsave+0x19/0x40 > [ 197.171367] ? _raw_spin_unlock_irqrestore+0x1f/0x31 > [ 197.171367] ? rtnl_calcit.isra.0+0x130/0x130 > [ 197.171367] netlink_rcv_skb+0x4e/0x100 > [ 197.171367] netlink_unicast+0x18e/0x230 > [ 197.171367] netlink_sendmsg+0x245/0x480 > [ 197.171367] sock_sendmsg+0x5b/0x60 > [ 197.171367] ____sys_sendmsg+0x20b/0x280 > [ 197.171367] ? copy_msghdr_from_user+0x5c/0x90 > [ 197.171367] ___sys_sendmsg+0x7c/0xc0 > [ 197.171367] ? folio_add_lru+0x52/0x80 > [ 197.171367] ? __sys_sendto+0xee/0x160 > [ 197.171367] __sys_sendmsg+0x59/0xa0 > [ 197.171367] do_syscall_64+0x40/0x90 > [ 197.171367] entry_SYSCALL_64_after_hwframe+0x44/0xae > [ 197.171367] RIP: 0033:0x7fa7b0d64397 > [ 197.171367] Code: 64 89 02 48 c7 c0 ff ff ff ff eb bb 0f 1f 80 00 00 00 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 2e 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 51 c3 48 83 ec 28 89 54 24 1c 48 89 74 24 10 > [ 197.171367] RSP: 002b:00007ffdd88b58e8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e > [ 197.171367] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007fa7b0d64397 > [ 197.171367] RDX: 0000000000000000 RSI: 00007ffdd88b5960 RDI: 0000000000000003 > [ 197.171367] RBP: 0000000061b05c21 R08: 0000000000000001 R09: 0000564584e47890 > [ 197.171367] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000001 > [ 197.171367] R13: 00007ffdd88b9a80 R14: 00000000bfff0000 R15: 0000564584e3e420 > [ 197.171367] > [ 197.171367] Modules linked in: cls_flower sch_mqprio sch_ingress dwmac_intel(E) stmmac(E) pcs_xpcs phylink marvell marvell10g libphy 8021q bnep bluetooth ecryptfs nfsd sch_fq_codel uio uhid snd_soc_dmic snd_sof_pci_intel_tgl x86_pkg_temp_thermal snd_sof_intel_hda_common kvm_intel iTCO_wdt iTCO_vendor_support soundwire_intel mei_hdcp kvm soundwire_generic_allocation soundwire_cadence soundwire_bus irqbypass snd_sof_xtensa_dsp ax88179_178a snd_soc_acpi_intel_match intel_rapl_msr pcspkr usbnet snd_soc_acpi mii snd_hda_intel snd_intel_dspcfg snd_intel_sdw_acpi snd_hda_codec i2c_i801 snd_hda_core intel_ish_ipc tpm_crb 8250_lpss intel_ishtp tpm_tis i915 mei_me i2c_smbus mei tpm_tis_core dw_dmac_core tpm spi_dw_pci parport_pc intel_pmc_core spi_dw thermal parport ttm fuse configfs snd_sof_pci snd_sof snd_soc_core snd_compress ac97_bus ledtrig_audio snd_pcm snd_timer snd soundcore [last unloaded: libphy] > [ 197.171367] CR2: 0000000000000000 > [ 197.171367] ---[ end trace 8b8d1c617c39093d ]--- > > This patch reimplements the tc flower rx frame steering for VLAN priority > by keeping a record of flow_cls_offload added. The implementation also > makes way to support EtherType based RX frame steering later. > > Fixes: 0e039f5cf86c ("net: stmmac: add RX frame steering based on VLAN priority in tc flower") > Tested-by: Kurt Kanzenbach > Signed-off-by: Ong Boon Leong > --- > drivers/net/ethernet/stmicro/stmmac/stmmac.h | 17 ++++ > .../net/ethernet/stmicro/stmmac/stmmac_tc.c | 86 ++++++++++++++++--- > 2 files changed, 90 insertions(+), 13 deletions(-) > > diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h b/drivers/net/ethernet/stmicro/stmmac/stmmac.h > index 4f5292cadf5..18a262ef17f 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h > +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h > @@ -171,6 +171,19 @@ struct stmmac_flow_entry { > int is_l4; > }; > > +/* Rx Frame Steering */ > +enum stmmac_rfs_type { > + STMMAC_RFS_T_VLAN, > + STMMAC_RFS_T_MAX, > +}; > + > +struct stmmac_rfs_entry { > + unsigned long cookie; > + int in_use; > + int type; > + int tc; > +}; > + > struct stmmac_priv { > /* Frequently used values are kept adjacent for cache effect */ > u32 tx_coal_frames[MTL_MAX_TX_QUEUES]; > @@ -288,6 +301,10 @@ struct stmmac_priv { > struct stmmac_tc_entry *tc_entries; > unsigned int flow_entries_max; > struct stmmac_flow_entry *flow_entries; > + unsigned int rfs_entries_max[STMMAC_RFS_T_MAX]; > + unsigned int rfs_entries_cnt[STMMAC_RFS_T_MAX]; > + unsigned int rfs_entries_total; > + struct stmmac_rfs_entry *rfs_entries; > > /* Pulse Per Second output */ > struct stmmac_pps_cfg pps[STMMAC_PPS_MAX]; > diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c > index 1c4ea0b1b84..d0a2b289f46 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c > +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c > @@ -232,11 +232,33 @@ static int tc_setup_cls_u32(struct stmmac_priv *priv, > } > } > > +static int tc_rfs_init(struct stmmac_priv *priv) > +{ > + int i; > + > + priv->rfs_entries_max[STMMAC_RFS_T_VLAN] = 8; > + > + for (i = 0; i < STMMAC_RFS_T_MAX; i++) > + priv->rfs_entries_total += priv->rfs_entries_max[i]; > + > + priv->rfs_entries = devm_kcalloc(priv->device, > + priv->rfs_entries_total, > + sizeof(*priv->rfs_entries), > + GFP_KERNEL); > + if (!priv->rfs_entries) > + return -ENOMEM; > + > + dev_info(priv->device, "Enabled RFS Flow TC (entries=%d)\n", > + priv->rfs_entries_total); > + > + return 0; > +} > + > static int tc_init(struct stmmac_priv *priv) > { > struct dma_features *dma_cap = &priv->dma_cap; > unsigned int count; > - int i; > + int ret, i; > > if (dma_cap->l3l4fnum) { > priv->flow_entries_max = dma_cap->l3l4fnum; > @@ -250,10 +272,14 @@ static int tc_init(struct stmmac_priv *priv) > for (i = 0; i < priv->flow_entries_max; i++) > priv->flow_entries[i].idx = i; > > - dev_info(priv->device, "Enabled Flow TC (entries=%d)\n", > + dev_info(priv->device, "Enabled L3L4 Flow TC (entries=%d)\n", > priv->flow_entries_max); > } > > + ret = tc_rfs_init(priv); > + if (ret) > + return -ENOMEM; > + > if (!priv->plat->fpe_cfg) { > priv->plat->fpe_cfg = devm_kzalloc(priv->device, > sizeof(*priv->plat->fpe_cfg), > @@ -607,16 +633,45 @@ static int tc_del_flow(struct stmmac_priv *priv, > return ret; > } > > +static struct stmmac_rfs_entry *tc_find_rfs(struct stmmac_priv *priv, > + struct flow_cls_offload *cls, > + bool get_free) > +{ > + int i; > + > + for (i = 0; i < priv->rfs_entries_total; i++) { > + struct stmmac_rfs_entry *entry = &priv->rfs_entries[i]; > + > + if (entry->cookie == cls->cookie) > + return entry; > + if (get_free && entry->in_use == false) > + return entry; > + } > + > + return NULL; > +} > + > #define VLAN_PRIO_FULL_MASK (0x07) > > static int tc_add_vlan_flow(struct stmmac_priv *priv, > struct flow_cls_offload *cls) > { > + struct stmmac_rfs_entry *entry = tc_find_rfs(priv, cls, false); > struct flow_rule *rule = flow_cls_offload_flow_rule(cls); > struct flow_dissector *dissector = rule->match.dissector; > int tc = tc_classid_to_hwtc(priv->dev, cls->classid); > struct flow_match_vlan match; > While we're at it, shouldn't we also check that no actions are being requested and fail if there are, instead of silently ignoring them? > + if (!entry) { > + entry = tc_find_rfs(priv, cls, true); > + if (!entry) > + return -ENOENT; > + } > + > + if (priv->rfs_entries_cnt[STMMAC_RFS_T_VLAN] >= > + priv->rfs_entries_max[STMMAC_RFS_T_VLAN]) > + return -ENOENT; > + > /* Nothing to do here */ > if (!dissector_uses_key(dissector, FLOW_DISSECTOR_KEY_VLAN)) > return -EINVAL; > @@ -638,6 +693,12 @@ static int tc_add_vlan_flow(struct stmmac_priv *priv, > > prio = BIT(match.key->vlan_priority); > stmmac_rx_queue_prio(priv, priv->hw, prio, tc); > + > + entry->in_use = true; > + entry->cookie = cls->cookie; > + entry->tc = tc; > + entry->type = STMMAC_RFS_T_VLAN; > + priv->rfs_entries_cnt[STMMAC_RFS_T_VLAN]++; > } > > return 0; > @@ -646,20 +707,19 @@ static int tc_add_vlan_flow(struct stmmac_priv *priv, > static int tc_del_vlan_flow(struct stmmac_priv *priv, > struct flow_cls_offload *cls) > { > - struct flow_rule *rule = flow_cls_offload_flow_rule(cls); > - struct flow_dissector *dissector = rule->match.dissector; > - int tc = tc_classid_to_hwtc(priv->dev, cls->classid); > + struct stmmac_rfs_entry *entry = tc_find_rfs(priv, cls, false); > > - /* Nothing to do here */ > - if (!dissector_uses_key(dissector, FLOW_DISSECTOR_KEY_VLAN)) > - return -EINVAL; > + if (!entry || !entry->in_use || entry->type != STMMAC_RFS_T_VLAN) > + return -ENOENT; > > - if (tc < 0) { > - netdev_err(priv->dev, "Invalid traffic class\n"); > - return -EINVAL; > - } > + stmmac_rx_queue_prio(priv, priv->hw, 0, entry->tc); > + > + entry->in_use = false; > + entry->cookie = 0; > + entry->tc = 0; > + entry->type = 0; > > - stmmac_rx_queue_prio(priv, priv->hw, 0, tc); > + priv->rfs_entries_cnt[STMMAC_RFS_T_VLAN]--; > > return 0; > } > I was about to post a very similar fix for that same problem (except I was adding support for other packet steering types)... I can confirm your patch works. Note that a simpler way to reproduce is simply to add a filter, then remove all the filters, e.g.: $ IFDEVNAME=eth0 $ tc qdisc add dev $IFDEVNAME ingress $ tc qdisc add dev $IFDEVNAME root mqprio num_tc 8 \ map 0 1 2 3 4 5 6 7 0 0 0 0 0 0 0 0 \ queues 1@0 1@1 1@2 1@3 1@4 1@5 1@6 1@7 hw 0 $ tc filter add dev $IFDEVNAME parent ffff: protocol 802.1Q \ flower vlan_prio 0 hw_tc 0 $ tc filter del dev $IFDEVNAME ingress Yannick _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel