X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fevent%2Fdlb%2Fdlb.c;h=8b26d1d2d2df3fb893631fe73f49a691b83d9389;hb=34ede45188c318e451ef98183814cc4555208f46;hp=afef56cdcbbf7bf21d2f5c2a217312e9abc0863b;hpb=d1112958f4f51b3cf8fd57adc2e5915859fe6d25;p=dpdk.git diff --git a/drivers/event/dlb/dlb.c b/drivers/event/dlb/dlb.c index afef56cdcb..8b26d1d2d2 100644 --- a/drivers/event/dlb/dlb.c +++ b/drivers/event/dlb/dlb.c @@ -31,7 +31,7 @@ #include #include -#include +#include #include "dlb_priv.h" #include "dlb_iface.h" @@ -159,6 +159,9 @@ dlb_free_qe_mem(struct dlb_port *qm_port) rte_free(qm_port->consume_qe); qm_port->consume_qe = NULL; + + rte_memzone_free(dlb_port[qm_port->id][PORT_TYPE(qm_port)].mz); + dlb_port[qm_port->id][PORT_TYPE(qm_port)].mz = NULL; } static int @@ -997,7 +1000,6 @@ dlb_hw_create_ldb_port(struct dlb_eventdev *dlb, /* The credit window is one high water mark of QEs */ qm_port->dir_pushcount_at_credit_expiry = 0; qm_port->cached_dir_credits = cfg.dir_credit_high_watermark; - qm_port->cq_depth = cfg.cq_depth; /* CQs with depth < 8 use an 8-entry queue, but withhold credits so * the effective depth is smaller. */ @@ -1845,7 +1847,7 @@ dlb_hw_create_dir_queue(struct dlb_eventdev *dlb, int32_t qm_port_id) { struct dlb_hw_dev *handle = &dlb->qm_instance; struct dlb_create_dir_queue_args cfg; - struct dlb_cmd_response response; + struct dlb_cmd_response response = {0}; int32_t ret; cfg.response = (uintptr_t)&response; @@ -3159,6 +3161,7 @@ dlb_dequeue_wait(struct dlb_eventdev *dlb, /* Interrupts not supported by PF PMD */ return 1; } else if (dlb->umwait_allowed) { + struct rte_power_monitor_cond pmc; volatile struct dlb_dequeue_qe *cq_base; union { uint64_t raw_qe[2]; @@ -3179,9 +3182,12 @@ dlb_dequeue_wait(struct dlb_eventdev *dlb, else expected_value = 0; - rte_power_monitor(monitor_addr, expected_value, - qe_mask.raw_qe[1], timeout + start_ticks, - sizeof(uint64_t)); + pmc.addr = monitor_addr; + pmc.val = expected_value; + pmc.mask = qe_mask.raw_qe[1]; + pmc.size = sizeof(uint64_t); + + rte_power_monitor(&pmc, timeout + start_ticks); DLB_INC_STAT(ev_port->stats.traffic.rx_umonitor_umwait, 1); } else { @@ -3567,7 +3573,7 @@ dlb_get_ldb_queue_depth(struct dlb_eventdev *dlb, { struct dlb_hw_dev *handle = &dlb->qm_instance; struct dlb_get_ldb_queue_depth_args cfg; - struct dlb_cmd_response response; + struct dlb_cmd_response response = {0}; int ret; cfg.queue_id = queue->qm_queue.id; @@ -3589,7 +3595,7 @@ dlb_get_dir_queue_depth(struct dlb_eventdev *dlb, { struct dlb_hw_dev *handle = &dlb->qm_instance; struct dlb_get_dir_queue_depth_args cfg; - struct dlb_cmd_response response; + struct dlb_cmd_response response = {0}; int ret; cfg.queue_id = queue->qm_queue.id; @@ -3804,6 +3810,40 @@ dlb_eventdev_close(struct rte_eventdev *dev) return 0; } +static void +dlb_eventdev_port_release(void *port) +{ + struct dlb_eventdev_port *ev_port = port; + + if (ev_port) { + struct dlb_port *qm_port = &ev_port->qm_port; + + if (qm_port->config_state == DLB_CONFIGURED) + dlb_free_qe_mem(qm_port); + } +} + +static void +dlb_eventdev_queue_release(struct rte_eventdev *dev, uint8_t id) +{ + RTE_SET_USED(dev); + RTE_SET_USED(id); + + /* This function intentionally left blank. */ +} + +static int +dlb_eventdev_timeout_ticks(struct rte_eventdev *dev, uint64_t ns, + uint64_t *timeout_ticks) +{ + RTE_SET_USED(dev); + uint64_t cycles_per_ns = rte_get_timer_hz() / 1E9; + + *timeout_ticks = ns * cycles_per_ns; + + return 0; +} + void dlb_entry_points_init(struct rte_eventdev *dev) { @@ -3818,11 +3858,14 @@ dlb_entry_points_init(struct rte_eventdev *dev) .queue_def_conf = dlb_eventdev_queue_default_conf_get, .port_def_conf = dlb_eventdev_port_default_conf_get, .queue_setup = dlb_eventdev_queue_setup, + .queue_release = dlb_eventdev_queue_release, .port_setup = dlb_eventdev_port_setup, + .port_release = dlb_eventdev_port_release, .port_link = dlb_eventdev_port_link, .port_unlink = dlb_eventdev_port_unlink, .port_unlinks_in_progress = dlb_eventdev_port_unlinks_in_progress, + .timeout_ticks = dlb_eventdev_timeout_ticks, .dump = dlb_eventdev_dump, .xstats_get = dlb_eventdev_xstats_get, .xstats_get_names = dlb_eventdev_xstats_get_names,