DPDK-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH v2] nfp: extend speed capabilities advertised
From: Ferruh Yigit @ 2016-12-20 13:44 UTC (permalink / raw)
  To: Alejandro Lucero, dev
In-Reply-To: <1482238365-28082-1-git-send-email-alejandro.lucero@netronome.com>

On 12/20/2016 12:52 PM, Alejandro Lucero wrote:
> NFP supports more speeds than just 40 and 100GB, which were
> what was advertised before.
> 
> v2: add feature to nfp.ini
> 
> Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
> ---

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

^ permalink raw reply

* Re: [PATCH v3 02/12] eal/bus: introduce bus abstraction
From: Shreyansh Jain @ 2016-12-20 13:51 UTC (permalink / raw)
  To: Jan Blunck
  Cc: dev@dpdk.org, David Marchand, Thomas Monjalon, Ferruh Yigit,
	jianbo.liu@linaro.org
In-Reply-To: <CALe+Z00LYrfzQE1916LoOqytcFjJ1xRXFL-wLvX03eham11Vvw@mail.gmail.com>

> -----Original Message-----
> From: jblunck@gmail.com [mailto:jblunck@gmail.com] On Behalf Of Jan Blunck
> Sent: Tuesday, December 20, 2016 6:47 PM
> To: Shreyansh Jain <shreyansh.jain@nxp.com>
> Cc: dev@dpdk.org; David Marchand <david.marchand@6wind.com>; Thomas Monjalon
> <thomas.monjalon@6wind.com>; Ferruh Yigit <ferruh.yigit@intel.com>;
> jianbo.liu@linaro.org
> Subject: Re: [dpdk-dev] [PATCH v3 02/12] eal/bus: introduce bus abstraction
> 
> On Fri, Dec 16, 2016 at 2:10 PM, Shreyansh Jain <shreyansh.jain@nxp.com>
> wrote:
> > This patch introduces the rte_bus abstraction for devices and drivers in
> > EAL framework. The model is:
> >  - One or more buses are connected to a CPU (or core)
> >  - One or more devices are conneted to a Bus
> >  - Drivers are running instances which manage one or more devices
> >  - Bus is responsible for identifying devices (and interrupt propogation)
> >  - Driver is responsible for initializing the device
> >
> > This patch adds a 'rte_bus' class which rte_driver and rte_device refer.
> > This way, each device (rte_xxx_device) would have reference to the bus
> > it is based on. As well as, each driver (rte_xxx_driver) would have link
> > to the bus and devices on it for servicing.
> >
> >                                   __ rte_bus_list
> >                                  /
> >                      +----------'---+
> >                      |rte_bus       |
> >                      | driver_list------> List of rte_bus specific
> >                      | device_list----    devices
> >                      |              | `-> List of rte_bus associated
> >                      |              |     drivers
> >                      +--|------|----+
> >               _________/        \_________
> >     +--------/----+                     +-\---------------+
> >     |rte_device   |                     |rte_driver       |
> >     | rte_bus     |                     | rte_bus         |
> >     | rte_driver  |                     | ...             |
> >     | ...         |                     +---------...-----+
> >     |             |                               |||
> >     +---||--------+                               |||
> >         ||                                        |||
> >         | \                                        \\\
> >         |  \_____________                           \\\
> >         |                \                          |||
> >  +------|---------+ +----|----------+               |||
> >  |rte_pci_device  | |rte_xxx_device |               |||
> >  | ....           | | ....          |               |||
> >  +----------------+ +---------------+              / | \
> >                                                   /  |  \
> >                             _____________________/  /    \
> >                            /                    ___/      \
> >             +-------------'--+    +------------'---+    +--'------------+
> >             |rte_pci_driver  |    |rte_vdev_driver |    |rte_xxx_driver |
> >             | ....           |    | ....           |    | ....          |
> >             +----------------+    +----------------+    +---------------+
> >
> > This patch only enables the bus references on rte_driver and rte_driver.
> > EAL wide global device and driver list continue to exist until an instance
> > of bus is added in subsequent patches.
> >
> > This patch also introduces RTE_REGISTER_BUS macro on the lines of
> > RTE_PMD_REGISTER_XXX. Key difference is that the constructor priority has
> > been explicitly set to 101 so as to execute bus registration before PMD.
> >
> > Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
> >
> > --
> > v2:
> >  - fix bsdapp compilation issue because of missing export symbols in map
> >    file
> > ---
> >  lib/librte_eal/bsdapp/eal/Makefile              |   1 +
> >  lib/librte_eal/bsdapp/eal/rte_eal_version.map   |  15 ++
> >  lib/librte_eal/common/Makefile                  |   2 +-
> >  lib/librte_eal/common/eal_common_bus.c          | 192
> ++++++++++++++++++++++++
> >  lib/librte_eal/common/include/rte_bus.h         | 174
> +++++++++++++++++++++
> >  lib/librte_eal/common/include/rte_dev.h         |   2 +
> >  lib/librte_eal/linuxapp/eal/Makefile            |   1 +
> >  lib/librte_eal/linuxapp/eal/rte_eal_version.map |  15 ++
> >  8 files changed, 401 insertions(+), 1 deletion(-)
> >  create mode 100644 lib/librte_eal/common/eal_common_bus.c
> >  create mode 100644 lib/librte_eal/common/include/rte_bus.h
> >
> > diff --git a/lib/librte_eal/bsdapp/eal/Makefile
> b/lib/librte_eal/bsdapp/eal/Makefile
> > index a15b762..cce99f7 100644
> > --- a/lib/librte_eal/bsdapp/eal/Makefile
> > +++ b/lib/librte_eal/bsdapp/eal/Makefile
> > @@ -78,6 +78,7 @@ SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) +=
> eal_common_cpuflags.c
> >  SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_string_fns.c
> >  SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_hexdump.c
> >  SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_devargs.c
> > +SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_bus.c
> >  SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_dev.c
> >  SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_options.c
> >  SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_thread.c
> > diff --git a/lib/librte_eal/bsdapp/eal/rte_eal_version.map
> b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
> > index 2f81f7c..23fc1c1 100644
> > --- a/lib/librte_eal/bsdapp/eal/rte_eal_version.map
> > +++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
> > @@ -174,3 +174,18 @@ DPDK_16.11 {
> >         rte_eal_vdrv_unregister;
> >
> >  } DPDK_16.07;
> > +
> > +DPDK_17.02 {
> > +       global:
> > +
> > +       rte_bus_list;
> > +       rte_eal_bus_add_device;
> > +       rte_eal_bus_add_driver;
> > +       rte_eal_get_bus;
> > +       rte_eal_bus_dump;
> > +       rte_eal_bus_register;
> > +       rte_eal_bus_remove_device;
> > +       rte_eal_bus_remove_driver;
> > +       rte_eal_bus_unregister;
> > +
> > +} DPDK_16.11;
> > diff --git a/lib/librte_eal/common/Makefile
> b/lib/librte_eal/common/Makefile
> > index a92c984..0c39414 100644
> > --- a/lib/librte_eal/common/Makefile
> > +++ b/lib/librte_eal/common/Makefile
> > @@ -38,7 +38,7 @@ INC += rte_per_lcore.h rte_random.h
> >  INC += rte_tailq.h rte_interrupts.h rte_alarm.h
> >  INC += rte_string_fns.h rte_version.h
> >  INC += rte_eal_memconfig.h rte_malloc_heap.h
> > -INC += rte_hexdump.h rte_devargs.h rte_dev.h rte_vdev.h
> > +INC += rte_hexdump.h rte_devargs.h rte_bus.h rte_dev.h rte_vdev.h
> >  INC += rte_pci_dev_feature_defs.h rte_pci_dev_features.h
> >  INC += rte_malloc.h rte_keepalive.h rte_time.h
> >
> > diff --git a/lib/librte_eal/common/eal_common_bus.c
> b/lib/librte_eal/common/eal_common_bus.c
> > new file mode 100644
> > index 0000000..612f64e
> > --- /dev/null
> > +++ b/lib/librte_eal/common/eal_common_bus.c
> > @@ -0,0 +1,192 @@
> > +/*-
> > + *   BSD LICENSE
> > + *
> > + *   Copyright(c) 2016 NXP
> > + *   All rights reserved.
> > + *
> > + *   Redistribution and use in source and binary forms, with or without
> > + *   modification, are permitted provided that the following conditions
> > + *   are met:
> > + *
> > + *     * Redistributions of source code must retain the above copyright
> > + *       notice, this list of conditions and the following disclaimer.
> > + *     * Redistributions in binary form must reproduce the above copyright
> > + *       notice, this list of conditions and the following disclaimer in
> > + *       the documentation and/or other materials provided with the
> > + *       distribution.
> > + *     * Neither the name of NXP nor the names of its
> > + *       contributors may be used to endorse or promote products derived
> > + *       from this software without specific prior written permission.
> > + *
> > + *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> > + *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> > + *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> > + *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> > + *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> > + *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> > + *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> > + *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> > + *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> > + *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> > + *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> > + */
> > +
> > +#include <stdio.h>
> > +#include <string.h>
> > +#include <inttypes.h>
> > +#include <sys/queue.h>
> > +
> > +#include <rte_bus.h>
> > +#include <rte_devargs.h>
> > +#include <rte_debug.h>
> > +
> > +#include "eal_private.h"
> > +
> > +struct rte_bus_list rte_bus_list =
> > +       TAILQ_HEAD_INITIALIZER(rte_bus_list);
> > +
> > +/** @internal
> > + * Add a device to a bus.
> > + */
> > +void
> > +rte_eal_bus_add_device(struct rte_bus *bus, struct rte_device *dev)
> > +{
> > +       RTE_VERIFY(bus);
> > +       RTE_VERIFY(dev);
> > +
> > +       TAILQ_INSERT_TAIL(&bus->device_list, dev, next);
> > +       dev->bus = bus;
> > +}
> > +
> > +/** @internal
> > + * Remove a device from its bus.
> > + */
> > +void
> > +rte_eal_bus_remove_device(struct rte_device *dev)
> > +{
> > +       struct rte_bus *bus;
> > +
> > +       RTE_VERIFY(dev);
> > +       RTE_VERIFY(dev->bus);
> > +
> > +       bus = dev->bus;
> > +       TAILQ_REMOVE(&bus->device_list, dev, next);
> > +       dev->bus = NULL;
> > +}
> > +
> > +/** @internal
> > + * Associate a driver with a bus.
> > + */
> > +void
> > +rte_eal_bus_add_driver(struct rte_bus *bus, struct rte_driver *drv)
> > +{
> > +       RTE_VERIFY(bus);
> > +       RTE_VERIFY(drv);
> > +
> > +       TAILQ_INSERT_TAIL(&bus->driver_list, drv, next);
> > +       drv->bus = bus;
> > +}
> > +
> > +/** @internal
> > + * Disassociate a driver from bus.
> > + */
> > +void
> > +rte_eal_bus_remove_driver(struct rte_driver *drv)
> > +{
> > +       struct rte_bus *bus;
> > +
> > +       RTE_VERIFY(drv);
> > +       RTE_VERIFY(drv->bus);
> > +
> > +       bus = drv->bus;
> > +       TAILQ_REMOVE(&bus->driver_list, drv, next);
> > +       drv->bus = NULL;
> > +}
> > +
> > +/**
> > + * Get the bus handle using its name
> > + */
> > +struct rte_bus *
> > +rte_eal_get_bus(const char *bus_name)
> > +{
> > +       struct rte_bus *bus;
> > +
> > +       RTE_VERIFY(bus_name);
> > +
> > +       TAILQ_FOREACH(bus, &rte_bus_list, next) {
> > +               RTE_VERIFY(bus->name);
> > +
> > +               if (!strcmp(bus_name, bus->name)) {
> > +                       RTE_LOG(DEBUG, EAL, "Returning Bus object %p\n",
> bus);
> > +                       return bus;
> > +               }
> > +       }
> > +
> > +       /* Unable to find bus requested */
> > +       return NULL;
> > +}
> > +
> > +/* register a bus */
> > +void
> > +rte_eal_bus_register(struct rte_bus *bus)
> > +{
> > +       RTE_VERIFY(bus);
> > +       RTE_VERIFY(bus->name && strlen(bus->name));
> > +
> > +       /* Initialize the driver and device list associated with the bus */
> > +       TAILQ_INIT(&(bus->driver_list));
> > +       TAILQ_INIT(&(bus->device_list));
> > +
> > +       TAILQ_INSERT_TAIL(&rte_bus_list, bus, next);
> > +       RTE_LOG(INFO, EAL, "Registered [%s] bus.\n", bus->name);
> > +}
> > +
> > +/* unregister a bus */
> > +void
> > +rte_eal_bus_unregister(struct rte_bus *bus)
> > +{
> > +       /* All devices and drivers associated with the bus should have been
> > +        * 'device->uninit' and 'driver->remove()' already.
> > +        */
> > +       RTE_VERIFY(TAILQ_EMPTY(&(bus->driver_list)));
> > +       RTE_VERIFY(TAILQ_EMPTY(&(bus->device_list)));
> > +
> > +       /* TODO: For each device, call its rte_device->driver->remove()
> > +        * and rte_eal_bus_remove_driver()
> > +        */
> > +
> > +       TAILQ_REMOVE(&rte_bus_list, bus, next);
> > +       RTE_LOG(INFO, EAL, "Unregistered [%s] bus.\n", bus->name);
> > +}
> > +
> > +/* dump one bus info */
> > +static int
> > +bus_dump_one(FILE *f, struct rte_bus *bus)
> > +{
> > +       int ret;
> > +
> > +       /* For now, dump only the bus name */
> > +       ret = fprintf(f, " %s\n", bus->name);
> > +
> > +       /* Error in case of inability in writing to stream */
> > +       if (ret < 0)
> > +               return ret;
> > +
> > +       return 0;
> > +}
> > +
> > +void
> > +rte_eal_bus_dump(FILE *f)
> > +{
> > +       int ret;
> > +       struct rte_bus *bus;
> > +
> > +       TAILQ_FOREACH(bus, &rte_bus_list, next) {
> > +               ret = bus_dump_one(f, bus);
> > +               if (ret) {
> > +                       RTE_LOG(ERR, EAL, "Unable to write to stream
> (%d)\n",
> > +                               ret);
> > +                       break;
> > +               }
> > +       }
> > +}
> > diff --git a/lib/librte_eal/common/include/rte_bus.h
> b/lib/librte_eal/common/include/rte_bus.h
> > new file mode 100644
> > index 0000000..f0297a9
> > --- /dev/null
> > +++ b/lib/librte_eal/common/include/rte_bus.h
> > @@ -0,0 +1,174 @@
> > +/*-
> > + *   BSD LICENSE
> > + *
> > + *   Copyright(c) 2016 NXP
> > + *   All rights reserved.
> > + *
> > + *   Redistribution and use in source and binary forms, with or without
> > + *   modification, are permitted provided that the following conditions
> > + *   are met:
> > + *
> > + *     * Redistributions of source code must retain the above copyright
> > + *       notice, this list of conditions and the following disclaimer.
> > + *     * Redistributions in binary form must reproduce the above copyright
> > + *       notice, this list of conditions and the following disclaimer in
> > + *       the documentation and/or other materials provided with the
> > + *       distribution.
> > + *     * Neither the name of NXP nor the names of its
> > + *       contributors may be used to endorse or promote products derived
> > + *       from this software without specific prior written permission.
> > + *
> > + *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> > + *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> > + *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> > + *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> > + *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> > + *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> > + *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> > + *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> > + *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> > + *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> > + *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> > + */
> > +
> > +#ifndef _RTE_BUS_H_
> > +#define _RTE_BUS_H_
> > +
> > +/**
> > + * @file
> > + *
> > + * RTE PMD Bus Abstraction interfaces
> > + *
> > + * This file exposes APIs and Interfaces for Bus Abstraction over the
> devices
> > + * drivers in EAL.
> > + */
> > +
> > +#ifdef __cplusplus
> > +extern "C" {
> > +#endif
> > +
> > +#include <stdio.h>
> > +#include <sys/queue.h>
> > +
> > +#include <rte_log.h>
> > +#include <rte_dev.h>
> > +
> > +/** Double linked list of buses */
> > +TAILQ_HEAD(rte_bus_list, rte_bus);
> > +
> > +/* Global Bus list */
> > +extern struct rte_bus_list rte_bus_list;
> > +
> > +struct rte_bus {
> > +       TAILQ_ENTRY(rte_bus) next;   /**< Next bus object in linked list */
> > +       struct rte_driver_list driver_list;
> > +                                    /**< List of all drivers on bus */
> > +       struct rte_device_list device_list;
> > +                                    /**< List of all devices on bus */
> > +       const char *name;            /**< Name of the bus */
> > +};
> > +
> > +/** @internal
> > + * Add a device to a bus.
> > + *
> > + * @param bus
> > + *     Bus on which device is to be added
> > + * @param dev
> > + *     Device handle
> > + * @return
> > + *     None
> > + */
> > +void
> > +rte_eal_bus_add_device(struct rte_bus *bus, struct rte_device *dev);
> > +
> > +/** @internal
> > + * Remove a device from its bus.
> > + *
> > + * @param dev
> > + *     Device handle to remove
> > + * @return
> > + *     None
> > + */
> > +void
> > +rte_eal_bus_remove_device(struct rte_device *dev);
> > +
> > +/** @internal
> > + * Associate a driver with a bus.
> > + *
> > + * @param bus
> > + *     Bus on which driver is to be added
> > + * @param dev
> > + *     Driver handle
> > + * @return
> > + *     None
> > + */
> > +void
> > +rte_eal_bus_add_driver(struct rte_bus *bus, struct rte_driver *drv);
> > +
> > +/** @internal
> > + * Disassociate a driver from its bus.
> > + *
> > + * @param dev
> > + *     Driver handle to remove
> > + * @return
> > + *     None
> > + */
> > +void
> > +rte_eal_bus_remove_driver(struct rte_driver *drv);
> > +
> > +/**
> > + * Register a Bus handler.
> > + *
> > + * @param driver
> > + *   A pointer to a rte_bus structure describing the bus
> > + *   to be registered.
> > + */
> > +void rte_eal_bus_register(struct rte_bus *bus);
> > +
> > +/**
> > + * Unregister a Bus handler.
> > + *
> > + * @param driver
> > + *   A pointer to a rte_bus structure describing the bus
> > + *   to be unregistered.
> > + */
> > +void rte_eal_bus_unregister(struct rte_bus *bus);
> > +
> > +/**
> > + * Obtain handle for bus given its name.
> > + *
> > + * @param bus_name
> > + *     Name of the bus handle to search
> > + * @return
> > + *     Pointer to Bus object if name matches any registered bus object
> > + *     NULL, if no matching bus found
> > + */
> > +struct rte_bus *rte_eal_get_bus(const char *bus_name);
> > +
> > +/**
> > + * Dump information of all the buses registered with EAL.
> > + *
> > + * @param f
> > + *     A valid and open output stream handle
> > + *
> > + * @return
> > + *      0 in case of success
> > + *     !0 in case there is error in opening the output stream
> > + */
> > +void rte_eal_bus_dump(FILE *f);
> > +
> > +/** Helper for Bus registration. The constructor has higher priority than
> > + * PMD constructors
> > + */
> > +#define RTE_REGISTER_BUS(nm, bus) \
> > +static void __attribute__((constructor(101), used)) businitfn_ ##nm(void)
> \
> > +{\
> > +       (bus).name = RTE_STR(nm);\
> > +       rte_eal_bus_register(&bus); \
> > +}
> > +
> > +#ifdef __cplusplus
> > +}
> > +#endif
> > +
> > +#endif /* _RTE_BUS_H */
> > diff --git a/lib/librte_eal/common/include/rte_dev.h
> b/lib/librte_eal/common/include/rte_dev.h
> > index 8840380..4004f9a 100644
> > --- a/lib/librte_eal/common/include/rte_dev.h
> > +++ b/lib/librte_eal/common/include/rte_dev.h
> > @@ -122,6 +122,7 @@ struct rte_driver;
> >   */
> >  struct rte_device {
> >         TAILQ_ENTRY(rte_device) next; /**< Next device */
> > +       struct rte_bus *bus;          /**< Device connected to this bus */
> 
> Is there a reason why this isn't const?

No reason. Miss from my end. I will fix this.
(I also took hint from Stephen's recent patches) 

> 
> 
> >         struct rte_driver *driver;    /**< Associated driver */
> >         int numa_node;                /**< NUMA node connection */
> >         struct rte_devargs *devargs;  /**< Device user arguments */
> > @@ -148,6 +149,7 @@ void rte_eal_device_remove(struct rte_device *dev);
> >   */
> >  struct rte_driver {
> >         TAILQ_ENTRY(rte_driver) next;  /**< Next in list. */
> > +       struct rte_bus *bus;           /**< Bus serviced by this driver */
> 
> Same thing here.

I will send out v4 with this. Thanks for comments.

> 
> >         const char *name;                   /**< Driver name. */
> >         const char *alias;              /**< Driver alias. */
> >  };
> > diff --git a/lib/librte_eal/linuxapp/eal/Makefile
> b/lib/librte_eal/linuxapp/eal/Makefile
> > index 4e206f0..aa874a5 100644
> > --- a/lib/librte_eal/linuxapp/eal/Makefile
> > +++ b/lib/librte_eal/linuxapp/eal/Makefile
> > @@ -87,6 +87,7 @@ SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) +=
> eal_common_cpuflags.c
> >  SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_string_fns.c
> >  SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_hexdump.c
> >  SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_devargs.c
> > +SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_bus.c
> >  SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_dev.c
> >  SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_options.c
> >  SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_thread.c
> > diff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map
> b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
> > index 83721ba..c873a7f 100644
> > --- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map
> > +++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
> > @@ -178,3 +178,18 @@ DPDK_16.11 {
> >         rte_eal_vdrv_unregister;
> >
> >  } DPDK_16.07;
> > +
> > +DPDK_17.02 {
> > +       global:
> > +
> > +       rte_bus_list;
> > +       rte_eal_bus_add_device;
> > +       rte_eal_bus_add_driver;
> > +       rte_eal_get_bus;
> > +       rte_eal_bus_dump;
> > +       rte_eal_bus_register;
> > +       rte_eal_bus_remove_device;
> > +       rte_eal_bus_remove_driver;
> > +       rte_eal_bus_unregister;
> > +
> > +} DPDK_16.11;
> > --
> > 2.7.4
> >

^ permalink raw reply

* Re: [PATCH] doc: Fix a typo in testpmd application user guide.
From: Thomas Monjalon @ 2016-12-20 13:55 UTC (permalink / raw)
  To: Rosen, Rami; +Cc: dev, Mcnamara, John
In-Reply-To: <B27915DBBA3421428155699D51E4CFE2026869FD@IRSMSX103.ger.corp.intel.com>

> > This patch fixes a trivial typo in testpmd application user guide.
> > 
> > Signed-off-by: Rami Rosen <rami.rosen@intel.com>
> 
> Acked-by: John McNamara <john.mcnamara@intel.com>

Applied, thanks

^ permalink raw reply

* [PATCH] nfp: add support for new metadata api
From: Alejandro Lucero @ 2016-12-20 14:13 UTC (permalink / raw)
  To: dev

NFP is a smart programmable NIC and firmware is deployed for specific
system needs, like offloading OVS, vRouter, contrack or eBPF into the
hardware. This often requires to give metadata to the host within
packets delivered. Last NFP firmware implementations support richer
metadata api facilitating interaction between firmware and host code.

Old way of handling metadata needs to be still there for supporting
old firmware.

Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
---
 drivers/net/nfp/nfp_net.c      | 33 +++++++++++++++++++++++++++------
 drivers/net/nfp/nfp_net_ctrl.h |  6 ++++++
 2 files changed, 33 insertions(+), 6 deletions(-)

diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c
index cee8f63..69ae6d5 100644
--- a/drivers/net/nfp/nfp_net.c
+++ b/drivers/net/nfp/nfp_net.c
@@ -1726,6 +1726,7 @@ static void nfp_net_read_mac(struct nfp_net_hw *hw)
 
 #define NFP_HASH_OFFSET      ((uint8_t *)mbuf->buf_addr + mbuf->data_off - 4)
 #define NFP_HASH_TYPE_OFFSET ((uint8_t *)mbuf->buf_addr + mbuf->data_off - 8)
+#define NFP_DESC_META_LEN(d) (d->rxd.meta_len_dd & PCIE_DESC_RX_META_LEN_MASK)
 
 /*
  * nfp_net_set_hash - Set mbuf hash data
@@ -1739,16 +1740,38 @@ static void nfp_net_read_mac(struct nfp_net_hw *hw)
 {
 	uint32_t hash;
 	uint32_t hash_type;
+	uint32_t meta_info;
+	uint8_t *meta_offset;
 	struct nfp_net_hw *hw = rxq->hw;
 
 	if (!(hw->ctrl & NFP_NET_CFG_CTRL_RSS))
 		return;
 
-	if (!(rxd->rxd.flags & PCIE_DESC_RX_RSS))
+	if (NFD_CFG_MAJOR_VERSION_of(hw->ver) <= 3) {
+		if (!(rxd->rxd.flags & PCIE_DESC_RX_RSS))
+			return;
+
+		hash = rte_be_to_cpu_32(*(uint32_t *)NFP_HASH_OFFSET);
+		hash_type = rte_be_to_cpu_32(*(uint32_t *)NFP_HASH_TYPE_OFFSET);
+
+	} else if (NFP_DESC_META_LEN(rxd)) {
+		meta_offset = (uint8_t *)mbuf->buf_addr;
+		meta_info = rte_be_to_cpu_32(*(uint32_t *)meta_offset);
+		meta_offset += 4;
+		/* NFP PMD just supports metadata for hashing */
+		switch (meta_info & NFP_NET_META_FIELD_MASK) {
+		case NFP_NET_META_HASH:
+			meta_info >>= NFP_NET_META_FIELD_SIZE;
+			hash = rte_be_to_cpu_32(*(uint32_t *)meta_offset);
+			hash_type = meta_info && NFP_NET_META_FIELD_MASK;
+			break;
+		default:
+			/* Unsupported metadata can be a performance issue */
+			return;
+		}
+	} else {
 		return;
-
-	hash = rte_be_to_cpu_32(*(uint32_t *)NFP_HASH_OFFSET);
-	hash_type = rte_be_to_cpu_32(*(uint32_t *)NFP_HASH_TYPE_OFFSET);
+	}
 
 	mbuf->hash.rss = hash;
 	mbuf->ol_flags |= PKT_RX_RSS_HASH;
@@ -1774,8 +1797,6 @@ static void nfp_net_read_mac(struct nfp_net_hw *hw)
 	rte_eth_devices[rxq->port_id].data->rx_mbuf_alloc_failed++;
 }
 
-#define NFP_DESC_META_LEN(d) (d->rxd.meta_len_dd & PCIE_DESC_RX_META_LEN_MASK)
-
 /*
  * RX path design:
  *
diff --git a/drivers/net/nfp/nfp_net_ctrl.h b/drivers/net/nfp/nfp_net_ctrl.h
index 2c50043..281205d 100644
--- a/drivers/net/nfp/nfp_net_ctrl.h
+++ b/drivers/net/nfp/nfp_net_ctrl.h
@@ -52,6 +52,12 @@
 /* Offset in Freelist buffer where packet starts on RX */
 #define NFP_NET_RX_OFFSET               32
 
+/* Prepend field types */
+#define NFP_NET_META_FIELD_SIZE         4
+#define NFP_NET_META_HASH               1 /* next field carries hash type */
+#define NFP_NET_META_MARK               2
+#define NFP_NET_META_FIELD_MASK         (0xf)
+
 /* Hash type pre-pended when a RSS hash was computed */
 #define NFP_NET_RSS_NONE                0
 #define NFP_NET_RSS_IPV4                1
-- 
1.9.1

^ permalink raw reply related

* Re: [PATCH 1/3] ethdev: New API to free consumed buffers in TX ring
From: Billy McFall @ 2016-12-20 14:15 UTC (permalink / raw)
  To: Adrien Mazarguil
  Cc: Ananyev, Konstantin, thomas.monjalon@6wind.com, Lu, Wenzhuo,
	dev@dpdk.org, Stephen Hemminger
In-Reply-To: <20161220125823.GU10340@6wind.com>

Thank you for your responses, see inline.

On Tue, Dec 20, 2016 at 7:58 AM, Adrien Mazarguil
<adrien.mazarguil@6wind.com> wrote:
> On Tue, Dec 20, 2016 at 12:17:10PM +0000, Ananyev, Konstantin wrote:
>>
>>
>> > -----Original Message-----
>> > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Adrien Mazarguil
>> > Sent: Tuesday, December 20, 2016 11:28 AM
>> > To: Billy McFall <bmcfall@redhat.com>
>> > Cc: thomas.monjalon@6wind.com; Lu, Wenzhuo <wenzhuo.lu@intel.com>; dev@dpdk.org; Stephen Hemminger
>> > <stephen@networkplumber.org>
>> > Subject: Re: [dpdk-dev] [PATCH 1/3] ethdev: New API to free consumed buffers in TX ring
>> >
>> > Hi Billy,
>> >
>> > On Fri, Dec 16, 2016 at 07:48:49AM -0500, Billy McFall wrote:
>> > > Add a new API to force free consumed buffers on TX ring. API will return
>> > > the number of packets freed (0-n) or error code if feature not supported
>> > > (-ENOTSUP) or input invalid (-ENODEV).
>> > >
>> > > Because rte_eth_tx_buffer() may be used, and mbufs may still be held
>> > > in local buffer, the API also accepts *buffer and *sent. Before
>> > > attempting to free, rte_eth_tx_buffer_flush() is called to make sure
>> > > all mbufs are sent to Tx ring. rte_eth_tx_buffer_flush() is called even
>> > > if threshold is not met.
>> > >
>> > > Signed-off-by: Billy McFall <bmcfall@redhat.com>
>> > > ---
>> > >  lib/librte_ether/rte_ethdev.h | 56 +++++++++++++++++++++++++++++++++++++++++++
>> > >  1 file changed, 56 insertions(+)
>> > >
>> > > diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
>> > > index 9678179..e3f2be4 100644
>> > > --- a/lib/librte_ether/rte_ethdev.h
>> > > +++ b/lib/librte_ether/rte_ethdev.h
>> > > @@ -1150,6 +1150,9 @@ typedef uint32_t (*eth_rx_queue_count_t)(struct rte_eth_dev *dev,
>> > >  typedef int (*eth_rx_descriptor_done_t)(void *rxq, uint16_t offset);
>> > >  /**< @internal Check DD bit of specific RX descriptor */
>> > >
>> > > +typedef int (*eth_tx_done_cleanup_t)(void *txq, uint32_t free_cnt);
>> > > +/**< @internal Force mbufs to be from TX ring. */
>> > > +
>> > >  typedef void (*eth_rxq_info_get_t)(struct rte_eth_dev *dev,
>> > >   uint16_t rx_queue_id, struct rte_eth_rxq_info *qinfo);
>> > >
>> > > @@ -1467,6 +1470,7 @@ struct eth_dev_ops {
>> > >   eth_rx_disable_intr_t      rx_queue_intr_disable;
>> > >   eth_tx_queue_setup_t       tx_queue_setup;/**< Set up device TX queue.*/
>> > >   eth_queue_release_t        tx_queue_release;/**< Release TX queue.*/
>> > > + eth_tx_done_cleanup_t      tx_done_cleanup;/**< Free tx ring mbufs */
>> > >   eth_dev_led_on_t           dev_led_on;    /**< Turn on LED. */
>> > >   eth_dev_led_off_t          dev_led_off;   /**< Turn off LED. */
>> > >   flow_ctrl_get_t            flow_ctrl_get; /**< Get flow control. */
>> > > @@ -2943,6 +2947,58 @@ rte_eth_tx_buffer(uint8_t port_id, uint16_t queue_id,
>> > >  }
>> > >
>> > >  /**
>> > > + * Request the driver to free mbufs currently cached by the driver. The
>> > > + * driver will only free the mbuf if it is no longer in use.
>> > > + *
>> > > + * @param port_id
>> > > + *   The port identifier of the Ethernet device.
>> > > + * @param queue_id
>> > > + *   The index of the transmit queue through which output packets must be
>> > > + *   sent.
>> > > + *   The value must be in the range [0, nb_tx_queue - 1] previously supplied
>> > > + *   to rte_eth_dev_configure().
>> > > + * @param free_cnt
>> > > + *   Maximum number of packets to free. Use 0 to indicate all possible packets
>> > > + *   should be freed. Note that a packet may be using multiple mbufs.
>> > > + * @param buffer
>> > > + *   Buffer used to collect packets to be sent. If provided, the buffer will
>> > > + *   be flushed, even if the current length is less than buffer->size. Pass NULL
>> > > + *   if buffer has already been flushed.
>> > > + * @param sent
>> > > + *   Pointer to return number of packets sent if buffer has packets to be sent.
>> > > + *   If *buffer is supplied, *sent must also be supplied.
>> > > + * @return
>> > > + *   Failure: < 0
>> > > + *     -ENODEV: Invalid interface
>> > > + *     -ENOTSUP: Driver does not support function
>> > > + *   Success: >= 0
>> > > + *     0-n: Number of packets freed. More packets may still remain in ring that
>> > > + *     are in use.
>> > > + */
>> > > +
>> > > +static inline int
>> > > +rte_eth_tx_done_cleanup(uint8_t port_id, uint16_t queue_id,  uint32_t free_cnt,
>> > > +         struct rte_eth_dev_tx_buffer *buffer, uint16_t *sent)
>> > > +{
>> > > + struct rte_eth_dev *dev = &rte_eth_devices[port_id];
>> > > +
>> > > + /* Validate Input Data. Bail if not valid or not supported. */
>> > > + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
>> > > + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->tx_done_cleanup, -ENOTSUP);
>> > > +
>> > > + /*
>> > > +  * If transmit buffer is provided and there are still packets to be
>> > > +  * sent, then send them before attempting to free pending mbufs.
>> > > +  */
>> > > + if (buffer && sent)
>> > > +         *sent = rte_eth_tx_buffer_flush(port_id, queue_id, buffer);
>> > > +
>> > > + /* Call driver to free pending mbufs. */
>> > > + return (*dev->dev_ops->tx_done_cleanup)(dev->data->tx_queues[queue_id],
>> > > +                 free_cnt);
>> > > +}
>> > > +
>> > > +/**
>> > >   * Configure a callback for buffered packets which cannot be sent
>> > >   *
>> > >   * Register a specific callback to be called when an attempt is made to send
>> >

I will remove the buffer/sent parameters. It will be the applications
responsibility
to make sure rte_eth_tx_buffer_flush() is called.

I don't feel strongly about the free_cnt parameter. It was in the
original request
so that if there was a large ring buffer, the API could bail early
without having
to go through all the entire ring. It might be a little unrealistic
for the application
to truly know how many mbufs it wants freed. Also, as an example, the I40e
driver already has a i40e_tx_free_bufs(...) function, so by dropping
the free_cnt
parameter, this function could be reused without having to account for
the free_cnt.

>> > Just a thought to follow-up on Stephen's comment to further simplify this
>> > API, how about not adding any new eth_dev_ops but instead defining what
>> > should happen during an empty TX burst call (tx_burst() with 0 packets).
>> >

In the original API request thread, see dpdk-dev mailing list from 11/21/2016
with subject "Adding API to force freeing consumed buffers in TX ring",
overloading the existing API with nb_pkts == 0 was suggested and consensus
was to go with new API. I lean towards a new API since this is a special case
most applications won't use, but I will go with the community on whether to
enhance the existing burst functionality or add a new API.

>> > Several PMDs already have a check for this scenario and start by cleaning up
>> > completed packets anyway, they effectively partially implement this
>> > definition for free already.
>>
>> Many PMDs  start by cleaning up only when number of free entries
>> drop below some point.

True, but the original request for this API was for the scenario where packets
are being flooded and the application wanted to reuse mbuf to avoid a packet
copy. So the API was to request the driver to free "done" mbufs outside of any
threshold.

>> Also in that case the author would have to modify (and test) all existing TX routinies.
>> So I think a separate API call seems more plausible.
>
> Not necessarily, as I understand this API in its current form only suggests
> that a PMD should release a few mbufs from a queue if possible, without any
> guarantee, PMDs are not forced to comply.
>
> I think the threshold you mention is a valid reason not to release them, and
> it wouldn't change a thing to existing tx_burst() implementations in the
> meantime (only documentation).
>
> This threshold could also be bypassed rather painlessly in the
> "if (unlikely(nb_pkts == 0))" case that all PMDs already check for in a
> way or another.
>
>> Though I am agree with previous comment from Stephen that last two parameters
>> are redundant and would just overcomplicate things.
>> tin
>>
>> >
>> > The main difference with this API would be that you wouldn't know how many
>> > mbufs were freed and wouldn't collect them into an array. However most
>> > applications have one mbuf pool and/or know where they come from, so they
>> > can just query the pool or attempt to re-allocate from it after doing empty
>> > bursts in case of starvation.
>> >
>> > [1] http://dpdk.org/ml/archives/dev/2016-December/052469.html
>
> --
> Adrien Mazarguil
> 6WIND

^ permalink raw reply

* Re: [PATCH] net/af_packet: initialize link interrupt callback queue
From: Ferruh Yigit @ 2016-12-20 14:20 UTC (permalink / raw)
  To: Chas Williams, dev; +Cc: John W. Linville
In-Reply-To: <1481997835-23288-1-git-send-email-3chas3@gmail.com>

On 12/17/2016 6:03 PM, Chas Williams wrote:
> This patch initializes the eth_dev->link_intr_cbs queue which is
> used when af_packet is passed into rte_eth_ev_callback_register().

Why do you want to register callback to af_packet PMD, it won't be
calling them?

> 
> Fixes: 4dc294158cac ("ethdev: support optional Rx and Tx callbacks")
> 
> Signed-off-by: Chas Williams <3chas3@gmail.com>

Please cc the maintainers...

CC: John W. Linville <linville@tuxdriver.com>

> ---
>  drivers/net/af_packet/rte_eth_af_packet.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c
> index a1e13ff..ea5070a 100644
> --- a/drivers/net/af_packet/rte_eth_af_packet.c
> +++ b/drivers/net/af_packet/rte_eth_af_packet.c
> @@ -708,6 +708,7 @@ rte_pmd_init_internals(const char *name,
>  	(*eth_dev)->data->drv_name = pmd_af_packet_drv.driver.name;
>  	(*eth_dev)->data->kdrv = RTE_KDRV_NONE;
>  	(*eth_dev)->data->numa_node = numa_node;
> +	TAILQ_INIT(&((*eth_dev)->link_intr_cbs));
>  
>  	return 0;
>  
> 

^ permalink raw reply

* Re: [PATCH v2] doc: introduce PVP reference benchmark
From: Maxime Coquelin @ 2016-12-20 14:54 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: Mcnamara, John, yuanhan.liu@linux.intel.com, Yang, Zhiyong,
	ktraynor@redhat.com, dev
In-Reply-To: <15125480.nLCo42mjm8@xps13>



On 12/20/2016 11:03 AM, Thomas Monjalon wrote:
>>>>> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
>>>>
>>>> There is one trailing whitespace warning but apart from that:
>>>>
>>>> Acked-by: John McNamara <john.mcnamara@intel.com>
>>>
>>> Thanks John,
>>>
>>> Do you want me to send a v3, fixing the trailing whitespace & collecting
>>> the acks?
>>
>> No need (unless the tree maintainer says otherwise).
>> It was one trailing whitespace. Just something to look out for in future.
>
> Removed when applying.
> Fixed some heading issues also:
>
> --- a/doc/guides/howto/pvp_reference_benchmark.rst
> +++ b/doc/guides/howto/pvp_reference_benchmark.rst
> @@ -160,7 +160,7 @@ Testpmd launch
>            --portmask=f --disable-hw-vlan -i --rxq=1 --txq=1
>            --nb-cores=4 --forward-mode=io
>
> -With this command, isolated CPUs 2 to 5 will be used as lcores for PMD threads.
> +   With this command, isolated CPUs 2 to 5 will be used as lcores for PMD threads.
>
>  #. In testpmd interactive mode, set the portlist to obtain the correct port
>     chaining:
> @@ -176,7 +176,8 @@ VM launch
>
>  The VM may be launched either by calling QEMU directly, or by using libvirt.
>
> -#. Qemu way:
> +Qemu way
> +^^^^^^^^
>
>  Launch QEMU with two Virtio-net devices paired to the vhost-user sockets
>  created by testpmd. Below example uses default Virtio-net options, but options
> @@ -210,7 +211,8 @@ where isolated CPUs 6 and 7 will be used as lcores for Virtio PMDs:
>        export PYTHONPATH=$PYTHONPATH:<QEMU path>/scripts/qmp
>        ./qmp-vcpu-pin -s /tmp/qmp.socket 1 6 7
>
> -#. Libvirt way:
> +Libvirt way
> +^^^^^^^^^^^
>
>  Some initial steps are required for libvirt to be able to connect to testpmd's
>  sockets.

Thanks Thomas for handling these fixes.

Maxime

^ permalink raw reply

* Re: [PATCH v1] examples/ethtool: fix segfault querying non-PCI devices
From: Thomas Monjalon @ 2016-12-20 15:11 UTC (permalink / raw)
  To: Remy Horton; +Cc: dev
In-Reply-To: <1480474049-3828-1-git-send-email-remy.horton@intel.com>

2016-11-30 10:47, Remy Horton:
> Doing a device information query on a non-PCI device such as
> vhost was resulting in the dereferencing of a NULL pointer
> (the absent PCI data), causing a segmentation fault.
> 
> Fixes: bda68ab9d1e7 ("examples/ethtool: add user-space ethtool sample application")
> 
> Signed-off-by: Remy Horton <remy.horton@intel.com>
[...]
> --- a/doc/guides/rel_notes/release_17_02.rst
> +++ b/doc/guides/rel_notes/release_17_02.rst
> @@ -70,6 +70,9 @@ Libraries
>  Examples
>  ~~~~~~~~
>  
> +   * **examples/ethtool Fixed crash with non-PCI devices.**
> +     Querying a non-PCI device was dereferencing non-existent PCI data
> +     resulting in a segmentation fault.

indentation fixed here

Applied, thanks

^ permalink raw reply

* Re: [PATCH v5 00/29] Support VFD and DPDK PF + kernel VF on i40e
From: Vincent JARDIN @ 2016-12-20 15:18 UTC (permalink / raw)
  To: Chen, Jing D, Thomas Monjalon
  Cc: dev@dpdk.org, Yigit, Ferruh, Wu, Jingjing, Zhang, Helin
In-Reply-To: <4341B239C0EFF9468EE453F9E9F4604D3C5B8BD7@shsmsx102.ccr.corp.intel.com>

Le 20/12/2016 à 05:48, Chen, Jing D a écrit :
> That's a collaboration with another team. we'll follow-up that but not guarantee
> it will happen.
> May I ask if my reply make it clear? Still NAC for this patch?

Yes still nack, I am not confident with this PF approach since you are 
breaking Linux PF behavior. It does not provide guarantees with PF. 
Something is missing to guarantee the compatibilities.

Thank you,
   Vincent

^ permalink raw reply

* Re: [PATCH v5 18/29] app/testpmd: use VFD APIs on i40e
From: Vincent JARDIN @ 2016-12-20 15:19 UTC (permalink / raw)
  To: Ferruh Yigit, dev
  Cc: Jingjing Wu, Helin Zhang, Wenzhuo Lu, Chen Jing D,
	Bernard Iremonger
In-Reply-To: <625f5a53-e51e-7fb0-b477-c452e9217f41@intel.com>

Le 19/12/2016 à 12:03, Ferruh Yigit a écrit :
> And it is always possible to move these into ethdev layer, when multiple
> PMDs supports same feature.
> I agree this is something that needs to keep an eye on it, and be sure
> if an API is generic, move it into eth_dev layer.

you are right, you have a good point, it is better to try this approach, 
and let's generalize later.

thank you for your comments,
   Vincent

^ permalink raw reply

* Re: [PATCH 0/3] buildtools/devtools/usertools
From: Ferruh Yigit @ 2016-12-20 15:24 UTC (permalink / raw)
  To: Thomas Monjalon, dev
In-Reply-To: <1481839149-26684-1-git-send-email-thomas.monjalon@6wind.com>

On 12/15/2016 9:59 PM, Thomas Monjalon wrote:
> The current tools/ and scripts/ directory names are not
> self describing.
> These patches create devtools/ and usertools/ directories.

I think classifying scripts is a good idea.

> 
> Thomas Monjalon (3):
>   scripts: move to buildtools
>   scripts: move to devtools
>   tools: move to usertools
> 
<...>

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

^ permalink raw reply

* Re: [PATCH v5 00/29] Support VFD and DPDK PF + kernel VF on i40e
From: Ferruh Yigit @ 2016-12-20 15:31 UTC (permalink / raw)
  To: Vincent JARDIN, Chen, Jing D, Thomas Monjalon
  Cc: dev@dpdk.org, Wu, Jingjing, Zhang, Helin
In-Reply-To: <932774d3-e0f7-7b44-1635-9015b8be6c0e@6wind.com>

On 12/20/2016 3:18 PM, Vincent JARDIN wrote:
> Le 20/12/2016 à 05:48, Chen, Jing D a écrit :
>> That's a collaboration with another team. we'll follow-up that but not guarantee
>> it will happen.
>> May I ask if my reply make it clear? Still NAC for this patch?
> 
> Yes still nack, I am not confident with this PF approach since you are 
> breaking Linux PF behavior. It does not provide guarantees with PF. 
> Something is missing to guarantee the compatibilities.

Hi Vincent, Mark,

What do you think separating the mentioned patch (patch 24/29) from
patchset and submit as a standalone patch, so that it can be discussed
more without blocking the patchset?

Thanks,
ferruh

> 
> Thank you,
>    Vincent
> 

^ permalink raw reply

* Re: [PATCH v3 2/9] ethdev: Helper to convert to struct rte_pci_device
From: Stephen Hemminger @ 2016-12-20 15:38 UTC (permalink / raw)
  To: Jan Blunck; +Cc: dev, shreyansh.jain, david.marchand
In-Reply-To: <1482232315-21626-3-git-send-email-jblunck@infradead.org>

On Tue, 20 Dec 2016 12:11:48 +0100
Jan Blunck <jblunck@infradead.org> wrote:

> Signed-off-by: Jan Blunck <jblunck@infradead.org>
> Acked-by: Shreyansh Jain <shreyansh.jain@nxp.com>
> ---
>  lib/librte_ether/rte_ethdev.h | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
> index 9678179..3adbb2b 100644
> --- a/lib/librte_ether/rte_ethdev.h
> +++ b/lib/librte_ether/rte_ethdev.h
> @@ -1644,6 +1644,12 @@ struct rte_eth_dev {
>  	uint8_t attached; /**< Flag indicating the port is attached */
>  } __rte_cache_aligned;
>  
> +/**
> + * @internal
> + * Helper for drivers that need to convert from rte_eth_dev to rte_pci_device.
> + */
> +#define ETH_DEV_PCI_DEV(ptr) ((ptr)->pci_dev)
> +
>  struct rte_eth_dev_sriov {
>  	uint8_t active;               /**< SRIOV is active with 16, 32 or 64 pools */
>  	uint8_t nb_q_per_pool;        /**< rx queue number per pool */

An inline might be better than macro, since a function is typed
versus a macro.

^ permalink raw reply

* Re: [PATCH v3 00/31] net/i40e: base code update
From: Gregory Etelson @ 2016-12-20 15:40 UTC (permalink / raw)
  To: dev; +Cc: Ferruh Yigit, Jingjing Wu, helin.zhang
In-Reply-To: <1a2f298c-8eaa-ecb2-9ec8-a6e4f3340bad@intel.com>

Hello,

I have several XL710-Q2 interfaces that fail with
`PMD: eth_i40e_dev_init(): Failed to init adminq: -54'
Rebase to the latest dpdk-next-net/master did not fix the fault
Firmware version is 5.04 0x80002505 0.0.0
lspci output looks the same for working and failed interfaces

Full traces with all I40*DEBUG options enabled follow.

Is there a way to extract more info to investigate this fault ?

Regards,
Gregory

EAL: Detected lcore 0 as core 0 on socket 0
EAL: Detected lcore 1 as core 0 on socket 1
EAL: Detected lcore 2 as core 1 on socket 0
EAL: Detected lcore 3 as core 1 on socket 1
EAL: Detected lcore 4 as core 2 on socket 0
EAL: Detected lcore 5 as core 2 on socket 1
EAL: Detected lcore 6 as core 3 on socket 0
EAL: Detected lcore 7 as core 3 on socket 1
EAL: Detected lcore 8 as core 6 on socket 0
EAL: Detected lcore 9 as core 6 on socket 1
EAL: Detected lcore 10 as core 7 on socket 0
EAL: Detected lcore 11 as core 7 on socket 1
EAL: Detected lcore 12 as core 0 on socket 0
EAL: Detected lcore 13 as core 0 on socket 1
EAL: Detected lcore 14 as core 1 on socket 0
EAL: Detected lcore 15 as core 1 on socket 1
EAL: Detected lcore 16 as core 2 on socket 0
EAL: Detected lcore 17 as core 2 on socket 1
EAL: Detected lcore 18 as core 3 on socket 0
EAL: Detected lcore 19 as core 3 on socket 1
EAL: Detected lcore 20 as core 6 on socket 0
EAL: Detected lcore 21 as core 6 on socket 1
EAL: Detected lcore 22 as core 7 on socket 0
EAL: Detected lcore 23 as core 7 on socket 1
EAL: Support maximum 128 logical core(s) by configuration.
EAL: Detected 24 lcore(s)
EAL: Debug logs available - lower performance
EAL: Setting up physically contiguous memory...
EAL: Ask a virtual area of 0x200000 bytes
EAL: Virtual area found at 0x7f4203a00000 (size = 0x200000)
EAL: Ask a virtual area of 0x1f7000000 bytes
EAL: Virtual area found at 0x7f400c800000 (size = 0x1f7000000)
EAL: Ask a virtual area of 0x800000 bytes
EAL: Virtual area found at 0x7f400be00000 (size = 0x800000)
EAL: Ask a virtual area of 0x2400000 bytes
EAL: Virtual area found at 0x7f4009800000 (size = 0x2400000)
EAL: Ask a virtual area of 0x4800000 bytes
EAL: Virtual area found at 0x7f4004e00000 (size = 0x4800000)
EAL: Ask a virtual area of 0x1800000 bytes
EAL: Virtual area found at 0x7f4003400000 (size = 0x1800000)
EAL: Ask a virtual area of 0x200000 bytes
EAL: Virtual area found at 0x7f4003000000 (size = 0x200000)
EAL: Ask a virtual area of 0x200000 bytes
EAL: Virtual area found at 0x7f4002c00000 (size = 0x200000)
EAL: Ask a virtual area of 0x1ffc00000 bytes
EAL: Virtual area found at 0x7f3e02e00000 (size = 0x1ffc00000)
EAL: Ask a virtual area of 0x200000 bytes
EAL: Virtual area found at 0x7f3e02a00000 (size = 0x200000)
EAL: Requesting 4096 pages of size 2MB from socket 0
EAL: Requesting 4096 pages of size 2MB from socket 1
EAL: TSC frequency is ~3400010 KHz
EAL: Master lcore 0 is ready (tid=5e938c0;cpuset=[0])
EAL: lcore 4 is ready (tid=1ffe700;cpuset=[4])
EAL: lcore 8 is ready (tid=ff7fa700;cpuset=[8])
EAL: lcore 2 is ready (tid=4a5d700;cpuset=[2])
EAL: lcore 3 is ready (tid=29ff700;cpuset=[3])
EAL: lcore 9 is ready (tid=fedf9700;cpuset=[9])
EAL: lcore 10 is ready (tid=fe3f8700;cpuset=[10])
EAL: lcore 15 is ready (tid=fb1f3700;cpuset=[15])
EAL: lcore 16 is ready (tid=fa7f2700;cpuset=[16])
EAL: lcore 14 is ready (tid=fbbf4700;cpuset=[14])
EAL: lcore 18 is ready (tid=f93f0700;cpuset=[18])
EAL: lcore 12 is ready (tid=fcff6700;cpuset=[12])
EAL: lcore 1 is ready (tid=545e700;cpuset=[1])
EAL: lcore 20 is ready (tid=f7fee700;cpuset=[20])
EAL: lcore 19 is ready (tid=f89ef700;cpuset=[19])
EAL: lcore 5 is ready (tid=15fd700;cpuset=[5])
EAL: lcore 11 is ready (tid=fd9f7700;cpuset=[11])
EAL: lcore 17 is ready (tid=f9df1700;cpuset=[17])
EAL: lcore 6 is ready (tid=bfc700;cpuset=[6])
EAL: lcore 21 is ready (tid=f75ed700;cpuset=[21])
EAL: lcore 13 is ready (tid=fc5f5700;cpuset=[13])
EAL: lcore 23 is ready (tid=f61eb700;cpuset=[23])
EAL: lcore 22 is ready (tid=f6bec700;cpuset=[22])
EAL: lcore 7 is ready (tid=1fb700;cpuset=[7])
EAL: PCI device 0000:04:00.0 on NUMA socket 0
EAL:   probe driver: 8086:1583 net_i40e
EAL:   PCI memory mapped at 0x7f3df4feb000
EAL:   PCI memory mapped at 0x7f4204055000
PMD: eth_i40e_dev_init():  >>
PMD: i40e_enable_extended_tag(): Extended Tag has already been enabled
PMD: i40e_set_symmetric_hash_enable_per_port(): Symmetric hash has already been disabled
PMD: i40e_pf_reset(): Core and Global modules ready 0
PMD: i40e_init_shared_code(): i40e_init_shared_code
PMD: i40e_set_mac_type(): i40e_set_mac_type

PMD: i40e_set_mac_type(): i40e_set_mac_type found mac: 1, returns: 0
PMD: i40e_init_nvm(): i40e_init_nvm
PMD: i40e_check_write_reg(): [0x002507c0] original: 0x00000000

PMD: i40e_check_write_reg(): [0x002507c0] after: 0x00000000

PMD: i40e_check_write_reg(): [0x002507e0] original: 0x0001801e

PMD: i40e_check_write_reg(): [0x002507e0] after: 0x0001801e

PMD: i40e_check_write_reg(): [0x002676f8] original: 0x00000000

PMD: i40e_check_write_reg(): [0x002676f8] after: 0x00000000

PMD: i40e_check_write_reg(): [0x002676fc] original: 0x0001801e

PMD: i40e_check_write_reg(): [0x002676fc] after: 0x0001801e

PMD: i40e_check_write_reg(): [0x002672f8] original: 0x00000000

PMD: i40e_check_write_reg(): [0x002672f8] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267af8] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267af8] after: 0x00000000

PMD: i40e_check_write_reg(): [0x002672fc] original: 0x00000000

PMD: i40e_check_write_reg(): [0x002672fc] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267afc] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267afc] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250840] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00250840] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250860] original: 0x0001801e

PMD: i40e_check_write_reg(): [0x00250860] after: 0x0001801e

PMD: i40e_check_write_reg(): [0x00267708] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267708] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026770c] original: 0x0001801e

PMD: i40e_check_write_reg(): [0x0026770c] after: 0x0001801e

PMD: i40e_check_write_reg(): [0x00267308] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267308] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b08] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b08] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026730c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x0026730c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b0c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b0c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250880] original: 0x80000000

PMD: i40e_check_write_reg(): [0x00250880] after: 0x80000000

PMD: i40e_check_write_reg(): [0x002508a0] original: 0x0001801f

PMD: i40e_check_write_reg(): [0x002508a0] after: 0x0001801f

PMD: i40e_check_write_reg(): [0x00267710] original: 0x80000000

PMD: i40e_check_write_reg(): [0x00267710] after: 0x80000000

PMD: i40e_check_write_reg(): [0x00267714] original: 0x0001801f

PMD: i40e_check_write_reg(): [0x00267714] after: 0x0001801f

PMD: i40e_check_write_reg(): [0x00267310] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267310] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b10] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b10] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267314] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267314] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b14] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b14] after: 0x00000000

PMD: i40e_check_write_reg(): [0x002508c0] original: 0x00000000

PMD: i40e_check_write_reg(): [0x002508c0] after: 0x00000000

PMD: i40e_check_write_reg(): [0x002508e0] original: 0x00018018

PMD: i40e_check_write_reg(): [0x002508e0] after: 0x00018018

PMD: i40e_check_write_reg(): [0x00267718] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267718] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026771c] original: 0x00018018

PMD: i40e_check_write_reg(): [0x0026771c] after: 0x00018018

PMD: i40e_check_write_reg(): [0x00267318] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267318] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b18] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b18] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026731c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x0026731c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b1c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b1c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250900] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00250900] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250920] original: 0x00018018

PMD: i40e_check_write_reg(): [0x00250920] after: 0x00018018

PMD: i40e_check_write_reg(): [0x00267720] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267720] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267724] original: 0x00018018

PMD: i40e_check_write_reg(): [0x00267724] after: 0x00018018

PMD: i40e_check_write_reg(): [0x00267320] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267320] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b20] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b20] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267324] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267324] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b24] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b24] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250a40] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00250a40] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250a60] original: 0x0007fffe

PMD: i40e_check_write_reg(): [0x00250a60] after: 0x0007fffe

PMD: i40e_check_write_reg(): [0x00267748] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267748] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026774c] original: 0x0007fffe

PMD: i40e_check_write_reg(): [0x0026774c] after: 0x0007fffe

PMD: i40e_check_write_reg(): [0x00267348] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267348] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b48] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b48] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026734c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x0026734c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b4c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b4c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250ac0] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00250ac0] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250ae0] original: 0x0007fffe

PMD: i40e_check_write_reg(): [0x00250ae0] after: 0x0007fffe

PMD: i40e_check_write_reg(): [0x00267758] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267758] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026775c] original: 0x0007fffe

PMD: i40e_check_write_reg(): [0x0026775c] after: 0x0007fffe

PMD: i40e_check_write_reg(): [0x00267358] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267358] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b58] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b58] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026735c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x0026735c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b5c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b5c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250b00] original: 0x80000000

PMD: i40e_check_write_reg(): [0x00250b00] after: 0x80000000

PMD: i40e_check_write_reg(): [0x00250b20] original: 0x0007ffff

PMD: i40e_check_write_reg(): [0x00250b20] after: 0x0007ffff

PMD: i40e_check_write_reg(): [0x00267760] original: 0x80000000

PMD: i40e_check_write_reg(): [0x00267760] after: 0x80000000

PMD: i40e_check_write_reg(): [0x00267764] original: 0x0007ffff

PMD: i40e_check_write_reg(): [0x00267764] after: 0x0007ffff

PMD: i40e_check_write_reg(): [0x00267360] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267360] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b60] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b60] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267364] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267364] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b64] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b64] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250b40] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00250b40] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250b60] original: 0x0007fff8

PMD: i40e_check_write_reg(): [0x00250b60] after: 0x0007fff8

PMD: i40e_check_write_reg(): [0x00267768] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267768] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026776c] original: 0x0007fff8

PMD: i40e_check_write_reg(): [0x0026776c] after: 0x0007fff8

PMD: i40e_check_write_reg(): [0x00267368] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267368] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b68] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b68] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026736c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x0026736c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b6c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b6c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250b80] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00250b80] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250ba0] original: 0x0007fff8

PMD: i40e_check_write_reg(): [0x00250ba0] after: 0x0007fff8

PMD: i40e_check_write_reg(): [0x00267770] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267770] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267774] original: 0x0007fff8

PMD: i40e_check_write_reg(): [0x00267774] after: 0x0007fff8

PMD: i40e_check_write_reg(): [0x00267370] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267370] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b70] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b70] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267374] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267374] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b74] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b74] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250fc0] original: 0x00004000

PMD: i40e_check_write_reg(): [0x00250fc0] after: 0x00004000

PMD: i40e_check_write_reg(): [0x00250fe0] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00250fe0] after: 0x00000000

PMD: i40e_check_write_reg(): [0x002677f8] original: 0x00004000

PMD: i40e_check_write_reg(): [0x002677f8] after: 0x00004000

PMD: i40e_check_write_reg(): [0x002677fc] original: 0x00000000

PMD: i40e_check_write_reg(): [0x002677fc] after: 0x00000000

PMD: i40e_check_write_reg(): [0x002673f8] original: 0x00000000

PMD: i40e_check_write_reg(): [0x002673f8] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267bf8] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267bf8] after: 0x00000000

PMD: i40e_check_write_reg(): [0x002673fc] original: 0x00000000

PMD: i40e_check_write_reg(): [0x002673fc] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267bfc] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267bfc] after: 0x00000000

PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_9006244102256549392 allocated with physical address: 36066607104
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_9094591617955485484 allocated with physical address: 36066598912
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_4921817593146928058 allocated with physical address: 36066590720
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1649522919998970242 allocated with physical address: 36066582528
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_5592431459765142899 allocated with physical address: 36066574336
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_3616263856304680647 allocated with physical address: 36066566144
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_6135573337873051539 allocated with physical address: 36066557952
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_2979425320734363433 allocated with physical address: 36066549760
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_7004567199046153392 allocated with physical address: 36066541568
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_2400349342071320464 allocated with physical address: 36066533376
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1198569822703064929 allocated with physical address: 36066525184
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_2381874768605265457 allocated with physical address: 36066516992
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_946809976207957533 allocated with physical address: 36066508800
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_8890428114805413440 allocated with physical address: 36066500608
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_3659808187846474561 allocated with physical address: 36066492416
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_6643860085814082754 allocated with physical address: 36066484224
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1077965980644684592 allocated with physical address: 36066476032
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_757788774034593920 allocated with physical address: 36066467840
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_8871964809840853652 allocated with physical address: 36066459648
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1319458200989398807 allocated with physical address: 36066451456
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1260444229190182595 allocated with physical address: 36066443264
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_4944475028266209581 allocated with physical address: 36066435072
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1981506286114228798 allocated with physical address: 36066426880
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_6995706941756923838 allocated with physical address: 36066418688
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_6845860763940517715 allocated with physical address: 36066410496
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_6316736255568508052 allocated with physical address: 36066402304
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_6596345420547494626 allocated with physical address: 36066394112
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_563052720231491541 allocated with physical address: 36066385920
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_5438500282421395772 allocated with physical address: 36066377728
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1489311620446309558 allocated with physical address: 36066369536
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1034342050721494823 allocated with physical address: 36066361344
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_895587109620334414 allocated with physical address: 36066353152
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_7244783987789076734 allocated with physical address: 36066344960
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_8121331692218482053 allocated with physical address: 36066340864
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_357653678358899189 allocated with physical address: 36066332672
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_8279673960611224875 allocated with physical address: 36066324480
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_3128505479544499579 allocated with physical address: 36066316288
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_8860600185294246181 allocated with physical address: 36066308096
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_2923794349289372856 allocated with physical address: 36066299904
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_3555496033731071937 allocated with physical address: 36066291712
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_546014499550556726 allocated with physical address: 36066283520
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_2488579372291755051 allocated with physical address: 36066275328
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_6650067233218882971 allocated with physical address: 36066267136
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_2356739082095908089 allocated with physical address: 36066258944
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_4594387210783084948 allocated with physical address: 36066250752
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_8514595240639990241 allocated with physical address: 36066242560
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_3355784826824932814 allocated with physical address: 36066234368
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_6035703664050813578 allocated with physical address: 36066226176
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1826820887759906590 allocated with physical address: 36066217984
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_3162038796587606143 allocated with physical address: 36066209792
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_4571605943746334657 allocated with physical address: 36066201600
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_8896333848084252224 allocated with physical address: 36066193408
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_4966872707505717693 allocated with physical address: 36066185216
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_3893530533784472947 allocated with physical address: 36066177024
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1217637539560590694 allocated with physical address: 36066168832
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_5878423844769130040 allocated with physical address: 36066160640
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_8739981701704134140 allocated with physical address: 36066152448
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_8562536557899098522 allocated with physical address: 36066144256
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_4304574794556610162 allocated with physical address: 36066136064
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_7499349118597146913 allocated with physical address: 36066127872
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_936617606270126154 allocated with physical address: 36066119680
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_4843208302417061252 allocated with physical address: 36066111488
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_4297764810681972379 allocated with physical address: 36066103296
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_3836696837872975483 allocated with physical address: 36066095104
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_72325700428175156 allocated with physical address: 36066086912
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_6444087963138592179 allocated with physical address: 36066078720
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_357653678358899189 to be freed with physical address: 36066332672
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_8279673960611224875 to be freed with physical address: 36066324480
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_3128505479544499579 to be freed with physical address: 36066316288
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_8860600185294246181 to be freed with physical address: 36066308096
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_2923794349289372856 to be freed with physical address: 36066299904
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_3555496033731071937 to be freed with physical address: 36066291712
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_546014499550556726 to be freed with physical address: 36066283520
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_2488579372291755051 to be freed with physical address: 36066275328
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_6650067233218882971 to be freed with physical address: 36066267136
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_2356739082095908089 to be freed with physical address: 36066258944
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_4594387210783084948 to be freed with physical address: 36066250752
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_8514595240639990241 to be freed with physical address: 36066242560
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_3355784826824932814 to be freed with physical address: 36066234368
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_6035703664050813578 to be freed with physical address: 36066226176
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1826820887759906590 to be freed with physical address: 36066217984
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_3162038796587606143 to be freed with physical address: 36066209792
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_4571605943746334657 to be freed with physical address: 36066201600
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_8896333848084252224 to be freed with physical address: 36066193408
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_4966872707505717693 to be freed with physical address: 36066185216
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_3893530533784472947 to be freed with physical address: 36066177024
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1217637539560590694 to be freed with physical address: 36066168832
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_5878423844769130040 to be freed with physical address: 36066160640
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_8739981701704134140 to be freed with physical address: 36066152448
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_8562536557899098522 to be freed with physical address: 36066144256
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_4304574794556610162 to be freed with physical address: 36066136064
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_7499349118597146913 to be freed with physical address: 36066127872
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_936617606270126154 to be freed with physical address: 36066119680
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_4843208302417061252 to be freed with physical address: 36066111488
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_4297764810681972379 to be freed with physical address: 36066103296
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_3836696837872975483 to be freed with physical address: 36066095104
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_72325700428175156 to be freed with physical address: 36066086912
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_6444087963138592179 to be freed with physical address: 36066078720
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_8121331692218482053 to be freed with physical address: 36066340864
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_9094591617955485484 to be freed with physical address: 36066598912
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_4921817593146928058 to be freed with physical address: 36066590720
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1649522919998970242 to be freed with physical address: 36066582528
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_5592431459765142899 to be freed with physical address: 36066574336
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_3616263856304680647 to be freed with physical address: 36066566144
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_6135573337873051539 to be freed with physical address: 36066557952
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_2979425320734363433 to be freed with physical address: 36066549760
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_7004567199046153392 to be freed with physical address: 36066541568
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_2400349342071320464 to be freed with physical address: 36066533376
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1198569822703064929 to be freed with physical address: 36066525184
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_2381874768605265457 to be freed with physical address: 36066516992
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_946809976207957533 to be freed with physical address: 36066508800
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_8890428114805413440 to be freed with physical address: 36066500608
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_3659808187846474561 to be freed with physical address: 36066492416
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_6643860085814082754 to be freed with physical address: 36066484224
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1077965980644684592 to be freed with physical address: 36066476032
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_757788774034593920 to be freed with physical address: 36066467840
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_8871964809840853652 to be freed with physical address: 36066459648
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1319458200989398807 to be freed with physical address: 36066451456
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1260444229190182595 to be freed with physical address: 36066443264
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_4944475028266209581 to be freed with physical address: 36066435072
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1981506286114228798 to be freed with physical address: 36066426880
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_6995706941756923838 to be freed with physical address: 36066418688
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_6845860763940517715 to be freed with physical address: 36066410496
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_6316736255568508052 to be freed with physical address: 36066402304
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_6596345420547494626 to be freed with physical address: 36066394112
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_563052720231491541 to be freed with physical address: 36066385920
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_5438500282421395772 to be freed with physical address: 36066377728
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1489311620446309558 to be freed with physical address: 36066369536
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1034342050721494823 to be freed with physical address: 36066361344
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_895587109620334414 to be freed with physical address: 36066353152
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_7244783987789076734 to be freed with physical address: 36066344960
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_9006244102256549392 to be freed with physical address: 36066607104
PMD: eth_i40e_dev_init(): Failed to init adminq: -54
EAL: Error - exiting with code: 1
  Cause: Requested device 0000:04:00.0 cannot be used



On Monday, 12 December 2016 10:32:24 IST Ferruh Yigit wrote:
> On 12/10/2016 11:24 AM, Jingjing Wu wrote:
> > i40e base code upate. The main changes are:
> >  - add clause22 and clause45 implementation for PHY registers accessing
> >  - replace existing legacy memcpy() calls with i40e_memcpy() calls.
> >  - use BIT() macro instead of bit fields
> >  - add clear all WoL filters implementation
> >  - add ERROR state for NVM update state machine
> >  - add broadcast promiscuous control per VLAN
> >  - remove unused X722_SUPPORT and I40E_NDIS_SUPPORT MARCOs
> > 
> > v3:
> >  * update commit log of few patches as issue fix
> > 
> > v2:
> >  * comments rework
> >  * complie issue fix
> >  * rebase to dpdk-next-net
> > 
> > Jingjing Wu (31):
> >   net/i40e/base: add encap csum VF offload flag
> >   net/i40e/base: fix flow control set for 25G
> >   net/i40e/base: remove unnecessary code
> >   net/i40e/base: fix bit test mask
> >   net/i40e/base: group base mode VF offload flags
> >   net/i40e/base: fix long link down notification time
> >   net/i40e/base: add media type detection for 25G link
> >   net/i40e/base: add clause22 and clause45 implementation
> >   net/i40e/base: add bus number info
> >   net/i40e/base: add protocols when discover capabilities
> >   net/i40e/base: fix unknown PHYs incorrect identification
> >   net/i40e/base: replace memcpy
> >   net/i40e/base: deprecating unused macro
> >   net/i40e/base: remove FPK HyperV VF device ID
> >   net/i40e/base: add FEC bits to PHY capabilities
> >   net/i40e/base: use BIT() macro instead of bit fields
> >   net/i40e/base: adjust 25G PHY type values
> >   net/i40e/base: implement clear all WoL filters
> >   net/i40e/base: implement set VSI full promisc mode
> >   net/i40e/base: fix wol failure on PF reset
> >   net/i40e/base: save link FEC info from link up event
> >   net/i40e/base: fix NVM access intefering
> >   net/i40e/base: change shift values to hex
> >   net/i40e/base: comment that udp port must be in Host order
> >   net/i40e/base: remove duplicate definitions
> >   net/i40e/base: add ERROR state for NVM update state machine
> >   net/i40e/base: add broadcast promiscuous control per VLAN
> >   net/i40e/base: fix division by zero
> >   net/i40e/base: fix byte order
> >   net/i40e/base: remove unused macro
> >   net/i40e: remove unused macro from PMD
> > 
> <...>
> 
> Series applied to dpdk-next-net/master, thanks.
> 
> 

^ permalink raw reply

* Re: [PATCH v3 7/9] ethdev: Move filling of rte_eth_dev_info->pci_dev to dev_infos_get()
From: Stephen Hemminger @ 2016-12-20 15:41 UTC (permalink / raw)
  To: Jan Blunck; +Cc: dev, shreyansh.jain, david.marchand
In-Reply-To: <1482232315-21626-8-git-send-email-jblunck@infradead.org>

On Tue, 20 Dec 2016 12:11:53 +0100
Jan Blunck <jblunck@infradead.org> wrote:

> Only the device itself can decide its PCI or not.
> 
> Signed-off-by: Jan Blunck <jblunck@infradead.org>
> ---
>  drivers/net/bnx2x/bnx2x_ethdev.c        | 1 +
>  drivers/net/bnxt/bnxt_ethdev.c          | 2 ++
>  drivers/net/cxgbe/cxgbe_ethdev.c        | 2 ++
>  drivers/net/e1000/em_ethdev.c           | 1 +
>  drivers/net/e1000/igb_ethdev.c          | 2 ++
>  drivers/net/ena/ena_ethdev.c            | 2 ++
>  drivers/net/enic/enic_ethdev.c          | 1 +
>  drivers/net/fm10k/fm10k_ethdev.c        | 1 +
>  drivers/net/i40e/i40e_ethdev.c          | 1 +
>  drivers/net/i40e/i40e_ethdev_vf.c       | 1 +
>  drivers/net/ixgbe/ixgbe_ethdev.c        | 2 ++
>  drivers/net/mlx4/mlx4.c                 | 2 ++
>  drivers/net/mlx5/mlx5_ethdev.c          | 2 ++
>  drivers/net/nfp/nfp_net.c               | 1 +
>  drivers/net/qede/qede_ethdev.c          | 1 +
>  drivers/net/szedata2/rte_eth_szedata2.c | 1 +
>  drivers/net/thunderx/nicvf_ethdev.c     | 2 ++
>  drivers/net/virtio/virtio_ethdev.c      | 1 +
>  drivers/net/vmxnet3/vmxnet3_ethdev.c    | 2 ++
>  lib/librte_ether/rte_ethdev.c           | 1 -
>  20 files changed, 28 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c
> index c331ccd..551dbad 100644
> --- a/drivers/net/bnx2x/bnx2x_ethdev.c
> +++ b/drivers/net/bnx2x/bnx2x_ethdev.c
> @@ -431,6 +431,7 @@ static void
>  bnx2x_dev_infos_get(struct rte_eth_dev *dev, __rte_unused struct rte_eth_dev_info *dev_info)
>  {
>  	struct bnx2x_softc *sc = dev->data->dev_private;
> +	dev_info->pci_dev = ETH_DEV_PCI_DEV(dev);
>  	dev_info->max_rx_queues  = sc->max_rx_queues;
>  	dev_info->max_tx_queues  = sc->max_tx_queues;
>  	dev_info->min_rx_bufsize = BNX2X_MIN_RX_BUF_SIZE;
> diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
> index cd50f11..bf39fbe 100644
> --- a/drivers/net/bnxt/bnxt_ethdev.c
> +++ b/drivers/net/bnxt/bnxt_ethdev.c
> @@ -303,6 +303,8 @@ static void bnxt_dev_info_get_op(struct rte_eth_dev *eth_dev,
>  	struct bnxt *bp = (struct bnxt *)eth_dev->data->dev_private;
>  	uint16_t max_vnics, i, j, vpool, vrxq;
>  
> +	dev_info->pci_dev = ETH_DEV_PCI_DEV(eth_dev);
> +
>  	/* MAC Specifics */
>  	dev_info->max_mac_addrs = MAX_NUM_MAC_ADDR;
>  	dev_info->max_hash_mac_addrs = 0;
> diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c b/drivers/net/cxgbe/cxgbe_ethdev.c
> index 8bfdda8..8938b08 100644
> --- a/drivers/net/cxgbe/cxgbe_ethdev.c
> +++ b/drivers/net/cxgbe/cxgbe_ethdev.c
> @@ -147,6 +147,8 @@ static void cxgbe_dev_info_get(struct rte_eth_dev *eth_dev,
>  		.nb_align = 1,
>  	};
>  
> +	device_info->pci_dev = ETH_DEV_PCI_DEV(eth_dev);
> +
>  	device_info->min_rx_bufsize = CXGBE_MIN_RX_BUFSIZE;
>  	device_info->max_rx_pktlen = CXGBE_MAX_RX_PKTLEN;
>  	device_info->max_rx_queues = max_queues;
> diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c
> index 7f2f521..3d34e5b 100644
> --- a/drivers/net/e1000/em_ethdev.c
> +++ b/drivers/net/e1000/em_ethdev.c
> @@ -1048,6 +1048,7 @@ eth_em_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
>  {
>  	struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
>  
> +	dev_info->pci_dev = ETH_DEV_PCI_DEV(dev);
>  	dev_info->min_rx_bufsize = 256; /* See BSIZE field of RCTL register. */
>  	dev_info->max_rx_pktlen = em_get_max_pktlen(hw);
>  	dev_info->max_mac_addrs = hw->mac.rar_entry_count;
> diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c
> index b25c66e..7d77561 100644
> --- a/drivers/net/e1000/igb_ethdev.c
> +++ b/drivers/net/e1000/igb_ethdev.c
> @@ -1983,6 +1983,7 @@ eth_igb_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
>  {
>  	struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
>  
> +	dev_info->pci_dev = ETH_DEV_PCI_DEV(dev);
>  	dev_info->min_rx_bufsize = 256; /* See BSIZE field of RCTL register. */
>  	dev_info->max_rx_pktlen  = 0x3FFF; /* See RLPML register. */
>  	dev_info->max_mac_addrs = hw->mac.rar_entry_count;
> @@ -2111,6 +2112,7 @@ eth_igbvf_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
>  {
>  	struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
>  
> +	dev_info->pci_dev = ETH_DEV_PCI_DEV(dev);
>  	dev_info->min_rx_bufsize = 256; /* See BSIZE field of RCTL register. */
>  	dev_info->max_rx_pktlen  = 0x3FFF; /* See RLPML register. */
>  	dev_info->max_mac_addrs = hw->mac.rar_entry_count;
> diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c
> index c17d969..051275e 100644
> --- a/drivers/net/ena/ena_ethdev.c
> +++ b/drivers/net/ena/ena_ethdev.c
> @@ -1436,6 +1436,8 @@ static void ena_infos_get(struct rte_eth_dev *dev,
>  	ena_dev = &adapter->ena_dev;
>  	ena_assert_msg(ena_dev != NULL, "Uninitialized device");
>  
> +	dev_info->pci_dev = ETH_DEV_PCI_DEV(dev);
> +
>  	dev_info->speed_capa =
>  			ETH_LINK_SPEED_1G   |
>  			ETH_LINK_SPEED_2_5G |
> diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c
> index 553a88e..bb5dfe6 100644
> --- a/drivers/net/enic/enic_ethdev.c
> +++ b/drivers/net/enic/enic_ethdev.c
> @@ -459,6 +459,7 @@ static void enicpmd_dev_info_get(struct rte_eth_dev *eth_dev,
>  	struct enic *enic = pmd_priv(eth_dev);
>  
>  	ENICPMD_FUNC_TRACE();
> +	device_info->pci_dev = ETH_DEV_PCI_DEV(eth_dev);
>  	/* Scattered Rx uses two receive queues per rx queue exposed to dpdk */
>  	device_info->max_rx_queues = enic->conf_rq_count / 2;
>  	device_info->max_tx_queues = enic->conf_wq_count;
> diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c
> index e1250f6..5d0bce5 100644
> --- a/drivers/net/fm10k/fm10k_ethdev.c
> +++ b/drivers/net/fm10k/fm10k_ethdev.c
> @@ -1392,6 +1392,7 @@ fm10k_dev_infos_get(struct rte_eth_dev *dev,
>  
>  	PMD_INIT_FUNC_TRACE();
>  
> +	dev_info->pci_dev            = ETH_DEV_PCI_DEV(dev);
>  	dev_info->min_rx_bufsize     = FM10K_MIN_RX_BUF_SIZE;
>  	dev_info->max_rx_pktlen      = FM10K_MAX_PKT_SIZE;
>  	dev_info->max_rx_queues      = hw->mac.max_queues;
> diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
> index 8a63a8c..29c0277 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -2583,6 +2583,7 @@ i40e_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
>  	struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private);
>  	struct i40e_vsi *vsi = pf->main_vsi;
>  
> +	dev_info->pci_dev = ETH_DEV_PCI_DEV(dev);
>  	dev_info->max_rx_queues = vsi->nb_qps;
>  	dev_info->max_tx_queues = vsi->nb_qps;
>  	dev_info->min_rx_bufsize = I40E_BUF_SIZE_MIN;
> diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c
> index 781e658..caef72c 100644
> --- a/drivers/net/i40e/i40e_ethdev_vf.c
> +++ b/drivers/net/i40e/i40e_ethdev_vf.c
> @@ -2217,6 +2217,7 @@ i40evf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
>  	struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);
>  
>  	memset(dev_info, 0, sizeof(*dev_info));
> +	dev_info->pci_dev = ETH_DEV_PCI_DEV(dev);
>  	dev_info->max_rx_queues = vf->vsi_res->num_queue_pairs;
>  	dev_info->max_tx_queues = vf->vsi_res->num_queue_pairs;
>  	dev_info->min_rx_bufsize = I40E_BUF_SIZE_MIN;
> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
> index f17da46..c88b7bf 100644
> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
> @@ -3043,6 +3043,7 @@ ixgbe_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
>  	struct rte_eth_conf *dev_conf = &dev->data->dev_conf;
>  	struct rte_pci_device *pci_dev = ETH_DEV_PCI_DEV(dev);
>  
> +	dev_info->pci_dev = ETH_DEV_PCI_DEV(dev);
>  	dev_info->max_rx_queues = (uint16_t)hw->mac.max_rx_queues;
>  	dev_info->max_tx_queues = (uint16_t)hw->mac.max_tx_queues;
>  	if (RTE_ETH_DEV_SRIOV(dev).active == 0) {
> @@ -3175,6 +3176,7 @@ ixgbevf_dev_info_get(struct rte_eth_dev *dev,
>  	struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
>  	struct rte_pci_device *pci_dev = ETH_DEV_PCI_DEV(dev);
>  
> +	dev_info->pci_dev = ETH_DEV_PCI_DEV(dev);
>  	dev_info->max_rx_queues = (uint16_t)hw->mac.max_rx_queues;
>  	dev_info->max_tx_queues = (uint16_t)hw->mac.max_tx_queues;
>  	dev_info->min_rx_bufsize = 1024; /* cf BSIZEPACKET in SRRCTL reg */
> diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c
> index da61a85..5455fea 100644
> --- a/drivers/net/mlx4/mlx4.c
> +++ b/drivers/net/mlx4/mlx4.c
> @@ -4421,6 +4421,8 @@ mlx4_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info)
>  	unsigned int max;
>  	char ifname[IF_NAMESIZE];
>  
> +	info->pci_dev = ETH_DEV_PCI_DEV(dev);
> +
>  	if (priv == NULL)
>  		return;
>  	priv_lock(priv);
> diff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c
> index c0f73e9..489a4f6 100644
> --- a/drivers/net/mlx5/mlx5_ethdev.c
> +++ b/drivers/net/mlx5/mlx5_ethdev.c
> @@ -562,6 +562,8 @@ mlx5_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info)
>  	unsigned int max;
>  	char ifname[IF_NAMESIZE];
>  
> +	info->pci_dev = ETH_DEV_PCI_DEV(dev);
> +
>  	priv_lock(priv);
>  	/* FIXME: we should ask the device for these values. */
>  	info->min_rx_bufsize = 32;
> diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c
> index 7299fad..c49d38a 100644
> --- a/drivers/net/nfp/nfp_net.c
> +++ b/drivers/net/nfp/nfp_net.c
> @@ -1008,6 +1008,7 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
>  
>  	hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);
>  
> +	dev_info->pci_dev = ETH_DEV_PCI_DEV(dev);
>  	dev_info->driver_name = dev->driver->pci_drv.driver.name;
>  	dev_info->max_rx_queues = (uint16_t)hw->max_rx_queues;
>  	dev_info->max_tx_queues = (uint16_t)hw->max_tx_queues;
> diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
> index 959ff0f..2c4de92 100644
> --- a/drivers/net/qede/qede_ethdev.c
> +++ b/drivers/net/qede/qede_ethdev.c
> @@ -652,6 +652,7 @@ qede_dev_info_get(struct rte_eth_dev *eth_dev,
>  
>  	PMD_INIT_FUNC_TRACE(edev);
>  
> +	dev_info->pci_dev = ETH_DEV_PCI_DEV(eth_dev);
>  	dev_info->min_rx_bufsize = (uint32_t)(ETHER_MIN_MTU +
>  					      QEDE_ETH_OVERHEAD);
>  	dev_info->max_rx_pktlen = (uint32_t)ETH_TX_MAX_NON_LSO_PKT_LEN;
> diff --git a/drivers/net/szedata2/rte_eth_szedata2.c b/drivers/net/szedata2/rte_eth_szedata2.c
> index 6d80a5b..6356257 100644
> --- a/drivers/net/szedata2/rte_eth_szedata2.c
> +++ b/drivers/net/szedata2/rte_eth_szedata2.c
> @@ -1030,6 +1030,7 @@ eth_dev_info(struct rte_eth_dev *dev,
>  		struct rte_eth_dev_info *dev_info)
>  {
>  	struct pmd_internals *internals = dev->data->dev_private;
> +	dev_info->pci_dev = ETH_DEV_PCI_DEV(dev);
>  	dev_info->if_index = 0;
>  	dev_info->max_mac_addrs = 1;
>  	dev_info->max_rx_pktlen = (uint32_t)-1;
> diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c
> index 099b252..daac853 100644
> --- a/drivers/net/thunderx/nicvf_ethdev.c
> +++ b/drivers/net/thunderx/nicvf_ethdev.c
> @@ -1339,6 +1339,8 @@ nicvf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
>  
>  	PMD_INIT_FUNC_TRACE();
>  
> +	dev_info->pci_dev = pci_dev;
> +
>  	dev_info->min_rx_bufsize = ETHER_MIN_MTU;
>  	dev_info->max_rx_pktlen = NIC_HW_MAX_FRS;
>  	dev_info->max_rx_queues =
> diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
> index 023101d..2eb6a06 100644
> --- a/drivers/net/virtio/virtio_ethdev.c
> +++ b/drivers/net/virtio/virtio_ethdev.c
> @@ -1625,6 +1625,7 @@ virtio_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
>  	uint64_t tso_mask;
>  	struct virtio_hw *hw = dev->data->dev_private;
>  
> +	dev_info->pci_dev = hw->dev;
>  	dev_info->max_rx_queues =
>  		RTE_MIN(hw->max_queue_pairs, VIRTIO_MAX_RX_QUEUES);
>  	dev_info->max_tx_queues =
> diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c
> index bcb3751..f7c0382 100644
> --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
> +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
> @@ -709,6 +709,8 @@ static void
>  vmxnet3_dev_info_get(__rte_unused struct rte_eth_dev *dev,
>  		     struct rte_eth_dev_info *dev_info)
>  {
> +	dev_info->pci_dev = ETH_DEV_PCI_DEV(dev);
> +
>  	dev_info->max_rx_queues = VMXNET3_MAX_RX_QUEUES;
>  	dev_info->max_tx_queues = VMXNET3_MAX_TX_QUEUES;
>  	dev_info->min_rx_bufsize = 1518 + RTE_PKTMBUF_HEADROOM;
> diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
> index fde8112..4288577 100644
> --- a/lib/librte_ether/rte_ethdev.c
> +++ b/lib/librte_ether/rte_ethdev.c
> @@ -1556,7 +1556,6 @@ rte_eth_dev_info_get(uint8_t port_id, struct rte_eth_dev_info *dev_info)
>  
>  	RTE_FUNC_PTR_OR_RET(*dev->dev_ops->dev_infos_get);
>  	(*dev->dev_ops->dev_infos_get)(dev, dev_info);
> -	dev_info->pci_dev = dev->pci_dev;
>  	dev_info->driver_name = dev->data->drv_name;
>  	dev_info->nb_rx_queues = dev->data->nb_rx_queues;
>  	dev_info->nb_tx_queues = dev->data->nb_tx_queues;


If dev_info_get sets a pointer to device (rather than pci_dev) then it can
stay in generic code.

^ permalink raw reply

* Re: [PATCH v3 07/25] app/testpmd: add flow command
From: Ferruh Yigit @ 2016-12-20 16:13 UTC (permalink / raw)
  To: Adrien Mazarguil, dev
In-Reply-To: <a0b3dd1abb3a4c45786cae7f874084c1a13e34d1.1482168851.git.adrien.mazarguil@6wind.com>

Hi Adrien,

On 12/19/2016 5:48 PM, Adrien Mazarguil wrote:
> Managing generic flow API functions from command line requires the use of
> dynamic tokens for convenience as flow rules are not fixed and cannot be
> defined statically.
> 
> This commit adds specific flexible parser code and object for a new "flow"
> command in separate file.
> 
> Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
> Acked-by: Olga Shern <olgas@mellanox.com>

<...>

> +/** Initialize context. */
> +static void
> +cmd_flow_context_init(struct context *ctx)
> +{
> +	/* A full memset() is not necessary. */
> +	ctx->curr = 0;
> +	ctx->prev = 0;

It seems you have cleaned up all compiler warnings, including bunch of
ICC e188 ones, instead of ignoring them. Thank you for your effort.

These ones are only remaining ones as far as I can see:
ctx->curr = ZERO;
ctx->prev = ZERO;

Thanks,
ferruh

<...>

^ permalink raw reply

* Re: [PATCH v3 00/31] net/i40e: base code update
From: Gregory Etelson @ 2016-12-20 16:21 UTC (permalink / raw)
  To: dev; +Cc: Ferruh Yigit, Jingjing Wu, helin.zhang
In-Reply-To: <4364070.FlkcxLpqix@polaris>

add dmesg output:

dmar: DRHD: handling fault status reg 502
dmar: DMAR:[DMA Read] Request device [04:00.0] fault addr 865bcc000 
DMAR:[fault reason 02] Present bit in context entry is clear
dmar: DRHD: handling fault status reg 602
dmar: DMAR:[DMA Read] Request device [04:00.0] fault addr 865bcc000 
DMAR:[fault reason 02] Present bit in context entry is clear
dmar: DRHD: handling fault status reg 702
dmar: DMAR:[DMA Read] Request device [04:00.0] fault addr 865bcc000 
DMAR:[fault reason 02] Present bit in context entry is clear
dmar: DRHD: handling fault status reg 2
dmar: DMAR:[DMA Read] Request device [04:00.0] fault addr 865bcc000 
DMAR:[fault reason 02] Present bit in context entry is clear
dmar: DRHD: handling fault status reg 102
dmar: DMAR:[DMA Read] Request device [04:00.0] fault addr 865bcc000 
DMAR:[fault reason 02] Present bit in context entry is clear
dmar: DRHD: handling fault status reg 202
dmar: DMAR:[DMA Read] Request device [04:00.0] fault addr 865bcc000 
DMAR:[fault reason 02] Present bit in context entry is clear
dmar: DRHD: handling fault status reg 302
dmar: DMAR:[DMA Read] Request device [04:00.0] fault addr 865bcc000 
DMAR:[fault reason 02] Present bit in context entry is clear
dmar: DRHD: handling fault status reg 402
dmar: DMAR:[DMA Read] Request device [04:00.0] fault addr 865bcc000 
DMAR:[fault reason 02] Present bit in context entry is clear
dmar: DRHD: handling fault status reg 502
dmar: DMAR:[DMA Read] Request device [04:00.0] fault addr 865bcc000 
DMAR:[fault reason 02] Present bit in context entry is clear
dmar: DRHD: handling fault status reg 602
dmar: DMAR:[DMA Read] Request device [04:00.0] fault addr 865bcc000 
DMAR:[fault reason 02] Present bit in context entry is clear


Hello,

I have several XL710-Q2 interfaces that fail with
`PMD: eth_i40e_dev_init(): Failed to init adminq: -54'
Rebase to the latest dpdk-next-net/master did not fix the fault
Firmware version is 5.04 0x80002505 0.0.0
lspci output looks the same for working and failed interfaces

Full traces with all I40*DEBUG options enabled follow.

Is there a way to extract more info to investigate this fault ?

Regards,
Gregory

EAL: Detected lcore 0 as core 0 on socket 0
EAL: Detected lcore 1 as core 0 on socket 1
EAL: Detected lcore 2 as core 1 on socket 0
EAL: Detected lcore 3 as core 1 on socket 1
EAL: Detected lcore 4 as core 2 on socket 0
EAL: Detected lcore 5 as core 2 on socket 1
EAL: Detected lcore 6 as core 3 on socket 0
EAL: Detected lcore 7 as core 3 on socket 1
EAL: Detected lcore 8 as core 6 on socket 0
EAL: Detected lcore 9 as core 6 on socket 1
EAL: Detected lcore 10 as core 7 on socket 0
EAL: Detected lcore 11 as core 7 on socket 1
EAL: Detected lcore 12 as core 0 on socket 0
EAL: Detected lcore 13 as core 0 on socket 1
EAL: Detected lcore 14 as core 1 on socket 0
EAL: Detected lcore 15 as core 1 on socket 1
EAL: Detected lcore 16 as core 2 on socket 0
EAL: Detected lcore 17 as core 2 on socket 1
EAL: Detected lcore 18 as core 3 on socket 0
EAL: Detected lcore 19 as core 3 on socket 1
EAL: Detected lcore 20 as core 6 on socket 0
EAL: Detected lcore 21 as core 6 on socket 1
EAL: Detected lcore 22 as core 7 on socket 0
EAL: Detected lcore 23 as core 7 on socket 1
EAL: Support maximum 128 logical core(s) by configuration.
EAL: Detected 24 lcore(s)
EAL: Debug logs available - lower performance
EAL: Setting up physically contiguous memory...
EAL: Ask a virtual area of 0x200000 bytes
EAL: Virtual area found at 0x7f4203a00000 (size = 0x200000)
EAL: Ask a virtual area of 0x1f7000000 bytes
EAL: Virtual area found at 0x7f400c800000 (size = 0x1f7000000)
EAL: Ask a virtual area of 0x800000 bytes
EAL: Virtual area found at 0x7f400be00000 (size = 0x800000)
EAL: Ask a virtual area of 0x2400000 bytes
EAL: Virtual area found at 0x7f4009800000 (size = 0x2400000)
EAL: Ask a virtual area of 0x4800000 bytes
EAL: Virtual area found at 0x7f4004e00000 (size = 0x4800000)
EAL: Ask a virtual area of 0x1800000 bytes
EAL: Virtual area found at 0x7f4003400000 (size = 0x1800000)
EAL: Ask a virtual area of 0x200000 bytes
EAL: Virtual area found at 0x7f4003000000 (size = 0x200000)
EAL: Ask a virtual area of 0x200000 bytes
EAL: Virtual area found at 0x7f4002c00000 (size = 0x200000)
EAL: Ask a virtual area of 0x1ffc00000 bytes
EAL: Virtual area found at 0x7f3e02e00000 (size = 0x1ffc00000)
EAL: Ask a virtual area of 0x200000 bytes
EAL: Virtual area found at 0x7f3e02a00000 (size = 0x200000)
EAL: Requesting 4096 pages of size 2MB from socket 0
EAL: Requesting 4096 pages of size 2MB from socket 1
EAL: TSC frequency is ~3400010 KHz
EAL: Master lcore 0 is ready (tid=5e938c0;cpuset=[0])
EAL: lcore 4 is ready (tid=1ffe700;cpuset=[4])
EAL: lcore 8 is ready (tid=ff7fa700;cpuset=[8])
EAL: lcore 2 is ready (tid=4a5d700;cpuset=[2])
EAL: lcore 3 is ready (tid=29ff700;cpuset=[3])
EAL: lcore 9 is ready (tid=fedf9700;cpuset=[9])
EAL: lcore 10 is ready (tid=fe3f8700;cpuset=[10])
EAL: lcore 15 is ready (tid=fb1f3700;cpuset=[15])
EAL: lcore 16 is ready (tid=fa7f2700;cpuset=[16])
EAL: lcore 14 is ready (tid=fbbf4700;cpuset=[14])
EAL: lcore 18 is ready (tid=f93f0700;cpuset=[18])
EAL: lcore 12 is ready (tid=fcff6700;cpuset=[12])
EAL: lcore 1 is ready (tid=545e700;cpuset=[1])
EAL: lcore 20 is ready (tid=f7fee700;cpuset=[20])
EAL: lcore 19 is ready (tid=f89ef700;cpuset=[19])
EAL: lcore 5 is ready (tid=15fd700;cpuset=[5])
EAL: lcore 11 is ready (tid=fd9f7700;cpuset=[11])
EAL: lcore 17 is ready (tid=f9df1700;cpuset=[17])
EAL: lcore 6 is ready (tid=bfc700;cpuset=[6])
EAL: lcore 21 is ready (tid=f75ed700;cpuset=[21])
EAL: lcore 13 is ready (tid=fc5f5700;cpuset=[13])
EAL: lcore 23 is ready (tid=f61eb700;cpuset=[23])
EAL: lcore 22 is ready (tid=f6bec700;cpuset=[22])
EAL: lcore 7 is ready (tid=1fb700;cpuset=[7])
EAL: PCI device 0000:04:00.0 on NUMA socket 0
EAL:   probe driver: 8086:1583 net_i40e
EAL:   PCI memory mapped at 0x7f3df4feb000
EAL:   PCI memory mapped at 0x7f4204055000
PMD: eth_i40e_dev_init():  >>
PMD: i40e_enable_extended_tag(): Extended Tag has already been enabled
PMD: i40e_set_symmetric_hash_enable_per_port(): Symmetric hash has already been disabled
PMD: i40e_pf_reset(): Core and Global modules ready 0
PMD: i40e_init_shared_code(): i40e_init_shared_code
PMD: i40e_set_mac_type(): i40e_set_mac_type

PMD: i40e_set_mac_type(): i40e_set_mac_type found mac: 1, returns: 0
PMD: i40e_init_nvm(): i40e_init_nvm
PMD: i40e_check_write_reg(): [0x002507c0] original: 0x00000000

PMD: i40e_check_write_reg(): [0x002507c0] after: 0x00000000

PMD: i40e_check_write_reg(): [0x002507e0] original: 0x0001801e

PMD: i40e_check_write_reg(): [0x002507e0] after: 0x0001801e

PMD: i40e_check_write_reg(): [0x002676f8] original: 0x00000000

PMD: i40e_check_write_reg(): [0x002676f8] after: 0x00000000

PMD: i40e_check_write_reg(): [0x002676fc] original: 0x0001801e

PMD: i40e_check_write_reg(): [0x002676fc] after: 0x0001801e

PMD: i40e_check_write_reg(): [0x002672f8] original: 0x00000000

PMD: i40e_check_write_reg(): [0x002672f8] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267af8] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267af8] after: 0x00000000

PMD: i40e_check_write_reg(): [0x002672fc] original: 0x00000000

PMD: i40e_check_write_reg(): [0x002672fc] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267afc] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267afc] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250840] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00250840] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250860] original: 0x0001801e

PMD: i40e_check_write_reg(): [0x00250860] after: 0x0001801e

PMD: i40e_check_write_reg(): [0x00267708] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267708] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026770c] original: 0x0001801e

PMD: i40e_check_write_reg(): [0x0026770c] after: 0x0001801e

PMD: i40e_check_write_reg(): [0x00267308] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267308] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b08] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b08] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026730c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x0026730c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b0c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b0c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250880] original: 0x80000000

PMD: i40e_check_write_reg(): [0x00250880] after: 0x80000000

PMD: i40e_check_write_reg(): [0x002508a0] original: 0x0001801f

PMD: i40e_check_write_reg(): [0x002508a0] after: 0x0001801f

PMD: i40e_check_write_reg(): [0x00267710] original: 0x80000000

PMD: i40e_check_write_reg(): [0x00267710] after: 0x80000000

PMD: i40e_check_write_reg(): [0x00267714] original: 0x0001801f

PMD: i40e_check_write_reg(): [0x00267714] after: 0x0001801f

PMD: i40e_check_write_reg(): [0x00267310] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267310] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b10] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b10] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267314] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267314] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b14] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b14] after: 0x00000000

PMD: i40e_check_write_reg(): [0x002508c0] original: 0x00000000

PMD: i40e_check_write_reg(): [0x002508c0] after: 0x00000000

PMD: i40e_check_write_reg(): [0x002508e0] original: 0x00018018

PMD: i40e_check_write_reg(): [0x002508e0] after: 0x00018018

PMD: i40e_check_write_reg(): [0x00267718] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267718] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026771c] original: 0x00018018

PMD: i40e_check_write_reg(): [0x0026771c] after: 0x00018018

PMD: i40e_check_write_reg(): [0x00267318] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267318] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b18] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b18] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026731c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x0026731c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b1c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b1c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250900] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00250900] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250920] original: 0x00018018

PMD: i40e_check_write_reg(): [0x00250920] after: 0x00018018

PMD: i40e_check_write_reg(): [0x00267720] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267720] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267724] original: 0x00018018

PMD: i40e_check_write_reg(): [0x00267724] after: 0x00018018

PMD: i40e_check_write_reg(): [0x00267320] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267320] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b20] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b20] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267324] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267324] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b24] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b24] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250a40] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00250a40] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250a60] original: 0x0007fffe

PMD: i40e_check_write_reg(): [0x00250a60] after: 0x0007fffe

PMD: i40e_check_write_reg(): [0x00267748] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267748] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026774c] original: 0x0007fffe

PMD: i40e_check_write_reg(): [0x0026774c] after: 0x0007fffe

PMD: i40e_check_write_reg(): [0x00267348] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267348] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b48] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b48] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026734c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x0026734c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b4c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b4c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250ac0] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00250ac0] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250ae0] original: 0x0007fffe

PMD: i40e_check_write_reg(): [0x00250ae0] after: 0x0007fffe

PMD: i40e_check_write_reg(): [0x00267758] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267758] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026775c] original: 0x0007fffe

PMD: i40e_check_write_reg(): [0x0026775c] after: 0x0007fffe

PMD: i40e_check_write_reg(): [0x00267358] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267358] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b58] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b58] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026735c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x0026735c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b5c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b5c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250b00] original: 0x80000000

PMD: i40e_check_write_reg(): [0x00250b00] after: 0x80000000

PMD: i40e_check_write_reg(): [0x00250b20] original: 0x0007ffff

PMD: i40e_check_write_reg(): [0x00250b20] after: 0x0007ffff

PMD: i40e_check_write_reg(): [0x00267760] original: 0x80000000

PMD: i40e_check_write_reg(): [0x00267760] after: 0x80000000

PMD: i40e_check_write_reg(): [0x00267764] original: 0x0007ffff

PMD: i40e_check_write_reg(): [0x00267764] after: 0x0007ffff

PMD: i40e_check_write_reg(): [0x00267360] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267360] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b60] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b60] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267364] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267364] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b64] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b64] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250b40] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00250b40] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250b60] original: 0x0007fff8

PMD: i40e_check_write_reg(): [0x00250b60] after: 0x0007fff8

PMD: i40e_check_write_reg(): [0x00267768] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267768] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026776c] original: 0x0007fff8

PMD: i40e_check_write_reg(): [0x0026776c] after: 0x0007fff8

PMD: i40e_check_write_reg(): [0x00267368] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267368] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b68] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b68] after: 0x00000000

PMD: i40e_check_write_reg(): [0x0026736c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x0026736c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b6c] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b6c] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250b80] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00250b80] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250ba0] original: 0x0007fff8

PMD: i40e_check_write_reg(): [0x00250ba0] after: 0x0007fff8

PMD: i40e_check_write_reg(): [0x00267770] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267770] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267774] original: 0x0007fff8

PMD: i40e_check_write_reg(): [0x00267774] after: 0x0007fff8

PMD: i40e_check_write_reg(): [0x00267370] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267370] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b70] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b70] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267374] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267374] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b74] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267b74] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00250fc0] original: 0x00004000

PMD: i40e_check_write_reg(): [0x00250fc0] after: 0x00004000

PMD: i40e_check_write_reg(): [0x00250fe0] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00250fe0] after: 0x00000000

PMD: i40e_check_write_reg(): [0x002677f8] original: 0x00004000

PMD: i40e_check_write_reg(): [0x002677f8] after: 0x00004000

PMD: i40e_check_write_reg(): [0x002677fc] original: 0x00000000

PMD: i40e_check_write_reg(): [0x002677fc] after: 0x00000000

PMD: i40e_check_write_reg(): [0x002673f8] original: 0x00000000

PMD: i40e_check_write_reg(): [0x002673f8] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267bf8] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267bf8] after: 0x00000000

PMD: i40e_check_write_reg(): [0x002673fc] original: 0x00000000

PMD: i40e_check_write_reg(): [0x002673fc] after: 0x00000000

PMD: i40e_check_write_reg(): [0x00267bfc] original: 0x00000000

PMD: i40e_check_write_reg(): [0x00267bfc] after: 0x00000000

PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_9006244102256549392 allocated with physical address: 36066607104
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_9094591617955485484 allocated with physical address: 36066598912
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_4921817593146928058 allocated with physical address: 36066590720
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1649522919998970242 allocated with physical address: 36066582528
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_5592431459765142899 allocated with physical address: 36066574336
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_3616263856304680647 allocated with physical address: 36066566144
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_6135573337873051539 allocated with physical address: 36066557952
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_2979425320734363433 allocated with physical address: 36066549760
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_7004567199046153392 allocated with physical address: 36066541568
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_2400349342071320464 allocated with physical address: 36066533376
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1198569822703064929 allocated with physical address: 36066525184
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_2381874768605265457 allocated with physical address: 36066516992
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_946809976207957533 allocated with physical address: 36066508800
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_8890428114805413440 allocated with physical address: 36066500608
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_3659808187846474561 allocated with physical address: 36066492416
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_6643860085814082754 allocated with physical address: 36066484224
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1077965980644684592 allocated with physical address: 36066476032
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_757788774034593920 allocated with physical address: 36066467840
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_8871964809840853652 allocated with physical address: 36066459648
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1319458200989398807 allocated with physical address: 36066451456
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1260444229190182595 allocated with physical address: 36066443264
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_4944475028266209581 allocated with physical address: 36066435072
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1981506286114228798 allocated with physical address: 36066426880
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_6995706941756923838 allocated with physical address: 36066418688
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_6845860763940517715 allocated with physical address: 36066410496
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_6316736255568508052 allocated with physical address: 36066402304
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_6596345420547494626 allocated with physical address: 36066394112
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_563052720231491541 allocated with physical address: 36066385920
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_5438500282421395772 allocated with physical address: 36066377728
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1489311620446309558 allocated with physical address: 36066369536
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1034342050721494823 allocated with physical address: 36066361344
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_895587109620334414 allocated with physical address: 36066353152
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_7244783987789076734 allocated with physical address: 36066344960
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_8121331692218482053 allocated with physical address: 36066340864
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_357653678358899189 allocated with physical address: 36066332672
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_8279673960611224875 allocated with physical address: 36066324480
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_3128505479544499579 allocated with physical address: 36066316288
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_8860600185294246181 allocated with physical address: 36066308096
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_2923794349289372856 allocated with physical address: 36066299904
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_3555496033731071937 allocated with physical address: 36066291712
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_546014499550556726 allocated with physical address: 36066283520
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_2488579372291755051 allocated with physical address: 36066275328
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_6650067233218882971 allocated with physical address: 36066267136
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_2356739082095908089 allocated with physical address: 36066258944
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_4594387210783084948 allocated with physical address: 36066250752
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_8514595240639990241 allocated with physical address: 36066242560
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_3355784826824932814 allocated with physical address: 36066234368
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_6035703664050813578 allocated with physical address: 36066226176
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1826820887759906590 allocated with physical address: 36066217984
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_3162038796587606143 allocated with physical address: 36066209792
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_4571605943746334657 allocated with physical address: 36066201600
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_8896333848084252224 allocated with physical address: 36066193408
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_4966872707505717693 allocated with physical address: 36066185216
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_3893530533784472947 allocated with physical address: 36066177024
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_1217637539560590694 allocated with physical address: 36066168832
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_5878423844769130040 allocated with physical address: 36066160640
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_8739981701704134140 allocated with physical address: 36066152448
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_8562536557899098522 allocated with physical address: 36066144256
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_4304574794556610162 allocated with physical address: 36066136064
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_7499349118597146913 allocated with physical address: 36066127872
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_936617606270126154 allocated with physical address: 36066119680
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_4843208302417061252 allocated with physical address: 36066111488
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_4297764810681972379 allocated with physical address: 36066103296
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_3836696837872975483 allocated with physical address: 36066095104
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_72325700428175156 allocated with physical address: 36066086912
PMD: i40e_allocate_dma_mem_d(): memzone i40e_dma_6444087963138592179 allocated with physical address: 36066078720
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_357653678358899189 to be freed with physical address: 36066332672
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_8279673960611224875 to be freed with physical address: 36066324480
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_3128505479544499579 to be freed with physical address: 36066316288
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_8860600185294246181 to be freed with physical address: 36066308096
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_2923794349289372856 to be freed with physical address: 36066299904
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_3555496033731071937 to be freed with physical address: 36066291712
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_546014499550556726 to be freed with physical address: 36066283520
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_2488579372291755051 to be freed with physical address: 36066275328
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_6650067233218882971 to be freed with physical address: 36066267136
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_2356739082095908089 to be freed with physical address: 36066258944
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_4594387210783084948 to be freed with physical address: 36066250752
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_8514595240639990241 to be freed with physical address: 36066242560
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_3355784826824932814 to be freed with physical address: 36066234368
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_6035703664050813578 to be freed with physical address: 36066226176
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1826820887759906590 to be freed with physical address: 36066217984
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_3162038796587606143 to be freed with physical address: 36066209792
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_4571605943746334657 to be freed with physical address: 36066201600
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_8896333848084252224 to be freed with physical address: 36066193408
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_4966872707505717693 to be freed with physical address: 36066185216
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_3893530533784472947 to be freed with physical address: 36066177024
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1217637539560590694 to be freed with physical address: 36066168832
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_5878423844769130040 to be freed with physical address: 36066160640
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_8739981701704134140 to be freed with physical address: 36066152448
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_8562536557899098522 to be freed with physical address: 36066144256
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_4304574794556610162 to be freed with physical address: 36066136064
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_7499349118597146913 to be freed with physical address: 36066127872
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_936617606270126154 to be freed with physical address: 36066119680
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_4843208302417061252 to be freed with physical address: 36066111488
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_4297764810681972379 to be freed with physical address: 36066103296
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_3836696837872975483 to be freed with physical address: 36066095104
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_72325700428175156 to be freed with physical address: 36066086912
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_6444087963138592179 to be freed with physical address: 36066078720
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_8121331692218482053 to be freed with physical address: 36066340864
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_9094591617955485484 to be freed with physical address: 36066598912
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_4921817593146928058 to be freed with physical address: 36066590720
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1649522919998970242 to be freed with physical address: 36066582528
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_5592431459765142899 to be freed with physical address: 36066574336
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_3616263856304680647 to be freed with physical address: 36066566144
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_6135573337873051539 to be freed with physical address: 36066557952
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_2979425320734363433 to be freed with physical address: 36066549760
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_7004567199046153392 to be freed with physical address: 36066541568
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_2400349342071320464 to be freed with physical address: 36066533376
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1198569822703064929 to be freed with physical address: 36066525184
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_2381874768605265457 to be freed with physical address: 36066516992
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_946809976207957533 to be freed with physical address: 36066508800
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_8890428114805413440 to be freed with physical address: 36066500608
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_3659808187846474561 to be freed with physical address: 36066492416
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_6643860085814082754 to be freed with physical address: 36066484224
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1077965980644684592 to be freed with physical address: 36066476032
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_757788774034593920 to be freed with physical address: 36066467840
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_8871964809840853652 to be freed with physical address: 36066459648
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1319458200989398807 to be freed with physical address: 36066451456
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1260444229190182595 to be freed with physical address: 36066443264
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_4944475028266209581 to be freed with physical address: 36066435072
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1981506286114228798 to be freed with physical address: 36066426880
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_6995706941756923838 to be freed with physical address: 36066418688
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_6845860763940517715 to be freed with physical address: 36066410496
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_6316736255568508052 to be freed with physical address: 36066402304
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_6596345420547494626 to be freed with physical address: 36066394112
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_563052720231491541 to be freed with physical address: 36066385920
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_5438500282421395772 to be freed with physical address: 36066377728
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1489311620446309558 to be freed with physical address: 36066369536
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_1034342050721494823 to be freed with physical address: 36066361344
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_895587109620334414 to be freed with physical address: 36066353152
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_7244783987789076734 to be freed with physical address: 36066344960
PMD: i40e_free_dma_mem_d(): memzone i40e_dma_9006244102256549392 to be freed with physical address: 36066607104
PMD: eth_i40e_dev_init(): Failed to init adminq: -54
EAL: Error - exiting with code: 1
  Cause: Requested device 0000:04:00.0 cannot be used



On Monday, 12 December 2016 10:32:24 IST Ferruh Yigit wrote:
> On 12/10/2016 11:24 AM, Jingjing Wu wrote:
> > i40e base code upate. The main changes are:
> >  - add clause22 and clause45 implementation for PHY registers accessing
> >  - replace existing legacy memcpy() calls with i40e_memcpy() calls.
> >  - use BIT() macro instead of bit fields
> >  - add clear all WoL filters implementation
> >  - add ERROR state for NVM update state machine
> >  - add broadcast promiscuous control per VLAN
> >  - remove unused X722_SUPPORT and I40E_NDIS_SUPPORT MARCOs
> > 
> > v3:
> >  * update commit log of few patches as issue fix
> > 
> > v2:
> >  * comments rework
> >  * complie issue fix
> >  * rebase to dpdk-next-net
> > 
> > Jingjing Wu (31):
> >   net/i40e/base: add encap csum VF offload flag
> >   net/i40e/base: fix flow control set for 25G
> >   net/i40e/base: remove unnecessary code
> >   net/i40e/base: fix bit test mask
> >   net/i40e/base: group base mode VF offload flags
> >   net/i40e/base: fix long link down notification time
> >   net/i40e/base: add media type detection for 25G link
> >   net/i40e/base: add clause22 and clause45 implementation
> >   net/i40e/base: add bus number info
> >   net/i40e/base: add protocols when discover capabilities
> >   net/i40e/base: fix unknown PHYs incorrect identification
> >   net/i40e/base: replace memcpy
> >   net/i40e/base: deprecating unused macro
> >   net/i40e/base: remove FPK HyperV VF device ID
> >   net/i40e/base: add FEC bits to PHY capabilities
> >   net/i40e/base: use BIT() macro instead of bit fields
> >   net/i40e/base: adjust 25G PHY type values
> >   net/i40e/base: implement clear all WoL filters
> >   net/i40e/base: implement set VSI full promisc mode
> >   net/i40e/base: fix wol failure on PF reset
> >   net/i40e/base: save link FEC info from link up event
> >   net/i40e/base: fix NVM access intefering
> >   net/i40e/base: change shift values to hex
> >   net/i40e/base: comment that udp port must be in Host order
> >   net/i40e/base: remove duplicate definitions
> >   net/i40e/base: add ERROR state for NVM update state machine
> >   net/i40e/base: add broadcast promiscuous control per VLAN
> >   net/i40e/base: fix division by zero
> >   net/i40e/base: fix byte order
> >   net/i40e/base: remove unused macro
> >   net/i40e: remove unused macro from PMD
> > 
> <...>
> 
> Series applied to dpdk-next-net/master, thanks.
> 
> 

^ permalink raw reply

* Re: [PATCH v3 02/25] doc: add rte_flow prog guide
From: Mcnamara, John @ 2016-12-20 16:30 UTC (permalink / raw)
  To: Adrien Mazarguil, dev@dpdk.org
In-Reply-To: <a99dc8674ba978f01ec306866ecaefe2c3cc2172.1482168851.git.adrien.mazarguil@6wind.com>

Hi Adrien,

There seems to be an issue when building the PDF version of the docs
due to the width of some of the fields in 2 of the tables. I think
this may be a Sphinx/Latex bug since it doesn't happen without the
table:: directive.

If you replace the following tables with the format below (the text
in between is omitted) it resolves the issue:

.. _table_rte_flow_migration_tunnel:

.. table:: TUNNEL conversion

   +-------------------------------------------------------+---------+
   | Pattern                                               | Actions |
   +===+==========================+==========+=============+=========+
   | 0 | ETH                      | ``spec`` | any         | QUEUE   |
   |   |                          +----------+-------------+         |
   |   |                          | ``last`` | unset       |         |
   |   |                          +----------+-------------+         |
   |   |                          | ``mask`` | any         |         |
   +---+--------------------------+----------+-------------+         |
   | 1 | IPV4, IPV6               | ``spec`` | any         |         |
   |   |                          +----------+-------------+         |
   |   |                          | ``last`` | unset       |         |
   |   |                          +----------+-------------+         |
   |   |                          | ``mask`` | any         |         |
   +---+--------------------------+----------+-------------+         |
   | 2 | ANY                      | ``spec`` | any         |         |
   |   |                          +----------+-------------+         |
   |   |                          | ``last`` | unset       |         |
   |   |                          +----------+---------+---+         |
   |   |                          | ``mask`` | ``num`` | 0 |         |
   +---+--------------------------+----------+---------+---+         |
   | 3 | VXLAN, GENEVE, TEREDO,   | ``spec`` | any         |         |
   |   | NVGRE, GRE, ...          +----------+-------------+         |
   |   |                          | ``last`` | unset       |         |
   |   |                          +----------+-------------+         |
   |   |                          | ``mask`` | any         |         |
   +---+--------------------------+----------+-------------+---------+
   | 4 | END                                               | END     |
   +---+---------------------------------------------------+---------+


<text>

.. _table_rte_flow_migration_fdir:

.. table:: FDIR conversion

   +----------------------------------------+-----------------------+
   | Pattern                                | Actions               |
   +===+===================+==========+=====+=======================+
   | 0 | ETH, RAW          | ``spec`` | any | QUEUE, DROP, PASSTHRU |
   |   |                   +----------+-----+                       |
   |   |                   | ``last`` | N/A |                       |
   |   |                   +----------+-----+                       |
   |   |                   | ``mask`` | any |                       |
   +---+-------------------+----------+-----+-----------------------+
   | 1 | IPV4, IPv6        | ``spec`` | any | MARK                  |
   |   |                   +----------+-----+                       |
   |   |                   | ``last`` | N/A |                       |
   |   |                   +----------+-----+                       |
   |   |                   | ``mask`` | any |                       |
   +---+-------------------+----------+-----+                       |
   | 2 | TCP, UDP, SCTP    | ``spec`` | any |                       |
   |   |                   +----------+-----+                       |
   |   |                   | ``last`` | N/A |                       |
   |   |                   +----------+-----+                       |
   |   |                   | ``mask`` | any |                       |
   +---+-------------------+----------+-----+                       |
   | 3 | VF, PF (optional) | ``spec`` | any |                       |
   |   |                   +----------+-----+                       |
   |   |                   | ``last`` | N/A |                       |
   |   |                   +----------+-----+                       |
   |   |                   | ``mask`` | any |                       |
   +---+-------------------+----------+-----+-----------------------+
   | 4 | END                                | END                   |
   +---+------------------------------------+-----------------------+



^ permalink raw reply

* Re: [PATCH 01/18] net/ixgbe: store SYN filter
From: Ferruh Yigit @ 2016-12-20 16:55 UTC (permalink / raw)
  To: Wei Zhao, dev; +Cc: wenzhuo.lu
In-Reply-To: <1480675394-59179-2-git-send-email-wei.zhao1@intel.com>

On 12/2/2016 10:42 AM, Wei Zhao wrote:
> From: wei zhao1 <wei.zhao1@intel.com>
> 
> Add support for storing SYN filter in SW.

Do you think does it makes more clear to refer as TCP SYN filter? Or SYN
filter is clear enough?

> 
> Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
> Signed-off-by: wei zhao1 <wei.zhao1@intel.com>

Can you please update sign-off to your actual name?

> ---
>  drivers/net/ixgbe/ixgbe_ethdev.c | 12 ++++++++++--
>  drivers/net/ixgbe/ixgbe_ethdev.h |  2 ++
>  2 files changed, 12 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
> index edc9b22..7f10cca 100644
> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
> @@ -1287,6 +1287,8 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev)
>  	memset(filter_info->fivetuple_mask, 0,
>  	       sizeof(uint32_t) * IXGBE_5TUPLE_ARRAY_SIZE);
>  
> +	/* initialize SYN filter */
> +	filter_info->syn_info = 0;

can it be an option to memset all filter_info? (and of course move list
init after memset)

>  	return 0;
>  }
>  
> @@ -5509,15 +5511,19 @@ ixgbe_syn_filter_set(struct rte_eth_dev *dev,
>  			bool add)
>  {
>  	struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
> +	struct ixgbe_filter_info *filter_info =
> +		IXGBE_DEV_PRIVATE_TO_FILTER_INFO(dev->data->dev_private);
> +	uint32_t syn_info;
>  	uint32_t synqf;
>  
>  	if (filter->queue >= IXGBE_MAX_RX_QUEUE_NUM)
>  		return -EINVAL;
>  
> +	syn_info = filter_info->syn_info;
>  	synqf = IXGBE_READ_REG(hw, IXGBE_SYNQF);
>  
>  	if (add) {
> -		if (synqf & IXGBE_SYN_FILTER_ENABLE)
> +		if (syn_info & IXGBE_SYN_FILTER_ENABLE)

If these checks will be done on syn_info, shouldn't syn_info be assigned
to synqf before this. Specially for first usage, synqf may be different
than hw register.

Or perhaps can keep continue to use synqf. Since synqf assigned to
filter_info->syn_info after updated.

>  			return -EINVAL;
>  		synqf = (uint32_t)(((filter->queue << IXGBE_SYN_FILTER_QUEUE_SHIFT) &
>  			IXGBE_SYN_FILTER_QUEUE) | IXGBE_SYN_FILTER_ENABLE);
> @@ -5527,10 +5533,12 @@ ixgbe_syn_filter_set(struct rte_eth_dev *dev,
>  		else
>  			synqf &= ~IXGBE_SYN_FILTER_SYNQFP;
>  	} else {
> -		if (!(synqf & IXGBE_SYN_FILTER_ENABLE))
> +		if (!(syn_info & IXGBE_SYN_FILTER_ENABLE))
>  			return -ENOENT;
>  		synqf &= ~(IXGBE_SYN_FILTER_QUEUE | IXGBE_SYN_FILTER_ENABLE);
>  	}
> +
> +	filter_info->syn_info = synqf;
>  	IXGBE_WRITE_REG(hw, IXGBE_SYNQF, synqf);
>  	IXGBE_WRITE_FLUSH(hw);
>  	return 0;
<...>

^ permalink raw reply

* Re: [PATCH 02/18] net/ixgbe: store flow director filter
From: Ferruh Yigit @ 2016-12-20 16:58 UTC (permalink / raw)
  To: Wei Zhao, dev; +Cc: wenzhuo.lu
In-Reply-To: <1480675394-59179-3-git-send-email-wei.zhao1@intel.com>

On 12/2/2016 10:42 AM, Wei Zhao wrote:
> From: wei zhao1 <wei.zhao1@intel.com>
> 
> Add support for storing flow director filter in SW.
> 
> Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
> Signed-off-by: wei zhao1 <wei.zhao1@intel.com>
> ---
>  drivers/net/ixgbe/ixgbe_ethdev.c |  48 ++++++++++++++++++
>  drivers/net/ixgbe/ixgbe_ethdev.h |  19 ++++++-
>  drivers/net/ixgbe/ixgbe_fdir.c   | 105 ++++++++++++++++++++++++++++++++++++++-
>  3 files changed, 169 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
> index 7f10cca..f8e5fe1 100644
> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
<...>
> @@ -1289,6 +1302,25 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev)
>  
>  	/* initialize SYN filter */
>  	filter_info->syn_info = 0;
> +	/* initialize flow director filter list & hash */
> +	TAILQ_INIT(&fdir_info->fdir_list);
> +	snprintf(fdir_hash_name, RTE_HASH_NAMESIZE,
> +		 "fdir_%s", eth_dev->data->name);
> +	fdir_info->hash_handle = rte_hash_create(&fdir_hash_params);

Do we really create a hash table in device init? Is there a way to do
this if we know user will use it?

> +	if (!fdir_info->hash_handle) {
> +		PMD_INIT_LOG(ERR, "Failed to create fdir hash table!");
> +		return -EINVAL;

And should we exit here? What if user will not use flow director at all?

> +	}
> +	fdir_info->hash_map = rte_zmalloc("ixgbe",
> +					  sizeof(struct ixgbe_fdir_filter *) *
> +					  IXGBE_MAX_FDIR_FILTER_NUM,
> +					  0);
> +	if (!fdir_info->hash_map) {
> +		PMD_INIT_LOG(ERR,
> +			     "Failed to allocate memory for fdir hash map!");
> +		return -ENOMEM;
> +	}
> +

Can you please extract these into functions, to have more clear
init/uninit functions?

>  	return 0;
>  }
>  
> @@ -1297,6 +1329,9 @@ eth_ixgbe_dev_uninit(struct rte_eth_dev *eth_dev)
>  {
>  	struct rte_pci_device *pci_dev;
>  	struct ixgbe_hw *hw;
> +	struct ixgbe_hw_fdir_info *fdir_info =
> +		IXGBE_DEV_PRIVATE_TO_FDIR_INFO(eth_dev->data->dev_private);
> +	struct ixgbe_fdir_filter *fdir_filter;
>  
>  	PMD_INIT_FUNC_TRACE();
>  
> @@ -1330,6 +1365,19 @@ eth_ixgbe_dev_uninit(struct rte_eth_dev *eth_dev)
>  	rte_free(eth_dev->data->hash_mac_addrs);
>  	eth_dev->data->hash_mac_addrs = NULL;
>  
> +	/* remove all the fdir filters & hash */
> +	if (fdir_info->hash_map)
> +		rte_free(fdir_info->hash_map);
> +	if (fdir_info->hash_handle)
> +		rte_hash_free(fdir_info->hash_handle);

All rte_hash_xxx() APIs gives build error for shared library build, [1]
needs to be added into Makefile.

But, this makes hash library a dependency to the PMD, do you think is
there a way to escape from this?

[1]
+DEPDIRS-$(CONFIG_RTE_LIBRTE_IXGBE_PMD) += lib/librte_net lib/librte_hash

> +
> +	while ((fdir_filter = TAILQ_FIRST(&fdir_info->fdir_list))) {
> +		TAILQ_REMOVE(&fdir_info->fdir_list,
> +			     fdir_filter,
> +			     entries);
> +		rte_free(fdir_filter);
> +	}
> +
>  	return 0;
>  }
>  
<...>

^ permalink raw reply

* Re: [PATCH 04/18] net/ixgbe: restore n-tuple filter
From: Ferruh Yigit @ 2016-12-20 16:58 UTC (permalink / raw)
  To: Zhao1, Wei, dev@dpdk.org; +Cc: Lu, Wenzhuo
In-Reply-To: <1480675394-59179-5-git-send-email-wei.zhao1@intel.com>

On 12/2/2016 10:43 AM, Wei Zhao wrote:
> From: wei zhao1 <wei.zhao1@intel.com>
> 
> Add support for restoring n-tuple filter in SW.
> 
> Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
> Signed-off-by: wei zhao1 <wei.zhao1@intel.com>
> ---
>  drivers/net/ixgbe/ixgbe_ethdev.c | 131 +++++++++++++++++++++++++--------------
>  1 file changed, 83 insertions(+), 48 deletions(-)
> 
> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
<...>
> @@ -2482,6 +2496,7 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
>  
>  	/* resume enabled intr since hw reset */
>  	ixgbe_enable_intr(dev);
> +	ixgbe_filter_restore(dev);

Just to double check, when you stop the device does 5tuple_filter reset?
If not reset, will adding same filters cause any problem?

>  
>  	return 0;
>  
<...>

^ permalink raw reply

* Re: [PATCH 15/18] net/ixgbe: parse flow director filter
From: Ferruh Yigit @ 2016-12-20 17:00 UTC (permalink / raw)
  To: Wei Zhao, dev; +Cc: wenzhuo.lu
In-Reply-To: <1480675394-59179-16-git-send-email-wei.zhao1@intel.com>

On 12/2/2016 10:43 AM, Wei Zhao wrote:
> From: wei zhao1 <wei.zhao1@intel.com>
> 
> check if the rule is a flow director rule, and get the flow director info.
> 
> Signed-off-by: wei zhao1 <wei.zhao1@intel.com>
> Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
> ---

<...>

> +	PATTERN_SKIP_VOID(rule, struct ixgbe_fdir_rule,
> +			  RTE_FLOW_ERROR_TYPE_ITEM_NUM);
> +	if (item->type != RTE_FLOW_ITEM_TYPE_ETH &&
> +	    item->type != RTE_FLOW_ITEM_TYPE_IPV4 &&
> +	    item->type != RTE_FLOW_ITEM_TYPE_IPV6 &&
> +	    item->type != RTE_FLOW_ITEM_TYPE_UDP &&
> +	    item->type != RTE_FLOW_ITEM_TYPE_VXLAN &&
> +	    item->type != RTE_FLOW_ITEM_TYPE_NVGRE) {

This gives build error [1], there are a few more same usage:

.../drivers/net/ixgbe/ixgbe_ethdev.c:9238:17: error: comparison of
constant 241 with expression of type 'const enum rte_flow_item_type' is
always true [-Werror,-Wtautological-constant-out-of-range-compare]
            item->type != RTE_FLOW_ITEM_TYPE_NVGRE) {

^ permalink raw reply

* Re: [PATCH v3 25/25] doc: describe testpmd flow command
From: Ferruh Yigit @ 2016-12-20 17:06 UTC (permalink / raw)
  To: Adrien Mazarguil, dev
In-Reply-To: <fcc4d34589201dc8b64fb94bb71c04005b8a5a5a.1482168851.git.adrien.mazarguil@6wind.com>

On 12/19/2016 5:49 PM, Adrien Mazarguil wrote:
> Document syntax, interaction with rte_flow and provide usage examples.
> 
> Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
> Acked-by: Olga Shern <olgas@mellanox.com>
> ---

<...>

> +
> +Check whether redirecting any Ethernet packet received on port 0 to RX queue
> +index 6 is supported::
> +
> + testpmd> flow validate 1 ingress pattern eth / end

Small detail, but since note mentions "port 0", command should be:
testpmd> flow validate 0 ingress pattern eth / end ...

<...>

^ permalink raw reply

* Re: [PATCH 04/13] eal: introduce driver type
From: Stephen Hemminger @ 2016-12-20 17:09 UTC (permalink / raw)
  To: Jan Blunck; +Cc: dev, Stephen Hemminger
In-Reply-To: <CALe+Z02fh5iw4ZAf5Qxikz9i32Cyig0OOZBqoUQJcq+6JB2zUg@mail.gmail.com>

On Tue, 20 Dec 2016 14:00:55 +0100
Jan Blunck <jblunck@infradead.org> wrote:

> On Mon, Dec 19, 2016 at 10:59 PM, Stephen Hemminger
> <stephen@networkplumber.org> wrote:
> > Since multiple buses and device types need to be supported.
> > Provide type field in driver.
> > ---
> >  lib/librte_eal/common/include/rte_dev.h  | 15 ++++++++++++---
> >  lib/librte_eal/common/include/rte_pci.h  |  1 +
> >  lib/librte_eal/common/include/rte_vdev.h |  1 +
> >  3 files changed, 14 insertions(+), 3 deletions(-)
> >
> > diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h
> > index e5471a22..3f4e26e6 100644
> > --- a/lib/librte_eal/common/include/rte_dev.h
> > +++ b/lib/librte_eal/common/include/rte_dev.h
> > @@ -144,12 +144,21 @@ void rte_eal_device_insert(struct rte_device *dev);
> >  void rte_eal_device_remove(struct rte_device *dev);
> >
> >  /**
> > + * Type of device driver
> > + */
> > +enum rte_driver_type {
> > +       PMD_VIRTUAL,
> > +       PMD_PCI,
> > +};
> > +
> > +/**
> >   * A structure describing a device driver.
> >   */
> >  struct rte_driver {
> >         TAILQ_ENTRY(rte_driver) next;  /**< Next in list. */
> > -       const char *name;                   /**< Driver name. */
> > -       const char *alias;              /**< Driver alias. */
> > +       const char *name;              /**< Driver name. */
> > +       const char *alias;             /**< Driver alias. */
> > +       enum rte_driver_type type;     /**< Driver type. */
> >  };  
> 
> I wonder who is the user of the type. It can't be the driver itself
> because it must be aware of what kind of low-level interface it
> serves. So this seems to be a helper to allow users of rte_driver to
> upcast to the object that embeds the rte_driver at runtime. I don't
> believe that this is a good interface because it often leads to ugly
> and error prone code.

The thing I ran into was the test code. The testpmd (and related code) is an
example of how some code might want to use dev_info_get to find out about a device
then take some action based on the driver type.  Testpmd has code that manipulates
PCI registers. Right now it is broken when run on virtual devices.

^ permalink raw reply

* Re: [PATCH v3 02/12] eal/bus: introduce bus abstraction
From: Stephen Hemminger @ 2016-12-20 17:11 UTC (permalink / raw)
  To: Jan Blunck
  Cc: Shreyansh Jain, dev, David Marchand, Thomas Monjalon,
	Ferruh Yigit, jianbo.liu
In-Reply-To: <CALe+Z00LYrfzQE1916LoOqytcFjJ1xRXFL-wLvX03eham11Vvw@mail.gmail.com>

On Tue, 20 Dec 2016 14:17:14 +0100
Jan Blunck <jblunck@infradead.org> wrote:

> On Fri, Dec 16, 2016 at 2:10 PM, Shreyansh Jain <shreyansh.jain@nxp.com> wrote:
> > This patch introduces the rte_bus abstraction for devices and drivers in
> > EAL framework. The model is:
> >  - One or more buses are connected to a CPU (or core)
> >  - One or more devices are conneted to a Bus
> >  - Drivers are running instances which manage one or more devices
> >  - Bus is responsible for identifying devices (and interrupt propogation)
> >  - Driver is responsible for initializing the device
> >
> > This patch adds a 'rte_bus' class which rte_driver and rte_device refer.
> > This way, each device (rte_xxx_device) would have reference to the bus
> > it is based on. As well as, each driver (rte_xxx_driver) would have link
> > to the bus and devices on it for servicing.
> >
> >                                   __ rte_bus_list
> >                                  /
> >                      +----------'---+
> >                      |rte_bus       |
> >                      | driver_list------> List of rte_bus specific
> >                      | device_list----    devices
> >                      |              | `-> List of rte_bus associated
> >                      |              |     drivers
> >                      +--|------|----+
> >               _________/        \_________
> >     +--------/----+                     +-\---------------+
> >     |rte_device   |                     |rte_driver       |
> >     | rte_bus     |                     | rte_bus         |
> >     | rte_driver  |                     | ...             |
> >     | ...         |                     +---------...-----+
> >     |             |                               |||
> >     +---||--------+                               |||
> >         ||                                        |||
> >         | \                                        \\\
> >         |  \_____________                           \\\
> >         |                \                          |||
> >  +------|---------+ +----|----------+               |||
> >  |rte_pci_device  | |rte_xxx_device |               |||
> >  | ....           | | ....          |               |||
> >  +----------------+ +---------------+              / | \
> >                                                   /  |  \
> >                             _____________________/  /    \
> >                            /                    ___/      \
> >             +-------------'--+    +------------'---+    +--'------------+
> >             |rte_pci_driver  |    |rte_vdev_driver |    |rte_xxx_driver |
> >             | ....           |    | ....           |    | ....          |
> >             +----------------+    +----------------+    +---------------+
> >
> > This patch only enables the bus references on rte_driver and rte_driver.
> > EAL wide global device and driver list continue to exist until an instance
> > of bus is added in subsequent patches.
> >
> > This patch also introduces RTE_REGISTER_BUS macro on the lines of
> > RTE_PMD_REGISTER_XXX. Key difference is that the constructor priority has
> > been explicitly set to 101 so as to execute bus registration before PMD.
> >
> > Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
> >

Ok, but let's keep this as bus type not bus. It gets really hard and complex
to enumerate all layers of PCI bus and bridges. 

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox