diff mbox

validation: pktio: do not destroy pool

Message ID 1432114282-3568-1-git-send-email-maxim.uvarov@linaro.org
State Accepted
Commit c0bdbfb0e1a40f901d1cb43ba9638ccc46cc48bb
Headers show

Commit Message

Maxim Uvarov May 20, 2015, 9:31 a.m. UTC
Some platforms like DPDK and Cavium bare metal can not
dynamically destroy and create pool with the same name.
Keep pool destroy only in test suite termination to
make all other  pktio tests passed.

Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
---
 test/validation/odp_pktio.c | 66 ++++++++++++++++++++++++++-------------------
 1 file changed, 39 insertions(+), 27 deletions(-)

Comments

Maxim Uvarov May 21, 2015, 4:44 p.m. UTC | #1
Hello Stuart,

please review that patch.

Thank you,
Maxim.

On 05/20/2015 12:31, Maxim Uvarov wrote:
> Some platforms like DPDK and Cavium bare metal can not
> dynamically destroy and create pool with the same name.
> Keep pool destroy only in test suite termination to
> make all other  pktio tests passed.
>
> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
> ---
>   test/validation/odp_pktio.c | 66 ++++++++++++++++++++++++++-------------------
>   1 file changed, 39 insertions(+), 27 deletions(-)
>
> diff --git a/test/validation/odp_pktio.c b/test/validation/odp_pktio.c
> index d4bf7bf..7c1a666 100644
> --- a/test/validation/odp_pktio.c
> +++ b/test/validation/odp_pktio.c
> @@ -56,6 +56,8 @@ odp_pool_t default_pkt_pool = ODP_POOL_INVALID;
>   /** sequence number of IP packets */
>   odp_atomic_u32_t ip_seq;
>   
> +odp_pool_t pool[MAX_NUM_IFACES] = {ODP_POOL_INVALID, ODP_POOL_INVALID};
> +
>   static void pktio_pkt_set_macs(odp_packet_t pkt,
>   			       pktio_info_t *src, pktio_info_t *dst)
>   {
> @@ -219,29 +221,11 @@ static int default_pool_create(void)
>   	return 0;
>   }
>   
> -static odp_pktio_t create_pktio(const char *iface)
> +static odp_pktio_t create_pktio(const char *iface, int num)
>   {
> -	odp_pool_t pool;
>   	odp_pktio_t pktio;
> -	char pool_name[ODP_POOL_NAME_LEN];
> -	odp_pool_param_t params;
>   
> -	memset(&params, 0, sizeof(params));
> -	params.pkt.seg_len = PKT_BUF_SIZE;
> -	params.pkt.len     = PKT_BUF_SIZE;
> -	params.pkt.num     = PKT_BUF_NUM;
> -	params.type        = ODP_POOL_PACKET;
> -
> -	snprintf(pool_name, sizeof(pool_name), "pkt_pool_%s", iface);
> -
> -	pool = odp_pool_lookup(pool_name);
> -	if (pool != ODP_POOL_INVALID)
> -		CU_ASSERT(odp_pool_destroy(pool) == 0);
> -
> -	pool = odp_pool_create(pool_name, ODP_SHM_NULL, &params);
> -	CU_ASSERT(pool != ODP_POOL_INVALID);
> -
> -	pktio = odp_pktio_open(iface, pool);
> +	pktio = odp_pktio_open(iface, pool[num]);
>   	if (pktio == ODP_PKTIO_INVALID)
>   		pktio = odp_pktio_lookup(iface);
>   	CU_ASSERT(pktio != ODP_PKTIO_INVALID);
> @@ -431,7 +415,7 @@ static void pktio_test_txrx(odp_queue_type_t q_type, int num_pkts)
>   		io = &pktios[i];
>   
>   		io->name = iface_name[i];
> -		io->id   = create_pktio(iface_name[i]);
> +		io->id   = create_pktio(iface_name[i], i);
>   		if (io->id == ODP_PKTIO_INVALID) {
>   			CU_FAIL("failed to open iface");
>   			return;
> @@ -487,7 +471,7 @@ static void test_odp_pktio_mtu(void)
>   {
>   	int ret;
>   	int mtu;
> -	odp_pktio_t pktio = create_pktio(iface_name[0]);
> +	odp_pktio_t pktio = create_pktio(iface_name[0], 0);
>   
>   	mtu = odp_pktio_mtu(pktio);
>   	CU_ASSERT(mtu > 0);
> @@ -503,7 +487,7 @@ static void test_odp_pktio_mtu(void)
>   static void test_odp_pktio_promisc(void)
>   {
>   	int ret;
> -	odp_pktio_t pktio = create_pktio(iface_name[0]);
> +	odp_pktio_t pktio = create_pktio(iface_name[0], 0);
>   
>   	ret = odp_pktio_promisc_mode_set(pktio, 1);
>   	CU_ASSERT(0 == ret);
> @@ -530,7 +514,7 @@ static void test_odp_pktio_mac(void)
>   	unsigned char mac_addr[ODPH_ETHADDR_LEN];
>   	int mac_len;
>   	int ret;
> -	odp_pktio_t pktio = create_pktio(iface_name[0]);
> +	odp_pktio_t pktio = create_pktio(iface_name[0], 0);
>   
>   	printf("testing mac for %s\n", iface_name[0]);
>   
> @@ -553,7 +537,7 @@ static void test_odp_pktio_mac(void)
>   
>   static void test_odp_pktio_inq_remdef(void)
>   {
> -	odp_pktio_t pktio = create_pktio(iface_name[0]);
> +	odp_pktio_t pktio = create_pktio(iface_name[0], 0);
>   	odp_queue_t inq;
>   	odp_event_t ev;
>   	int i;
> @@ -582,7 +566,7 @@ static void test_odp_pktio_open(void)
>   
>   	/* test the sequence open->close->open->close() */
>   	for (i = 0; i < 2; ++i) {
> -		pktio = create_pktio(iface_name[0]);
> +		pktio = create_pktio(iface_name[0], 0);
>   		CU_ASSERT(pktio != ODP_PKTIO_INVALID);
>   		CU_ASSERT(odp_pktio_close(pktio) == 0);
>   	}
> @@ -613,7 +597,7 @@ static void test_odp_pktio_inq(void)
>   {
>   	odp_pktio_t pktio;
>   
> -	pktio = create_pktio(iface_name[0]);
> +	pktio = create_pktio(iface_name[0], 0);
>   	CU_ASSERT(pktio != ODP_PKTIO_INVALID);
>   
>   	CU_ASSERT(create_inq(pktio, ODP_QUEUE_TYPE_POLL) == 0);
> @@ -621,12 +605,35 @@ static void test_odp_pktio_inq(void)
>   	CU_ASSERT(odp_pktio_close(pktio) == 0);
>   }
>   
> +static int create_pool(const char *iface, int num)
> +{
> +	char pool_name[ODP_POOL_NAME_LEN];
> +	odp_pool_param_t params;
> +
> +	memset(&params, 0, sizeof(params));
> +	params.pkt.seg_len = PKT_BUF_SIZE;
> +	params.pkt.len     = PKT_BUF_SIZE;
> +	params.pkt.num     = PKT_BUF_NUM;
> +	params.type        = ODP_POOL_PACKET;
> +
> +	snprintf(pool_name, sizeof(pool_name), "pkt_pool_%s", iface);
> +
> +	pool[num] = odp_pool_create(pool_name, ODP_SHM_NULL, &params);
> +	if (ODP_POOL_INVALID == pool[num]) {
> +		CU_FAIL("unable to create pool");
> +		return -1;
> +	}
> +
> +	return 0;
> +}
> +
>   static int init_pktio_suite(void)
>   {
>   	odp_atomic_init_u32(&ip_seq, 0);
>   	iface_name[0] = getenv("ODP_PKTIO_IF0");
>   	iface_name[1] = getenv("ODP_PKTIO_IF1");
>   	num_ifaces = 1;
> +	int i;
>   
>   	if (!iface_name[0]) {
>   		printf("No interfaces specified, using default \"loop\".\n");
> @@ -639,6 +646,11 @@ static int init_pktio_suite(void)
>   		       iface_name[0], iface_name[1]);
>   	}
>   
> +	for (i = 0; i < num_ifaces; i++) {
> +		if (create_pool(iface_name[i], i) != 0)
> +			return -1;
> +	}
> +
>   	if (default_pool_create() != 0) {
>   		fprintf(stderr, "error: failed to create default pool\n");
>   		return -1;
Stuart Haslam June 2, 2015, 11:10 a.m. UTC | #2
On Wed, May 20, 2015 at 12:31:22PM +0300, Maxim Uvarov wrote:
> Some platforms like DPDK and Cavium bare metal can not
> dynamically destroy and create pool with the same name.

If this is expected behaviour then it should be mentioned in the API
documentation as it's currently not. Presumably these implementations
don't actually destroy the pool so it's not just a case of using a
different name, you leak a resource. Should it be documented that
odp_pool_destroy() is only to be used when terminating the application?

> Keep pool destroy only in test suite termination to
> make all other  pktio tests passed.
> 
> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>

Otherwise the change is fine, we previously recreated pools with
different buffer sizes but that was factored out a while ago so it does
now make more sense to create the pools only once.

Reviewed-by: Stuart Haslam <stuart.haslam@linaro.org>

> ---
>  test/validation/odp_pktio.c | 66 ++++++++++++++++++++++++++-------------------
>  1 file changed, 39 insertions(+), 27 deletions(-)
> 
> diff --git a/test/validation/odp_pktio.c b/test/validation/odp_pktio.c
> index d4bf7bf..7c1a666 100644
> --- a/test/validation/odp_pktio.c
> +++ b/test/validation/odp_pktio.c
> @@ -56,6 +56,8 @@ odp_pool_t default_pkt_pool = ODP_POOL_INVALID;
>  /** sequence number of IP packets */
>  odp_atomic_u32_t ip_seq;
>  
> +odp_pool_t pool[MAX_NUM_IFACES] = {ODP_POOL_INVALID, ODP_POOL_INVALID};
> +
>  static void pktio_pkt_set_macs(odp_packet_t pkt,
>  			       pktio_info_t *src, pktio_info_t *dst)
>  {
> @@ -219,29 +221,11 @@ static int default_pool_create(void)
>  	return 0;
>  }
>  
> -static odp_pktio_t create_pktio(const char *iface)
> +static odp_pktio_t create_pktio(const char *iface, int num)
>  {
> -	odp_pool_t pool;
>  	odp_pktio_t pktio;
> -	char pool_name[ODP_POOL_NAME_LEN];
> -	odp_pool_param_t params;
>  
> -	memset(&params, 0, sizeof(params));
> -	params.pkt.seg_len = PKT_BUF_SIZE;
> -	params.pkt.len     = PKT_BUF_SIZE;
> -	params.pkt.num     = PKT_BUF_NUM;
> -	params.type        = ODP_POOL_PACKET;
> -
> -	snprintf(pool_name, sizeof(pool_name), "pkt_pool_%s", iface);
> -
> -	pool = odp_pool_lookup(pool_name);
> -	if (pool != ODP_POOL_INVALID)
> -		CU_ASSERT(odp_pool_destroy(pool) == 0);
> -
> -	pool = odp_pool_create(pool_name, ODP_SHM_NULL, &params);
> -	CU_ASSERT(pool != ODP_POOL_INVALID);
> -
> -	pktio = odp_pktio_open(iface, pool);
> +	pktio = odp_pktio_open(iface, pool[num]);
>  	if (pktio == ODP_PKTIO_INVALID)
>  		pktio = odp_pktio_lookup(iface);
>  	CU_ASSERT(pktio != ODP_PKTIO_INVALID);
> @@ -431,7 +415,7 @@ static void pktio_test_txrx(odp_queue_type_t q_type, int num_pkts)
>  		io = &pktios[i];
>  
>  		io->name = iface_name[i];
> -		io->id   = create_pktio(iface_name[i]);
> +		io->id   = create_pktio(iface_name[i], i);
>  		if (io->id == ODP_PKTIO_INVALID) {
>  			CU_FAIL("failed to open iface");
>  			return;
> @@ -487,7 +471,7 @@ static void test_odp_pktio_mtu(void)
>  {
>  	int ret;
>  	int mtu;
> -	odp_pktio_t pktio = create_pktio(iface_name[0]);
> +	odp_pktio_t pktio = create_pktio(iface_name[0], 0);
>  
>  	mtu = odp_pktio_mtu(pktio);
>  	CU_ASSERT(mtu > 0);
> @@ -503,7 +487,7 @@ static void test_odp_pktio_mtu(void)
>  static void test_odp_pktio_promisc(void)
>  {
>  	int ret;
> -	odp_pktio_t pktio = create_pktio(iface_name[0]);
> +	odp_pktio_t pktio = create_pktio(iface_name[0], 0);
>  
>  	ret = odp_pktio_promisc_mode_set(pktio, 1);
>  	CU_ASSERT(0 == ret);
> @@ -530,7 +514,7 @@ static void test_odp_pktio_mac(void)
>  	unsigned char mac_addr[ODPH_ETHADDR_LEN];
>  	int mac_len;
>  	int ret;
> -	odp_pktio_t pktio = create_pktio(iface_name[0]);
> +	odp_pktio_t pktio = create_pktio(iface_name[0], 0);
>  
>  	printf("testing mac for %s\n", iface_name[0]);
>  
> @@ -553,7 +537,7 @@ static void test_odp_pktio_mac(void)
>  
>  static void test_odp_pktio_inq_remdef(void)
>  {
> -	odp_pktio_t pktio = create_pktio(iface_name[0]);
> +	odp_pktio_t pktio = create_pktio(iface_name[0], 0);
>  	odp_queue_t inq;
>  	odp_event_t ev;
>  	int i;
> @@ -582,7 +566,7 @@ static void test_odp_pktio_open(void)
>  
>  	/* test the sequence open->close->open->close() */
>  	for (i = 0; i < 2; ++i) {
> -		pktio = create_pktio(iface_name[0]);
> +		pktio = create_pktio(iface_name[0], 0);
>  		CU_ASSERT(pktio != ODP_PKTIO_INVALID);
>  		CU_ASSERT(odp_pktio_close(pktio) == 0);
>  	}
> @@ -613,7 +597,7 @@ static void test_odp_pktio_inq(void)
>  {
>  	odp_pktio_t pktio;
>  
> -	pktio = create_pktio(iface_name[0]);
> +	pktio = create_pktio(iface_name[0], 0);
>  	CU_ASSERT(pktio != ODP_PKTIO_INVALID);
>  
>  	CU_ASSERT(create_inq(pktio, ODP_QUEUE_TYPE_POLL) == 0);
> @@ -621,12 +605,35 @@ static void test_odp_pktio_inq(void)
>  	CU_ASSERT(odp_pktio_close(pktio) == 0);
>  }
>  
> +static int create_pool(const char *iface, int num)
> +{
> +	char pool_name[ODP_POOL_NAME_LEN];
> +	odp_pool_param_t params;
> +
> +	memset(&params, 0, sizeof(params));
> +	params.pkt.seg_len = PKT_BUF_SIZE;
> +	params.pkt.len     = PKT_BUF_SIZE;
> +	params.pkt.num     = PKT_BUF_NUM;
> +	params.type        = ODP_POOL_PACKET;
> +
> +	snprintf(pool_name, sizeof(pool_name), "pkt_pool_%s", iface);
> +
> +	pool[num] = odp_pool_create(pool_name, ODP_SHM_NULL, &params);
> +	if (ODP_POOL_INVALID == pool[num]) {
> +		CU_FAIL("unable to create pool");
> +		return -1;
> +	}
> +
> +	return 0;
> +}
> +
>  static int init_pktio_suite(void)
>  {
>  	odp_atomic_init_u32(&ip_seq, 0);
>  	iface_name[0] = getenv("ODP_PKTIO_IF0");
>  	iface_name[1] = getenv("ODP_PKTIO_IF1");
>  	num_ifaces = 1;
> +	int i;
>  
>  	if (!iface_name[0]) {
>  		printf("No interfaces specified, using default \"loop\".\n");
> @@ -639,6 +646,11 @@ static int init_pktio_suite(void)
>  		       iface_name[0], iface_name[1]);
>  	}
>  
> +	for (i = 0; i < num_ifaces; i++) {
> +		if (create_pool(iface_name[i], i) != 0)
> +			return -1;
> +	}
> +
>  	if (default_pool_create() != 0) {
>  		fprintf(stderr, "error: failed to create default pool\n");
>  		return -1;
> -- 
> 1.9.1
> 
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/lng-odp
Maxim Uvarov June 2, 2015, 1:01 p.m. UTC | #3
Merged and created bug to add note:
https://bugs.linaro.org/show_bug.cgi?id=1608

Thanks,
Maxim.

On 06/02/15 14:10, Stuart Haslam wrote:
> On Wed, May 20, 2015 at 12:31:22PM +0300, Maxim Uvarov wrote:
>> Some platforms like DPDK and Cavium bare metal can not
>> dynamically destroy and create pool with the same name.
> If this is expected behaviour then it should be mentioned in the API
> documentation as it's currently not. Presumably these implementations
> don't actually destroy the pool so it's not just a case of using a
> different name, you leak a resource. Should it be documented that
> odp_pool_destroy() is only to be used when terminating the application?
>
>> Keep pool destroy only in test suite termination to
>> make all other  pktio tests passed.
>>
>> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
> Otherwise the change is fine, we previously recreated pools with
> different buffer sizes but that was factored out a while ago so it does
> now make more sense to create the pools only once.
>
> Reviewed-by: Stuart Haslam <stuart.haslam@linaro.org>
>
>> ---
>>   test/validation/odp_pktio.c | 66 ++++++++++++++++++++++++++-------------------
>>   1 file changed, 39 insertions(+), 27 deletions(-)
>>
>> diff --git a/test/validation/odp_pktio.c b/test/validation/odp_pktio.c
>> index d4bf7bf..7c1a666 100644
>> --- a/test/validation/odp_pktio.c
>> +++ b/test/validation/odp_pktio.c
>> @@ -56,6 +56,8 @@ odp_pool_t default_pkt_pool = ODP_POOL_INVALID;
>>   /** sequence number of IP packets */
>>   odp_atomic_u32_t ip_seq;
>>   
>> +odp_pool_t pool[MAX_NUM_IFACES] = {ODP_POOL_INVALID, ODP_POOL_INVALID};
>> +
>>   static void pktio_pkt_set_macs(odp_packet_t pkt,
>>   			       pktio_info_t *src, pktio_info_t *dst)
>>   {
>> @@ -219,29 +221,11 @@ static int default_pool_create(void)
>>   	return 0;
>>   }
>>   
>> -static odp_pktio_t create_pktio(const char *iface)
>> +static odp_pktio_t create_pktio(const char *iface, int num)
>>   {
>> -	odp_pool_t pool;
>>   	odp_pktio_t pktio;
>> -	char pool_name[ODP_POOL_NAME_LEN];
>> -	odp_pool_param_t params;
>>   
>> -	memset(&params, 0, sizeof(params));
>> -	params.pkt.seg_len = PKT_BUF_SIZE;
>> -	params.pkt.len     = PKT_BUF_SIZE;
>> -	params.pkt.num     = PKT_BUF_NUM;
>> -	params.type        = ODP_POOL_PACKET;
>> -
>> -	snprintf(pool_name, sizeof(pool_name), "pkt_pool_%s", iface);
>> -
>> -	pool = odp_pool_lookup(pool_name);
>> -	if (pool != ODP_POOL_INVALID)
>> -		CU_ASSERT(odp_pool_destroy(pool) == 0);
>> -
>> -	pool = odp_pool_create(pool_name, ODP_SHM_NULL, &params);
>> -	CU_ASSERT(pool != ODP_POOL_INVALID);
>> -
>> -	pktio = odp_pktio_open(iface, pool);
>> +	pktio = odp_pktio_open(iface, pool[num]);
>>   	if (pktio == ODP_PKTIO_INVALID)
>>   		pktio = odp_pktio_lookup(iface);
>>   	CU_ASSERT(pktio != ODP_PKTIO_INVALID);
>> @@ -431,7 +415,7 @@ static void pktio_test_txrx(odp_queue_type_t q_type, int num_pkts)
>>   		io = &pktios[i];
>>   
>>   		io->name = iface_name[i];
>> -		io->id   = create_pktio(iface_name[i]);
>> +		io->id   = create_pktio(iface_name[i], i);
>>   		if (io->id == ODP_PKTIO_INVALID) {
>>   			CU_FAIL("failed to open iface");
>>   			return;
>> @@ -487,7 +471,7 @@ static void test_odp_pktio_mtu(void)
>>   {
>>   	int ret;
>>   	int mtu;
>> -	odp_pktio_t pktio = create_pktio(iface_name[0]);
>> +	odp_pktio_t pktio = create_pktio(iface_name[0], 0);
>>   
>>   	mtu = odp_pktio_mtu(pktio);
>>   	CU_ASSERT(mtu > 0);
>> @@ -503,7 +487,7 @@ static void test_odp_pktio_mtu(void)
>>   static void test_odp_pktio_promisc(void)
>>   {
>>   	int ret;
>> -	odp_pktio_t pktio = create_pktio(iface_name[0]);
>> +	odp_pktio_t pktio = create_pktio(iface_name[0], 0);
>>   
>>   	ret = odp_pktio_promisc_mode_set(pktio, 1);
>>   	CU_ASSERT(0 == ret);
>> @@ -530,7 +514,7 @@ static void test_odp_pktio_mac(void)
>>   	unsigned char mac_addr[ODPH_ETHADDR_LEN];
>>   	int mac_len;
>>   	int ret;
>> -	odp_pktio_t pktio = create_pktio(iface_name[0]);
>> +	odp_pktio_t pktio = create_pktio(iface_name[0], 0);
>>   
>>   	printf("testing mac for %s\n", iface_name[0]);
>>   
>> @@ -553,7 +537,7 @@ static void test_odp_pktio_mac(void)
>>   
>>   static void test_odp_pktio_inq_remdef(void)
>>   {
>> -	odp_pktio_t pktio = create_pktio(iface_name[0]);
>> +	odp_pktio_t pktio = create_pktio(iface_name[0], 0);
>>   	odp_queue_t inq;
>>   	odp_event_t ev;
>>   	int i;
>> @@ -582,7 +566,7 @@ static void test_odp_pktio_open(void)
>>   
>>   	/* test the sequence open->close->open->close() */
>>   	for (i = 0; i < 2; ++i) {
>> -		pktio = create_pktio(iface_name[0]);
>> +		pktio = create_pktio(iface_name[0], 0);
>>   		CU_ASSERT(pktio != ODP_PKTIO_INVALID);
>>   		CU_ASSERT(odp_pktio_close(pktio) == 0);
>>   	}
>> @@ -613,7 +597,7 @@ static void test_odp_pktio_inq(void)
>>   {
>>   	odp_pktio_t pktio;
>>   
>> -	pktio = create_pktio(iface_name[0]);
>> +	pktio = create_pktio(iface_name[0], 0);
>>   	CU_ASSERT(pktio != ODP_PKTIO_INVALID);
>>   
>>   	CU_ASSERT(create_inq(pktio, ODP_QUEUE_TYPE_POLL) == 0);
>> @@ -621,12 +605,35 @@ static void test_odp_pktio_inq(void)
>>   	CU_ASSERT(odp_pktio_close(pktio) == 0);
>>   }
>>   
>> +static int create_pool(const char *iface, int num)
>> +{
>> +	char pool_name[ODP_POOL_NAME_LEN];
>> +	odp_pool_param_t params;
>> +
>> +	memset(&params, 0, sizeof(params));
>> +	params.pkt.seg_len = PKT_BUF_SIZE;
>> +	params.pkt.len     = PKT_BUF_SIZE;
>> +	params.pkt.num     = PKT_BUF_NUM;
>> +	params.type        = ODP_POOL_PACKET;
>> +
>> +	snprintf(pool_name, sizeof(pool_name), "pkt_pool_%s", iface);
>> +
>> +	pool[num] = odp_pool_create(pool_name, ODP_SHM_NULL, &params);
>> +	if (ODP_POOL_INVALID == pool[num]) {
>> +		CU_FAIL("unable to create pool");
>> +		return -1;
>> +	}
>> +
>> +	return 0;
>> +}
>> +
>>   static int init_pktio_suite(void)
>>   {
>>   	odp_atomic_init_u32(&ip_seq, 0);
>>   	iface_name[0] = getenv("ODP_PKTIO_IF0");
>>   	iface_name[1] = getenv("ODP_PKTIO_IF1");
>>   	num_ifaces = 1;
>> +	int i;
>>   
>>   	if (!iface_name[0]) {
>>   		printf("No interfaces specified, using default \"loop\".\n");
>> @@ -639,6 +646,11 @@ static int init_pktio_suite(void)
>>   		       iface_name[0], iface_name[1]);
>>   	}
>>   
>> +	for (i = 0; i < num_ifaces; i++) {
>> +		if (create_pool(iface_name[i], i) != 0)
>> +			return -1;
>> +	}
>> +
>>   	if (default_pool_create() != 0) {
>>   		fprintf(stderr, "error: failed to create default pool\n");
>>   		return -1;
>> -- 
>> 1.9.1
>>
>> _______________________________________________
>> lng-odp mailing list
>> lng-odp@lists.linaro.org
>> https://lists.linaro.org/mailman/listinfo/lng-odp
diff mbox

Patch

diff --git a/test/validation/odp_pktio.c b/test/validation/odp_pktio.c
index d4bf7bf..7c1a666 100644
--- a/test/validation/odp_pktio.c
+++ b/test/validation/odp_pktio.c
@@ -56,6 +56,8 @@  odp_pool_t default_pkt_pool = ODP_POOL_INVALID;
 /** sequence number of IP packets */
 odp_atomic_u32_t ip_seq;
 
+odp_pool_t pool[MAX_NUM_IFACES] = {ODP_POOL_INVALID, ODP_POOL_INVALID};
+
 static void pktio_pkt_set_macs(odp_packet_t pkt,
 			       pktio_info_t *src, pktio_info_t *dst)
 {
@@ -219,29 +221,11 @@  static int default_pool_create(void)
 	return 0;
 }
 
-static odp_pktio_t create_pktio(const char *iface)
+static odp_pktio_t create_pktio(const char *iface, int num)
 {
-	odp_pool_t pool;
 	odp_pktio_t pktio;
-	char pool_name[ODP_POOL_NAME_LEN];
-	odp_pool_param_t params;
 
-	memset(&params, 0, sizeof(params));
-	params.pkt.seg_len = PKT_BUF_SIZE;
-	params.pkt.len     = PKT_BUF_SIZE;
-	params.pkt.num     = PKT_BUF_NUM;
-	params.type        = ODP_POOL_PACKET;
-
-	snprintf(pool_name, sizeof(pool_name), "pkt_pool_%s", iface);
-
-	pool = odp_pool_lookup(pool_name);
-	if (pool != ODP_POOL_INVALID)
-		CU_ASSERT(odp_pool_destroy(pool) == 0);
-
-	pool = odp_pool_create(pool_name, ODP_SHM_NULL, &params);
-	CU_ASSERT(pool != ODP_POOL_INVALID);
-
-	pktio = odp_pktio_open(iface, pool);
+	pktio = odp_pktio_open(iface, pool[num]);
 	if (pktio == ODP_PKTIO_INVALID)
 		pktio = odp_pktio_lookup(iface);
 	CU_ASSERT(pktio != ODP_PKTIO_INVALID);
@@ -431,7 +415,7 @@  static void pktio_test_txrx(odp_queue_type_t q_type, int num_pkts)
 		io = &pktios[i];
 
 		io->name = iface_name[i];
-		io->id   = create_pktio(iface_name[i]);
+		io->id   = create_pktio(iface_name[i], i);
 		if (io->id == ODP_PKTIO_INVALID) {
 			CU_FAIL("failed to open iface");
 			return;
@@ -487,7 +471,7 @@  static void test_odp_pktio_mtu(void)
 {
 	int ret;
 	int mtu;
-	odp_pktio_t pktio = create_pktio(iface_name[0]);
+	odp_pktio_t pktio = create_pktio(iface_name[0], 0);
 
 	mtu = odp_pktio_mtu(pktio);
 	CU_ASSERT(mtu > 0);
@@ -503,7 +487,7 @@  static void test_odp_pktio_mtu(void)
 static void test_odp_pktio_promisc(void)
 {
 	int ret;
-	odp_pktio_t pktio = create_pktio(iface_name[0]);
+	odp_pktio_t pktio = create_pktio(iface_name[0], 0);
 
 	ret = odp_pktio_promisc_mode_set(pktio, 1);
 	CU_ASSERT(0 == ret);
@@ -530,7 +514,7 @@  static void test_odp_pktio_mac(void)
 	unsigned char mac_addr[ODPH_ETHADDR_LEN];
 	int mac_len;
 	int ret;
-	odp_pktio_t pktio = create_pktio(iface_name[0]);
+	odp_pktio_t pktio = create_pktio(iface_name[0], 0);
 
 	printf("testing mac for %s\n", iface_name[0]);
 
@@ -553,7 +537,7 @@  static void test_odp_pktio_mac(void)
 
 static void test_odp_pktio_inq_remdef(void)
 {
-	odp_pktio_t pktio = create_pktio(iface_name[0]);
+	odp_pktio_t pktio = create_pktio(iface_name[0], 0);
 	odp_queue_t inq;
 	odp_event_t ev;
 	int i;
@@ -582,7 +566,7 @@  static void test_odp_pktio_open(void)
 
 	/* test the sequence open->close->open->close() */
 	for (i = 0; i < 2; ++i) {
-		pktio = create_pktio(iface_name[0]);
+		pktio = create_pktio(iface_name[0], 0);
 		CU_ASSERT(pktio != ODP_PKTIO_INVALID);
 		CU_ASSERT(odp_pktio_close(pktio) == 0);
 	}
@@ -613,7 +597,7 @@  static void test_odp_pktio_inq(void)
 {
 	odp_pktio_t pktio;
 
-	pktio = create_pktio(iface_name[0]);
+	pktio = create_pktio(iface_name[0], 0);
 	CU_ASSERT(pktio != ODP_PKTIO_INVALID);
 
 	CU_ASSERT(create_inq(pktio, ODP_QUEUE_TYPE_POLL) == 0);
@@ -621,12 +605,35 @@  static void test_odp_pktio_inq(void)
 	CU_ASSERT(odp_pktio_close(pktio) == 0);
 }
 
+static int create_pool(const char *iface, int num)
+{
+	char pool_name[ODP_POOL_NAME_LEN];
+	odp_pool_param_t params;
+
+	memset(&params, 0, sizeof(params));
+	params.pkt.seg_len = PKT_BUF_SIZE;
+	params.pkt.len     = PKT_BUF_SIZE;
+	params.pkt.num     = PKT_BUF_NUM;
+	params.type        = ODP_POOL_PACKET;
+
+	snprintf(pool_name, sizeof(pool_name), "pkt_pool_%s", iface);
+
+	pool[num] = odp_pool_create(pool_name, ODP_SHM_NULL, &params);
+	if (ODP_POOL_INVALID == pool[num]) {
+		CU_FAIL("unable to create pool");
+		return -1;
+	}
+
+	return 0;
+}
+
 static int init_pktio_suite(void)
 {
 	odp_atomic_init_u32(&ip_seq, 0);
 	iface_name[0] = getenv("ODP_PKTIO_IF0");
 	iface_name[1] = getenv("ODP_PKTIO_IF1");
 	num_ifaces = 1;
+	int i;
 
 	if (!iface_name[0]) {
 		printf("No interfaces specified, using default \"loop\".\n");
@@ -639,6 +646,11 @@  static int init_pktio_suite(void)
 		       iface_name[0], iface_name[1]);
 	}
 
+	for (i = 0; i < num_ifaces; i++) {
+		if (create_pool(iface_name[i], i) != 0)
+			return -1;
+	}
+
 	if (default_pool_create() != 0) {
 		fprintf(stderr, "error: failed to create default pool\n");
 		return -1;