Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2885972imu; Mon, 17 Dec 2018 09:22:16 -0800 (PST) X-Google-Smtp-Source: AFSGD/VbKnuuN3HLzrRhG+7rxoioIHZS+4UF2sB9wpLHo8Ala6w1riaglK0TR2DktuuTYPzeZI5c X-Received: by 2002:a63:d547:: with SMTP id v7mr12661075pgi.339.1545067336529; Mon, 17 Dec 2018 09:22:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1545067336; cv=none; d=google.com; s=arc-20160816; b=SDePzlNSwHFZW1lY8602L/UqyH6CH0wheOewBFZ2Gr38SGF2AtoioecqB0xhaoa3US dx6i11crL9htJLbcN6XmUoEnAQy83CmPTKq7KfcefXda1QWYlp9RrehXYIYGlfmG2xXZ hnOapTYzG3PMWSK+s//G5KlQrmyGhrTtUBZwivqRCk5Okf4nq4xDmmUlQIEN/dd579DI ZCQslKcWmRFVa7kcRCPqG0yG0KnilB5JCClXBmhc/isJokP85BJFeXwn91R3TxaVUEss QsX4UT8dbzNpwViCmBc+z+xDRgoNX1isDjWyByPGBQDd7FL81tSBqQ6N9vTYgMVeJTrY mtFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=CdZbaGumofDlzZscmjO4/1rMOKWdjFWAqxsY9I7b5SE=; b=lJ2kxmZkZ8S0KPl4ktcCYELetT6agR9My64PEVUKoUAX0hkHn98aypvZEW3wRXOmTr uoPIt1Ysg8NBXeU9UHBOCy2LyBd14BiRl8b63B7wicXoW+dATZgsyJH8L2A6kR/ctTYj lYXbO1xeRVeSfAF9fVk2zqQt9IzJeK3BECs+kg+iP1sEeUqbGmP52L7glB1cz8XTdlnz GVNWPWdI8Y5b9QxV0jg+V4favfMLSb9sLGMKT/fNcz088R+FKEPi9dp0xx0CHy6Jp8Se K+CwneG9fPWb1dys5XV8Yw4dobOxOcJ4YVC7O4GTzvFr+QVfqOx8szPmZLWALgDkKHoG LY+w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="j/lTDE27"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a11si11481724pln.78.2018.12.17.09.22.00; Mon, 17 Dec 2018 09:22:16 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="j/lTDE27"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726415AbeLQNTo (ORCPT + 99 others); Mon, 17 Dec 2018 08:19:44 -0500 Received: from mail-wr1-f65.google.com ([209.85.221.65]:33270 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732425AbeLQNTl (ORCPT ); Mon, 17 Dec 2018 08:19:41 -0500 Received: by mail-wr1-f65.google.com with SMTP id c14so12266968wrr.0 for ; Mon, 17 Dec 2018 05:19:39 -0800 (PST) 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=CdZbaGumofDlzZscmjO4/1rMOKWdjFWAqxsY9I7b5SE=; b=j/lTDE27lH7MxG4lMbX9tzV+iq68peIvXYgGh3qJ3uCOBOedbAVAYxsEC1DyuAIR3u Rd0IZXh5AltOP9wibZwA6iLMh3V8Sba3CU0726CcMsoF7I1zx2w7LYBprxXUvgyTwYN+ aBcZcymzlgsj+wrO268Q67tCbuFoGKVTVy/fnRaYCbt2I5TkcR3r5i3CgCJD/K78ccM0 AZsJq4fz/ANgnWAOrNeAyS7AF8WoB7cBJOYWcVvRskAx6MBFcdmArYSwY2XhPctUka5N FN0nksOHeFCI00KgutFOog0J2WT/bCycAdWNIe8OaEueu4EpXTETRt2J7fdvrGo5VDLN H0Jg== 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=CdZbaGumofDlzZscmjO4/1rMOKWdjFWAqxsY9I7b5SE=; b=oOEkngayeHYb0HOSjGhE+PtbQeKvkfONyxJVw6WAYKPzlG3cRl/pfydC19YwU9awXE lowmvVoPtZl0n3GZc4gDpt36hSIG5sRxKHnKb0JyL8iTp6zT1Xqn8JyenYgcSvt3xctV 87H1yHzqkdUutV7KQxDiowt2et4kCCE1F0/yun9SJoywNFpKdvtO0pL5rBwo06qrJk/d QDhJ1NeuUAKuKZaSpfrw3GmKkw/RqvCBI9s3o5DABxSlQwr04tA3iEb5Gt8Fy8GeZhSt vFX0Yl+GOU0kKptkCpTZTnjBYeRPjbxq13Ycf0mOfO71PprDXnoPC3AwoVCtDQHqvQJ5 JleQ== X-Gm-Message-State: AA+aEWb37ADRPtW7WM/gReWSFrkRRS1GXcMVlBmMO57i8u0veG/QKTYW Oc8SEUA0lIy9UQwlcCpKyw== X-Received: by 2002:adf:f189:: with SMTP id h9mr10660364wro.35.1545052778948; Mon, 17 Dec 2018 05:19:38 -0800 (PST) Received: from kmo-pixel.syslink.intern ([93.240.4.121]) by smtp.gmail.com with ESMTPSA id x20sm20406120wme.6.2018.12.17.05.19.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 17 Dec 2018 05:19:38 -0800 (PST) From: Kent Overstreet To: akpm@linux-foundation.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet , Pravin B Shelar , dev@openvswitch.org, Matthew Wilcox Subject: [PATCH 1/7] openvswitch: convert to kvmalloc Date: Mon, 17 Dec 2018 08:19:23 -0500 Message-Id: <20181217131929.11727-2-kent.overstreet@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20181217131929.11727-1-kent.overstreet@gmail.com> References: <20181217131929.11727-1-kent.overstreet@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org There was no real need for this code to be using flexarrays, it's just implementing a hash table - ideally it would be using rhashtables, but that conversion would be significantly more complicated. Signed-off-by: Kent Overstreet Cc: Pravin B Shelar Cc: dev@openvswitch.org Reviewed-by: Matthew Wilcox --- net/openvswitch/flow.h | 1 - net/openvswitch/flow_netlink.h | 1 - net/openvswitch/flow_table.c | 51 ++++++++-------------------------- net/openvswitch/flow_table.h | 3 +- 4 files changed, 13 insertions(+), 43 deletions(-) diff --git a/net/openvswitch/flow.h b/net/openvswitch/flow.h index c670dd24b8..4f06278166 100644 --- a/net/openvswitch/flow.h +++ b/net/openvswitch/flow.h @@ -30,7 +30,6 @@ #include #include #include -#include #include #include #include diff --git a/net/openvswitch/flow_netlink.h b/net/openvswitch/flow_netlink.h index 6657606b2b..66f9553758 100644 --- a/net/openvswitch/flow_netlink.h +++ b/net/openvswitch/flow_netlink.h @@ -30,7 +30,6 @@ #include #include #include -#include #include #include diff --git a/net/openvswitch/flow_table.c b/net/openvswitch/flow_table.c index 80ea2a7185..cfb0098c9a 100644 --- a/net/openvswitch/flow_table.c +++ b/net/openvswitch/flow_table.c @@ -111,29 +111,6 @@ int ovs_flow_tbl_count(const struct flow_table *table) return table->count; } -static struct flex_array *alloc_buckets(unsigned int n_buckets) -{ - struct flex_array *buckets; - int i, err; - - buckets = flex_array_alloc(sizeof(struct hlist_head), - n_buckets, GFP_KERNEL); - if (!buckets) - return NULL; - - err = flex_array_prealloc(buckets, 0, n_buckets, GFP_KERNEL); - if (err) { - flex_array_free(buckets); - return NULL; - } - - for (i = 0; i < n_buckets; i++) - INIT_HLIST_HEAD((struct hlist_head *) - flex_array_get(buckets, i)); - - return buckets; -} - static void flow_free(struct sw_flow *flow) { int cpu; @@ -168,31 +145,30 @@ void ovs_flow_free(struct sw_flow *flow, bool deferred) flow_free(flow); } -static void free_buckets(struct flex_array *buckets) -{ - flex_array_free(buckets); -} - - static void __table_instance_destroy(struct table_instance *ti) { - free_buckets(ti->buckets); + kvfree(ti->buckets); kfree(ti); } static struct table_instance *table_instance_alloc(int new_size) { struct table_instance *ti = kmalloc(sizeof(*ti), GFP_KERNEL); + int i; if (!ti) return NULL; - ti->buckets = alloc_buckets(new_size); - + ti->buckets = kvmalloc_array(new_size, sizeof(struct hlist_head), + GFP_KERNEL); if (!ti->buckets) { kfree(ti); return NULL; } + + for (i = 0; i < new_size; i++) + INIT_HLIST_HEAD(&ti->buckets[i]); + ti->n_buckets = new_size; ti->node_ver = 0; ti->keep_flows = false; @@ -249,7 +225,7 @@ static void table_instance_destroy(struct table_instance *ti, for (i = 0; i < ti->n_buckets; i++) { struct sw_flow *flow; - struct hlist_head *head = flex_array_get(ti->buckets, i); + struct hlist_head *head = &ti->buckets[i]; struct hlist_node *n; int ver = ti->node_ver; int ufid_ver = ufid_ti->node_ver; @@ -294,7 +270,7 @@ struct sw_flow *ovs_flow_tbl_dump_next(struct table_instance *ti, ver = ti->node_ver; while (*bucket < ti->n_buckets) { i = 0; - head = flex_array_get(ti->buckets, *bucket); + head = &ti->buckets[*bucket]; hlist_for_each_entry_rcu(flow, head, flow_table.node[ver]) { if (i < *last) { i++; @@ -313,8 +289,7 @@ struct sw_flow *ovs_flow_tbl_dump_next(struct table_instance *ti, static struct hlist_head *find_bucket(struct table_instance *ti, u32 hash) { hash = jhash_1word(hash, ti->hash_seed); - return flex_array_get(ti->buckets, - (hash & (ti->n_buckets - 1))); + return &ti->buckets[hash & (ti->n_buckets - 1)]; } static void table_instance_insert(struct table_instance *ti, @@ -347,9 +322,7 @@ static void flow_table_copy_flows(struct table_instance *old, /* Insert in new table. */ for (i = 0; i < old->n_buckets; i++) { struct sw_flow *flow; - struct hlist_head *head; - - head = flex_array_get(old->buckets, i); + struct hlist_head *head = &old->buckets[i]; if (ufid) hlist_for_each_entry(flow, head, diff --git a/net/openvswitch/flow_table.h b/net/openvswitch/flow_table.h index 2dd9900f53..de5ec6cf51 100644 --- a/net/openvswitch/flow_table.h +++ b/net/openvswitch/flow_table.h @@ -29,7 +29,6 @@ #include #include #include -#include #include #include @@ -37,7 +36,7 @@ #include "flow.h" struct table_instance { - struct flex_array *buckets; + struct hlist_head *buckets; unsigned int n_buckets; struct rcu_head rcu; int node_ver; -- 2.20.1