Message ID | 1420656505-5947-1-git-send-email-zoltan.kiss@linaro.org |
---|---|
State | New |
Headers | show |
On Wed, Jan 7, 2015 at 12:48 PM, Zoltan Kiss <zoltan.kiss@linaro.org> wrote: > This is only compile tested. To avoid warning pollution this fixes up > netdev_odp_class as well, which changes when I upgraded the OVS master > branch. > > Signed-off-by: Zoltan Kiss <zoltan.kiss@linaro.org> > Reviewed-by: Bill Fischofer <bill.fischofer@linaro.org> > --- > diff --git a/lib/netdev-odp.c b/lib/netdev-odp.c > index 96126a1..a38acac 100644 > --- a/lib/netdev-odp.c > +++ b/lib/netdev-odp.c > @@ -45,14 +45,14 @@ > #include "unaligned.h" > #include "timeval.h" > #include "unixctl.h" > -#include "vlog.h" > +#include "openvswitch/vlog.h" > > VLOG_DEFINE_THIS_MODULE(odp); > > -#define SHM_PKT_POOL_SIZE (512*2048) > +#define SHM_PKT_POOL_NUM_BUFS 512 > #define SHM_PKT_POOL_BUF_SIZE 1856 > > -#define SHM_OFPBUF_POOL_SIZE (512*256) > +#define SHM_OFPBUF_NUM_BUFS 512 > #define SHM_OFPBUF_POOL_BUF_SIZE sizeof(struct dpif_packet) > > static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); > @@ -88,13 +88,13 @@ struct netdev_rxq_odp { > /* We need a pool of buffers that hold netdev and rxq structures */ > #define STRUCTS_SIZE MAX(sizeof(struct netdev_odp), \ > sizeof(struct netdev_rxq_odp)) > -#define SHM_STRUCT_POOL_SIZE (512 * (STRUCTS_SIZE)) > +#define SHM_STRUCT_POOL_NUM_BUFS 512 > #define SHM_STRUCT_POOL_BUF_SIZE STRUCTS_SIZE > > void > free_odp_buf(struct ofpbuf *b) > { > - odph_packet_free(b->odp_pkt); > + odp_packet_free(b->odp_pkt); > odp_buffer_free(b->odp_ofpbuf); > } > > @@ -129,26 +129,17 @@ odp_init(int argc, char *argv[]) > static int > odp_class_init(void) > { > - void *pool_base; > - odp_shm_t shm; > + odp_buffer_pool_param_t params; > int result = 0; > > /* create packet pool */ > - shm = odp_shm_reserve("shm_packet_pool", SHM_PKT_POOL_SIZE, > - ODP_CACHE_LINE_SIZE, 0); > - pool_base = odp_shm_addr(shm); > - > - if (odp_unlikely(pool_base == NULL)) { > - VLOG_ERR("Error: ODP packet pool mem alloc failed\n"); > - out_of_memory(); > - return -1; > - } > > - pool = odp_buffer_pool_create("packet_pool", pool_base, > - SHM_PKT_POOL_SIZE, > - SHM_PKT_POOL_BUF_SIZE, > - ODP_CACHE_LINE_SIZE, > - ODP_BUFFER_TYPE_PACKET); > + params.buf_size = SHM_PKT_POOL_BUF_SIZE; > + params.buf_align = ODP_CACHE_LINE_SIZE; > + params.num_bufs = SHM_PKT_POOL_NUM_BUFS; > + params.buf_type = ODP_BUFFER_TYPE_PACKET; > + > + pool = odp_buffer_pool_create("packet_pool", ODP_SHM_NULL, ¶ms); > > if (pool == ODP_BUFFER_POOL_INVALID) { > VLOG_ERR("Error: packet pool create failed.\n"); > @@ -157,21 +148,12 @@ odp_class_init(void) > odp_buffer_pool_print(pool); > > /* create ofpbuf pool */ > - shm = odp_shm_reserve("shm_ofpbuf_pool", SHM_OFPBUF_POOL_SIZE, > - ODP_CACHE_LINE_SIZE, 0); > - pool_base = odp_shm_addr(shm); > - > - if (odp_unlikely(pool_base == NULL)) { > - VLOG_ERR("Error: ODP packet pool mem alloc failed\n"); > - out_of_memory(); > - return -1; > - } > > - ofpbuf_pool = odp_buffer_pool_create("ofpbuf_pool", pool_base, > - SHM_OFPBUF_POOL_SIZE, > - SHM_OFPBUF_POOL_BUF_SIZE, > - ODP_CACHE_LINE_SIZE, > - ODP_BUFFER_TYPE_RAW); > + params.buf_size = SHM_OFPBUF_POOL_BUF_SIZE; > + params.num_bufs = SHM_OFPBUF_POOL_BUF_SIZE; > + params.buf_type = ODP_BUFFER_TYPE_RAW; > + > + ofpbuf_pool = odp_buffer_pool_create("ofpbuf_pool", ODP_SHM_NULL, > ¶ms); > > if (ofpbuf_pool == ODP_BUFFER_POOL_INVALID) { > VLOG_ERR("Error: ofpbuf pool create failed.\n"); > @@ -180,21 +162,11 @@ odp_class_init(void) > odp_buffer_pool_print(ofpbuf_pool); > > /* create pool for structures */ > - shm = odp_shm_reserve("shm_struct_pool", SHM_STRUCT_POOL_SIZE, > - ODP_CACHE_LINE_SIZE, 0); > - pool_base = odp_shm_addr(shm); > - > - if (odp_unlikely(pool_base == NULL)) { > - VLOG_ERR("Error: ODP packet pool mem alloc failed\n"); > - out_of_memory(); > - return -1; > - } > > - struct_pool = odp_buffer_pool_create("struct_pool", pool_base, > - SHM_STRUCT_POOL_SIZE, > - SHM_STRUCT_POOL_BUF_SIZE, > - ODP_CACHE_LINE_SIZE, > - ODP_BUFFER_TYPE_RAW); > + params.buf_size = SHM_STRUCT_POOL_BUF_SIZE; > + params.num_bufs = SHM_STRUCT_POOL_NUM_BUFS; > + > + struct_pool = odp_buffer_pool_create("struct_pool", ODP_SHM_NULL, > ¶ms); > > if (struct_pool == ODP_BUFFER_POOL_INVALID) { > VLOG_ERR("Error: packet pool create failed.\n"); > @@ -229,7 +201,7 @@ netdev_odp_construct(struct netdev *netdev_) > int err = 0; > char *odp_if; > struct netdev_odp *netdev = netdev_odp_cast(netdev_); > - odp_packet_t pkt; > + odp_buffer_pool_info_t info; > > odp_if = netdev_->name + 4; /* Names always start with "odp:" */ > > @@ -247,15 +219,14 @@ netdev_odp_construct(struct netdev *netdev_) > } > > netdev->pkt_pool = pool; > - pkt = odph_packet_alloc(netdev->pkt_pool); > - if (!odph_packet_is_valid(pkt)) { > - out_of_memory(); > + > + err = odp_buffer_pool_info(netdev->pkt_pool, &info); > + if ( err != 0) { > + VLOG_ERR("Error: Couldn't get default packet buffer size\n"); > goto out_err; > } > > - netdev->max_frame_len = odph_packet_buf_size(pkt); > - > - odph_packet_free(pkt); > + netdev->max_frame_len = info.params.buf_size; > > ovs_mutex_init(&netdev->mutex); > > @@ -304,7 +275,7 @@ static int drop_err_pkts(odp_packet_t pkt_tbl[], > unsigned len) > pkt = pkt_tbl[i]; > > if (odp_unlikely(odp_packet_error(pkt))) { > - odph_packet_free(pkt); /* Drop */ > + odp_packet_free(pkt); /* Drop */ > pkt_cnt--; > } else if (odp_unlikely(i != j++)) { > pkt_tbl[j-1] = pkt; > @@ -334,20 +305,18 @@ clone_pkts(struct netdev_odp *dev, struct > dpif_packet **pkts, > dropped++; > continue; > } > - pkt = odph_packet_alloc(dev->pkt_pool); > + pkt = odp_packet_alloc(dev->pkt_pool, size); > > - if (OVS_UNLIKELY(!odph_packet_is_valid(pkt))) { > + if (OVS_UNLIKELY(pkt == ODP_PACKET_INVALID)) { > VLOG_WARN_RL(&rl, "Could not allocate packet"); > dropped += cnt -i; > break; > } > > - odp_packet_init(pkt); > - odp_packet_set_l2_offset(pkt, 0); > - > - memcpy(odp_packet_l2(pkt), ofpbuf_data(&pkts[i]->ofpbuf), size); > - odp_packet_parse(pkt, size, 0); > + odp_packet_l2_offset_set(pkt, 0); > > + odp_packet_push_tail(pkt, size); > + odp_packet_copydata_in(pkt, 0, size, > ofpbuf_data(&pkts[i]->ofpbuf)); > odp_pkts[newcnt] = pkt; > newcnt++; > } > @@ -365,8 +334,8 @@ clone_pkts(struct netdev_odp *dev, struct dpif_packet > **pkts, > } > > static int > -netdev_odp_send(struct netdev *netdev, struct dpif_packet **pkts, int cnt, > - bool may_steal) > +netdev_odp_send(struct netdev *netdev, int qid OVS_UNUSED, > + struct dpif_packet **pkts, int cnt, bool may_steal) > { > struct netdev_odp *dev = netdev_odp_cast(netdev); > odp_packet_t odp_pkts[NETDEV_MAX_RX_BATCH]; > @@ -386,7 +355,7 @@ netdev_odp_send(struct netdev *netdev, struct > dpif_packet **pkts, int cnt, > } else { > for (i = 0; i < cnt; i++) { > odp_pkts[i] = pkts[i]->ofpbuf.odp_pkt; > - odph_packet_free(pkts[i]->ofpbuf.odp_ofpbuf); > + odp_packet_free(pkts[i]->ofpbuf.odp_ofpbuf); > } > pkts_ok = cnt; > } > @@ -396,7 +365,7 @@ netdev_odp_send(struct netdev *netdev, struct > dpif_packet **pkts, int cnt, > ovs_mutex_lock(&dev->mutex); > dev->stats.tx_packets += pkts_ok; > for (i = 0; i < pkts_ok; i++) { > - dev->stats.tx_bytes += odp_packet_get_len(odp_pkts[i]); > + dev->stats.tx_bytes += odp_packet_len(odp_pkts[i]); > } > ovs_mutex_unlock(&dev->mutex); > > @@ -505,18 +474,6 @@ netdev_odp_get_stats(const struct netdev *netdev, > struct netdev_stats *stats) > } > > static int > -netdev_odp_set_stats(struct netdev *netdev, const struct netdev_stats > *stats) > -{ > - struct netdev_odp *dev = netdev_odp_cast(netdev); > - > - ovs_mutex_lock(&dev->mutex); > - dev->stats = *stats; > - ovs_mutex_unlock(&dev->mutex); > - > - return 0; > -} > - > -static int > netdev_odp_get_features(const struct netdev *netdev, > enum netdev_features *current, > enum netdev_features *advertised OVS_UNUSED, > @@ -620,7 +577,7 @@ netdev_odp_rxq_recv(struct netdev_rxq *rxq_, struct > dpif_packet **packets, > size_t rx_bytes = 0; > unsigned long err_cnt = 0; > int i; > - odp_pktio_t pkt_tbl[NETDEV_MAX_RX_BATCH]; > + odp_packet_t pkt_tbl[NETDEV_MAX_RX_BATCH]; > > pkts = odp_pktio_recv(netdev->pktio, pkt_tbl, NETDEV_MAX_RX_BATCH); > if (pkts < 0) { > @@ -649,10 +606,10 @@ netdev_odp_rxq_recv(struct netdev_rxq *rxq_, struct > dpif_packet **packets, > out_of_memory(); > } > packets[i] = (struct dpif_packet*) odp_buffer_addr(buf); > - ofpbuf_init_odp(&packets[i]->ofpbuf, > odph_packet_buf_size(pkt_tbl[i])); > + ofpbuf_init_odp(&packets[i]->ofpbuf, > odp_packet_buf_len(pkt_tbl[i])); > packets[i]->ofpbuf.odp_pkt = pkt_tbl[i]; > packets[i]->ofpbuf.odp_ofpbuf = buf; > - rx_bytes += odp_packet_get_len(pkt_tbl[i]); > + rx_bytes += odp_packet_len(pkt_tbl[i]); > } > > *c = pkts_ok; > @@ -682,6 +639,11 @@ static struct netdev_class netdev_odp_class = { > netdev_odp_get_config, > NULL, /* netdev_odp_set_config */ > NULL, /* get_tunnel_config */ > + NULL, /* build_header */ > + NULL, /* push_header */ > + NULL, /* pop_header */ > + NULL, /* get_numa_id */ > + NULL, /* set_multiq */ > > netdev_odp_send, /* send */ > NULL, /* send_wait */ > @@ -695,7 +657,6 @@ static struct netdev_class netdev_odp_class = { > netdev_odp_get_carrier_resets, > netdev_odp_set_miimon, > netdev_odp_get_stats, > - netdev_odp_set_stats, > netdev_odp_get_features, > NULL, /* set_advertisements */ > > diff --git a/lib/netdev-odp.h b/lib/netdev-odp.h > index 9f521da..6162dd4 100644 > --- a/lib/netdev-odp.h > +++ b/lib/netdev-odp.h > @@ -9,7 +9,7 @@ > #include <odp.h> > #include <odph_eth.h> > #include <odph_ip.h> > -#include <odph_packet.h> > +#include <odp_packet.h> > > /* This function is not exported, we need another way to deal with > creating a packet from an ofpbuf */ > diff --git a/lib/ofpbuf.c b/lib/ofpbuf.c > index d216917..764a799 100644 > --- a/lib/ofpbuf.c > +++ b/lib/ofpbuf.c > @@ -154,7 +154,7 @@ ofpbuf_uninit(struct ofpbuf *b) > #endif > } else if (b->source == OFPBUF_ODP) { > #ifdef ODP_NETDEV > - odph_packet_free(b->odp_pkt); > + odp_packet_free(b->odp_pkt); > odp_buffer_free(b->odp_ofpbuf); > #else > ovs_assert(b->source != OFPBUF_ODP); > diff --git a/lib/ofpbuf.h b/lib/ofpbuf.h > index 1c5166f..47cee29 100644 > --- a/lib/ofpbuf.h > +++ b/lib/ofpbuf.h > @@ -429,7 +429,7 @@ static inline void * ofpbuf_data(const struct ofpbuf > *b) > { > #ifdef ODP_NETDEV > if (b->source == OFPBUF_ODP) > - return odp_packet_l2(b->odp_pkt); > + return odp_packet_l2_ptr(b->odp_pkt, NULL); > #endif > > return b->data_; > @@ -439,8 +439,7 @@ static inline void ofpbuf_set_data(struct ofpbuf *b, > void *d) > { > #ifdef ODP_NETDEV > if (b->source == OFPBUF_ODP) { > - ODP_ERR("ODP: Invalid use of ofpbuf_set_data\n"); > - ovs_abort(0, "Invalid function call\n"); > + ovs_abort(0, "ODP: Invalid use of ofpbuf_set_data\n"); > } > #endif > > @@ -451,8 +450,7 @@ static inline void * ofpbuf_base(const struct ofpbuf > *b) > { > #ifdef ODP_NETDEV > if (b->source == OFPBUF_ODP) { > - ODP_ERR("ODP: Invalid use of ofpbuf_base\n"); > - ovs_abort(0, "Invalid function call\n"); > + ovs_abort(0, "ODP: Invalid use of ofpbuf_base\n"); > } > #endif > > @@ -463,8 +461,7 @@ static inline void ofpbuf_set_base(struct ofpbuf *b, > void *d) > { > #ifdef ODP_NETDEV > if (b->source == OFPBUF_ODP) { > - ODP_ERR("ODP: Invalid use of ofpbuf_set_base\n"); > - ovs_abort(0, "Invalid function call\n"); > + ovs_abort(0, "ODP: Invalid use of ofpbuf_set_base\n\n"); > } > #endif > > @@ -475,7 +472,7 @@ static inline uint32_t ofpbuf_size(const struct ofpbuf > *b) > { > #ifdef ODP_NETDEV > if (b->source == OFPBUF_ODP) > - return odp_packet_get_len(b->odp_pkt); > + return odp_packet_len(b->odp_pkt); > #endif > > return b->size_; > @@ -485,8 +482,7 @@ static inline void ofpbuf_set_size(struct ofpbuf *b, > uint32_t v) > { > #ifdef ODP_NETDEV > if (b->source == OFPBUF_ODP) { > - ODP_ERR("ODP: Invalid use of ofpbuf_set_size\n"); > - ovs_abort(0, "Invalid function call\n"); > + ovs_abort(0, "ODP: Invalid use of ofpbuf_set_size\n"); > } > #endif > > > _______________________________________________ > lng-odp mailing list > lng-odp@lists.linaro.org > http://lists.linaro.org/mailman/listinfo/lng-odp >
diff --git a/lib/netdev-odp.c b/lib/netdev-odp.c index 96126a1..a38acac 100644 --- a/lib/netdev-odp.c +++ b/lib/netdev-odp.c @@ -45,14 +45,14 @@ #include "unaligned.h" #include "timeval.h" #include "unixctl.h" -#include "vlog.h" +#include "openvswitch/vlog.h" VLOG_DEFINE_THIS_MODULE(odp); -#define SHM_PKT_POOL_SIZE (512*2048) +#define SHM_PKT_POOL_NUM_BUFS 512 #define SHM_PKT_POOL_BUF_SIZE 1856 -#define SHM_OFPBUF_POOL_SIZE (512*256) +#define SHM_OFPBUF_NUM_BUFS 512 #define SHM_OFPBUF_POOL_BUF_SIZE sizeof(struct dpif_packet) static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); @@ -88,13 +88,13 @@ struct netdev_rxq_odp { /* We need a pool of buffers that hold netdev and rxq structures */ #define STRUCTS_SIZE MAX(sizeof(struct netdev_odp), \ sizeof(struct netdev_rxq_odp)) -#define SHM_STRUCT_POOL_SIZE (512 * (STRUCTS_SIZE)) +#define SHM_STRUCT_POOL_NUM_BUFS 512 #define SHM_STRUCT_POOL_BUF_SIZE STRUCTS_SIZE void free_odp_buf(struct ofpbuf *b) { - odph_packet_free(b->odp_pkt); + odp_packet_free(b->odp_pkt); odp_buffer_free(b->odp_ofpbuf); } @@ -129,26 +129,17 @@ odp_init(int argc, char *argv[]) static int odp_class_init(void) { - void *pool_base; - odp_shm_t shm; + odp_buffer_pool_param_t params; int result = 0; /* create packet pool */ - shm = odp_shm_reserve("shm_packet_pool", SHM_PKT_POOL_SIZE, - ODP_CACHE_LINE_SIZE, 0); - pool_base = odp_shm_addr(shm); - - if (odp_unlikely(pool_base == NULL)) { - VLOG_ERR("Error: ODP packet pool mem alloc failed\n"); - out_of_memory(); - return -1; - } - pool = odp_buffer_pool_create("packet_pool", pool_base, - SHM_PKT_POOL_SIZE, - SHM_PKT_POOL_BUF_SIZE, - ODP_CACHE_LINE_SIZE, - ODP_BUFFER_TYPE_PACKET); + params.buf_size = SHM_PKT_POOL_BUF_SIZE; + params.buf_align = ODP_CACHE_LINE_SIZE; + params.num_bufs = SHM_PKT_POOL_NUM_BUFS; + params.buf_type = ODP_BUFFER_TYPE_PACKET; + + pool = odp_buffer_pool_create("packet_pool", ODP_SHM_NULL, ¶ms); if (pool == ODP_BUFFER_POOL_INVALID) { VLOG_ERR("Error: packet pool create failed.\n"); @@ -157,21 +148,12 @@ odp_class_init(void) odp_buffer_pool_print(pool); /* create ofpbuf pool */ - shm = odp_shm_reserve("shm_ofpbuf_pool", SHM_OFPBUF_POOL_SIZE, - ODP_CACHE_LINE_SIZE, 0); - pool_base = odp_shm_addr(shm); - - if (odp_unlikely(pool_base == NULL)) { - VLOG_ERR("Error: ODP packet pool mem alloc failed\n"); - out_of_memory(); - return -1; - } - ofpbuf_pool = odp_buffer_pool_create("ofpbuf_pool", pool_base, - SHM_OFPBUF_POOL_SIZE, - SHM_OFPBUF_POOL_BUF_SIZE, - ODP_CACHE_LINE_SIZE, - ODP_BUFFER_TYPE_RAW); + params.buf_size = SHM_OFPBUF_POOL_BUF_SIZE; + params.num_bufs = SHM_OFPBUF_POOL_BUF_SIZE; + params.buf_type = ODP_BUFFER_TYPE_RAW; + + ofpbuf_pool = odp_buffer_pool_create("ofpbuf_pool", ODP_SHM_NULL, ¶ms); if (ofpbuf_pool == ODP_BUFFER_POOL_INVALID) { VLOG_ERR("Error: ofpbuf pool create failed.\n"); @@ -180,21 +162,11 @@ odp_class_init(void) odp_buffer_pool_print(ofpbuf_pool); /* create pool for structures */ - shm = odp_shm_reserve("shm_struct_pool", SHM_STRUCT_POOL_SIZE, - ODP_CACHE_LINE_SIZE, 0); - pool_base = odp_shm_addr(shm); - - if (odp_unlikely(pool_base == NULL)) { - VLOG_ERR("Error: ODP packet pool mem alloc failed\n"); - out_of_memory(); - return -1; - } - struct_pool = odp_buffer_pool_create("struct_pool", pool_base, - SHM_STRUCT_POOL_SIZE, - SHM_STRUCT_POOL_BUF_SIZE, - ODP_CACHE_LINE_SIZE, - ODP_BUFFER_TYPE_RAW); + params.buf_size = SHM_STRUCT_POOL_BUF_SIZE; + params.num_bufs = SHM_STRUCT_POOL_NUM_BUFS; + + struct_pool = odp_buffer_pool_create("struct_pool", ODP_SHM_NULL, ¶ms); if (struct_pool == ODP_BUFFER_POOL_INVALID) { VLOG_ERR("Error: packet pool create failed.\n"); @@ -229,7 +201,7 @@ netdev_odp_construct(struct netdev *netdev_) int err = 0; char *odp_if; struct netdev_odp *netdev = netdev_odp_cast(netdev_); - odp_packet_t pkt; + odp_buffer_pool_info_t info; odp_if = netdev_->name + 4; /* Names always start with "odp:" */ @@ -247,15 +219,14 @@ netdev_odp_construct(struct netdev *netdev_) } netdev->pkt_pool = pool; - pkt = odph_packet_alloc(netdev->pkt_pool); - if (!odph_packet_is_valid(pkt)) { - out_of_memory(); + + err = odp_buffer_pool_info(netdev->pkt_pool, &info); + if ( err != 0) { + VLOG_ERR("Error: Couldn't get default packet buffer size\n"); goto out_err; } - netdev->max_frame_len = odph_packet_buf_size(pkt); - - odph_packet_free(pkt); + netdev->max_frame_len = info.params.buf_size; ovs_mutex_init(&netdev->mutex); @@ -304,7 +275,7 @@ static int drop_err_pkts(odp_packet_t pkt_tbl[], unsigned len) pkt = pkt_tbl[i]; if (odp_unlikely(odp_packet_error(pkt))) { - odph_packet_free(pkt); /* Drop */ + odp_packet_free(pkt); /* Drop */ pkt_cnt--; } else if (odp_unlikely(i != j++)) { pkt_tbl[j-1] = pkt; @@ -334,20 +305,18 @@ clone_pkts(struct netdev_odp *dev, struct dpif_packet **pkts, dropped++; continue; } - pkt = odph_packet_alloc(dev->pkt_pool); + pkt = odp_packet_alloc(dev->pkt_pool, size); - if (OVS_UNLIKELY(!odph_packet_is_valid(pkt))) { + if (OVS_UNLIKELY(pkt == ODP_PACKET_INVALID)) { VLOG_WARN_RL(&rl, "Could not allocate packet"); dropped += cnt -i; break; } - odp_packet_init(pkt); - odp_packet_set_l2_offset(pkt, 0); - - memcpy(odp_packet_l2(pkt), ofpbuf_data(&pkts[i]->ofpbuf), size); - odp_packet_parse(pkt, size, 0); + odp_packet_l2_offset_set(pkt, 0); + odp_packet_push_tail(pkt, size); + odp_packet_copydata_in(pkt, 0, size, ofpbuf_data(&pkts[i]->ofpbuf)); odp_pkts[newcnt] = pkt; newcnt++; } @@ -365,8 +334,8 @@ clone_pkts(struct netdev_odp *dev, struct dpif_packet **pkts, } static int -netdev_odp_send(struct netdev *netdev, struct dpif_packet **pkts, int cnt, - bool may_steal) +netdev_odp_send(struct netdev *netdev, int qid OVS_UNUSED, + struct dpif_packet **pkts, int cnt, bool may_steal) { struct netdev_odp *dev = netdev_odp_cast(netdev); odp_packet_t odp_pkts[NETDEV_MAX_RX_BATCH]; @@ -386,7 +355,7 @@ netdev_odp_send(struct netdev *netdev, struct dpif_packet **pkts, int cnt, } else { for (i = 0; i < cnt; i++) { odp_pkts[i] = pkts[i]->ofpbuf.odp_pkt; - odph_packet_free(pkts[i]->ofpbuf.odp_ofpbuf); + odp_packet_free(pkts[i]->ofpbuf.odp_ofpbuf); } pkts_ok = cnt; } @@ -396,7 +365,7 @@ netdev_odp_send(struct netdev *netdev, struct dpif_packet **pkts, int cnt, ovs_mutex_lock(&dev->mutex); dev->stats.tx_packets += pkts_ok; for (i = 0; i < pkts_ok; i++) { - dev->stats.tx_bytes += odp_packet_get_len(odp_pkts[i]); + dev->stats.tx_bytes += odp_packet_len(odp_pkts[i]); } ovs_mutex_unlock(&dev->mutex); @@ -505,18 +474,6 @@ netdev_odp_get_stats(const struct netdev *netdev, struct netdev_stats *stats) } static int -netdev_odp_set_stats(struct netdev *netdev, const struct netdev_stats *stats) -{ - struct netdev_odp *dev = netdev_odp_cast(netdev); - - ovs_mutex_lock(&dev->mutex); - dev->stats = *stats; - ovs_mutex_unlock(&dev->mutex); - - return 0; -} - -static int netdev_odp_get_features(const struct netdev *netdev, enum netdev_features *current, enum netdev_features *advertised OVS_UNUSED, @@ -620,7 +577,7 @@ netdev_odp_rxq_recv(struct netdev_rxq *rxq_, struct dpif_packet **packets, size_t rx_bytes = 0; unsigned long err_cnt = 0; int i; - odp_pktio_t pkt_tbl[NETDEV_MAX_RX_BATCH]; + odp_packet_t pkt_tbl[NETDEV_MAX_RX_BATCH]; pkts = odp_pktio_recv(netdev->pktio, pkt_tbl, NETDEV_MAX_RX_BATCH); if (pkts < 0) { @@ -649,10 +606,10 @@ netdev_odp_rxq_recv(struct netdev_rxq *rxq_, struct dpif_packet **packets, out_of_memory(); } packets[i] = (struct dpif_packet*) odp_buffer_addr(buf); - ofpbuf_init_odp(&packets[i]->ofpbuf, odph_packet_buf_size(pkt_tbl[i])); + ofpbuf_init_odp(&packets[i]->ofpbuf, odp_packet_buf_len(pkt_tbl[i])); packets[i]->ofpbuf.odp_pkt = pkt_tbl[i]; packets[i]->ofpbuf.odp_ofpbuf = buf; - rx_bytes += odp_packet_get_len(pkt_tbl[i]); + rx_bytes += odp_packet_len(pkt_tbl[i]); } *c = pkts_ok; @@ -682,6 +639,11 @@ static struct netdev_class netdev_odp_class = { netdev_odp_get_config, NULL, /* netdev_odp_set_config */ NULL, /* get_tunnel_config */ + NULL, /* build_header */ + NULL, /* push_header */ + NULL, /* pop_header */ + NULL, /* get_numa_id */ + NULL, /* set_multiq */ netdev_odp_send, /* send */ NULL, /* send_wait */ @@ -695,7 +657,6 @@ static struct netdev_class netdev_odp_class = { netdev_odp_get_carrier_resets, netdev_odp_set_miimon, netdev_odp_get_stats, - netdev_odp_set_stats, netdev_odp_get_features, NULL, /* set_advertisements */ diff --git a/lib/netdev-odp.h b/lib/netdev-odp.h index 9f521da..6162dd4 100644 --- a/lib/netdev-odp.h +++ b/lib/netdev-odp.h @@ -9,7 +9,7 @@ #include <odp.h> #include <odph_eth.h> #include <odph_ip.h> -#include <odph_packet.h> +#include <odp_packet.h> /* This function is not exported, we need another way to deal with creating a packet from an ofpbuf */ diff --git a/lib/ofpbuf.c b/lib/ofpbuf.c index d216917..764a799 100644 --- a/lib/ofpbuf.c +++ b/lib/ofpbuf.c @@ -154,7 +154,7 @@ ofpbuf_uninit(struct ofpbuf *b) #endif } else if (b->source == OFPBUF_ODP) { #ifdef ODP_NETDEV - odph_packet_free(b->odp_pkt); + odp_packet_free(b->odp_pkt); odp_buffer_free(b->odp_ofpbuf); #else ovs_assert(b->source != OFPBUF_ODP); diff --git a/lib/ofpbuf.h b/lib/ofpbuf.h index 1c5166f..47cee29 100644 --- a/lib/ofpbuf.h +++ b/lib/ofpbuf.h @@ -429,7 +429,7 @@ static inline void * ofpbuf_data(const struct ofpbuf *b) { #ifdef ODP_NETDEV if (b->source == OFPBUF_ODP) - return odp_packet_l2(b->odp_pkt); + return odp_packet_l2_ptr(b->odp_pkt, NULL); #endif return b->data_; @@ -439,8 +439,7 @@ static inline void ofpbuf_set_data(struct ofpbuf *b, void *d) { #ifdef ODP_NETDEV if (b->source == OFPBUF_ODP) { - ODP_ERR("ODP: Invalid use of ofpbuf_set_data\n"); - ovs_abort(0, "Invalid function call\n"); + ovs_abort(0, "ODP: Invalid use of ofpbuf_set_data\n"); } #endif @@ -451,8 +450,7 @@ static inline void * ofpbuf_base(const struct ofpbuf *b) { #ifdef ODP_NETDEV if (b->source == OFPBUF_ODP) { - ODP_ERR("ODP: Invalid use of ofpbuf_base\n"); - ovs_abort(0, "Invalid function call\n"); + ovs_abort(0, "ODP: Invalid use of ofpbuf_base\n"); } #endif @@ -463,8 +461,7 @@ static inline void ofpbuf_set_base(struct ofpbuf *b, void *d) { #ifdef ODP_NETDEV if (b->source == OFPBUF_ODP) { - ODP_ERR("ODP: Invalid use of ofpbuf_set_base\n"); - ovs_abort(0, "Invalid function call\n"); + ovs_abort(0, "ODP: Invalid use of ofpbuf_set_base\n\n"); } #endif @@ -475,7 +472,7 @@ static inline uint32_t ofpbuf_size(const struct ofpbuf *b) { #ifdef ODP_NETDEV if (b->source == OFPBUF_ODP) - return odp_packet_get_len(b->odp_pkt); + return odp_packet_len(b->odp_pkt); #endif return b->size_; @@ -485,8 +482,7 @@ static inline void ofpbuf_set_size(struct ofpbuf *b, uint32_t v) { #ifdef ODP_NETDEV if (b->source == OFPBUF_ODP) { - ODP_ERR("ODP: Invalid use of ofpbuf_set_size\n"); - ovs_abort(0, "Invalid function call\n"); + ovs_abort(0, "ODP: Invalid use of ofpbuf_set_size\n"); } #endif
This is only compile tested. To avoid warning pollution this fixes up netdev_odp_class as well, which changes when I upgraded the OVS master branch. Signed-off-by: Zoltan Kiss <zoltan.kiss@linaro.org> ---