2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-30 22:05:19 +00:00

netdev-linux: Mark more static data as "const".

This makes this code more obviously thread-safe.

Signed-off-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
Ben Pfaff
2013-04-29 14:34:48 -07:00
parent e37726e467
commit 559eb2308b

View File

@@ -139,6 +139,8 @@ struct tc {
* Written only by TC implementation. */
};
#define TC_INITIALIZER(TC, OPS) { OPS, HMAP_INITIALIZER(&(TC)->queues) }
/* One traffic control queue.
*
* Each TC implementation subclasses this with whatever additional data it
@@ -311,7 +313,7 @@ static const struct tc_ops tc_ops_hfsc;
static const struct tc_ops tc_ops_default;
static const struct tc_ops tc_ops_other;
static const struct tc_ops *tcs[] = {
static const struct tc_ops *const tcs[] = {
&tc_ops_htb, /* Hierarchy token bucket (see tc-htb(8)). */
&tc_ops_hfsc, /* Hierarchical fair service curve. */
&tc_ops_default, /* Default qdisc (see tc-pfifo_fast(8)). */
@@ -1851,7 +1853,7 @@ static int
netdev_linux_get_qos_types(const struct netdev *netdev OVS_UNUSED,
struct sset *types)
{
const struct tc_ops **opsp;
const struct tc_ops *const *opsp;
for (opsp = tcs; *opsp != NULL; opsp++) {
const struct tc_ops *ops = *opsp;
@@ -1865,7 +1867,7 @@ netdev_linux_get_qos_types(const struct netdev *netdev OVS_UNUSED,
static const struct tc_ops *
tc_lookup_ovs_name(const char *name)
{
const struct tc_ops **opsp;
const struct tc_ops *const *opsp;
for (opsp = tcs; *opsp != NULL; opsp++) {
const struct tc_ops *ops = *opsp;
@@ -1879,7 +1881,7 @@ tc_lookup_ovs_name(const char *name)
static const struct tc_ops *
tc_lookup_linux_name(const char *name)
{
const struct tc_ops **opsp;
const struct tc_ops *const *opsp;
for (opsp = tcs; *opsp != NULL; opsp++) {
const struct tc_ops *ops = *opsp;
@@ -3559,13 +3561,11 @@ default_install__(struct netdev *netdev)
{
struct netdev_dev_linux *netdev_dev =
netdev_dev_linux_cast(netdev_get_dev(netdev));
static struct tc *tc;
static const struct tc tc = TC_INITIALIZER(&tc, &tc_ops_default);
if (!tc) {
tc = xmalloc(sizeof *tc);
tc_init(tc, &tc_ops_default);
}
netdev_dev->tc = tc;
/* Nothing but a tc class implementation is allowed to write to a tc. This
* class never does that, so we can legitimately use a const tc object. */
netdev_dev->tc = CONST_CAST(struct tc *, &tc);
}
static int
@@ -3608,13 +3608,11 @@ other_tc_load(struct netdev *netdev, struct ofpbuf *nlmsg OVS_UNUSED)
{
struct netdev_dev_linux *netdev_dev =
netdev_dev_linux_cast(netdev_get_dev(netdev));
static struct tc *tc;
static const struct tc tc = TC_INITIALIZER(&tc, &tc_ops_other);
if (!tc) {
tc = xmalloc(sizeof *tc);
tc_init(tc, &tc_ops_other);
}
netdev_dev->tc = tc;
/* Nothing but a tc class implementation is allowed to write to a tc. This
* class never does that, so we can legitimately use a const tc object. */
netdev_dev->tc = CONST_CAST(struct tc *, &tc);
return 0;
}