From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4E8B63750AA for ; Wed, 8 Apr 2026 02:52:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775616765; cv=none; b=UO7ZeByevfQiJGNMjJzAnjmGmljMIxo9NN0om/W6mQ1Dgs/cCOmrrn/6h4Ete5QcXnj8oNcRCPKlkWMge1XBQkXrrZwLrqPqq02ccRZz9QSdRKTLI12Xey8lIPl7d9QYvEHo8q4mbCZ0MJEYJjHSiMURq0NpdUEDRD5Fu6eVle4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775616765; c=relaxed/simple; bh=dBMLccK+J+0/DzFeaxJbXeK8uOY7wkjClTEHtsz1Xv4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=r4IS0kNodtlRE0FgF8CqP/ndYDuq73PZjIZf/8NRgHzGcdr8lo/L7O06SMpiTxldCrPzzbG98SB+3vK8j4movHK5Rjtz9ZvbgpgiyuXcFBCJQFJ9EUEkDR0Ms921kb8urbvORDzwbD8kNmisjEM60kxsWe3WSlRMerL7bORHMIk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--marcharvey.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=uw/qXNOj; arc=none smtp.client-ip=74.125.82.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--marcharvey.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="uw/qXNOj" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2bdc1b30ac8so34275523eec.1 for ; Tue, 07 Apr 2026 19:52:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1775616762; x=1776221562; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=K5z3QxMvishe4U8CjYjl/4RpCskWtOirL2kQpSgWFR0=; b=uw/qXNOjyBAKdVcGb+sPnrr6bK1ZtZ+Igtp8ZXpJNJbBxFFvOucLPFILuQd2WpA2JE jKC3KGhQ1cKMj646dlJ0bY59vMKdyI7Cv+mA8ol+P/W6dg7qRVCRPhqFE8jKLPlN3TjF Pn4YWq7pi/iVxKBNUr6klWMVRCpEvT1t3HnB/euhQHYoIqmwS6DSrAOAXlUvzWWCEQcl YNcVxuaUcSSoltilObN6uH1A/4QpJO8bq74KlNXJ03BOfe99NndvClvmHtk9ObIGM5uB pOBwM2f2oqM98R2W6Ug+lAokh6gxoi5F0AUuVM/xlxIi8HjndedIYUBA78+fbB9SIeNV Bm/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775616762; x=1776221562; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=K5z3QxMvishe4U8CjYjl/4RpCskWtOirL2kQpSgWFR0=; b=a2Iji0G1+FD5BH+e7gJoE48ybk3kf0qW63bgd0yew6YPIT0Xi6+aaki4EbdM8qOpZR NDXxxUhv5IM2CaFYmdEY9kbxYKhcx+/FcFt2UM5IDO69PXHK1hsK83H9frYjf7KS6iff uiP03+H7Iz3mgRDr9YjRqONlvQIfUjl6Y6daiekVxiSgvKNN3XiTeAGAC7F3drskLS9E GY/kDzkkqWpe8NFsdw2vg9IGSAJS0RoFyB/SGfcHPjIxACbRbJWH9Sl4UVXXFHAdzueA 1cJ6s4eEf9srzUyVdKayjaAXCXxiCBBDnMHbXqHeCIIwOnsObtI6l+b8rB13MKh+OIQB 9a4g== X-Forwarded-Encrypted: i=1; AJvYcCVW89AQa3KreK7YiEcINE55kgJ71dtUXqik84de3nlgHMMGaL3EGSqygaLDmPsI6x9Er/7d4tq1SJ15gbU=@vger.kernel.org X-Gm-Message-State: AOJu0YxmiHSFALqth/i3dMrcQdGIY0ionkeN26EmiOVUltoypkYqP3wi 6nI/L10AS5wTwPpf6mzZ/yX/PY2LHHfg4NY1ecjsQ8j1P9Rc3Y0NSYfRWE5KeVxiiqmkfoQWXfB +1Gux0QELg9rEjg05bt2WIQ== X-Received: from dybmi2.prod.google.com ([2002:a05:7301:f82:b0:2cb:90d4:7906]) (user=marcharvey job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:5793:b0:2b0:571a:28a5 with SMTP id 5a478bee46e88-2cbfba8dc09mr10999585eec.18.1775616762001; Tue, 07 Apr 2026 19:52:42 -0700 (PDT) Date: Wed, 08 Apr 2026 02:52:27 +0000 In-Reply-To: <20260408-teaming-driver-internal-v6-0-e5bcdcf72504@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260408-teaming-driver-internal-v6-0-e5bcdcf72504@google.com> X-Developer-Key: i=marcharvey@google.com; a=ed25519; pk=OzOeciadbfF5Bug/4/hyEAwfrruSY4tn0Q0LocyYUL0= X-Developer-Signature: v=1; a=ed25519-sha256; t=1775616747; l=2926; i=marcharvey@google.com; s=20260401; h=from:subject:message-id; bh=dBMLccK+J+0/DzFeaxJbXeK8uOY7wkjClTEHtsz1Xv4=; b=f31grsLfcHIFyaF/YLTciGxq8Kxc5MxTHNUJxKdaCfV6HH/fpD2ElJTVw7GNveoy7tCPAvzB1 QYDxEHQLJUaAjECyq4iILSPjSV4W5amz8sauDx/lkX5ZUP6hFvhjYEC X-Mailer: b4 0.14.3 Message-ID: <20260408-teaming-driver-internal-v6-8-e5bcdcf72504@google.com> Subject: [PATCH net-next v6 08/10] net: team: Add new rx_enabled team port option From: Marc Harvey To: Jiri Pirko , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Marc Harvey , Jiri Pirko Content-Type: text/plain; charset="utf-8" Allow independent control over rx enablement via the rx_enabled option without affecting tx enablement. This affects the normal enabled option since a port is only considered enabled if both tx and rx are enabled. If this option is not used, then the enabled option will continue to behave exactly as it did before. Tested in a follow-up patch with a new selftest. Reviewed-by: Jiri Pirko Signed-off-by: Marc Harvey --- Changes in v4: - New patch: split from the original monolithic v3 patch "net: team: Decouple rx and tx enablement in the team driver". - Link to v3: https://lore.kernel.org/netdev/20260402-teaming-driver-internal-v3-6-e8cfdec3b5c2@google.com/ --- drivers/net/team/team_core.c | 49 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/drivers/net/team/team_core.c b/drivers/net/team/team_core.c index e437099a5a17..67f77de4cf10 100644 --- a/drivers/net/team/team_core.c +++ b/drivers/net/team/team_core.c @@ -941,6 +941,28 @@ static void __team_port_disable_rx(struct team *team, WRITE_ONCE(port->rx_enabled, false); } +static void team_port_enable_rx(struct team *team, + struct team_port *port) +{ + if (team_port_rx_enabled(port)) + return; + + __team_port_enable_rx(team, port); + team_adjust_ops(team); + team_notify_peers(team); + team_mcast_rejoin(team); +} + +static void team_port_disable_rx(struct team *team, + struct team_port *port) +{ + if (!team_port_rx_enabled(port)) + return; + + __team_port_disable_rx(team, port); + team_adjust_ops(team); +} + /* * Enable just TX on the port by adding to tx-enabled port hashlist and * setting port->tx_index (Might be racy so reader could see incorrect @@ -1487,6 +1509,26 @@ static int team_port_en_option_set(struct team *team, return 0; } +static void team_port_rx_en_option_get(struct team *team, + struct team_gsetter_ctx *ctx) +{ + struct team_port *port = ctx->info->port; + + ctx->data.bool_val = team_port_rx_enabled(port); +} + +static int team_port_rx_en_option_set(struct team *team, + struct team_gsetter_ctx *ctx) +{ + struct team_port *port = ctx->info->port; + + if (ctx->data.bool_val) + team_port_enable_rx(team, port); + else + team_port_disable_rx(team, port); + return 0; +} + static void team_user_linkup_option_get(struct team *team, struct team_gsetter_ctx *ctx) { @@ -1608,6 +1650,13 @@ static const struct team_option team_options[] = { .getter = team_port_en_option_get, .setter = team_port_en_option_set, }, + { + .name = "rx_enabled", + .type = TEAM_OPTION_TYPE_BOOL, + .per_port = true, + .getter = team_port_rx_en_option_get, + .setter = team_port_rx_en_option_set, + }, { .name = "user_linkup", .type = TEAM_OPTION_TYPE_BOOL, -- 2.53.0.1213.gd9a14994de-goog