[ovs-dev] [ext-244 1/4] meta-flow: Simplify handling of a variable number of registers.
Jarno Rajahalme
jrajahalme at nicira.com
Sat Jul 26 15:20:27 UTC 2014
Acked-by: Jarno Rajahalme <jrajahalme at nicira.com>
On Jul 25, 2014, at 10:25 PM, Ben Pfaff <blp at nicira.com> wrote:
> At the time that Open vSwitch implemented registers, there was a high cost
> to adding additional fields, so I wrote the code so that the number of
> registers could be reduced at compile time. Now, fields are cheaper
> (though not free) and in the meantime I have never heard of anyone reducing
> the number of registers. Since I intend to add more code that would
> require awkward "#if"s like this, I think that this is a good time to
> simplify it by requiring FLOW_N_REGS to be fixed. This commit does that.
>
> Signed-off-by: Ben Pfaff <blp at nicira.com>
> ---
> lib/meta-flow.c | 21 +++------------------
> lib/meta-flow.h | 50 +++++++-------------------------------------------
> 2 files changed, 10 insertions(+), 61 deletions(-)
>
> diff --git a/lib/meta-flow.c b/lib/meta-flow.c
> index 44fc2a9..e980a2a 100644
> --- a/lib/meta-flow.c
> +++ b/lib/meta-flow.c
> @@ -223,32 +223,17 @@ const struct mf_field mf_fields[MFF_N_IDS] = {
> OFPUTIL_P_NXM_OXM_ANY, \
> -1, \
> }
> -#if FLOW_N_REGS > 0
> +#if FLOW_N_REGS == 8
> REGISTER(0),
> -#endif
> -#if FLOW_N_REGS > 1
> REGISTER(1),
> -#endif
> -#if FLOW_N_REGS > 2
> REGISTER(2),
> -#endif
> -#if FLOW_N_REGS > 3
> REGISTER(3),
> -#endif
> -#if FLOW_N_REGS > 4
> REGISTER(4),
> -#endif
> -#if FLOW_N_REGS > 5
> REGISTER(5),
> -#endif
> -#if FLOW_N_REGS > 6
> REGISTER(6),
> -#endif
> -#if FLOW_N_REGS > 7
> REGISTER(7),
> -#endif
> -#if FLOW_N_REGS > 8
> -#error
> +#else
> +#error "Need to update mf_fields[] to match FLOW_N_REGS"
> #endif
>
> /* ## -- ## */
> diff --git a/lib/meta-flow.h b/lib/meta-flow.h
> index 7a4b8dc..3208137 100644
> --- a/lib/meta-flow.h
> +++ b/lib/meta-flow.h
> @@ -1,5 +1,5 @@
> /*
> - * Copyright (c) 2011, 2012, 2013 Nicira, Inc.
> + * Copyright (c) 2011, 2012, 2013, 2014 Nicira, Inc.
> *
> * Licensed under the Apache License, Version 2.0 (the "License");
> * you may not use this file except in compliance with the License.
> @@ -47,29 +47,17 @@ enum OVS_PACKED_ENUM mf_field_id {
> MFF_SKB_PRIORITY, /* be32 */
> MFF_PKT_MARK, /* be32 */
>
> -#if FLOW_N_REGS > 0
> +#if FLOW_N_REGS == 8
> MFF_REG0, /* be32 */
> -#endif
> -#if FLOW_N_REGS > 1
> MFF_REG1, /* be32 */
> -#endif
> -#if FLOW_N_REGS > 2
> MFF_REG2, /* be32 */
> -#endif
> -#if FLOW_N_REGS > 3
> MFF_REG3, /* be32 */
> -#endif
> -#if FLOW_N_REGS > 4
> MFF_REG4, /* be32 */
> -#endif
> -#if FLOW_N_REGS > 5
> MFF_REG5, /* be32 */
> -#endif
> -#if FLOW_N_REGS > 6
> MFF_REG6, /* be32 */
> -#endif
> -#if FLOW_N_REGS > 7
> MFF_REG7, /* be32 */
> +#else
> +#error "Need to update MFF_REG* to match FLOW_N_REGS"
> #endif
>
> /* L2. */
> @@ -148,36 +136,12 @@ enum OVS_PACKED_ENUM mf_field_id {
>
> /* Use this macro as CASE_MFF_REGS: in a switch statement to choose all of the
> * MFF_REGx cases. */
> -#if FLOW_N_REGS == 1
> -# define CASE_MFF_REGS \
> - case MFF_REG0
> -#elif FLOW_N_REGS == 2
> -# define CASE_MFF_REGS \
> - case MFF_REG0: case MFF_REG1
> -#elif FLOW_N_REGS == 3
> -# define CASE_MFF_REGS \
> - case MFF_REG0: case MFF_REG1: case MFF_REG2
> -#elif FLOW_N_REGS == 4
> -# define CASE_MFF_REGS \
> - case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3
> -#elif FLOW_N_REGS == 5
> -# define CASE_MFF_REGS \
> - case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3: \
> - case MFF_REG4
> -#elif FLOW_N_REGS == 6
> -# define CASE_MFF_REGS \
> - case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3: \
> - case MFF_REG4: case MFF_REG5
> -#elif FLOW_N_REGS == 7
> -# define CASE_MFF_REGS \
> - case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3: \
> - case MFF_REG4: case MFF_REG5: case MFF_REG6
> -#elif FLOW_N_REGS == 8
> -# define CASE_MFF_REGS \
> +#if FLOW_N_REGS == 8
> +#define CASE_MFF_REGS \
> case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3: \
> case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7
> #else
> -# error
> +#error "Need to update CASE_MFF_REGS to match FLOW_N_REGS"
> #endif
>
> /* Prerequisites for matching a field.
> --
> 1.9.1
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
More information about the dev
mailing list