From patchwork Tue Dec 26 07:28:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 135570 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 51A1E43795; Tue, 26 Dec 2023 08:28:53 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2317F402DA; Tue, 26 Dec 2023 08:28:49 +0100 (CET) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2099.outbound.protection.outlook.com [40.107.212.99]) by mails.dpdk.org (Postfix) with ESMTP id 72BE140298 for ; Tue, 26 Dec 2023 08:28:46 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GQXQqMD9MK2y/kgyS1wM0xi6gH8h+zXKeN7EG2hco41pbWQxLOkE8+2S2fY0jz9544PxrCgGTeNejnuofqUIkoE6rjpnRsKzbPAgl7hmaVkbI9oCvK0ArbIoOeA6ocaZk9bDm3vNBZcwNIkXvmeLtAPP8Zh5/W7OXj8WDTwBfBBYO46E18SFkaKnE0e6qxi/aoC/vMmgK1D4w31WF+4rFQlFReJlrLs4zaHdNzYT4jO4dpJziWcthwvTXyM8aYSB87KHgSRA/qUKhFlgsfp8s9u+44YR3u2sSgEvP3y6Tr9BENY9Qic+e+R/UTyeyT2p/wBiJr7yNNMI/NA26XO+ug== 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=Mki8yuQ1A6hfXtD4gf047/YcoqBl3GGixpXXPAf5ZWU=; b=lr6KXdUeg0NHDlGSzT7b6fyd7mRaMPauLaPp0eCRUr/Jg6eViVrtAetYeu8r1C3Y6HschAaeq7LCP4PkuW4DSzYQeYUHbX/NLmPf6gYu94ScMwBgytmvFLYNyradybSW/7QNs3QDqL2Gjxw55ohJTnMBQGE4KocPVmjv9IrZ6TnLbpFSjJlFfDNB7BcGUw3ZBg4fVafyc9VGW9ZR8oXCRris+l1qVagnr6qJT+BawhRgxcI8zsk/g0NdaHRX/oX29fPTrWAEi9BC4yfuGXx0ISvBro4KwN4LxU3pZF6vNG3dOXfNQoR0Ha1Bc3neCTrAjJGJaR0WG26DB46PopQ+2A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Mki8yuQ1A6hfXtD4gf047/YcoqBl3GGixpXXPAf5ZWU=; b=tASH05CnI9lq1TXzTyjsPFu7lnwEP28ihuLgnc7/YDCjvNe+Fgmu8JkTf0axkqw6KX+wcL2NwatEZfIn/pk/Oyg/tWp13CmyuRkouGMedavdz13xnoCdqdJWL1u6UVS8Wk+fsFDlcQ/tMZKQyiiWWy+VHqI8nbC9lKKiP0nnawE= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by CH3PR13MB6506.namprd13.prod.outlook.com (2603:10b6:610:1a3::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.27; Tue, 26 Dec 2023 07:28:44 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.7113.027; Tue, 26 Dec 2023 07:28:44 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Long Wu , James Hershaw , Chaoyong He , Peng Zhang Subject: [PATCH v6 01/14] ethdev: add member notification for bonding port Date: Tue, 26 Dec 2023 15:28:11 +0800 Message-Id: <20231226072824.3163121-2-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231226072824.3163121-1-chaoyong.he@corigine.com> References: <20231226023745.3144143-1-chaoyong.he@corigine.com> <20231226072824.3163121-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SJ0PR03CA0239.namprd03.prod.outlook.com (2603:10b6:a03:39f::34) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH3PR13MB6506:EE_ X-MS-Office365-Filtering-Correlation-Id: e706ad6c-eb8a-476e-c4fd-08dc05e44ac6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JfVTyd3oxZgj1K6rmz2jCt3qzA4U2rkdqMF9td+OT0j+lHk7wl6IsL1K7YNc/LtIpnuiDT3NuSvbSXn1dsifmmq2y6HH3fqBfIydOjDpKNURr48O1d6n3/ej8Ke0peZYP54La+uC7SR2dN+GJKzQgzQfOqVT09O19j4bAGqenWg4srGlAE3PCOpWRF0Wc4Aq9IQOxzz+DJB9Q41t0zWpTnJI7IOwSjIQ+ITkfRIgDvk2VLfJsbS1dar5kJK1E6GCyse1cQIO9qgv8qRaEhdoVtf9OXczWOAu1tqWZoPujx/9wZujqDbKz/FdeHKNtT5bLROaMzawxDn6apFgksvnq1BeUcZ2v31rPXHB3GI4NPkoxJXdoX69ug0+v2qEwARYaW77QvPdGJJNYACmGBBN6//Kbe+1OoACXJXaoY93baEuxeYVKpPbYE9UKptTUN3haYOfqamR3xS/LyqTes1Qq4KChapo2T7HFFFBkHnapNUYsfszA5TXRHIY4qGcWY+3mTbLy6rHl2IyIHabXo5ctXXcuEeztIN+a0Ohgn4yGKnp0RpSLqOmiqJ48C+W2kZW5MxI/Hct/u8G2fLGGrxWOdQjpYnGNDPYHgtJ32SJSNIAqb4EqJBRFFZBiVtQTuLQ8RoRiN1TooZB+U+Ft2C98gZa6dechKqLAJiDm4VYui8= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376002)(346002)(136003)(396003)(366004)(39840400004)(230922051799003)(451199024)(186009)(64100799003)(1800799012)(107886003)(26005)(1076003)(52116002)(6666004)(2616005)(6512007)(83380400001)(5660300002)(44832011)(15650500001)(4326008)(8676002)(41300700001)(2906002)(30864003)(8936002)(6486002)(478600001)(316002)(6916009)(54906003)(66476007)(66556008)(66946007)(6506007)(86362001)(36756003)(38100700002)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: epjpbDQpvfDwC5yK4uvaKu5WY5bzsFxolUk9K+orSGZpsAaiNpy2yr7s722XabvFXZu71u/ArZQvrwHjUXbTbvQU57zfK4yJVup4MsZkBnEAIMlZ/FEP8FZtA2VcIH1h6UKeiTbofztOdbzvbuTafRTI+z85UJRFt5j6Zpf0ya1tJ6gpl8jID36cQ1gWNmqcpuRIxiLt6A53XPwP6MWxaziyWjTtzICi8nOv37XOuJgRzDm2XC+UrbEQWeayZ7BZ1f6UjWF5q929FLtUUGVKN9irWFJdbyrsSda0MMlH7JY5A92RaypqsQ2JKUIwrCT0XtFx1E4QKYQTgdFJ5YviudLdjwfkkwvEa490r9ACFkH2trGqot2f4Sumcd+s4aXM/14HkT7JJRtzJBN1Rtrz2J/ZeH518jAFvQAI5SrHDUDHWCbZOZzDe/VPM30ZJ9wtIDXYMUBWFDD/7tkPgu3sfi4ryfItfpOs+HgTngCfYYqBNFxXhqqBwwy3nyh4gakMQGRJp652ufPf3p1GDvS6UQk8O1hGYOZNUx5BTPBBYvvia8QJ74f0tJK1TDFrluPHzVCbxOt/xe8+HzaS6lnuAy8/k3QbAdMay8GH2+cOdfzFeKU/pvx5smKUhab0HAXpXZrwetsxUyj+dq+TvxdTruahcWC0PmP+sVsudz1lpWMe8kGDapCFK8swgyGDdx+9PV1PfHn8m3v+v/mfBRQuUUvdPrVJAdRjJ7kkY7QKq4XDa8/PyUDgWCn67a22mP+xBHG82pKOqMlXIpJW5DWmz7oVnevQR5PfgBbrt29I4hPuXcqAgRFCixCgJP9d4XLmpSrE9HrYQJ028LXdxZbdp3CUAIQ6MzqJk+BvXinTJFvYngigFpeDfTqD/lP+QmZs0mmGJys6ux2dZFUtObucVjO3EnavXeoRoEqniwQWQsvEpSKNLnII8zq8iSTOiC41KpI8rfnpw4JgIo4HbnGYogjk7DKi2FXCytIEX4oPfe8EfZC0PfEZvAOiAszlBR2qAJLLkSoX0hkVPvjy4ebLhUY6512h2pJIJYxwudBWYAG/LX6Bextl2SlrsWt4p5NKpj4tKq09I4A5KlMJcSBBaIqwHTYqaCnvc+6bbglrqiRavotLcDhPvM6h3vZrrjeMRn3p43IUZsVAGFObhMYmLNRlUF6zZxecwatd90N879aNLf3sLcPdCWbVs8alqwCarxB3ivd+Kj1mgv90Z92QqCrmm3eXp4QowDs+4Dbc6MIgPJwbjkiPyqSB0+Gy5bZGhoFYokoObcVC9iMu7wHGP5dR5d9gPxtKQtJ6QHfui/3ii28DcsOhLzf79NlFHlFZb7kW7NPjjleQf2sWs2ne94lH5dkBBAfvuoSHoTVduo78cw+s/HoKDmu/J99ARqX4+/9NX7V3SNuKkg4SPR5rjkcZOhECnqzCanwefkG4kn60aYWyCrDB0zYCacIsUFEWkpBhSqD+75woJa+giW8SUsYEBkhcH9swgTH0ul7LGTdh5KCdnzSjdMrL81sCNum2QFoZjSM0EakPwDwdG0AJP6Y27Z1eCQ0ZIgb29YQpM1dd46WFJPVXCSp/2s38uhqPsu+EynDbQSJd7FnO+wAbQg== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: e706ad6c-eb8a-476e-c4fd-08dc05e44ac6 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Dec 2023 07:28:44.7718 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: T1PtFJTmVv8Q8uwSyie7zQM3oS0eT5jp9Si1drj5RRmhxIdEIBn8qIGKtg/XWTPtxq4BS10v8gESJurKb/te+sm00COvxkQbHsrM8fQoW/U= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR13MB6506 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Long Wu Bonding PMD does not let member ports know the bonding port's information, like how many member ports the bonding port has, what mode the bonding port is in and so on. Add the notification interface for bonding port to let member port know it is added to a bonding port and what the bonding port's configuration is. If so the member ports have chance to offload bond-flow that its destination port is a bonding port. Signed-off-by: Long Wu Reviewed-by: James Hershaw Reviewed-by: Chaoyong He Reviewed-by: Peng Zhang --- drivers/net/bonding/eth_bond_private.h | 1 + drivers/net/bonding/rte_eth_bond.h | 46 ++++++++++++++++ drivers/net/bonding/rte_eth_bond_api.c | 72 ++++++++++++++++++++++++++ drivers/net/bonding/rte_eth_bond_pmd.c | 32 ++++++++++-- drivers/net/bonding/version.map | 3 ++ lib/ethdev/ethdev_driver.h | 18 +++++++ 6 files changed, 169 insertions(+), 3 deletions(-) diff --git a/drivers/net/bonding/eth_bond_private.h b/drivers/net/bonding/eth_bond_private.h index e688894210..f69e85c199 100644 --- a/drivers/net/bonding/eth_bond_private.h +++ b/drivers/net/bonding/eth_bond_private.h @@ -180,6 +180,7 @@ struct bond_dev_private { uint8_t member_update_idx; bool kvargs_processing_is_done; + bool notify_member; /**< Enable member notification of bonding port. */ uint32_t candidate_max_rx_pktlen; uint32_t max_rx_pktlen; diff --git a/drivers/net/bonding/rte_eth_bond.h b/drivers/net/bonding/rte_eth_bond.h index f10165f2c6..f6c773615c 100644 --- a/drivers/net/bonding/rte_eth_bond.h +++ b/drivers/net/bonding/rte_eth_bond.h @@ -351,6 +351,52 @@ rte_eth_bond_link_up_prop_delay_set(uint16_t bonding_port_id, int rte_eth_bond_link_up_prop_delay_get(uint16_t bonding_port_id); +/** + * Set the flag of whether bonding port notifies member ports. + * + * @param bonding_port_id + * Port ID of bonding device. + * @param notify + * Flag of whether bonding port notifies member ports. + * + * @return + * 0 on success, negative value otherwise. + */ +__rte_experimental +int +rte_eth_bond_notify_member_flag_set(uint16_t bonding_port_id, bool notify); + +/** + * Get the flag of whether bonding port notifies member ports. + * + * @param bonding_port_id + * Port ID of bonding device. + * @param notify + * Flag of whether bonding port notifies member ports. + * + * @return + * 0 on success, negative value otherwise. + */ +__rte_experimental +int +rte_eth_bond_notify_member_flag_get(uint16_t bonding_port_id, bool *notify); + +/** + * Notify the member ports of bonding port's information. + * + * This interface is called in the following functions: + * - bond_ethdev_lsc_event_callback() + * - bond_ethdev_configure() + * + * @param bonding_port_id + * Port ID of bonding device. + * + * @return + * 0 on success, negative value otherwise. + */ +__rte_experimental +int +rte_eth_bond_notify_members(uint16_t bonding_port_id); #ifdef __cplusplus } diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c index 99e496556a..239f86ee92 100644 --- a/drivers/net/bonding/rte_eth_bond_api.c +++ b/drivers/net/bonding/rte_eth_bond_api.c @@ -627,6 +627,17 @@ __eth_bond_member_add_lock_free(uint16_t bonding_port_id, uint16_t member_port_i member_vlan_filter_set(bonding_port_id, member_port_id); + if (internals->notify_member && + *member_eth_dev->dev_ops->bond_notify_member != NULL) { + ret = member_eth_dev->dev_ops->bond_notify_member(member_eth_dev, + bonding_eth_dev); + if (ret < 0) { + RTE_BOND_LOG(ERR, "Add member (port %u) notify failed!", + member_port_id); + return -1; + } + } + return 0; } @@ -733,6 +744,10 @@ __eth_bond_member_remove_lock_free(uint16_t bonding_port_id, member_eth_dev = &rte_eth_devices[member_port_id]; member_remove(internals, member_eth_dev); member_eth_dev->data->dev_flags &= (~RTE_ETH_DEV_BONDING_MEMBER); + if (internals->notify_member && + *member_eth_dev->dev_ops->bond_notify_member != NULL) + member_eth_dev->dev_ops->bond_notify_member(member_eth_dev, + bonding_eth_dev); /* first member in the active list will be the primary by default, * otherwise use first device in list */ @@ -1098,3 +1113,60 @@ rte_eth_bond_link_up_prop_delay_get(uint16_t bonding_port_id) return internals->link_up_delay_ms; } + +int +rte_eth_bond_notify_member_flag_set(uint16_t bonding_port_id, bool notify) +{ + struct bond_dev_private *internals; + + if (valid_bonding_port_id(bonding_port_id) != 0) + return -EINVAL; + + internals = rte_eth_devices[bonding_port_id].data->dev_private; + + internals->notify_member = notify; + + return 0; +} + +int +rte_eth_bond_notify_member_flag_get(uint16_t bonding_port_id, bool *notify) +{ + struct bond_dev_private *internals; + + if (valid_bonding_port_id(bonding_port_id) != 0) + return -EINVAL; + + internals = rte_eth_devices[bonding_port_id].data->dev_private; + + *notify = internals->notify_member; + + return 0; +} + +int +rte_eth_bond_notify_members(uint16_t bonding_port_id) +{ + uint32_t i; + uint16_t member_port_id; + struct rte_eth_dev *bond_dev; + struct rte_eth_dev *member_dev; + struct bond_dev_private *internals; + + if (valid_bonding_port_id(bonding_port_id) != 0) + return -EINVAL; + + bond_dev = &rte_eth_devices[bonding_port_id]; + internals = bond_dev->data->dev_private; + + for (i = 0; i < internals->member_count; i++) { + member_port_id = internals->members[i].port_id; + member_dev = &rte_eth_devices[member_port_id]; + /* Notify member port if it supports. */ + if (*member_dev->dev_ops->bond_notify_member != NULL) + member_dev->dev_ops->bond_notify_member(member_dev, + bond_dev); + } + + return 0; +} diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index c40d18d128..d2c890075a 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -2982,11 +2982,13 @@ bond_ethdev_lsc_event_callback(uint16_t port_id, enum rte_eth_event_type type, int valid_member = 0; uint16_t active_pos, member_idx; uint16_t i; + uint16_t bonding_port_id; if (type != RTE_ETH_EVENT_INTR_LSC || param == NULL) return rc; - bonding_eth_dev = &rte_eth_devices[*(uint16_t *)param]; + bonding_port_id = *(uint16_t *)param; + bonding_eth_dev = &rte_eth_devices[bonding_port_id]; if (check_for_bonding_ethdev(bonding_eth_dev)) return rc; @@ -3058,8 +3060,12 @@ bond_ethdev_lsc_event_callback(uint16_t port_id, enum rte_eth_event_type type, * using it. */ if (internals->user_defined_primary_port && - internals->primary_port == port_id) + internals->primary_port == port_id) { bond_ethdev_primary_set(internals, port_id); + + if (internals->notify_member) + rte_eth_bond_notify_members(bonding_port_id); + } } else { if (active_pos == internals->active_member_count) goto link_update; @@ -3078,6 +3084,10 @@ bond_ethdev_lsc_event_callback(uint16_t port_id, enum rte_eth_event_type type, internals->active_members[0]); else internals->current_primary_port = internals->primary_port; + + if (internals->notify_member) + rte_eth_bond_notify_members(bonding_port_id); + mac_address_members_update(bonding_eth_dev); bond_ethdev_promiscuous_update(bonding_eth_dev); bond_ethdev_allmulticast_update(bonding_eth_dev); @@ -3376,6 +3386,7 @@ dump_basic(const struct rte_eth_dev *dev, FILE *f) struct bond_dev_private instant_priv; const struct bond_dev_private *internals = &instant_priv; int mode, i; + bool notify_member; /* Obtain a instance of dev_private to prevent data from being modified. */ memcpy(&instant_priv, dev->data->dev_private, sizeof(struct bond_dev_private)); @@ -3445,6 +3456,13 @@ dump_basic(const struct rte_eth_dev *dev, FILE *f) fprintf(f, "\tUser Defined Primary: [%u]\n", internals->primary_port); if (internals->member_count > 0) fprintf(f, "\tCurrent Primary: [%u]\n", internals->current_primary_port); + + if (rte_eth_bond_notify_member_flag_get(internals->port_id, ¬ify_member) == 0) + fprintf(f, "\tNotify Member Ports Flag: %s\n", + notify_member ? "enable" : "disable"); + else + fprintf(f, "\tFailed to get notify member ports flag for bonding port %d\n", + internals->port_id); } static void @@ -3997,8 +4015,12 @@ bond_ethdev_configure(struct rte_eth_dev *dev) * if no kvlist, it means that this bonding device has been created * through the bonding api. */ - if (!kvlist || internals->kvargs_processing_is_done) + if (!kvlist || internals->kvargs_processing_is_done) { + if (internals->notify_member && rte_eth_bond_notify_members(port_id) != 0) + RTE_BOND_LOG(ERR, "Notify member ports failed"); + return 0; + } internals->kvargs_processing_is_done = true; @@ -4236,6 +4258,10 @@ bond_ethdev_configure(struct rte_eth_dev *dev) return -1; } } + + if (internals->notify_member && rte_eth_bond_notify_members(port_id) != 0) + RTE_BOND_LOG(ERR, "Notify member ports failed"); + return 0; } diff --git a/drivers/net/bonding/version.map b/drivers/net/bonding/version.map index 09ee21c55f..3bd5e8ad11 100644 --- a/drivers/net/bonding/version.map +++ b/drivers/net/bonding/version.map @@ -35,4 +35,7 @@ EXPERIMENTAL { rte_eth_bond_member_add; rte_eth_bond_member_remove; rte_eth_bond_members_get; + rte_eth_bond_notify_member_flag_get; + rte_eth_bond_notify_member_flag_set; + rte_eth_bond_notify_members; }; diff --git a/lib/ethdev/ethdev_driver.h b/lib/ethdev/ethdev_driver.h index b482cd12bb..39316a7a29 100644 --- a/lib/ethdev/ethdev_driver.h +++ b/lib/ethdev/ethdev_driver.h @@ -1216,6 +1216,21 @@ typedef int (*eth_count_aggr_ports_t)(struct rte_eth_dev *dev); typedef int (*eth_map_aggr_tx_affinity_t)(struct rte_eth_dev *dev, uint16_t tx_queue_id, uint8_t affinity); +/** + * @internal + * Bonding port notifies the member ports. + * + * @param dev + * Member port (ethdev) handle. + * @param bonding_dev + * Bonding port (ethdev) handle. + * + * @return + * Negative on error, 0 on success. + */ +typedef int (*eth_bond_notify_member)(struct rte_eth_dev *dev, + struct rte_eth_dev *bonding_dev); + /** * @internal A structure containing the functions exported by an Ethernet driver. */ @@ -1455,6 +1470,9 @@ struct eth_dev_ops { eth_count_aggr_ports_t count_aggr_ports; /** Map a Tx queue with an aggregated port of the DPDK port */ eth_map_aggr_tx_affinity_t map_aggr_tx_affinity; + + /** Notify the member port of bonding port information */ + eth_bond_notify_member bond_notify_member; }; /** From patchwork Tue Dec 26 07:28:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 135571 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 1E7B043795; Tue, 26 Dec 2023 08:29:03 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A00AB402EC; Tue, 26 Dec 2023 08:28:50 +0100 (CET) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2106.outbound.protection.outlook.com [40.107.212.106]) by mails.dpdk.org (Postfix) with ESMTP id 598A1402D8 for ; Tue, 26 Dec 2023 08:28:48 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EuzjUFr4OUGHnAllTAdjF7T/ElTGIwfU4+z16GIjxa9yX+bktv7EH3GrRwQj5Eo5DmO3GmSyLj+jDTKtg+XYAqv0dJw2BHKPVmxuN6M8yIQM40AZTsTbduWFNXOZsCfWP19RmpBuPfaZvgXfhNxz7HV8pIcdpN0j8t8y4cx+HhJvM+rYvnWeqg4xrv6f9KNGF38veRMv8kwjSY9NqDdK4XqmA9GjjGB78forwXhFw+/GOvvzJdJEupGe3kC8UCDIHrjIaJu+wTUZeF+RLTQjOCvZWhOxR9phWPhqGrvCIAJ9gB1FCtQr0mO2CwsTiQPX5R6amPyTD9664QCxeab4Qg== 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=Nf0Jzjuw2SZFvIbpeTfCghQvEOFea46iD2WouhB6/Pk=; b=TD3Wbl7sXthISoIpCJfxv89TC7UYM3p/uLuaaQ+Cw7NZXejtBPDWnjiSgxR1G8uKwPXt/4QaTGv/kMxl7IHEVbjHJWCaSwyZtkejXvY1NqdkU/kvxTXLH2TO2NEHGsk12X/Xt9qtla7MEkFxCaFmL9BsWhKvWwLrsSeBNlUxyh9eVNaMs8AX7xEqxG/GE41sraSzPWIWK0X21xUwOvXt2XED1ujlt0mU24s0hk2kr5RGEpvPHlbEBk+lpWgtzcxYKCldxY+5NcLx4kUuSRhkzT0kdnQLsOAusQjqCOxdFnGyZqDTKoGJB81Euhn1Ofq0lloiD1OXY7gic+NMoChreQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Nf0Jzjuw2SZFvIbpeTfCghQvEOFea46iD2WouhB6/Pk=; b=fk0PpXDg9oVu8g8Dwv6e98hmzgKh5uVPDo5D8M8EJwszzycVRarHVM9tCb8tPtmKi6XmK/WZn+Gvpd2lxS2HtK186yJKtw/E+EGYqXh3apkBYdZqnKZa8bBRctqA8WNs6mERMiHgm2ZWeKK3KN0R9xr6cicJ3slE/1yPkoMutuE= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by CH3PR13MB6506.namprd13.prod.outlook.com (2603:10b6:610:1a3::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.27; Tue, 26 Dec 2023 07:28:46 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.7113.027; Tue, 26 Dec 2023 07:28:46 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Long Wu , Chaoyong He , James Hershaw , Peng Zhang Subject: [PATCH v6 02/14] ethdev: add API to get firmware creation of bonding port Date: Tue, 26 Dec 2023 15:28:12 +0800 Message-Id: <20231226072824.3163121-3-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231226072824.3163121-1-chaoyong.he@corigine.com> References: <20231226023745.3144143-1-chaoyong.he@corigine.com> <20231226072824.3163121-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SJ0PR03CA0239.namprd03.prod.outlook.com (2603:10b6:a03:39f::34) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH3PR13MB6506:EE_ X-MS-Office365-Filtering-Correlation-Id: 472548ea-688c-41ff-1922-08dc05e44bff X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: boSKt5f8TIO57/EzCh+qNkOWYlypBoHsw0Ur1+pFR/hnNoFlsJVON7uZNvUfw3vrjrLMJ3JXNTShsD6CvXmmIUrnjD3lx9DWrWbGmDmXGRRqOOkpxIsmzJUkRl2G67cZtGQRajEQdaD62qTjJkPneeErsRADo74CXx6IOtiXx+4tqCyJgMaEldFA6wbrMAOFZPxCX3PxtPs7QcmRQ4yC5BxiTnhI96mAxQgShy4O9YSqgGxX5m5bgsb41qKOq3nD95Zz7XmGenPbUmlfSeoCxwqRbeqoNWWOVejWI6WzQyMZWLOWx5pTE/SnVRNoZ0yZ/tF4hWfEbkbnqToULMfKzKyi7H0fdK1L3AbKrJ7ZtnMD+Rx6YM9JkCQy+xY3QOhH4uF1jZWav/jxulIMU4pFDlLWfKyBga8/66YAYYk7wEIToYRhYCW2IidWDlN8ZD8rvUUllZm4M3YBeRgGtT67DGrSNpgLvubeG40l0O8aDhr+n8RFcFkjXsVtqyhFBo/yrv9jdYCP89828xIOJ47zhjQuLM7kcOpiPYApcT97n/V30baBkJybcVPaC5xuPScTh2keH3hvWwqgm+eHhIpTsE3Ao6pMUI6gAC/fL4Sb62uY3ybrSuzbzTMiAjlttLF3gVMfLY98Skt5hg6rmWwWnhfoAqGW7Cc53hlK731zd6k= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376002)(346002)(136003)(396003)(366004)(39840400004)(230922051799003)(451199024)(186009)(64100799003)(1800799012)(107886003)(26005)(1076003)(52116002)(6666004)(2616005)(6512007)(83380400001)(5660300002)(44832011)(4326008)(8676002)(41300700001)(2906002)(8936002)(6486002)(478600001)(316002)(6916009)(54906003)(66476007)(66556008)(66946007)(6506007)(86362001)(36756003)(38100700002)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: HbIpNlbCxq8HYnKviRSEJPnUEF65wyf00V9PrnzF4grEllzT644RgEYh/ZgrUge13r0Grutc5T3CGPK6OoHMdg73fZTfC7trL289RVexQWrAwxNan7B1GhtURzVo7qeIAzBWtI5tDMMk88N7AwDFO+KCwWGPFCStzjs9Cc9b7JbDlkqDBQRo54txfKrwnQhc3cT+TSeb4VsRjRh5C7cJdKvcDHkT5t9fpjni6/x35VtJ46hAd2gmkIsNf4drjJd2v6+Lldx9MbclsQpR3SmHJVn4sh4Jq6mQQsb5DJVhqcbQgkjoumTWM71u4DSdHioiClM7RpWSsmOMRw+/qOUPk1mTnax2meP3btE/ue7EJlTKfdq2XzozNR+KwobxR392UQ2XisMEPDwLK5ChPBGkA4JBhSgPAiC3x9KCixMpm3zqRvDXRsaizRs6f7NHFvYK95Enb1nR2u4Ikr+MRhYlEfrf3i9cRl7qhlikiYxpCR060m5Sx2Jpo3vcTAtarmmxZCh6n+aSRTITJ+BtaQY9HSNhICmSjT3W8HrBnRHhbFfEAll3V9nFhnw3+RrwVlOI6lPbzFxrp8IpJZ3HpwLXCy5VvxJuB9XzPbPYO7QkSSvHlaGcb63DhtgyVm1iyCveoXVFA2kx2yb4EMPuZcGvtQ+l1YNbZdnZhA95FR3zAFxsnANhw4s61B3+VlKgwWC1UHmt/V/QvJMkoQXettlFMOtFT+Ckqzpvn0RvuNygmOn0Cuk0yJhPkoLRaRbwzNVfI6xZWjYKPts/UsiK7bRz2BtyD1/ORTyj2R3pMVMwwdK3EB6WXjbFUQMYqQDPSjd3fhtt8xPrisHoFsvgWHyLwxAF8tNGUav68dpaukSVL5GPUsWKjrXQomFDtdFP+1n8JR2k8Qa6EMyoLbnp5Zz7N05NUkOvesswOfjY9XeiP5FtblYvZvkODT0O1f4HEoTBa0F90mfJG/+eG119MeLkr+NPJ1K2crhhJeq7gHZlS/SyqSaapSzQFTjNK6UjZIpIasK9bjNUYQqOB5UjvmIpeo9tG6dhV//8dT+qvpIVY2oDb+3rIlVEPZa8quuqDrM2doTt4Z1CjhGUL+nrbJGtbGnOaZ/iIVsE8FcGSwZQboDlS1xmsgR0Bvm8tFicqohJX+j21MKRdkus0uMZ1sZg4/kskT8puYZg1cdk82KEaA1Fuz2izuLz4RzVYWfbfi+RJUvmnHj+RveZnlJo3jpZAcGkpvsQK7jLZytPUhNcy/bwCEBNS6sHbfSsf0LrPcbj+R9F9I6LuTVDf4WeCW3xWjNjONJ9R0FteLXoP+32ZMYey/htiqltdSit2+OZvyRuuHqSHXl4y9TC4kjX+QuA1MMBw7T5lZlcCxSaNG04PRQrKacKk5UbWVXLIoa6uDj4ETksZzJO/lNzJ0mLG1kU92c40t3m+Oc/i6CXph7s4HBw8chTykNoBNfnU46Lp6CLDfjKGwhaHVU0SmqY1A7ugrPdHhdNzCdJGX8NSd2444o+nxAY9Lo1pjRoHAzmqwtihSHV6C4rneSUjTyAP8wMnTFWKimmipyLpSnihnBUFeWGS9C1w6W8xippfjXeqj7/4n7BAWK2DFST+3+hiKuiIg== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 472548ea-688c-41ff-1922-08dc05e44bff X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Dec 2023 07:28:46.8223 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: huTd6Rc0qDWkW/qCnOn7hpLWmxTYBY3aIVaXpVj10jXJzuvtm6bQMPd0JSxTIevqy+f3n1UcQ1wI95ep1D7FA0+0EAX7NH8wAIInhQFe3fw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR13MB6506 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Long Wu After bonding port notification, member port firmware may create the bonding port. We want to get the result of creatition, so we add this API to do the getting action. Signed-off-by: Long Wu Reviewed-by: Chaoyong He Reviewed-by: James Hershaw Reviewed-by: Peng Zhang --- drivers/net/bonding/rte_eth_bond.h | 15 ++++++++++++++ drivers/net/bonding/rte_eth_bond_api.c | 28 ++++++++++++++++++++++++++ drivers/net/bonding/version.map | 1 + lib/ethdev/ethdev_driver.h | 20 ++++++++++++++++++ 4 files changed, 64 insertions(+) diff --git a/drivers/net/bonding/rte_eth_bond.h b/drivers/net/bonding/rte_eth_bond.h index f6c773615c..9a8bed0346 100644 --- a/drivers/net/bonding/rte_eth_bond.h +++ b/drivers/net/bonding/rte_eth_bond.h @@ -398,6 +398,21 @@ __rte_experimental int rte_eth_bond_notify_members(uint16_t bonding_port_id); +/** + * Get the status of specified bonding port created by member port firmware. + * + * @param bonding_port_id + * Port ID of bonding device. + * @param member_port_id + * Port ID of member device. + * + * @return + * 0 on success, negative value otherwise. + */ +__rte_experimental +int +rte_eth_bond_fw_create_get(uint16_t bonding_port_id, uint16_t member_port_id); + #ifdef __cplusplus } #endif diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c index 239f86ee92..83957830a9 100644 --- a/drivers/net/bonding/rte_eth_bond_api.c +++ b/drivers/net/bonding/rte_eth_bond_api.c @@ -1170,3 +1170,31 @@ rte_eth_bond_notify_members(uint16_t bonding_port_id) return 0; } + +int +rte_eth_bond_fw_create_get(uint16_t bonding_port_id, uint16_t member_port_id) +{ + uint32_t i; + struct rte_eth_dev *bonding_dev; + struct rte_eth_dev *member_dev; + struct bond_dev_private *internals; + + if (valid_bonding_port_id(bonding_port_id) != 0) + return -EINVAL; + + bonding_dev = &rte_eth_devices[bonding_port_id]; + internals = bonding_dev->data->dev_private; + for (i = 0; i < internals->member_count; i++) { + if (internals->members[i].port_id == member_port_id) + break; + } + + if (i == internals->member_count) + return -EINVAL; + + member_dev = &rte_eth_devices[member_port_id]; + if (*member_dev->dev_ops->bond_fw_create_get == NULL) + return -ENOTSUP; + + return member_dev->dev_ops->bond_fw_create_get(member_dev, bonding_dev); +} diff --git a/drivers/net/bonding/version.map b/drivers/net/bonding/version.map index 3bd5e8ad11..12589f61b0 100644 --- a/drivers/net/bonding/version.map +++ b/drivers/net/bonding/version.map @@ -32,6 +32,7 @@ EXPERIMENTAL { global: rte_eth_bond_8023ad_member_info; rte_eth_bond_active_members_get; + rte_eth_bond_fw_create_get; rte_eth_bond_member_add; rte_eth_bond_member_remove; rte_eth_bond_members_get; diff --git a/lib/ethdev/ethdev_driver.h b/lib/ethdev/ethdev_driver.h index 39316a7a29..09d85ad101 100644 --- a/lib/ethdev/ethdev_driver.h +++ b/lib/ethdev/ethdev_driver.h @@ -1231,6 +1231,21 @@ typedef int (*eth_map_aggr_tx_affinity_t)(struct rte_eth_dev *dev, uint16_t tx_q typedef int (*eth_bond_notify_member)(struct rte_eth_dev *dev, struct rte_eth_dev *bonding_dev); +/** + * @internal + * Get the status of specified bonding port created by member port firmware. + * + * @param dev + * Member port (ethdev) handle. + * @param bonding_dev + * Bonding port (ethdev) handle. + * + * @return + * Negative on error, 0 on success. + */ +typedef int (*eth_bond_fw_create_get)(struct rte_eth_dev *dev, + struct rte_eth_dev *bonding_dev); + /** * @internal A structure containing the functions exported by an Ethernet driver. */ @@ -1473,6 +1488,11 @@ struct eth_dev_ops { /** Notify the member port of bonding port information */ eth_bond_notify_member bond_notify_member; + /** + * Get the status of whether bonding port is successfully created by + * the member port firmware. + */ + eth_bond_fw_create_get bond_fw_create_get; }; /** From patchwork Tue Dec 26 07:28:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 135572 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3297A43795; Tue, 26 Dec 2023 08:29:10 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A7D88402E1; Tue, 26 Dec 2023 08:28:53 +0100 (CET) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2139.outbound.protection.outlook.com [40.107.212.139]) by mails.dpdk.org (Postfix) with ESMTP id 76C18402E8 for ; Tue, 26 Dec 2023 08:28:50 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JQXP9ujeB5Z6DXM+jnkC6pU+hShy9icwdPBvbDVDm4tDAw4y4/t8+OjswQjAAVMXLzULzfnd7i+x8AL3tl417W+E1af0mEcBlX4QXp9bAlraUfjC7UfXr87nqg6RQ5aVq1itsv6N/sOrJQ4mhB7PapS9QyOkeJSTFspTaqgDTx6HLnwn0X9ukRQ/iP0HbSDd2DqRVODKcEj3fZ4XEh3l16eILr8mhpvD90SdwIZHNqyWPT7AozY2GdMCypOEq2sxfSyRUW3s3HsA0ki5jBq/39dchP6sDV8xVV4Y6F4gNBrWUbdSowoPGyUHCDZswg/1jUrTO5iLb9ETJHbCQGLqxg== 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=AjX8PEI5ai1ucLQeiDrGhReh+XaOVMxUFKY+zAhWpmo=; b=R3Mlt/gSONk5a0c41z34AnTLaU7H+JWmulWXNDmQcV6aIH2UkXZ9J7wd2XOeaSzJeJjjWh98vtPqHWEqBnn7xM/xG6GC20Po090BX8jNIvjQ/e0zYQIawBumDWmabrYov30b1Ll8fU+Zv6aHML1j/hFGVbvoLui1ZQM27ll+s/fQUmx9wvu8Ms9YYN4S0C+5QdX1v1vGcZuoLHs/ysLYIrLAQj1bLLjk9rQaCDVwOpltUfMz8fuJaoUkcoRdPgA+uxzySw0jX4cmpVPl3zlgeee8ZSt1a3n14Qz4GPFWBfzQw7s6hYyhPWEhFPlY6VwtAm2g7Ier621l7Har6g4Nzw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AjX8PEI5ai1ucLQeiDrGhReh+XaOVMxUFKY+zAhWpmo=; b=MD7ZSiz3NfvBs3nh9dR+c7hGAKcyNtfqcab8eAvEIJPzvvihtZSUIdwmyWfVrsZpYomtARK3Yvm6VU8PgCnM3YSgJZU05jH+poZ4kpLoWBo0FnOWqZH0EcuHximwiW+0no8ZbXw1LNAiNkyNsioZu95hhrRSChr191qUt6mSgEg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by CH3PR13MB6506.namprd13.prod.outlook.com (2603:10b6:610:1a3::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.27; Tue, 26 Dec 2023 07:28:49 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.7113.027; Tue, 26 Dec 2023 07:28:48 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Long Wu , Chaoyong He , James Hershaw , Peng Zhang Subject: [PATCH v6 03/14] net/bonding: add bonding port arguments Date: Tue, 26 Dec 2023 15:28:13 +0800 Message-Id: <20231226072824.3163121-4-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231226072824.3163121-1-chaoyong.he@corigine.com> References: <20231226023745.3144143-1-chaoyong.he@corigine.com> <20231226072824.3163121-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SJ0PR03CA0239.namprd03.prod.outlook.com (2603:10b6:a03:39f::34) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH3PR13MB6506:EE_ X-MS-Office365-Filtering-Correlation-Id: bbd17b2f-fffa-4a0c-94ab-08dc05e44d3e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qgVWiT6sNSUmld1ayVHR0pQ8dBDa8TYEvxYebTz7LE5wbzhc0FVKbzJ0FUtBvo09YL25e7E9G8raGyrp1XlmZf1fK62aVD2ZxG2sjkQsB2B6pPXmdxuN1G6py0G6uoC/FHNrAkwkzO7wi6ebC1g9ziZFhvotC+h7e/4L/gfpjjWsUFhhR5c3yV0daj7hIgJ5bBgFQkh3Tsov3wmAqNgr76ES67CDoTa9+9oe9Kuwj7cju7X89nKknV4sMPtTTD2aDX4eiADfvj4yEQzhu1PNt/0yOIgOF1K0vmQJoPBnTsQmL8lNPyFXux2U0J8fFCiKmiXhDfp0D/GFvv3KdPiFbhDNZvlIedjzT4UCUia4FfrmJMrL9OhSa7OgOZ7d0Tk06fTnpF7Gug+NxRHjlptrPb/wN8znP4t0wQMP1acmQ60tsqiNQzFH5hiWl0gWOMzAiVSGZAvnfg3LN2jDGlZ5XdcrdXqkowcCLoD7j9ea9kG+7jiO2athcL9Kkj1ccIWIN8eS7G70ICAxDMkNbi2Aes8rE4QOYZo2IRFI/xY9GcqEYHkAlshZuSLV7wqHexnjGXt6kp0NadKHhcqvfUY+pWoP1rklWp0fJejZRczUvR5bOTQ58IPfI0aoKPW/DAfrwRX3ijELPjTf/6hOfaiho8QN829NvsYoX8eiKRN2CgI= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376002)(346002)(136003)(396003)(366004)(39840400004)(230922051799003)(451199024)(186009)(64100799003)(1800799012)(107886003)(26005)(1076003)(52116002)(6666004)(2616005)(6512007)(83380400001)(5660300002)(44832011)(4326008)(8676002)(41300700001)(2906002)(8936002)(6486002)(478600001)(316002)(6916009)(54906003)(66476007)(66556008)(66946007)(6506007)(86362001)(36756003)(38100700002)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 1HTsGMdknv0OEhTtRn8Pn6Hq/JTulWQvEvnFIZAH8ftTy6MvK8++gVngiigWlh05SDeftLMLFM6lzHg+A1tYYb0NgT0Sntf3wV/zWIegVCAFuJ+bEOCKSE5vb+ZePLv0BWEA11jxUOul91mJHEbCIcgAXwrwaujOEzzR+aOd2rrI+TIdQdZUeKUjFxmc0t6uhu+RBjabZ0J3ni7Bnenqe+hC8uDS94qKc6AiIbPMDt5gqt5d6Qs3W8WEmKhkp1YoshnWr6cz7kyAMmywmAIi3C90Q+od3ATsalUJns4nr1/puPUTvKPI2lJeP1Qhdc0t9/KyjANPXr4bzXqInXCkmDCtxayWt3ipQOE3UOVU8oViQwJzVU+9Bf0a2k5vJ/8LAqRH1rEfN81yKqFz/B42TI1W2gSyWazeKtY4KkYq7UdTi2tzu+k3YHQl98T1pxAQAEX1R1hfgq6UxGE551i8x598zOlzM9ZdFh5C6YW9GyIyFyqWDoVFyHFNObHAoi2pnsv1osVmUmAP080bAVbmBm8fYkH/BOvvHBdL0JNkenCQDAG3sfwygPdQKJMRH0WbcS05gHGQG1uwBM0hvBnIB1KH1PDlUC84kyGv2Rqijz8v0c7tp5lK0nU7q9MJQ2jM9Ia9Khp40HurP7ShfdMori9Mbfhsj5wqBK8Km9qNrZDngOlzT0F67qxN2c3WTCr1dy255qsplKTIBT/SyYfxoCa1gDzdRx8wJ8DiuJ+U2LCb8K8GzZ1atFPD7XpOUk9ExS7FfgeXmC5a9Eq6g7xph4wdDuw/B4snwBaGhlN0SJWTPQsZ249UJcxXDylWl/6rL1VXaD2CsXIl6RPGhMokkd1+lQhT5yZMv7HSFxQiPIDqxAJ3erWUwIysG3C6dKzNWZh/zLyVfLRiBTaQZtpn3i0c8IdDPde0qqk/NpSjFIvzV6nz+ySBuimv3T//3rBsUiUKHoIjF4hA8LiPdYxUAL75TJvdAfYjPSclAE1NWL9QCcuG6u2OmnclhJYJIPJCuW6fVzJu/j5h6L7WDJxMjYjBIeQ7Y6MorlHLpGvraaWD9vTRvqoz5ow+QRDRExzOWuY40/vlEUkRyVExJSyVRPaody19srod5iwPTGgPg8J3kA66fYJvIJLMSxOxQ/07pDn318yGkxYsytUzBEGSKk6hkB2/xMM4gac1d27cpABAh3oNe9RYoBbuSO3yv7uzyC3Jip1taKf/hAmYLPf9anGae75T8gb6hgEcLeSh8BA1hCMICRdr1JsSWzfSLPyovmHQVFC7pnnf5cabyEL8YSw6/HlwVqAlpnIUiwLkrMDQy11bkAcr9Qy1Xg5i2+o8C+xyjlnHIscJpre4VgGazIu5Mf27PjbKh+a7RcAX0IZ13L8P6SBk7FTB3xpC63Brc4ESY+hCGbr+KcJysszukqWSQpoQOwZu0SEsYOqDGiZ6NRoKBpP6PMS+erToKJdX0FCB7IgcGP80+uuPjIksKS9lQtaqRvgyp47CBDlY7WSrp6QgGNvnOsjJEVG0r/Ph3qqI6dfj9tmGlDeYBhX2AONa6WGmNGYwtt2vY+bXXzKjEWIagd9Gr+88zZPfFt9D7pdbX3gX0JvfRpTIXQgOLg== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: bbd17b2f-fffa-4a0c-94ab-08dc05e44d3e X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Dec 2023 07:28:48.9333 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: lXEhha89PsMCc1haV0KJODgPh9IPPZnMlxq6xwBY7faPbWQUpM4/8u8P/dEaQkoaJOlExYXhVwxcieVOifksHtcDcXic4B/IeHb6CiX/qrg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR13MB6506 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Long Wu Include the following new arguments for bonding ports: - "notify_member" to enable/disable member notification. - "dedicated_queue" to enable/disable dedicated queue. Add these two arguments in initial argument. Signed-off-by: Long Wu Reviewed-by: Chaoyong He Reviewed-by: James Hershaw Reviewed-by: Peng Zhang --- drivers/net/bonding/eth_bond_private.h | 10 ++++ drivers/net/bonding/rte_eth_bond.h | 14 ++++++ drivers/net/bonding/rte_eth_bond_api.c | 14 ++++++ drivers/net/bonding/rte_eth_bond_args.c | 44 ++++++++++++++++++ drivers/net/bonding/rte_eth_bond_pmd.c | 61 ++++++++++++++++++++++++- 5 files changed, 142 insertions(+), 1 deletion(-) diff --git a/drivers/net/bonding/eth_bond_private.h b/drivers/net/bonding/eth_bond_private.h index f69e85c199..f9603a0f6b 100644 --- a/drivers/net/bonding/eth_bond_private.h +++ b/drivers/net/bonding/eth_bond_private.h @@ -28,6 +28,8 @@ #define PMD_BOND_LSC_POLL_PERIOD_KVARG ("lsc_poll_period_ms") #define PMD_BOND_LINK_UP_PROP_DELAY_KVARG ("up_delay") #define PMD_BOND_LINK_DOWN_PROP_DELAY_KVARG ("down_delay") +#define PMD_BOND_NOTIFY_MEMBER_KVARG ("notify_member") +#define PMD_BOND_DEDICATED_QUEUE_KVARG ("dedicated_queue") #define PMD_BOND_XMIT_POLICY_LAYER2_KVARG ("l2") #define PMD_BOND_XMIT_POLICY_LAYER23_KVARG ("l23") @@ -319,6 +321,14 @@ int bond_ethdev_parse_time_ms_kvarg(const char *key, const char *value, void *extra_args); +int +bond_ethdev_parse_notify_member_kvarg(const char *key __rte_unused, + const char *value, void *extra_args); + +int +bond_ethdev_parse_dedicated_queue_kvarg(const char *key __rte_unused, + const char *value, void *extra_args); + void bond_tlb_disable(struct bond_dev_private *internals); diff --git a/drivers/net/bonding/rte_eth_bond.h b/drivers/net/bonding/rte_eth_bond.h index 9a8bed0346..84dd39b12f 100644 --- a/drivers/net/bonding/rte_eth_bond.h +++ b/drivers/net/bonding/rte_eth_bond.h @@ -351,6 +351,20 @@ rte_eth_bond_link_up_prop_delay_set(uint16_t bonding_port_id, int rte_eth_bond_link_up_prop_delay_get(uint16_t bonding_port_id); +/** + * Set the flag that whether bonding device enable dedicated queue. + * + * @param bonding_port_id + * Port ID of bonding device. + * @param queue_flag + * The flag of enable bond dedicated queue + * + * @return + * 0 on success, negative value otherwise. + */ +int +rte_eth_bond_dedicated_queue_flag_set(uint16_t bonding_port_id, bool queue_flag); + /** * Set the flag of whether bonding port notifies member ports. * diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c index 83957830a9..32fa761baf 100644 --- a/drivers/net/bonding/rte_eth_bond_api.c +++ b/drivers/net/bonding/rte_eth_bond_api.c @@ -1114,6 +1114,20 @@ rte_eth_bond_link_up_prop_delay_get(uint16_t bonding_port_id) return internals->link_up_delay_ms; } +int +rte_eth_bond_dedicated_queue_flag_set(uint16_t bonding_port_id, bool queue_flag) +{ + struct bond_dev_private *internals; + + if (valid_bonding_port_id(bonding_port_id) != 0) + return -1; + + internals = rte_eth_devices[bonding_port_id].data->dev_private; + internals->mode4.dedicated_queues.enabled = queue_flag; + + return 0; +} + int rte_eth_bond_notify_member_flag_set(uint16_t bonding_port_id, bool notify) { diff --git a/drivers/net/bonding/rte_eth_bond_args.c b/drivers/net/bonding/rte_eth_bond_args.c index bdec5d61d4..8a3e4656ef 100644 --- a/drivers/net/bonding/rte_eth_bond_args.c +++ b/drivers/net/bonding/rte_eth_bond_args.c @@ -20,6 +20,8 @@ const char *pmd_bond_init_valid_arguments[] = { PMD_BOND_MAC_ADDR_KVARG, PMD_BOND_AGG_MODE_KVARG, RTE_DEVARGS_KEY_DRIVER, + PMD_BOND_NOTIFY_MEMBER_KVARG, + PMD_BOND_DEDICATED_QUEUE_KVARG, NULL }; @@ -297,3 +299,45 @@ bond_ethdev_parse_time_ms_kvarg(const char *key __rte_unused, return 0; } + +int +bond_ethdev_parse_notify_member_kvarg(const char *key __rte_unused, + const char *value, void *extra_args) +{ + bool *notify_member; + + if (value == NULL || extra_args == NULL) + return -1; + + notify_member = extra_args; + + if (strcmp("enable", value) == 0) + *notify_member = true; + else if (strcmp("disable", value) == 0) + *notify_member = false; + else + return -1; + + return 0; +} + +int +bond_ethdev_parse_dedicated_queue_kvarg(const char *key __rte_unused, + const char *value, void *extra_args) +{ + bool *dedicated_queue; + + if (value == NULL || extra_args == NULL) + return -1; + + dedicated_queue = extra_args; + + if (strcmp("enable", value) == 0) + *dedicated_queue = true; + else if (strcmp("disable", value) == 0) + *dedicated_queue = false; + else + return -1; + + return 0; +} diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index d2c890075a..b3a37a36c8 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -4246,6 +4246,63 @@ bond_ethdev_configure(struct rte_eth_dev *dev) return -1; } + /* Parse/set notify member flag */ + arg_count = rte_kvargs_count(kvlist, PMD_BOND_NOTIFY_MEMBER_KVARG); + if (arg_count == 1) { + bool notify_member; + if (rte_kvargs_process(kvlist, + PMD_BOND_NOTIFY_MEMBER_KVARG, + &bond_ethdev_parse_notify_member_kvarg, + ¬ify_member) < 0) { + RTE_BOND_LOG(ERR, + "Invalid notify member value specified" + " for bonding device %s", name); + return -1; + } + + if (rte_eth_bond_notify_member_flag_set(port_id, notify_member) != 0) { + RTE_BOND_LOG(ERR, + "Failed to set notify member (%u) on" + " bonding device %s", notify_member, name); + return -1; + } + } else if (arg_count > 1) { + RTE_BOND_LOG(ERR, + "notify member flag can be specified only once" + " for bonding device %s", name); + return -1; + } + + /* Parse/set dedicated queue flag */ + arg_count = rte_kvargs_count(kvlist, PMD_BOND_DEDICATED_QUEUE_KVARG); + if (arg_count == 1) { + bool dedicated_queue; + if (rte_kvargs_process(kvlist, + PMD_BOND_DEDICATED_QUEUE_KVARG, + &bond_ethdev_parse_dedicated_queue_kvarg, + &dedicated_queue) < 0) { + RTE_BOND_LOG(ERR, + "Invalid dedicated queue flag specified" + " for bonding device %s", name); + return -1; + } + + if (internals->mode == BONDING_MODE_8023AD) { + if (rte_eth_bond_dedicated_queue_flag_set(port_id, dedicated_queue) != 0) { + RTE_BOND_LOG(ERR, + "Failed to enable/disable dedicated" + " queue flag on bonding device %s", + name); + return -1; + } + } + } else if (arg_count > 1) { + RTE_BOND_LOG(ERR, + "dedicated queue flag can be specified only once" + " for bonding device %s", name); + return -1; + } + /* configure members so we can pass mtu setting */ for (i = 0; i < internals->member_count; i++) { struct rte_eth_dev *member_ethdev = @@ -4283,7 +4340,9 @@ RTE_PMD_REGISTER_PARAM_STRING(net_bonding, "mac= " "lsc_poll_period_ms= " "up_delay= " - "down_delay="); + "down_delay=" + "notify_member=[enable | disable] " + "dedicated_queue=[enable | disable] "); /* We can't use RTE_LOG_REGISTER_DEFAULT because of the forced name for * this library, see meson.build. From patchwork Tue Dec 26 07:28:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 135573 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C5E6043795; Tue, 26 Dec 2023 08:29:17 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B812D40608; Tue, 26 Dec 2023 08:28:54 +0100 (CET) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2105.outbound.protection.outlook.com [40.107.212.105]) by mails.dpdk.org (Postfix) with ESMTP id CE70C402E1 for ; Tue, 26 Dec 2023 08:28:52 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CKH9BbUPL0xrj1wvwjGfMVkUP6JpPEJqWu0R6pU9Y1x1p/na7yysdCJgZV64GhEPBnE/UZSli16kYWJN85U3meO745UGpTS+r1vPP2Lh1Ju1GF+Ne3lXuiPS4CCzy2WiunbvQqqrcDOVn0bYRNFi814/KUhL4fEqDFjlra2IjJSZqrHgVPaF9bSHJDFoq03gh+kPb54OcFqxyWv6wzKxJQTeF7aZoHeuwGj6l8FEtaCl3hZnH2lal1eySHMkRI/VZe8j+ASMtvrOazurky/Ekps9E4WEFboPjAejjlb3dNFcZI0TIM6um+gX0vKkbjC0vUhHqr7cIlshO7/oHRFIzQ== 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=UvhjJGhyC0UM6fXZg/Q/G0VntG1y7xTC3QWy8sigACU=; b=NxyvsD5UdbLHTpIfEaxrA9lko4i26UuqiG29K2xBy0Swc/bc2BPZ6b9dqngMjDmOneIZo+EbEq3+tZW2sps6ITFLTt+brD/NnpFun62Mxo7MHb0kjbI45EpxHhAnxjay6PnlfIvGYkI6eXjy3IVEkU7mNG0iBqXFDayxxBYQ0KjE2iS7R7ArVlm/N4iHSfVUJaPNun724KUkMZKqYaM9MbHnfY1QuSHoBd2UVdGPnBeqDlO4y3nfF8rMD7PvEiIY75yCD/bnp63Yn2ItYG1maVJ5/gC8yjornCC8pYOBu3SqqFrA8g6w7KsqOfXMbHWwqgoKbbhUV5388jgtpugZfQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UvhjJGhyC0UM6fXZg/Q/G0VntG1y7xTC3QWy8sigACU=; b=eVvO/Tcu8w7TwMSVk136QWT/sXCYyzbIsMaEc6lE1pMWJSkuiU4bnkA41oQmu6beIm/zn2quYgo5DQpIaRZpTFFsdm5aH7p+00R42OH/mtoKZJknai1Re2PcCVXpCPakyJd2lV8Cu3/5c3bryGk6H557R5+AHpB9iujJw13k5qQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by CH3PR13MB6506.namprd13.prod.outlook.com (2603:10b6:610:1a3::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.27; Tue, 26 Dec 2023 07:28:51 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.7113.027; Tue, 26 Dec 2023 07:28:51 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Long Wu , Chaoyong He , James Hershaw , Peng Zhang Subject: [PATCH v6 04/14] net/bonding: support add port by data name Date: Tue, 26 Dec 2023 15:28:14 +0800 Message-Id: <20231226072824.3163121-5-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231226072824.3163121-1-chaoyong.he@corigine.com> References: <20231226023745.3144143-1-chaoyong.he@corigine.com> <20231226072824.3163121-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SJ0PR03CA0239.namprd03.prod.outlook.com (2603:10b6:a03:39f::34) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH3PR13MB6506:EE_ X-MS-Office365-Filtering-Correlation-Id: 657131e8-2e4d-401d-6f69-08dc05e44ebe X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YNdtmWmmpn19oY9LNEhKiQp/S9847OY7GVZVAypGXXpR2jB5Q1RBaDdejh3LHoETQrZWVm4B+4PrnaIiMCtkbz+RyNUmirkWLeRJed7+ZZbRSu/TQeJKVy776xle9pFfcPh5SsAiK1kpLhCoDwEYTgAzsyBxH2HktkrbbV/topK5icoIuzGcj95dqCP7s2th0af2xcMDWKNd5gehjge87d/qAzpRY3kV7Fj+hxManNLDZl/HF5vo9zDL3wXY0C0vgMtTZACoxmm8QvoU6XQEGs0mKAZDkg/QqKJxRssXdSolNC9DNqCLWeCkxnh/lGO977an64Kpom0qgGzfBuQQUhXrmvSlqriYrHqHDymh2daya8LayxN1n+FxodiatpMjRz5GBk6c/e//h2KD22QTEMcF0xOMPR/Os+aj7o1MLA/ppVIkxF19qJ2m5M23Ko4PsW+7t5j5LTjplUFklK4nQ6Vh09Kfw8jAc/821bvTTMpXRrxDBcNMOdiaPTuac/RpRZC3uNGojWcwM15moAnpfccCf008QZLFbrzV9psc5U+vUCYeluCwRbUgK9tmNdNGO+deMzYydQ4csSVl5MdsFoEqeW0tHO/jYlf/2+5Vw3jcsYrmmoxI+TbbItIVIVPqF+PPT8ccf2vvbXSx+1bnx1/jOBcbRKc0VqAMvGy8AaI= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376002)(346002)(136003)(396003)(366004)(39840400004)(230922051799003)(451199024)(186009)(64100799003)(1800799012)(107886003)(26005)(1076003)(52116002)(6666004)(2616005)(6512007)(5660300002)(44832011)(4326008)(8676002)(41300700001)(2906002)(8936002)(6486002)(478600001)(316002)(6916009)(54906003)(66476007)(66556008)(66946007)(6506007)(86362001)(36756003)(38100700002)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XlmEDX1lEf/VtJjyHA839+lKP2u5dorNtKzo5g+9gMkYDWcwKr0FYMRBzs5Z9tjBiLhvgtzS0bSKP8OKomzT63ovKDzJjxExrgRibOZKxkLuwF8W41AqPl2qvnEgPi1auPkV8WclWdGmyvbTpBJb0AWJRqC9tue8Nrax7BxhsgolMP7c+tuTpXuRlSVdKewQEXxbq8ZG70tZTQ/9N0LJm51xC+VXf+d7/b5KBiL2vnBaCB1PMqwOkh+h6gFbCll0MxRLdoXymEjOJeln0zUdyly0h3UvrlVripklQMpxXhoS0dbeBEppCVEL0Hrfqqs/4xyuGy93SWnIFQ28AqvFNd/ixZ9g82WUiCFZI7h8Cz5XJFnw4tE7X0VnPEaCb9QYjOjx/lEsXrqw2v+h+PoH4Jk+aAFu5GRulejCPLQAy7R/vjlpTfZSC+16kS/adqSC9aoQeDC8yl2mqLKTGfO89jpSpv6BlhfN39mrNlCosvGo5JAWW20WfrcwtPYAKANqDDYIisc16q9nh2NBZbrktBI+l69ZJtLtsKjy2FH0MHBcQj8XnRIpWEOm5HNCVtX2vmYARHzGwVwB4eZHC4FYA4wuA48JHYeFnLSeA2BRNWtVI4PAe0Zl9uQq0GYztpobutoHamtXEuc3JDu7l8G+/FIn+U3NjojonbtPRJwN5HXfQ1jdNX8c6Y2Z1FFvefofLRwnDdXr+KVKskyP/HSxf7DlO21p3slEMzT44u0sBfDjG2wmsh3jd9djAFACZE44oCIso6ar3oot6k+/5yUFRwTGxriLlvONH590WphDv6o8yX60O/5c2JAMozRQbCVOeCEs00WFfKLIiakQa+blmx/8x5Z/DQKmM5kZzK0FSpfdgrCap7bZQMzlKIsNcgGtfR6yMy+1UzxDkoYLsjSWUrnmmeUiCQGwRZpXL3tgkJhyR7wAp8OW74GJLjaC5Lune2qy9I/Z4Gago1tp2HJaWm5mWXJ/Cq3yIA96ln6dW6vrQnQ7DLgFh4rsnxqTOYVSVg7G53kqOVGF+haoVYsCLd7dm/TJmWEtPibirg2CVPF9xibDRyg4KlcZIH+OetilHLPR63ttxMrFlD2eWEPQZzF6ZRt9mumkyT0GFdIaXL3sReFLAFDHH5GqiTLMpihnudV6hinj/wGQeObAa6RmelcuchECqL5Jxe6eYZNHza0adg7XmKQTRZka0M60w+6j+8xcou6fynKgYYONtB0XDv0NU2ka90b0FxHUDIjwLpnLQFwgYS0anT55CgGi16ybjOnXQ+/2w1CwXYkZxVje14HDPt8URKINBr+zqMxf0tDPdl5s7ZxCjAUAAaiVqU9BbPWma+8XY3jj4rSjqIy9so4hfg9W5cbMiLGA0pvm66kZS9O6QmB97yck4LP79brKc8ClwVnGtBEfXl/ydjEiG1CeA851cUtICvWQeKIQCKqKngQ/9QkPW4TisQVja8+Pc0aNCoYrXjF2Cg3B/QRaCcVEcwD1JkPgGrwZ9xi989iv5oGpuEHe+DeBFWD1hWLLHwwHHNPRiYoDK/x92CCELLmf+HtWJS5syUoxHWB1Pr9psqb9xMQQwT/9+TgaJHIHKfNUf48gq59yNhE+o2eUIg== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 657131e8-2e4d-401d-6f69-08dc05e44ebe X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Dec 2023 07:28:51.4252 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: zZKjDiO8DkwMXoBUT9RCgdX2ess8iJrtYCs28tNb3XYRW6NMVQlMqG+WcCNpXOVNDmAtdPzSRr7GEvlbP2dW/Ol12BHu3znN0t0oPyTS4AY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR13MB6506 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Long Wu Several ports may share the same PCI address, like NFP representor port. So users cannot add this type of ports to bonding port by "--vdev" argument in dpdk-testpmd. But the port's data name is unique between them, include an option to add such ports to the bonding port. After adding this feature, users can create a bonding port that member port is this type of port by "--vdev" in dpdk-testpmd start command. For example: dpdk-testpmd -l 2-10 -s 0x8 -a ca:00.0,representor=[0-2] --vdev 'net_bonding0,member=flower_repr_p0,member=flower_repr_p1, mode=4,socket_id=1,xmit_policy=l34' -- -i Note: 1. "ca:00.0" is NFP 4000 card. 2. "flower_repr_p0" and "flower_repr_p1" are NFP phy representor port's data name. Signed-off-by: Long Wu Reviewed-by: Chaoyong He Reviewed-by: James Hershaw Reviewed-by: Peng Zhang --- drivers/net/bonding/rte_eth_bond_args.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/bonding/rte_eth_bond_args.c b/drivers/net/bonding/rte_eth_bond_args.c index 8a3e4656ef..b320eb3038 100644 --- a/drivers/net/bonding/rte_eth_bond_args.c +++ b/drivers/net/bonding/rte_eth_bond_args.c @@ -70,6 +70,9 @@ find_port_id_by_dev_name(const char *name) if (strcmp(rte_eth_devices[i].device->name, name) == 0) return i; + + if (strcmp(rte_eth_devices[i].data->name, name) == 0) + return i; } return -1; } From patchwork Tue Dec 26 07:28:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 135574 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A22AB43795; Tue, 26 Dec 2023 08:29:27 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 41EB940693; Tue, 26 Dec 2023 08:28:57 +0100 (CET) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2134.outbound.protection.outlook.com [40.107.212.134]) by mails.dpdk.org (Postfix) with ESMTP id 071DE40647 for ; Tue, 26 Dec 2023 08:28:55 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AAJuGGN5NhH1cizbpGDWZVJjj2jwf1QP99JFVG5ZimryNKcSGQ+MeBr0dSiTJbhXEYh1oxpZeySj1qqeY/+V2oX9q+heznFP+5D7Zm3Dk//9wYFsiccBGnM8xNu1mI8fEqP+jonnnqGPkYNdDDP1+wXeF90xsFgCK9qL2lkDhHHg6VqlvU5ig5PkbGQM4AtJRCPcP0Iid4XUK2Q6vPqVKkxGzJVstoPF212cLyBsSY0+ljazlCfxox+c0VKn8ipO6Cyjf/z/pvgjHiz5L+87Zh4rTIiX1ARAcubXrsBOOTewYY6qwkomzBlsyjVCH2snFN2csj/IpiIrACnyM6zDIg== 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=8QiZArDINC9gYrpI91mjnZx3kDrpJSb0TBHMPG868CM=; b=obbBFu7/zTyJuRNKToKp7J/bspNBljh54k1grmT/e4fpkF988NgiX72/TJhu8diy+cNkThCM1UOUZVYBtSIZhYLN4hcyEBt1iQcbDr/04DYs1ahl6/vGO339oBN71Lu0oyz++sP6AXKaB+ZdngQUBjdZwjD6abnShVjgbuhzE+tLPjy+m/AYRQjkiQa5iKY4om8iXhv6ycgP7HlLmEXn/Qy7MoJxevO5TxDGpwKPgD0teYbBCUjRhGv+EkIP2TdgSjdjWeRewzJHawjsllw83Y3DOLTjmwdWVo+TFOfMB/uTSu07cjUXkfiBvnw1J/xhSFpZN28FGivIu5PYPBUbBg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8QiZArDINC9gYrpI91mjnZx3kDrpJSb0TBHMPG868CM=; b=VGiAFKFpwrKoC7LxPdtB5DJgFju1eGFs/bCI5lZLiPB2ApMh/ioGqa3d5Ht7M78A7o5RkK3NKAo1+/VSeVeeb+iyEhf8xvN9n9d6+tBjjYxCcSE6qbjbW4+NohHFevvLvLLdcUvc3VcVYIpbGE5AchHgtNhXK1m8Q3HV5TD/8Lg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by CH3PR13MB6506.namprd13.prod.outlook.com (2603:10b6:610:1a3::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.27; Tue, 26 Dec 2023 07:28:53 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.7113.027; Tue, 26 Dec 2023 07:28:53 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Long Wu , Chaoyong He , James Hershaw , Peng Zhang Subject: [PATCH v6 05/14] net/bonding: support checking valid bonding port ID Date: Tue, 26 Dec 2023 15:28:15 +0800 Message-Id: <20231226072824.3163121-6-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231226072824.3163121-1-chaoyong.he@corigine.com> References: <20231226023745.3144143-1-chaoyong.he@corigine.com> <20231226072824.3163121-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SJ0PR03CA0239.namprd03.prod.outlook.com (2603:10b6:a03:39f::34) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH3PR13MB6506:EE_ X-MS-Office365-Filtering-Correlation-Id: 48d719b7-10d3-47cb-eb26-08dc05e44ffd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HF3JgTQ85u3WrZ5rTJOXGy2x5Wn2GkM2YXZH8inpCZpvfbWeRD6JOx4m4a6D1mF3rE7jDppS37okW6P0W7t3c/93Ufnfg+Rqsntv4NDsiE0h8D9xXno1MNm/2/cM7UrRDWbDdGN9OiTxdneu5LH75cpDG9/1q6fn9IkScfX1oPb9BVWHG/nJnJYS8eaSwZnqBhC+b3VvbYGMiPD3yzPER+Du+lKn7fcr1m3qYOfM+LnoG5DIArtVB44tG+Kur+4IPsz7hF2llRvdXBVEAEtTS+zI5njQ4kExNQCua+RUeJ0GUR7i0cZVt8rfu6NL3xCCgGi+4idka3OlTgmn6+TeritlEsecEw4j4XC5oHWXZdrdzcudup6Gl438HkEPvLo3fx7ldiT9Ap9TF+hwL3yzSWWbDofOuHzAyY8+bmmnEdQWWMy6xN4qdzmeEsSMxYyylqLtzIOrU1cLWUfGGsFa7qL/197DPnaIdL5ixWuk9nO+c6CWfcZ8dlxIXeTXlMNlS+kgGmTUxJVOt95N8OSFHbyZn5BAoAodC4XWlbscZ9qfN16ccqionda1c1DMeeEyWtZvcUp1CbyY7Agfs80ukWqb7pHAcq9LyWHk+G3+Pe3sOlqk0tLF2WJW0RvLSvOxVnssGxrM11TUwyUro0IX0aT94dHJDVaXpbpI8pRBEwg= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376002)(346002)(136003)(396003)(366004)(39840400004)(230922051799003)(451199024)(186009)(64100799003)(1800799012)(107886003)(26005)(1076003)(52116002)(6666004)(2616005)(6512007)(5660300002)(44832011)(4326008)(8676002)(41300700001)(2906002)(8936002)(6486002)(478600001)(316002)(6916009)(54906003)(66476007)(66556008)(66946007)(6506007)(86362001)(36756003)(38100700002)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 1TDHpQtQPqlsWGH+4dSwJAXwOivucxLxHvaBrhpjE/EL8Bm1l8F14M3SZGdI8x4nxO7jAC4HC2j4eHMTyZ+pnamYl72qgtJ6QoabgWt+t4o5FytELoZ10mSQjrckdVVvCHH3L8sWCOmJopfepTcsc0W5vlJD1XqSuqAYIL4AlYvurjl7Rrcy59yT0usjOq0NzqbrJzDa/sqi1FQ4LLwKFKj79U8OkRRVcnZOvBZmtfqGqIp6BHwvYgZ+qxcBnTgmzSXOte4mySCXJPJVgCSYA0mTFqyGpfW9Ft1bczmLdbpZdJBkPCPzZRm7tFouAAcd3svMH9mWa3JrCTR8oPS+3cdvx0jz2stS1AosrFcDg7j2MrYhW/9OvJlP/RG6aL+fQYVmyznOINCPkl5f5YW28gKEJJ6NOgA1uwi62ZvtKDhR5mSBs3e8otKiN7NnzAREXVJlAoq//+6rk0V0PPm/NODmxEqSAsFtT8LuaqjAGyDVp6Id555nQhHf66hJb8LyAHXG7Zxs/e37ChNcJpRAWGPzC0JirT+H0pjIjBtb/4KnUl/XsQVQGALep4Leo1/IM27xUSCA0QldC0sMd+lvs1c8Nn6UlbLQ8H9uC5uVzj3ZtVPUPq6wcM5jh3NAHeSfezXaaUEqNCJCH3S34iJxP7z9Yc7FvMdAj4dxif8seORBL+B/ggCbS+Hm2cye8N7/w+s/QhgszGjN6qbRrcA9dLw+KqkUaRapzPKBqvCoroSu+DiJ+VyZgR6gM43bq78mBLrQ9H4wxOo29KlrpG9l2bfffBfr5T5o6gLOSCQC9/MgIs7G9L8Z1XJXvzThQbvV2QQ2Y/WPWYt89vepLvXJYVWaNkuqph2L73RWBuxDehvEJhqKpW+VfM3jDibMw4V5b7fB3ju2aXsLysEPOiS/1E+qIhmxV6imTXVHalUz0ZQybqBOVNb2uINAXXuOrcDQhamlHt53yxwcqeUoV+xifjc4JuUGuUpXPmXwtJGgHR7tddonwDXmY5kuT2aCloKxhH+LU3PLsSvIZITO/ZIj6eXrtqYD/1eVnV6kWxk6FPnihrc4UTgb250Cmh2JkxD0ZQQXU32WtJO9CAr4mDzLnUzpV6G1rzMT70HWUNLAD0HIcbh/o20iVqK8xgTtXaJeRLrfroR3N/dfq0GP2frugSUhouKrgXHy1XUfb1192bWZVtyAKLbGb4sIIGmYt/m2xr9qS/VL2P7kMPOTo7O1LMObeBL75I6V562FnbwdFhRw/b1L0GT84X1xY8NNReqRMqFKG9w6cLCdjaw8DU4nCPTJ/ZfWTkfviGraiWoKPlYy3WE6jY4J7KgDU/7/DloAnUXidzdCL/nSBfEuLwI7Xz9833dhsPFkhUrKhT8R5NXnmHXTHPaaQvpsHkyUl0zVSE6SN+qAyT5Z9t51c6bEHH+NZ4XfFoe6dng6RcHeSUhCJ40kSgaJioD0UfDZVwULy6FQZEAgG8bD+QYGGCs/RiEhkhmZ1BoqouxrHajF6su0nISyBFVabiGLFHYmmAnPY8Zwj2gCohsSXVdwP9ZOyY8sDs8tTwgy/OAN61sgTd0Xak02qI4cw7dreHZu/4LB8+38/3pwg/fbwvRKFWEymQ== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 48d719b7-10d3-47cb-eb26-08dc05e44ffd X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Dec 2023 07:28:53.5371 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: jP55jvePO3yuikwp1w+KUH6vUsXWHQEutdrBP6WGjqvJtgQ3ohWuFgfnCVtQpzLYBbcph24Yk85uAHf9uKiRr5OG/yuOiTkTMlOi4R9i/a4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR13MB6506 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Long Wu Add API to support checking if the port id is a bonding port id. Signed-off-by: Long Wu Reviewed-by: Chaoyong He Reviewed-by: James Hershaw Reviewed-by: Peng Zhang --- drivers/net/bonding/rte_eth_bond.h | 13 +++++++++++++ drivers/net/bonding/rte_eth_bond_api.c | 7 +++++++ drivers/net/bonding/version.map | 1 + 3 files changed, 21 insertions(+) diff --git a/drivers/net/bonding/rte_eth_bond.h b/drivers/net/bonding/rte_eth_bond.h index 84dd39b12f..62af9bbd99 100644 --- a/drivers/net/bonding/rte_eth_bond.h +++ b/drivers/net/bonding/rte_eth_bond.h @@ -427,6 +427,19 @@ __rte_experimental int rte_eth_bond_fw_create_get(uint16_t bonding_port_id, uint16_t member_port_id); +/** + * Check whether bonding port id is valid. + * + * @param port_id + * Port ID of bonding device. + * + * @return + * true means the port is a bonding device, false means not. + */ +__rte_experimental +bool +rte_eth_bond_is_valid_port(uint16_t port_id); + #ifdef __cplusplus } #endif diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c index 32fa761baf..5e9437c786 100644 --- a/drivers/net/bonding/rte_eth_bond_api.c +++ b/drivers/net/bonding/rte_eth_bond_api.c @@ -1212,3 +1212,10 @@ rte_eth_bond_fw_create_get(uint16_t bonding_port_id, uint16_t member_port_id) return member_dev->dev_ops->bond_fw_create_get(member_dev, bonding_dev); } + + +bool +rte_eth_bond_is_valid_port(uint16_t port_id) +{ + return (valid_bonding_port_id(port_id) == 0); +} diff --git a/drivers/net/bonding/version.map b/drivers/net/bonding/version.map index 12589f61b0..cd27c43092 100644 --- a/drivers/net/bonding/version.map +++ b/drivers/net/bonding/version.map @@ -33,6 +33,7 @@ EXPERIMENTAL { rte_eth_bond_8023ad_member_info; rte_eth_bond_active_members_get; rte_eth_bond_fw_create_get; + rte_eth_bond_is_valid_port; rte_eth_bond_member_add; rte_eth_bond_member_remove; rte_eth_bond_members_get; From patchwork Tue Dec 26 07:28:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 135575 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9A81543795; Tue, 26 Dec 2023 08:29:34 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6E86440698; Tue, 26 Dec 2023 08:28:58 +0100 (CET) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2115.outbound.protection.outlook.com [40.107.212.115]) by mails.dpdk.org (Postfix) with ESMTP id 1C5494068A for ; Tue, 26 Dec 2023 08:28:57 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PiA0/tIxBt3XCQkS+9Dw/4gEqJgPrheq8yZw0xCui3T6+VTTeqOuJx9yemYu+eCu5QrvdjNreWrS9HqQOpQyzv6XnqTCRPg8sKPIBAcaGU/GWBFVCmXoxThueLahIIeTWSF+YVMMAiS7ImbeGiGnvAdmvu8TzwfiFjmvCmwWdLNt8iXqJd4xQwbfFgGmKIv1hlL+8HXFYC2LAitDNGECvSMrJ6lVKKj1vfs792t7YYmLbfGhdP70yM7L1EUDHk9Nad9YYZriyhVKDABv2VefJ48MVM4xqpxgqsj3hJ3BwC1+79kACmVX16QYZ6meRh1Pmt+h6mZx6u+cBzYJVz9IIg== 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=twycyoVMnbqRppD/ZS5EgrBApnJbu4ugflEfR36Hu98=; b=NC11EVcm6j+AqjoBTXbteJ+TS0Y9U9SCvL1E5fl/1/kUjJp20KEKDGUH2HmhC4V7RNQnkXKHwzvnjyoCjwFuTdeMRONFABBxjupWRfJvo9YXtsh6PNerhA4Dgar9EwWJdUFm2ZBgN6Hj0Zcm3gZBkG7rHdPKjQrn2NWlgrvPyhI84FNQrJM3tmEhZk+gg+4I9M/Nu5JqE0eCqlQoKAu/iHQ7HlhpAUHpv3NMgz/Twa4emnCRIziUAHJMy73d52JRm264aV9QHUXLiW5sLcy985iJZQfSSm0xhQgiDBMZevhGHm8nT7FU0w20b3ajSwhzVnfb5yOIAh8lJfF42Lc+fw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=twycyoVMnbqRppD/ZS5EgrBApnJbu4ugflEfR36Hu98=; b=Vkp5MKwR9x83XlmtHcuOKJIzEEnC6IakFslFZLBBiwlOssPscxYXtLwF+7Zl/65PaLFy+NJRbrcTum3LlPbfejAGP7Fu7xv/+zi6ITBJiFmpfbk2WquGUNL4TYXO0UmxbHpam5XqqYEM2Hsk3robj25ejLAYv02gFFaeU9oSqmA= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by CH3PR13MB6506.namprd13.prod.outlook.com (2603:10b6:610:1a3::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.27; Tue, 26 Dec 2023 07:28:55 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.7113.027; Tue, 26 Dec 2023 07:28:55 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Long Wu , Chaoyong He , James Hershaw , Peng Zhang Subject: [PATCH v6 06/14] net/bonding: add commands for bonding port notification Date: Tue, 26 Dec 2023 15:28:16 +0800 Message-Id: <20231226072824.3163121-7-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231226072824.3163121-1-chaoyong.he@corigine.com> References: <20231226023745.3144143-1-chaoyong.he@corigine.com> <20231226072824.3163121-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SJ0PR03CA0239.namprd03.prod.outlook.com (2603:10b6:a03:39f::34) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH3PR13MB6506:EE_ X-MS-Office365-Filtering-Correlation-Id: 25b3bd4a-e111-4aff-6628-08dc05e4513d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: FrlvsgGTEeeitsPK9BXz5iRIp/DfgHeNNwXlmO3XNoDYIZO24vzFbjdcAIyKcxYehICxVuO5TTXLFAyIUsBji3+RsL/JyqMryJcMbaRc0QEIVAXHw5dKODWvUC8h7jla5Q5j2WAFwp7fwJROnV3UJ/FgZ0mJX29pIQIK2/f9ckm6z6eT9c2fkHGyOtLRogm68BH8VciENEMLYA1EnN+/6wwZDI51ajAEDOKao7s0y9Gnal+txG7tduOTrtRDvdd73g82OMKaysx9oAupRxHQoF90MNjJ7feKrl6QIeIwU4OgYjG5op4Pln2KzkP2t3VBi2MV/Aw2t3gWEVoegjWCm4bGZZbEkGnP0Ld0gm7uWF1D2fVbZKB31aXwuZQ2o/4CfBlUmuqFrxQSo+S0ecfXtRuWWTd9xRStW/17aJoz9Ct44dslBHB0A1StcTSgOMv+aoIVZ9mHcDWl0DsntvFua/UXK+XVMEUxWJpAwNZ8MCxeqRXy2LMfTM7/3v+q457apbignyoRG2yL3OYLtxQeXIL2D9mXiUl1XBme7C0Ik1fZcRMZkP6hWF99G6m+HyXIbYSE4UbXysAl3lwA+lGPzOJ7HUbnoG/zT1D4TeqM52amlqYMXMjgG4awV0RBR+swRGmMOrwn2i3XxBsvQn9DfBtCV4sGJ/BCXOq1Vm102t8= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376002)(346002)(136003)(396003)(366004)(39840400004)(230922051799003)(451199024)(186009)(64100799003)(1800799012)(107886003)(26005)(1076003)(52116002)(6666004)(2616005)(6512007)(83380400001)(5660300002)(44832011)(15650500001)(4326008)(8676002)(41300700001)(2906002)(8936002)(6486002)(478600001)(316002)(6916009)(54906003)(66476007)(66556008)(66946007)(6506007)(86362001)(36756003)(38100700002)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 6ZgI7RE3MDtGdl/k2u/t3nqUdI6VJMLhcatE71J9eWQTzItO1vMoqBX8nSQn3VMcwGmSxl4IeT0QyO7T0zyzlkPlpJKwMc87QSNOGcQX5f82sIgiv9qAGy1V0yGKgXmHdDznv4Yg2D3Fdu//xrATYic2Xj/pDVNnXxEhFOSG/6aTazQiFmXBd2ut3fXrc9IYJ6W8k4X3Mpa7mvr6LcLaj9ynkNQkzs9f4sZ8VV8heU4JQAsf+VBMuNZoDJfJOPEw509dCHN0hmI3SxhF+VdZxH4F85eAnueJe0YnZcf+cv5wlTCq+60gmezquFX7qwhUqpIfSdf79CAKTlIESBKq+PE9eRq+RqCdzZpu9lYIfdHJh+nC5kyOpeF03aE1rdcjwlDpGazt99WrvynMt2Iq+vD0SgOWCjw2wRF5PuEtRkxxOxk+mR6/ZLL5CNDYXr5qZNYxkvS8hJrfy1OFhoZxPjbXBtWld2jQ7Oug93EFcUtPguOlshp74Jxcba4P4zuPvSQXffw/APAT6H8Qmsxy+bYHCrFNtTczZQeVI9CwGJnHkc1DGtwpaxC6BvWVL5mnJc6KEr0GxpWIaWUmFZnNdpLew9YF2LzyGVH4N4eaJrBibVYV+x6qYeFKRO6ayah3nRC5uRFJOxrfay95Rp/sFmayPwJnQn6PTCX6lnl6M79BkRWpFufewfUQQjfOxVvNdUhlr4EjzvkR1p/kK6BWKXhkRtZGQvP9W+0KMf2koaUtqUHJVg/NZuHtiHOtNHqo70ynDuv/slW2IocnZy30fGXQras28rhlhfxC8yoB/TnmY83hi7Ett0gjUL8q4JgM5/fvtPzQfseA0q+vVqX5G1YGMBRK1BwyW59delIRFWxtOuU3XFLklGoupI/O7Bg/2DDXBzHLUY7BdDxvUK9AtqkgT9GLV0Jy0oQpf4EwmpEBP7x18Il78ANfFLFK6gSC2HbD5T6a7c9/JO0blWDd/FHbI2RyU5/2PbJlen3uONDi6P88jqcICX8x9QJXudbG0MD0AN+954Gk84TDmqTsRb3CkGztMeWfJAHt2tWu8UHzbSOq2aBgYXgxbHOegTCJtkn/S0cQhApR1D/1A4VS1qqhO6bd9/fwWv2Ttodz8vLjSA/o6/QuMqNHubD20LTEKgOc41nLOCzAit/j16d1VJ0vwqBHNDGgCZhRMpZC9YoUKF+t0GT4sQr3BilK/KPwYsYICHBGHCq2AZHlx1LCjKcbPLgHGBL5u49XAAi72Zo1W73VfuPYYbIE/Y17YS5hNDvpOstYuM3UWUv8sJ9++wt9v/NA+tH1jlNMMGCMHGkiJtlbwEqszhxgF78SfVpMes2Z8E2DaiJcF8VxLPzRPR8hptIePFFZUeeOWudAcH6VjhgI74JThIsayQFnX9eUWpDGi87ELvtSxy9xJOnQ4/MvbkJ0+sUZ7vOicmzz0Z0QWU3mK0bPDCx9Xn3V6rKvUwZcweW6KiGjUMpbF9ERPgGPmFsKnRvLgCvRm3FhSOPHUnFod/uBYYR0z25/Grok2XjMKtrUNERbabboQ5rRk6zXIQn3OnspN4xu8BYoqz14cx5qZ1ibzSW0ak9QVWhBcyiOPN7cKc4izt8Y4/MPtQ== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 25b3bd4a-e111-4aff-6628-08dc05e4513d X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Dec 2023 07:28:55.6083 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: KRF7Zv6k6kKW+mPSse0sGVT/Pdatso4+SET0gu0Q9a8gtoBxGxWwbvBi2mQ5l1UXfNdVg6i0sYnkAt9nSSMk/d7nKIxCYyZH7unEbE4+t6s= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR13MB6506 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Long Wu Add some commands to support bonding port notification in dpdk-testpmd. 1. Users can enable the notification by command: "set bonding notify_member (port_id) (enable|disable)" 2. If member port firmware try to create the bonding port after notification users can get the status by command: "get bonding member firmware create (member_port_id) (bonding_port_id)" Signed-off-by: Long Wu Reviewed-by: Chaoyong He Reviewed-by: James Hershaw Reviewed-by: Peng Zhang --- .../link_bonding_poll_mode_drv_lib.rst | 18 +++ drivers/net/bonding/bonding_testpmd.c | 128 ++++++++++++++++++ 2 files changed, 146 insertions(+) diff --git a/doc/guides/prog_guide/link_bonding_poll_mode_drv_lib.rst b/doc/guides/prog_guide/link_bonding_poll_mode_drv_lib.rst index 60717a3587..653d2f850d 100644 --- a/doc/guides/prog_guide/link_bonding_poll_mode_drv_lib.rst +++ b/doc/guides/prog_guide/link_bonding_poll_mode_drv_lib.rst @@ -637,3 +637,21 @@ in balance mode with a transmission policy of layer 2+3:: Members (3): [1 3 4] Active Members (3): [1 3 4] Primary: [3] + +set bonding notify_member +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Set the notify member flag of bonding port:: + + testpmd> set bonding notify_member (port_id) (enable|disable) + +This command just set the flag of notification. +If we enable it, bonding PMD will notify member ports when its some +configurations changed. + +get bonding member firmware create +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Get the status of member port hardware creating the bonding port:: + + testpmd> get bonding member firmware create (member_port_id) (bonding_port_id) diff --git a/drivers/net/bonding/bonding_testpmd.c b/drivers/net/bonding/bonding_testpmd.c index 8fcd6cadd0..48f71da3a7 100644 --- a/drivers/net/bonding/bonding_testpmd.c +++ b/drivers/net/bonding/bonding_testpmd.c @@ -692,6 +692,124 @@ static cmdline_parse_inst_t cmd_set_bonding_agg_mode_policy = { } }; +struct cmd_set_bonding_notify_member_result { + cmdline_fixed_string_t set; + cmdline_fixed_string_t bonding; + cmdline_fixed_string_t notify_member; + uint16_t port_num; + cmdline_fixed_string_t mode; +}; + +static void +cmd_set_bonding_notify_member_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, __rte_unused void *data) +{ + struct cmd_set_bonding_notify_member_result *res = parsed_result; + bool notify_member = false; + + if (strcmp(res->notify_member, "enable") == 0) + notify_member = true; + else if (strcmp(res->notify_member, "disable") == 0) + notify_member = false; + + rte_eth_bond_notify_member_flag_set(res->port_num, notify_member); +} + +static cmdline_parse_token_string_t cmd_set_bonding_notify_member_set = + TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_notify_member_result, + set, "set"); +static cmdline_parse_token_string_t cmd_set_bonding_notify_member_bonding = + TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_notify_member_result, + bonding, "bonding"); +static cmdline_parse_token_string_t cmd_set_bonding_notify_member = + TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_notify_member_result, + notify_member, "notify_member"); +static cmdline_parse_token_num_t cmd_set_bonding_notify_member_portnum = + TOKEN_NUM_INITIALIZER(struct cmd_set_bonding_notify_member_result, + port_num, RTE_UINT16); +static cmdline_parse_token_string_t cmd_set_bonding_notify_member_mode_string = + TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_notify_member_result, + mode, "enable#disable"); + +static cmdline_parse_inst_t cmd_set_bonding_notify_member_ports = { + .f = cmd_set_bonding_notify_member_parsed, + .data = NULL, + .help_str = "set bonding notify_member (port_id) (enable|disable)", + .tokens = { + (void *)&cmd_set_bonding_notify_member_set, + (void *)&cmd_set_bonding_notify_member_bonding, + (void *)&cmd_set_bonding_notify_member, + (void *)&cmd_set_bonding_notify_member_portnum, + (void *)&cmd_set_bonding_notify_member_mode_string, + NULL + } +}; + +struct cmd_get_bonding_member_hw_create_result { + cmdline_fixed_string_t get; + cmdline_fixed_string_t bonding; + cmdline_fixed_string_t member; + cmdline_fixed_string_t firmware; + cmdline_fixed_string_t create; + uint16_t member_port_id; + uint16_t bonding_port_id; +}; + +static void +cmd_get_bonding_member_hw_create_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, __rte_unused void *data) +{ + struct cmd_get_bonding_member_hw_create_result *res = parsed_result; + int ret; + + ret = rte_eth_bond_fw_create_get(res->bonding_port_id, res->member_port_id); + if (ret == 0) + printf("Member port %u firmware creates bonding port %u successfully\n", + res->member_port_id, res->bonding_port_id); + else + printf("Failed to get status of member port %u firmware creating" + " bonding port %u, %d\n", + res->member_port_id, res->bonding_port_id, ret); +} + +static cmdline_parse_token_string_t cmd_get_bonding_member_hw_create_get = + TOKEN_STRING_INITIALIZER(struct cmd_get_bonding_member_hw_create_result, + get, "get"); +static cmdline_parse_token_string_t cmd_get_bonding_member_hw_create_bonding = + TOKEN_STRING_INITIALIZER(struct cmd_get_bonding_member_hw_create_result, + bonding, "bonding"); +static cmdline_parse_token_string_t cmd_get_bonding_member_hw_create_member = + TOKEN_STRING_INITIALIZER(struct cmd_get_bonding_member_hw_create_result, + member, "member"); +static cmdline_parse_token_string_t cmd_get_bonding_member_hw_create_firmware = + TOKEN_STRING_INITIALIZER(struct cmd_get_bonding_member_hw_create_result, + create, "firmware"); +static cmdline_parse_token_string_t cmd_get_bonding_member_hw_create_create = + TOKEN_STRING_INITIALIZER(struct cmd_get_bonding_member_hw_create_result, + create, "create"); +static cmdline_parse_token_num_t cmd_get_bonding_member_hw_create_memberportid = + TOKEN_NUM_INITIALIZER(struct cmd_get_bonding_member_hw_create_result, + member_port_id, RTE_UINT16); +static cmdline_parse_token_num_t cmd_get_bonding_member_hw_create_bondingportid = + TOKEN_NUM_INITIALIZER(struct cmd_get_bonding_member_hw_create_result, + bonding_port_id, RTE_UINT16); + +static cmdline_parse_inst_t cmd_get_member_hw_create_bonding = { + .f = cmd_get_bonding_member_hw_create_parsed, + .data = NULL, + .help_str = "get bonding member firmware create (member_port_id) (bonding_port_id)", + .tokens = { + (void *)&cmd_get_bonding_member_hw_create_get, + (void *)&cmd_get_bonding_member_hw_create_bonding, + (void *)&cmd_get_bonding_member_hw_create_member, + (void *)&cmd_get_bonding_member_hw_create_firmware, + (void *)&cmd_get_bonding_member_hw_create_create, + (void *)&cmd_get_bonding_member_hw_create_memberportid, + (void *)&cmd_get_bonding_member_hw_create_bondingportid, + NULL + } +}; + static struct testpmd_driver_commands bonding_cmds = { .commands = { { @@ -749,6 +867,16 @@ static struct testpmd_driver_commands bonding_cmds = { "set bonding mode IEEE802.3AD aggregator policy (port_id) (agg_name)\n" " Set Aggregation mode for IEEE802.3AD (mode 4)\n", }, + { + &cmd_set_bonding_notify_member_ports, + "set bonding notify_member (port_id) (enable|disable)\n" + " Enable/disable the notify member flag of bonding port\n", + }, + { + &cmd_get_member_hw_create_bonding, + "get bonding member firmware create (member_port_id) (bonding_port_id)\n" + " Get the status of member port firmware creating the bonding port\n", + }, { NULL, NULL }, }, }; From patchwork Tue Dec 26 07:28:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 135576 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9289143795; Tue, 26 Dec 2023 08:29:41 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7BAD54064C; Tue, 26 Dec 2023 08:29:00 +0100 (CET) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2121.outbound.protection.outlook.com [40.107.212.121]) by mails.dpdk.org (Postfix) with ESMTP id 273674069F for ; Tue, 26 Dec 2023 08:28:59 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XLdwY0eg5fHa8bzht/zM8WAxRirWrt6Cptpe/kzYVvkuXnd8Gm7EhNBLkfEo6aWzFUklnIPIrYSrencGofLjSuoospMyY9s766CTowdd3BEb8CAVc5EyUgMLAgYsQZ6hv0A8PF+fRTXoBLwzCrpAI6iVMyBzA7QPqKRs2FhNucFIfevWYoRbOC1+g99VQqugDjxz8py21a0lzb7uOZhq66zYh61h5M5T/xWWe/ZAnCXA+ssrPAcGKOjP+K0s3yZj/9Nm1Ve8bt1f5Yc+TE+BQ8o5FSwWxgZXU4rGOnFK7nRZuW4jC6qfH8U7Qt28quWxZDh3ccFg7iySvH07vY76Uw== 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=jCtT2mfosxG2wodbyBAYQBsHsQWgMLhSVY1UW8HFjqQ=; b=ay42Mj9pScJ3eg2gkluZFIB/6v8xPu0SfLnUziHD8AyhhtvdUPAae7PmxixlUcdpaVxUR5lyAyqJp7v+pQ5aFoIeWZyfGCfK7HReJc/i0p5TucI/OZxlGUAJgw4qytonsGVE/r33ktLlabm8iCD3Hxx6pt8NzxpBBw3UHJZznltmEyt9DmKOT6CacstuZSaP7HPc077fkvB1F4QDmMxcCXP0EqNy0LdJlzEI4RQVtgWz9y+Cfru0kEWxsj5HJC0sjNlKBjCbsEQ3//TmEbir2hubSYC+W8Lc75TpF/F5Su4pRuVwqiqWSofQNVL3nrrSfrNQ4cZFHwrh2gbG6wVckw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jCtT2mfosxG2wodbyBAYQBsHsQWgMLhSVY1UW8HFjqQ=; b=skX0lZCFOasQh2uPA50rhIq14n6661tWCj884rLpiXSqsaH77Roli/fMCXeExKxdXS7VDYAgo492pK2fKXdh6DGNgG0HP3sq0xu+7Q1g7afc9pYvXVKHqpEgdT1rSFFZhbBoKbiCQ0X7PiZ+nqdTiXG1GbTGd4+pje04e+CtrDM= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by CH3PR13MB6506.namprd13.prod.outlook.com (2603:10b6:610:1a3::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.27; Tue, 26 Dec 2023 07:28:57 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.7113.027; Tue, 26 Dec 2023 07:28:57 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Long Wu , James Hershaw , Chaoyong He , Peng Zhang Subject: [PATCH v6 07/14] net/bonding: create new rte flow header file Date: Tue, 26 Dec 2023 15:28:17 +0800 Message-Id: <20231226072824.3163121-8-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231226072824.3163121-1-chaoyong.he@corigine.com> References: <20231226023745.3144143-1-chaoyong.he@corigine.com> <20231226072824.3163121-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SJ0PR03CA0239.namprd03.prod.outlook.com (2603:10b6:a03:39f::34) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH3PR13MB6506:EE_ X-MS-Office365-Filtering-Correlation-Id: d33c3367-2704-42a6-43e5-08dc05e4527f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: CrqhSWNui3v/l+csu9tEZqRe6CBnyoZSZ4WU6J2nLMPmx3XEm/H70Yxuv4f71CWdK3BSUSXAi716FE6aRE8+cAgonG7Qh9v1H7X5WfvXAgZJj1HW5PEEphfWfjoyYSqfd/A7hOpEBPAE7gu4U2sxnrSkcptPytmGiodqswoa4pLDMPqYpnWRHQasrAB1I+7sQJWmN918g7VRanAmJnKylJe3ms2jYsOYl1lSMNDvk96F3epwg3Zl1s2F2wqFepFffgL2sG1xMrowusBf6ZxgwbyF/S19uYIkGsVc1LZQkgOGwm5Kk8CeoXmOYY/8EEH9RwDG0a6fV/Tg/qJ53spJ+2AFytvHxvB5IjQoUo+KnFlQVnxUVNtOIcwudhtEm7hKgQWjqODYYzXJ6E1B4gFb+Q1skCUcL3zJlick8V+ocBs1fAA3FTunoBUUJJbFnky+X6Jlcmm83rllUUK7vRCqajoEeLfHbNUDusk3Yn1sqECR6EpwZRuw+WBkIprZUbFeSNGjZn1TL9pk/g8ixYjgnCI0LvU4+vRq8arjlsCT/EP7DMPMkbJLLBsCOcMzbgwdEZED8itvB+vFp7IB8h+xePLS89GAK3pOBP/2RHlj6QQINCVPxgfvZj4UzSHz//O/G55szg8GqvzDzxqWvir64uSzesHPCZvQ8QmeGMxDD2w= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376002)(346002)(136003)(396003)(366004)(39840400004)(230922051799003)(451199024)(186009)(64100799003)(1800799012)(107886003)(26005)(1076003)(52116002)(6666004)(2616005)(6512007)(83380400001)(5660300002)(44832011)(4326008)(8676002)(41300700001)(2906002)(8936002)(6486002)(478600001)(316002)(6916009)(54906003)(66476007)(66556008)(66946007)(6506007)(86362001)(36756003)(38100700002)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: IGnRGveS/RXjQC8QlWksT31RQkGpASbleJLbHRZervaT55PP1CLa6nhWRYxB6oT8IANPdQ4jNOZy+BkViG1eInnIJRH+AyOAS/sPbFJ3Lo1fGsXGKlE/reLFuQpLsCchG09O+WW/+NmKAfgvXvukS6eutb37ZLO5Q/6/xYDI4PxOALiN0tr6luQpsQaBsLjrJB4ASImqyoTTNpaRg9LN8xY3r7QgYyCb02dsLiJ3fOKsix8utp9S43xqbC6e27h0wRB07lHfg4Wttm5f5bU6z44Zn/uFC+L/Qzf9mn3Y9stagYwqhvTsgrU2FfDZ3NhozqNVeYWIt7MUSYSdYZyCpOEkMUpePTm8SIg7naZPp3Zvq1ofCQgBSRNDePVHHjglw3XyXNegiQW/ZV5cBECucF9XCGNl58b2NYXbykIQCkyqn4pHiTfwLf57lvviIK/fF82BK/KZ5XTAkPuyRZXV71BhaK0vEoFXqBYc033BdqvkOSI0f5lS4+JgzIC70Uapw9f2uMZ0UmexAErX+k4X9e64l6M34e0ad0pfnkNZ9DmrlCSKC0MuEtbl2a2OguQXGi9dZGwgsKzAMLvre+xoue64kg4pQjYB3cYCGkHWKbLYZlqkMAwzS+dTtiZQgCkl9x22wQtSOheMfCs5SZMcSX7dAmSLOq39cizxGrw579t7YqvvRmR686yBxaz7VJxdrqPm1NncRewLK8yiucsF10iYSSMM2dORlY+nLo+yaOAI7mQOXjIXQSNQiqqbIq3/qSZcPMxkOMo3ms3jVtl17Rx3ZD7xWjjwSIsDTgJcetzU03EsA1qWbYS8Vet30srKUX4rVBK5in54fJ3P5dYAKYdHmq3Hc5gN832tfYUNArd5sXIsCFQhDIOfJxjhKtl9P3gfPqXF8SSbkBzeZKGXwnfrT4lnDRhvfz1KNqyAe/4eLvsMuEhRA3A4avpRu3VS2DKh30VE5ldAK1jBtTF14Oc0risQWETwJqCSTrLdW66+9jr93p1nAafltKlCMpR9+KhCvFhDjTw1WWda6CbF7jhxFT7sjF1hlty6MdHkeCMs1HkRUxzDe9mlVZp65BwBoNzII3gAmTPfeK3wwCYznQJTpIOgv7chYPBQbzsNcK/3r0sa/Nu4J82g3XgFTYWizugR/79N5regTJCZfle4r/Ba/xw9aJg6RfsBI0tmhj4AgZ9XxGLOdYzyWpOO3JJ+S0WhaEJLziN2jBD9AaPjH1HvLBsEAOyJ4zC+VtU3Iw9g+Dd4MKoNb8+uq45K9PKQBa2BBVLFqkU6cKRugReReJwQa0a5b+drLGgle3x4sk5PPauJFqk5+jikaRm2Pd2mGGac7F/jAEPokBljqqoA4KxSNJIx+iqIh7OQCveWS9ifq5SeeY6AIVpOaTD1OzNRhGnw6Yro7LO2A4NjdmookkUvNXE2vGH+o0qeQVY5vyqoSajFVjBGCdOFt75VhUj7dCZXNR43oMltml1TdRpNCglDrx1TX0WkgQs60peFWr0DOL3xGLgsIil9lzdARhkkqgMB79sgdC5QiSZy93gL8MI9L19Tc+aNZjyDGgNt6QguC47uQgQFUKkAvM2IpIMT9AGT4O3eS5E+F05jlLhc9w== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: d33c3367-2704-42a6-43e5-08dc05e4527f X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Dec 2023 07:28:57.7153 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: npZndzjUbe2e37+lBpQhmbZTGzqv2AdDDOxflOusN80GFAHNy5HkAnBE4Ic8Ldrv/GiR0G7cROKPiGC9nkPKPsEzYueWnyKi/UqVXPh/+28= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR13MB6506 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Long Wu Move the flow code to a new head file to make flow related code more clean and make the code architecture more reasonable in the future. There is no functional change, just moving verbatim code around. Signed-off-by: Long Wu Reviewed-by: James Hershaw Reviewed-by: Chaoyong He Reviewed-by: Peng Zhang --- drivers/net/bonding/eth_bond_private.h | 13 ------------- drivers/net/bonding/rte_eth_bond_api.c | 1 + drivers/net/bonding/rte_eth_bond_flow.c | 1 + drivers/net/bonding/rte_eth_bond_flow.h | 22 ++++++++++++++++++++++ drivers/net/bonding/rte_eth_bond_pmd.c | 1 + 5 files changed, 25 insertions(+), 13 deletions(-) create mode 100644 drivers/net/bonding/rte_eth_bond_flow.h diff --git a/drivers/net/bonding/eth_bond_private.h b/drivers/net/bonding/eth_bond_private.h index f9603a0f6b..4373465d8d 100644 --- a/drivers/net/bonding/eth_bond_private.h +++ b/drivers/net/bonding/eth_bond_private.h @@ -9,10 +9,8 @@ #include #include -#include #include #include -#include #include "rte_eth_bond.h" #include "eth_bond_8023ad_private.h" @@ -47,8 +45,6 @@ extern const char *pmd_bond_init_valid_arguments[]; extern struct rte_vdev_driver pmd_bond_drv; -extern const struct rte_flow_ops bond_flow_ops; - /** Port Queue Mapping Structure */ struct bond_rx_queue { uint16_t queue_id; @@ -94,15 +90,6 @@ struct bond_member_details { uint16_t reta_size; }; -struct rte_flow { - TAILQ_ENTRY(rte_flow) next; - /* Members flows */ - struct rte_flow *flows[RTE_MAX_ETHPORTS]; - /* Flow description for synchronization */ - struct rte_flow_conv_rule rule; - uint8_t rule_data[]; -}; - typedef void (*burst_xmit_hash_t)(struct rte_mbuf **buf, uint16_t nb_pkts, uint16_t member_count, uint16_t *members); diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c index 5e9437c786..0a296d3894 100644 --- a/drivers/net/bonding/rte_eth_bond_api.c +++ b/drivers/net/bonding/rte_eth_bond_api.c @@ -12,6 +12,7 @@ #include #include "rte_eth_bond.h" +#include "rte_eth_bond_flow.h" #include "eth_bond_private.h" #include "eth_bond_8023ad_private.h" diff --git a/drivers/net/bonding/rte_eth_bond_flow.c b/drivers/net/bonding/rte_eth_bond_flow.c index 71a91675f7..e6c7ce5362 100644 --- a/drivers/net/bonding/rte_eth_bond_flow.c +++ b/drivers/net/bonding/rte_eth_bond_flow.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: BSD-3-Clause * Copyright 2018 Mellanox Technologies, Ltd */ +#include "rte_eth_bond_flow.h" #include #include diff --git a/drivers/net/bonding/rte_eth_bond_flow.h b/drivers/net/bonding/rte_eth_bond_flow.h new file mode 100644 index 0000000000..7394e0e2e1 --- /dev/null +++ b/drivers/net/bonding/rte_eth_bond_flow.h @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2023 Corigine, Inc. + */ + +#ifndef _RTE_ETH_BOND_FLOW_H_ +#define _RTE_ETH_BOND_FLOW_H_ + +#include +#include + +extern const struct rte_flow_ops bond_flow_ops; + +struct rte_flow { + TAILQ_ENTRY(rte_flow) next; + struct rte_flow *flows[RTE_MAX_ETHPORTS]; + /**< Member ports flows */ + struct rte_flow_conv_rule rule; + /**< Flow description for synchronization */ + uint8_t rule_data[]; +}; + +#endif /* _RTE_ETH_BOND_FLOW_H_ */ diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index b3a37a36c8..650f8061a2 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -21,6 +21,7 @@ #include #include "rte_eth_bond.h" +#include "rte_eth_bond_flow.h" #include "eth_bond_private.h" #include "eth_bond_8023ad_private.h" From patchwork Tue Dec 26 07:28:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 135577 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2DF3B43795; Tue, 26 Dec 2023 08:29:50 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E751E40A6C; Tue, 26 Dec 2023 08:29:02 +0100 (CET) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2138.outbound.protection.outlook.com [40.107.212.138]) by mails.dpdk.org (Postfix) with ESMTP id 67AAF406B4 for ; Tue, 26 Dec 2023 08:29:01 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NfybTaySFqDWxKsb9XLqfNLiZVxc2uuxBvNZ4RmEA/3sD1ZZ1JC9Uq8pn0AIwVHhQDXJCyEl6zpdCMjz4hDBrDCzlaVsGH1RQxTsfbzOn62JDZ4McbJQGm5wCyPceO3YuQZF/cdXvBeG40sLI4QrUKxs7krZpPv9rzkl6t8IOgc6tuSuFGYh6EJjOs2pYMQfbWNUaejQDFlO/yUh5IAUY/kmdnmQ8l8bohAkjCaH1c567HKHgwl9jYJO4A4ZrhTDL16XaYfETi74P3EEoKPWj/82Le0Gx5IZzMfoeQQxVG4pfbMGQZb3M/JoW0lkhhIysfxzMHRQOCc4N6Bj8R/oKA== 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=Thevn4fm02KKH852VJyuieaWeZ8q+NjXqUTDBJjmcwY=; b=VPNxcFKRVEnvPDpR5A61f5tZfbVj8J24gowfW5nyBwBWoORci/3jH6ceguQsbIWmr2C1+tXrnNmqvqN/dNnhkERaG3l74KipfE1QXg4MkDYZsfI+nKeDMFMBgDthKyOKs1yUiOKaTA7dPzMm0Z9DYDrx8m/K1kDU6TjTyVgavHru+lOMvCINaAa2lcaxmoUn9xfun6SeVoPwzEYbJeJqjfXNnRofWBYsUX04aXZwF7Cg5Ge88xahUH0RpBePMf+qw6axAZt5J0Ou46z7AGA7nb3mAs891iaEuHW5GSDP/YsrobkeyKurwGr2DV7jY0oaOtttDBtNtR/d778dTmagGQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Thevn4fm02KKH852VJyuieaWeZ8q+NjXqUTDBJjmcwY=; b=SgCZoD6TwrKdu37hikYBZq7q/ABIIXcX7J5PHXQQcix9NYZ7etwrGbSkIAU5L1TO0L0ETxkxLeaTJz3nVJEtA3YOn4sRSfNcPXZX4/qJWXWh2ofgYiSJub2m6sZPyUrL6lktXysDmlEITAy/rd5qa8VKZLovETXwbEwXWlwqik8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by CH3PR13MB6506.namprd13.prod.outlook.com (2603:10b6:610:1a3::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.27; Tue, 26 Dec 2023 07:28:59 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.7113.027; Tue, 26 Dec 2023 07:28:59 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Long Wu , Peng Zhang , Chaoyong He Subject: [PATCH v6 08/14] net/nfp: add bond firmware creation initialization Date: Tue, 26 Dec 2023 15:28:18 +0800 Message-Id: <20231226072824.3163121-9-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231226072824.3163121-1-chaoyong.he@corigine.com> References: <20231226023745.3144143-1-chaoyong.he@corigine.com> <20231226072824.3163121-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SJ0PR03CA0239.namprd03.prod.outlook.com (2603:10b6:a03:39f::34) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH3PR13MB6506:EE_ X-MS-Office365-Filtering-Correlation-Id: 1c6172ad-ec77-4567-fbe7-08dc05e4539a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3bAToVgQw6yh/BTBctIkyz8S7P49xWwcI+yQiLF0HGm4EqOYIz20fybjPq/4pcgfTs+j5eLp2MSnbJTeTGJQSJq5SqUDarKSnAAOkbRLudiGhWACsqC5u7WuC92krC1GAThMltMvLxUIEjcgZNG2rKKIIzDhy6EBCY2coHykU2N4+2Kt1Q2eym2tk1thZYVwB4EvKCdHOvlLNb5WuWRMZRirAcFfUJf4MUkTPxJj8vVmcsrVXOvdnbOxVWo1Pmsz9Y4OiHAToFBoo4w0su0G/LfUtQiZ9lBPx+WsfJtk8gagW6NWvs2dWfas3p994ZCcgKvGj8wcQwNlXmem1I95PcyWyLjhDiROh3taaScPRopwTDYl0BmpZMF5OjXpLUQmbSkY15MnhY9e/k1eURuJKPSBwTA1orDCtqsdPOK35ZhylXRw2CXr/eli/DOLqLGatqeXM4Oo+ImZBC7qKKHPQaMaDCemd6UQV1EiMfs6uVmeIESXx14aqpgSyRjl8dUJFrKCueV49DkJopsSW/pI3TpOFfJtZqHuWPNeF7CCf/VYZ144UukGxH6fjqrEAUjldZXdbZTNMWyWil95js6BpJObGbz2/FLdSl/IghlW2cL/tQsENFZTjHi5Pz9Ge7kUn6+fYM5AAATEwnTcrLxZ2jsKd+XdI29D1pO2X+r+Sqc= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376002)(346002)(136003)(396003)(366004)(39840400004)(230922051799003)(451199024)(186009)(64100799003)(1800799012)(107886003)(26005)(1076003)(52116002)(6666004)(2616005)(6512007)(83380400001)(5660300002)(44832011)(4326008)(8676002)(41300700001)(2906002)(8936002)(6486002)(478600001)(316002)(6916009)(54906003)(66476007)(66556008)(66946007)(6506007)(86362001)(36756003)(38100700002)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: bToiGxX8e2UArg8MS1+bmwenJrgKeCDxAEMoC6K4uWF9EBU6nRrBuVHtX3PJlar1CoaWlVNI5jr2EarSH21Qs5XLajPZicQZXxURR0Fb8/m7Y2bcRwAPQ05mcTTmz64wmJKQgNT2SVeEFnKvBxarNfJ8e9UeSE8ihHeFqE1ONemUtqNAPMIWGR8K1xDyrNnn39xfObW0i5n2L550WYI69FiuU2dWPRLbHxYsP9h103nqf7Z/PK4yhpkIEKdBoReTB/nfCh89+A/HwiDxH7zYz5LEf+evZ7/o32TZ/O1H74n6U8LFyrUSiHOk3ZuIxg1J7subsLuBjseg/OtiEBf6TUT13E3/Tz8Wlh973iIyLEv4JpimCJTf+x1ErWZtKdgr3nciQ/eVT5ApeIyAt4z1TNCi6NOxc8W8rIRu1ZqdxtUeyP41qe7LYEOd8XrtUsB1ew9bjWrpKOKqKJBx76h1bo2+zLQLsv/xNA/DVaCBxbrIJ0puMNerPr9pvczS4qoj+cC+hWPLAkJZ+EQSRJCHMWnnJlgiJFieUPNvbR3zE1rjoQlTC++1KQ9PP553OsNmbf+J+Lt2sr5Qexuv44839YZpox5chixt6lCtrCybErfO+GlAgs7pglIDJZQTNktNAfuKQw9FU58L3SUzoopTLOeVapKs1jemxzif0Ub8Z4tVv50hxbpMYJnUIq8LT+wMFncPEXdRlTTl+dZo3I9jPD7nXmgvnI77cyOpNAcktfzpibDay9NoIxq1XBxCBMA0+AlnGn64uLVf2W1IXH9p3wo1lJ9cSJxo/hzBagtx/RJEAQgDVFAlRhND0n42xyZQ6G0Ggwb+yNmmjP0dIOmwRud7XkQ8BxPnM3XlcBFYhKbbJLvKmLH+JvVg47zNYqF+FF2FGCLqTQHC+d6rO3126hIqG8P9R43Jq9zrdxyY6K34VDioHc3HK4vsIXgIoJO8ewPRPkjYC7WO3JP3iXUadoVSTZQetnGgfdSjMl5GQZZkmrTZB7hfH1Nye2ZXrwj8A3YACkc5JWvpzQPayp4xxFKfkMiLfvKZHxmnMopn3LoXyExhN7lYLx8Cu6AZX2kyVl1DssOv0t1+enenlmfANrz7XHwq5/a7KEx+L8YzfDLkFsNU7ufy3h9swMPn/TZ2ra7JijSFpZtj0xucQ9KnC5TSHRRhTLSOdD8+CX50xQ+Np5/kAygU8LazbHuCWWZStHGU45NMDV1hZveod5C4ziuxapJ1CQvcOWPQXD2DmY7UGrEHdY1Gifkmp77Gs2cLFbYVrLVkm7f+U69XUw0VP2lPW3JC5RMzY3AqwqBxCBAL8EhZI7L8hwxHSvkltAb0528kn+GW7jjaDMBDZxnldwaliy6+DARnzInMtCu6pCk7Pn0YFK/LJhLUZwYF+e7yQXgHe8KtTLO+gjEP+HSo9hyk3jRY5Rld8AFoKjKZAL+BRcCt5wnWss3cwCzC2e6A4OS3/LSFKKe7b5SO1b7fe3gNjDYiRHnbnyoq/K4ZE601eWua0eAuv97Va6gJvWJw2fGhTyI6OX/oSAEkCbGP7+NvwaUieIjJLAuptNw1c+IGk/9Q3kYZdikIIiOcjzkk0ZbK+rbboMASBp0akaYq8Q== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1c6172ad-ec77-4567-fbe7-08dc05e4539a X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Dec 2023 07:28:59.5763 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: z1sVZdpl8YenSvlKVuFG145MM2ocCIAuraogBQygPC1Lp7Eg46zQnWCoT/RFWSaus108+yLNYwr7cDHjcR+oSzxA2dU8qQDK4T7WLL58UU4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR13MB6506 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Long Wu Firmware supports several features and bond firmware creation is one of the features. Driver notifies firmware that driver supports bond firmware creation feature by CPP bus write. If write successfully, initialize driver configuration. Signed-off-by: Long Wu Reviewed-by: Peng Zhang Reviewed-by: Chaoyong He --- drivers/net/nfp/flower/nfp_flower.c | 64 ++++++++++++++++++++++- drivers/net/nfp/flower/nfp_flower.h | 13 +++++ drivers/net/nfp/flower/nfp_flower_bond.c | 59 +++++++++++++++++++++ drivers/net/nfp/flower/nfp_flower_bond.h | 65 ++++++++++++++++++++++++ drivers/net/nfp/meson.build | 1 + 5 files changed, 200 insertions(+), 2 deletions(-) create mode 100644 drivers/net/nfp/flower/nfp_flower_bond.c create mode 100644 drivers/net/nfp/flower/nfp_flower_bond.h diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c index 94b50611f0..195960e00d 100644 --- a/drivers/net/nfp/flower/nfp_flower.c +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -16,6 +16,7 @@ #include "../nfp_cpp_bridge.h" #include "../nfp_logs.h" #include "../nfp_mtr.h" +#include "nfp_flower_bond.h" #include "nfp_flower_ctrl.h" #include "nfp_flower_representor.h" @@ -228,6 +229,42 @@ nfp_flower_init_vnic_common(struct nfp_net_hw *hw, return 0; } +static int +nfp_flower_bond_feature_init(struct nfp_app_fw_flower *app_fw_flower) +{ + int ret; + + /* Notify hardware that driver supports hardware creation of bonding port */ + ret = nfp_rtsym_write_le(app_fw_flower->pf_hw->pf_dev->sym_tbl, + "_abi_flower_balance_sync_enable", 1); + if (ret != 0) { + PMD_INIT_LOG(ERR, "Enable bonding port hardware creation failed."); + return ret; + } + + ret = nfp_flower_bond_init(app_fw_flower); + if (ret != 0) { + PMD_INIT_LOG(ERR, "Initialize bonding structure failed."); + return ret; + } + + app_fw_flower->flower_en_feats |= NFP_FL_ENABLE_BOND; + + return 0; +} + +static int +nfp_flower_sync_feature_bits(struct nfp_app_fw_flower *app_fw_flower) +{ + int ret; + + ret = nfp_flower_bond_feature_init(app_fw_flower); + if (ret != 0) + return ret; + + return 0; +} + static int nfp_flower_init_ctrl_vnic(struct nfp_net_hw *hw) { @@ -538,6 +575,20 @@ nfp_flower_cleanup_ctrl_vnic(struct nfp_net_hw *hw) rte_free(eth_dev); } +static void +nfp_flower_bond_feature_cleanup(struct nfp_app_fw_flower *app_fw_flower) +{ + nfp_flower_bond_cleanup(app_fw_flower); + app_fw_flower->flower_en_feats &= ~NFP_FL_ENABLE_BOND; +} + +static void +nfp_flower_sync_feature_cleanup(struct nfp_app_fw_flower *app_fw_flower) +{ + if (nfp_flower_support_bond_offload(app_fw_flower)) + nfp_flower_bond_feature_cleanup(app_fw_flower); +} + static int nfp_flower_start_ctrl_vnic(struct nfp_net_hw *net_hw) { @@ -768,22 +819,31 @@ nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev, goto ctrl_vnic_cleanup; } + /* Synchronize the features of driver and hardware */ + ret = nfp_flower_sync_feature_bits(app_fw_flower); + if (ret != 0) { + PMD_INIT_LOG(ERR, "Sync feature bits failed"); + goto ctrl_vnic_cleanup; + } + /* Start up flower services */ ret = nfp_flower_enable_services(app_fw_flower); if (ret != 0) { PMD_INIT_LOG(ERR, "Could not enable flower services"); ret = -ESRCH; - goto ctrl_vnic_cleanup; + goto sync_feature_cleanup; } ret = nfp_flower_repr_create(app_fw_flower); if (ret != 0) { PMD_INIT_LOG(ERR, "Could not create representor ports"); - goto ctrl_vnic_cleanup; + goto sync_feature_cleanup; } return 0; +sync_feature_cleanup: + nfp_flower_sync_feature_cleanup(app_fw_flower); ctrl_vnic_cleanup: nfp_flower_cleanup_ctrl_vnic(app_fw_flower->ctrl_hw); ctrl_cpp_area_cleanup: diff --git a/drivers/net/nfp/flower/nfp_flower.h b/drivers/net/nfp/flower/nfp_flower.h index 8393de66c5..30443cd568 100644 --- a/drivers/net/nfp/flower/nfp_flower.h +++ b/drivers/net/nfp/flower/nfp_flower.h @@ -7,6 +7,7 @@ #define __NFP_FLOWER_H__ #include "../nfp_net_common.h" +#include "nfp_flower_bond.h" /* Extra features bitmap. */ #define NFP_FL_FEATS_GENEVE RTE_BIT64(0) @@ -61,6 +62,9 @@ struct nfp_app_fw_flower { /** Number of phyport representors */ uint8_t num_phyport_reprs; + /** Bitmap of features enabled by HW */ + uint8_t flower_en_feats; + /** Pointer to the PF vNIC */ struct nfp_net_hw *pf_hw; @@ -96,6 +100,9 @@ struct nfp_app_fw_flower { /** Function pointers for different NFD version */ struct nfp_flower_nfd_func nfd_func; + + /** Link bond data block */ + struct nfp_flower_bond *nfp_bond; }; static inline bool @@ -104,6 +111,12 @@ nfp_flower_support_decap_v2(const struct nfp_app_fw_flower *app_fw_flower) return app_fw_flower->ext_features & NFP_FL_FEATS_DECAP_V2; } +static inline bool +nfp_flower_support_bond_offload(const struct nfp_app_fw_flower *app_fw_flower) +{ + return app_fw_flower->flower_en_feats & NFP_FL_ENABLE_BOND; +} + int nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev, const struct nfp_dev_info *dev_info); void nfp_uninit_app_fw_flower(struct nfp_pf_dev *pf_dev); diff --git a/drivers/net/nfp/flower/nfp_flower_bond.c b/drivers/net/nfp/flower/nfp_flower_bond.c new file mode 100644 index 0000000000..bbd2818e68 --- /dev/null +++ b/drivers/net/nfp/flower/nfp_flower_bond.c @@ -0,0 +1,59 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2023 Corigine, Inc. + * All rights reserved. + */ +#include "nfp_flower_bond.h" + +#include + +#include "nfp_flower_representor.h" + +static void +nfp_flower_bond_increment_version(struct nfp_flower_bond *nfp_bond) +{ + /* LSB is not considered by firmware so add 2 for each increment. */ + nfp_bond->batch_ver += 2; + nfp_bond->batch_ver &= NFP_FL_BOND_VERSION_MASK; + + /* Zero is reserved by firmware. */ + if (nfp_bond->batch_ver == 0) + nfp_bond->batch_ver += 2; +} + +int +nfp_flower_bond_init(struct nfp_app_fw_flower *app_fw_flower) +{ + struct nfp_flower_bond *nfp_bond; + + app_fw_flower->nfp_bond = rte_zmalloc("nfp_bond", + sizeof(struct nfp_flower_bond), RTE_CACHE_LINE_SIZE); + if (app_fw_flower->nfp_bond == NULL) + return -ENOMEM; + + nfp_bond = app_fw_flower->nfp_bond; + pthread_mutex_init(&nfp_bond->mutex, NULL); + LIST_INIT(&nfp_bond->group_list); + nfp_flower_bond_increment_version(nfp_bond); + nfp_bond->app_fw_flower = app_fw_flower; + + return 0; +} + +void +nfp_flower_bond_cleanup(struct nfp_app_fw_flower *app_fw_flower) +{ + struct nfp_bond_group *entry; + struct nfp_flower_bond *nfp_bond = app_fw_flower->nfp_bond; + + pthread_mutex_lock(&nfp_bond->mutex); + LIST_FOREACH(entry, &nfp_bond->group_list, next) { + LIST_REMOVE(entry, next); + rte_free(entry); + } + pthread_mutex_unlock(&nfp_bond->mutex); + + pthread_mutex_destroy(&nfp_bond->mutex); + + rte_free(nfp_bond); + app_fw_flower->nfp_bond = NULL; +} diff --git a/drivers/net/nfp/flower/nfp_flower_bond.h b/drivers/net/nfp/flower/nfp_flower_bond.h new file mode 100644 index 0000000000..be79764a23 --- /dev/null +++ b/drivers/net/nfp/flower/nfp_flower_bond.h @@ -0,0 +1,65 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2023 Corigine, Inc. + * All rights reserved. + */ + +#ifndef __NFP_FLOWER_BOND_H__ +#define __NFP_FLOWER_BOND_H__ + +#include +#include +#include + +/* The batch version of bond offload packets between firmware and driver */ +#define NFP_FL_BOND_VERSION_MASK 0x007fffff /* [0, 22] */ + +#define NFP_FL_ENABLE_BOND RTE_BIT32(1) + +/* ID 0 reserved and IDs 1 to 31 are valid */ +#define NFP_FL_BOND_GROUP_MIN 1 +#define NFP_FL_BOND_GROUP_MAX 32 + +/* List entry for each bond group */ +struct nfp_bond_group { + /** List entry */ + LIST_ENTRY(nfp_bond_group) next; + /** Marked if the group needs synced to HW */ + bool dirty; + /** Marked if the group is currently offloaded to NIC */ + bool offloaded; + /** Marked if the group should be removed from NIC */ + bool to_remove; + /** Marked if the group should be removed from driver */ + bool to_destroy; + /** Assigned group ID for host/kernel sync */ + uint32_t group_id; + /** Number of members in group */ + uint32_t member_cnt; + /** Group instance in case of ID reuse */ + uint32_t group_inst; + /** Group main Netdev */ + struct rte_eth_dev *main_dev; +}; + +/* Flower APP priv data for bond offload */ +struct nfp_flower_bond { + /** Marker to reset firmware bond config */ + bool rst_cfg; + /** List of all main/member groups offloaded */ + LIST_HEAD(, nfp_bond_group) group_list; + /** Lock to protect bond group_list */ + pthread_mutex_t mutex; + /** Incremented for each batch of config packets */ + uint32_t batch_ver; + /** Instance allocator for groups */ + uint32_t global_inst; + /** Incremented for each config packet sent */ + uint32_t pkt_num; + /** Pointer to the flower app */ + struct nfp_app_fw_flower *app_fw_flower; +}; + +int nfp_flower_bond_init(struct nfp_app_fw_flower *app_fw_flower); +void nfp_flower_bond_cleanup(struct nfp_app_fw_flower *app_fw_flower); + +#endif /* __NFP_FLOWER_BOND_H__ */ diff --git a/drivers/net/nfp/meson.build b/drivers/net/nfp/meson.build index 46be6f60cd..f0d4bbcecb 100644 --- a/drivers/net/nfp/meson.build +++ b/drivers/net/nfp/meson.build @@ -13,6 +13,7 @@ sources = files( 'flower/nfp_flower_ctrl.c', 'flower/nfp_flower_flow.c', 'flower/nfp_flower_representor.c', + 'flower/nfp_flower_bond.c', 'nfd3/nfp_nfd3_dp.c', 'nfdk/nfp_nfdk_dp.c', 'nfpcore/nfp_cppcore.c', From patchwork Tue Dec 26 07:28:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 135578 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id E8A9843795; Tue, 26 Dec 2023 08:29:56 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2E3FC406BA; Tue, 26 Dec 2023 08:29:05 +0100 (CET) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2096.outbound.protection.outlook.com [40.107.212.96]) by mails.dpdk.org (Postfix) with ESMTP id 3A622402D8 for ; Tue, 26 Dec 2023 08:29:03 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Mcn/aAFgRHRcMo+arqOwqi0Ua8MTcQySOmzsMCbDjyY4pwu+Tsz2r4OxU5xvOB/XE8Q/B+SVrHJ9QAW8/cr/mEhNpttLqGf444pCwWXzgsxYUcxjUnBSUEbstf1sTjer6N+mv0fHKLZ9/U2Xocaz+7II5BVXfwMttDH8dreyVQG4p5S/bgyBBhAh6bNUtXho9bc+VpAiji0164d1KjGhCC7e+cq0hHeoEeZ/kjqGLDY+WT6CfJ9K3A+uk/AMlrdCreMNSyX5M2b3fXcr6URYNHubueXF9hZfgMJsfZaKy5Mg7Q/ERaiSQUeSJovwzYat85LKIqp6pmgy2LsJ9ugCtA== 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=GsQm6C8L2kSY1k5odiGIKzT3UhOuRLGhZUYRJmXtpE4=; b=V7WQCHHqHUt5UxQXxVOvmnXEvPXusOCsP4Z9LMu8C9mGUsuqXGHnU26/YbGcLi0lDaIviRtXqM5zGZkz0BFNU/BOzgggGVNTtQeSQBpSY0aUa9+RW4HOY7/8Z5PFHU6BToM0X2Sampqu8oQbDUZW5eh3cG81Qy+nfgp/6VMWPYx49Ec2wJHWZYZY41GiO2qFHdJFco97cxT4yijvhurNvDJxXWkOrTHU2Q0IrED6dkLgl0THfP6ZZ54weUJQmm0okh55I6YuL2R8Xnw+dCDu7pIc3cBqpUgkAJVjn2T/MkyseRQcFsN7PLDNHRC4qRcZuvFL/RAB/UywJFESSZulTA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GsQm6C8L2kSY1k5odiGIKzT3UhOuRLGhZUYRJmXtpE4=; b=lJAp9Jsrb+Wz2F6k8fyBrd+I4XyBz6aAE/baE7PWpFvn8c8e5GhIyXZrDpKs/t1J8glLLBS7lSehpMbKDFShL1PF5FRrHbTDnV1oAWgFhs6yJWIuKHGvOh3PZkMZeRp1hqaMwLhn0nOQ0lSs7Lc4aa+qRfeyiCWYu5WceUlKK2I= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by CH3PR13MB6506.namprd13.prod.outlook.com (2603:10b6:610:1a3::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.27; Tue, 26 Dec 2023 07:29:01 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.7113.027; Tue, 26 Dec 2023 07:29:01 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Long Wu , Peng Zhang , Chaoyong He Subject: [PATCH v6 09/14] net/nfp: reset bond configuration of firmware Date: Tue, 26 Dec 2023 15:28:19 +0800 Message-Id: <20231226072824.3163121-10-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231226072824.3163121-1-chaoyong.he@corigine.com> References: <20231226023745.3144143-1-chaoyong.he@corigine.com> <20231226072824.3163121-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SJ0PR03CA0239.namprd03.prod.outlook.com (2603:10b6:a03:39f::34) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH3PR13MB6506:EE_ X-MS-Office365-Filtering-Correlation-Id: 112b8d1e-45cf-420c-dbd4-08dc05e454bd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: rR4Mbtcye1PX8JZJn/KYuwp/zC9/daq0Xv2jJKR5fboCgsVk1NFR5D6EE4lsfvTqEqSuM2igUMLwGwY5A+C0GO3Ait2NctizjLy7W6kqBbrqVUQLxhckBPB2BJ5/wjtAP6tEVL0ZvNHmDnaux5Uv2t1qT1LQSkzE3MPIGa/wx1TBxEyDmthYSEvPvNPoidNOwJLBKixxw4Af6S+EuUTGeij85pzXPInMS5eKV/dO0MWZeWq8wJZ78u1z0dolYasKpKpD5Mn+PkjCpF1qY3RzE0hotQOT8cQSfAf3y6HQPAQkS8OuatRrWaxE2UvyjWM2GPaha0HR8aEZIzupiXf7JAZfs8P83cuQHjlzgfAmIeDSFTzFI7ipFMTNRgBdxCDQdBcdYf+ln1lZGxniKmNzJM5UjjHlDw1eX/t+Re1zEGwW0OJ4n8ZLIPXbCTBtvsGF+sCGZaeEJXUgrlV2sPFIbR+BoMKe9gkmYZgX3rLJEMgtuiOoguup6Pn+WhagVbeeBCQ5SPxIB+DuE5tbMB/ScX6DdufmrZuDs+UUPCEZwmiFMnq3HiugesPzSX5K+v7+QbSb8lUZI6JC0fi/Gf+87uKqynnIC0ethr8XJQrhGUmlxbQNApeMkTfFt4lIBExSNslWLvF0IAPfL52rZOnY4SiYJvU4BO9VgvFs9+8Eh3c= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376002)(346002)(136003)(396003)(366004)(39840400004)(230922051799003)(451199024)(186009)(64100799003)(1800799012)(107886003)(26005)(1076003)(52116002)(6666004)(2616005)(6512007)(83380400001)(5660300002)(44832011)(4326008)(8676002)(41300700001)(2906002)(8936002)(6486002)(478600001)(316002)(6916009)(54906003)(66476007)(66556008)(66946007)(6506007)(86362001)(36756003)(38100700002)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: LE+tiUIjHYNvY4mKGCwac1f/NS0vnVn9GOx4QmEDogVPM29Vvsunub74ep++UIuAgmt74lI8b19wSF9tEnhWFiGwp1vgI1+sQ54Nw/xBrvRS1sU2ncIXUhzhBFL6/mspfbFzzy3S9JdZotspSlo1vZhUhiSDzfKTJ+SYLJy8qBVGr0kkHoD36K4C5wmWtCHTYYUDHRJcpLNufZeEtBl2b8IUWgCX1BM0VZmF90DBBiWbNZbYPnOHKwutmOWa8q8zrJfQ1+sHOTS83FVjvQXKTjOCN0YYqD3xiJxJmC3CNDIA74y+Bs7xqvMPIebrVBiXwGPd6oJa+aAH6OK5/lpbZqxShgY6UEOIjC0HjrjPyclmv6ANQhcSJC0D1zrZKrxTP3x4Y9lxdtDwOObfo50MTuZ+HQZX4Huo8ML2uaWUw3CWxWHNcsRhbvqjv5USpIwgn1+P1VzJkiRN5hR/bxPAAv61o4TJVdCNDDuj4MsltYNdv5UD4R2A02BqHseg9MJZArmV6N1pjc6cz4HoEjCajsziJkMxrQz8Czm7xIupi7g2gcK2l5BIqeZs3dXJ1kgmhh9zpE9T7OalAEF2NNQhj37IuYeHUHrqAkROHXk7OgZhdhKwZpgJYvw2juz2YaPpYnqEqbYPHhq+5F3ok0WmTqrB/iQT7SoJPDAUyjjETO7jM80zS3eJ8WIqSQEhD4tcmMHx2mYHPwbZVZ0Cki46xHCOhJD1YUl6Ym/zJFxIcLaEpd29vnbLEDWZa9wOrqk68uZR6i7XDR7gJSacMvixjssuMWLdf+Two9p/gT6bqkuXA6ED+w0URtNXK4e/jvqbiAq2/LjKjOBxyk9VJlc/XPPLXBwIUC46HhrhxHX1MNX0PAAgzkl3Cn4Kkdhwot6djiBkoZ5hEmCvidslUMtUeEH+6g4qqO8roZLuIx8nwff2xF5/EwVyowsYMWlff37p/qhRepbWAgga+zDmVmqTdUGM2vqHRIfQ1sPSyEx883SNBXBGf0JS65g885dzRGsZpyRQOc3CombGHKe8+2E1JH/+WKX+H3CJ0pF8i9Td48efmwGF7Mv0a+8ourfAJ4tO0yR/eYuN/Uvr5elqzftDpd0aGEOwpmBuu2L7xoRfYbc3aYPsdM/me9ulpvASVp5ObiK7GemVIdiVC5sJPJ9KIZqlfNOu7c5U5bhf8qHdkHhLNV852ScWLW526iDtYfTxOf69MA8ltO4v7PSh1fz+kz0s1NtyFCUbCx0K+3+l0a5/wI2/apNHAovK5XFfsJnFN7CziWS30z0hmQyYpZPL0p9Z3ZJg+fweiMkMpwgzI6D2Nd1JJdKVES6ZPBwOZOmdRnOR150+7C7hscXRlouM/tbnXA7ewQFSfTv8ZXyhSNeT4OfGGfiGLnT8KrzFfRboCojkwOnqnmpTSeKYDhXsxv9ht/MRKh0drXJvi7e8z3fSYZe8ECEENN79L5bqSsRvJNBYyP2z9orQc/8L0Ex/WRUjPc8kCBYLapShgv/OpJj3O6OPZj0lJ2onO+ixFYLUAgNlLYrdO3D32gxMYJYFVaBrvGf3/tUshzS/zurt8inxmsleEkFtla/pU/qdEq1Eh34Y/9J1FhwNc6wPLrxNww== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 112b8d1e-45cf-420c-dbd4-08dc05e454bd X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Dec 2023 07:29:01.5088 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: qzYMZziWW7VHuxJsAZH/VpHPbBAJP5fX8Y7NIUezzyJFSOBHACDj55nqUkY8isdG01k6zQqj+0IpUwvD/RO8XCC/oj/SLXO2jDJRY3rEz/k= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR13MB6506 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Long Wu Driver sends control message to reset the bond firmware configuration in flower NIC initialization. Firmware should reset bond configuration to avoid strange problems caused by residues. Signed-off-by: Long Wu Reviewed-by: Peng Zhang Reviewed-by: Chaoyong He --- drivers/net/nfp/flower/nfp_flower.c | 23 ++++++ drivers/net/nfp/flower/nfp_flower_bond.c | 90 ++++++++++++++++++++++++ drivers/net/nfp/flower/nfp_flower_bond.h | 54 ++++++++++++++ drivers/net/nfp/flower/nfp_flower_cmsg.c | 35 +++++++++ drivers/net/nfp/flower/nfp_flower_cmsg.h | 3 + 5 files changed, 205 insertions(+) diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c index 195960e00d..fc3ea84828 100644 --- a/drivers/net/nfp/flower/nfp_flower.c +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -589,6 +589,22 @@ nfp_flower_sync_feature_cleanup(struct nfp_app_fw_flower *app_fw_flower) nfp_flower_bond_feature_cleanup(app_fw_flower); } +static int +nfp_flower_start_features(struct nfp_app_fw_flower *app_flower) +{ + int ret; + + if (nfp_flower_support_bond_offload(app_flower)) { + ret = nfp_flower_bond_reset(app_flower->nfp_bond); + if (ret != 0) { + PMD_INIT_LOG(ERR, "Reset bond feature failed"); + return ret; + } + } + + return 0; +} + static int nfp_flower_start_ctrl_vnic(struct nfp_net_hw *net_hw) { @@ -826,6 +842,13 @@ nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev, goto ctrl_vnic_cleanup; } + /* Start up some features */ + ret = nfp_flower_start_features(app_fw_flower); + if (ret != 0) { + PMD_INIT_LOG(ERR, "Failed to start features"); + goto sync_feature_cleanup; + } + /* Start up flower services */ ret = nfp_flower_enable_services(app_fw_flower); if (ret != 0) { diff --git a/drivers/net/nfp/flower/nfp_flower_bond.c b/drivers/net/nfp/flower/nfp_flower_bond.c index bbd2818e68..4ac27f117c 100644 --- a/drivers/net/nfp/flower/nfp_flower_bond.c +++ b/drivers/net/nfp/flower/nfp_flower_bond.c @@ -6,8 +6,31 @@ #include +#include "nfp_flower_cmsg.h" #include "nfp_flower_representor.h" +static void +nfp_fl_bond_cmsg_args_init(struct nfp_flower_bond_cmsg_args *cmsg_args, + struct nfp_bond_group *group, + struct rte_eth_dev **active_members, + uint32_t member_cnt, + enum nfp_flower_bond_batch batch) +{ + cmsg_args->group = group; + cmsg_args->active_members = active_members; + cmsg_args->member_cnt = member_cnt; + cmsg_args->batch = batch; +} + +static uint32_t +nfp_fl_get_next_pkt_number(struct nfp_flower_bond *nfp_bond) +{ + nfp_bond->pkt_num++; + nfp_bond->pkt_num &= NFP_FL_BOND_PKT_NUMBER_MASK; + + return nfp_bond->pkt_num; +} + static void nfp_flower_bond_increment_version(struct nfp_flower_bond *nfp_bond) { @@ -57,3 +80,70 @@ nfp_flower_bond_cleanup(struct nfp_app_fw_flower *app_fw_flower) rte_free(nfp_bond); app_fw_flower->nfp_bond = NULL; } + +int +nfp_flower_bond_reset(struct nfp_flower_bond *nfp_bond) +{ + struct nfp_app_fw_flower *app_flower; + enum nfp_flower_bond_batch batch = NFP_FLOWER_BOND_BATCH_FIRST; + struct nfp_flower_bond_cmsg_args init_args; + + app_flower = nfp_bond->app_fw_flower; + app_flower->nfp_bond->rst_cfg = true; + + nfp_fl_bond_cmsg_args_init(&init_args, NULL, NULL, 0, batch); + + return nfp_flower_cmsg_bond_config_group(app_flower, &init_args, &batch); +} + +enum nfp_flower_bond_batch +nfp_flower_bond_cmsg_payload(struct nfp_flower_bond *nfp_bond, + struct nfp_flower_cmsg_bond_config *msg, + struct nfp_flower_bond_cmsg_args *init_args) +{ + uint32_t i; + uint8_t flags = 0; + struct nfp_flower_representor *repr; + enum nfp_flower_bond_batch batch = init_args->batch; + + /* Increment batch version for each new batch of config messages. */ + if (batch == NFP_FLOWER_BOND_BATCH_FIRST) { + flags |= NFP_FL_BOND_FIRST; + nfp_flower_bond_increment_version(nfp_bond); + batch = NFP_FLOWER_BOND_BATCH_MEMBER; + } + + /* If it is a reset msg then it is also the end of the batch. */ + if (nfp_bond->rst_cfg) { + flags |= NFP_FL_BOND_RESET; + batch = NFP_FLOWER_BOND_BATCH_FINISHED; + } + + /* + * To signal the end of a batch, both the switch and last flags are set + * and the reserved SYNC group ID is used. + */ + if (batch == NFP_FLOWER_BOND_BATCH_FINISHED) { + flags |= NFP_FL_BOND_SWITCH | NFP_FL_BOND_LAST; + nfp_bond->rst_cfg = false; + msg->group_id = rte_cpu_to_be_32(NFP_FL_BOND_SYNC_ID); + msg->group_inst = 0; + } else { + msg->group_id = rte_cpu_to_be_32(init_args->group->group_id); + msg->group_inst = rte_cpu_to_be_32(init_args->group->group_inst); + } + + msg->reserved[0] = 0; + msg->reserved[1] = 0; + msg->ttl = NFP_FL_BOND_HOST_TTL; + msg->ctrl_flags = flags; + msg->batch_ver = rte_cpu_to_be_32(nfp_bond->batch_ver); + msg->pkt_number = rte_cpu_to_be_32(nfp_fl_get_next_pkt_number(nfp_bond)); + + for (i = 0; i < init_args->member_cnt; i++) { + repr = init_args->active_members[i]->data->dev_private; + msg->members[i] = rte_cpu_to_be_32(repr->port_id); + } + + return batch; +} diff --git a/drivers/net/nfp/flower/nfp_flower_bond.h b/drivers/net/nfp/flower/nfp_flower_bond.h index be79764a23..e15d9e09d5 100644 --- a/drivers/net/nfp/flower/nfp_flower_bond.h +++ b/drivers/net/nfp/flower/nfp_flower_bond.h @@ -7,18 +7,61 @@ #define __NFP_FLOWER_BOND_H__ #include +#include #include #include /* The batch version of bond offload packets between firmware and driver */ #define NFP_FL_BOND_VERSION_MASK 0x007fffff /* [0, 22] */ +#define NFP_FL_BOND_PKT_NUMBER_MASK 0x7fffffff /* [0, 30] */ + #define NFP_FL_ENABLE_BOND RTE_BIT32(1) /* ID 0 reserved and IDs 1 to 31 are valid */ #define NFP_FL_BOND_GROUP_MIN 1 #define NFP_FL_BOND_GROUP_MAX 32 +#define NFP_FL_BOND_HOST_TTL 0xff + +/* Use this ID with zero members to ack a batch config */ +#define NFP_FL_BOND_SYNC_ID 0 + +/* BOND group config flags */ +#define NFP_FL_BOND_LAST RTE_BIT32(1) +#define NFP_FL_BOND_FIRST RTE_BIT32(2) +#define NFP_FL_BOND_DATA RTE_BIT32(3) +#define NFP_FL_BOND_XON RTE_BIT32(4) +#define NFP_FL_BOND_SYNC RTE_BIT32(5) +#define NFP_FL_BOND_SWITCH RTE_BIT32(6) +#define NFP_FL_BOND_RESET RTE_BIT32(7) + +enum nfp_flower_bond_batch { + NFP_FLOWER_BOND_BATCH_FIRST, + NFP_FLOWER_BOND_BATCH_MEMBER, + NFP_FLOWER_BOND_BATCH_FINISHED +}; + +/* Control message payload for bond config */ +struct nfp_flower_cmsg_bond_config { + /** Configuration flags */ + uint8_t ctrl_flags; + /** Reserved for future use */ + uint8_t reserved[2]; + /** Time to live of packet - host always sets to 0xff */ + uint8_t ttl; + /** Config message packet number - increment for each message */ + rte_be32_t pkt_number; + /** Batch version of messages - increment for each batch of messages */ + rte_be32_t batch_ver; + /** Group ID applicable */ + rte_be32_t group_id; + /** Group instance number - increment when group is reused */ + rte_be32_t group_inst; + /** Array of 32-bit words listing all active group members */ + rte_be32_t members[]; +}; + /* List entry for each bond group */ struct nfp_bond_group { /** List entry */ @@ -59,7 +102,18 @@ struct nfp_flower_bond { struct nfp_app_fw_flower *app_fw_flower; }; +struct nfp_flower_bond_cmsg_args { + struct nfp_bond_group *group; + struct rte_eth_dev **active_members; + uint32_t member_cnt; + enum nfp_flower_bond_batch batch; +}; + int nfp_flower_bond_init(struct nfp_app_fw_flower *app_fw_flower); void nfp_flower_bond_cleanup(struct nfp_app_fw_flower *app_fw_flower); +int nfp_flower_bond_reset(struct nfp_flower_bond *nfp_bond); +enum nfp_flower_bond_batch nfp_flower_bond_cmsg_payload(struct nfp_flower_bond *nfp_bond, + struct nfp_flower_cmsg_bond_config *msg, + struct nfp_flower_bond_cmsg_args *init_args); #endif /* __NFP_FLOWER_BOND_H__ */ diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.c b/drivers/net/nfp/flower/nfp_flower_cmsg.c index 8effe9474d..0cf1bf2281 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.c +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.c @@ -567,3 +567,38 @@ nfp_flower_cmsg_qos_stats(struct nfp_app_fw_flower *app_fw_flower, return 0; } + +int +nfp_flower_cmsg_bond_config_group(struct nfp_app_fw_flower *app_flower, + struct nfp_flower_bond_cmsg_args *init_args, + enum nfp_flower_bond_batch *batch_out) +{ + uint16_t cnt; + uint32_t size; + struct rte_mbuf *mbuf; + struct nfp_flower_bond *nfp_bond; + struct nfp_flower_cmsg_bond_config *msg; + + mbuf = rte_pktmbuf_alloc(app_flower->ctrl_pktmbuf_pool); + if (mbuf == NULL) { + PMD_DRV_LOG(DEBUG, "Alloc mbuf for bond config failed"); + return -ENOMEM; + } + + size = sizeof(*msg) + sizeof(rte_be32_t) * init_args->member_cnt; + msg = nfp_flower_cmsg_init(app_flower, mbuf, + NFP_FLOWER_CMSG_TYPE_LAG_CONFIG, size); + + nfp_bond = app_flower->nfp_bond; + + *batch_out = nfp_flower_bond_cmsg_payload(nfp_bond, msg, init_args); + + cnt = nfp_flower_ctrl_vnic_xmit(app_flower, mbuf); + if (cnt == 0) { + PMD_DRV_LOG(ERR, "Send cmsg through ctrl vnic failed."); + rte_pktmbuf_free(mbuf); + return -EIO; + } + + return 0; +} diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index 45543816ae..60ab58a3b1 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -988,5 +988,8 @@ int nfp_flower_cmsg_qos_delete(struct nfp_app_fw_flower *app_fw_flower, struct nfp_profile_conf *conf); int nfp_flower_cmsg_qos_stats(struct nfp_app_fw_flower *app_fw_flower, struct nfp_cfg_head *head); +int nfp_flower_cmsg_bond_config_group(struct nfp_app_fw_flower *app_flower, + struct nfp_flower_bond_cmsg_args *init_args, + enum nfp_flower_bond_batch *batch_out); #endif /* __NFP_CMSG_H__ */ From patchwork Tue Dec 26 07:28:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 135579 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 80B8743795; Tue, 26 Dec 2023 08:30:06 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9FCD840C35; Tue, 26 Dec 2023 08:29:06 +0100 (CET) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2136.outbound.protection.outlook.com [40.107.212.136]) by mails.dpdk.org (Postfix) with ESMTP id 2D92D406B8 for ; Tue, 26 Dec 2023 08:29:05 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=deIfHXvHR11MvSNYJvsGJLoFO1fNcxo3JQqeucRcP9/+Zm8zdLiTWltWqQGq0Bhf7Zcj8IYT37okwp3gMghbAzkVWNQHBlSytJJqxGo4LcEFSe1ZH132nP3BLNN3qF6H8z1CZdYTLZBJKDuV20dAP5PVnQJGN+bFIW/yuHVW9duEvDGmOf3J+p/q59ctu9RtL5Wa+fu3HkLjfjISOPHoTt25xRUG+1Nv9DDDnxe7In9bBie3YnzstKN39bXILb6lq0muC+ikCeyXLk4rY/P4i+e5c4kkvxqRniN4266TliyRX3OdRbY9UlJbeR80mjlTETzx7U+9tNNUvmgPPlqeQA== 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=msm4+kObErOsnTDs1zcqbb+sD2m8L0kXo64hEOChBSY=; b=nVRPxw6cPHg78cqsZxPLHI7ZsGQ/3rp6rNZJEtRo9sL67+To4ndenAiB5eiH5UIzC+aH6Gl09nxrJcyfWCzxMvSrR2ffps24BMsqIOBuLs2MElZf5KTPUck8LIOjXClv9bEjssIOS6dPnusc5KoQqBh5Ge25TSbD8qhQEPQeoOoqZpZ6b2XpzkkbIVenFhQpf9Q7QYAjOqvJNUG7uZe4OLhLSJ6eF2CeL/z4ehGbeRoCtmUehTrXUWiEcEDH8MehSYBPl00fbpxYClVfNZSZoPWi8IgXYbYdeB/YQObMqpls1pakSsPGjOWp9tpAZjRm9MZwswtbJaMwQBWR31V0kg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=msm4+kObErOsnTDs1zcqbb+sD2m8L0kXo64hEOChBSY=; b=Ztac/iNOpGUmFihifdUfEEEOTAB4sJYZ6hrogohe25oEUhBcU9F/1ZCKTuUVmYRNbc8KaYsXFNs5Rd7kM11FazrSHIpU6nbuwCOAHuFz/5z2eEr2/1o8etVWz6n1wJFWqX14eNmmv/tqHyBAKfUzGzfF5qdNPpzpXhDRSbSK3bk= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by CH3PR13MB6506.namprd13.prod.outlook.com (2603:10b6:610:1a3::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.27; Tue, 26 Dec 2023 07:29:03 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.7113.027; Tue, 26 Dec 2023 07:29:03 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Long Wu , Peng Zhang , Chaoyong He Subject: [PATCH v6 10/14] net/nfp: handle link event of bond firmware creation Date: Tue, 26 Dec 2023 15:28:20 +0800 Message-Id: <20231226072824.3163121-11-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231226072824.3163121-1-chaoyong.he@corigine.com> References: <20231226023745.3144143-1-chaoyong.he@corigine.com> <20231226072824.3163121-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SJ0PR03CA0239.namprd03.prod.outlook.com (2603:10b6:a03:39f::34) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH3PR13MB6506:EE_ X-MS-Office365-Filtering-Correlation-Id: a84469cd-c792-4c44-5912-08dc05e455de X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: U2RLe138spLzHRiYIqjNXTq2nlaJu2gLu7cc7o9mEZZ89izcXDGfWuYk8fyNt8tIekY6+uGZuEE4TYjxP9g/vWCxOVjlnzxQsiVXWhJcEbxlaFgDCBspIR2TCiWwNWlmNG4Sx4w7IsCEEcEqYyr1k2PrLh5/kqm4rmiD2L0szrIdEeuU0I8Vte5xj7K2Z0XEplR92tOr1Fc7OUqI9xlu+dPSCCFzj32LQyHWD/ZmPyyp4A7XtoYs2oqdJ/JbRDSmT7Y7fNB0qeFb4W7tUdstpBwx3jrRBI+KWrs0E/eCnVhYIa2fthPZf1tigdsnHVg4pt/t3jBkHM1HZu7lrtOlLS6L/HzDrdmQyyPU21W1Ge/Q8+8smSxZZCH+8cJK+fjXJWNUsz631OKSH27EZhEYsdNL1v+hvNsHukYtUVAcHIUlNaCoANK+GK9bg0HAicee5CEAuX00odwAFsUzLFlKySdKZnQNAbC+R2L7MGawZ3iJgpEi9klCRpEinkQL/LXeTW56NZdNPnU1uah7HVXpyAsnCrPJLPoBDrt14hhDEj97Bd5789uFR1ZVrv+pfWFUTprexyNGBBHzl54g/weJtT+TZ+46XolRIyr808jcPvlAVrf8ao22cDCzmWiR/1GrKlVJoghKSWl/x0wselvDMcaD7WYv1yBDTz0o9MPKSpA= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376002)(346002)(136003)(396003)(366004)(39840400004)(230922051799003)(451199024)(186009)(64100799003)(1800799012)(107886003)(26005)(1076003)(52116002)(6666004)(2616005)(6512007)(83380400001)(5660300002)(44832011)(4326008)(8676002)(41300700001)(2906002)(30864003)(8936002)(6486002)(478600001)(316002)(6916009)(54906003)(66476007)(66556008)(66946007)(6506007)(86362001)(36756003)(38100700002)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 8yOqjt7NUJrT/tDcBj04so+EVZRWsaf5aOXJ5HsBLXVX5Xfnk2u8qYsZjHVMnFhEuHACA7wJyCpnEDhd0OS4eyW0uCXpY8XLraztNq8Vh/TrqndudB8Vdwld/nLLDRxYuVzrLlu1pvg0ttnXrUdige2fngiRkF9lMSVCS5moDL0sCSIXfhp2W7jHEqbPWpy8hJM39nL0vCy4SrkmUS4Ou88N57Gnqj95gcRd2waxzyq6zFf65p9KftkeIVpKwS94e4VeM2gpwvVMpPh0X+R+GHlT/kf7RJxs2M8cFE6OjlsGMPzzPfQ3l5c5AX4dBIzBsz5xSwJhg11yPG5GssAh3E3/3PQ5OXQKJX1aZrRW0yOP0c5wmiQWFpyqc9hbU/NSdpQEmlPJ0YSVpdKLEaSwcezayWSV7WFdI7ZhFNKSjleKAII9KTKTy3l6tHnysmMz3EgQjkkkmQn/gQPbB5zZiolJqY9AkLutz37AL2e9jD33dv60WD8IB8oisfipe4yzYiUe0nNID7i7zh3hSKtdKgoCM6vuiTmSiVtPNCAHvpYaLj09srRap+u/KSbVWy27gbuOhaZUThs2NtC75JOWmVVM3KAIzgT4kDtQhTucyJd0OdkgC20JIKa1MAjiO9cdbOr0lHOMVRfT/pTIZseKKgWXkpBYrguBYIeT2QMN7rDfY6c1Ei0I6bEuNvFmQTA+F627x0D90jSNaoNDLUJNRPaMGd+N8PifOPNCiL05rJBd8JQDoSRWIFM0NMDAxed6c+GUnf1LaI4u9+jsoxELx4w4ZUsD3kKiyRyMxmK0mpD+dDNralH78xAuw3f6hTNSygvJa9WpgpDGWOMi5u6oWlhW+t+EAbl0SvJkF96btnGm6NYWi4gMk7RG9Dkaa+WyNOG6boKGGvBDJzKj5XNN6EO9UJdNfNCOMdSlvl5VjVDsxS6OI9ushEI1iusWWlsz/3AFsr4NPAJNn0GWhXoEs762uPkOx4xggBx7Ri2cOi59qBHx2AjB8YiL0ZdMqdBoe9s/kkuaSzT9PRDQL10Y9T2xRLMG2ZsEF4ccyXgpLc3hiiazBfVr046D7Oa0zXrK6okbOJ/gd+vLIvJHpNFJw/ele2e2rNFhEppFNOGq6Aw1T/7KPYuwH9/XQZdnRDiROccoC11IJkRvMpcK8T5NqmMNI3XInbd5HQEpReYy+pVTcjmeDWk3FMJfOlgNCbv1KHXmMNNw1tOemVZQFGQHb41S2fWgXbSKf/TTEFXWKuJ8V89DN794hr2aao6td9eBZrIWwTh44RrC/sd7Fi0ZsaA+WHoEipdK7l4mSGBGeysKmBZaPrLOcFCo3GgyM2StkfiJVibVsjIpBPSAFvrMUD23ertYSKIILVKDMicfEd2UGnEOzuxzABxIlSzlp/6z3c2XWGsWvaRJza4kYkyqp9WIhAb/trfkZytz7N5q6/j7KvdpGIj9rb89tYwmaK/7ncAMI4KTf3NXnVHs+Oa3n+n267wskzqndfYtbkM6Li3FnrSE9yiM225vtqAb3DbrZh08bREps5qMDCxjGVJV9KlpMuOg1csi61A1EANClBdqwk/vom/GJi3RWAZJtA5dwuWWra5+sq0EldNGs0Y2Wg== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: a84469cd-c792-4c44-5912-08dc05e455de X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Dec 2023 07:29:03.4101 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: bSOqC38zWAN9rRj6h3j/xj7NkChh9vmmPzDr+D8exQXAKzO7bTahHtaViVN88ms46lBHnKjpULBml/uIFlit10Il49R2CSu0ilVRoWlAuFs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR13MB6506 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Long Wu If NFP physical representor port is a member port of bonding port, its link status changed and firmware has created the bonding port, driver will record the link status and send control message to notify firmware. Signed-off-by: Long Wu Reviewed-by: Peng Zhang Reviewed-by: Chaoyong He --- drivers/net/nfp/flower/nfp_flower_bond.c | 259 ++++++++++++++++++ drivers/net/nfp/flower/nfp_flower_bond.h | 22 ++ .../net/nfp/flower/nfp_flower_representor.c | 13 + .../net/nfp/flower/nfp_flower_representor.h | 2 + drivers/net/nfp/meson.build | 2 +- drivers/net/nfp/nfp_net_common.c | 25 ++ drivers/net/nfp/nfp_net_common.h | 1 - 7 files changed, 322 insertions(+), 2 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower_bond.c b/drivers/net/nfp/flower/nfp_flower_bond.c index 4ac27f117c..c814c0d4ea 100644 --- a/drivers/net/nfp/flower/nfp_flower_bond.c +++ b/drivers/net/nfp/flower/nfp_flower_bond.c @@ -4,8 +4,11 @@ */ #include "nfp_flower_bond.h" +#include +#include #include +#include "../nfp_logs.h" #include "nfp_flower_cmsg.h" #include "nfp_flower_representor.h" @@ -43,6 +46,72 @@ nfp_flower_bond_increment_version(struct nfp_flower_bond *nfp_bond) nfp_bond->batch_ver += 2; } +static enum nfp_flower_bond_batch +nfp_flower_bond_remove_node(struct nfp_flower_bond *nfp_bond, + struct nfp_bond_group *entry, + enum nfp_flower_bond_batch batch) +{ + enum nfp_flower_bond_batch batch_out; + struct nfp_flower_bond_cmsg_args cmsg_args; + struct nfp_app_fw_flower *app_flower = nfp_bond->app_fw_flower; + + nfp_fl_bond_cmsg_args_init(&cmsg_args, entry, NULL, 0, batch); + if (nfp_flower_cmsg_bond_config_group(app_flower, &cmsg_args, &batch_out) != 0) { + PMD_DRV_LOG(ERR, "group remove failed."); + return batch_out; + } + + entry->to_remove = false; + entry->offloaded = false; + + if (entry->to_destroy) { + LIST_REMOVE(entry, next); + rte_free(entry); + } + + return batch_out; +} + +static void +nfp_flower_bond_member_work_status(struct nfp_bond_group *entry, + struct rte_eth_dev **active_eth_devs, + uint32_t *active) +{ + uint32_t i; + uint32_t *flags; + uint32_t active_count; + uint16_t member_port_id; + struct rte_eth_dev *eth_dev; + struct bond_dev_private *internals; + struct nfp_flower_representor *repr; + + active_count = 0; + + internals = entry->main_dev->data->dev_private; + for (i = 0; i < internals->member_count; i++) { + member_port_id = internals->members[i].port_id; + if (internals->current_primary_port == member_port_id || + internals->mode != BONDING_MODE_ACTIVE_BACKUP) { + eth_dev = &rte_eth_devices[member_port_id]; + repr = eth_dev->data->dev_private; + flags = &repr->bond_port_flags; + + if ((*flags & NFP_FL_BOND_PORT_CHANGED) != 0) { + *flags &= ~NFP_FL_BOND_PORT_CHANGED; + entry->dirty = true; + } + + if ((*flags & NFP_FL_BOND_PORT_TX_ENABLED) != 0 && + (*flags & NFP_FL_BOND_PORT_LINK_UP) != 0) { + active_eth_devs[active_count] = eth_dev; + active_count++; + } + } + } + + *active = active_count; +} + int nfp_flower_bond_init(struct nfp_app_fw_flower *app_fw_flower) { @@ -96,6 +165,132 @@ nfp_flower_bond_reset(struct nfp_flower_bond *nfp_bond) return nfp_flower_cmsg_bond_config_group(app_flower, &init_args, &batch); } +struct nfp_bond_group * +nfp_flower_bond_find_group(struct nfp_flower_bond *nfp_bond, + const struct rte_eth_dev *bond_dev) +{ + struct nfp_bond_group *group; + + LIST_FOREACH(group, &nfp_bond->group_list, next) { + if (group->main_dev == bond_dev) + return group; + } + + return NULL; +} + +void +nfp_flower_bond_do_work(struct nfp_flower_bond *nfp_bond) +{ + int ret; + uint32_t active_count; + struct nfp_bond_group *entry; + struct nfp_app_fw_flower *app_flower; + struct nfp_flower_bond_cmsg_args cmsg_args; + struct rte_eth_dev *active_eth_devs[RTE_MAX_ETHPORTS]; + enum nfp_flower_bond_batch batch = NFP_FLOWER_BOND_BATCH_FIRST; + + app_flower = nfp_bond->app_fw_flower; + + pthread_mutex_lock(&nfp_bond->mutex); + + LIST_FOREACH(entry, &nfp_bond->group_list, next) { + if (entry->to_remove) { + batch = nfp_flower_bond_remove_node(nfp_bond, entry, batch); + continue; + } + + nfp_flower_bond_member_work_status(entry, active_eth_devs, + &active_count); + + if (!entry->dirty) + continue; + + nfp_fl_bond_cmsg_args_init(&cmsg_args, entry, active_eth_devs, + active_count, batch); + + ret = nfp_flower_cmsg_bond_config_group(app_flower, &cmsg_args, &batch); + if (ret == 0) { + entry->offloaded = true; + entry->dirty = false; + } else { + PMD_DRV_LOG(DEBUG, "Group config failed."); + } + } + + /* End the config batch if at least one packet has been batched. */ + if (batch == NFP_FLOWER_BOND_BATCH_MEMBER) { + batch = NFP_FLOWER_BOND_BATCH_FINISHED; + nfp_fl_bond_cmsg_args_init(&cmsg_args, NULL, NULL, 0, batch); + ret = nfp_flower_cmsg_bond_config_group(app_flower, &cmsg_args, &batch); + if (ret != 0) + PMD_DRV_LOG(DEBUG, "Group batch end cmsg failed"); + } + + pthread_mutex_unlock(&nfp_bond->mutex); + + /* + * A batch of packets rx in firmware has been set for at least two timing + * units, so trigger copying at next opportunity to limit latency from + * receiving data to being available for use. + */ + rte_delay_ms(1); +} + +static void +nfp_flower_bond_change_linkstatus_event(struct nfp_flower_bond *nfp_bond, + struct rte_eth_dev *bond_dev, + struct rte_eth_dev *nfp_dev) +{ + uint32_t *bond_port_flags; + struct nfp_bond_group *group; + struct nfp_flower_representor *repr; + + if (!nfp_flower_bond_is_member_port(bond_dev, nfp_dev)) + return; + + pthread_mutex_lock(&nfp_bond->mutex); + + group = nfp_flower_bond_find_group(nfp_bond, bond_dev); + if (group == NULL) { + pthread_mutex_unlock(&nfp_bond->mutex); + return; + } + + pthread_mutex_unlock(&nfp_bond->mutex); + + repr = nfp_dev->data->dev_private; + bond_port_flags = &repr->bond_port_flags; + + if (repr->link.link_status == RTE_ETH_LINK_UP) + *bond_port_flags |= NFP_FL_BOND_PORT_LINK_UP; + else + *bond_port_flags &= ~NFP_FL_BOND_PORT_LINK_UP; + + *bond_port_flags |= NFP_FL_BOND_PORT_TX_ENABLED; + *bond_port_flags |= NFP_FL_BOND_PORT_CHANGED; +} + +int +nfp_flower_bond_event_handle(struct nfp_flower_bond *nfp_bond, + struct rte_eth_dev *bond_dev, + struct rte_eth_dev *nfp_dev, + enum nfp_flower_bond_event event) +{ + switch (event) { + case NFP_FLOWER_CHANGELINKSTATUS: + nfp_flower_bond_change_linkstatus_event(nfp_bond, bond_dev, nfp_dev); + break; + default: + PMD_DRV_LOG(ERR, "Invalid bond offload event."); + return -1; + } + + nfp_flower_bond_do_work(nfp_bond); + + return 0; +} + enum nfp_flower_bond_batch nfp_flower_bond_cmsg_payload(struct nfp_flower_bond *nfp_bond, struct nfp_flower_cmsg_bond_config *msg, @@ -147,3 +342,67 @@ nfp_flower_bond_cmsg_payload(struct nfp_flower_bond *nfp_bond, return batch; } + +bool +nfp_flower_bond_is_member_port(struct rte_eth_dev *bond_dev, + struct rte_eth_dev *nfp_dev) +{ + uint32_t i; + struct bond_dev_private *internals; + + if (!nfp_flower_is_phy_repr(nfp_dev)) + return false; + + internals = bond_dev->data->dev_private; + + for (i = 0; i < internals->member_count; i++) { + if (nfp_dev == &rte_eth_devices[internals->members[i].port_id]) + return true; + } + + return false; +} + +struct rte_eth_dev * +nfp_flower_bond_find_bond_device(struct rte_eth_dev *nfp_dev) +{ + struct nfp_bond_group *group; + struct nfp_flower_representor *repr; + struct rte_eth_dev *bond_dev = NULL; + + if (!nfp_flower_is_phy_repr(nfp_dev)) + return NULL; + + repr = nfp_dev->data->dev_private; + + pthread_mutex_lock(&repr->app_fw_flower->nfp_bond->mutex); + LIST_FOREACH(group, &repr->app_fw_flower->nfp_bond->group_list, next) { + if (nfp_flower_bond_is_member_port(group->main_dev, nfp_dev)) { + bond_dev = group->main_dev; + break; + } + } + pthread_mutex_unlock(&repr->app_fw_flower->nfp_bond->mutex); + + return bond_dev; +} + +bool +nfp_flower_bond_all_member_are_phyrepr(struct rte_eth_dev *bond_dev) +{ + uint32_t i; + struct rte_eth_dev *eth_dev; + struct bond_dev_private *internals; + + if (bond_dev == NULL) + return false; + + internals = bond_dev->data->dev_private; + for (i = 0; i < internals->member_count; i++) { + eth_dev = &rte_eth_devices[internals->members[i].port_id]; + if (!nfp_flower_is_phy_repr(eth_dev)) + return false; + } + + return true; +} diff --git a/drivers/net/nfp/flower/nfp_flower_bond.h b/drivers/net/nfp/flower/nfp_flower_bond.h index e15d9e09d5..e4a09b3427 100644 --- a/drivers/net/nfp/flower/nfp_flower_bond.h +++ b/drivers/net/nfp/flower/nfp_flower_bond.h @@ -36,12 +36,23 @@ #define NFP_FL_BOND_SWITCH RTE_BIT32(6) #define NFP_FL_BOND_RESET RTE_BIT32(7) +/* BOND port state flags. */ +#define NFP_FL_BOND_PORT_LINK_UP RTE_BIT32(0) +#define NFP_FL_BOND_PORT_TX_ENABLED RTE_BIT32(1) +#define NFP_FL_BOND_PORT_CHANGED RTE_BIT32(2) + enum nfp_flower_bond_batch { NFP_FLOWER_BOND_BATCH_FIRST, NFP_FLOWER_BOND_BATCH_MEMBER, NFP_FLOWER_BOND_BATCH_FINISHED }; +enum nfp_flower_bond_event { + NFP_FLOWER_CHANGEUPPER, + NFP_FLOWER_CHANGELINKSTATUS, + NFP_FLOWER_UNREGISTER +}; + /* Control message payload for bond config */ struct nfp_flower_cmsg_bond_config { /** Configuration flags */ @@ -115,5 +126,16 @@ int nfp_flower_bond_reset(struct nfp_flower_bond *nfp_bond); enum nfp_flower_bond_batch nfp_flower_bond_cmsg_payload(struct nfp_flower_bond *nfp_bond, struct nfp_flower_cmsg_bond_config *msg, struct nfp_flower_bond_cmsg_args *init_args); +struct rte_eth_dev *nfp_flower_bond_find_bond_device(struct rte_eth_dev *nfp_dev); +bool nfp_flower_bond_is_member_port(struct rte_eth_dev *bond_dev, + struct rte_eth_dev *nfp_dev); +struct nfp_bond_group *nfp_flower_bond_find_group(struct nfp_flower_bond *nfp_bond, + const struct rte_eth_dev *bond_dev); +int nfp_flower_bond_event_handle(struct nfp_flower_bond *nfp_bond, + struct rte_eth_dev *bond_dev, + struct rte_eth_dev *nfp_dev, + enum nfp_flower_bond_event event); +void nfp_flower_bond_do_work(struct nfp_flower_bond *nfp_bond); +bool nfp_flower_bond_all_member_are_phyrepr(struct rte_eth_dev *bond_dev); #endif /* __NFP_FLOWER_BOND_H__ */ diff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c index 7d8c055b80..2810a7a271 100644 --- a/drivers/net/nfp/flower/nfp_flower_representor.c +++ b/drivers/net/nfp/flower/nfp_flower_representor.c @@ -827,3 +827,16 @@ nfp_flower_repr_create(struct nfp_app_fw_flower *app_fw_flower) return ret; } + +bool +nfp_flower_is_phy_repr(struct rte_eth_dev *eth_dev) +{ + struct nfp_flower_representor *repr; + + if ((eth_dev->data->dev_flags & RTE_ETH_DEV_REPRESENTOR) != 0) { + repr = eth_dev->data->dev_private; + return repr->repr_type == NFP_REPR_TYPE_PHYS_PORT; + } + + return false; +} diff --git a/drivers/net/nfp/flower/nfp_flower_representor.h b/drivers/net/nfp/flower/nfp_flower_representor.h index 8053617562..164e2f1322 100644 --- a/drivers/net/nfp/flower/nfp_flower_representor.h +++ b/drivers/net/nfp/flower/nfp_flower_representor.h @@ -14,6 +14,7 @@ struct nfp_flower_representor { uint32_t repr_type; uint32_t port_id; uint32_t nfp_idx; /**< Only valid for the repr of physical port */ + uint32_t bond_port_flags; char name[RTE_ETH_NAME_MAX_LEN]; struct rte_ether_addr mac_addr; struct nfp_app_fw_flower *app_fw_flower; @@ -24,5 +25,6 @@ struct nfp_flower_representor { }; int nfp_flower_repr_create(struct nfp_app_fw_flower *app_fw_flower); +bool nfp_flower_is_phy_repr(struct rte_eth_dev *eth_dev); #endif /* __NFP_FLOWER_REPRESENTOR_H__ */ diff --git a/drivers/net/nfp/meson.build b/drivers/net/nfp/meson.build index f0d4bbcecb..c309505c83 100644 --- a/drivers/net/nfp/meson.build +++ b/drivers/net/nfp/meson.build @@ -42,4 +42,4 @@ sources = files( 'nfp_rxtx.c', ) -deps += ['hash', 'security', 'common_nfp'] +deps += ['hash', 'security', 'common_nfp', 'net_bond'] diff --git a/drivers/net/nfp/nfp_net_common.c b/drivers/net/nfp/nfp_net_common.c index a438eb5871..810903c033 100644 --- a/drivers/net/nfp/nfp_net_common.c +++ b/drivers/net/nfp/nfp_net_common.c @@ -9,6 +9,7 @@ #include +#include "flower/nfp_flower.h" #include "flower/nfp_flower_representor.h" #include "nfd3/nfp_nfd3.h" #include "nfdk/nfp_nfdk.h" @@ -719,6 +720,23 @@ nfp_net_speed_aneg_update(struct rte_eth_dev *dev, return 0; } +static void +nfp_net_bond_link_event_notify(struct rte_eth_dev *dev) +{ + struct rte_eth_dev *bond_dev; + struct nfp_flower_representor *repr = dev->data->dev_private; + + if (!nfp_flower_support_bond_offload(repr->app_fw_flower)) + return; + + bond_dev = nfp_flower_bond_find_bond_device(dev); + if (!nfp_flower_bond_all_member_are_phyrepr(bond_dev)) + return; + + nfp_flower_bond_event_handle(repr->app_fw_flower->nfp_bond, bond_dev, + dev, NFP_FLOWER_CHANGELINKSTATUS); +} + int nfp_net_link_update_common(struct rte_eth_dev *dev, struct nfp_net_hw *hw, @@ -753,6 +771,13 @@ nfp_net_link_update_common(struct rte_eth_dev *dev, PMD_DRV_LOG(INFO, "NIC Link is Up"); else PMD_DRV_LOG(INFO, "NIC Link is Down"); + + /* + * Link status changed and if repr is a member port in bond device, + * we need to call func to do something special. + */ + if ((dev->data->dev_flags & RTE_ETH_DEV_REPRESENTOR) != 0) + nfp_net_bond_link_event_notify(dev); } return ret; diff --git a/drivers/net/nfp/nfp_net_common.h b/drivers/net/nfp/nfp_net_common.h index 66c900e3b8..9d6cf4b016 100644 --- a/drivers/net/nfp/nfp_net_common.h +++ b/drivers/net/nfp/nfp_net_common.h @@ -295,7 +295,6 @@ int nfp_net_fec_get(struct rte_eth_dev *dev, uint32_t *fec_capa); int nfp_net_fec_set(struct rte_eth_dev *dev, uint32_t fec_capa); - #define NFP_PRIV_TO_APP_FW_NIC(app_fw_priv)\ ((struct nfp_app_fw_nic *)app_fw_priv) From patchwork Tue Dec 26 07:28:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 135580 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 154C643795; Tue, 26 Dec 2023 08:30:13 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E367240A72; Tue, 26 Dec 2023 08:29:07 +0100 (CET) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2096.outbound.protection.outlook.com [40.107.212.96]) by mails.dpdk.org (Postfix) with ESMTP id E0F1440DCA for ; Tue, 26 Dec 2023 08:29:06 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UnG3qEiiYPWS/sC0hAfIdTzYOqbRJl7vufD7lq1lAXocDIPVEkpAlLOLIawO2yEKuWfti2GUkpJTA2KM9DG7lnU+aqPhckaoyBV7jU77ITTVOoWr48dRh8LcP9Q7Wz+rNuGUmxxYCf6Op2OIXhxI7Rd2FNFoGcsfBAf2aqKHqWeBfTRxANnV7YNig44ruQtH5YrLSUBgtuSJyPbzX1ZU9nuLejMmPyXxmldIM+/o2Ndla1+tlOJjreoy58WCiFEuN/DxYG2nB4i29QEDgrHKVMcVhPj7jSccXpwDgBvJY6Wbgbic1OU59ZgZu7FymjA4btz2t/e3Q4scjL0D9hozEQ== 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=ij8QBNgBP72k6ZRgpa33f2G29FEr1Y+m+yfbZ+QHxBk=; b=EE1JdFL5yrjk4gC7MQdrjxGxrW7vR857S2mYkQaDUbz6b0CrPUj20YLPc97m4fwAqi2MTonabj7Q14Ygpq+DbsVgEY6Ze+FBVg7r0sJjnSxQ7w5hR2LkceefD343PJrckoduyewG2kdqtQU6bZVeZDKCWJuS5KdondMSeBDPpZFrtZ3WLmaNoVaDa8IjuEHkuag764dplk9vpYVf/sy+benfwjP1xkrldPvtlizqQiAnHhHpgadto3BSd9HIcPY3eG3JE5SaIW9h0n05rB+/tdTbG+DwTXaSuDvZ+neMUmwWdE5/cpisWkV/DI7iF/kckJRhtNw/E892ohWMSTOHRg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ij8QBNgBP72k6ZRgpa33f2G29FEr1Y+m+yfbZ+QHxBk=; b=AJU0c5UpGAhyf+44gEUNCieCrW+4aS71qn3aWT2HzSm6uBWEhrCuK1lzMSNJAnwbxp+VuzPVQexMicfrWSpqbFVEGd6vNL0VyMXJTE1mrUD3h01MVDfS4EAnAP7k1YhSht3l4iiw9WRNJYenh2gZr/W1IUzjMheJ4WOgOLo317g= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by CH3PR13MB6506.namprd13.prod.outlook.com (2603:10b6:610:1a3::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.27; Tue, 26 Dec 2023 07:29:05 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.7113.027; Tue, 26 Dec 2023 07:29:05 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Long Wu , Peng Zhang , Chaoyong He Subject: [PATCH v6 11/14] net/nfp: support bond member notification Date: Tue, 26 Dec 2023 15:28:21 +0800 Message-Id: <20231226072824.3163121-12-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231226072824.3163121-1-chaoyong.he@corigine.com> References: <20231226023745.3144143-1-chaoyong.he@corigine.com> <20231226072824.3163121-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SJ0PR03CA0239.namprd03.prod.outlook.com (2603:10b6:a03:39f::34) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH3PR13MB6506:EE_ X-MS-Office365-Filtering-Correlation-Id: 343d4728-9b52-4608-9a57-08dc05e45703 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Zbo85fK/+lymgJBBp3XYt53bu/lXoQUjUy6jFUvjgzR47WORVy5LDaUPeZi7b/Es0cwbi7vx8vGEFG/wmo4kB+MjuqiOPnS1v+wi7u3ArvKrmLVeqzIvuMQMGlM73yc9W5se6vYTA2FEWUZKSqhxG6+pbq907TVuVPcm4BIQVQxel9HpvK7OVkJQ4cMGaQcmX11Na9COsikKdXlVkOIBahcv8I19gl9hwpGb7/WirczlgQIWcyKaLCHfgADQA7KBLeXj7Fq+3PzzRTTfgVo3WZ+TXEeOkszHH4m+1CqLAaBWJCrh6f9ttnpAi6rKrIGAYsep1ulf93lik74edlDRU0Obl+lZk4U2GUTV5K4WmQuAGIOIdhD9hsBWNuVMpPLkbrwEJPZHUmp/1YiY7VpMVlcyhyH9fdQQ+oDt2woNqn2ABjsLfGgx38v7+7M4qsk4sL/X7tLYJBJbXstxUzoKiAeLH/HeS1eN7UMuPBOyDUX88lV3xW9DJR6/yVQie0GTCQqE7f8VPIc3/8Dy6s6z+iG0/SZFOEL0M3WL8tDZSc6nWYAu3zHxW6V0byV7SnyXq0+20dNLlbovnLuow0GA2mYYwDgzU0Qj7LKNbO7KJBlxpzPfxE9h1NnPQ5TTT6wKK1pVVgKOLxE8Q11eQuz8TNTYXXNL9DS6i98G4kngeKMw/4Ebr+7IadNYmHA7gn5MJSi4gs7NezXQTurXq7uTwA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376002)(346002)(136003)(396003)(366004)(39840400004)(230273577357003)(230173577357003)(230922051799003)(451199024)(186009)(64100799003)(1800799012)(107886003)(26005)(1076003)(52116002)(6666004)(2616005)(6512007)(83380400001)(5660300002)(44832011)(15650500001)(4326008)(8676002)(41300700001)(2906002)(8936002)(6486002)(478600001)(316002)(6916009)(54906003)(66476007)(66556008)(66946007)(6506007)(86362001)(36756003)(38100700002)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 5sN8SXacNfxPc3NoAvYaRVjaIDaB+QI/GhZzfaZx/LIqoShvoZF7PSWaWtoR/WMLE/8Zw5orzVMqUF8eOiS6p10orumiyHBEtR8VCTU6ZSd+n5RM8XjkzksLGlLXEmiiAE6iKNk/mVOOj6dJhMYkQhZdtPdDye5r+F45kXUmzsyn4IqYyywuJsQZSTkA4KV3SpNBb52AHOVrA2EyQUAx9vcJt/kOlmraxi9dDrHF66ovgEhUDFXYwsAhCmdpbYYf9586iitlD1gOqEA1CRBMfdR++yjACnb06+adsaBr161sTS6VzFQL9L3nVbxYjbaE/xuo7JcLsaZwK2Qt9qNpx371TDVdTNnmqiaau2zUNMcnfRicl4nfTKGha97pY+/U4Y0bXIxrz8PJm5ZLvDDSjePUdqMLd/PluKXg+FULC4i640EXfBnP853+uCMBlSnfgdKwTbU9BTjYUIi7k9XqxBw0D2fXalmpbvtdBRwiLS81fkXlAzUIE2+UDDprT7GRp8F5OYuh7hlPuA1uxFn1aQgaYR58tujJUq9V+YfJoCkfO6d+llXn+HXAkCI67EyBJPKjJjJfykT+k+PtTZiYd+TBgWVeBdzLBr+ec4TF6/Vb5ykrlRi2LHLsxiOJiEMHNs6umGKyT5qLa9o7B0IOGGRFwu9gq9LltDWPgENwOp61trZlv7s0OtdGenUzjiDR3LdT/TzPW2TlEoT4hV/LVei88JizK5tRirFMnDzQEx9thcIlAGiTJIEWJOhFXy/UDDBeF+S+9bJNrM1Eji6fHerB+QpuIVOlZN36v7WI72v+7XPRU3inWGrIkexocQjuVoHTuko/7xr9DRNMk7JEf+AgOtVMy4I/jQ2LaGGJ9oxAZuv6dZgIFKwzKEYZMixTTXAKIyZrZX6k1cAeYCAlzff96cSJgTmjXe1h6lQH/dgDy2D8PKfXRVY3Z2sGaPxfOCYG1/iHuf4YgbK+MES8rROeds+sokFLhmwa8n1fvDbLCDu69XV0qwv0lJ8KBtZQ4n67AYvwO9rtv/PJPdRKPqLA8XTLc7X70N3CrbcPxJgGlXF+dr36+wiL+k5ElG6HhWITWdozTpWj8p8zI4HeYXNsFa94lxIQ+AhN4qY2Pzng5xtK7aw6O3JNb+s/DSNYdTqfBkLxqBcsJuzYo5L2QQt9abJRGFJFzPCJrw2O6tBUZxJHZ6iAHZbTu6IwL/ygeIY8ruvCMC4YEFLzSjhsTuY7L326Kd849cGKZz6ytPY8UO3ZHPkhXlzR0S1H3mGqEybgyIHsaiJTKqojmkQYQut8DYM0OSlpx6iDwBIXl12lF1TIzhDwy7XaZWk/T0aiTNiAZ4H7pnYsS2Q8ifhyw+lbpX5ayRQI9H+RF/AvNxoDCtrU5LNismEXHED4QU+MfJ1EsyGd1RlJ0A9xpCQ0m6wALA1jqugeBHJY2yUiA9aHPysb127u8cTVCPvjWJW/LsAh9qphgq4uhXiaLmyG2nosAxGi8zPr/+e4ySkgBZo8h49Tne4EMZGr2HWAFAKCEWCCLWe6p51aNXMmlYgG9ByapC3fIuo6iVFmYbJjW9PbsT32+5k7OnvAbxHzrW3TutQx80/Vv/Eg+lx5SU6bRA== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 343d4728-9b52-4608-9a57-08dc05e45703 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Dec 2023 07:29:05.2933 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: i1WxO5B3CWeJ38oyMdjHe2jes3IJ/8JgOqQgLLBABSo39lsSV21tnBpwEnoBTxij9XvzHNbsSao/uQYqxgDLyhbRxCQSf6LwiIZZ0aEZrMI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR13MB6506 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Long Wu A NFP representor port can receive a bond notification. Then driver will parse this notification into one of these two events: 1. Bonding port configuration may have changed. This includes creation of a bonding port, removal/addition of a member port, changing the bond mode, etc. 2. Bonding port is deleted. Signed-off-by: Long Wu Reviewed-by: Peng Zhang Reviewed-by: Chaoyong He --- drivers/net/nfp/flower/nfp_flower_bond.c | 183 +++++++++++++++++- drivers/net/nfp/flower/nfp_flower_bond.h | 2 + .../net/nfp/flower/nfp_flower_representor.c | 21 ++ 3 files changed, 205 insertions(+), 1 deletion(-) diff --git a/drivers/net/nfp/flower/nfp_flower_bond.c b/drivers/net/nfp/flower/nfp_flower_bond.c index c814c0d4ea..523e0025ad 100644 --- a/drivers/net/nfp/flower/nfp_flower_bond.c +++ b/drivers/net/nfp/flower/nfp_flower_bond.c @@ -46,6 +46,39 @@ nfp_flower_bond_increment_version(struct nfp_flower_bond *nfp_bond) nfp_bond->batch_ver += 2; } +static void +nfp_flower_bond_group_id_clear(struct nfp_flower_bond *nfp_bond, + uint32_t id_clear) +{ + bool *group_id_map = nfp_bond->group_id_map; + + if (id_clear >= NFP_FL_BOND_GROUP_MAX || id_clear < NFP_FL_BOND_GROUP_MIN) { + PMD_DRV_LOG(ERR, "Try to clear invalid group id %u.", id_clear); + return; + } + + if (group_id_map[id_clear]) + group_id_map[id_clear] = false; +} + +static int +nfp_flower_bond_group_id_get(struct nfp_flower_bond *nfp_bond, + uint32_t *id_ret) +{ + uint32_t id; + bool *group_id_map = nfp_bond->group_id_map; + + for (id = NFP_FL_BOND_GROUP_MIN; id < NFP_FL_BOND_GROUP_MAX; id++) { + if (!group_id_map[id]) { + group_id_map[id] = true; + *id_ret = id; + return 0; + } + } + + return -ENOSPC; +} + static enum nfp_flower_bond_batch nfp_flower_bond_remove_node(struct nfp_flower_bond *nfp_bond, struct nfp_bond_group *entry, @@ -65,6 +98,7 @@ nfp_flower_bond_remove_node(struct nfp_flower_bond *nfp_bond, entry->offloaded = false; if (entry->to_destroy) { + nfp_flower_bond_group_id_clear(nfp_bond, entry->group_id); LIST_REMOVE(entry, next); rte_free(entry); } @@ -139,6 +173,7 @@ nfp_flower_bond_cleanup(struct nfp_app_fw_flower *app_fw_flower) pthread_mutex_lock(&nfp_bond->mutex); LIST_FOREACH(entry, &nfp_bond->group_list, next) { + nfp_flower_bond_group_id_clear(nfp_bond, entry->group_id); LIST_REMOVE(entry, next); rte_free(entry); } @@ -271,16 +306,162 @@ nfp_flower_bond_change_linkstatus_event(struct nfp_flower_bond *nfp_bond, *bond_port_flags |= NFP_FL_BOND_PORT_CHANGED; } +static struct nfp_bond_group * +nfp_flower_bond_group_create(struct nfp_flower_bond *nfp_bond, + struct rte_eth_dev *bond_dev) +{ + uint32_t id; + unsigned int numa_node; + struct nfp_bond_group *group = NULL; + + if (nfp_flower_bond_group_id_get(nfp_bond, &id) < 0) + return NULL; + + numa_node = rte_socket_id(); + + group = rte_zmalloc_socket(NULL, sizeof(struct nfp_bond_group), + RTE_CACHE_LINE_SIZE, numa_node); + if (group == NULL) { + PMD_DRV_LOG(ERR, "Unable malloc memory for nfp bond group"); + nfp_flower_bond_group_id_clear(nfp_bond, id); + return NULL; + } + + group->group_id = id; + group->main_dev = bond_dev; + group->dirty = true; + group->offloaded = false; + group->to_remove = false; + group->to_destroy = false; + group->member_cnt = 0; + group->group_inst = ++nfp_bond->global_inst; + LIST_INSERT_HEAD(&nfp_bond->group_list, group, next); + + return group; +} + +static int +nfp_flower_bond_changeupper_event(struct nfp_flower_bond *nfp_bond, + struct rte_eth_dev *bond_dev) +{ + uint32_t i; + uint16_t port_id; + bool can_offload = true; + uint16_t nfp_member_count; + struct rte_eth_dev *eth_dev; + struct nfp_bond_group *group; + struct bond_dev_private *internals; + struct nfp_flower_representor *repr; + struct nfp_app_fw_flower *app_flower; + + internals = bond_dev->data->dev_private; + app_flower = nfp_bond->app_fw_flower; + nfp_member_count = 0; + + for (i = 0; i < internals->member_count; i++) { + port_id = internals->members[i].port_id; + eth_dev = &rte_eth_devices[port_id]; + if (!nfp_flower_is_phy_repr(eth_dev)) { + can_offload = false; + break; + } + + repr = eth_dev->data->dev_private; + + if (repr->app_fw_flower != app_flower) { + can_offload = false; + break; + } + + if (internals->current_primary_port == port_id || + internals->mode != BONDING_MODE_ACTIVE_BACKUP) + nfp_member_count++; + } + + if (internals != NULL && + internals->mode != BONDING_MODE_ACTIVE_BACKUP && + ((internals->mode != BONDING_MODE_BALANCE && + internals->mode != BONDING_MODE_8023AD) || + internals->balance_xmit_policy != BALANCE_XMIT_POLICY_LAYER34)) { + can_offload = false; + PMD_DRV_LOG(WARNING, "Unable to offload mode %u hash %u.", + internals->mode, + internals->balance_xmit_policy); + } + + pthread_mutex_lock(&nfp_bond->mutex); + + group = nfp_flower_bond_find_group(nfp_bond, bond_dev); + if (nfp_member_count == 0 || !can_offload) { + if (group != NULL && group->offloaded) + /* Set remove flag */ + group->to_remove = true; + + pthread_mutex_unlock(&nfp_bond->mutex); + return 0; + } + + if (group == NULL) { + group = nfp_flower_bond_group_create(nfp_bond, bond_dev); + if (group == NULL) { + pthread_mutex_unlock(&nfp_bond->mutex); + return -1; + } + } + + group->dirty = true; + group->member_cnt = nfp_member_count; + group->to_remove = false; + + pthread_mutex_unlock(&nfp_bond->mutex); + + return 0; +} + +static void +nfp_flower_bond_group_delete(struct nfp_flower_bond *nfp_bond, + struct rte_eth_dev *bond_dev) +{ + struct nfp_bond_group *group; + + pthread_mutex_lock(&nfp_bond->mutex); + + group = nfp_flower_bond_find_group(nfp_bond, bond_dev); + if (group == NULL) { + pthread_mutex_unlock(&nfp_bond->mutex); + PMD_DRV_LOG(WARNING, "Untracked bond got unregistered %s", + bond_dev->device->name); + return; + } + + group->to_remove = true; + group->to_destroy = true; + + pthread_mutex_unlock(&nfp_bond->mutex); +} + int nfp_flower_bond_event_handle(struct nfp_flower_bond *nfp_bond, struct rte_eth_dev *bond_dev, struct rte_eth_dev *nfp_dev, enum nfp_flower_bond_event event) { + int ret = 0; + switch (event) { + case NFP_FLOWER_CHANGEUPPER: + ret = nfp_flower_bond_changeupper_event(nfp_bond, bond_dev); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Change upper event can not work."); + return ret; + } + break; case NFP_FLOWER_CHANGELINKSTATUS: nfp_flower_bond_change_linkstatus_event(nfp_bond, bond_dev, nfp_dev); break; + case NFP_FLOWER_UNREGISTER: + nfp_flower_bond_group_delete(nfp_bond, bond_dev); + break; default: PMD_DRV_LOG(ERR, "Invalid bond offload event."); return -1; @@ -288,7 +469,7 @@ nfp_flower_bond_event_handle(struct nfp_flower_bond *nfp_bond, nfp_flower_bond_do_work(nfp_bond); - return 0; + return ret; } enum nfp_flower_bond_batch diff --git a/drivers/net/nfp/flower/nfp_flower_bond.h b/drivers/net/nfp/flower/nfp_flower_bond.h index e4a09b3427..12e61ff1ce 100644 --- a/drivers/net/nfp/flower/nfp_flower_bond.h +++ b/drivers/net/nfp/flower/nfp_flower_bond.h @@ -109,6 +109,8 @@ struct nfp_flower_bond { uint32_t global_inst; /** Incremented for each config packet sent */ uint32_t pkt_num; + /** ID of bond group in driver, true is used */ + bool group_id_map[NFP_FL_BOND_GROUP_MAX]; /** Pointer to the flower app */ struct nfp_app_fw_flower *app_fw_flower; }; diff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c index 2810a7a271..43106da90e 100644 --- a/drivers/net/nfp/flower/nfp_flower_representor.c +++ b/drivers/net/nfp/flower/nfp_flower_representor.c @@ -390,6 +390,25 @@ nfp_flower_repr_dev_close(struct rte_eth_dev *dev) return 0; } +static int +nfp_flower_repr_bond_notify_member(struct rte_eth_dev *dev, + struct rte_eth_dev *bond_dev) +{ + struct nfp_flower_representor *repr; + enum nfp_flower_bond_event event = NFP_FLOWER_CHANGEUPPER; + + if (!nfp_flower_bond_all_member_are_phyrepr(bond_dev)) + event = NFP_FLOWER_UNREGISTER; + + repr = dev->data->dev_private; + + if (nfp_flower_support_bond_offload(repr->app_fw_flower)) + return nfp_flower_bond_event_handle(repr->app_fw_flower->nfp_bond, + bond_dev, dev, event); + + return 0; +} + static const struct eth_dev_ops nfp_flower_pf_repr_dev_ops = { .dev_infos_get = nfp_flower_repr_dev_infos_get, @@ -437,6 +456,8 @@ static const struct eth_dev_ops nfp_flower_repr_dev_ops = { .flow_ops_get = nfp_flow_ops_get, .mtr_ops_get = nfp_net_mtr_ops_get, + + .bond_notify_member = nfp_flower_repr_bond_notify_member, }; static uint32_t From patchwork Tue Dec 26 07:28:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 135581 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id AA88C43795; Tue, 26 Dec 2023 08:30:23 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 720C940DFB; Tue, 26 Dec 2023 08:29:10 +0100 (CET) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2122.outbound.protection.outlook.com [40.107.212.122]) by mails.dpdk.org (Postfix) with ESMTP id AD9FE40DD8 for ; Tue, 26 Dec 2023 08:29:08 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cfhr/Z3+lXu0qrUnXo34UQMbVwZY/PjsadfCsq/6XoP3oP+EHFBIyfK8+QegAc5zS/yy/VfqclB/y7L0RtfAxsC9akZT8yaexk7armMHccievpRjIdHI/eBrPDYKxc4wttl4UxAcSnNAqU2TYTslKVQtiHGL//BM1/h1NklB5YbBRC8NC5ZFirheQZKd865cFru1fXdsvuLHEpgjeYuHqq1AVTTOT415yjYu10u3vq99PblnB8gQhaN3t6Ml835tY3LWHIrTNownuKrOfXCBw0Zo3o+5RotKOoOwyCyunUTOiOOP0/lIu9cjEmj1yunnV7u2rFptxkfS2BHEhKqUeQ== 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=ui2j8LC54ZPyKBEjT5YgaFHqCtDDsiPOA51tu6vBWfE=; b=GZ9T6Gu8GsnKbMiXHe8iFR7mLZcGeN82NiWsxp8SiaVfMQi3mDPdy+hFnbEhWCiDH3MvDQKw1umKZIZkYpt8GFS036dB9h5cNLVsSBJwfzqYHjPOV9KD+9ZumoEOmEwtu+s5fBhBagzDwadOs483LRekIdECbYeBWqmyhRYhuuUh3mJauWTMAyIVQ98iRAjlGglG/NaqbJgthJyV8c7i6JVENAg0rLrq+9fqERZSjO0wwmmywa9L3MbMS+SM0GhCbYLPfErYs4wkwsvcNTIfViZRqm+Hcz+Rnr04qv58IqtNm+52Oe9oKc22vDPLYCATVn97qYEQ4gZuTcNz3y3g3Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ui2j8LC54ZPyKBEjT5YgaFHqCtDDsiPOA51tu6vBWfE=; b=kCdp0bA4NhIg7kvJG51R/L6HSpqSuNnOAe9UGoxwgiGJZBlPyxHrFRKUwu2EL8OuNjSlklwfL3RjaFRu+GRUj9QGE/gQJMoyC5sR8ZesVm5ZAEtkxHGbzFIQgSnXiU61rJpkIJV60od+qGC9mDoB4Z9zCjgvr63IRl03CgOF3io= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by CH3PR13MB6506.namprd13.prod.outlook.com (2603:10b6:610:1a3::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.27; Tue, 26 Dec 2023 07:29:07 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.7113.027; Tue, 26 Dec 2023 07:29:07 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Long Wu , Peng Zhang , Chaoyong He Subject: [PATCH v6 12/14] net/nfp: handle bond packets from firmware Date: Tue, 26 Dec 2023 15:28:22 +0800 Message-Id: <20231226072824.3163121-13-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231226072824.3163121-1-chaoyong.he@corigine.com> References: <20231226023745.3144143-1-chaoyong.he@corigine.com> <20231226072824.3163121-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SJ0PR03CA0239.namprd03.prod.outlook.com (2603:10b6:a03:39f::34) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH3PR13MB6506:EE_ X-MS-Office365-Filtering-Correlation-Id: eda4726b-2f86-4ae5-b4f7-08dc05e45821 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: lq1yr3SRQJt+DcdPFBF1o71aJ4YJfqP8tZOHSoJQ1NQSv/ngHIXa/bb9WHNuSc94UdYGQz40t0vzbr0Qxj097cggaareV5rfpK/99HLgA34i3Cl81UZv3bec3bJAHO+CalgMZLn1GkQISYBbXRNqsDHW5sE6kls3fDzSTgeSA+ff580/I/SvOBpi1TzvyjAo5edvzShk4+2QgKad0/47J++moNbNPu0NMHwqF+7uJR4gjbGeed+gmhttDQF8CJ5G4wUX31RAHGJwVlAc+Ekg5fTtzAzyLFmlqATN5+V/jjZKnfFpOh6h/Zj3WlcRNgnOuMY6476Xu6pfuvNS1+11s0heRFKZqKg+4KuyR5K/Hlm6AOyXqC7pZlhwA7a6IUwIja0QKBvark2IM4j/iev5hNExshq/ILd1C/4QKYeN9Z5axmkZWIsv7MQ7R0qj5PgaI4/0gV5Ce/S6/Cv0IDclT09g19B6tfn7ypveN04ZWTttjoNaLfHDt0dMkXLZNaKZfAXblrJJ79l+xG13LqR/NUkrbWE/F9pdyMjg5kxYQBxMpJhjf/Pj3m/REhKfCJymibWZbKbQV4k7ep676y7haVmuoKkEcV4sYOVAaUNZiB/pM/ZGUx5Eic6HY1HzGkTdpflONgbUsXVEQl4HKNOqoMSvl5m/t42kwwg32EVdgfk= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376002)(346002)(136003)(396003)(366004)(39840400004)(230922051799003)(451199024)(186009)(64100799003)(1800799012)(107886003)(26005)(1076003)(52116002)(6666004)(2616005)(6512007)(83380400001)(5660300002)(44832011)(4326008)(8676002)(41300700001)(2906002)(8936002)(6486002)(478600001)(316002)(6916009)(54906003)(66476007)(66556008)(66946007)(6506007)(86362001)(36756003)(38100700002)(38350700005)(66899024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: lanw2T1gIzh4ZYjWc+nhgZQ5R2xDOmejrGkWYdihJ/9fgJEY390vTFplzEKGgXKB+HO2mASOuKlODHlSW35avROz6Ttm0VPx6ykX8EiroSNBx8Stt1b0uWCOwX4ixTpgjrbT8dPVDgNdPd0A6yph+XcSvsIowUWCERMkBq3Xv8zSm4RMsG/2WIjAfBjlBQNVYm0l+FP/V2ggxhj5Z32r+I+DtDI1w+L7v0L6RJeTcR16RZjJHTvEzQGgou0VAFRSOwqn3Q5HKug/F0oXOYC98AnFEs5GMHQ/AXoEmsGMW2TvUAoRtMEJ9Xl2aJmlwRSS+pirE/ZyfUua3V3ygskiXrBgZDsXS6+OQg7nkXksr2FjeN/VuUGAsEQG8aqaZLRt+JXu1r/yQVr05Rqh7pwkx4/2RX1B5xGPmP+5bHYwOQYbiQC+sQosQTjiuiU0HNEUBHf1udEgQ7jVnyNi+IYje4J3l1EC7wGoOH6b7TWUIpbjJz5lXRsoQ6h6+d8Ud5WuUlme3U3ZvCeUuDBEtuV6CBTTr025+i1raKZagMRmaamhe4IMsP+GSti7emFH0oY/yvd4GRML9OKtXwyePU1p3j4CYfEvaKdFGnTSDMXs9StWVtalXbJk72Y6pzpD4IrH3amy/h/gNUUR4OWxC7a0h1TZS/9DQOlmRde8WlfkgOcSxnkncWpAWrjWxdHwxtRaIVLDmX+iZ5TwfmQOEqwLNTyutD/hi+XqDDDV2lNZrxVaCJ4DHcljY4p0K1i+nLd6Ko7uK6FfC5qPVU0koS4f9n68YsQmjDZAd0TueXL9Muq59G4hZsIxAK5440VU1jmFQq1UGuIorHLkZMY23DI5m34urt4Iu5xhyunYGRAVNgtLkPCIdb59malyc01Wpn4mxeECWmIpxfZHzd4eVLgI6oJicDI5VWIpB5LG961aQhm/gXc6he4Wyu5KLfJTYZmmT2tVS5W/F+pOKnr0t9JnFr4LT4MOrjn8KJ80YFcf2135+7YgIGFgeNwAAb+91hkd5WRC6mfFyQAPSJCRH1+VOxKXXzElOGFiDoxelz9j0TnhMFTJ5yGivrp2lkooz+ZDZV+IaKJP7LEYIzwUbTPJchK4fUPswQmaqX+0SjXF331Gn76AK1NLSJ4I2ipH8YE9oqBbPZ/m65Zp/B8Xjchzn/mJzvzK/ZA5J6FgdTWEJzg/s97VRzsJgYR+wXcYstXdvM4SG4srDDBuz2HKE0eyEfi7b3WexWr3PokwtynWRR3BxE/TUubL/en242imHbT/7Il4fg2TrmqL0Fg+Zq0s0YBttMWLRsDuQF2bnPS6Jc9FBuYZCJ1kFZjkRUaAcBhQV95Ce9bv698B8SAzmmufTwuLw+18yZFGlFxclEbgw+gummuC1nN+q/Oz4hpGBnwkQju64OrHgtelddDBqcuG2MDzLVvjBj7yRU970rnfXcJKPBW473Zu+Mss3LhCNrg+RrhWnTCvjxkkA6T+3rwbJLZr/eqJrdMilzJcG6D086Oy0ByBLr/DuSqpf9EJSQIw9Gv2ownBCEOiSPPzXQR3HqJIhRcMYcyrsoONvWReHpMBLs8PFBllr0eH4oqvQktdorjR+/oAUYi5OKes2yzc/w== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: eda4726b-2f86-4ae5-b4f7-08dc05e45821 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Dec 2023 07:29:07.1923 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: tEaE1UE8szB4H2gVRt34u7Zd/jfg87BNvMLiu48T3kRqXsFsM4H8csdKNvhoG5NYSKqBeIwJ5sd3Kjm4RjKCnLZZMTVYt2RUcBLu2Drb3kE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR13MB6506 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Long Wu Firmware sends bond firmware creation packets to driver, driver needs to handle it in ctrl VNIC service. Signed-off-by: Long Wu Reviewed-by: Peng Zhang Reviewed-by: Chaoyong He --- drivers/net/nfp/flower/nfp_flower_bond.c | 53 ++++++++++++ drivers/net/nfp/flower/nfp_flower_bond.h | 14 +++ drivers/net/nfp/flower/nfp_flower_ctrl.c | 106 +++++++++++++++++++++-- 3 files changed, 168 insertions(+), 5 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower_bond.c b/drivers/net/nfp/flower/nfp_flower_bond.c index 523e0025ad..73b616360a 100644 --- a/drivers/net/nfp/flower/nfp_flower_bond.c +++ b/drivers/net/nfp/flower/nfp_flower_bond.c @@ -161,6 +161,8 @@ nfp_flower_bond_init(struct nfp_app_fw_flower *app_fw_flower) LIST_INIT(&nfp_bond->group_list); nfp_flower_bond_increment_version(nfp_bond); nfp_bond->app_fw_flower = app_fw_flower; + nfp_bond->retrans.head = 0; + nfp_bond->retrans.rear = 0; return 0; } @@ -168,6 +170,7 @@ nfp_flower_bond_init(struct nfp_app_fw_flower *app_fw_flower) void nfp_flower_bond_cleanup(struct nfp_app_fw_flower *app_fw_flower) { + struct rte_mbuf *mbuf_tmp; struct nfp_bond_group *entry; struct nfp_flower_bond *nfp_bond = app_fw_flower->nfp_bond; @@ -177,6 +180,12 @@ nfp_flower_bond_cleanup(struct nfp_app_fw_flower *app_fw_flower) LIST_REMOVE(entry, next); rte_free(entry); } + + mbuf_tmp = nfp_fl_bond_get_unprocessed(nfp_bond); + for (; mbuf_tmp != NULL; + mbuf_tmp = nfp_fl_bond_get_unprocessed(nfp_bond)) + rte_pktmbuf_free(mbuf_tmp); + pthread_mutex_unlock(&nfp_bond->mutex); pthread_mutex_destroy(&nfp_bond->mutex); @@ -587,3 +596,47 @@ nfp_flower_bond_all_member_are_phyrepr(struct rte_eth_dev *bond_dev) return true; } + +int +nfp_fl_bond_put_unprocessed(struct nfp_flower_bond *nfp_bond, + struct rte_mbuf *mbuf) +{ + uint16_t rear_real; + struct nfp_flower_bond_retrans *retrans; + struct nfp_flower_cmsg_bond_config *cmsg_payload; + + cmsg_payload = rte_pktmbuf_mtod_offset(mbuf, + struct nfp_flower_cmsg_bond_config *, + NFP_FLOWER_CMSG_HLEN); + + if (rte_be_to_cpu_32(cmsg_payload->group_id) >= NFP_FL_BOND_GROUP_MAX) + return -EINVAL; + + retrans = &nfp_bond->retrans; + rear_real = (retrans->rear + 1) % NFP_FL_BOND_RETRANS_LIMIT; + if (rear_real == retrans->head) + return -ENOSPC; + + retrans->mbufs[retrans->rear] = mbuf; + + retrans->rear = rear_real; + + return 0; +} + +struct rte_mbuf * +nfp_fl_bond_get_unprocessed(struct nfp_flower_bond *nfp_bond) +{ + struct rte_mbuf *mbuf; + struct nfp_flower_bond_retrans *retrans; + + retrans = &nfp_bond->retrans; + if (retrans->rear == retrans->head) + return NULL; + + mbuf = retrans->mbufs[retrans->head]; + + retrans->head = (retrans->head + 1) % NFP_FL_BOND_RETRANS_LIMIT; + + return mbuf; +} diff --git a/drivers/net/nfp/flower/nfp_flower_bond.h b/drivers/net/nfp/flower/nfp_flower_bond.h index 12e61ff1ce..e88d72899f 100644 --- a/drivers/net/nfp/flower/nfp_flower_bond.h +++ b/drivers/net/nfp/flower/nfp_flower_bond.h @@ -41,6 +41,9 @@ #define NFP_FL_BOND_PORT_TX_ENABLED RTE_BIT32(1) #define NFP_FL_BOND_PORT_CHANGED RTE_BIT32(2) +/** We store 100(101-1) mbufs but queue needs 101 */ +#define NFP_FL_BOND_RETRANS_LIMIT 101 + enum nfp_flower_bond_batch { NFP_FLOWER_BOND_BATCH_FIRST, NFP_FLOWER_BOND_BATCH_MEMBER, @@ -53,6 +56,12 @@ enum nfp_flower_bond_event { NFP_FLOWER_UNREGISTER }; +struct nfp_flower_bond_retrans { + struct rte_mbuf *mbufs[NFP_FL_BOND_RETRANS_LIMIT]; + uint16_t head; + uint16_t rear; +}; + /* Control message payload for bond config */ struct nfp_flower_cmsg_bond_config { /** Configuration flags */ @@ -113,6 +122,8 @@ struct nfp_flower_bond { bool group_id_map[NFP_FL_BOND_GROUP_MAX]; /** Pointer to the flower app */ struct nfp_app_fw_flower *app_fw_flower; + /** Store bond offload packets from firmware */ + struct nfp_flower_bond_retrans retrans; }; struct nfp_flower_bond_cmsg_args { @@ -139,5 +150,8 @@ int nfp_flower_bond_event_handle(struct nfp_flower_bond *nfp_bond, enum nfp_flower_bond_event event); void nfp_flower_bond_do_work(struct nfp_flower_bond *nfp_bond); bool nfp_flower_bond_all_member_are_phyrepr(struct rte_eth_dev *bond_dev); +struct rte_mbuf *nfp_fl_bond_get_unprocessed(struct nfp_flower_bond *nfp_bond); +int nfp_fl_bond_put_unprocessed(struct nfp_flower_bond *nfp_bond, + struct rte_mbuf *mbuf); #endif /* __NFP_FLOWER_BOND_H__ */ diff --git a/drivers/net/nfp/flower/nfp_flower_ctrl.c b/drivers/net/nfp/flower/nfp_flower_ctrl.c index c25487c277..75c8c0b20a 100644 --- a/drivers/net/nfp/flower/nfp_flower_ctrl.c +++ b/drivers/net/nfp/flower/nfp_flower_ctrl.c @@ -15,6 +15,36 @@ #define MAX_PKT_BURST 32 +static void +nfp_flower_bond_recover_status(struct nfp_flower_bond *nfp_bond) +{ + int err; + struct rte_mbuf *mbuf_tmp; + struct nfp_bond_group *entry; + + pthread_mutex_lock(&nfp_bond->mutex); + + /* Clear all unprocessed messages */ + mbuf_tmp = nfp_fl_bond_get_unprocessed(nfp_bond); + for (; mbuf_tmp != NULL; + mbuf_tmp = nfp_fl_bond_get_unprocessed(nfp_bond)) + rte_pktmbuf_free(mbuf_tmp); + + /* Mark all groups dirty */ + LIST_FOREACH(entry, &nfp_bond->group_list, next) + entry->dirty = true; + + /* Reset NFP group config */ + err = nfp_flower_bond_reset(nfp_bond); + if (err != 0) + PMD_DRV_LOG(ERR, "Mem err in group reset msg"); + + pthread_mutex_unlock(&nfp_bond->mutex); + + /* Schedule a LAG/BOND config update */ + nfp_flower_bond_do_work(nfp_bond); +} + static uint16_t nfp_flower_ctrl_vnic_recv(void *rx_queue, struct rte_mbuf **rx_pkts, @@ -450,6 +480,55 @@ nfp_flower_cmsg_port_mod_rx(struct nfp_app_fw_flower *app_fw_flower, return 0; } +static bool +nfp_flower_bond_unprocessed_msg(void *app_flower, + struct rte_mbuf *mbuf) +{ + uint16_t cnt; + uint8_t flags; + bool store_tag = false; + struct rte_mbuf *mbuf_tmp; + struct nfp_flower_bond *nfp_bond; + struct nfp_flower_cmsg_bond_config *cmsg_payload; + struct nfp_app_fw_flower *app_fw_flower = app_flower; + + cmsg_payload = rte_pktmbuf_mtod_offset(mbuf, + struct nfp_flower_cmsg_bond_config *, + NFP_FLOWER_CMSG_HLEN); + + flags = cmsg_payload->ctrl_flags; + + /* + * Note the intentional fall through below. If DATA and XON are both + * set, the message will stored and sent again with the rest of the + * unprocessed messages list. + */ + nfp_bond = app_fw_flower->nfp_bond; + + /* Store */ + if ((flags & NFP_FL_BOND_DATA) != 0) { + if (nfp_fl_bond_put_unprocessed(nfp_bond, mbuf) == 0) + store_tag = true; + } + + /* Send stored */ + if ((flags & NFP_FL_BOND_XON) != 0) { + mbuf_tmp = nfp_fl_bond_get_unprocessed(nfp_bond); + for (; mbuf_tmp != NULL; + mbuf_tmp = nfp_fl_bond_get_unprocessed(nfp_bond)) { + cnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf_tmp); + if (cnt == 0) + rte_pktmbuf_free(mbuf_tmp); + } + } + + /* Resend all */ + if ((flags & NFP_FL_BOND_SYNC) != 0) + nfp_flower_bond_recover_status(nfp_bond); + + return store_tag; +} + static void nfp_flower_cmsg_rx(struct nfp_app_fw_flower *app_fw_flower, struct rte_mbuf **pkts_burst, @@ -457,6 +536,7 @@ nfp_flower_cmsg_rx(struct nfp_app_fw_flower *app_fw_flower, { uint16_t i; char *meta; + bool mbuf_stored; uint32_t meta_type; uint32_t meta_info; struct nfp_mtr_priv *mtr_priv; @@ -486,18 +566,34 @@ nfp_flower_cmsg_rx(struct nfp_app_fw_flower *app_fw_flower, continue; } - if (cmsg_hdr->type == NFP_FLOWER_CMSG_TYPE_FLOW_STATS) { + mbuf_stored = false; + + switch (cmsg_hdr->type) { + case NFP_FLOWER_CMSG_TYPE_FLOW_STATS: /* We need to deal with stats updates from HW asap */ nfp_flower_cmsg_rx_stats(flow_priv, pkts_burst[i]); - } else if (cmsg_hdr->type == NFP_FLOWER_CMSG_TYPE_QOS_STATS) { + break; + case NFP_FLOWER_CMSG_TYPE_QOS_STATS: /* Handle meter stats */ nfp_flower_cmsg_rx_qos_stats(mtr_priv, pkts_burst[i]); - } else if (cmsg_hdr->type == NFP_FLOWER_CMSG_TYPE_PORT_MOD) { - /* Handle changes to port configuration/status */ + break; + case NFP_FLOWER_CMSG_TYPE_PORT_MOD: + /* Handle meter stats */ nfp_flower_cmsg_port_mod_rx(app_fw_flower, pkts_burst[i]); + break; + case NFP_FLOWER_CMSG_TYPE_LAG_CONFIG: + /* Handle LAG/BOND related packets */ + if (nfp_flower_support_bond_offload(app_fw_flower)) + mbuf_stored = nfp_flower_bond_unprocessed_msg(app_fw_flower, + pkts_burst[i]); + break; + default: + PMD_DRV_LOG(INFO, "Unmatched repr message type: %u", + cmsg_hdr->type); } - rte_pktmbuf_free(pkts_burst[i]); + if (!mbuf_stored) + rte_pktmbuf_free(pkts_burst[i]); } } From patchwork Tue Dec 26 07:28:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 135582 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 944EC43795; Tue, 26 Dec 2023 08:30:28 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B69CE40E01; Tue, 26 Dec 2023 08:29:12 +0100 (CET) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2125.outbound.protection.outlook.com [40.107.212.125]) by mails.dpdk.org (Postfix) with ESMTP id 8AA4740E01 for ; Tue, 26 Dec 2023 08:29:10 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aVkTbde1GxblnJnt/ouHaei5PNOvp9B3faOz4uvrXkULtFuGwxB5L0GPgKFNUMeNYOu9o8v1v8xUDN04PDejlof/ewH4ewabnOxCjPWSYDmlT9E8CKtw1jtgR3kkuSrGs1/tRr7rKMnnlW8Xq+EatHgSb62Eyr2feaAD8N09EJM0LQ3yJz3MLB8EEZiCD1lKur7pLyKu05A2MGpvVvDC8s8r9a5+HhDtJhbD09qbiY6HbJZO+wrkY2yoEi8hAi7rD5rCbP+eFBWCO2Web+qv9B0eAMFXct4WcD8T1qNqYaD7XlUWnzACADUc8XklGgrong8T9s0kh/3Ob9dkgxq3dQ== 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=vS6sT+qBcIy3I2SJC6ekrV+53o16QgWP8P9TOdpTc2o=; b=C7tzzuzFZkAoxsXXQGEu6VGdWNkNlhAAM7yModMuwFnshSBGhQkWDL61iRtPz4nSOo74qB0XR57qxHWQjR1bwDZXPAMz8kRIrgQ51wuqZnwe9bikMZMgyJjoc1TOvOZV3Ji1f0MwBEFL0RGFfFOd6uq9JImGCOoCRF36Hy+BVhWZ6qpYhFTuAUb1RIlqrJgeZMtV3mC1pmSTGo5RoGt1gWuvg388xHZ5IMSLhPfiLUry8zLjvuuxamsnpDh0f2rTJezaTd9+2lRmE5SGX5qIz/zQoRSXaqPxX9ptRdrkZMAChBW38zhM7XSm+SkL0axHkoSl8p+sfvUvno/sObJ4dw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vS6sT+qBcIy3I2SJC6ekrV+53o16QgWP8P9TOdpTc2o=; b=Gm4K6+4aZveQeEyNDumQwokT4ea13wgNku14IJqzw1MuNeRfRgLFW9kV/4cuFEyyUe3Ed7gGU650CrbSWmS3YZQJA+c3Oxa2F+hiuPoI4TO77DBGcIoMrHxMDCq3+BOtfXBseBWlrer+3awTnvmp9YYWSu2wUDKgIo48bPfrc6k= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by CH3PR13MB6506.namprd13.prod.outlook.com (2603:10b6:610:1a3::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.27; Tue, 26 Dec 2023 07:29:09 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.7113.027; Tue, 26 Dec 2023 07:29:09 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Long Wu , Peng Zhang , Chaoyong He Subject: [PATCH v6 13/14] net/nfp: support getting bond firmware creation Date: Tue, 26 Dec 2023 15:28:23 +0800 Message-Id: <20231226072824.3163121-14-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231226072824.3163121-1-chaoyong.he@corigine.com> References: <20231226023745.3144143-1-chaoyong.he@corigine.com> <20231226072824.3163121-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SJ0PR03CA0239.namprd03.prod.outlook.com (2603:10b6:a03:39f::34) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH3PR13MB6506:EE_ X-MS-Office365-Filtering-Correlation-Id: 9f38ddf7-8e9b-41e6-317a-08dc05e45942 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zzRPzFnEYaCqTQYQ+JDqFOQjefWonR2cmPrC0Zaz60rQXhqUJBuqoiuvcfgkEThAtaYkC2kWUEArHW/eetKXqRP69Rdqk1KMQcxr+XWHdaJoDu6HNNT78PmonS+lAUK8MTPVv3xX3JcbGSRolildhCJLfAheE06zEoeKpq0pXpFCzPruU45i9MVDQLL/X3RxdFnZjMt/0PsX9GwzzOijceSVYAF4ZkAfRfCoDi6iFkNujshRriRAr0sa3EKQFhfW2wV91ngrgbATootTL6x0NxSzefv8IenxfMRDfLlKFIwL1yq3b38fm3kbSQpp0YQRH2fMJVZXfGtJnmqe9DHAOuWbqyAUp3b5Tub336lEWHCKSF8E/9Chz7QVP6/GnKFn17OVQyXCn+BFWpHt7vBMXGg3wGZv7WQCQs4kk2SVKWSRLnr6tPk4XP91+WZGIUbCZkPEhtN3q9O7645OkeS+o4o3AkifzssZ9kDAO6sRwI73wF/u31+154fhlTbQeNFx+T+GNveVj3poI84l1q2aiMYQ7P/Gl76Y+UTh24jepUMV29YaSMbGOC8Rqaq7qHpSCvx5EOu/AKdsVTpf+97m8z2KSYAqsNYlcqYsCGrkjwJV1gXJgKyrPFbhmBAcmfk0yPcdYzCLUDWhTnqOYOuGLL77h5gHxqiJx3+JRYoocLI= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376002)(346002)(136003)(396003)(366004)(39840400004)(230922051799003)(451199024)(186009)(64100799003)(1800799012)(107886003)(26005)(1076003)(52116002)(6666004)(2616005)(6512007)(83380400001)(5660300002)(44832011)(4326008)(8676002)(41300700001)(2906002)(8936002)(6486002)(478600001)(316002)(6916009)(54906003)(66476007)(66556008)(66946007)(6506007)(86362001)(36756003)(38100700002)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: /F4ITTrIE5q+BPlyCot4PezGe+AYVKuhFcEosRqym6vOb4jt3K1SCJ+WsZn7J2sr+6BYBSXvJ/5ECrrTwTP37NinY1Tqg4uOr1siDQnrw0GKHV8oKKMSs7p0sLmpIVftpGsrhZ9k7IvDwjTNDB0yqSMQGR0EOWxPKyaiGAmFuwNanmp997Myaa0HXsMV+3rp23UKH0wCRW6BCyoJFR24+rZJoaOBzc40MvamF6hR3KKepJZzRxvUEzf8ydFdbvCunzBlmbFdGNCpmZp/dJnixunGhkuPqm6aVPRIWfM1n6xKhFKFMldxujEWM393gZoR7QD6Sh4hkihI0InCCykyNx5HI2sDoSP+ecW+FrcKKt1kYtynZRDtK2rDgFfjLQs52vhdPYY01dlb8L8ZJpiciyKEF7ekkQsr+iqtOA9TykT6rAo/QUBeGlBaRfqG0Y94nz0MYZ/z3XdvisOs/id5K6Onm2faUIW8eOr/3rXYSOkBkfXkmXYbW0OHSjR5TFf6cnUSmqypZFRTl7ujbcNirTZKWQzG/Q5szXlbyE1yJ6LcEhFqRm0ipSqmqwUh1IIiQ6jo8Tp9fSlOYN3PP8QP9a4W862k7FpFjQFDVuUc7nGTOlI52WtnCSIsss2F3mwROkXPgEDjPExB5JuHnoid0rCkT77bve16U5Titp+t1gwO8S9KwasVHhzRpIH4aORy2vb7pKajRsaRKG53rbYxEU6f1TFhLU1TJjWTheIf02yno8Z4fYmdWhlCPflxB3lL3igegMYa/rA97Fm+SNGz32vA9JHk56pB5h8UEKgOHBjawTfSwOBLmBC+Knk+5eIdHKcCSt2RIqMN5dz0R2/zsrbue15eOMyrczncoRxjsfioJJ929PVksW/Q5lb2rY2AVg+OAVBExEJoJFe46BKmfQ6hbGR4AOl0ijURO5IZdm8rq/+E1PBytVh6FROeAcrM9ifOk0om+F8Ksij2rOW8jOr/tVsWa9LoxjKwbLtjJ6/bYn9LLk6M/lDcSoCwH5QtkvWLZWeuKMLoMw9Z/cgEd+FMnK6rMQvfe44ERoTsLnCn2AD7eO5EmWVGGOQC8ODCvohzLBhkIN8M152ZjwNYRqgYyXzC3o1bNwV5t2v5joSJODKbGSv11XFdKA6zr83yWbnxIdFdv4HtA0u43FY1o8q6oCdpf9b+pmvn92N0wI8Yl6SyULF2SePuS/KCCm8xALZYFilkADuYawD2JzPq1xf5leKcFnJGknJBF1Y6p6Ss2IZFQKvVdpkLNn/d8PxYHrOdVDkx7BOHjYe91fHM1CWD/oLIrYWgB1hKmzBeN8jd2Oiniahd4pJLYQxw8QPTvmzTJLxQG7PZn7JLvc9lCjhcoAZvM7w/4BF5ASH4Gmz6G7wvo8bZlrzfvbGrAiHjISDvZbtzXShPpjPmSkimuTG4ffHdCVsLyZ4r4xf5AnvCJCHIqDB1IKLd0VTomjRwdVNzDaETdWLXd3aohpOGO4q5ZvaMmunvwyKV2tv/nSLwWQOV6y/Grmtu6w9FKrXw61ku4kkuj+nxKyzJLdA+FnpciXA5KPMvisnk8iMRgFw0Zly6cr81hnf/GtQXTMUzyFr2eASkjjJCjD5TCGkzWA== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9f38ddf7-8e9b-41e6-317a-08dc05e45942 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Dec 2023 07:29:09.1056 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: dDziV/KLJpmI749YHSyVLGnkaDiQZuI5gZ7vrlv89S3W5mrFrYmzlqyij7tw51BhYjfzyDoPD1BNWKqxvFlBuQpkk0LiWmvZBs9ZThkPsbU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR13MB6506 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Long Wu Support getting the status that whether the bonding port is created by the nfp firmware. Signed-off-by: Long Wu Reviewed-by: Peng Zhang Reviewed-by: Chaoyong He --- drivers/net/nfp/flower/nfp_flower_bond.c | 27 +++++++++++++++++++ drivers/net/nfp/flower/nfp_flower_bond.h | 2 ++ .../net/nfp/flower/nfp_flower_representor.c | 1 + 3 files changed, 30 insertions(+) diff --git a/drivers/net/nfp/flower/nfp_flower_bond.c b/drivers/net/nfp/flower/nfp_flower_bond.c index 73b616360a..c809465ffc 100644 --- a/drivers/net/nfp/flower/nfp_flower_bond.c +++ b/drivers/net/nfp/flower/nfp_flower_bond.c @@ -640,3 +640,30 @@ nfp_fl_bond_get_unprocessed(struct nfp_flower_bond *nfp_bond) return mbuf; } + +int +nfp_flower_bond_fw_create_get(struct rte_eth_dev *bond_dev, + struct rte_eth_dev *nfp_dev) +{ + int ret = -EINVAL; + struct nfp_bond_group *group; + struct nfp_flower_bond *nfp_bond; + struct nfp_flower_representor *repr; + + if (!nfp_flower_bond_is_member_port(bond_dev, nfp_dev)) + return ret; + + repr = nfp_dev->data->dev_private; + nfp_bond = repr->app_fw_flower->nfp_bond; + + pthread_mutex_lock(&nfp_bond->mutex); + LIST_FOREACH(group, &nfp_bond->group_list, next) { + if (group->main_dev == bond_dev && group->offloaded == true) { + ret = 0; + break; + } + } + pthread_mutex_unlock(&nfp_bond->mutex); + + return ret; +} diff --git a/drivers/net/nfp/flower/nfp_flower_bond.h b/drivers/net/nfp/flower/nfp_flower_bond.h index e88d72899f..41cd64d9eb 100644 --- a/drivers/net/nfp/flower/nfp_flower_bond.h +++ b/drivers/net/nfp/flower/nfp_flower_bond.h @@ -153,5 +153,7 @@ bool nfp_flower_bond_all_member_are_phyrepr(struct rte_eth_dev *bond_dev); struct rte_mbuf *nfp_fl_bond_get_unprocessed(struct nfp_flower_bond *nfp_bond); int nfp_fl_bond_put_unprocessed(struct nfp_flower_bond *nfp_bond, struct rte_mbuf *mbuf); +int nfp_flower_bond_fw_create_get(struct rte_eth_dev *bond_dev, + struct rte_eth_dev *nfp_dev); #endif /* __NFP_FLOWER_BOND_H__ */ diff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c index 43106da90e..8a1b2eff66 100644 --- a/drivers/net/nfp/flower/nfp_flower_representor.c +++ b/drivers/net/nfp/flower/nfp_flower_representor.c @@ -458,6 +458,7 @@ static const struct eth_dev_ops nfp_flower_repr_dev_ops = { .mtr_ops_get = nfp_net_mtr_ops_get, .bond_notify_member = nfp_flower_repr_bond_notify_member, + .bond_fw_create_get = nfp_flower_bond_fw_create_get, }; static uint32_t From patchwork Tue Dec 26 07:28:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 135583 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id BBF5343795; Tue, 26 Dec 2023 08:30:34 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D1CC040DDA; Tue, 26 Dec 2023 08:29:14 +0100 (CET) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2138.outbound.protection.outlook.com [40.107.212.138]) by mails.dpdk.org (Postfix) with ESMTP id C91A440E2D for ; Tue, 26 Dec 2023 08:29:12 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TcifrqfDiCrZZhHhYtGHk0lFgZJfDGokc2m5hKwOcV6ZpfHKaNaNHsJfa2xbH1nVPMp60mW0IBgih1zJb3T8BW/sKqYOXFVRqVblOmA+SDU+ImpEj22HA419NAHzmSMRMXSO/YgeKuNKjMJCLBEM5RvF26QV3pPQ9X2LyGk6e3VtIkySmFO3m087qcDxP9hs8ivOh+mH+5tECSHESwH5VJbi82iikqAqyoGO4AXUQvyeD93s3sYTQ6BvsNYgXnbFaF7u3teo+iq8+nLHbcMD9YSzNV56WKnRJnP8WZfQyGjUPrL11b4+nmLe035Bzg6FEugMbDNa7NQ0/Bn+ofj9GQ== 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=Kz6AxSRyxYAWiz4Z80tcP47HAyDQt9mpNsuwFgYiPfs=; b=WfZ141eMqbmy4ohdFMtijC2b0Ho97XrhuY9b04DuBoy3SOSZFyPOBjbdv9XgJn1IbnTd4aKGR7TV0gTYstt+mXtUEpOROE9XYh5hkoXpbQO3gP+J2FHkL4cpGIuQK6npRbnkAB6i+N65WykDKTeZEWY9qdsEIfzd7GAFz4IzXb2rTfxdmUmuEoCgF14sCQr0HZRNjFSKLuknLB9+VZq27vpT828ZzsLnlorcJlc/V/XoWutllmeKq2EzmsrbRFM4Nu9fFy2qE0OGsbESNulZkAbnKNEjo/vIrP9CbQWGXHJx+JJ5y2lVyCdx49Jyjy7PRENTwYLxA4yHJhHb6FTY7A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Kz6AxSRyxYAWiz4Z80tcP47HAyDQt9mpNsuwFgYiPfs=; b=MfZRY/MEL4+A1dWQ/3EWufyJoaWJ+sWKdpprvEfqB8yE7oW7ScsqpeFhTmocuO/aO1bYxj/ruMXtofJpe/b4il99w/baEvcZ8M7ATaQ51cvRAehZHiC2EMPaovvQAnoW6Ded90k295hlUShCYDI43byf0r+X3qUIbucbRiojbg4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by CH3PR13MB6506.namprd13.prod.outlook.com (2603:10b6:610:1a3::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.27; Tue, 26 Dec 2023 07:29:11 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.7113.027; Tue, 26 Dec 2023 07:29:11 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Long Wu , Peng Zhang , Chaoyong He Subject: [PATCH v6 14/14] net/nfp: support offloading bond-flow Date: Tue, 26 Dec 2023 15:28:24 +0800 Message-Id: <20231226072824.3163121-15-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231226072824.3163121-1-chaoyong.he@corigine.com> References: <20231226023745.3144143-1-chaoyong.he@corigine.com> <20231226072824.3163121-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SJ0PR03CA0239.namprd03.prod.outlook.com (2603:10b6:a03:39f::34) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH3PR13MB6506:EE_ X-MS-Office365-Filtering-Correlation-Id: 82ff253d-e347-4ddd-7592-08dc05e45a67 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kB4u27JNh1RLVZPQhe+r9rJ7oazfEuTmZpikb/WYhRU+xwdS0In4KFsOS34rFqxi5gB50JkTcXxaElxU3RvsLx68khPr2K+qO4f2cbJhT18PSR/YsMrOFLihmY46vMaAsQDxIuyNWB7coRMKziDY1QPAZ2Qwnhu5t0iVqmkvN06OCwnIiYBLFcHhznkzfYPBr2p8XuAGHvBPsjKtaRkIXQcgZsRru+b238pys1qvf5rqIt7aCcGBYfvonAgBDQRIywfO0wOAs2WPgbWZS+zQx0YwoQNl0vurQ+vXwvqhQ7Eiw3pHp+EY/dPkiNB08T8h8YU3cc9CyOM4hUvn/Xxz+5DIsRW/VEpsUkuMzbFBQwlIJh+SvHKjl7H3jMrZFCBriC/zC+GSQt3xDKdniIagE3kBqKxzuNTbrpE9O/A8ZoIzYa2b1NGdAQAb+RnkotCdANerUbgpvXYxd1mIJzfpHhe+HNbG+IKV5mk8vDBb8g5oUJv5cwYfSTDG6N1NhfNTEwFbhFWB2yh36vkErpCLH1Ri9h2649aieZ6Qt/3YwqUbh8ep5kMEupLzPeZGWBrRholM43yrVbMjkhqJJX1lg1HznaE+Gl2a8Ojd8J2kiBceTOAu8P2Itnh8Xz2QYFxbAaDY1l1lEn6np6sMPdJnBFXUa/YXiEa7vNilIqfbA28= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376002)(346002)(136003)(396003)(366004)(39840400004)(230922051799003)(451199024)(186009)(64100799003)(1800799012)(107886003)(26005)(1076003)(52116002)(6666004)(2616005)(6512007)(83380400001)(5660300002)(44832011)(4326008)(8676002)(41300700001)(2906002)(30864003)(8936002)(6486002)(478600001)(316002)(6916009)(54906003)(66476007)(66556008)(66946007)(6506007)(86362001)(36756003)(38100700002)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: QkiZPRl4DzuCmacSXeSUZw8FYCSS2Kr3LsM3xEsKcr0sUz+ZTllbA0pxPOGxorbeEkvNM+LpQZY7Y4EHa1U1P35zJ3I0QOp+djT5yKMPhPChndX/r1WcFYWVJN1FJGZ1Wd20+Xz8fnxT3dROrByFOsGxHjuGT9Ls3dTbIu1EGml5rtxSaC0WBhVLmGmE8er19ybmnTceHDrUZLjMphXnTedTOTASGUdrWLTASA4E0DmwZV83/HbK7Hl1NnJChCWtoxwkZ4DqEijp+yZynGHoczj7ogu6HywquVX/A7eYnhbrFIpgtDd+mAp7lSvVbq6hwyMQN2Fzlrxd55B400HPvgCyvWEJsVeYtaBBY6cuKnXcDhqfyhkDxcZ514P+9QrqLi7LjYzgANc1ZV3QkwNPf/ciUJjuF5fNZeSv6dxKK9F/VtZW9vLIB6AweD2xQW3zWVdfpJWe2Q6W911pCkovS+xP5bl+SLBn+880WjKDGo0DBwcft0OzrWyaw1/h2ULDzdu+oa5l0rrdr3swXYGl9Zy/5akHIXtfBuAPw7CFcCrosUJH9qDaXkK+3L3IyG5MGs4dZN7+AzpmuC61pyTWfqIvE5kBl2t2eQ7eBdTgfiNY1kbCqi30MCdTs6pvA6VOKnuIMXu7xqaBb9Vmyfp6cMlC+r5gAFDFmJUZx4KqQ5ouBQfn9y3y2HagfWKAOE1AZV2H9K3gUol/rQ4hUV4EnBifJKGj6RrqrOrM5NZb107YYr72xJRDDdHDyzsD3M2nm/RbWOOaK6ABF0DEO1iPFwK1zbiT0PgnECIMdDfrW/ajHBqm6zThn0PlyFLc305TfxeKKnzsY2tXHabg6WAYtQZingsup81w/KN7TqQJy3Aqq4m5yYl+nioq+Js7m8gZMM1aNN8N3E/tbicxhUZ54I9YK14IX6V44eL31b6PPeJALplyVBshm4aOV+Wq7YabhYYTXobPWBA2m76/kzxc3Q3f3AS8qBvPFnXc5ouPsOJ/91R4x9TSiLzFDHZ4pXZvOIvKIIBR+OodWYf70moXDxcmf2pSXRNw+HwdjMaqIumOrt51UllI8iTH65/pTKcCnd4D96rk+87LjZQ9Zrt6fofssVvXfKFN1fRiP1apuvjZKBkjmRHncI4pliqI3jYP5dZuHhsSx+ys8QnunOYuRfpiYgG9qnU7W/VU7rP4yb+3XBGcVNc+Lu8KPjAwYmczHKbmunDDS7Q7Ah+Stv0jQDvOvA1ctLJu8jQEUOsPaxQr4qf9wnW8aoDnib8mphaRXYwKwuBuW83iFzKrPQR8PkimAIvzJF4BHM0ivF1Dd6hFBBIPuz9FXIW/WO+SoVS47oAAV/TxhPvJy1xv5XQxORHc4ibiDLUeViLaSqPmLT2Q79MRPuuFcpD2KA4Umrb8qlPnyii+ixys45s/foXsyd6dikAkeULL/Zuvt4AUXoNIu79BMbX1H65wKec6dwSFGGUCUD7nEO+hsW9GBcKHLoY1XJcri9q+CSV5Vs+Vdvu2BlrC1TByc/vEhvLmhupfDrL5EJUB23dGX3lxDx4CaDrTxfisF4XQH/MyG/M1TqN9ARc5jgN9Qf8s8pz5hOxBnhxz64m+R2flmyhQ5CZ+SQ== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 82ff253d-e347-4ddd-7592-08dc05e45a67 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Dec 2023 07:29:10.9948 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: j7RoUu0PskclCSqF3VjT+g6C9m1oEEh2Pf1y88dvUwnVKZSPe83bQ4/9lCaSNvpnRH90Brba/tj91V17dPmkxD4z+D3wwVmFBxzE7rrApRY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR13MB6506 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Long Wu After bonding port notification and firmware created the bonding port, NFP rte_flow rule adds support for destination port to bonding port. Signed-off-by: Long Wu Reviewed-by: Peng Zhang Reviewed-by: Chaoyong He --- drivers/net/nfp/flower/nfp_flower_bond.c | 22 +++ drivers/net/nfp/flower/nfp_flower_bond.h | 6 + drivers/net/nfp/flower/nfp_flower_cmsg.h | 9 + drivers/net/nfp/flower/nfp_flower_flow.c | 232 +++++++++++++++++++++-- 4 files changed, 252 insertions(+), 17 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower_bond.c b/drivers/net/nfp/flower/nfp_flower_bond.c index c809465ffc..6e4d60659a 100644 --- a/drivers/net/nfp/flower/nfp_flower_bond.c +++ b/drivers/net/nfp/flower/nfp_flower_bond.c @@ -667,3 +667,25 @@ nfp_flower_bond_fw_create_get(struct rte_eth_dev *bond_dev, return ret; } + +int +nfp_flower_bond_get_output_id(struct nfp_flower_bond *nfp_bond, + const struct rte_eth_dev *bond_dev, + uint32_t *group_id) +{ + struct nfp_bond_group *group; + + pthread_mutex_lock(&nfp_bond->mutex); + + group = nfp_flower_bond_find_group(nfp_bond, bond_dev); + if (group == NULL) { + pthread_mutex_unlock(&nfp_bond->mutex); + return -ENOENT; + } + + *group_id = group->group_id; + + pthread_mutex_unlock(&nfp_bond->mutex); + + return 0; +} diff --git a/drivers/net/nfp/flower/nfp_flower_bond.h b/drivers/net/nfp/flower/nfp_flower_bond.h index 41cd64d9eb..7e451c58f1 100644 --- a/drivers/net/nfp/flower/nfp_flower_bond.h +++ b/drivers/net/nfp/flower/nfp_flower_bond.h @@ -44,6 +44,9 @@ /** We store 100(101-1) mbufs but queue needs 101 */ #define NFP_FL_BOND_RETRANS_LIMIT 101 +/* Flow output action of bonding port */ +#define NFP_FL_BOND_OUT 0xC0DE0000 + enum nfp_flower_bond_batch { NFP_FLOWER_BOND_BATCH_FIRST, NFP_FLOWER_BOND_BATCH_MEMBER, @@ -155,5 +158,8 @@ int nfp_fl_bond_put_unprocessed(struct nfp_flower_bond *nfp_bond, struct rte_mbuf *mbuf); int nfp_flower_bond_fw_create_get(struct rte_eth_dev *bond_dev, struct rte_eth_dev *nfp_dev); +int nfp_flower_bond_get_output_id(struct nfp_flower_bond *nfp_bond, + const struct rte_eth_dev *bond_dev, + uint32_t *group_id); #endif /* __NFP_FLOWER_BOND_H__ */ diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index 60ab58a3b1..17ef943855 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -712,6 +712,15 @@ struct nfp_fl_act_head { uint8_t len_lw; }; +#define NFP_FL_PRE_BOND_VER_OFF 8 + +struct nfp_fl_pre_bond { + struct nfp_fl_act_head head; + rte_be16_t group_id; + uint8_t lag_version[3]; + uint8_t instance; +}; + struct nfp_fl_act_output { struct nfp_fl_act_head head; rte_be16_t flags; diff --git a/drivers/net/nfp/flower/nfp_flower_flow.c b/drivers/net/nfp/flower/nfp_flower_flow.c index e26be30d18..6e21ad8c26 100644 --- a/drivers/net/nfp/flower/nfp_flower_flow.c +++ b/drivers/net/nfp/flower/nfp_flower_flow.c @@ -5,12 +5,14 @@ #include "nfp_flower_flow.h" +#include #include #include #include #include #include "flower/nfp_conntrack.h" +#include "flower/nfp_flower_bond.h" #include "flower/nfp_flower_representor.h" #include "nfpcore/nfp_rtsym.h" #include "nfp_logs.h" @@ -969,9 +971,23 @@ nfp_flow_key_layers_calculate_items(const struct rte_flow_item items[], return 0; } +static bool +nfp_flow_check_bond_action(struct nfp_flower_representor *representor, + uint32_t port_id) +{ + struct rte_eth_dev *bond_dev = &rte_eth_devices[port_id]; + + if (nfp_flower_support_bond_offload(representor->app_fw_flower) || + !nfp_flower_bond_all_member_are_phyrepr(bond_dev)) + return false; + + return true; +} + static int nfp_flow_key_layers_calculate_actions(const struct rte_flow_action actions[], - struct nfp_fl_key_ls *key_ls) + struct nfp_fl_key_ls *key_ls, + struct nfp_flower_representor *representor) { int ret = 0; bool meter_flag = false; @@ -981,6 +997,8 @@ nfp_flow_key_layers_calculate_actions(const struct rte_flow_action actions[], bool mac_set_flag = false; bool ttl_tos_flag = false; const struct rte_flow_action *action; + const struct rte_flow_action_port_id *port_id; + const struct rte_flow_action_ethdev *action_ethdev; for (action = actions; action->type != RTE_FLOW_ACTION_TYPE_END; ++action) { /* Make sure actions length no longer than NFP_FL_MAX_A_SIZ */ @@ -1006,10 +1024,36 @@ nfp_flow_key_layers_calculate_actions(const struct rte_flow_action actions[], case RTE_FLOW_ACTION_TYPE_PORT_ID: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_PORT_ID detected"); key_ls->act_size += sizeof(struct nfp_fl_act_output); + + port_id = action->conf; + if (port_id == NULL) + return -ERANGE; + + if (!rte_eth_bond_is_valid_port(port_id->id)) + break; + + if (!nfp_flow_check_bond_action(representor, port_id->id)) + return -ENOTSUP; + + /* We only add when all checks have passed */ + key_ls->act_size += sizeof(struct nfp_fl_pre_bond); break; case RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT detected"); key_ls->act_size += sizeof(struct nfp_fl_act_output); + + action_ethdev = action->conf; + if (action_ethdev == NULL) + return -ERANGE; + + if (!rte_eth_bond_is_valid_port(action_ethdev->port_id)) + break; + + if (!nfp_flow_check_bond_action(representor, action_ethdev->port_id)) + return -ENOTSUP; + + /* We only add when all checks have passed */ + key_ls->act_size += sizeof(struct nfp_fl_pre_bond); break; case RTE_FLOW_ACTION_TYPE_SET_MAC_SRC: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_SET_MAC_SRC detected"); @@ -1150,7 +1194,8 @@ nfp_flow_key_layers_calculate_actions(const struct rte_flow_action actions[], static int nfp_flow_key_layers_calculate(const struct rte_flow_item items[], const struct rte_flow_action actions[], - struct nfp_fl_key_ls *key_ls) + struct nfp_fl_key_ls *key_ls, + struct nfp_flower_representor *representor) { int ret = 0; @@ -1164,7 +1209,7 @@ nfp_flow_key_layers_calculate(const struct rte_flow_item items[], key_ls->tun_type = NFP_FL_TUN_NONE; ret |= nfp_flow_key_layers_calculate_items(items, key_ls); - ret |= nfp_flow_key_layers_calculate_actions(actions, key_ls); + ret |= nfp_flow_key_layers_calculate_actions(actions, key_ls, representor); return ret; } @@ -2160,12 +2205,45 @@ nfp_flow_compile_items(struct nfp_flower_representor *representor, return 0; } +static int +nfp_flower_bond_populate_pre_action(struct nfp_flower_representor *repr, + struct rte_eth_dev *bond_dev, + struct nfp_fl_pre_bond *pre_bond) +{ + rte_be32_t version; + struct nfp_bond_group *group; + struct nfp_flower_bond *nfp_bond; + + nfp_bond = repr->app_fw_flower->nfp_bond; + + pthread_mutex_lock(&nfp_bond->mutex); + + group = nfp_flower_bond_find_group(nfp_bond, bond_dev); + if (group == NULL) { + pthread_mutex_unlock(&nfp_bond->mutex); + PMD_DRV_LOG(ERR, "Invalid entry: group does not exist for bond action"); + return -ENOENT; + } + + pre_bond->group_id = rte_cpu_to_be_16(group->group_id); + version = rte_cpu_to_be_32(nfp_bond->batch_ver << NFP_FL_PRE_BOND_VER_OFF); + memcpy(pre_bond->lag_version, &version, 3); + pre_bond->instance = group->group_inst; + + pthread_mutex_unlock(&nfp_bond->mutex); + + return 0; +} + static int nfp_flow_action_output(char *act_data, const struct rte_flow_action *action, struct nfp_fl_rule_metadata *nfp_flow_meta, - uint32_t output_cnt) + uint32_t output_cnt, + struct nfp_flower_bond *nfp_bond, + bool *bonding_port) { + uint32_t gid; size_t act_size; struct rte_eth_dev *ethdev; struct nfp_fl_act_output *output; @@ -2177,18 +2255,31 @@ nfp_flow_action_output(char *act_data, return -ERANGE; ethdev = &rte_eth_devices[port_id->id]; - representor = ethdev->data->dev_private; + output = (struct nfp_fl_act_output *)act_data; + if (rte_eth_bond_is_valid_port(port_id->id)) { + /* Output port is bonding port */ + if (nfp_flower_bond_get_output_id(nfp_bond, ethdev, &gid) != 0) { + PMD_DRV_LOG(ERR, "Cannot find group id for bond action"); + return -EINVAL; + } + + output->port = rte_cpu_to_be_32(NFP_FL_BOND_OUT | gid); + nfp_flow_meta->shortcut = rte_cpu_to_be_32(NFP_FL_SC_ACT_NULL); + *bonding_port = true; + } else { + representor = ethdev->data->dev_private; + + output->port = rte_cpu_to_be_32(representor->port_id); + nfp_flow_meta->shortcut = rte_cpu_to_be_32(representor->port_id); + } + act_size = sizeof(struct nfp_fl_act_output); - output = (struct nfp_fl_act_output *)act_data; output->head.jump_id = NFP_FL_ACTION_OPCODE_OUTPUT; output->head.len_lw = act_size >> NFP_FL_LW_SIZ; - output->port = rte_cpu_to_be_32(representor->port_id); if (output_cnt == 0) output->flags = rte_cpu_to_be_16(NFP_FL_OUT_FLAGS_LAST); - nfp_flow_meta->shortcut = rte_cpu_to_be_32(representor->port_id); - return 0; } @@ -2196,8 +2287,11 @@ static int nfp_flow_action_output_stage(char *act_data, const struct rte_flow_action *action, struct nfp_fl_rule_metadata *nfp_flow_meta, - uint32_t output_cnt) + uint32_t output_cnt, + struct nfp_flower_bond *nfp_bond, + bool *bonding_port) { + uint32_t gid; size_t act_size; struct rte_eth_dev *ethdev; struct nfp_fl_act_output *output; @@ -2209,17 +2303,70 @@ nfp_flow_action_output_stage(char *act_data, return -ERANGE; ethdev = &rte_eth_devices[action_ethdev->port_id]; - representor = ethdev->data->dev_private; + output = (struct nfp_fl_act_output *)act_data; + if (rte_eth_bond_is_valid_port(action_ethdev->port_id)) { + /* Output port is bonding port */ + if (nfp_flower_bond_get_output_id(nfp_bond, ethdev, &gid) != 0) { + PMD_DRV_LOG(ERR, "Cannot find group id for bond action"); + return -EINVAL; + } + + output->port = rte_cpu_to_be_32(NFP_FL_BOND_OUT | gid); + nfp_flow_meta->shortcut = rte_cpu_to_be_32(NFP_FL_SC_ACT_NULL); + *bonding_port = true; + } else { + representor = ethdev->data->dev_private; + + output->port = rte_cpu_to_be_32(representor->port_id); + nfp_flow_meta->shortcut = rte_cpu_to_be_32(representor->port_id); + } + act_size = sizeof(struct nfp_fl_act_output); - output = (struct nfp_fl_act_output *)act_data; output->head.jump_id = NFP_FL_ACTION_OPCODE_OUTPUT; output->head.len_lw = act_size >> NFP_FL_LW_SIZ; - output->port = rte_cpu_to_be_32(representor->port_id); if (output_cnt == 0) output->flags = rte_cpu_to_be_16(NFP_FL_OUT_FLAGS_LAST); - nfp_flow_meta->shortcut = rte_cpu_to_be_32(representor->port_id); + return 0; +} + +static int +nfp_flow_pre_bond(struct nfp_flower_representor *representor, + char *act_data, + char *actions, + const struct rte_flow_action *action) +{ + int err; + int act_len; + uint32_t port_id; + struct rte_eth_dev *ethdev; + struct nfp_fl_pre_bond *pre_bond; + uint32_t pre_bond_size = sizeof(struct nfp_fl_pre_bond); + + act_len = act_data - actions; + + if (act_len + pre_bond_size > NFP_FL_MAX_A_SIZ) { + PMD_DRV_LOG(ERR, "Maximum allowed action list size exceeded at bond action"); + return -EOPNOTSUPP; + } + + if (act_len != 0) + memmove(actions + pre_bond_size, actions, act_len); + + if (action->type == RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT) + port_id = ((const struct rte_flow_action_ethdev *)action->conf)->port_id; + else + port_id = ((const struct rte_flow_action_port_id *)action->conf)->id; + + ethdev = &rte_eth_devices[port_id]; + pre_bond = (struct nfp_fl_pre_bond *)actions; + err = nfp_flower_bond_populate_pre_action(representor, ethdev, pre_bond); + if (err != 0) + return err; + + pre_bond->head.jump_id = NFP_FL_ACTION_OPCODE_PRE_LAG; + pre_bond->head.len_lw = pre_bond_size >> NFP_FL_LW_SIZ; return 0; } @@ -3502,6 +3649,13 @@ nfp_flow_count_output(const struct rte_flow_action actions[]) return count; } +static bool +nfp_flow_check_action_first(const struct rte_flow_action actions[], + uint32_t count) +{ + return ((nfp_flow_count_output(actions) - count) == 1); +} + static int nfp_flow_compile_action(struct nfp_flower_representor *representor, const struct rte_flow_action actions[], @@ -3517,7 +3671,9 @@ nfp_flow_compile_action(struct nfp_flower_representor *representor, bool tp_set_flag = false; bool mac_set_flag = false; bool ttl_tos_flag = false; + bool bonding_port = false; uint32_t total_actions = 0; + struct nfp_flower_bond *nfp_bond; const struct rte_flow_action *action; struct nfp_flower_meta_tci *meta_tci; struct nfp_fl_rule_metadata *nfp_flow_meta; @@ -3546,7 +3702,10 @@ nfp_flow_compile_action(struct nfp_flower_representor *representor, case RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT: PMD_DRV_LOG(DEBUG, "Process RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT"); count--; - ret = nfp_flow_action_output_stage(position, action, nfp_flow_meta, count); + + nfp_bond = representor->app_fw_flower->nfp_bond; + ret = nfp_flow_action_output_stage(position, action, + nfp_flow_meta, count, nfp_bond, &bonding_port); if (ret != 0) { PMD_DRV_LOG(ERR, "Failed when process" " RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT"); @@ -3554,11 +3713,32 @@ nfp_flow_compile_action(struct nfp_flower_representor *representor, } position += sizeof(struct nfp_fl_act_output); + + /* Output port is not a bonding port */ + if (!bonding_port) + break; + + if (!nfp_flow_check_action_first(actions, count)) { + PMD_DRV_LOG(ERR, "Bond action should be first"); + return -EOPNOTSUPP; + } + + ret = nfp_flow_pre_bond(representor, position, + action_data, action); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Bond action special move failed"); + return ret; + } + + position += sizeof(struct nfp_fl_pre_bond); break; case RTE_FLOW_ACTION_TYPE_PORT_ID: PMD_DRV_LOG(DEBUG, "Process RTE_FLOW_ACTION_TYPE_PORT_ID"); count--; - ret = nfp_flow_action_output(position, action, nfp_flow_meta, count); + + nfp_bond = representor->app_fw_flower->nfp_bond; + ret = nfp_flow_action_output(position, action, + nfp_flow_meta, count, nfp_bond, &bonding_port); if (ret != 0) { PMD_DRV_LOG(ERR, "Failed when process" " RTE_FLOW_ACTION_TYPE_PORT_ID"); @@ -3566,6 +3746,24 @@ nfp_flow_compile_action(struct nfp_flower_representor *representor, } position += sizeof(struct nfp_fl_act_output); + + /* Output port is not a bonding port */ + if (!bonding_port) + break; + + if (!nfp_flow_check_action_first(actions, count)) { + PMD_DRV_LOG(ERR, "Bond action should be first"); + return -EOPNOTSUPP; + } + + ret = nfp_flow_pre_bond(representor, position, + action_data, action); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Bond action special move failed"); + return ret; + } + + position += sizeof(struct nfp_fl_pre_bond); break; case RTE_FLOW_ACTION_TYPE_SET_MAC_SRC: PMD_DRV_LOG(DEBUG, "Process RTE_FLOW_ACTION_TYPE_SET_MAC_SRC"); @@ -3770,7 +3968,7 @@ nfp_flow_process(struct nfp_flower_representor *representor, struct nfp_fl_key_ls key_layer; struct nfp_fl_rule_metadata *nfp_flow_meta; - ret = nfp_flow_key_layers_calculate(items, actions, &key_layer); + ret = nfp_flow_key_layers_calculate(items, actions, &key_layer, representor); if (ret != 0) { PMD_DRV_LOG(ERR, "Key layers calculate failed."); return NULL;