[dpdk-dev] [PATCH 23/28] net/ixgbe: use eal I/O device memory read/write API
Jianbo Liu
jianbo.liu at linaro.org
Thu Dec 15 09:37:12 CET 2016
On 14 December 2016 at 09:55, Jerin Jacob
<jerin.jacob at caviumnetworks.com> wrote:
> From: Santosh Shukla <santosh.shukla at caviumnetworks.com>
>
> Replace the raw I/O device memory read/write access with eal
> abstraction for I/O device memory read/write access to fix
> portability issues across different architectures.
>
> Signed-off-by: Santosh Shukla <santosh.shukla at caviumnetworks.com>
> Signed-off-by: Jerin Jacob <jerin.jacob at caviumnetworks.com>
> CC: Helin Zhang <helin.zhang at intel.com>
> CC: Konstantin Ananyev <konstantin.ananyev at intel.com>
> ---
> drivers/net/ixgbe/base/ixgbe_osdep.h | 13 +++++++++----
> 1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/ixgbe/base/ixgbe_osdep.h b/drivers/net/ixgbe/base/ixgbe_osdep.h
> index 77f0af5..9d16c21 100644
> --- a/drivers/net/ixgbe/base/ixgbe_osdep.h
> +++ b/drivers/net/ixgbe/base/ixgbe_osdep.h
> @@ -44,6 +44,7 @@
> #include <rte_cycles.h>
> #include <rte_log.h>
> #include <rte_byteorder.h>
> +#include <rte_io.h>
>
> #include "../ixgbe_logs.h"
> #include "../ixgbe_bypass_defines.h"
> @@ -121,16 +122,20 @@ typedef int bool;
>
> #define prefetch(x) rte_prefetch0(x)
>
> -#define IXGBE_PCI_REG(reg) (*((volatile uint32_t *)(reg)))
> +#define IXGBE_PCI_REG(reg) ({ \
> + uint32_t __val; \
> + __val = rte_readl(reg); \
> + __val; \
> +})
>
> static inline uint32_t ixgbe_read_addr(volatile void* addr)
> {
> return rte_le_to_cpu_32(IXGBE_PCI_REG(addr));
> }
>
> -#define IXGBE_PCI_REG_WRITE(reg, value) do { \
> - IXGBE_PCI_REG((reg)) = (rte_cpu_to_le_32(value)); \
> -} while(0)
> +#define IXGBE_PCI_REG_WRITE(reg, value) ({ \
> + rte_writel(rte_cpu_to_le_32(value), reg); \
> +})
>
memory barrier operation is put inside IXGBE_PCI_REG_READ/WRITE in
your change, but I found rte_*mb is called before these macros in some
places.
Can you remove all these redundant calls? And please do the same
checking for other drivers.
> #define IXGBE_PCI_REG_ADDR(hw, reg) \
> ((volatile uint32_t *)((char *)(hw)->hw_addr + (reg)))
> --
> 2.5.5
>
More information about the dev
mailing list