From patchwork Thu Apr 16 10:16:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tonghao Zhang X-Patchwork-Id: 1272688 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.137; helo=fraxinus.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=FeQL9YY2; dkim-atps=neutral Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 494Kbd0xP3z9sPF for ; Sun, 19 Apr 2020 03:25:16 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id E59F28659E; Sat, 18 Apr 2020 17:25:14 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2gn-yi2dPgMU; Sat, 18 Apr 2020 17:25:13 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by fraxinus.osuosl.org (Postfix) with ESMTP id C46778644F; Sat, 18 Apr 2020 17:25:13 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 9FDB1C089F; Sat, 18 Apr 2020 17:25:13 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 7FEBBC0172 for ; Sat, 18 Apr 2020 17:25:12 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id 693D486591 for ; Sat, 18 Apr 2020 17:25:12 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id w9KR0CZky6yO for ; Sat, 18 Apr 2020 17:25:11 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-pg1-f195.google.com (mail-pg1-f195.google.com [209.85.215.195]) by fraxinus.osuosl.org (Postfix) with ESMTPS id 1A0398644F for ; Sat, 18 Apr 2020 17:25:11 +0000 (UTC) Received: by mail-pg1-f195.google.com with SMTP id h69so2813417pgc.8 for ; Sat, 18 Apr 2020 10:25:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=eCMGd0hj6wiyX2tXp+ELFr/xoQ/OXQELJzuPmPPqyqg=; b=FeQL9YY2z2SrH+95RmoUj23C/xb1s0bADr2kSN2n9m6nY0E+KCQbZzkwHf9jEkwmzn lCS5m1QSSspXy0E/faDlcai2//Fx1CorT6TNl+p9WFgA284lI355cfH6xGcmtnLxZnXB w6gnwKdLkLfolnvoYzRKHAWrQWWBp7L3Pcy0IlAs4o/uLPzKT5h0E51LDBxXGUjCO019 dhSf+pUNr0mSI0/y9DN8Jh0BbSsnE4DNJpJU132z7kdXgxEbQTV9rmQQ6VVDKmXmIgaX 1ICpwK3hbxz9tnGUHJ/HiikJFmUuJtYegLutjfuLyxg11Ti9PCEHDsGTSSmKzls2QmJn O5FQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=eCMGd0hj6wiyX2tXp+ELFr/xoQ/OXQELJzuPmPPqyqg=; b=NMjxLTYlXViMr7j2DB27npwfNZhoHy4jjgAJyDJKAlKSz2eHE6enlBlnwOLkvyOHry rhtjhJzKRnPDJZ/lhE4lXhnV5ukCG+QTkY72eXqoGZFof3UZ7ulDWMX92TrLHlzklf0h oF5zP4P2keydPo+RwQXI/5SUrp9CLuHfoK/bjVOon+wtqx0AAFtE4RhGynOCBcgu1oXj y2wamp1iq0p3y73GfIMhoh+JdPUFTPS98DIN0WLqONbl67P3i0bFDkveHmwEBG1JkErI +gjAarIx6mAQiElZpQVmbHg3SwZbJ5RzI6WgvO7rCX9yHNYfjnXTl/SOC43ovn7d+lcP SS0A== X-Gm-Message-State: AGi0PuavacW6anC0k0EfX+Nw0spA8+L98O2cPGpboJOo/ldIh1+egob0 b35Dc9IS+o9rEQyaV7nx0rQ= X-Google-Smtp-Source: APiQypJpUTiViBbGshTB70D+lQ/zO5uNrQtod9LMjzGKM93x5FAyUKTx+ykK0jXuNPG9bR3uxNYrhQ== X-Received: by 2002:a63:4526:: with SMTP id s38mr8850325pga.410.1587230710555; Sat, 18 Apr 2020 10:25:10 -0700 (PDT) Received: from local.opencloud.tech.localdomain ([115.171.63.184]) by smtp.gmail.com with ESMTPSA id s44sm9329251pjc.28.2020.04.18.10.25.07 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 Apr 2020 10:25:10 -0700 (PDT) From: xiangxia.m.yue@gmail.com To: pshelar@ovn.org, azhou@ovn.org, blp@ovn.org, u9012063@gmail.com Date: Thu, 16 Apr 2020 18:16:59 +0800 Message-Id: <1587032223-49460-2-git-send-email-xiangxia.m.yue@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1587032223-49460-1-git-send-email-xiangxia.m.yue@gmail.com> References: <1584969039-74113-1-git-send-email-xiangxia.m.yue@gmail.com> <1587032223-49460-1-git-send-email-xiangxia.m.yue@gmail.com> Cc: dev@openvswitch.org, netdev@vger.kernel.org Subject: [ovs-dev] [PATCH net-next v2 1/5] net: openvswitch: expand the meters supported number X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" From: Tonghao Zhang In kernel datapath of Open vSwitch, there are only 1024 buckets of meter in one dp. If installing more than 1024 (e.g. 8192) meters, it may lead to the performance drop. But in some case, for example, Open vSwitch used as edge gateway, there should be 200,000+ at least, meters used for IP address bandwidth limitation. [Open vSwitch userspace datapath has this issue too.] For more scalable meter, this patch expands the buckets when necessary, so we can install more meters in the datapath. Introducing the struct *dp_meter_instance*, it's easy to expand meter though changing the *ti* point in the struct *dp_meter_table*. Cc: Pravin B Shelar Cc: Andy Zhou Signed-off-by: Tonghao Zhang --- net/openvswitch/datapath.h | 2 +- net/openvswitch/meter.c | 200 +++++++++++++++++++++++++++++-------- net/openvswitch/meter.h | 15 ++- 3 files changed, 169 insertions(+), 48 deletions(-) diff --git a/net/openvswitch/datapath.h b/net/openvswitch/datapath.h index e239a46c2f94..785105578448 100644 --- a/net/openvswitch/datapath.h +++ b/net/openvswitch/datapath.h @@ -82,7 +82,7 @@ struct datapath { u32 max_headroom; /* Switch meters. */ - struct hlist_head *meters; + struct dp_meter_table *meters; }; /** diff --git a/net/openvswitch/meter.c b/net/openvswitch/meter.c index 5010d1ddd4bd..494a0014ecd8 100644 --- a/net/openvswitch/meter.c +++ b/net/openvswitch/meter.c @@ -19,8 +19,6 @@ #include "datapath.h" #include "meter.h" -#define METER_HASH_BUCKETS 1024 - static const struct nla_policy meter_policy[OVS_METER_ATTR_MAX + 1] = { [OVS_METER_ATTR_ID] = { .type = NLA_U32, }, [OVS_METER_ATTR_KBPS] = { .type = NLA_FLAG }, @@ -39,6 +37,11 @@ static const struct nla_policy band_policy[OVS_BAND_ATTR_MAX + 1] = { [OVS_BAND_ATTR_STATS] = { .len = sizeof(struct ovs_flow_stats) }, }; +static u32 meter_hash(struct dp_meter_instance *ti, u32 id) +{ + return id % ti->n_meters; +} + static void ovs_meter_free(struct dp_meter *meter) { if (!meter) @@ -47,40 +50,141 @@ static void ovs_meter_free(struct dp_meter *meter) kfree_rcu(meter, rcu); } -static struct hlist_head *meter_hash_bucket(const struct datapath *dp, - u32 meter_id) -{ - return &dp->meters[meter_id & (METER_HASH_BUCKETS - 1)]; -} - /* Call with ovs_mutex or RCU read lock. */ -static struct dp_meter *lookup_meter(const struct datapath *dp, +static struct dp_meter *lookup_meter(const struct dp_meter_table *tbl, u32 meter_id) { + struct dp_meter_instance *ti = rcu_dereference_ovsl(tbl->ti); + u32 hash = meter_hash(ti, meter_id); struct dp_meter *meter; - struct hlist_head *head; - head = meter_hash_bucket(dp, meter_id); - hlist_for_each_entry_rcu(meter, head, dp_hash_node, - lockdep_ovsl_is_held()) { - if (meter->id == meter_id) - return meter; - } + meter = rcu_dereference_ovsl(ti->dp_meters[hash]); + if (meter && likely(meter->id == meter_id)) + return meter; + return NULL; } -static void attach_meter(struct datapath *dp, struct dp_meter *meter) +static struct dp_meter_instance *dp_meter_instance_alloc(const u32 size) +{ + struct dp_meter_instance *ti; + + ti = kvzalloc(sizeof(*ti) + + sizeof(struct dp_meter *) * size, + GFP_KERNEL); + if (!ti) + return NULL; + + ti->n_meters = size; + + return ti; +} + +static void dp_meter_instance_free(struct dp_meter_instance *ti) +{ + kvfree(ti); +} + +static void dp_meter_instance_free_rcu(struct rcu_head *rcu) +{ + struct dp_meter_instance *ti; + + ti = container_of(rcu, struct dp_meter_instance, rcu); + kvfree(ti); +} + +static int +dp_meter_instance_realloc(struct dp_meter_table *tbl, u32 size) +{ + struct dp_meter_instance *ti = rcu_dereference_ovsl(tbl->ti); + int n_meters = min(size, ti->n_meters); + struct dp_meter_instance *new_ti; + int i; + + new_ti = dp_meter_instance_alloc(size); + if (!new_ti) + return -ENOMEM; + + for (i = 0; i < n_meters; i++) + new_ti->dp_meters[i] = + rcu_dereference_ovsl(ti->dp_meters[i]); + + rcu_assign_pointer(tbl->ti, new_ti); + call_rcu(&ti->rcu, dp_meter_instance_free_rcu); + + return 0; +} + +static void dp_meter_instance_insert(struct dp_meter_instance *ti, + struct dp_meter *meter) +{ + u32 hash; + + hash = meter_hash(ti, meter->id); + rcu_assign_pointer(ti->dp_meters[hash], meter); +} + +static void dp_meter_instance_remove(struct dp_meter_instance *ti, + struct dp_meter *meter) { - struct hlist_head *head = meter_hash_bucket(dp, meter->id); + u32 hash; - hlist_add_head_rcu(&meter->dp_hash_node, head); + hash = meter_hash(ti, meter->id); + RCU_INIT_POINTER(ti->dp_meters[hash], NULL); } -static void detach_meter(struct dp_meter *meter) +static int attach_meter(struct dp_meter_table *tbl, struct dp_meter *meter) { + struct dp_meter_instance *ti = rcu_dereference_ovsl(tbl->ti); + u32 hash = meter_hash(ti, meter->id); + + /* + * In generally, slot selected should be empty, because + * OvS uses id-pool to fetch a available id. + */ + if (unlikely(rcu_dereference_ovsl(ti->dp_meters[hash]))) + return -EINVAL; + + dp_meter_instance_insert(ti, meter); + + /* That function is thread-safe. */ + if (++tbl->count >= ti->n_meters) + if (dp_meter_instance_realloc(tbl, ti->n_meters * 2)) + goto expand_err; + + return 0; + +expand_err: + dp_meter_instance_remove(ti, meter); + tbl->count--; + return -ENOMEM; +} + +static void detach_meter(struct dp_meter_table *tbl, struct dp_meter *meter) +{ + struct dp_meter_instance *ti; + ASSERT_OVSL(); - if (meter) - hlist_del_rcu(&meter->dp_hash_node); + if (!meter) + return; + + ti = rcu_dereference_ovsl(tbl->ti); + dp_meter_instance_remove(ti, meter); + + tbl->count--; + + /* Shrink the meter array if necessary. */ + if (ti->n_meters > DP_METER_ARRAY_SIZE_MIN && + tbl->count <= (ti->n_meters / 4)) { + int half_size = ti->n_meters / 2; + int i; + + for (i = half_size; i < ti->n_meters; i++) + if (rcu_dereference_ovsl(ti->dp_meters[i])) + return; + + dp_meter_instance_realloc(tbl, half_size); + } } static struct sk_buff * @@ -303,9 +407,13 @@ static int ovs_meter_cmd_set(struct sk_buff *skb, struct genl_info *info) meter_id = nla_get_u32(a[OVS_METER_ATTR_ID]); /* Cannot fail after this. */ - old_meter = lookup_meter(dp, meter_id); - detach_meter(old_meter); - attach_meter(dp, meter); + old_meter = lookup_meter(dp->meters, meter_id); + detach_meter(dp->meters, old_meter); + + err = attach_meter(dp->meters, meter); + if (err) + goto exit_unlock; + ovs_unlock(); /* Build response with the meter_id and stats from @@ -365,7 +473,7 @@ static int ovs_meter_cmd_get(struct sk_buff *skb, struct genl_info *info) } /* Locate meter, copy stats. */ - meter = lookup_meter(dp, meter_id); + meter = lookup_meter(dp->meters, meter_id); if (!meter) { err = -ENOENT; goto exit_unlock; @@ -416,13 +524,13 @@ static int ovs_meter_cmd_del(struct sk_buff *skb, struct genl_info *info) goto exit_unlock; } - old_meter = lookup_meter(dp, meter_id); + old_meter = lookup_meter(dp->meters, meter_id); if (old_meter) { spin_lock_bh(&old_meter->lock); err = ovs_meter_cmd_reply_stats(reply, meter_id, old_meter); WARN_ON(err); spin_unlock_bh(&old_meter->lock); - detach_meter(old_meter); + detach_meter(dp->meters, old_meter); } ovs_unlock(); ovs_meter_free(old_meter); @@ -452,7 +560,7 @@ bool ovs_meter_execute(struct datapath *dp, struct sk_buff *skb, int i, band_exceeded_max = -1; u32 band_exceeded_rate = 0; - meter = lookup_meter(dp, meter_id); + meter = lookup_meter(dp->meters, meter_id); /* Do not drop the packet when there is no meter. */ if (!meter) return false; @@ -570,32 +678,36 @@ struct genl_family dp_meter_genl_family __ro_after_init = { int ovs_meters_init(struct datapath *dp) { - int i; + struct dp_meter_instance *ti; + struct dp_meter_table *tbl; + + tbl = kmalloc(sizeof(*tbl), GFP_KERNEL); + if (!tbl) + return -ENOMEM; - dp->meters = kmalloc_array(METER_HASH_BUCKETS, - sizeof(struct hlist_head), GFP_KERNEL); + tbl->count = 0; - if (!dp->meters) + ti = dp_meter_instance_alloc(DP_METER_ARRAY_SIZE_MIN); + if (!ti) { + kfree(tbl); return -ENOMEM; + } - for (i = 0; i < METER_HASH_BUCKETS; i++) - INIT_HLIST_HEAD(&dp->meters[i]); + rcu_assign_pointer(tbl->ti, ti); + dp->meters = tbl; return 0; } void ovs_meters_exit(struct datapath *dp) { + struct dp_meter_table *tbl = dp->meters; + struct dp_meter_instance *ti = rcu_dereference_ovsl(tbl->ti); int i; - for (i = 0; i < METER_HASH_BUCKETS; i++) { - struct hlist_head *head = &dp->meters[i]; - struct dp_meter *meter; - struct hlist_node *n; - - hlist_for_each_entry_safe(meter, n, head, dp_hash_node) - kfree(meter); - } + for (i = 0; i < ti->n_meters; i++) + ovs_meter_free(ti->dp_meters[i]); - kfree(dp->meters); + dp_meter_instance_free(ti); + kfree(tbl); } diff --git a/net/openvswitch/meter.h b/net/openvswitch/meter.h index f645913870bd..d91940383bbe 100644 --- a/net/openvswitch/meter.h +++ b/net/openvswitch/meter.h @@ -18,6 +18,7 @@ struct datapath; #define DP_MAX_BANDS 1 +#define DP_METER_ARRAY_SIZE_MIN (1ULL << 10) struct dp_meter_band { u32 type; @@ -30,9 +31,6 @@ struct dp_meter_band { struct dp_meter { spinlock_t lock; /* Per meter lock */ struct rcu_head rcu; - struct hlist_node dp_hash_node; /*Element in datapath->meters - * hash table. - */ u32 id; u16 kbps:1, keep_stats:1; u16 n_bands; @@ -42,6 +40,17 @@ struct dp_meter { struct dp_meter_band bands[]; }; +struct dp_meter_instance { + struct rcu_head rcu; + u32 n_meters; + struct dp_meter __rcu *dp_meters[]; +}; + +struct dp_meter_table { + struct dp_meter_instance __rcu *ti; + u32 count; +}; + extern struct genl_family dp_meter_genl_family; int ovs_meters_init(struct datapath *dp); void ovs_meters_exit(struct datapath *dp); From patchwork Thu Apr 16 10:17:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Tonghao Zhang X-Patchwork-Id: 1272690 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.136; helo=silver.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=sMwjRoaK; dkim-atps=neutral Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 494Kbg4xWnz9sQx for ; Sun, 19 Apr 2020 03:25:19 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 317C2204A3; Sat, 18 Apr 2020 17:25:18 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id el60CVGyE7bL; Sat, 18 Apr 2020 17:25:15 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by silver.osuosl.org (Postfix) with ESMTP id 5A8BE20469; Sat, 18 Apr 2020 17:25:15 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 41BC4C089F; Sat, 18 Apr 2020 17:25:15 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id CCD28C0172 for ; Sat, 18 Apr 2020 17:25:14 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id C98A987610 for ; Sat, 18 Apr 2020 17:25:14 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id UTYOtT+OfN8I for ; Sat, 18 Apr 2020 17:25:13 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) by whitealder.osuosl.org (Postfix) with ESMTPS id CBBAE86C0E for ; Sat, 18 Apr 2020 17:25:13 +0000 (UTC) Received: by mail-pf1-f194.google.com with SMTP id u65so2750197pfb.4 for ; Sat, 18 Apr 2020 10:25:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=O10wsNpA1gLWNdvNreUMORJ05p7egTtAGrOIi2dZc1U=; b=sMwjRoaKQFjt8ke4hLUjpKQ98jAMuVh2Q26dgBdwIjEcA3ICI4Qq0wB5zqQLujC5g8 FIyQQ/6mhUlNyJvfOTBd/mqzw5vIt487E8qrmFC1Y0n1d/UEPATP4sGitsIup5SWqAra OfbjCRTiu9ncpeflpKqvnobGA4w7VDegvJ/JxaUQBoKL+tyzqsrhQdqHYmsLusHbXt/F TFWayaQnyyMHzglAPxKAhewYQXPC3w68MTC58JH1aqZs3exuVU2Qq8+X58OrwAIMBil0 thX1UNZ4QsAjsbV1DW1coUcpyhqcXq7u4SX4P9/SLYPTIK7WcJsuAyvRBhljlVKYSUoU /dmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=O10wsNpA1gLWNdvNreUMORJ05p7egTtAGrOIi2dZc1U=; b=lv4Hkicnd8Gld0VvioKj0zND0s/RBf2ytVvo704WpTIZGv5/7HCqXFLKBsnZW8p4J9 vAAqGTWqVfgFJ4/MuifU5jFMQB0bdxWUmYIOlAk4/bTN5mqE1f+I6VJXFCX+t7QEzmaT gFmb34Jgh0XyMmJ6EQTCuRPbBATZFglFOQMwF/OK98frIe3pQsPDPB+3C/zQUX5DNWna caU/No1c/vtSbI1sijU27Vv5x234CFQOc+1WITPYEb9BYTDpO1u+1+uLurUpeGXzAksg q2XwY4HOfI7m2bhsNhPUZf/u5e4rir52jAjHENXKCW7joZKRy26rHFI3XNU+GkVI8LUd D6og== X-Gm-Message-State: AGi0PubZEmYxOehEQQgrIS7ou8avpKU7bKc+ymGA6mZoSuCnYfufreDA tDp7VGS20m+rQetAtJ4FWqM= X-Google-Smtp-Source: APiQypLdh6m0YUFYRoJM3Pz1IW/VCVqbVtD53FiV723XXXOS9WBWbtqYTIs4Rz8h/GSPgjoj/EyygQ== X-Received: by 2002:a63:cd08:: with SMTP id i8mr8612631pgg.55.1587230713493; Sat, 18 Apr 2020 10:25:13 -0700 (PDT) Received: from local.opencloud.tech.localdomain ([115.171.63.184]) by smtp.gmail.com with ESMTPSA id s44sm9329251pjc.28.2020.04.18.10.25.10 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 Apr 2020 10:25:13 -0700 (PDT) From: xiangxia.m.yue@gmail.com To: pshelar@ovn.org, azhou@ovn.org, blp@ovn.org, u9012063@gmail.com Date: Thu, 16 Apr 2020 18:17:00 +0800 Message-Id: <1587032223-49460-3-git-send-email-xiangxia.m.yue@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1587032223-49460-1-git-send-email-xiangxia.m.yue@gmail.com> References: <1584969039-74113-1-git-send-email-xiangxia.m.yue@gmail.com> <1587032223-49460-1-git-send-email-xiangxia.m.yue@gmail.com> MIME-Version: 1.0 Cc: dev@openvswitch.org, netdev@vger.kernel.org Subject: [ovs-dev] [PATCH net-next v2 2/5] net: openvswitch: set max limitation to meters X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" From: Tonghao Zhang Don't allow user to create meter unlimitedly, which may cause to consume a large amount of kernel memory. The 200,000 meters may be fine in general case. Cc: Pravin B Shelar Cc: Andy Zhou Signed-off-by: Tonghao Zhang --- net/openvswitch/meter.c | 21 +++++++++++++++------ net/openvswitch/meter.h | 1 + 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/net/openvswitch/meter.c b/net/openvswitch/meter.c index 494a0014ecd8..1b6776f9c109 100644 --- a/net/openvswitch/meter.c +++ b/net/openvswitch/meter.c @@ -137,6 +137,7 @@ static int attach_meter(struct dp_meter_table *tbl, struct dp_meter *meter) { struct dp_meter_instance *ti = rcu_dereference_ovsl(tbl->ti); u32 hash = meter_hash(ti, meter->id); + int err; /* * In generally, slot selected should be empty, because @@ -148,16 +149,24 @@ static int attach_meter(struct dp_meter_table *tbl, struct dp_meter *meter) dp_meter_instance_insert(ti, meter); /* That function is thread-safe. */ - if (++tbl->count >= ti->n_meters) - if (dp_meter_instance_realloc(tbl, ti->n_meters * 2)) - goto expand_err; + tbl->count++; + if (tbl->count > DP_METER_NUM_MAX) { + err = -EFBIG; + goto attach_err; + } + + if (tbl->count >= ti->n_meters && + dp_meter_instance_realloc(tbl, ti->n_meters * 2)) { + err = -ENOMEM; + goto attach_err; + } return 0; -expand_err: +attach_err: dp_meter_instance_remove(ti, meter); tbl->count--; - return -ENOMEM; + return err; } static void detach_meter(struct dp_meter_table *tbl, struct dp_meter *meter) @@ -264,7 +273,7 @@ static int ovs_meter_cmd_features(struct sk_buff *skb, struct genl_info *info) if (IS_ERR(reply)) return PTR_ERR(reply); - if (nla_put_u32(reply, OVS_METER_ATTR_MAX_METERS, U32_MAX) || + if (nla_put_u32(reply, OVS_METER_ATTR_MAX_METERS, DP_METER_NUM_MAX) || nla_put_u32(reply, OVS_METER_ATTR_MAX_BANDS, DP_MAX_BANDS)) goto nla_put_failure; diff --git a/net/openvswitch/meter.h b/net/openvswitch/meter.h index d91940383bbe..cdfc6b9dbd42 100644 --- a/net/openvswitch/meter.h +++ b/net/openvswitch/meter.h @@ -19,6 +19,7 @@ struct datapath; #define DP_MAX_BANDS 1 #define DP_METER_ARRAY_SIZE_MIN (1ULL << 10) +#define DP_METER_NUM_MAX (200000ULL) struct dp_meter_band { u32 type; From patchwork Thu Apr 16 10:17:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tonghao Zhang X-Patchwork-Id: 1272693 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.136; helo=silver.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=hWpkdr8c; dkim-atps=neutral Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 494Kbp0VdNz9sPF for ; Sun, 19 Apr 2020 03:25:26 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 5B26F2281C; Sat, 18 Apr 2020 17:25:24 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id pGuhVtQNmCLN; Sat, 18 Apr 2020 17:25:20 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by silver.osuosl.org (Postfix) with ESMTP id 578A920480; Sat, 18 Apr 2020 17:25:20 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 3E0BFC089F; Sat, 18 Apr 2020 17:25:20 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id BB5A2C089F for ; Sat, 18 Apr 2020 17:25:19 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id A0F2120469 for ; Sat, 18 Apr 2020 17:25:19 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id YDNlgfeArPsD for ; Sat, 18 Apr 2020 17:25:17 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) by silver.osuosl.org (Postfix) with ESMTPS id D5E212046B for ; Sat, 18 Apr 2020 17:25:17 +0000 (UTC) Received: by mail-pf1-f194.google.com with SMTP id y25so2748017pfn.5 for ; Sat, 18 Apr 2020 10:25:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=NZD7sPUFFjYPBotZrtF/iwSJE5qT8YuGHZzRiAQpdP8=; b=hWpkdr8c3bmtW1ndwuZwWQSQ7Vvu3M1r+4uh6sHjE/VOfxpUiRkYOI9aaQn3/YvAsI zv2ZvaZ6dGS50nwENc5Xb45zkeqNJdMdTBC90QDgdsDrckJh15W5qE9sk5CBW5k7N2xz C/up70nSeuTtkyIdNNNuDZztDqIlQx4cfOM4zBHPGZUtI6u/6Bzf5svvPtOd2RCm400r mRi6INDPmQQ9PosbquNLlVxLhG1oVg32W3K/a2E7re/WDf+yG7tR7uyoz8okujr5MePg fGxWmtVLZ8jiwfWqfy6NGf55htTrRwr2x7IfsESpKAbFX9SPPk8wQanjdAZF2+6fskTq yQJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=NZD7sPUFFjYPBotZrtF/iwSJE5qT8YuGHZzRiAQpdP8=; b=Fb3Jp38+d5MSOkxzpPoX5FvnmCfAtHGsr83Gb1tNvDjbWZ1uAjUB1rKIX3JyUveYDq 5IzSrs9VxhfTS0hHvDdfkaKaZLrS2a7YmIL0jKkms3WxE0YM8Sp2LeONqJbOvRxVhcLq O9aO0LUPJ4cHptUjdiFasLAgJij8veROyNZuJnTqACusXaNEjqxlDSJGK1IBs17z+KOu Ox7CmzXvmN5p+urcqeP/P/0ToviClthJLwfd9pFLSXHByVPzbjQZYwvBOH/uQT68PeVs mW5dYC/9VdrGd6Xpja3AbV97ppWvl1vJY6j4bDNS/entynBk36CjMAEwU+E0BrKIz5Yw maCA== X-Gm-Message-State: AGi0PubBn4HYfOWMtNoPALMBrwz0KBEjkUkzm+wtWLQQCjiD+w4FYvTq w2foBlyjZHd4ooPzzFsBIAw= X-Google-Smtp-Source: APiQypJQ682/okl/xNiQATMwZDCufz73QWapJ5x6dDxCrlj/OV1qeAc2tjP26nFwcapHYGljocz17A== X-Received: by 2002:aa7:91c8:: with SMTP id z8mr8986183pfa.194.1587230717542; Sat, 18 Apr 2020 10:25:17 -0700 (PDT) Received: from local.opencloud.tech.localdomain ([115.171.63.184]) by smtp.gmail.com with ESMTPSA id s44sm9329251pjc.28.2020.04.18.10.25.13 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 Apr 2020 10:25:17 -0700 (PDT) From: xiangxia.m.yue@gmail.com To: pshelar@ovn.org, azhou@ovn.org, blp@ovn.org, u9012063@gmail.com Date: Thu, 16 Apr 2020 18:17:01 +0800 Message-Id: <1587032223-49460-4-git-send-email-xiangxia.m.yue@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1587032223-49460-1-git-send-email-xiangxia.m.yue@gmail.com> References: <1584969039-74113-1-git-send-email-xiangxia.m.yue@gmail.com> <1587032223-49460-1-git-send-email-xiangxia.m.yue@gmail.com> Cc: dev@openvswitch.org, netdev@vger.kernel.org Subject: [ovs-dev] [PATCH net-next v2 3/5] net: openvswitch: remove the unnecessary check X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" From: Tonghao Zhang Before calling the ovs_meter_cmd_reply_stats, "meter" is checked, so don't check it agin in that function. Cc: Pravin B Shelar Cc: Andy Zhou Signed-off-by: Tonghao Zhang --- net/openvswitch/meter.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/net/openvswitch/meter.c b/net/openvswitch/meter.c index 1b6776f9c109..f552c64ae8df 100644 --- a/net/openvswitch/meter.c +++ b/net/openvswitch/meter.c @@ -229,12 +229,11 @@ static int ovs_meter_cmd_reply_stats(struct sk_buff *reply, u32 meter_id, if (nla_put_u32(reply, OVS_METER_ATTR_ID, meter_id)) goto error; - if (!meter) - return 0; - if (nla_put(reply, OVS_METER_ATTR_STATS, - sizeof(struct ovs_flow_stats), &meter->stats) || - nla_put_u64_64bit(reply, OVS_METER_ATTR_USED, meter->used, + sizeof(struct ovs_flow_stats), &meter->stats)) + goto error; + + if (nla_put_u64_64bit(reply, OVS_METER_ATTR_USED, meter->used, OVS_METER_ATTR_PAD)) goto error; From patchwork Thu Apr 16 10:17:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tonghao Zhang X-Patchwork-Id: 1272694 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.133; helo=hemlock.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=mquaNX+c; dkim-atps=neutral Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 494Kbq5mwMz9sPF for ; Sun, 19 Apr 2020 03:25:27 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 3B29A882A7; Sat, 18 Apr 2020 17:25:26 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id PMphTvA1Qv3s; Sat, 18 Apr 2020 17:25:25 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by hemlock.osuosl.org (Postfix) with ESMTP id 83ABF882B5; Sat, 18 Apr 2020 17:25:25 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 3B186C1D89; Sat, 18 Apr 2020 17:25:25 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 92FA7C089F for ; Sat, 18 Apr 2020 17:25:23 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 78A1220469 for ; Sat, 18 Apr 2020 17:25:23 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id RUjtzHKIqKVi for ; Sat, 18 Apr 2020 17:25:21 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-pj1-f66.google.com (mail-pj1-f66.google.com [209.85.216.66]) by silver.osuosl.org (Postfix) with ESMTPS id 01E99227F7 for ; Sat, 18 Apr 2020 17:25:20 +0000 (UTC) Received: by mail-pj1-f66.google.com with SMTP id ms17so2525871pjb.0 for ; Sat, 18 Apr 2020 10:25:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=bH74zxtX/vcy0zyG68W3c+H7KPCmC8DmyViHStZiUyI=; b=mquaNX+cax7RUE+nYsAkCjJg0m0fEP4YdSWvffS/L5goMkclezk1Froc9KjABWxbVm LLWkBRveofV1yty+sk47EqkcJCmlkiBViXeFBZJB5SHVD2sQFOcxzNdaPXbo+7ohX31v LvZ49E15hQ24DL3l+44cthlKWXVm1r3IHahvZDBSmAX8I4k4d+DusTZagJFZiGJa/UO/ cV/dnJEs2Wm8aZRsRbK9uCUMBPjSloVlzpCDftdna8cPGQSEW7O1Xc3LYbxHK7DK8pcb PWmsZVBhblPyuZa4rrY1FDKWfMCldQg4Y4Af+hTaJQ5NvBG/aIniQXkNr8bCJZ5q5D2l o0dA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=bH74zxtX/vcy0zyG68W3c+H7KPCmC8DmyViHStZiUyI=; b=LVTrE4ib0ic0DiU4S3PGP6A7Pxdj0gtB7cN67d5bAVGCiyPNn1TWqra21mb8osVQ7n Mr5j8s6JgisJyzDfXnVKKc2yeVKKFvWu7ubpYRevxxlYHsMhGyT1INPsgikU37i+2hFU AxyeUWz3qEcSvQYa8U84zYmh9RVU4t/90WDnmHSX7mxflBuAws8KNn8qcUb7yZ3NiAQ7 z3sm1w3Lh8rnq8FQHE1eE++QqgrjRqn91AyNNFrKgFVhoFjBbDDwVy0VM61lfuYrz3KI ADr3J1HHGw+vsu6l6v+ly1EcRbVGEQQ4qOwonkRuaZLoYhm8MxpePH7CpveCd+kiFSXa OPgA== X-Gm-Message-State: AGi0PuaaiNQac6MHoDRD2anP5HxjZml8LAP3p2WmOd2GR2y/5OfNGyCD KfqAsyhhkBYYCCi5FAJqnihL8LmWzQU= X-Google-Smtp-Source: APiQypJimfkLFhVELRhCAqMfnd2DIwLKYjh3RBNKgBDeePTYAcuqkI3It8sOxIH/3aiMqryuWLr5jw== X-Received: by 2002:a17:90a:fc89:: with SMTP id ci9mr4543928pjb.140.1587230720637; Sat, 18 Apr 2020 10:25:20 -0700 (PDT) Received: from local.opencloud.tech.localdomain ([115.171.63.184]) by smtp.gmail.com with ESMTPSA id s44sm9329251pjc.28.2020.04.18.10.25.17 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 Apr 2020 10:25:20 -0700 (PDT) From: xiangxia.m.yue@gmail.com To: pshelar@ovn.org, azhou@ovn.org, blp@ovn.org, u9012063@gmail.com Date: Thu, 16 Apr 2020 18:17:02 +0800 Message-Id: <1587032223-49460-5-git-send-email-xiangxia.m.yue@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1587032223-49460-1-git-send-email-xiangxia.m.yue@gmail.com> References: <1584969039-74113-1-git-send-email-xiangxia.m.yue@gmail.com> <1587032223-49460-1-git-send-email-xiangxia.m.yue@gmail.com> Cc: dev@openvswitch.org, netdev@vger.kernel.org Subject: [ovs-dev] [PATCH net-next v2 4/5] net: openvswitch: make EINVAL return value more obvious X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" From: Tonghao Zhang Cc: Pravin B Shelar Cc: Andy Zhou Signed-off-by: Tonghao Zhang --- net/openvswitch/meter.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/net/openvswitch/meter.c b/net/openvswitch/meter.c index f552c64ae8df..77fe39cf4f18 100644 --- a/net/openvswitch/meter.c +++ b/net/openvswitch/meter.c @@ -390,9 +390,8 @@ static int ovs_meter_cmd_set(struct sk_buff *skb, struct genl_info *info) u32 meter_id; bool failed; - if (!a[OVS_METER_ATTR_ID]) { - return -ENODEV; - } + if (!a[OVS_METER_ATTR_ID]) + return -EINVAL; meter = dp_meter_create(a); if (IS_ERR_OR_NULL(meter)) From patchwork Thu Apr 16 10:17:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tonghao Zhang X-Patchwork-Id: 1272696 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.138; helo=whitealder.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=ciDrcUtb; dkim-atps=neutral Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 494Kc405Yhz9sPF for ; Sun, 19 Apr 2020 03:25:39 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 9502087858; Sat, 18 Apr 2020 17:25:37 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id t0XXnARJ6U9J; Sat, 18 Apr 2020 17:25:33 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by whitealder.osuosl.org (Postfix) with ESMTP id 66E4587880; Sat, 18 Apr 2020 17:25:27 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 483D2C1D91; Sat, 18 Apr 2020 17:25:27 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 74FF6C089F for ; Sat, 18 Apr 2020 17:25:25 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id 5E371868E6 for ; Sat, 18 Apr 2020 17:25:25 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id HPd0fG5DXpcX for ; Sat, 18 Apr 2020 17:25:24 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-pl1-f195.google.com (mail-pl1-f195.google.com [209.85.214.195]) by fraxinus.osuosl.org (Postfix) with ESMTPS id 8EC178691E for ; Sat, 18 Apr 2020 17:25:24 +0000 (UTC) Received: by mail-pl1-f195.google.com with SMTP id f8so2267624plt.2 for ; Sat, 18 Apr 2020 10:25:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=WNcZccmCQBPkTnugJ9tCHONY29qm/KtuqMXhsDw6FZo=; b=ciDrcUtbtR3lIv31N2AKe13hftAZKYBOjPo/FevQIgefXXJjVhdH/I1NmpKDr4FUIq CER+vjyVTi1jZOIuTAR1jgftXHvSFXKNry28tbbH46bqKkGaAPUKqDOE9OFzEX//nS4l pR3s4827PieMEgCqeBj/9g8Iz0lr6ANvpZzCkP/HwZTVlQQOq2SL/1Zd+lALoE0LXg7y 7Z7IfeekJuLwhUzh/JzlXphV4206KUlU6qUVZ0PL7wBOmOtLph2TtbTp8DYUnROy8RGE DqWSTFyjjMsviLJGUdtuEEuLzIfu0x9lvUh9m6HYicWleNeJXH5wUPZPEtYdxsjMICjP Wx8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=WNcZccmCQBPkTnugJ9tCHONY29qm/KtuqMXhsDw6FZo=; b=dinSYslVrAnc03wKFdGh7BSc4q9rStF5na7f7oMaYMifZ1fcSLolVXFZRoIB7KOE9m Wh3iRVK7bw812y3boG7nRoEZ0+h63BErpg+Y5eM1Zzop7JpkvHtz0kR5tExApv4pfYhD 9Yn0Vm9p3P3qvk79t+HkDFw+LUmTAtUUYq9ZBmMOlx5HpVwKL+TsHFQzvO4Sp2R3V34u tXAL9+/UE5cgKEQOEZ076vYhckqhzg2vhkSNTLjPU45P0Nk0NBEEySbif2DpzNPbvO2I VlNLJVxzucCYHNQ+hbB6qRNkyR30PlmFy0O4FDdvI3s85MN3tdpifyXTkOA86ToWY2y+ MAKw== X-Gm-Message-State: AGi0PuZvnMCZSTZFvNonIudD97lOI6CjlI9v/jqHjHouMzutPnfVwXsf wQrpiBHX+PIBoHaeNdWSaMc= X-Google-Smtp-Source: APiQypIhTVD9yTw22L4NrAR3lKHrIBMOtPzkxc+dy1A3+3xUnHClO+8wtMf4opXynpRevT/R1Fg8+A== X-Received: by 2002:a17:90a:2ac7:: with SMTP id i7mr11513109pjg.130.1587230724248; Sat, 18 Apr 2020 10:25:24 -0700 (PDT) Received: from local.opencloud.tech.localdomain ([115.171.63.184]) by smtp.gmail.com with ESMTPSA id s44sm9329251pjc.28.2020.04.18.10.25.20 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 Apr 2020 10:25:23 -0700 (PDT) From: xiangxia.m.yue@gmail.com To: pshelar@ovn.org, azhou@ovn.org, blp@ovn.org, u9012063@gmail.com Date: Thu, 16 Apr 2020 18:17:03 +0800 Message-Id: <1587032223-49460-6-git-send-email-xiangxia.m.yue@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1587032223-49460-1-git-send-email-xiangxia.m.yue@gmail.com> References: <1584969039-74113-1-git-send-email-xiangxia.m.yue@gmail.com> <1587032223-49460-1-git-send-email-xiangxia.m.yue@gmail.com> Cc: dev@openvswitch.org, netdev@vger.kernel.org Subject: [ovs-dev] [PATCH net-next v2 5/5] net: openvswitch: use u64 for meter bucket X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" From: Tonghao Zhang When setting the meter rate to 4+Gbps, there is an overflow, the meters don't work as expected. Cc: Pravin B Shelar Cc: Andy Zhou Signed-off-by: Tonghao Zhang --- net/openvswitch/meter.c | 2 +- net/openvswitch/meter.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/net/openvswitch/meter.c b/net/openvswitch/meter.c index 77fe39cf4f18..51cfe8a52b5a 100644 --- a/net/openvswitch/meter.c +++ b/net/openvswitch/meter.c @@ -364,7 +364,7 @@ static struct dp_meter *dp_meter_create(struct nlattr **a) * * Start with a full bucket. */ - band->bucket = (band->burst_size + band->rate) * 1000; + band->bucket = (band->burst_size + band->rate) * 1000ULL; band_max_delta_t = band->bucket / band->rate; if (band_max_delta_t > meter->max_delta_t) meter->max_delta_t = band_max_delta_t; diff --git a/net/openvswitch/meter.h b/net/openvswitch/meter.h index cdfc6b9dbd42..b1a50d988e59 100644 --- a/net/openvswitch/meter.h +++ b/net/openvswitch/meter.h @@ -25,7 +25,7 @@ struct dp_meter_band { u32 type; u32 rate; u32 burst_size; - u32 bucket; /* 1/1000 packets, or in bits */ + u64 bucket; /* 1/1000 packets, or in bits */ struct ovs_flow_stats stats; };