[dpdk-dev] enicpd: Warnings and one error when built using clang compiler

Message ID 1417245457-19609-1-git-send-email-ssujith@cisco.com (mailing list archive)
State Accepted, archived
Headers

Commit Message

Sujith Sankar Nov. 29, 2014, 7:17 a.m. UTC
  This patch fixes the warnings and error reported by clang compiler on Linux.

Reported-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: Sujith Sankar <ssujith@cisco.com>
---
 lib/librte_pmd_enic/enic.h          | 40 +++++++++++++++++++++++++++++++++++++
 lib/librte_pmd_enic/enic_compat.h   |  1 +
 lib/librte_pmd_enic/enic_main.c     | 31 +++++++++++++++-------------
 lib/librte_pmd_enic/vnic/vnic_dev.c | 19 ++++++++++--------
 lib/librte_pmd_enic/vnic/vnic_dev.h |  9 +++++++++
 5 files changed, 78 insertions(+), 22 deletions(-)
  

Comments

Sujith Sankar Nov. 29, 2014, 7:22 a.m. UTC | #1
Hi all,
Sorry for the typo in the subject.  It is enicpmd.

Bruce,
Please try out this patch on FreeBSD and let me know if any fix is
required.

Thanks,
-Sujith

On 29/11/14 12:47 pm, "Sujith Sankar (ssujith)" <ssujith@cisco.com> wrote:

>This patch fixes the warnings and error reported by clang compiler on
>Linux.
>
>Reported-by: Bruce Richardson <bruce.richardson@intel.com>
>Signed-off-by: Sujith Sankar <ssujith@cisco.com>
>---
> lib/librte_pmd_enic/enic.h          | 40
>+++++++++++++++++++++++++++++++++++++
> lib/librte_pmd_enic/enic_compat.h   |  1 +
> lib/librte_pmd_enic/enic_main.c     | 31 +++++++++++++++-------------
> lib/librte_pmd_enic/vnic/vnic_dev.c | 19 ++++++++++--------
> lib/librte_pmd_enic/vnic/vnic_dev.h |  9 +++++++++
> 5 files changed, 78 insertions(+), 22 deletions(-)
>
>diff --git a/lib/librte_pmd_enic/enic.h b/lib/librte_pmd_enic/enic.h
>index 6400d24..f128e64 100644
>--- a/lib/librte_pmd_enic/enic.h
>+++ b/lib/librte_pmd_enic/enic.h
>@@ -154,4 +154,44 @@ static inline struct enic *pmd_priv(struct
>rte_eth_dev *eth_dev)
> 	return (struct enic *)eth_dev->data->dev_private;
> }
> 
>+extern int enic_fdir_add_fltr(struct enic *enic,
>+	struct rte_fdir_filter *params, u16 queue, u8 drop);
>+extern int enic_fdir_del_fltr(struct enic *enic,
>+	struct rte_fdir_filter *params);
>+extern void enic_free_wq(void *txq);
>+extern int enic_alloc_intr_resources(struct enic *enic);
>+extern int enic_setup_finish(struct enic *enic);
>+extern int enic_alloc_wq(struct enic *enic, uint16_t queue_idx,
>+	unsigned int socket_id, uint16_t nb_desc);
>+extern void enic_start_wq(struct enic *enic, uint16_t queue_idx);
>+extern int enic_stop_wq(struct enic *enic, uint16_t queue_idx);
>+extern void enic_start_rq(struct enic *enic, uint16_t queue_idx);
>+extern int enic_stop_rq(struct enic *enic, uint16_t queue_idx);
>+extern void enic_free_rq(void *rxq);
>+extern int enic_alloc_rq(struct enic *enic, uint16_t queue_idx,
>+	unsigned int socket_id, struct rte_mempool *mp,
>+	uint16_t nb_desc);
>+extern int enic_set_rss_nic_cfg(struct enic *enic);
>+extern int enic_set_vnic_res(struct enic *enic);
>+extern void enic_set_hdr_split_size(struct enic *enic, u16
>split_hdr_size);
>+extern int enic_enable(struct enic *enic);
>+extern int enic_disable(struct enic *enic);
>+extern void enic_remove(struct enic *enic);
>+extern int enic_get_link_status(struct enic *enic);
>+extern void enic_dev_stats_get(struct enic *enic,
>+	struct rte_eth_stats *r_stats);
>+extern void enic_dev_stats_clear(struct enic *enic);
>+extern void enic_add_packet_filter(struct enic *enic);
>+extern void enic_set_mac_address(struct enic *enic, uint8_t *mac_addr);
>+extern void enic_del_mac_address(struct enic *enic);
>+extern unsigned int enic_cleanup_wq(struct enic *enic, struct vnic_wq
>*wq);
>+extern int enic_send_pkt(struct enic *enic, struct vnic_wq *wq,
>+	struct rte_mbuf *tx_pkt, unsigned short len,
>+	uint8_t sop, uint8_t eop,
>+	uint16_t ol_flags, uint16_t vlan_tag);
>+extern int enic_poll(struct vnic_rq *rq, struct rte_mbuf **rx_pkts,
>+	unsigned int budget, unsigned int *work_done);
>+extern int enic_probe(struct enic *enic);
>+extern int enic_clsf_init(struct enic *enic);
>+extern void enic_clsf_destroy(struct enic *enic);
> #endif /* _ENIC_H_ */
>diff --git a/lib/librte_pmd_enic/enic_compat.h
>b/lib/librte_pmd_enic/enic_compat.h
>index b3738ee..b1af838 100644
>--- a/lib/librte_pmd_enic/enic_compat.h
>+++ b/lib/librte_pmd_enic/enic_compat.h
>@@ -37,6 +37,7 @@
> #define _ENIC_COMPAT_H_
> 
> #include <stdio.h>
>+#include <unistd.h>
> 
> #include <rte_atomic.h>
> #include <rte_malloc.h>
>diff --git a/lib/librte_pmd_enic/enic_main.c
>b/lib/librte_pmd_enic/enic_main.c
>index 853dd04..4bbf1e4 100644
>--- a/lib/librte_pmd_enic/enic_main.c
>+++ b/lib/librte_pmd_enic/enic_main.c
>@@ -65,17 +65,17 @@ static inline int enic_is_sriov_vf(struct enic *enic)
> 	return enic->pdev->id.device_id == PCI_DEVICE_ID_CISCO_VIC_ENET_VF;
> }
> 
>-static int is_zero_addr(char *addr)
>+static int is_zero_addr(uint8_t *addr)
> {
> 	return !(addr[0] |  addr[1] | addr[2] | addr[3] | addr[4] | addr[5]);
> }
> 
>-static int is_mcast_addr(char *addr)
>+static int is_mcast_addr(uint8_t *addr)
> {
> 	return addr[0] & 1;
> }
> 
>-static int is_eth_addr_valid(char *addr)
>+static int is_eth_addr_valid(uint8_t *addr)
> {
> 	return !is_mcast_addr(addr) && !is_zero_addr(addr);
> }
>@@ -105,7 +105,8 @@ static const struct rte_memzone
>*ring_dma_zone_reserve(
> 	if (mz)
> 		return mz;
> 
>-	return rte_memzone_reserve_aligned(z_name, (uint64_t) ring_size,
>+	return rte_memzone_reserve_aligned((const char *)z_name,
>+		(uint64_t) ring_size,
> 		socket_id, RTE_MEMZONE_1GB, ENIC_ALIGN);
> }
> 
>@@ -430,14 +431,15 @@ static int enic_rq_indicate_buf(struct vnic_rq *rq,
> 		&ipv4_csum_ok, &ipv6, &ipv4, &ipv4_fragment,
> 		&fcs_ok);
> 
>-	if (packet_error) {
>-		dev_err(enic, "packet error\n");
>-		return;
>-	}
>-
> 	rx_pkt = (struct rte_mbuf *)buf->os_buf;
> 	buf->os_buf = NULL;
> 
>+	if (unlikely(packet_error)) {
>+		dev_err(enic, "packet error\n");
>+		rx_pkt->data_len = 0;
>+		return 0;
>+	}
>+
> 	if (unlikely(skipped)) {
> 		rx_pkt->data_len = 0;
> 		return 0;
>@@ -563,7 +565,8 @@ void *enic_alloc_consistent(void *priv, size_t size,
> 	const struct rte_memzone *rz;
> 	*dma_handle = 0;
> 
>-	rz = rte_memzone_reserve_aligned(name, size, 0, 0, ENIC_ALIGN);
>+	rz = rte_memzone_reserve_aligned((const char *)name,
>+		size, 0, 0, ENIC_ALIGN);
> 	if (!rz) {
> 		pr_err("%s : Failed to allocate memory requested for %s",
> 			__func__, name);
>@@ -873,9 +876,9 @@ static int enic_set_rsskey(struct enic *enic)
> 		.key[3].b = {69, 78, 73, 67, 105, 115, 99, 111, 111, 108},
> 	};
> 	int err;
>-	char name[NAME_MAX];
>+	u8 name[NAME_MAX];
> 
>-	snprintf(name, NAME_MAX, "rss_key-%s", enic->bdf_name);
>+	snprintf((char *)name, NAME_MAX, "rss_key-%s", enic->bdf_name);
> 	rss_key_buf_va = enic_alloc_consistent(enic, sizeof(union vnic_rss_key),
> 		&rss_key_buf_pa, name);
> 	if (!rss_key_buf_va)
>@@ -899,9 +902,9 @@ static int enic_set_rsscpu(struct enic *enic, u8
>rss_hash_bits)
> 	union vnic_rss_cpu *rss_cpu_buf_va = NULL;
> 	unsigned int i;
> 	int err;
>-	char name[NAME_MAX];
>+	u8 name[NAME_MAX];
> 
>-	snprintf(name, NAME_MAX, "rss_cpu-%s", enic->bdf_name);
>+	snprintf((char *)name, NAME_MAX, "rss_cpu-%s", enic->bdf_name);
> 	rss_cpu_buf_va = enic_alloc_consistent(enic, sizeof(union vnic_rss_cpu),
> 		&rss_cpu_buf_pa, name);
> 	if (!rss_cpu_buf_va)
>diff --git a/lib/librte_pmd_enic/vnic/vnic_dev.c
>b/lib/librte_pmd_enic/vnic/vnic_dev.c
>index 485123f..682c9c9 100644
>--- a/lib/librte_pmd_enic/vnic/vnic_dev.c
>+++ b/lib/librte_pmd_enic/vnic/vnic_dev.c
>@@ -517,13 +517,14 @@ int vnic_dev_stats_dump(struct vnic_dev *vdev,
>struct vnic_stats **stats)
> {
> 	u64 a0, a1;
> 	int wait = 1000;
>-	static instance;
>+	static u32 instance;
> 	char name[NAME_MAX];
> 
> 	if (!vdev->stats) {
>-		snprintf(name, sizeof(name), "vnic_stats-%d", instance++);
>+		snprintf((char *)name, sizeof(name),
>+			"vnic_stats-%d", instance++);
> 		vdev->stats = vdev->alloc_consistent(vdev->priv,
>-			sizeof(struct vnic_stats), &vdev->stats_pa, name);
>+			sizeof(struct vnic_stats), &vdev->stats_pa, (u8 *)name);
> 		if (!vdev->stats)
> 			return -ENOMEM;
> 	}
>@@ -763,7 +764,7 @@ int vnic_dev_notify_set(struct vnic_dev *vdev, u16
>intr)
> 	void *notify_addr;
> 	dma_addr_t notify_pa;
> 	char name[NAME_MAX];
>-	static int instance;
>+	static u32 instance;
> 
> 	if (vdev->notify || vdev->notify_pa) {
> 		pr_warn("notify block %p still allocated.\n" \
>@@ -772,10 +773,11 @@ int vnic_dev_notify_set(struct vnic_dev *vdev, u16
>intr)
> 	}
> 
> 	if (!vnic_dev_in_reset(vdev)) {
>-		snprintf(name, sizeof(name), "vnic_notify-%d", instance++);
>+		snprintf((char *)name, sizeof(name),
>+			"vnic_notify-%d", instance++);
> 		notify_addr = vdev->alloc_consistent(vdev->priv,
> 			sizeof(struct vnic_devcmd_notify),
>-			&notify_pa, name);
>+			&notify_pa, (u8 *)name);
> 		if (!notify_addr)
> 			return -ENOMEM;
> 	}
>@@ -1028,9 +1030,10 @@ int vnic_dev_classifier(struct vnic_dev *vdev, u8
>cmd, u16 *entry,
> 		tlv_size = sizeof(struct filter) +
> 		    sizeof(struct filter_action) +
> 		    2*sizeof(struct filter_tlv);
>-		snprintf(z_name, sizeof(z_name), "vnic_clsf_%d", unique_id++);
>+		snprintf((char *)z_name, sizeof(z_name),
>+			"vnic_clsf_%d", unique_id++);
> 		tlv_va = vdev->alloc_consistent(vdev->priv,
>-			tlv_size, &tlv_pa, z_name);
>+			tlv_size, &tlv_pa, (u8 *)z_name);
> 		if (!tlv_va)
> 			return -ENOMEM;
> 		tlv = tlv_va;
>diff --git a/lib/librte_pmd_enic/vnic/vnic_dev.h
>b/lib/librte_pmd_enic/vnic/vnic_dev.h
>index 63c26dd..8cc036b 100644
>--- a/lib/librte_pmd_enic/vnic/vnic_dev.h
>+++ b/lib/librte_pmd_enic/vnic/vnic_dev.h
>@@ -100,6 +100,12 @@ struct vnic_stats;
> void *vnic_dev_priv(struct vnic_dev *vdev);
> unsigned int vnic_dev_get_res_count(struct vnic_dev *vdev,
> 	enum vnic_res_type type);
>+void vnic_register_cbacks(struct vnic_dev *vdev,
>+	void *(*alloc_consistent)(void *priv, size_t size,
>+		dma_addr_t *dma_handle, u8 *name),
>+	void (*free_consistent)(struct rte_pci_device *hwdev,
>+		size_t size, void *vaddr,
>+		dma_addr_t dma_handle));
> void __iomem *vnic_dev_get_res(struct vnic_dev *vdev, enum vnic_res_type
>type,
> 	unsigned int index);
> dma_addr_t vnic_dev_get_res_bus_addr(struct vnic_dev *vdev,
>@@ -113,6 +119,8 @@ unsigned long vnic_dev_get_res_type_len(struct
>vnic_dev *vdev,
> unsigned int vnic_dev_desc_ring_size(struct vnic_dev_ring *ring,
> 	unsigned int desc_count, unsigned int desc_size);
> void vnic_dev_clear_desc_ring(struct vnic_dev_ring *ring);
>+void vnic_set_hdr_split_size(struct vnic_dev *vdev, u16 size);
>+u16 vnic_get_hdr_split_size(struct vnic_dev *vdev);
> int vnic_dev_alloc_desc_ring(struct vnic_dev *vdev, struct vnic_dev_ring
>*ring,
> 	unsigned int desc_count, unsigned int desc_size, unsigned int socket_id,
> 	char *z_name);
>@@ -142,6 +150,7 @@ int vnic_dev_del_addr(struct vnic_dev *vdev, u8
>*addr);
> int vnic_dev_get_mac_addr(struct vnic_dev *vdev, u8 *mac_addr);
> int vnic_dev_raise_intr(struct vnic_dev *vdev, u16 intr);
> int vnic_dev_notify_set(struct vnic_dev *vdev, u16 intr);
>+void vnic_dev_set_reset_flag(struct vnic_dev *vdev, int state);
> int vnic_dev_notify_unset(struct vnic_dev *vdev);
> int vnic_dev_notify_setcmd(struct vnic_dev *vdev,
> 	void *notify_addr, dma_addr_t notify_pa, u16 intr);
>-- 
>1.9.1
>
  
Thomas Monjalon Nov. 29, 2014, 11:17 a.m. UTC | #2
29/11/2014 07:22, Sujith Sankar :
> Sorry for the typo in the subject.  It is enicpmd.

Actually no, it should be enic.
For virtio, it is not virtiopmd, for ixgbe, it is not ixgbepmd, etc :)
Talking about title, please start with lower case and a verb, e.g. fix build 
with clang.
To have a good idea of title formatting, you could check at the git history.

Thanks
  
Sujith Sankar Nov. 29, 2014, 1:20 p.m. UTC | #3
On 29/11/14 4:47 pm, "Thomas Monjalon" <thomas.monjalon@6wind.com> wrote:

>29/11/2014 07:22, Sujith Sankar :
>> Sorry for the typo in the subject.  It is enicpmd.
>
>Actually no, it should be enic.

Usually we use enic to denote the kernel mode driver and enicpmd to denote
the PMD.
But it is alright to follow what¹s being done in the community.  I shall
use enic from now on.

>For virtio, it is not virtiopmd, for ixgbe, it is not ixgbepmd, etc :)
>Talking about title, please start with lower case and a verb, e.g. fix
>build 
>with clang.
>To have a good idea of title formatting, you could check at the git
>history.

Sure.  I shall follow these.

Thanks,
-Sujith

>
>Thanks
>-- 
>Thomas
  
Bruce Richardson Dec. 1, 2014, 10:57 a.m. UTC | #4
On Sat, Nov 29, 2014 at 12:47:37PM +0530, Sujith Sankar wrote:
> This patch fixes the warnings and error reported by clang compiler on Linux.
> 
> Reported-by: Bruce Richardson <bruce.richardson@intel.com>
> Signed-off-by: Sujith Sankar <ssujith@cisco.com>

This PMD now compiles up with clang on FreeBSD. The patch seems rather large though,
are all these changes necessary for clang compilation?

On the basis that this fixes the issue though:

Acked-by: Bruce Richardson <bruce.richardson@intel.com>

> ---
>  lib/librte_pmd_enic/enic.h          | 40 +++++++++++++++++++++++++++++++++++++
>  lib/librte_pmd_enic/enic_compat.h   |  1 +
>  lib/librte_pmd_enic/enic_main.c     | 31 +++++++++++++++-------------
>  lib/librte_pmd_enic/vnic/vnic_dev.c | 19 ++++++++++--------
>  lib/librte_pmd_enic/vnic/vnic_dev.h |  9 +++++++++
>  5 files changed, 78 insertions(+), 22 deletions(-)
> 
> diff --git a/lib/librte_pmd_enic/enic.h b/lib/librte_pmd_enic/enic.h
> index 6400d24..f128e64 100644
> --- a/lib/librte_pmd_enic/enic.h
> +++ b/lib/librte_pmd_enic/enic.h
> @@ -154,4 +154,44 @@ static inline struct enic *pmd_priv(struct rte_eth_dev *eth_dev)
>  	return (struct enic *)eth_dev->data->dev_private;
>  }
>  
> +extern int enic_fdir_add_fltr(struct enic *enic,
> +	struct rte_fdir_filter *params, u16 queue, u8 drop);
> +extern int enic_fdir_del_fltr(struct enic *enic,
> +	struct rte_fdir_filter *params);
> +extern void enic_free_wq(void *txq);
> +extern int enic_alloc_intr_resources(struct enic *enic);
> +extern int enic_setup_finish(struct enic *enic);
> +extern int enic_alloc_wq(struct enic *enic, uint16_t queue_idx,
> +	unsigned int socket_id, uint16_t nb_desc);
> +extern void enic_start_wq(struct enic *enic, uint16_t queue_idx);
> +extern int enic_stop_wq(struct enic *enic, uint16_t queue_idx);
> +extern void enic_start_rq(struct enic *enic, uint16_t queue_idx);
> +extern int enic_stop_rq(struct enic *enic, uint16_t queue_idx);
> +extern void enic_free_rq(void *rxq);
> +extern int enic_alloc_rq(struct enic *enic, uint16_t queue_idx,
> +	unsigned int socket_id, struct rte_mempool *mp,
> +	uint16_t nb_desc);
> +extern int enic_set_rss_nic_cfg(struct enic *enic);
> +extern int enic_set_vnic_res(struct enic *enic);
> +extern void enic_set_hdr_split_size(struct enic *enic, u16 split_hdr_size);
> +extern int enic_enable(struct enic *enic);
> +extern int enic_disable(struct enic *enic);
> +extern void enic_remove(struct enic *enic);
> +extern int enic_get_link_status(struct enic *enic);
> +extern void enic_dev_stats_get(struct enic *enic,
> +	struct rte_eth_stats *r_stats);
> +extern void enic_dev_stats_clear(struct enic *enic);
> +extern void enic_add_packet_filter(struct enic *enic);
> +extern void enic_set_mac_address(struct enic *enic, uint8_t *mac_addr);
> +extern void enic_del_mac_address(struct enic *enic);
> +extern unsigned int enic_cleanup_wq(struct enic *enic, struct vnic_wq *wq);
> +extern int enic_send_pkt(struct enic *enic, struct vnic_wq *wq,
> +	struct rte_mbuf *tx_pkt, unsigned short len,
> +	uint8_t sop, uint8_t eop,
> +	uint16_t ol_flags, uint16_t vlan_tag);
> +extern int enic_poll(struct vnic_rq *rq, struct rte_mbuf **rx_pkts,
> +	unsigned int budget, unsigned int *work_done);
> +extern int enic_probe(struct enic *enic);
> +extern int enic_clsf_init(struct enic *enic);
> +extern void enic_clsf_destroy(struct enic *enic);
>  #endif /* _ENIC_H_ */
> diff --git a/lib/librte_pmd_enic/enic_compat.h b/lib/librte_pmd_enic/enic_compat.h
> index b3738ee..b1af838 100644
> --- a/lib/librte_pmd_enic/enic_compat.h
> +++ b/lib/librte_pmd_enic/enic_compat.h
> @@ -37,6 +37,7 @@
>  #define _ENIC_COMPAT_H_
>  
>  #include <stdio.h>
> +#include <unistd.h>
>  
>  #include <rte_atomic.h>
>  #include <rte_malloc.h>
> diff --git a/lib/librte_pmd_enic/enic_main.c b/lib/librte_pmd_enic/enic_main.c
> index 853dd04..4bbf1e4 100644
> --- a/lib/librte_pmd_enic/enic_main.c
> +++ b/lib/librte_pmd_enic/enic_main.c
> @@ -65,17 +65,17 @@ static inline int enic_is_sriov_vf(struct enic *enic)
>  	return enic->pdev->id.device_id == PCI_DEVICE_ID_CISCO_VIC_ENET_VF;
>  }
>  
> -static int is_zero_addr(char *addr)
> +static int is_zero_addr(uint8_t *addr)
>  {
>  	return !(addr[0] |  addr[1] | addr[2] | addr[3] | addr[4] | addr[5]);
>  }
>  
> -static int is_mcast_addr(char *addr)
> +static int is_mcast_addr(uint8_t *addr)
>  {
>  	return addr[0] & 1;
>  }
>  
> -static int is_eth_addr_valid(char *addr)
> +static int is_eth_addr_valid(uint8_t *addr)
>  {
>  	return !is_mcast_addr(addr) && !is_zero_addr(addr);
>  }
> @@ -105,7 +105,8 @@ static const struct rte_memzone *ring_dma_zone_reserve(
>  	if (mz)
>  		return mz;
>  
> -	return rte_memzone_reserve_aligned(z_name, (uint64_t) ring_size,
> +	return rte_memzone_reserve_aligned((const char *)z_name,
> +		(uint64_t) ring_size,
>  		socket_id, RTE_MEMZONE_1GB, ENIC_ALIGN);
>  }
>  
> @@ -430,14 +431,15 @@ static int enic_rq_indicate_buf(struct vnic_rq *rq,
>  		&ipv4_csum_ok, &ipv6, &ipv4, &ipv4_fragment,
>  		&fcs_ok);
>  
> -	if (packet_error) {
> -		dev_err(enic, "packet error\n");
> -		return;
> -	}
> -
>  	rx_pkt = (struct rte_mbuf *)buf->os_buf;
>  	buf->os_buf = NULL;
>  
> +	if (unlikely(packet_error)) {
> +		dev_err(enic, "packet error\n");
> +		rx_pkt->data_len = 0;
> +		return 0;
> +	}
> +
>  	if (unlikely(skipped)) {
>  		rx_pkt->data_len = 0;
>  		return 0;
> @@ -563,7 +565,8 @@ void *enic_alloc_consistent(void *priv, size_t size,
>  	const struct rte_memzone *rz;
>  	*dma_handle = 0;
>  
> -	rz = rte_memzone_reserve_aligned(name, size, 0, 0, ENIC_ALIGN);
> +	rz = rte_memzone_reserve_aligned((const char *)name,
> +		size, 0, 0, ENIC_ALIGN);
>  	if (!rz) {
>  		pr_err("%s : Failed to allocate memory requested for %s",
>  			__func__, name);
> @@ -873,9 +876,9 @@ static int enic_set_rsskey(struct enic *enic)
>  		.key[3].b = {69, 78, 73, 67, 105, 115, 99, 111, 111, 108},
>  	};
>  	int err;
> -	char name[NAME_MAX];
> +	u8 name[NAME_MAX];
>  
> -	snprintf(name, NAME_MAX, "rss_key-%s", enic->bdf_name);
> +	snprintf((char *)name, NAME_MAX, "rss_key-%s", enic->bdf_name);
>  	rss_key_buf_va = enic_alloc_consistent(enic, sizeof(union vnic_rss_key),
>  		&rss_key_buf_pa, name);
>  	if (!rss_key_buf_va)
> @@ -899,9 +902,9 @@ static int enic_set_rsscpu(struct enic *enic, u8 rss_hash_bits)
>  	union vnic_rss_cpu *rss_cpu_buf_va = NULL;
>  	unsigned int i;
>  	int err;
> -	char name[NAME_MAX];
> +	u8 name[NAME_MAX];
>  
> -	snprintf(name, NAME_MAX, "rss_cpu-%s", enic->bdf_name);
> +	snprintf((char *)name, NAME_MAX, "rss_cpu-%s", enic->bdf_name);
>  	rss_cpu_buf_va = enic_alloc_consistent(enic, sizeof(union vnic_rss_cpu),
>  		&rss_cpu_buf_pa, name);
>  	if (!rss_cpu_buf_va)
> diff --git a/lib/librte_pmd_enic/vnic/vnic_dev.c b/lib/librte_pmd_enic/vnic/vnic_dev.c
> index 485123f..682c9c9 100644
> --- a/lib/librte_pmd_enic/vnic/vnic_dev.c
> +++ b/lib/librte_pmd_enic/vnic/vnic_dev.c
> @@ -517,13 +517,14 @@ int vnic_dev_stats_dump(struct vnic_dev *vdev, struct vnic_stats **stats)
>  {
>  	u64 a0, a1;
>  	int wait = 1000;
> -	static instance;
> +	static u32 instance;
>  	char name[NAME_MAX];
>  
>  	if (!vdev->stats) {
> -		snprintf(name, sizeof(name), "vnic_stats-%d", instance++);
> +		snprintf((char *)name, sizeof(name),
> +			"vnic_stats-%d", instance++);
>  		vdev->stats = vdev->alloc_consistent(vdev->priv,
> -			sizeof(struct vnic_stats), &vdev->stats_pa, name);
> +			sizeof(struct vnic_stats), &vdev->stats_pa, (u8 *)name);
>  		if (!vdev->stats)
>  			return -ENOMEM;
>  	}
> @@ -763,7 +764,7 @@ int vnic_dev_notify_set(struct vnic_dev *vdev, u16 intr)
>  	void *notify_addr;
>  	dma_addr_t notify_pa;
>  	char name[NAME_MAX];
> -	static int instance;
> +	static u32 instance;
>  
>  	if (vdev->notify || vdev->notify_pa) {
>  		pr_warn("notify block %p still allocated.\n" \
> @@ -772,10 +773,11 @@ int vnic_dev_notify_set(struct vnic_dev *vdev, u16 intr)
>  	}
>  
>  	if (!vnic_dev_in_reset(vdev)) {
> -		snprintf(name, sizeof(name), "vnic_notify-%d", instance++);
> +		snprintf((char *)name, sizeof(name),
> +			"vnic_notify-%d", instance++);
>  		notify_addr = vdev->alloc_consistent(vdev->priv,
>  			sizeof(struct vnic_devcmd_notify),
> -			&notify_pa, name);
> +			&notify_pa, (u8 *)name);
>  		if (!notify_addr)
>  			return -ENOMEM;
>  	}
> @@ -1028,9 +1030,10 @@ int vnic_dev_classifier(struct vnic_dev *vdev, u8 cmd, u16 *entry,
>  		tlv_size = sizeof(struct filter) +
>  		    sizeof(struct filter_action) +
>  		    2*sizeof(struct filter_tlv);
> -		snprintf(z_name, sizeof(z_name), "vnic_clsf_%d", unique_id++);
> +		snprintf((char *)z_name, sizeof(z_name),
> +			"vnic_clsf_%d", unique_id++);
>  		tlv_va = vdev->alloc_consistent(vdev->priv,
> -			tlv_size, &tlv_pa, z_name);
> +			tlv_size, &tlv_pa, (u8 *)z_name);
>  		if (!tlv_va)
>  			return -ENOMEM;
>  		tlv = tlv_va;
> diff --git a/lib/librte_pmd_enic/vnic/vnic_dev.h b/lib/librte_pmd_enic/vnic/vnic_dev.h
> index 63c26dd..8cc036b 100644
> --- a/lib/librte_pmd_enic/vnic/vnic_dev.h
> +++ b/lib/librte_pmd_enic/vnic/vnic_dev.h
> @@ -100,6 +100,12 @@ struct vnic_stats;
>  void *vnic_dev_priv(struct vnic_dev *vdev);
>  unsigned int vnic_dev_get_res_count(struct vnic_dev *vdev,
>  	enum vnic_res_type type);
> +void vnic_register_cbacks(struct vnic_dev *vdev,
> +	void *(*alloc_consistent)(void *priv, size_t size,
> +		dma_addr_t *dma_handle, u8 *name),
> +	void (*free_consistent)(struct rte_pci_device *hwdev,
> +		size_t size, void *vaddr,
> +		dma_addr_t dma_handle));
>  void __iomem *vnic_dev_get_res(struct vnic_dev *vdev, enum vnic_res_type type,
>  	unsigned int index);
>  dma_addr_t vnic_dev_get_res_bus_addr(struct vnic_dev *vdev,
> @@ -113,6 +119,8 @@ unsigned long vnic_dev_get_res_type_len(struct vnic_dev *vdev,
>  unsigned int vnic_dev_desc_ring_size(struct vnic_dev_ring *ring,
>  	unsigned int desc_count, unsigned int desc_size);
>  void vnic_dev_clear_desc_ring(struct vnic_dev_ring *ring);
> +void vnic_set_hdr_split_size(struct vnic_dev *vdev, u16 size);
> +u16 vnic_get_hdr_split_size(struct vnic_dev *vdev);
>  int vnic_dev_alloc_desc_ring(struct vnic_dev *vdev, struct vnic_dev_ring *ring,
>  	unsigned int desc_count, unsigned int desc_size, unsigned int socket_id,
>  	char *z_name);
> @@ -142,6 +150,7 @@ int vnic_dev_del_addr(struct vnic_dev *vdev, u8 *addr);
>  int vnic_dev_get_mac_addr(struct vnic_dev *vdev, u8 *mac_addr);
>  int vnic_dev_raise_intr(struct vnic_dev *vdev, u16 intr);
>  int vnic_dev_notify_set(struct vnic_dev *vdev, u16 intr);
> +void vnic_dev_set_reset_flag(struct vnic_dev *vdev, int state);
>  int vnic_dev_notify_unset(struct vnic_dev *vdev);
>  int vnic_dev_notify_setcmd(struct vnic_dev *vdev,
>  	void *notify_addr, dma_addr_t notify_pa, u16 intr);
> -- 
> 1.9.1
>
  
Sujith Sankar Dec. 1, 2014, 11:06 a.m. UTC | #5
On 01/12/14 4:27 pm, "Bruce Richardson" <bruce.richardson@intel.com> wrote:

>On Sat, Nov 29, 2014 at 12:47:37PM +0530, Sujith Sankar wrote:
>> This patch fixes the warnings and error reported by clang compiler on
>>Linux.
>> 
>> Reported-by: Bruce Richardson <bruce.richardson@intel.com>
>> Signed-off-by: Sujith Sankar <ssujith@cisco.com>
>
>This PMD now compiles up with clang on FreeBSD. The patch seems rather
>large though,
>are all these changes necessary for clang compilation?

Yes.  This patch has only the changes to fix compilation on clang, and it
modifies enic code only.

>
>On the basis that this fixes the issue though:
>
>Acked-by: Bruce Richardson <bruce.richardson@intel.com>

Thanks Bruce.

>
>> ---
>>  lib/librte_pmd_enic/enic.h          | 40
>>+++++++++++++++++++++++++++++++++++++
>>  lib/librte_pmd_enic/enic_compat.h   |  1 +
>>  lib/librte_pmd_enic/enic_main.c     | 31 +++++++++++++++-------------
>>  lib/librte_pmd_enic/vnic/vnic_dev.c | 19 ++++++++++--------
>>  lib/librte_pmd_enic/vnic/vnic_dev.h |  9 +++++++++
>>  5 files changed, 78 insertions(+), 22 deletions(-)
>> 
>> diff --git a/lib/librte_pmd_enic/enic.h b/lib/librte_pmd_enic/enic.h
>> index 6400d24..f128e64 100644
>> --- a/lib/librte_pmd_enic/enic.h
>> +++ b/lib/librte_pmd_enic/enic.h
>> @@ -154,4 +154,44 @@ static inline struct enic *pmd_priv(struct
>>rte_eth_dev *eth_dev)
>>  	return (struct enic *)eth_dev->data->dev_private;
>>  }
>>  
>> +extern int enic_fdir_add_fltr(struct enic *enic,
>> +	struct rte_fdir_filter *params, u16 queue, u8 drop);
>> +extern int enic_fdir_del_fltr(struct enic *enic,
>> +	struct rte_fdir_filter *params);
>> +extern void enic_free_wq(void *txq);
>> +extern int enic_alloc_intr_resources(struct enic *enic);
>> +extern int enic_setup_finish(struct enic *enic);
>> +extern int enic_alloc_wq(struct enic *enic, uint16_t queue_idx,
>> +	unsigned int socket_id, uint16_t nb_desc);
>> +extern void enic_start_wq(struct enic *enic, uint16_t queue_idx);
>> +extern int enic_stop_wq(struct enic *enic, uint16_t queue_idx);
>> +extern void enic_start_rq(struct enic *enic, uint16_t queue_idx);
>> +extern int enic_stop_rq(struct enic *enic, uint16_t queue_idx);
>> +extern void enic_free_rq(void *rxq);
>> +extern int enic_alloc_rq(struct enic *enic, uint16_t queue_idx,
>> +	unsigned int socket_id, struct rte_mempool *mp,
>> +	uint16_t nb_desc);
>> +extern int enic_set_rss_nic_cfg(struct enic *enic);
>> +extern int enic_set_vnic_res(struct enic *enic);
>> +extern void enic_set_hdr_split_size(struct enic *enic, u16
>>split_hdr_size);
>> +extern int enic_enable(struct enic *enic);
>> +extern int enic_disable(struct enic *enic);
>> +extern void enic_remove(struct enic *enic);
>> +extern int enic_get_link_status(struct enic *enic);
>> +extern void enic_dev_stats_get(struct enic *enic,
>> +	struct rte_eth_stats *r_stats);
>> +extern void enic_dev_stats_clear(struct enic *enic);
>> +extern void enic_add_packet_filter(struct enic *enic);
>> +extern void enic_set_mac_address(struct enic *enic, uint8_t *mac_addr);
>> +extern void enic_del_mac_address(struct enic *enic);
>> +extern unsigned int enic_cleanup_wq(struct enic *enic, struct vnic_wq
>>*wq);
>> +extern int enic_send_pkt(struct enic *enic, struct vnic_wq *wq,
>> +	struct rte_mbuf *tx_pkt, unsigned short len,
>> +	uint8_t sop, uint8_t eop,
>> +	uint16_t ol_flags, uint16_t vlan_tag);
>> +extern int enic_poll(struct vnic_rq *rq, struct rte_mbuf **rx_pkts,
>> +	unsigned int budget, unsigned int *work_done);
>> +extern int enic_probe(struct enic *enic);
>> +extern int enic_clsf_init(struct enic *enic);
>> +extern void enic_clsf_destroy(struct enic *enic);
>>  #endif /* _ENIC_H_ */
>> diff --git a/lib/librte_pmd_enic/enic_compat.h
>>b/lib/librte_pmd_enic/enic_compat.h
>> index b3738ee..b1af838 100644
>> --- a/lib/librte_pmd_enic/enic_compat.h
>> +++ b/lib/librte_pmd_enic/enic_compat.h
>> @@ -37,6 +37,7 @@
>>  #define _ENIC_COMPAT_H_
>>  
>>  #include <stdio.h>
>> +#include <unistd.h>
>>  
>>  #include <rte_atomic.h>
>>  #include <rte_malloc.h>
>> diff --git a/lib/librte_pmd_enic/enic_main.c
>>b/lib/librte_pmd_enic/enic_main.c
>> index 853dd04..4bbf1e4 100644
>> --- a/lib/librte_pmd_enic/enic_main.c
>> +++ b/lib/librte_pmd_enic/enic_main.c
>> @@ -65,17 +65,17 @@ static inline int enic_is_sriov_vf(struct enic
>>*enic)
>>  	return enic->pdev->id.device_id == PCI_DEVICE_ID_CISCO_VIC_ENET_VF;
>>  }
>>  
>> -static int is_zero_addr(char *addr)
>> +static int is_zero_addr(uint8_t *addr)
>>  {
>>  	return !(addr[0] |  addr[1] | addr[2] | addr[3] | addr[4] | addr[5]);
>>  }
>>  
>> -static int is_mcast_addr(char *addr)
>> +static int is_mcast_addr(uint8_t *addr)
>>  {
>>  	return addr[0] & 1;
>>  }
>>  
>> -static int is_eth_addr_valid(char *addr)
>> +static int is_eth_addr_valid(uint8_t *addr)
>>  {
>>  	return !is_mcast_addr(addr) && !is_zero_addr(addr);
>>  }
>> @@ -105,7 +105,8 @@ static const struct rte_memzone
>>*ring_dma_zone_reserve(
>>  	if (mz)
>>  		return mz;
>>  
>> -	return rte_memzone_reserve_aligned(z_name, (uint64_t) ring_size,
>> +	return rte_memzone_reserve_aligned((const char *)z_name,
>> +		(uint64_t) ring_size,
>>  		socket_id, RTE_MEMZONE_1GB, ENIC_ALIGN);
>>  }
>>  
>> @@ -430,14 +431,15 @@ static int enic_rq_indicate_buf(struct vnic_rq
>>*rq,
>>  		&ipv4_csum_ok, &ipv6, &ipv4, &ipv4_fragment,
>>  		&fcs_ok);
>>  
>> -	if (packet_error) {
>> -		dev_err(enic, "packet error\n");
>> -		return;
>> -	}
>> -
>>  	rx_pkt = (struct rte_mbuf *)buf->os_buf;
>>  	buf->os_buf = NULL;
>>  
>> +	if (unlikely(packet_error)) {
>> +		dev_err(enic, "packet error\n");
>> +		rx_pkt->data_len = 0;
>> +		return 0;
>> +	}
>> +
>>  	if (unlikely(skipped)) {
>>  		rx_pkt->data_len = 0;
>>  		return 0;
>> @@ -563,7 +565,8 @@ void *enic_alloc_consistent(void *priv, size_t size,
>>  	const struct rte_memzone *rz;
>>  	*dma_handle = 0;
>>  
>> -	rz = rte_memzone_reserve_aligned(name, size, 0, 0, ENIC_ALIGN);
>> +	rz = rte_memzone_reserve_aligned((const char *)name,
>> +		size, 0, 0, ENIC_ALIGN);
>>  	if (!rz) {
>>  		pr_err("%s : Failed to allocate memory requested for %s",
>>  			__func__, name);
>> @@ -873,9 +876,9 @@ static int enic_set_rsskey(struct enic *enic)
>>  		.key[3].b = {69, 78, 73, 67, 105, 115, 99, 111, 111, 108},
>>  	};
>>  	int err;
>> -	char name[NAME_MAX];
>> +	u8 name[NAME_MAX];
>>  
>> -	snprintf(name, NAME_MAX, "rss_key-%s", enic->bdf_name);
>> +	snprintf((char *)name, NAME_MAX, "rss_key-%s", enic->bdf_name);
>>  	rss_key_buf_va = enic_alloc_consistent(enic, sizeof(union
>>vnic_rss_key),
>>  		&rss_key_buf_pa, name);
>>  	if (!rss_key_buf_va)
>> @@ -899,9 +902,9 @@ static int enic_set_rsscpu(struct enic *enic, u8
>>rss_hash_bits)
>>  	union vnic_rss_cpu *rss_cpu_buf_va = NULL;
>>  	unsigned int i;
>>  	int err;
>> -	char name[NAME_MAX];
>> +	u8 name[NAME_MAX];
>>  
>> -	snprintf(name, NAME_MAX, "rss_cpu-%s", enic->bdf_name);
>> +	snprintf((char *)name, NAME_MAX, "rss_cpu-%s", enic->bdf_name);
>>  	rss_cpu_buf_va = enic_alloc_consistent(enic, sizeof(union
>>vnic_rss_cpu),
>>  		&rss_cpu_buf_pa, name);
>>  	if (!rss_cpu_buf_va)
>> diff --git a/lib/librte_pmd_enic/vnic/vnic_dev.c
>>b/lib/librte_pmd_enic/vnic/vnic_dev.c
>> index 485123f..682c9c9 100644
>> --- a/lib/librte_pmd_enic/vnic/vnic_dev.c
>> +++ b/lib/librte_pmd_enic/vnic/vnic_dev.c
>> @@ -517,13 +517,14 @@ int vnic_dev_stats_dump(struct vnic_dev *vdev,
>>struct vnic_stats **stats)
>>  {
>>  	u64 a0, a1;
>>  	int wait = 1000;
>> -	static instance;
>> +	static u32 instance;
>>  	char name[NAME_MAX];
>>  
>>  	if (!vdev->stats) {
>> -		snprintf(name, sizeof(name), "vnic_stats-%d", instance++);
>> +		snprintf((char *)name, sizeof(name),
>> +			"vnic_stats-%d", instance++);
>>  		vdev->stats = vdev->alloc_consistent(vdev->priv,
>> -			sizeof(struct vnic_stats), &vdev->stats_pa, name);
>> +			sizeof(struct vnic_stats), &vdev->stats_pa, (u8 *)name);
>>  		if (!vdev->stats)
>>  			return -ENOMEM;
>>  	}
>> @@ -763,7 +764,7 @@ int vnic_dev_notify_set(struct vnic_dev *vdev, u16
>>intr)
>>  	void *notify_addr;
>>  	dma_addr_t notify_pa;
>>  	char name[NAME_MAX];
>> -	static int instance;
>> +	static u32 instance;
>>  
>>  	if (vdev->notify || vdev->notify_pa) {
>>  		pr_warn("notify block %p still allocated.\n" \
>> @@ -772,10 +773,11 @@ int vnic_dev_notify_set(struct vnic_dev *vdev,
>>u16 intr)
>>  	}
>>  
>>  	if (!vnic_dev_in_reset(vdev)) {
>> -		snprintf(name, sizeof(name), "vnic_notify-%d", instance++);
>> +		snprintf((char *)name, sizeof(name),
>> +			"vnic_notify-%d", instance++);
>>  		notify_addr = vdev->alloc_consistent(vdev->priv,
>>  			sizeof(struct vnic_devcmd_notify),
>> -			&notify_pa, name);
>> +			&notify_pa, (u8 *)name);
>>  		if (!notify_addr)
>>  			return -ENOMEM;
>>  	}
>> @@ -1028,9 +1030,10 @@ int vnic_dev_classifier(struct vnic_dev *vdev,
>>u8 cmd, u16 *entry,
>>  		tlv_size = sizeof(struct filter) +
>>  		    sizeof(struct filter_action) +
>>  		    2*sizeof(struct filter_tlv);
>> -		snprintf(z_name, sizeof(z_name), "vnic_clsf_%d", unique_id++);
>> +		snprintf((char *)z_name, sizeof(z_name),
>> +			"vnic_clsf_%d", unique_id++);
>>  		tlv_va = vdev->alloc_consistent(vdev->priv,
>> -			tlv_size, &tlv_pa, z_name);
>> +			tlv_size, &tlv_pa, (u8 *)z_name);
>>  		if (!tlv_va)
>>  			return -ENOMEM;
>>  		tlv = tlv_va;
>> diff --git a/lib/librte_pmd_enic/vnic/vnic_dev.h
>>b/lib/librte_pmd_enic/vnic/vnic_dev.h
>> index 63c26dd..8cc036b 100644
>> --- a/lib/librte_pmd_enic/vnic/vnic_dev.h
>> +++ b/lib/librte_pmd_enic/vnic/vnic_dev.h
>> @@ -100,6 +100,12 @@ struct vnic_stats;
>>  void *vnic_dev_priv(struct vnic_dev *vdev);
>>  unsigned int vnic_dev_get_res_count(struct vnic_dev *vdev,
>>  	enum vnic_res_type type);
>> +void vnic_register_cbacks(struct vnic_dev *vdev,
>> +	void *(*alloc_consistent)(void *priv, size_t size,
>> +		dma_addr_t *dma_handle, u8 *name),
>> +	void (*free_consistent)(struct rte_pci_device *hwdev,
>> +		size_t size, void *vaddr,
>> +		dma_addr_t dma_handle));
>>  void __iomem *vnic_dev_get_res(struct vnic_dev *vdev, enum
>>vnic_res_type type,
>>  	unsigned int index);
>>  dma_addr_t vnic_dev_get_res_bus_addr(struct vnic_dev *vdev,
>> @@ -113,6 +119,8 @@ unsigned long vnic_dev_get_res_type_len(struct
>>vnic_dev *vdev,
>>  unsigned int vnic_dev_desc_ring_size(struct vnic_dev_ring *ring,
>>  	unsigned int desc_count, unsigned int desc_size);
>>  void vnic_dev_clear_desc_ring(struct vnic_dev_ring *ring);
>> +void vnic_set_hdr_split_size(struct vnic_dev *vdev, u16 size);
>> +u16 vnic_get_hdr_split_size(struct vnic_dev *vdev);
>>  int vnic_dev_alloc_desc_ring(struct vnic_dev *vdev, struct
>>vnic_dev_ring *ring,
>>  	unsigned int desc_count, unsigned int desc_size, unsigned int
>>socket_id,
>>  	char *z_name);
>> @@ -142,6 +150,7 @@ int vnic_dev_del_addr(struct vnic_dev *vdev, u8
>>*addr);
>>  int vnic_dev_get_mac_addr(struct vnic_dev *vdev, u8 *mac_addr);
>>  int vnic_dev_raise_intr(struct vnic_dev *vdev, u16 intr);
>>  int vnic_dev_notify_set(struct vnic_dev *vdev, u16 intr);
>> +void vnic_dev_set_reset_flag(struct vnic_dev *vdev, int state);
>>  int vnic_dev_notify_unset(struct vnic_dev *vdev);
>>  int vnic_dev_notify_setcmd(struct vnic_dev *vdev,
>>  	void *notify_addr, dma_addr_t notify_pa, u16 intr);
>> -- 
>> 1.9.1
>>
  
Bruce Richardson Dec. 1, 2014, 11:17 a.m. UTC | #6
On Mon, Dec 01, 2014 at 11:06:43AM +0000, Sujith Sankar (ssujith) wrote:
> 
> On 01/12/14 4:27 pm, "Bruce Richardson" <bruce.richardson@intel.com> wrote:
> 
> >On Sat, Nov 29, 2014 at 12:47:37PM +0530, Sujith Sankar wrote:
> >> This patch fixes the warnings and error reported by clang compiler on
> >>Linux.
> >> 
> >> Reported-by: Bruce Richardson <bruce.richardson@intel.com>
> >> Signed-off-by: Sujith Sankar <ssujith@cisco.com>
> >
> >This PMD now compiles up with clang on FreeBSD. The patch seems rather
> >large though,
> >are all these changes necessary for clang compilation?
> 
> Yes.  This patch has only the changes to fix compilation on clang, and it
> modifies enic code only.
> 
> >
> >On the basis that this fixes the issue though:
> >
> >Acked-by: Bruce Richardson <bruce.richardson@intel.com>
> 
> Thanks Bruce.
>
And thank you for providing a patch so quickly! :-)

/Bruce
  
Thomas Monjalon Dec. 1, 2014, 11:25 a.m. UTC | #7
> > This patch fixes the warnings and error reported by clang compiler on Linux.
> > 
> > Reported-by: Bruce Richardson <bruce.richardson@intel.com>
> > Signed-off-by: Sujith Sankar <ssujith@cisco.com>
> 
> This PMD now compiles up with clang on FreeBSD. The patch seems rather large though,
> are all these changes necessary for clang compilation?
> 
> On the basis that this fixes the issue though:
> 
> Acked-by: Bruce Richardson <bruce.richardson@intel.com>

Applied

Thanks
  

Patch

diff --git a/lib/librte_pmd_enic/enic.h b/lib/librte_pmd_enic/enic.h
index 6400d24..f128e64 100644
--- a/lib/librte_pmd_enic/enic.h
+++ b/lib/librte_pmd_enic/enic.h
@@ -154,4 +154,44 @@  static inline struct enic *pmd_priv(struct rte_eth_dev *eth_dev)
 	return (struct enic *)eth_dev->data->dev_private;
 }
 
+extern int enic_fdir_add_fltr(struct enic *enic,
+	struct rte_fdir_filter *params, u16 queue, u8 drop);
+extern int enic_fdir_del_fltr(struct enic *enic,
+	struct rte_fdir_filter *params);
+extern void enic_free_wq(void *txq);
+extern int enic_alloc_intr_resources(struct enic *enic);
+extern int enic_setup_finish(struct enic *enic);
+extern int enic_alloc_wq(struct enic *enic, uint16_t queue_idx,
+	unsigned int socket_id, uint16_t nb_desc);
+extern void enic_start_wq(struct enic *enic, uint16_t queue_idx);
+extern int enic_stop_wq(struct enic *enic, uint16_t queue_idx);
+extern void enic_start_rq(struct enic *enic, uint16_t queue_idx);
+extern int enic_stop_rq(struct enic *enic, uint16_t queue_idx);
+extern void enic_free_rq(void *rxq);
+extern int enic_alloc_rq(struct enic *enic, uint16_t queue_idx,
+	unsigned int socket_id, struct rte_mempool *mp,
+	uint16_t nb_desc);
+extern int enic_set_rss_nic_cfg(struct enic *enic);
+extern int enic_set_vnic_res(struct enic *enic);
+extern void enic_set_hdr_split_size(struct enic *enic, u16 split_hdr_size);
+extern int enic_enable(struct enic *enic);
+extern int enic_disable(struct enic *enic);
+extern void enic_remove(struct enic *enic);
+extern int enic_get_link_status(struct enic *enic);
+extern void enic_dev_stats_get(struct enic *enic,
+	struct rte_eth_stats *r_stats);
+extern void enic_dev_stats_clear(struct enic *enic);
+extern void enic_add_packet_filter(struct enic *enic);
+extern void enic_set_mac_address(struct enic *enic, uint8_t *mac_addr);
+extern void enic_del_mac_address(struct enic *enic);
+extern unsigned int enic_cleanup_wq(struct enic *enic, struct vnic_wq *wq);
+extern int enic_send_pkt(struct enic *enic, struct vnic_wq *wq,
+	struct rte_mbuf *tx_pkt, unsigned short len,
+	uint8_t sop, uint8_t eop,
+	uint16_t ol_flags, uint16_t vlan_tag);
+extern int enic_poll(struct vnic_rq *rq, struct rte_mbuf **rx_pkts,
+	unsigned int budget, unsigned int *work_done);
+extern int enic_probe(struct enic *enic);
+extern int enic_clsf_init(struct enic *enic);
+extern void enic_clsf_destroy(struct enic *enic);
 #endif /* _ENIC_H_ */
diff --git a/lib/librte_pmd_enic/enic_compat.h b/lib/librte_pmd_enic/enic_compat.h
index b3738ee..b1af838 100644
--- a/lib/librte_pmd_enic/enic_compat.h
+++ b/lib/librte_pmd_enic/enic_compat.h
@@ -37,6 +37,7 @@ 
 #define _ENIC_COMPAT_H_
 
 #include <stdio.h>
+#include <unistd.h>
 
 #include <rte_atomic.h>
 #include <rte_malloc.h>
diff --git a/lib/librte_pmd_enic/enic_main.c b/lib/librte_pmd_enic/enic_main.c
index 853dd04..4bbf1e4 100644
--- a/lib/librte_pmd_enic/enic_main.c
+++ b/lib/librte_pmd_enic/enic_main.c
@@ -65,17 +65,17 @@  static inline int enic_is_sriov_vf(struct enic *enic)
 	return enic->pdev->id.device_id == PCI_DEVICE_ID_CISCO_VIC_ENET_VF;
 }
 
-static int is_zero_addr(char *addr)
+static int is_zero_addr(uint8_t *addr)
 {
 	return !(addr[0] |  addr[1] | addr[2] | addr[3] | addr[4] | addr[5]);
 }
 
-static int is_mcast_addr(char *addr)
+static int is_mcast_addr(uint8_t *addr)
 {
 	return addr[0] & 1;
 }
 
-static int is_eth_addr_valid(char *addr)
+static int is_eth_addr_valid(uint8_t *addr)
 {
 	return !is_mcast_addr(addr) && !is_zero_addr(addr);
 }
@@ -105,7 +105,8 @@  static const struct rte_memzone *ring_dma_zone_reserve(
 	if (mz)
 		return mz;
 
-	return rte_memzone_reserve_aligned(z_name, (uint64_t) ring_size,
+	return rte_memzone_reserve_aligned((const char *)z_name,
+		(uint64_t) ring_size,
 		socket_id, RTE_MEMZONE_1GB, ENIC_ALIGN);
 }
 
@@ -430,14 +431,15 @@  static int enic_rq_indicate_buf(struct vnic_rq *rq,
 		&ipv4_csum_ok, &ipv6, &ipv4, &ipv4_fragment,
 		&fcs_ok);
 
-	if (packet_error) {
-		dev_err(enic, "packet error\n");
-		return;
-	}
-
 	rx_pkt = (struct rte_mbuf *)buf->os_buf;
 	buf->os_buf = NULL;
 
+	if (unlikely(packet_error)) {
+		dev_err(enic, "packet error\n");
+		rx_pkt->data_len = 0;
+		return 0;
+	}
+
 	if (unlikely(skipped)) {
 		rx_pkt->data_len = 0;
 		return 0;
@@ -563,7 +565,8 @@  void *enic_alloc_consistent(void *priv, size_t size,
 	const struct rte_memzone *rz;
 	*dma_handle = 0;
 
-	rz = rte_memzone_reserve_aligned(name, size, 0, 0, ENIC_ALIGN);
+	rz = rte_memzone_reserve_aligned((const char *)name,
+		size, 0, 0, ENIC_ALIGN);
 	if (!rz) {
 		pr_err("%s : Failed to allocate memory requested for %s",
 			__func__, name);
@@ -873,9 +876,9 @@  static int enic_set_rsskey(struct enic *enic)
 		.key[3].b = {69, 78, 73, 67, 105, 115, 99, 111, 111, 108},
 	};
 	int err;
-	char name[NAME_MAX];
+	u8 name[NAME_MAX];
 
-	snprintf(name, NAME_MAX, "rss_key-%s", enic->bdf_name);
+	snprintf((char *)name, NAME_MAX, "rss_key-%s", enic->bdf_name);
 	rss_key_buf_va = enic_alloc_consistent(enic, sizeof(union vnic_rss_key),
 		&rss_key_buf_pa, name);
 	if (!rss_key_buf_va)
@@ -899,9 +902,9 @@  static int enic_set_rsscpu(struct enic *enic, u8 rss_hash_bits)
 	union vnic_rss_cpu *rss_cpu_buf_va = NULL;
 	unsigned int i;
 	int err;
-	char name[NAME_MAX];
+	u8 name[NAME_MAX];
 
-	snprintf(name, NAME_MAX, "rss_cpu-%s", enic->bdf_name);
+	snprintf((char *)name, NAME_MAX, "rss_cpu-%s", enic->bdf_name);
 	rss_cpu_buf_va = enic_alloc_consistent(enic, sizeof(union vnic_rss_cpu),
 		&rss_cpu_buf_pa, name);
 	if (!rss_cpu_buf_va)
diff --git a/lib/librte_pmd_enic/vnic/vnic_dev.c b/lib/librte_pmd_enic/vnic/vnic_dev.c
index 485123f..682c9c9 100644
--- a/lib/librte_pmd_enic/vnic/vnic_dev.c
+++ b/lib/librte_pmd_enic/vnic/vnic_dev.c
@@ -517,13 +517,14 @@  int vnic_dev_stats_dump(struct vnic_dev *vdev, struct vnic_stats **stats)
 {
 	u64 a0, a1;
 	int wait = 1000;
-	static instance;
+	static u32 instance;
 	char name[NAME_MAX];
 
 	if (!vdev->stats) {
-		snprintf(name, sizeof(name), "vnic_stats-%d", instance++);
+		snprintf((char *)name, sizeof(name),
+			"vnic_stats-%d", instance++);
 		vdev->stats = vdev->alloc_consistent(vdev->priv,
-			sizeof(struct vnic_stats), &vdev->stats_pa, name);
+			sizeof(struct vnic_stats), &vdev->stats_pa, (u8 *)name);
 		if (!vdev->stats)
 			return -ENOMEM;
 	}
@@ -763,7 +764,7 @@  int vnic_dev_notify_set(struct vnic_dev *vdev, u16 intr)
 	void *notify_addr;
 	dma_addr_t notify_pa;
 	char name[NAME_MAX];
-	static int instance;
+	static u32 instance;
 
 	if (vdev->notify || vdev->notify_pa) {
 		pr_warn("notify block %p still allocated.\n" \
@@ -772,10 +773,11 @@  int vnic_dev_notify_set(struct vnic_dev *vdev, u16 intr)
 	}
 
 	if (!vnic_dev_in_reset(vdev)) {
-		snprintf(name, sizeof(name), "vnic_notify-%d", instance++);
+		snprintf((char *)name, sizeof(name),
+			"vnic_notify-%d", instance++);
 		notify_addr = vdev->alloc_consistent(vdev->priv,
 			sizeof(struct vnic_devcmd_notify),
-			&notify_pa, name);
+			&notify_pa, (u8 *)name);
 		if (!notify_addr)
 			return -ENOMEM;
 	}
@@ -1028,9 +1030,10 @@  int vnic_dev_classifier(struct vnic_dev *vdev, u8 cmd, u16 *entry,
 		tlv_size = sizeof(struct filter) +
 		    sizeof(struct filter_action) +
 		    2*sizeof(struct filter_tlv);
-		snprintf(z_name, sizeof(z_name), "vnic_clsf_%d", unique_id++);
+		snprintf((char *)z_name, sizeof(z_name),
+			"vnic_clsf_%d", unique_id++);
 		tlv_va = vdev->alloc_consistent(vdev->priv,
-			tlv_size, &tlv_pa, z_name);
+			tlv_size, &tlv_pa, (u8 *)z_name);
 		if (!tlv_va)
 			return -ENOMEM;
 		tlv = tlv_va;
diff --git a/lib/librte_pmd_enic/vnic/vnic_dev.h b/lib/librte_pmd_enic/vnic/vnic_dev.h
index 63c26dd..8cc036b 100644
--- a/lib/librte_pmd_enic/vnic/vnic_dev.h
+++ b/lib/librte_pmd_enic/vnic/vnic_dev.h
@@ -100,6 +100,12 @@  struct vnic_stats;
 void *vnic_dev_priv(struct vnic_dev *vdev);
 unsigned int vnic_dev_get_res_count(struct vnic_dev *vdev,
 	enum vnic_res_type type);
+void vnic_register_cbacks(struct vnic_dev *vdev,
+	void *(*alloc_consistent)(void *priv, size_t size,
+		dma_addr_t *dma_handle, u8 *name),
+	void (*free_consistent)(struct rte_pci_device *hwdev,
+		size_t size, void *vaddr,
+		dma_addr_t dma_handle));
 void __iomem *vnic_dev_get_res(struct vnic_dev *vdev, enum vnic_res_type type,
 	unsigned int index);
 dma_addr_t vnic_dev_get_res_bus_addr(struct vnic_dev *vdev,
@@ -113,6 +119,8 @@  unsigned long vnic_dev_get_res_type_len(struct vnic_dev *vdev,
 unsigned int vnic_dev_desc_ring_size(struct vnic_dev_ring *ring,
 	unsigned int desc_count, unsigned int desc_size);
 void vnic_dev_clear_desc_ring(struct vnic_dev_ring *ring);
+void vnic_set_hdr_split_size(struct vnic_dev *vdev, u16 size);
+u16 vnic_get_hdr_split_size(struct vnic_dev *vdev);
 int vnic_dev_alloc_desc_ring(struct vnic_dev *vdev, struct vnic_dev_ring *ring,
 	unsigned int desc_count, unsigned int desc_size, unsigned int socket_id,
 	char *z_name);
@@ -142,6 +150,7 @@  int vnic_dev_del_addr(struct vnic_dev *vdev, u8 *addr);
 int vnic_dev_get_mac_addr(struct vnic_dev *vdev, u8 *mac_addr);
 int vnic_dev_raise_intr(struct vnic_dev *vdev, u16 intr);
 int vnic_dev_notify_set(struct vnic_dev *vdev, u16 intr);
+void vnic_dev_set_reset_flag(struct vnic_dev *vdev, int state);
 int vnic_dev_notify_unset(struct vnic_dev *vdev);
 int vnic_dev_notify_setcmd(struct vnic_dev *vdev,
 	void *notify_addr, dma_addr_t notify_pa, u16 intr);