DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Juraj Linkeš" <juraj.linkes@pantheon.tech>
To: Yoan Picchi <yoan.picchi@foss.arm.com>
Cc: Thomas Monjalon <thomas@monjalon.net>,
	 Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>,
	 Bruce Richardson <bruce.richardson@intel.com>,
	Jeremy Spewock <jspewock@iol.unh.edu>,
	 Patrick Robb <probb@iol.unh.edu>,
	Paul Szczepanek <paul.szczepanek@arm.com>,
	dev@dpdk.org
Subject: Re: [PATCH v5 01/23] dts: code adjustments for doc generation
Date: Wed, 15 Nov 2023 08:46:54 +0100	[thread overview]
Message-ID: <CAOb5WZZJN3Sj0mxM9e-KciXDuEzX00y0P0Gzi+iqW9-OMvCZFQ@mail.gmail.com> (raw)
In-Reply-To: <ce795b73-f1d5-43ee-a996-ddb8b449d2f9@foss.arm.com>

On Wed, Nov 8, 2023 at 2:35 PM Yoan Picchi <yoan.picchi@foss.arm.com> wrote:
>
> On 11/6/23 17:15, Juraj Linkeš wrote:
> > The standard Python tool for generating API documentation, Sphinx,
> > imports modules one-by-one when generating the documentation. This
> > requires code changes:
> > * properly guarding argument parsing in the if __name__ == '__main__'
> >    block,
> > * the logger used by DTS runner underwent the same treatment so that it
> >    doesn't create log files outside of a DTS run,
> > * however, DTS uses the arguments to construct an object holding global
> >    variables. The defaults for the global variables needed to be moved
> >    from argument parsing elsewhere,
> > * importing the remote_session module from framework resulted in
> >    circular imports because of one module trying to import another
> >    module. This is fixed by reorganizing the code,
> > * some code reorganization was done because the resulting structure
> >    makes more sense, improving documentation clarity.
> >
> > The are some other changes which are documentation related:
> > * added missing type annotation so they appear in the generated docs,
> > * reordered arguments in some methods,
> > * removed superfluous arguments and attributes,
> > * change private functions/methods/attributes to private and vice-versa.
> >
> > The above all appear in the generated documentation and the with them,
> > the documentation is improved.
> >
> > Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
> > ---
> >   dts/framework/config/__init__.py              | 10 ++-
> >   dts/framework/dts.py                          | 33 +++++--
> >   dts/framework/exception.py                    | 54 +++++-------
> >   dts/framework/remote_session/__init__.py      | 41 ++++-----
> >   .../interactive_remote_session.py             |  0
> >   .../{remote => }/interactive_shell.py         |  0
> >   .../{remote => }/python_shell.py              |  0
> >   .../remote_session/remote/__init__.py         | 27 ------
> >   .../{remote => }/remote_session.py            |  0
> >   .../{remote => }/ssh_session.py               | 12 +--
> >   .../{remote => }/testpmd_shell.py             |  0
> >   dts/framework/settings.py                     | 87 +++++++++++--------
> >   dts/framework/test_result.py                  |  4 +-
> >   dts/framework/test_suite.py                   |  7 +-
> >   dts/framework/testbed_model/__init__.py       | 12 +--
> >   dts/framework/testbed_model/{hw => }/cpu.py   | 13 +++
> >   dts/framework/testbed_model/hw/__init__.py    | 27 ------
> >   .../linux_session.py                          |  6 +-
> >   dts/framework/testbed_model/node.py           | 26 ++++--
> >   .../os_session.py                             | 22 ++---
> >   dts/framework/testbed_model/{hw => }/port.py  |  0
> >   .../posix_session.py                          |  4 +-
> >   dts/framework/testbed_model/sut_node.py       |  8 +-
> >   dts/framework/testbed_model/tg_node.py        | 30 +------
> >   .../traffic_generator/__init__.py             | 24 +++++
> >   .../capturing_traffic_generator.py            |  6 +-
> >   .../{ => traffic_generator}/scapy.py          | 23 ++---
> >   .../traffic_generator.py                      | 16 +++-
> >   .../testbed_model/{hw => }/virtual_device.py  |  0
> >   dts/framework/utils.py                        | 46 +++-------
> >   dts/main.py                                   |  9 +-
> >   31 files changed, 259 insertions(+), 288 deletions(-)
> >   rename dts/framework/remote_session/{remote => }/interactive_remote_session.py (100%)
> >   rename dts/framework/remote_session/{remote => }/interactive_shell.py (100%)
> >   rename dts/framework/remote_session/{remote => }/python_shell.py (100%)
> >   delete mode 100644 dts/framework/remote_session/remote/__init__.py
> >   rename dts/framework/remote_session/{remote => }/remote_session.py (100%)
> >   rename dts/framework/remote_session/{remote => }/ssh_session.py (91%)
> >   rename dts/framework/remote_session/{remote => }/testpmd_shell.py (100%)
> >   rename dts/framework/testbed_model/{hw => }/cpu.py (95%)
> >   delete mode 100644 dts/framework/testbed_model/hw/__init__.py
> >   rename dts/framework/{remote_session => testbed_model}/linux_session.py (97%)
> >   rename dts/framework/{remote_session => testbed_model}/os_session.py (95%)
> >   rename dts/framework/testbed_model/{hw => }/port.py (100%)
> >   rename dts/framework/{remote_session => testbed_model}/posix_session.py (98%)
> >   create mode 100644 dts/framework/testbed_model/traffic_generator/__init__.py
> >   rename dts/framework/testbed_model/{ => traffic_generator}/capturing_traffic_generator.py (96%)
> >   rename dts/framework/testbed_model/{ => traffic_generator}/scapy.py (95%)
> >   rename dts/framework/testbed_model/{ => traffic_generator}/traffic_generator.py (80%)
> >   rename dts/framework/testbed_model/{hw => }/virtual_device.py (100%)
> >
> > diff --git a/dts/framework/config/__init__.py b/dts/framework/config/__init__.py
> > index cb7e00ba34..2044c82611 100644
> > --- a/dts/framework/config/__init__.py
> > +++ b/dts/framework/config/__init__.py
> > @@ -17,6 +17,7 @@
> >   import warlock  # type: ignore[import]
> >   import yaml
> >
> > +from framework.exception import ConfigurationError
> >   from framework.settings import SETTINGS
> >   from framework.utils import StrEnum
> >
> > @@ -89,7 +90,7 @@ class TrafficGeneratorConfig:
> >       traffic_generator_type: TrafficGeneratorType
> >
> >       @staticmethod
> > -    def from_dict(d: dict):
> > +    def from_dict(d: dict) -> "ScapyTrafficGeneratorConfig":
>
> This function looks to be designed to support more trafic generator than
> just scapy, so setting its return type to scapy specifically looks
> wrong. Shouldn't it be a more generic traffic generator type? Like you
> did in create_traffic_generator()
>

The reason is the type in the constructor of the scapy traffic
generator - the type there should be ScapyTrafficGeneratorConfig and
if I change it anywhere in the chain, mypy reports an error. I don't
want to do any extra refactoring in this patch if we don't have to, so
we need to rethink this when adding a new traffic generator.

> >           # This looks useless now, but is designed to allow expansion to traffic
> >           # generators that require more configuration later.
> >           match TrafficGeneratorType(d["type"]):
> > @@ -97,6 +98,10 @@ def from_dict(d: dict):
> >                   return ScapyTrafficGeneratorConfig(
> >                       traffic_generator_type=TrafficGeneratorType.SCAPY
> >                   )
> > +            case _:
> > +                raise ConfigurationError(
> > +                    f'Unknown traffic generator type "{d["type"]}".'
> > +                )
> >
> >
> >   @dataclass(slots=True, frozen=True)

<snip>

> > --- a/dts/framework/settings.py
> > +++ b/dts/framework/settings.py
<small snip>
> > @@ -162,23 +176,22 @@ def _get_parser() -> argparse.ArgumentParser:
> >       return parser
> >
> >
> > -def _get_settings() -> _Settings:
> > +def get_settings() -> Settings:
> >       parsed_args = _get_parser().parse_args()
> > -    return _Settings(
> > +    return Settings(
>
> That means we're parsing and creating a new setting object everytime
> we're trying to read the setting? Shouldn't we just save it and return a
> copy? That seems to be the old behavior, any reason to change it?
>

By old behavior, do you mean the behavior from the previous version?

I want the Settings object to be immutable, as much as it can be in
Python (that's why the dataclass if frozen), so that it's clear it
shouldn't be changed during runtime, as the object represents user
choices (any modifications would violate that). More below.

> Related to this, this do mean that the previously created setting
> variable is only used to set up the parser, so it might need to be
> renamed to default_setting if it doesnt get reused.
>

It is used. The reason the SETTINGS variable is implemented this way
is mostly because of Sphinx. Sphinx imports everything file by file:
When it imports a module that uses the SETTINGS variable (such as
node.py), the variable needs to be defined. On top of that, when
Sphinx accesses command line arguments, it sees it's own command line
arguments (which are incompatible with DTS), so we need to guard the
command line parsing against imports (we have it in if __name__ ==
"main" in main.py). This is why the defaults are split from the
command line parsing - when Sphinx imports the module, it uses the
object with defaults and during runtime we replace the object with
user-defined values.

There are other ways to do this, but I didn't find a better one with
all the constraints and requirements outlined above.

> >           config_file_path=parsed_args.config_file,
> >           output_dir=parsed_args.output_dir,
> >           timeout=parsed_args.timeout,
> > -        verbose=(parsed_args.verbose == "Y"),
> > -        skip_setup=(parsed_args.skip_setup == "Y"),
> > +        verbose=parsed_args.verbose,
> > +        skip_setup=parsed_args.skip_setup,
> >           dpdk_tarball_path=Path(
> > -            DPDKGitTarball(parsed_args.tarball, parsed_args.output_dir)
> > -        )
> > -        if not os.path.exists(parsed_args.tarball)
> > -        else Path(parsed_args.tarball),
> > +            Path(DPDKGitTarball(parsed_args.tarball, parsed_args.output_dir))
> > +            if not os.path.exists(parsed_args.tarball)
> > +            else Path(parsed_args.tarball)
> > +        ),
> >           compile_timeout=parsed_args.compile_timeout,
> > -        test_cases=parsed_args.test_cases.split(",") if parsed_args.test_cases else [],
> > +        test_cases=(
> > +            parsed_args.test_cases.split(",") if parsed_args.test_cases else []
> > +        ),
> >           re_run=parsed_args.re_run,
> >       )
> > -
> > -
> > -SETTINGS: _Settings = _get_settings()

<snip>

> > diff --git a/dts/framework/testbed_model/node.py b/dts/framework/testbed_model/node.py
> > index fc01e0bf8e..7571e7b98d 100644
> > --- a/dts/framework/testbed_model/node.py
> > +++ b/dts/framework/testbed_model/node.py
> > @@ -12,23 +12,26 @@
> >   from typing import Any, Callable, Type, Union
> >
> >   from framework.config import (
> > +    OS,
> >       BuildTargetConfiguration,
> >       ExecutionConfiguration,
> >       NodeConfiguration,
> >   )
> > +from framework.exception import ConfigurationError
> >   from framework.logger import DTSLOG, getLogger
> > -from framework.remote_session import InteractiveShellType, OSSession, create_session
> >   from framework.settings import SETTINGS
> >
> > -from .hw import (
> > +from .cpu import (
> >       LogicalCore,
> >       LogicalCoreCount,
> >       LogicalCoreList,
> >       LogicalCoreListFilter,
> > -    VirtualDevice,
> >       lcore_filter,
> >   )
> > -from .hw.port import Port
> > +from .linux_session import LinuxSession
> > +from .os_session import InteractiveShellType, OSSession
> > +from .port import Port
> > +from .virtual_device import VirtualDevice
> >
> >
> >   class Node(ABC):
> > @@ -69,6 +72,7 @@ def __init__(self, node_config: NodeConfiguration):
> >       def _init_ports(self) -> None:
> >           self.ports = [Port(self.name, port_config) for port_config in self.config.ports]
> >           self.main_session.update_ports(self.ports)
> > +
>
> Is the newline intended?
>

Hm, I don't really remember or see a reason for it, really. I can remove it.

> >           for port in self.ports:
> >               self.configure_port_state(port)
> >
> > @@ -172,9 +176,9 @@ def create_interactive_shell(
> >
> >           return self.main_session.create_interactive_shell(
> >               shell_cls,
> > -            app_args,
> >               timeout,
> >               privileged,
> > +            app_args,
> >           )
> >
> >       def filter_lcores(
> > @@ -205,7 +209,7 @@ def _get_remote_cpus(self) -> None:
> >           self._logger.info("Getting CPU information.")
> >           self.lcores = self.main_session.get_remote_cpus(self.config.use_first_core)
> >
> > -    def _setup_hugepages(self):
> > +    def _setup_hugepages(self) -> None:
> >           """
> >           Setup hugepages on the Node. Different architectures can supply different
> >           amounts of memory for hugepages and numa-based hugepage allocation may need
> > @@ -249,3 +253,13 @@ def skip_setup(func: Callable[..., Any]) -> Callable[..., Any]:
> >               return lambda *args: None
> >           else:
> >               return func
> > +
> > +
> > +def create_session(
> > +    node_config: NodeConfiguration, name: str, logger: DTSLOG
> > +) -> OSSession:
> > +    match node_config.os:
> > +        case OS.linux:
> > +            return LinuxSession(node_config, name, logger)
> > +        case _:
> > +            raise ConfigurationError(f"Unsupported OS {node_config.os}")
> > diff --git a/dts/framework/remote_session/os_session.py b/dts/framework/testbed_model/os_session.py
> > similarity index 95%
> > rename from dts/framework/remote_session/os_session.py
> > rename to dts/framework/testbed_model/os_session.py
> > index 8a709eac1c..76e595a518 100644
> > --- a/dts/framework/remote_session/os_session.py
> > +++ b/dts/framework/testbed_model/os_session.py
> > @@ -10,19 +10,19 @@
> >
> >   from framework.config import Architecture, NodeConfiguration, NodeInfo
> >   from framework.logger import DTSLOG
> > -from framework.remote_session.remote import InteractiveShell
> > -from framework.settings import SETTINGS
> > -from framework.testbed_model import LogicalCore
> > -from framework.testbed_model.hw.port import Port
> > -from framework.utils import MesonArgs
> > -
> > -from .remote import (
> > +from framework.remote_session import (
> >       CommandResult,
> >       InteractiveRemoteSession,
> > +    InteractiveShell,
> >       RemoteSession,
> >       create_interactive_session,
> >       create_remote_session,
> >   )
> > +from framework.settings import SETTINGS
> > +from framework.utils import MesonArgs
> > +
> > +from .cpu import LogicalCore
> > +from .port import Port
> >
> >   InteractiveShellType = TypeVar("InteractiveShellType", bound=InteractiveShell)
> >
> > @@ -85,9 +85,9 @@ def send_command(
> >       def create_interactive_shell(
> >           self,
> >           shell_cls: Type[InteractiveShellType],
> > -        eal_parameters: str,
> >           timeout: float,
> >           privileged: bool,
> > +        app_args: str,
>
> Is there a reason why the argument position got changed? I'd guess
> because it's more idomatic to have the extra arg at the end, but I just
> want to make sure it's intended.
>

Yes, this is very much intended. It's here to unite the method
signature with the signatures of the rest of the methods called down
the line.
I made this API change during API documentation as the different
signatures of basically the same methods would look terrible in the
docs.

> >       ) -> InteractiveShellType:
> >           """
> >           See "create_interactive_shell" in SutNode

<snip>

> > diff --git a/dts/framework/utils.py b/dts/framework/utils.py
> > index d27c2c5b5f..f0c916471c 100644
> > --- a/dts/framework/utils.py
> > +++ b/dts/framework/utils.py
> > @@ -7,7 +7,6 @@
> >   import json
> >   import os
> >   import subprocess
> > -import sys
> >   from enum import Enum
> >   from pathlib import Path
> >   from subprocess import SubprocessError
> > @@ -16,35 +15,7 @@
> >
> >   from .exception import ConfigurationError
> >
> > -
> > -class StrEnum(Enum):
> > -    @staticmethod
> > -    def _generate_next_value_(
> > -        name: str, start: int, count: int, last_values: object
> > -    ) -> str:
> > -        return name
> > -
> > -    def __str__(self) -> str:
> > -        return self.name
> > -
> > -
> > -REGEX_FOR_PCI_ADDRESS = "/[0-9a-fA-F]{4}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}.[0-9]{1}/"
> > -
> > -
> > -def check_dts_python_version() -> None:
> > -    if sys.version_info.major < 3 or (
> > -        sys.version_info.major == 3 and sys.version_info.minor < 10
> > -    ):
> > -        print(
> > -            RED(
> > -                (
> > -                    "WARNING: DTS execution node's python version is lower than"
> > -                    "python 3.10, is deprecated and will not work in future releases."
> > -                )
> > -            ),
> > -            file=sys.stderr,
> > -        )
> > -        print(RED("Please use Python >= 3.10 instead"), file=sys.stderr)
> > +REGEX_FOR_PCI_ADDRESS: str = "/[0-9a-fA-F]{4}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}.[0-9]{1}/"
> >
> >
> >   def expand_range(range_str: str) -> list[int]:
> > @@ -67,7 +38,7 @@ def expand_range(range_str: str) -> list[int]:
> >       return expanded_range
> >
> >
> > -def get_packet_summaries(packets: list[Packet]):
> > +def get_packet_summaries(packets: list[Packet]) -> str:
> >       if len(packets) == 1:
> >           packet_summaries = packets[0].summary()
> >       else:
> > @@ -77,8 +48,15 @@ def get_packet_summaries(packets: list[Packet]):
> >       return f"Packet contents: \n{packet_summaries}"
> >
> >
> > -def RED(text: str) -> str:
> > -    return f"\u001B[31;1m{str(text)}\u001B[0m"
> > +class StrEnum(Enum):
> > +    @staticmethod
> > +    def _generate_next_value_(
> > +        name: str, start: int, count: int, last_values: object
> > +    ) -> str:
> > +        return name
>
> I don't understand this function? I don't see it used anywhere. And the
> parameters are unused?
>

This is an internal method of Enum that defines what happens when
auto() is called (which is used plenty).

> > +
> > +    def __str__(self) -> str:
> > +        return self.name
> >
> >
> >   class MesonArgs(object):
> > @@ -225,5 +203,5 @@ def _delete_tarball(self) -> None:
> >           if self._tarball_path and os.path.exists(self._tarball_path):
> >               os.remove(self._tarball_path)
> >
> > -    def __fspath__(self):
> > +    def __fspath__(self) -> str:
> >           return str(self._tarball_path)
> > diff --git a/dts/main.py b/dts/main.py
> > index 43311fa847..5d4714b0c3 100755
> > --- a/dts/main.py
> > +++ b/dts/main.py
> > @@ -10,10 +10,17 @@
> >
> >   import logging
> >
> > -from framework import dts
> > +from framework import settings
> >
> >
> >   def main() -> None:
> > +    """Set DTS settings, then run DTS.
> > +
> > +    The DTS settings are taken from the command line arguments and the environment variables.
> > +    """
> > +    settings.SETTINGS = settings.get_settings()
> > +    from framework import dts
>
> Why the import *inside* the main ?
>

This is actually explained in the docstring added in one of the later
patches, so let me copy paste it here:

The DTS settings are taken from the command line arguments and the
environment variables.
The settings object is stored in the module-level variable
settings.SETTINGS which the entire
framework uses. After importing the module (or the variable), any
changes to the variable are
not going to be reflected without a re-import. This means that the
SETTINGS variable must
be modified before the settings module is imported anywhere else in
the framework.

> > +
> >       dts.run_all()
> >
> >
>

  reply	other threads:[~2023-11-15  7:47 UTC|newest]

Thread overview: 257+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-23 10:40 [RFC PATCH v1 0/4] dts: add dts api docs Juraj Linkeš
2023-03-23 10:40 ` [RFC PATCH v1 1/4] dts: code adjustments for sphinx Juraj Linkeš
2023-03-23 10:40 ` [RFC PATCH v1 2/4] dts: add doc generation dependencies Juraj Linkeš
2023-03-23 10:40 ` [RFC PATCH v1 3/4] dts: add doc generation Juraj Linkeš
2023-03-23 10:40 ` [RFC PATCH v1 4/4] dts: format docstrigs to google format Juraj Linkeš
2023-04-28 19:33   ` Jeremy Spewock
2023-04-03  9:17 ` [RFC PATCH v1 0/4] dts: add dts api docs Juraj Linkeš
2023-04-03  9:42   ` Bruce Richardson
2023-04-25  8:20     ` Juraj Linkeš
2023-04-25  8:44       ` Bruce Richardson
2023-04-25  8:57         ` Juraj Linkeš
2023-04-25  9:43           ` Bruce Richardson
2023-05-03 11:33             ` Juraj Linkeš
2023-05-04 12:37 ` [RFC PATCH v2 " Juraj Linkeš
2023-05-04 12:37   ` [RFC PATCH v2 1/4] dts: code adjustments for sphinx Juraj Linkeš
2023-05-04 12:37   ` [RFC PATCH v2 2/4] dts: add doc generation dependencies Juraj Linkeš
2023-05-04 12:37   ` [RFC PATCH v2 3/4] dts: add doc generation Juraj Linkeš
2023-05-04 12:45     ` Bruce Richardson
2023-05-05  7:53       ` Juraj Linkeš
2023-05-05 10:24         ` Bruce Richardson
2023-05-05 10:41           ` Juraj Linkeš
2023-05-05 10:56     ` Bruce Richardson
2023-05-05 11:13       ` Juraj Linkeš
2023-05-05 13:28         ` Bruce Richardson
2023-05-09  9:23           ` Juraj Linkeš
2023-05-09  9:40             ` Bruce Richardson
2023-05-10 12:19               ` Juraj Linkeš
2023-05-04 12:37   ` [RFC PATCH v2 4/4] dts: format docstrigs to google format Juraj Linkeš
2023-05-05 14:06   ` [RFC PATCH v2 0/4] dts: add dts api docs Bruce Richardson
2023-05-09 15:28     ` Juraj Linkeš
2023-05-11  8:55     ` Juraj Linkeš
2023-05-11  9:14   ` [RFC PATCH v3 " Juraj Linkeš
2023-05-11  9:14     ` [RFC PATCH v3 1/4] dts: code adjustments for sphinx Juraj Linkeš
2023-05-11  9:14     ` [RFC PATCH v3 2/4] dts: add doc generation dependencies Juraj Linkeš
2023-05-11  9:14     ` [RFC PATCH v3 3/4] dts: add doc generation Juraj Linkeš
2023-05-11  9:14     ` [RFC PATCH v3 4/4] dts: format docstrigs to google format Juraj Linkeš
2023-06-21 18:27       ` Jeremy Spewock
2023-05-17 16:56     ` [RFC PATCH v3 0/4] dts: add dts api docs Bruce Richardson
2023-05-22  9:17       ` Juraj Linkeš
2023-08-31 10:04     ` [RFC PATCH v4 " Juraj Linkeš
2023-08-31 10:04       ` [RFC PATCH v4 1/4] dts: code adjustments for sphinx Juraj Linkeš
2023-10-22 14:30         ` Yoan Picchi
2023-10-23  6:44           ` Juraj Linkeš
2023-10-23 11:52             ` Yoan Picchi
2023-10-24  6:39               ` Juraj Linkeš
2023-10-24 12:21                 ` Yoan Picchi
2023-08-31 10:04       ` [RFC PATCH v4 2/4] dts: add doc generation dependencies Juraj Linkeš
2023-10-27 15:27         ` Yoan Picchi
2023-08-31 10:04       ` [RFC PATCH v4 3/4] dts: add doc generation Juraj Linkeš
2023-09-20  7:08         ` Juraj Linkeš
2023-10-26 16:43         ` Yoan Picchi
2023-10-27  9:52           ` Juraj Linkeš
2023-08-31 10:04       ` [RFC PATCH v4 4/4] dts: format docstrigs to google format Juraj Linkeš
2023-09-01 17:02         ` Jeremy Spewock
2023-10-31 12:10         ` Yoan Picchi
2023-11-02 10:17           ` Juraj Linkeš
2023-11-06 17:15       ` [PATCH v5 00/23] dts: add dts api docs Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 01/23] dts: code adjustments for doc generation Juraj Linkeš
2023-11-08 13:35           ` Yoan Picchi
2023-11-15  7:46             ` Juraj Linkeš [this message]
2023-11-06 17:15         ` [PATCH v5 02/23] dts: add docstring checker Juraj Linkeš
2023-11-07 17:38           ` Yoan Picchi
2023-11-06 17:15         ` [PATCH v5 03/23] dts: add basic developer docs Juraj Linkeš
2023-11-07 14:39           ` Yoan Picchi
2023-11-08  9:01             ` Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 04/23] dts: exceptions docstring update Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 05/23] dts: settings " Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 06/23] dts: logger and " Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 07/23] dts: dts runner and main " Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 08/23] dts: test suite " Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 09/23] dts: test result " Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 10/23] dts: config " Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 11/23] dts: remote session " Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 12/23] dts: interactive " Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 13/23] dts: port and virtual device " Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 14/23] dts: cpu " Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 15/23] dts: os session " Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 16/23] dts: posix and linux sessions " Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 17/23] dts: node " Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 18/23] dts: sut and tg nodes " Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 19/23] dts: base traffic generators " Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 20/23] dts: scapy tg " Juraj Linkeš
2023-11-06 17:15         ` [PATCH v5 21/23] dts: test suites " Juraj Linkeš
2023-11-06 17:16         ` [PATCH v5 22/23] dts: add doc generation dependencies Juraj Linkeš
2023-11-06 17:16         ` [PATCH v5 23/23] dts: add doc generation Juraj Linkeš
2023-11-08 12:53         ` [PATCH v6 01/23] dts: code adjustments for " Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 02/23] dts: add docstring checker Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 03/23] dts: add basic developer docs Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 04/23] dts: exceptions docstring update Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 05/23] dts: settings " Juraj Linkeš
2023-11-08 16:17             ` Yoan Picchi
2023-11-15 10:09               ` Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 06/23] dts: logger and " Juraj Linkeš
2023-11-08 17:14             ` Yoan Picchi
2023-11-15 10:11               ` Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 07/23] dts: dts runner and main " Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 08/23] dts: test suite " Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 09/23] dts: test result " Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 10/23] dts: config " Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 11/23] dts: remote session " Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 12/23] dts: interactive " Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 13/23] dts: port and virtual device " Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 14/23] dts: cpu " Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 15/23] dts: os session " Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 16/23] dts: posix and linux sessions " Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 17/23] dts: node " Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 18/23] dts: sut and tg nodes " Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 19/23] dts: base traffic generators " Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 20/23] dts: scapy tg " Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 21/23] dts: test suites " Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 22/23] dts: add doc generation dependencies Juraj Linkeš
2023-11-08 16:00             ` Yoan Picchi
2023-11-15 10:00               ` Juraj Linkeš
2023-11-08 12:53           ` [PATCH v6 23/23] dts: add doc generation Juraj Linkeš
2023-11-15 13:09             ` [PATCH v7 00/21] dts: docstrings update Juraj Linkeš
2023-11-15 13:09               ` [PATCH v7 01/21] dts: code adjustments for doc generation Juraj Linkeš
2023-11-16 21:04                 ` Jeremy Spewock
2023-11-20 16:10                   ` Juraj Linkeš
2023-11-20 16:02                 ` Yoan Picchi
2023-11-15 13:09               ` [PATCH v7 02/21] dts: add docstring checker Juraj Linkeš
2023-11-20 16:03                 ` Yoan Picchi
2023-11-15 13:09               ` [PATCH v7 03/21] dts: add basic developer docs Juraj Linkeš
2023-11-20 16:03                 ` Yoan Picchi
2023-11-15 13:09               ` [PATCH v7 04/21] dts: exceptions docstring update Juraj Linkeš
2023-11-20 16:22                 ` Yoan Picchi
2023-11-20 16:35                   ` Juraj Linkeš
2023-11-15 13:09               ` [PATCH v7 05/21] dts: settings " Juraj Linkeš
2023-11-15 13:09               ` [PATCH v7 06/21] dts: logger and utils " Juraj Linkeš
2023-11-20 16:23                 ` Yoan Picchi
2023-11-20 16:36                   ` Juraj Linkeš
2023-11-15 13:09               ` [PATCH v7 07/21] dts: dts runner and main " Juraj Linkeš
2023-11-16 21:51                 ` Jeremy Spewock
2023-11-20 16:13                   ` Juraj Linkeš
2023-11-20 17:43                 ` Yoan Picchi
2023-11-21  9:10                   ` Juraj Linkeš
2023-11-15 13:09               ` [PATCH v7 08/21] dts: test suite " Juraj Linkeš
2023-11-16 22:16                 ` Jeremy Spewock
2023-11-20 16:25                   ` Juraj Linkeš
2023-11-15 13:09               ` [PATCH v7 09/21] dts: test result " Juraj Linkeš
2023-11-16 22:47                 ` Jeremy Spewock
2023-11-20 16:33                   ` Juraj Linkeš
2023-11-30 21:20                     ` Jeremy Spewock
2023-11-15 13:09               ` [PATCH v7 10/21] dts: config " Juraj Linkeš
2023-11-21 15:08                 ` Yoan Picchi
2023-11-22 10:42                   ` Juraj Linkeš
2023-11-15 13:09               ` [PATCH v7 11/21] dts: remote session " Juraj Linkeš
2023-11-21 15:36                 ` Yoan Picchi
2023-11-22 11:13                   ` Juraj Linkeš
2023-11-22 11:25                     ` Yoan Picchi
2023-11-15 13:09               ` [PATCH v7 12/21] dts: interactive " Juraj Linkeš
2023-11-15 13:09               ` [PATCH v7 13/21] dts: port and virtual device " Juraj Linkeš
2023-11-15 13:09               ` [PATCH v7 14/21] dts: cpu " Juraj Linkeš
2023-11-21 17:45                 ` Yoan Picchi
2023-11-22 11:18                   ` Juraj Linkeš
2023-11-15 13:09               ` [PATCH v7 15/21] dts: os session " Juraj Linkeš
2023-11-22 11:50                 ` Yoan Picchi
2023-11-22 13:27                   ` Juraj Linkeš
2023-11-15 13:09               ` [PATCH v7 16/21] dts: posix and linux sessions " Juraj Linkeš
2023-11-22 13:24                 ` Yoan Picchi
2023-11-22 13:35                   ` Juraj Linkeš
2023-11-15 13:09               ` [PATCH v7 17/21] dts: node " Juraj Linkeš
2023-11-22 12:18                 ` Yoan Picchi
2023-11-22 13:28                   ` Juraj Linkeš
2023-11-15 13:09               ` [PATCH v7 18/21] dts: sut and tg nodes " Juraj Linkeš
2023-11-22 13:12                 ` Yoan Picchi
2023-11-22 13:34                   ` Juraj Linkeš
2023-11-15 13:09               ` [PATCH v7 19/21] dts: base traffic generators " Juraj Linkeš
2023-11-21 16:20                 ` Yoan Picchi
2023-11-22 11:38                   ` Juraj Linkeš
2023-11-22 11:56                     ` Yoan Picchi
2023-11-22 13:11                       ` Juraj Linkeš
2023-11-15 13:09               ` [PATCH v7 20/21] dts: scapy tg " Juraj Linkeš
2023-11-21 16:33                 ` Yoan Picchi
2023-11-22 13:18                   ` Juraj Linkeš
2023-11-15 13:09               ` [PATCH v7 21/21] dts: test suites " Juraj Linkeš
2023-11-16 17:36                 ` Yoan Picchi
2023-11-20 10:17                   ` Juraj Linkeš
2023-11-20 12:50                     ` Yoan Picchi
2023-11-22 13:40                       ` Juraj Linkeš
2023-11-23 15:13               ` [PATCH v8 00/21] dts: docstrings update Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 01/21] dts: code adjustments for doc generation Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 02/21] dts: add docstring checker Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 03/21] dts: add basic developer docs Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 04/21] dts: exceptions docstring update Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 05/21] dts: settings " Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 06/21] dts: logger and utils " Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 07/21] dts: dts runner and main " Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 08/21] dts: test suite " Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 09/21] dts: test result " Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 10/21] dts: config " Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 11/21] dts: remote session " Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 12/21] dts: interactive " Juraj Linkeš
2023-11-30 21:49                   ` Jeremy Spewock
2023-12-04  9:50                     ` Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 13/21] dts: port and virtual device " Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 14/21] dts: cpu " Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 15/21] dts: os session " Juraj Linkeš
2023-12-01 17:33                   ` Jeremy Spewock
2023-12-04  9:53                     ` Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 16/21] dts: posix and linux sessions " Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 17/21] dts: node " Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 18/21] dts: sut and tg nodes " Juraj Linkeš
2023-12-01 18:06                   ` Jeremy Spewock
2023-12-04 10:02                     ` Juraj Linkeš
2023-12-04 11:02                       ` Bruce Richardson
2023-11-23 15:13                 ` [PATCH v8 19/21] dts: base traffic generators " Juraj Linkeš
2023-12-01 18:05                   ` Jeremy Spewock
2023-12-04 10:03                     ` Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 20/21] dts: scapy tg " Juraj Linkeš
2023-12-01 18:17                   ` Jeremy Spewock
2023-12-04 10:07                     ` Juraj Linkeš
2023-11-23 15:13                 ` [PATCH v8 21/21] dts: test suites " Juraj Linkeš
2023-12-01 16:00                 ` [PATCH v8 00/21] dts: docstrings update Yoan Picchi
2023-12-01 18:23                   ` Jeremy Spewock
2023-12-04 10:24                 ` [PATCH v9 " Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 01/21] dts: code adjustments for doc generation Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 02/21] dts: add docstring checker Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 03/21] dts: add basic developer docs Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 04/21] dts: exceptions docstring update Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 05/21] dts: settings " Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 06/21] dts: logger and utils " Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 07/21] dts: dts runner and main " Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 08/21] dts: test suite " Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 09/21] dts: test result " Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 10/21] dts: config " Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 11/21] dts: remote session " Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 12/21] dts: interactive " Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 13/21] dts: port and virtual device " Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 14/21] dts: cpu " Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 15/21] dts: os session " Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 16/21] dts: posix and linux sessions " Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 17/21] dts: node " Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 18/21] dts: sut and tg nodes " Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 19/21] dts: base traffic generators " Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 20/21] dts: scapy tg " Juraj Linkeš
2023-12-04 10:24                   ` [PATCH v9 21/21] dts: test suites " Juraj Linkeš
2023-12-05 18:39                     ` Jeremy Spewock
2023-12-21 11:48                   ` [PATCH v9 00/21] dts: docstrings update Thomas Monjalon
2023-11-15 13:36             ` [PATCH v1 0/2] dts: api docs generation Juraj Linkeš
2023-11-15 13:36               ` [PATCH v1 1/2] dts: add doc generation dependencies Juraj Linkeš
2023-11-15 13:36               ` [PATCH v1 2/2] dts: add doc generation Juraj Linkeš
2024-01-22 12:00               ` [PATCH v2 0/3] dts: API docs generation Juraj Linkeš
2024-01-22 12:00                 ` [PATCH v2 1/3] dts: add doc generation dependencies Juraj Linkeš
2024-01-22 12:00                 ` [PATCH v2 2/3] dts: add API doc sources Juraj Linkeš
2024-01-22 12:00                 ` [PATCH v2 3/3] dts: add API doc generation Juraj Linkeš
2024-01-22 16:35               ` [PATCH v3 0/3] dts: API docs generation Juraj Linkeš
2024-01-22 16:35                 ` [PATCH v3 1/3] dts: add doc generation dependencies Juraj Linkeš
2024-01-22 16:35                 ` [PATCH v3 2/3] dts: add API doc sources Juraj Linkeš
2024-01-22 16:35                 ` [PATCH v3 3/3] dts: add API doc generation Juraj Linkeš
2024-01-29 17:09                   ` Jeremy Spewock
     [not found]                   ` <CAJvnSUCNjo0p-yhROF1MNLKhjiAw2QTyTHO2hpOaVVUn0xnJ0A@mail.gmail.com>
2024-02-29 18:12                     ` Nicholas Pratte
2024-04-12 10:14               ` [PATCH v4 0/3] dts: API docs generation Juraj Linkeš
2024-04-12 10:14                 ` [PATCH v4 1/3] dts: add doc generation dependencies Juraj Linkeš
2024-04-12 10:14                 ` [PATCH v4 2/3] dts: add API doc sources Juraj Linkeš
2024-04-12 10:14                 ` [PATCH v4 3/3] dts: add API doc generation Juraj Linkeš
2024-04-29 13:49                 ` [PATCH v4 0/3] dts: API docs generation Jeremy Spewock
2024-04-29 14:12                   ` Patrick Robb

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAOb5WZZJN3Sj0mxM9e-KciXDuEzX00y0P0Gzi+iqW9-OMvCZFQ@mail.gmail.com \
    --to=juraj.linkes@pantheon.tech \
    --cc=Honnappa.Nagarahalli@arm.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=jspewock@iol.unh.edu \
    --cc=paul.szczepanek@arm.com \
    --cc=probb@iol.unh.edu \
    --cc=thomas@monjalon.net \
    --cc=yoan.picchi@foss.arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).