On Mon, Jun 17, 2013 at 02:00:07PM -0700, Jeff Squyres wrote: > Keep IBV_MTU_* enums values as they are, but pass MTU values around as > int's. This is an ABI-compatible change; legacy applications will use > the enum values, but newer applications can use an int for values that > do not currently exist in the enum set (e.g., 1500, 9000). > > (if people like the idea of this patch, I will send the corresponding > kernel patch) > > Signed-off-by: Jeff Squyres <jsquy...@cisco.com> > examples/devinfo.c | 11 +++++++++-- > examples/pingpong.c | 12 ------------ > examples/pingpong.h | 1 - > examples/rc_pingpong.c | 8 ++++---- > examples/srq_pingpong.c | 8 ++++---- > examples/uc_pingpong.c | 8 ++++---- > examples/ud_pingpong.c | 2 +- > include/infiniband/verbs.h | 20 +++++++++++++++++--- > man/ibv_modify_qp.3 | 2 +- > man/ibv_query_port.3 | 4 ++-- > man/ibv_query_qp.3 | 2 +- > src/libibverbs.map | 3 +++ > src/verbs.c | 24 ++++++++++++++++++++++++ > 13 files changed, 70 insertions(+), 35 deletions(-) > > diff --git a/examples/devinfo.c b/examples/devinfo.c > index ff078e4..b856c82 100644 > +++ b/examples/devinfo.c > @@ -111,15 +111,22 @@ static const char *atomic_cap_str(enum ibv_atomic_cap > atom_cap) > } > } > > -static const char *mtu_str(enum ibv_mtu max_mtu) > +static const char *mtu_str(int max_mtu)
This is simpler: { static char str[16]; snprintf(str, sizeof(str), "%d", ibv_mtu_to_num(max_mtu)); return str; } You may want to replace 'enum ibv_mtu' with 'ibv_mtu_t' to make it more clear that it is not an integer. > - enum ibv_mtu mtu = IBV_MTU_1024; > + int mtu = 1024; No, you must keep using IBV_MTU_1024 for all cases requesting a 1024 byte MTU, new libraries will accept both, old libraries will only accept IBV_MTU_1024, so we must stick with IBV_MTU_1024 in applications. So: int mtu = num_to_ibv_mtu(1024); > - mtu = pp_mtu_to_enum(strtol(optarg, NULL, 0)); > + mtu = strtol(optarg, NULL, 0); > if (mtu < 0) { > usage(argv[0]); > return 1; Same deal, add 'mtu = num_to_ibv_mtu(mtu);' Same two comments repeated many times. > +/** > + * ibv_num_to_mtu - If an MTU enum value for "num" is available, > + * return it (e.g., 1024 -> IBV_MTU_1024). Otherwise, return num > + * (e.g., 1500 -> 1500). > + */ > +int num_to_ibv_mtu(int num); Probably should be ibv_num_to_mtu() to keep with the naming pattern.. > + > +/** > + * ibv_mtu_to_num - Return the numeric value of a symbolic enum > + * ibv_mtu name (e.g., IBV_MTU_1024 -> 1024). If a non-symbolic enum > + * value is passed, just return the same value (e.g., 1500 -> 1500). > + */ > +int ibv_mtu_to_num(int mtu); These should be static inlines, not externs. There is a desire to not add new symbols to libibverbs. Jason -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html