[dpdk-dev,v2] examples/l2fwd-cat: fix build according to API changes

Message ID 20170907114527.26649-1-v.kuramshin@samsung.com (mailing list archive)
State Superseded, archived
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Vladimir Kuramshin Sept. 7, 2017, 11:45 a.m. UTC
  Current version is compatible with PQOS version 1.3
but not compatible with higher versions. This change
makes l2fwd-cat example compatible with versions since 1.4

Signed-off-by: Vladimir Kuramshin <v.kuramshin@samsung.com>
---
Version 2 changes: fixed checkpatch warnings
"Prefer 'unsigned int *' to bare use of 'unsigned *'"

 examples/l2fwd-cat/Makefile |  5 +---
 examples/l2fwd-cat/cat.c    | 60 ++++++++++++++++++++++-----------------------
 2 files changed, 30 insertions(+), 35 deletions(-)
  

Comments

Bruce Richardson Sept. 18, 2017, 2:49 p.m. UTC | #1
On Thu, Sep 07, 2017 at 02:45:27PM +0300, Vladimir Kuramshin wrote:
> Current version is compatible with PQOS version 1.3
> but not compatible with higher versions. This change
> makes l2fwd-cat example compatible with versions since 1.4
> 
> Signed-off-by: Vladimir Kuramshin <v.kuramshin@samsung.com>
> ---
> Version 2 changes: fixed checkpatch warnings
> "Prefer 'unsigned int *' to bare use of 'unsigned *'"
> 

I can confirm this at least allows the code to compile with the latest
versions of the pqos library, which is currently broken.

One enhancement might be to put into our code a check for PQOS_VERSION
from pqos.h (which is, interestingly enough, currently at 1.1), to flag
when we have an unsupported version - right now one that is too old.

Otherwise, this is a good fix to have.

Acked-by: Bruce Richardson <bruce.richardson@intel.com>
  
Vladimir Kuramshin Sept. 18, 2017, 4:07 p.m. UTC | #2
I agree with you but the problem is that in this case I should also 
change Makefile in order to add version checking there also but I don't 
know how to write correct condition in Makefile that checks if it's 
higher or lower version, e.g. if PQOS_VERSION > 1.3 then ... else ...

If there was some spec file I'd add such checking there but I have 
Makefile only.


Regards,
Vladimir Kuramshin

On 18.09.2017 17:49, Bruce Richardson wrote:
> On Thu, Sep 07, 2017 at 02:45:27PM +0300, Vladimir Kuramshin wrote:
>> Current version is compatible with PQOS version 1.3
>> but not compatible with higher versions. This change
>> makes l2fwd-cat example compatible with versions since 1.4
>>
>> Signed-off-by: Vladimir Kuramshin <v.kuramshin@samsung.com>
>> ---
>> Version 2 changes: fixed checkpatch warnings
>> "Prefer 'unsigned int *' to bare use of 'unsigned *'"
>>
> I can confirm this at least allows the code to compile with the latest
> versions of the pqos library, which is currently broken.
>
> One enhancement might be to put into our code a check for PQOS_VERSION
> from pqos.h (which is, interestingly enough, currently at 1.1), to flag
> when we have an unsupported version - right now one that is too old.
>
> Otherwise, this is a good fix to have.
>
> Acked-by: Bruce Richardson <bruce.richardson@intel.com>
>
>
>
  
Bruce Richardson Sept. 18, 2017, 4:18 p.m. UTC | #3
On Mon, Sep 18, 2017 at 07:07:18PM +0300, Vladimir Kuramshin wrote:
> I agree with you but the problem is that in this case I should also change
> Makefile in order to add version checking there also but I don't know how to
> write correct condition in Makefile that checks if it's higher or lower
> version, e.g. if PQOS_VERSION > 1.3 then ... else ...
> 
> If there was some spec file I'd add such checking there but I have Makefile
> only.
> 
> 
> Regards,
> Vladimir Kuramshin
> 
Yes, good point. However, if at least the check was in the C file, if
the build fails, the user can be given a clear message as to why it
fails.
That can be another patch for another day, however.

/Bruce

> On 18.09.2017 17:49, Bruce Richardson wrote:
> > On Thu, Sep 07, 2017 at 02:45:27PM +0300, Vladimir Kuramshin wrote:
> > > Current version is compatible with PQOS version 1.3
> > > but not compatible with higher versions. This change
> > > makes l2fwd-cat example compatible with versions since 1.4
> > > 
> > > Signed-off-by: Vladimir Kuramshin <v.kuramshin@samsung.com>
> > > ---
> > > Version 2 changes: fixed checkpatch warnings
> > > "Prefer 'unsigned int *' to bare use of 'unsigned *'"
> > > 
> > I can confirm this at least allows the code to compile with the latest
> > versions of the pqos library, which is currently broken.
> > 
> > One enhancement might be to put into our code a check for PQOS_VERSION
> > from pqos.h (which is, interestingly enough, currently at 1.1), to flag
> > when we have an unsupported version - right now one that is too old.
> > 
> > Otherwise, this is a good fix to have.
> > 
> > Acked-by: Bruce Richardson <bruce.richardson@intel.com>
> > 
> > 
> > 
>
  

Patch

diff --git a/examples/l2fwd-cat/Makefile b/examples/l2fwd-cat/Makefile
index ae921ade6..a7fe6d68e 100644
--- a/examples/l2fwd-cat/Makefile
+++ b/examples/l2fwd-cat/Makefile
@@ -40,9 +40,6 @@  endif
 # Default target, can be overridden by command line or environment
 RTE_TARGET ?= x86_64-native-linuxapp-gcc
 
-# Location of PQoS library and includes,
-PQOS_LIBRARY_PATH = $(PQOS_INSTALL_PATH)/libpqos.a
-
 include $(RTE_SDK)/mk/rte.vars.mk
 
 # binary name
@@ -65,6 +62,6 @@  CFLAGS += -I$(PQOS_INSTALL_PATH)/../include
 CFLAGS_cat.o := -D_GNU_SOURCE
 
 LDLIBS += -L$(PQOS_INSTALL_PATH)
-LDLIBS += $(PQOS_LIBRARY_PATH)
+LDLIBS += -lpqos
 
 include $(RTE_SDK)/mk/rte.extapp.mk
diff --git a/examples/l2fwd-cat/cat.c b/examples/l2fwd-cat/cat.c
index 6133bf5bb..6b464bffa 100644
--- a/examples/l2fwd-cat/cat.c
+++ b/examples/l2fwd-cat/cat.c
@@ -53,7 +53,7 @@ 
 static const struct pqos_cap *m_cap;
 static const struct pqos_cpuinfo *m_cpu;
 static const struct pqos_capability *m_cap_l3ca;
-static unsigned m_sockets[PQOS_MAX_SOCKETS];
+static unsigned int *m_sockets;
 static unsigned m_sock_count;
 static struct cat_config m_config[PQOS_MAX_CORES];
 static unsigned m_config_count;
@@ -271,16 +271,16 @@  parse_l3ca(const char *l3ca)
 		/* scan the separator '@', ','(next) or '\0'(finish) */
 		l3ca += strcspn(l3ca, "@,");
 
-		if (*l3ca == '@') {
-			/* explicit assign cpu_set */
-			offset = parse_set(l3ca + 1, &cpuset);
-			if (offset < 0 || CPU_COUNT(&cpuset) == 0)
-				goto err;
+		if (*l3ca != '@')
+			goto err;
 
-			end = l3ca + 1 + offset;
-		} else
+		/* explicit assign cpu_set */
+		offset = parse_set(l3ca + 1, &cpuset);
+		if (offset < 0 || CPU_COUNT(&cpuset) == 0)
 			goto err;
 
+		end = l3ca + 1 + offset;
+
 		if (*end != ',' && *end != '\0')
 			goto err;
 
@@ -353,9 +353,6 @@  parse_l3ca(const char *l3ca)
 		idx++;
 	} while (*end != '\0' && idx < PQOS_MAX_CORES);
 
-	if (m_config_count == 0)
-		goto err;
-
 	return 0;
 
 err:
@@ -408,7 +405,7 @@  check_cpus(void)
 					goto exit;
 				}
 
-				ret = pqos_l3ca_assoc_get(cpu_id, &cos_id);
+				ret = pqos_alloc_assoc_get(cpu_id, &cos_id);
 				if (ret != PQOS_RETVAL_OK) {
 					printf("PQOS: Failed to read COS "
 						"associated to cpu %u.\n",
@@ -512,7 +509,7 @@  check_and_select_classes(unsigned cos_id_map[][PQOS_MAX_SOCKETS])
 	for (j = 0; j < m_cpu->num_cores; j++) {
 		cpu_id = m_cpu->cores[j].lcore;
 
-		ret = pqos_l3ca_assoc_get(cpu_id, &cos_id);
+		ret = pqos_alloc_assoc_get(cpu_id, &cos_id);
 		if (ret != PQOS_RETVAL_OK) {
 			printf("PQOS: Failed to read COS associated to "
 				"cpu %u on phy_pkg %u.\n", cpu_id, phy_pkg_id);
@@ -598,10 +595,10 @@  configure_cat(unsigned cos_id_map[][PQOS_MAX_SOCKETS])
 
 		l3ca.cdp = m_config[i].cdp;
 		if (m_config[i].cdp == 1) {
-			l3ca.code_mask = m_config[i].code_mask;
-			l3ca.data_mask = m_config[i].data_mask;
+			l3ca.u.s.code_mask = m_config[i].code_mask;
+			l3ca.u.s.data_mask = m_config[i].data_mask;
 		} else
-			l3ca.ways_mask = m_config[i].mask;
+			l3ca.u.ways_mask = m_config[i].mask;
 
 		for (j = 0; j < m_sock_count; j++) {
 			phy_pkg_id = m_sockets[j];
@@ -637,7 +634,7 @@  configure_cat(unsigned cos_id_map[][PQOS_MAX_SOCKETS])
 
 			cos_id = cos_id_map[i][phy_pkg_id];
 
-			ret = pqos_l3ca_assoc_set(cpu_id, cos_id);
+			ret = pqos_alloc_assoc_set(cpu_id, cos_id);
 			if (ret != PQOS_RETVAL_OK) {
 				printf("PQOS: Failed to associate COS %u to "
 					"cpu %u\n", cos_id, cpu_id);
@@ -754,24 +751,24 @@  print_cat_config(void)
 			if (tab[n].cdp == 1) {
 				printf("PQOS: COS: %u, cMASK: 0x%llx, "
 					"dMASK: 0x%llx\n", tab[n].class_id,
-					(unsigned long long)tab[n].code_mask,
-					(unsigned long long)tab[n].data_mask);
+					(unsigned long long)tab[n].u.s.code_mask,
+					(unsigned long long)tab[n].u.s.data_mask);
 			} else {
 				printf("PQOS: COS: %u, MASK: 0x%llx\n",
 					tab[n].class_id,
-					(unsigned long long)tab[n].ways_mask);
+					(unsigned long long)tab[n].u.ways_mask);
 			}
 		}
 	}
 
 	for (i = 0; i < m_sock_count; i++) {
-		unsigned lcores[PQOS_MAX_SOCKET_CORES] = {0};
+		unsigned int *lcores = NULL;
 		unsigned lcount = 0;
 		unsigned n = 0;
 
-		ret = pqos_cpu_get_cores(m_cpu, m_sockets[i],
-				PQOS_MAX_SOCKET_CORES, &lcount, &lcores[0]);
-		if (ret != PQOS_RETVAL_OK) {
+		lcores = pqos_cpu_get_cores(m_cpu, m_sockets[i],
+				&lcount);
+		if (lcores == NULL || lcount == 0) {
 			printf("PQOS: Error retrieving core information!\n");
 			return;
 		}
@@ -780,13 +777,15 @@  print_cat_config(void)
 		for (n = 0; n < lcount; n++) {
 			unsigned class_id = 0;
 
-			ret = pqos_l3ca_assoc_get(lcores[n], &class_id);
+			ret = pqos_alloc_assoc_get(lcores[n], &class_id);
 			if (ret == PQOS_RETVAL_OK)
 				printf("PQOS: CPU: %u, COS: %u\n", lcores[n],
 					class_id);
 			else
 				printf("PQOS: CPU: %u, ERROR\n", lcores[n]);
 		}
+
+		free(lcores);
 	}
 
 }
@@ -849,7 +848,8 @@  cat_fini(void)
 	m_cap = NULL;
 	m_cpu = NULL;
 	m_cap_l3ca = NULL;
-	memset(m_sockets, 0, sizeof(m_sockets));
+	if (m_sockets != NULL)
+		free(m_sockets);
 	m_sock_count = 0;
 	memset(m_config, 0, sizeof(m_config));
 	m_config_count = 0;
@@ -875,7 +875,7 @@  cat_exit(void)
 			if (CPU_ISSET(cpu_id, &m_config[i].cpumask) == 0)
 				continue;
 
-			ret = pqos_l3ca_assoc_set(cpu_id, 0);
+			ret = pqos_alloc_assoc_set(cpu_id, 0);
 			if (ret != PQOS_RETVAL_OK) {
 				printf("PQOS: Failed to associate COS 0 to "
 					"cpu %u\n", cpu_id);
@@ -927,7 +927,6 @@  cat_init(int argc, char **argv)
 	/* PQoS Initialization - Check and initialize CAT capability */
 	cfg.fd_log = STDOUT_FILENO;
 	cfg.verbose = 0;
-	cfg.cdp_cfg = PQOS_REQUIRE_CDP_ANY;
 	ret = pqos_init(&cfg);
 	if (ret != PQOS_RETVAL_OK) {
 		printf("PQOS: Error initializing PQoS library!\n");
@@ -953,9 +952,8 @@  cat_init(int argc, char **argv)
 	}
 
 	/* Get CPU socket information */
-	ret = pqos_cpu_get_sockets(m_cpu, PQOS_MAX_SOCKETS, &m_sock_count,
-		m_sockets);
-	if (ret != PQOS_RETVAL_OK) {
+	m_sockets = pqos_cpu_get_sockets(m_cpu, &m_sock_count);
+	if (m_sockets == NULL) {
 		printf("PQOS: Error retrieving CPU socket information!\n");
 		ret = -EFAULT;
 		goto err;