From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Bhagavatula, Pavan" Subject: Re: [PATCH v8 7/9] test: add event timer adapter auto-test Date: Fri, 30 Mar 2018 15:48:46 +0000 Message-ID: <20180330154755.GA23814@ltp-pvn> References: <1520546046-6973-1-git-send-email-erik.g.carrillo@intel.com> <1522358852-3630-1-git-send-email-erik.g.carrillo@intel.com> <1522358852-3630-8-git-send-email-erik.g.carrillo@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Cc: "dev@dpdk.org" To: Erik Gabriel Carrillo , "Jacob, Jerin" , "nipun.gupta@nxp.com" , "hemant.agrawal@nxp.com" Return-path: Received: from NAM01-BY2-obe.outbound.protection.outlook.com (mail-by2nam01on0044.outbound.protection.outlook.com [104.47.34.44]) by dpdk.org (Postfix) with ESMTP id A246C5F1A for ; Fri, 30 Mar 2018 17:48:49 +0200 (CEST) In-Reply-To: <1522358852-3630-8-git-send-email-erik.g.carrillo@intel.com> Content-Language: en-IN Content-ID: List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi Erik, Few comments below, On Thu, Mar 29, 2018 at 04:27:30PM -0500, Erik Gabriel Carrillo wrote: > Signed-off-by: Erik Gabriel Carrillo > --- > test/test/Makefile | 1 + > test/test/test_event_timer_adapter.c | 1837 ++++++++++++++++++++++++++++= ++++++ > 2 files changed, 1838 insertions(+) > create mode 100644 test/test/test_event_timer_adapter.c > > +/* Test that adapter stops correctly. */ > +static int > +adapter_stop(void) > +{ > + uint32_t evdev_service_id, adapter_service_id; > + struct rte_event_timer_adapter *l_adapter =3D NULL; > + Please use INTERNAL_PORT capability to determine if service core is require= d. > + /* retrieve service ids */ > + TEST_ASSERT_SUCCESS(rte_event_dev_service_id_get(evdev, > + &evdev_service_id), "Failed to get event device " > + "service id"); > + TEST_ASSERT_SUCCESS(rte_event_timer_adapter_service_id_get(timdev, > + &adapter_service_id), "Failed to get event timer " > + "adapter service id"); > + > + /* Test adapter stop */ > + TEST_ASSERT_SUCCESS(rte_event_timer_adapter_stop(timdev), > + "Failed to stop event adapter"); > + > + TEST_ASSERT_FAIL(rte_event_timer_adapter_stop(l_adapter), > + "Erroneously stopped null event adapter"); > + > + TEST_ASSERT_SUCCESS(rte_event_timer_adapter_free(timdev), > + "Failed to free adapter"); > + > + rte_mempool_free(eventdev_test_mempool); > + > + return TEST_SUCCESS; > +} > + > +stat_inc_reset_ev_enq(void) > +{ > + int ret, i, n; > + int num_evtims =3D MAX_TIMERS; > + struct rte_event_timer *evtims[num_evtims]; > + struct rte_event evs[BATCH_SIZE]; > + struct rte_event_timer_adapter_stats stats; > + const struct rte_event_timer init_tim =3D { > + .ev.op =3D RTE_EVENT_OP_NEW, > + .ev.queue_id =3D TEST_QUEUE_ID, > + .ev.sched_type =3D RTE_SCHED_TYPE_ATOMIC, > + .ev.priority =3D RTE_EVENT_DEV_PRIORITY_NORMAL, > + .ev.event_type =3D RTE_EVENT_TYPE_TIMER, > + .state =3D RTE_EVENT_TIMER_NOT_ARMED, > + .timeout_ticks =3D 5, // expire in .5 sec > + }; > + > + ret =3D rte_mempool_get_bulk(eventdev_test_mempool, (void **)evtims, > + num_evtims); > + TEST_ASSERT_EQUAL(ret, 0, "Failed to get array of timer objs: ret =3D %= d", > + ret); > + > + for (i =3D 0; i < num_evtims; i++) { > + *evtims[i] =3D init_tim; > + evtims[i]->ev.event_ptr =3D evtims[i]; > + } > + > + ret =3D rte_event_timer_adapter_stats_get(timdev, &stats); > + TEST_ASSERT_EQUAL(ret, 0, "Failed to get stats"); > + TEST_ASSERT_EQUAL((int)stats.ev_enq_count, 0, "Stats not clear at " > + "startup"); > + > + /* Test with the max value for the adapter */ > + ret =3D rte_event_timer_arm_burst(timdev, evtims, num_evtims); > + TEST_ASSERT_EQUAL(ret, num_evtims, > + "Failed to arm all event timers: attempted =3D %d, " > + "succeeded =3D %d, rte_errno =3D %s", > + num_evtims, ret, rte_strerror(rte_errno)); > + > + rte_delay_ms(1000); > + > +#define MAX_TRIES 1000 Please make MAX_TRIES equivalent to num_evtims, here we are trying to deq 1= 0 events in burst and assume it to succeed but in case event dev doesn't supp= ort burst mode event will be stuck as it will have only 1000 tries instead of 4= 096. > + int sum =3D 0; > + int tries =3D 0; > + bool done =3D false; > + while (!done) { > + sum +=3D rte_event_dequeue_burst(evdev, TEST_PORT_ID, evs, > + RTE_DIM(evs), 10); > + if (sum >=3D num_evtims || ++tries >=3D MAX_TRIES) > + done =3D true; > + > + rte_delay_ms(10); > + } > + > + TEST_ASSERT_EQUAL(sum, num_evtims, "Expected %d timer expiry events, " > + "got %d", num_evtims, sum); > + > +event_timer_arm_max(void) > +{ > + int ret, i, n; > + int num_evtims =3D MAX_TIMERS; > + struct rte_event_timer *evtims[num_evtims]; > + struct rte_event evs[BATCH_SIZE]; > + const struct rte_event_timer init_tim =3D { > + .ev.op =3D RTE_EVENT_OP_NEW, > + .ev.queue_id =3D TEST_QUEUE_ID, > + .ev.sched_type =3D RTE_SCHED_TYPE_ATOMIC, > + .ev.priority =3D RTE_EVENT_DEV_PRIORITY_NORMAL, > + .ev.event_type =3D RTE_EVENT_TYPE_TIMER, > + .state =3D RTE_EVENT_TIMER_NOT_ARMED, > + .timeout_ticks =3D 5, // expire in .5 sec > + }; > + > + ret =3D rte_mempool_get_bulk(eventdev_test_mempool, (void **)evtims, > + num_evtims); > + TEST_ASSERT_EQUAL(ret, 0, "Failed to get array of timer objs: ret =3D %= d", > + ret); > + > + for (i =3D 0; i < num_evtims; i++) { > + *evtims[i] =3D init_tim; > + evtims[i]->ev.event_ptr =3D evtims[i]; > + } > + > + /* Test with the max value for the adapter */ > + ret =3D rte_event_timer_arm_burst(timdev, evtims, num_evtims); > + TEST_ASSERT_EQUAL(ret, num_evtims, > + "Failed to arm all event timers: attempted =3D %d, " > + "succeeded =3D %d, rte_errno =3D %s", > + num_evtims, ret, rte_strerror(rte_errno)); > + > + rte_delay_ms(1000); > + > +#define MAX_TRIES 1000 Same as above. > + int sum =3D 0; > + int tries =3D 0; > + bool done =3D false; > +static int > +adapter_create_max(void) > +{ > + int i; > + uint32_t svc_start_count, svc_end_count; > + struct rte_event_timer_adapter *adapters[ > + RTE_EVENT_TIMER_ADAPTER_NUM_MAX + 1]; > + > + struct rte_event_timer_adapter_conf conf =3D { > + .event_dev_id =3D evdev, > + // timer_adapter_id set in loop > + .clk_src =3D RTE_EVENT_TIMER_ADAPTER_CPU_CLK, > + .timer_tick_ns =3D NSECPERSEC / 10, > + .max_tmo_ns =3D 180 * NSECPERSEC, > + .nb_timers =3D MAX_TIMERS, > + .flags =3D 0, > + }; > + > + svc_start_count =3D rte_service_get_count(); > + > + /* This test expects that there are sufficient service IDs available > + * to be allocated. I.e., RTE_EVENT_TIMER_ADAPTER_NUM_MAX may need to > + * be less than RTE_SERVICE_NUM_MAX if anything else uses a service > + * (the SW event device, for example). > + */ Same as above service use need to be dependent on INTERNAL_PORT capability. Also, in software event dev case this can be a valid test but in case of a = hw event dev RTE_EVENT_TIMER_ADAPTER_NUM_MAX number of event devicesmight not = be binded to dpdk. Either we need to provide a API to check how many event dev= ices are supported or use eventdev_timer_adapter_caps_get_t to get the number. Thoughts? > + for (i =3D 0; i < RTE_EVENT_TIMER_ADAPTER_NUM_MAX; i++) { > + conf.timer_adapter_id =3D i; > + adapters[i] =3D rte_event_timer_adapter_create_ext(&conf, > + test_port_conf_cb, NULL); > + TEST_ASSERT_NOT_NULL(adapters[i], "Failed to create adapter " > + "%d", i); > + } > + Thanks, Pavan.