From patchwork Mon Jul 1 12:27:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Valerio X-Patchwork-Id: 1954654 X-Patchwork-Delegate: aconole@redhat.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=R2aSs8sI; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::136; helo=smtp3.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4WCQK35QtZz1xpN for ; Mon, 1 Jul 2024 22:27:03 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 216A960A96; Mon, 1 Jul 2024 12:27:02 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id 7D0Tzh1GI4Hc; Mon, 1 Jul 2024 12:27:01 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=140.211.9.56; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org EEE0860A89 Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=R2aSs8sI Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id EEE0860A89; Mon, 1 Jul 2024 12:27:00 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id D02C7C002B; Mon, 1 Jul 2024 12:27:00 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 0FF33C002A for ; Mon, 1 Jul 2024 12:27:00 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 0921D60A6D for ; Mon, 1 Jul 2024 12:26:59 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id e0u-jK-JFj2w for ; Mon, 1 Jul 2024 12:26:58 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=170.10.133.124; helo=us-smtp-delivery-124.mimecast.com; envelope-from=pvalerio@redhat.com; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp3.osuosl.org ED51760A80 Authentication-Results: smtp3.osuosl.org; dmarc=pass (p=none dis=none) header.from=redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org ED51760A80 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by smtp3.osuosl.org (Postfix) with ESMTPS id ED51760A80 for ; Mon, 1 Jul 2024 12:26:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1719836816; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Y1ecUT3ymhbjYPeHB+NqoibYSK9Hi5U2ddtvUDw6tko=; b=R2aSs8sIG1UFF9OfT8/QZh+gaQqCV8sCBZSIBc2N00JwNyiM1cSj+IA2ZXmpF8NSpj0cRE 3d88kGfi8nDHeCJnsslTo1NabKjCu6tIdJji3zSbk4Bszp7a8rbCv+y1p9+OpDTUWeCPP6 gkPCoFf+G4A+ZWWsOnnKnGCK13DtKis= Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com [209.85.208.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-578-6O19Q4h_PBeLqsLXRtAgcw-1; Mon, 01 Jul 2024 08:26:55 -0400 X-MC-Unique: 6O19Q4h_PBeLqsLXRtAgcw-1 Received: by mail-ed1-f72.google.com with SMTP id 4fb4d7f45d1cf-57d072ea7b3so25237a12.2 for ; Mon, 01 Jul 2024 05:26:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719836813; x=1720441613; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gZgJuMHkF50kyBY58RHiSbpyhtab4KFLlzO5LVOQS6s=; b=pXh1NJ9/frgd9jA54u1sRlh1YHBhccErkK9GAZeEqtH/2ZeJgDXzn0nE9FRLbQ9nvd PkKSRIZyoyZdLw78yarsx4Lv+/QdZfh/f6llY0WrB8S5Yy9rrXEB3IQ7GKmwusCrR2b9 dXPaa90a5egciMOy44HxqKlUoSQxL+5vFFnZuX7GthBZCcHBPSilrLV/mwy052KPZSHS DrYvfRmijzsAItjVrm2HpoZUia+ZcCME7SNajM+u2WtNWVm1ro1TqUtxT4JwPbf7h66T WV+/SKyRNPzrwuACTH5BWKJl17Lky9d19ReR8G/fTWxW8NhojauLk3cYMwEJEaQsMSJw wwZQ== X-Gm-Message-State: AOJu0Yx3EneJMzUBQ6XikbbiOWhSEsXlqCbUZQ3pVJibRLnLP94LCpZJ IegwFLXcN/lttCr/MVV+hEpDN69SvmVHzctZ8RMjE5Zo1O3nk6EoVK1rPHoGJvOQ0EN6lF61Qqs enF5LcLm90gR4qn63EYEfruIa4g7H0fkA3bjIzUV5zt4hlLuNvoCl+m7WwVCghTdaf3uqFO078W EDQERiOHwjbTmIpGFofqGtH/E/AZqx8mjy0pBZaWw= X-Received: by 2002:a50:8d49:0:b0:582:4465:8b27 with SMTP id 4fb4d7f45d1cf-587a14ce696mr3580169a12.4.1719836813507; Mon, 01 Jul 2024 05:26:53 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEpJZtha5zVN6qAzpylUbmyHQ54dw4iQ9C1YOzdX7ADGUlTw7RFpZTdi/Itrr6d79Md8D2s5w== X-Received: by 2002:a50:8d49:0:b0:582:4465:8b27 with SMTP id 4fb4d7f45d1cf-587a14ce696mr3580153a12.4.1719836813006; Mon, 01 Jul 2024 05:26:53 -0700 (PDT) Received: from localhost (net-2-35-92-161.cust.vodafonedsl.it. [2.35.92.161]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-58614d5051dsm4307549a12.61.2024.07.01.05.26.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Jul 2024 05:26:52 -0700 (PDT) From: Paolo Valerio To: ovs-dev@openvswitch.org Date: Mon, 1 Jul 2024 14:27:18 +0200 Message-ID: <20240701122721.622994-4-pvalerio@redhat.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240701122721.622994-1-pvalerio@redhat.com> References: <20240701122721.622994-1-pvalerio@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: [ovs-dev] [PATCH 3/5] conntrack: Do not use atomics to report zones info. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Atomics are not needed when reporting zone limits. Remove the restriction by defining a non-atomic common structure to report such data. The change also access atomics using the related operations to retrieve atomics reporting only the fields required by the requesting level instead of relying of struct copy. Signed-off-by: Paolo Valerio --- lib/conntrack-private.h | 8 ++++++++ lib/conntrack.c | 11 ++++++----- lib/conntrack.h | 9 ++++----- lib/dpif-netdev.c | 6 +++--- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/lib/conntrack-private.h b/lib/conntrack-private.h index 6c65caa07..2c625d710 100644 --- a/lib/conntrack-private.h +++ b/lib/conntrack-private.h @@ -198,6 +198,14 @@ enum ct_ephemeral_range { #define FOR_EACH_PORT_IN_RANGE(curr, min, max) \ FOR_EACH_PORT_IN_RANGE__(curr, min, max, OVS_JOIN(idx, __COUNTER__)) + +struct conntrack_zone_limit { + int32_t zone; + uint32_t limit; + atomic_count count; + uint32_t zone_limit_seq; /* Used to disambiguate zone limit counts. */ +}; + struct conntrack { struct ovs_mutex ct_lock; /* Protects the following fields. */ struct cmap conns[UINT16_MAX + 1] OVS_GUARDED; diff --git a/lib/conntrack.c b/lib/conntrack.c index e90ade32f..0481a8c8a 100644 --- a/lib/conntrack.c +++ b/lib/conntrack.c @@ -330,18 +330,19 @@ zone_limit_lookup_or_default(struct conntrack *ct, int32_t zone) return zl ? zl : zone_limit_lookup(ct, DEFAULT_ZONE); } -struct conntrack_zone_limit +struct conntrack_zone_info zone_limit_get(struct conntrack *ct, int32_t zone) { - struct conntrack_zone_limit czl = { + struct conntrack_zone_info czl = { .zone = DEFAULT_ZONE, .limit = 0, - .count = ATOMIC_COUNT_INIT(0), - .zone_limit_seq = 0, + .count = 0, }; struct zone_limit *zl = zone_limit_lookup_or_default(ct, zone); if (zl) { - czl = zl->czl; + czl.zone = zl->czl.zone; + czl.limit = zl->czl.limit; + czl.count = atomic_count_get(&zl->czl.count); } return czl; } diff --git a/lib/conntrack.h b/lib/conntrack.h index 13bb02ea9..c3136e955 100644 --- a/lib/conntrack.h +++ b/lib/conntrack.h @@ -115,11 +115,10 @@ struct conntrack_dump { uint16_t current_zone; }; -struct conntrack_zone_limit { +struct conntrack_zone_info { int32_t zone; uint32_t limit; - atomic_count count; - uint32_t zone_limit_seq; /* Used to disambiguate zone limit counts. */ + unsigned int count; }; struct timeout_policy { @@ -161,8 +160,8 @@ int conntrack_set_sweep_interval(struct conntrack *ct, uint32_t ms); uint32_t conntrack_get_sweep_interval(struct conntrack *ct); bool conntrack_get_tcp_seq_chk(struct conntrack *ct); struct ipf *conntrack_ipf_ctx(struct conntrack *ct); -struct conntrack_zone_limit zone_limit_get(struct conntrack *ct, - int32_t zone); +struct conntrack_zone_info zone_limit_get(struct conntrack *ct, + int32_t zone); int zone_limit_update(struct conntrack *ct, int32_t zone, uint32_t limit); int zone_limit_delete(struct conntrack *ct, int32_t zone); diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index c7f9e1490..3fbfcfa2b 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -9729,7 +9729,7 @@ dpif_netdev_ct_get_limits(struct dpif *dpif, struct ovs_list *zone_limits_reply) { struct dp_netdev *dp = get_dp_netdev(dpif); - struct conntrack_zone_limit czl; + struct conntrack_zone_info czl; if (!ovs_list_is_empty(zone_limits_request)) { struct ct_dpif_zone_limit *zone_limit; @@ -9738,7 +9738,7 @@ dpif_netdev_ct_get_limits(struct dpif *dpif, if (czl.zone == zone_limit->zone || czl.zone == DEFAULT_ZONE) { ct_dpif_push_zone_limit(zone_limits_reply, zone_limit->zone, czl.limit, - atomic_count_get(&czl.count)); + czl.count); } else { return EINVAL; } @@ -9754,7 +9754,7 @@ dpif_netdev_ct_get_limits(struct dpif *dpif, czl = zone_limit_get(dp->conntrack, z); if (czl.zone == z) { ct_dpif_push_zone_limit(zone_limits_reply, z, czl.limit, - atomic_count_get(&czl.count)); + czl.count); } } }