net/af_packet: set default blocksize to pagesize

Message ID 20190624143200.10369-1-kkanas@marvell.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers
Series net/af_packet: set default blocksize to pagesize |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/intel-Performance-Testing success Performance Testing PASS
ci/mellanox-Performance-Testing success Performance Testing PASS
ci/Intel-compilation fail Compilation issues

Commit Message

Krzysztof Kanas June 24, 2019, 2:32 p.m. UTC
  From: Krzysztof Kanas <kkanas@marvell.com>

Kernel validates block size to be aligned to page size. Code works on
platforms with page size 4k, but on others e.g. Arm64 fails with default
parameters.

Signed-off-by: Krzysztof Kanas <kkanas@marvell.com>
---
 drivers/net/af_packet/rte_eth_af_packet.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
  

Comments

Ferruh Yigit June 27, 2019, 6:25 p.m. UTC | #1
On 6/24/2019 3:32 PM, kkanas@marvell.com wrote:
> From: Krzysztof Kanas <kkanas@marvell.com>
> 
> Kernel validates block size to be aligned to page size. Code works on
> platforms with page size 4k, but on others e.g. Arm64 fails with default
> parameters.

What is the pagesize in arm64?

> 
> Signed-off-by: Krzysztof Kanas <kkanas@marvell.com>
> ---
>  drivers/net/af_packet/rte_eth_af_packet.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c
> index 4a660d5f013f..ec3d2cbb5202 100644
> --- a/drivers/net/af_packet/rte_eth_af_packet.c
> +++ b/drivers/net/af_packet/rte_eth_af_packet.c
> @@ -32,7 +32,6 @@
>  #define ETH_AF_PACKET_FRAMECOUNT_ARG	"framecnt"
>  #define ETH_AF_PACKET_QDISC_BYPASS_ARG	"qdisc_bypass"
>  
> -#define DFLT_BLOCK_SIZE		(1 << 12)
>  #define DFLT_FRAME_SIZE		(1 << 11)
>  #define DFLT_FRAME_COUNT	(1 << 9)
>  
> @@ -811,7 +810,7 @@ rte_eth_from_packet(struct rte_vdev_device *dev,
>  	struct rte_kvargs_pair *pair = NULL;
>  	unsigned k_idx;
>  	unsigned int blockcount;
> -	unsigned int blocksize = DFLT_BLOCK_SIZE;
> +	unsigned int blocksize;
>  	unsigned int framesize = DFLT_FRAME_SIZE;
>  	unsigned int framecount = DFLT_FRAME_COUNT;
>  	unsigned int qpairs = 1;
> @@ -821,6 +820,7 @@ rte_eth_from_packet(struct rte_vdev_device *dev,
>  	if (*sockfd < 0)
>  		return -1;
>  
> +	blocksize = getpagesize();
>  	/*
>  	 * Walk arguments for configurable settings
>  	 */
>
  
Krzysztof Kanas July 3, 2019, 9:42 a.m. UTC | #2
On 19-06-27 19:25, Ferruh Yigit wrote:
> External Email
> 
> ----------------------------------------------------------------------
> On 6/24/2019 3:32 PM, kkanas@marvell.com wrote:
> > From: Krzysztof Kanas <kkanas@marvell.com>
> > 
> > Kernel validates block size to be aligned to page size. Code works on
> > platforms with page size 4k, but on others e.g. Arm64 fails with default
> > parameters.
> 
> What is the pagesize in arm64?

On aarch64 it is configurable. Linux kernel, supports sizes 4k, 16k, 64k 
see ARM64_64K_PAGES in arch/arm64/Kconfig.

> 
> > 
> > Signed-off-by: Krzysztof Kanas <kkanas@marvell.com>
> > ---
> >  drivers/net/af_packet/rte_eth_af_packet.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c
> > index 4a660d5f013f..ec3d2cbb5202 100644
> > --- a/drivers/net/af_packet/rte_eth_af_packet.c
> > +++ b/drivers/net/af_packet/rte_eth_af_packet.c
> > @@ -32,7 +32,6 @@
> >  #define ETH_AF_PACKET_FRAMECOUNT_ARG	"framecnt"
> >  #define ETH_AF_PACKET_QDISC_BYPASS_ARG	"qdisc_bypass"
> >  
> > -#define DFLT_BLOCK_SIZE		(1 << 12)
> >  #define DFLT_FRAME_SIZE		(1 << 11)
> >  #define DFLT_FRAME_COUNT	(1 << 9)
> >  
> > @@ -811,7 +810,7 @@ rte_eth_from_packet(struct rte_vdev_device *dev,
> >  	struct rte_kvargs_pair *pair = NULL;
> >  	unsigned k_idx;
> >  	unsigned int blockcount;
> > -	unsigned int blocksize = DFLT_BLOCK_SIZE;
> > +	unsigned int blocksize;
> >  	unsigned int framesize = DFLT_FRAME_SIZE;
> >  	unsigned int framecount = DFLT_FRAME_COUNT;
> >  	unsigned int qpairs = 1;
> > @@ -821,6 +820,7 @@ rte_eth_from_packet(struct rte_vdev_device *dev,
> >  	if (*sockfd < 0)
> >  		return -1;
> >  
> > +	blocksize = getpagesize();
> >  	/*
> >  	 * Walk arguments for configurable settings
> >  	 */
> > 
>
  
Ferruh Yigit July 3, 2019, 5:23 p.m. UTC | #3
On 6/24/2019 3:32 PM, kkanas@marvell.com wrote:
> From: Krzysztof Kanas <kkanas@marvell.com>
> 
> Kernel validates block size to be aligned to page size. Code works on
> platforms with page size 4k, but on others e.g. Arm64 fails with default
> parameters.
> 
> Signed-off-by: Krzysztof Kanas <kkanas@marvell.com>

Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>

Applied to dpdk-next-net/master, thanks.
  

Patch

diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c
index 4a660d5f013f..ec3d2cbb5202 100644
--- a/drivers/net/af_packet/rte_eth_af_packet.c
+++ b/drivers/net/af_packet/rte_eth_af_packet.c
@@ -32,7 +32,6 @@ 
 #define ETH_AF_PACKET_FRAMECOUNT_ARG	"framecnt"
 #define ETH_AF_PACKET_QDISC_BYPASS_ARG	"qdisc_bypass"
 
-#define DFLT_BLOCK_SIZE		(1 << 12)
 #define DFLT_FRAME_SIZE		(1 << 11)
 #define DFLT_FRAME_COUNT	(1 << 9)
 
@@ -811,7 +810,7 @@  rte_eth_from_packet(struct rte_vdev_device *dev,
 	struct rte_kvargs_pair *pair = NULL;
 	unsigned k_idx;
 	unsigned int blockcount;
-	unsigned int blocksize = DFLT_BLOCK_SIZE;
+	unsigned int blocksize;
 	unsigned int framesize = DFLT_FRAME_SIZE;
 	unsigned int framecount = DFLT_FRAME_COUNT;
 	unsigned int qpairs = 1;
@@ -821,6 +820,7 @@  rte_eth_from_packet(struct rte_vdev_device *dev,
 	if (*sockfd < 0)
 		return -1;
 
+	blocksize = getpagesize();
 	/*
 	 * Walk arguments for configurable settings
 	 */