From: "Juraj Linkeš" <juraj.linkes@pantheon.tech>
To: Yoan Picchi <yoan.picchi@foss.arm.com>
Cc: thomas@monjalon.net, Honnappa.Nagarahalli@arm.com,
jspewock@iol.unh.edu, probb@iol.unh.edu,
paul.szczepanek@arm.com, dev@dpdk.org
Subject: Re: [PATCH v7 17/21] dts: node docstring update
Date: Wed, 22 Nov 2023 14:28:16 +0100 [thread overview]
Message-ID: <CAOb5WZaqFxTEKaoUVdGp5Vqs6-bR=1DAre+YvsBozrZZYUDn0A@mail.gmail.com> (raw)
In-Reply-To: <eca6fe98-fd64-49a1-b623-e5748d167c4f@foss.arm.com>
On Wed, Nov 22, 2023 at 1:18 PM Yoan Picchi <yoan.picchi@foss.arm.com> wrote:
>
> On 11/15/23 13:09, Juraj Linkeš wrote:
> > Format according to the Google format and PEP257, with slight
> > deviations.
> >
> > Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
> > ---
> > dts/framework/testbed_model/node.py | 191 +++++++++++++++++++---------
> > 1 file changed, 131 insertions(+), 60 deletions(-)
> >
> > diff --git a/dts/framework/testbed_model/node.py b/dts/framework/testbed_model/node.py
> > index fa5b143cdd..f93b4acecd 100644
> > --- a/dts/framework/testbed_model/node.py
> > +++ b/dts/framework/testbed_model/node.py
> > @@ -3,8 +3,13 @@
> > # Copyright(c) 2022-2023 PANTHEON.tech s.r.o.
> > # Copyright(c) 2022-2023 University of New Hampshire
> >
> > -"""
> > -A node is a generic host that DTS connects to and manages.
> > +"""Common functionality for node management.
> > +
> > +A node is any host/server DTS connects to.
> > +
> > +The base class, :class:`Node`, provides functionality common to all nodes and is supposed
> > +to be extended by subclasses with functionality specific to each node type.
>
> functionality -> functionalities
>
Ack.
> > +The decorator :func:`Node.skip_setup` can be used without subclassing.
> > """
> >
> > from abc import ABC
> > @@ -35,10 +40,22 @@
> >
> >
> > class Node(ABC):
> > - """
> > - Basic class for node management. This class implements methods that
> > - manage a node, such as information gathering (of CPU/PCI/NIC) and
> > - environment setup.
> > + """The base class for node management.
> > +
> > + It shouldn't be instantiated, but rather subclassed.
> > + It implements common methods to manage any node:
> > +
> > + * Connection to the node,
> > + * Hugepages setup.
> > +
> > + Attributes:
> > + main_session: The primary OS-aware remote session used to communicate with the node.
> > + config: The node configuration.
> > + name: The name of the node.
> > + lcores: The list of logical cores that DTS can use on the node.
> > + It's derived from logical cores present on the node and the test run configuration.
> > + ports: The ports of this node specified in the test run configuration.
> > + virtual_devices: The virtual devices used on the node.
> > """
> >
> > main_session: OSSession
> > @@ -52,6 +69,17 @@ class Node(ABC):
> > virtual_devices: list[VirtualDevice]
> >
> > def __init__(self, node_config: NodeConfiguration):
> > + """Connect to the node and gather info during initialization.
> > +
> > + Extra gathered information:
> > +
> > + * The list of available logical CPUs. This is then filtered by
> > + the ``lcores`` configuration in the YAML test run configuration file,
> > + * Information about ports from the YAML test run configuration file.
> > +
> > + Args:
> > + node_config: The node's test run configuration.
> > + """
> > self.config = node_config
> > self.name = node_config.name
> > self._logger = getLogger(self.name)
> > @@ -60,7 +88,7 @@ def __init__(self, node_config: NodeConfiguration):
> > self._logger.info(f"Connected to node: {self.name}")
> >
> > self._get_remote_cpus()
> > - # filter the node lcores according to user config
> > + # filter the node lcores according to the test run configuration
> > self.lcores = LogicalCoreListFilter(
> > self.lcores, LogicalCoreList(self.config.lcores)
> > ).filter()
> > @@ -76,9 +104,14 @@ def _init_ports(self) -> None:
> > self.configure_port_state(port)
> >
> > def set_up_execution(self, execution_config: ExecutionConfiguration) -> None:
> > - """
> > - Perform the execution setup that will be done for each execution
> > - this node is part of.
> > + """Execution setup steps.
> > +
> > + Configure hugepages and call :meth:`_set_up_execution` where
> > + the rest of the configuration steps (if any) are implemented.
> > +
> > + Args:
> > + execution_config: The execution test run configuration according to which
> > + the setup steps will be taken.
> > """
> > self._setup_hugepages()
> > self._set_up_execution(execution_config)
> > @@ -87,58 +120,74 @@ def set_up_execution(self, execution_config: ExecutionConfiguration) -> None:
> > self.virtual_devices.append(VirtualDevice(vdev))
> >
> > def _set_up_execution(self, execution_config: ExecutionConfiguration) -> None:
> > - """
> > - This method exists to be optionally overwritten by derived classes and
> > - is not decorated so that the derived class doesn't have to use the decorator.
> > + """Optional additional execution setup steps for subclasses.
> > +
> > + Subclasses should override this if they need to add additional execution setup steps.
> > """
> >
> > def tear_down_execution(self) -> None:
> > - """
> > - Perform the execution teardown that will be done after each execution
> > - this node is part of concludes.
> > + """Execution teardown steps.
> > +
> > + There are currently no common execution teardown steps common to all DTS node types.
> > """
> > self.virtual_devices = []
> > self._tear_down_execution()
> >
> > def _tear_down_execution(self) -> None:
> > - """
> > - This method exists to be optionally overwritten by derived classes and
> > - is not decorated so that the derived class doesn't have to use the decorator.
> > + """Optional additional execution teardown steps for subclasses.
> > +
> > + Subclasses should override this if they need to add additional execution teardown steps.
> > """
> >
> > def set_up_build_target(
> > self, build_target_config: BuildTargetConfiguration
> > ) -> None:
> > - """
> > - Perform the build target setup that will be done for each build target
> > - tested on this node.
> > + """Build target setup steps.
> > +
> > + There are currently no common build target setup steps common to all DTS node types.
> > +
> > + Args:
> > + build_target_config: The build target test run configuration according to which
> > + the setup steps will be taken.
> > """
> > self._set_up_build_target(build_target_config)
> >
> > def _set_up_build_target(
> > self, build_target_config: BuildTargetConfiguration
> > ) -> None:
> > - """
> > - This method exists to be optionally overwritten by derived classes and
> > - is not decorated so that the derived class doesn't have to use the decorator.
> > + """Optional additional build target setup steps for subclasses.
> > +
> > + Subclasses should override this if they need to add additional build target setup steps.
> > """
> >
> > def tear_down_build_target(self) -> None:
> > - """
> > - Perform the build target teardown that will be done after each build target
> > - tested on this node.
> > + """Build target teardown steps.
> > +
> > + There are currently no common build target teardown steps common to all DTS node types.
> > """
> > self._tear_down_build_target()
> >
> > def _tear_down_build_target(self) -> None:
> > - """
> > - This method exists to be optionally overwritten by derived classes and
> > - is not decorated so that the derived class doesn't have to use the decorator.
> > + """Optional additional build target teardown steps for subclasses.
> > +
> > + Subclasses should override this if they need to add additional build target teardown steps.
> > """
> >
> > def create_session(self, name: str) -> OSSession:
> > - """
> > - Create and return a new OSSession tailored to the remote OS.
> > + """Create and return a new OS-aware remote session.
> > +
> > + The returned session won't be used by the node creating it. The session must be used by
> > + the caller. The session will be maintained for the entire lifecycle of the node object,
> > + at the end of which the session will be cleaned up automatically.
> > +
> > + Note:
> > + Any number of these supplementary sessions may be created.
> > +
> > + Args:
> > + name: The name of the session.
> > +
> > + Returns:
> > + A new OS-aware remote session.
> > """
> > session_name = f"{self.name} {name}"
> > connection = create_session(
> > @@ -156,19 +205,19 @@ def create_interactive_shell(
> > privileged: bool = False,
> > app_args: str = "",
> > ) -> InteractiveShellType:
> > - """Create a handler for an interactive session.
> > + """Factory for interactive session handlers.
> >
> > - Instantiate shell_cls according to the remote OS specifics.
> > + Instantiate `shell_cls` according to the remote OS specifics.
> >
> > Args:
> > shell_cls: The class of the shell.
> > - timeout: Timeout for reading output from the SSH channel. If you are
> > - reading from the buffer and don't receive any data within the timeout
> > - it will throw an error.
> > + timeout: Timeout for reading output from the SSH channel. If you are reading from
> > + the buffer and don't receive any data within the timeout it will throw an error.
> > privileged: Whether to run the shell with administrative privileges.
> > app_args: The arguments to be passed to the application.
> > +
> > Returns:
> > - Instance of the desired interactive application.
> > + An instance of the desired interactive application shell.
> > """
> > if not shell_cls.dpdk_app:
> > shell_cls.path = self.main_session.join_remote_path(shell_cls.path)
> > @@ -185,14 +234,22 @@ def filter_lcores(
> > filter_specifier: LogicalCoreCount | LogicalCoreList,
> > ascending: bool = True,
> > ) -> list[LogicalCore]:
> > - """
> > - Filter the LogicalCores found on the Node according to
> > - a LogicalCoreCount or a LogicalCoreList.
> > + """Filter the node's logical cores that DTS can use.
> > +
> > + Logical cores that DTS can use are the ones that are present on the node, but filtered
> > + according to the test run configuration. The `filter_specifier` will filter cores from
> > + those logical cores.
> > +
> > + Args:
> > + filter_specifier: Two different filters can be used, one that specifies the number
> > + of logical cores per core, cores per socket and the number of sockets,
> > + and another one that specifies a logical core list.
> > + ascending: If :data:`True`, use cores with the lowest numerical id first and continue
> > + in ascending order. If :data:`False`, start with the highest id and continue
> > + in descending order. This ordering affects which sockets to consider first as well.
> >
> > - If ascending is True, use cores with the lowest numerical id first
> > - and continue in ascending order. If False, start with the highest
> > - id and continue in descending order. This ordering affects which
> > - sockets to consider first as well.
> > + Returns:
> > + The filtered logical cores.
> > """
> > self._logger.debug(f"Filtering {filter_specifier} from {self.lcores}.")
> > return lcore_filter(
> > @@ -202,17 +259,14 @@ def filter_lcores(
> > ).filter()
> >
> > def _get_remote_cpus(self) -> None:
> > - """
> > - Scan CPUs in the remote OS and store a list of LogicalCores.
> > - """
> > + """Scan CPUs in the remote OS and store a list of LogicalCores."""
> > self._logger.info("Getting CPU information.")
> > self.lcores = self.main_session.get_remote_cpus(self.config.use_first_core)
> >
> > 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
> > - to be considered.
> > + """Setup hugepages on the node.
> > +
> > + Configure the hugepages only if they're specified in the node's test run configuration.
> > """
> > if self.config.hugepages:
> > self.main_session.setup_hugepages(
> > @@ -220,8 +274,11 @@ def _setup_hugepages(self) -> None:
> > )
> >
> > def configure_port_state(self, port: Port, enable: bool = True) -> None:
> > - """
> > - Enable/disable port.
> > + """Enable/disable `port`.
> > +
> > + Args:
> > + port: The port to enable/disable.
> > + enable: :data:`True` to enable, :data:`False` to disable.
> > """
> > self.main_session.configure_port_state(port, enable)
> >
> > @@ -231,15 +288,17 @@ def configure_port_ip_address(
> > port: Port,
> > delete: bool = False,
> > ) -> None:
> > - """
> > - Configure the IP address of a port on this node.
> > + """Add an IP address to `port` on this node.
> > +
> > + Args:
> > + address: The IP address with mask in CIDR format. Can be either IPv4 or IPv6.
> > + port: The port to which to add the address.
> > + delete: If :data:`True`, will delete the address from the port instead of adding it.
> > """
> > self.main_session.configure_port_ip_address(address, port, delete)
> >
> > def close(self) -> None:
> > - """
> > - Close all connections and free other resources.
> > - """
> > + """Close all connections and free other resources."""
> > if self.main_session:
> > self.main_session.close()
> > for session in self._other_sessions:
> > @@ -248,6 +307,11 @@ def close(self) -> None:
> >
> > @staticmethod
> > def skip_setup(func: Callable[..., Any]) -> Callable[..., Any]:
> > + """Skip the decorated function.
> > +
> > + The :option:`--skip-setup` command line argument and the :envvar:`DTS_SKIP_SETUP`
> > + environment variable enable the decorator.
> > + """
> > if SETTINGS.skip_setup:
> > return lambda *args: None
> > else:
> > @@ -257,6 +321,13 @@ def skip_setup(func: Callable[..., Any]) -> Callable[..., Any]:
> > def create_session(
> > node_config: NodeConfiguration, name: str, logger: DTSLOG
> > ) -> OSSession:
> > + """Factory for OS-aware sessions.
> > +
> > + Args:
> > + node_config: The test run configuration of the node to connect to.
> > + name: The name of the session.
> > + logger: The logger instance this session will use.
> > + """
> > match node_config.os:
> > case OS.linux:
> > return LinuxSession(node_config, name, logger)
>
next prev parent reply other threads:[~2023-11-22 13:28 UTC|newest]
Thread overview: 393+ 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š
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š [this message]
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-05-31 10:42 ` Luca Vizzarro
2024-06-14 14:32 ` Jeremy Spewock
2024-04-12 10:14 ` [PATCH v4 2/3] dts: add API doc sources Juraj Linkeš
2024-05-31 10:43 ` Luca Vizzarro
2024-06-14 14:32 ` Jeremy Spewock
2024-04-12 10:14 ` [PATCH v4 3/3] dts: add API doc generation Juraj Linkeš
2024-05-31 10:43 ` Luca Vizzarro
2024-04-29 13:49 ` [PATCH v4 0/3] dts: API docs generation Jeremy Spewock
2024-04-29 14:12 ` Patrick Robb
2024-06-24 13:26 ` [PATCH v5 0/4] " Juraj Linkeš
2024-06-24 13:26 ` [PATCH v5 1/4] dts: update params and parser docstrings Juraj Linkeš
2024-06-24 13:26 ` [PATCH v5 2/4] dts: add doc generation dependencies Juraj Linkeš
2024-06-24 13:26 ` [PATCH v5 3/4] dts: add API doc sources Juraj Linkeš
2024-06-24 13:26 ` [PATCH v5 4/4] dts: add API doc generation Juraj Linkeš
2024-06-24 13:45 ` [PATCH v6 0/4] dts: API docs generation Juraj Linkeš
2024-06-24 13:45 ` [PATCH v6 1/4] dts: update params and parser docstrings Juraj Linkeš
2024-06-24 13:45 ` [PATCH v6 2/4] dts: add doc generation dependencies Juraj Linkeš
2024-06-24 13:45 ` [PATCH v6 3/4] dts: add API doc sources Juraj Linkeš
2024-06-24 13:46 ` [PATCH v6 4/4] dts: add API doc generation Juraj Linkeš
2024-06-24 13:53 ` Bruce Richardson
2024-06-24 14:08 ` Juraj Linkeš
2024-06-24 14:25 ` Thomas Monjalon
2024-06-24 14:25 ` [PATCH v7 0/4] dts: API docs generation Juraj Linkeš
2024-06-24 14:25 ` [PATCH v7 1/4] dts: update params and parser docstrings Juraj Linkeš
2024-06-24 15:37 ` Luca Vizzarro
2024-06-24 14:25 ` [PATCH v7 2/4] dts: add doc generation dependencies Juraj Linkeš
2024-06-24 14:25 ` [PATCH v7 3/4] dts: add API doc sources Juraj Linkeš
2024-06-24 14:25 ` [PATCH v7 4/4] dts: add API doc generation Juraj Linkeš
2024-07-12 8:57 ` [PATCH v8 0/5] dts: API docs generation Juraj Linkeš
2024-07-12 8:57 ` [PATCH v8 1/5] dts: update params and parser docstrings Juraj Linkeš
2024-07-12 8:57 ` [PATCH v8 2/5] dts: add doc generation dependencies Juraj Linkeš
2024-07-12 8:57 ` [PATCH v8 3/5] dts: add API doc sources Juraj Linkeš
2024-07-12 8:57 ` [PATCH v8 4/5] doc: guides and API meson improvements Juraj Linkeš
2024-07-30 13:28 ` Thomas Monjalon
2024-08-01 10:02 ` Juraj Linkeš
2024-07-12 8:57 ` [PATCH v8 5/5] dts: add API doc generation Juraj Linkeš
2024-07-30 13:51 ` Thomas Monjalon
2024-08-01 13:03 ` Juraj Linkeš
2024-08-01 15:07 ` Thomas Monjalon
2024-08-02 10:48 ` Juraj Linkeš
2024-08-02 13:53 ` Thomas Monjalon
2024-08-05 9:04 ` Juraj Linkeš
2024-08-01 9:18 ` [PATCH v9 0/5] dts: API docs generation Juraj Linkeš
2024-08-01 9:18 ` [PATCH v9 1/5] dts: update params and parser docstrings Juraj Linkeš
2024-08-01 9:18 ` [PATCH v9 2/5] dts: add doc generation dependencies Juraj Linkeš
2024-08-01 9:18 ` [PATCH v9 3/5] dts: add API doc sources Juraj Linkeš
2024-08-01 9:18 ` [PATCH v9 4/5] doc: guides and API meson improvements Juraj Linkeš
2024-08-01 9:18 ` [PATCH v9 5/5] dts: add API doc generation Juraj Linkeš
2024-08-01 9:37 ` [PATCH v10 0/5] dts: API docs generation Juraj Linkeš
2024-08-01 9:37 ` [PATCH v10 1/5] dts: update params and parser docstrings Juraj Linkeš
2024-08-01 9:37 ` [PATCH v10 2/5] dts: add doc generation dependencies Juraj Linkeš
2024-08-01 9:37 ` [PATCH v10 3/5] dts: add API doc sources Juraj Linkeš
2024-08-01 9:37 ` [PATCH v10 4/5] doc: guides and API meson improvements Juraj Linkeš
2024-08-01 9:37 ` [PATCH v10 5/5] dts: add API doc generation Juraj Linkeš
2024-08-05 13:59 ` [PATCH v11 0/5] dts: API docs generation Juraj Linkeš
2024-08-05 13:59 ` [PATCH v11 1/5] dts: update params and parser docstrings Juraj Linkeš
2024-08-05 13:59 ` [PATCH v11 2/5] dts: add doc generation dependencies Juraj Linkeš
2024-08-05 13:59 ` [PATCH v11 3/5] dts: add API doc sources Juraj Linkeš
2024-08-05 13:59 ` [PATCH v11 4/5] doc: meson doc API build dir variable Juraj Linkeš
2024-08-05 13:59 ` [PATCH v11 5/5] dts: add API doc generation Juraj Linkeš
2024-08-06 6:13 ` [PATCH v12 0/5] dts: API docs generation Juraj Linkeš
2024-08-06 6:13 ` [PATCH v12 1/5] dts: update params and parser docstrings Juraj Linkeš
2024-08-06 6:13 ` [PATCH v12 2/5] dts: add doc generation dependencies Juraj Linkeš
2024-08-06 6:13 ` [PATCH v12 3/5] dts: add API doc sources Juraj Linkeš
2024-08-06 6:14 ` [PATCH v12 4/5] doc: meson doc API build dir variable Juraj Linkeš
2024-08-06 6:14 ` [PATCH v12 5/5] dts: add API doc generation Juraj Linkeš
2024-08-06 8:46 ` [PATCH v13 0/6] API docs generation Juraj Linkeš
2024-08-06 8:46 ` [PATCH v13 1/6] dts: update params and parser docstrings Juraj Linkeš
2024-08-06 8:46 ` [PATCH v13 2/6] dts: replace the or operator in third party types Juraj Linkeš
2024-08-06 8:46 ` [PATCH v13 3/6] dts: add doc generation dependencies Juraj Linkeš
2024-08-06 8:46 ` [PATCH v13 4/6] dts: add API doc sources Juraj Linkeš
2024-08-06 8:46 ` [PATCH v13 5/6] doc: meson doc API build dir variable Juraj Linkeš
2024-08-06 8:46 ` [PATCH v13 6/6] dts: add API doc generation Juraj Linkeš
2024-08-06 11:17 ` [PATCH v14 0/6] API docs generation Juraj Linkeš
2024-08-06 11:17 ` [PATCH v14 1/6] dts: update params and parser docstrings Juraj Linkeš
2024-08-06 11:17 ` [PATCH v14 2/6] dts: replace the or operator in third party types Juraj Linkeš
2024-08-06 11:17 ` [PATCH v14 3/6] dts: add doc generation dependencies Juraj Linkeš
2024-08-06 11:17 ` [PATCH v14 4/6] dts: add API doc sources Juraj Linkeš
2024-08-06 11:17 ` [PATCH v14 5/6] doc: meson doc API build dir variable Juraj Linkeš
2024-08-06 11:17 ` [PATCH v14 6/6] dts: add API doc generation Juraj Linkeš
2024-08-06 15:19 ` [PATCH v15 0/5] API docs generation Juraj Linkeš
2024-08-06 15:19 ` [PATCH v15 1/5] dts: update params and parser docstrings Juraj Linkeš
2024-08-06 15:19 ` [PATCH v15 2/5] dts: replace the or operator in third party types Juraj Linkeš
2024-08-07 13:34 ` Luca Vizzarro
2024-08-07 14:24 ` Juraj Linkeš
2024-08-06 15:19 ` [PATCH v15 3/5] dts: add doc generation dependencies Juraj Linkeš
2024-08-06 15:19 ` [PATCH v15 4/5] dts: add API doc sources Juraj Linkeš
2024-08-06 15:19 ` [PATCH v15 5/5] dts: add API doc generation Juraj Linkeš
2024-08-07 10:41 ` Thomas Monjalon
2024-08-07 12:03 ` Juraj Linkeš
2024-08-07 12:27 ` Thomas Monjalon
2024-08-07 13:12 ` Juraj Linkeš
2024-08-08 12:27 ` Thomas Monjalon
2024-08-08 8:54 ` [PATCH v16 0/5] API docs generation Juraj Linkeš
2024-08-08 8:54 ` [PATCH v16 1/5] dts: update params and parser docstrings Juraj Linkeš
2024-08-09 18:31 ` Jeremy Spewock
2024-08-08 8:54 ` [PATCH v16 2/5] dts: replace the or operator in third party types Juraj Linkeš
2024-08-09 19:03 ` Jeremy Spewock
2024-08-12 7:58 ` Juraj Linkeš
2024-08-08 8:54 ` [PATCH v16 3/5] dts: add doc generation dependencies Juraj Linkeš
2024-08-09 19:04 ` Jeremy Spewock
2024-08-08 8:54 ` [PATCH v16 4/5] dts: add API doc sources Juraj Linkeš
2024-08-08 8:54 ` [PATCH v16 5/5] dts: add API doc generation Juraj Linkeš
2024-08-09 19:04 ` Jeremy Spewock
2024-08-12 8:08 ` Juraj Linkeš
2024-08-14 15:05 ` [PATCH v17 0/5] API docs generation Juraj Linkeš
2024-08-14 15:05 ` [PATCH v17 1/5] dts: update params and parser docstrings Juraj Linkeš
2024-08-14 18:50 ` Jeremy Spewock
2024-08-14 15:05 ` [PATCH v17 2/5] dts: replace the or operator in third party types Juraj Linkeš
2024-08-14 18:50 ` Jeremy Spewock
2024-08-14 15:05 ` [PATCH v17 3/5] dts: add doc generation dependencies Juraj Linkeš
2024-08-14 18:50 ` Jeremy Spewock
2024-08-14 15:05 ` [PATCH v17 4/5] dts: add API doc sources Juraj Linkeš
2024-08-14 15:05 ` [PATCH v17 5/5] dts: add API doc generation Juraj Linkeš
2024-08-14 18:50 ` Jeremy Spewock
2024-08-19 14:37 ` Dean Marx
2024-08-19 17:53 ` Dean Marx
2024-08-20 8:31 ` Juraj Linkeš
2024-08-19 17:49 ` Dean Marx
2024-08-20 13:18 ` [PATCH v18 0/5] API docs generation Juraj Linkeš
2024-08-20 13:18 ` [PATCH v18 1/5] dts: update params and parser docstrings Juraj Linkeš
2024-08-20 13:18 ` [PATCH v18 2/5] dts: replace the or operator in third party types Juraj Linkeš
2024-08-20 13:18 ` [PATCH v18 3/5] dts: add doc generation dependencies Juraj Linkeš
2024-08-20 13:18 ` [PATCH v18 4/5] dts: add API doc sources Juraj Linkeš
2024-08-20 13:18 ` [PATCH v18 5/5] dts: add API doc generation Juraj Linkeš
2024-08-21 15:02 ` [PATCH v19 0/5] DTS API docs generation Juraj Linkeš
2024-08-21 15:02 ` [PATCH v19 1/5] dts: update params and parser docstrings Juraj Linkeš
2024-08-21 15:02 ` [PATCH v19 2/5] dts: replace the or operator in third party types Juraj Linkeš
2024-09-02 10:56 ` Luca Vizzarro
2024-08-21 15:02 ` [PATCH v19 3/5] dts: add doc generation dependencies Juraj Linkeš
2024-09-02 10:56 ` Luca Vizzarro
2024-08-21 15:02 ` [PATCH v19 4/5] dts: add API doc sources Juraj Linkeš
2024-08-21 15:02 ` [PATCH v19 5/5] dts: add API doc generation Juraj Linkeš
2024-08-21 15:24 ` Dean Marx
2024-09-02 10:57 ` Luca Vizzarro
2024-09-12 20:09 ` Thomas Monjalon
2024-09-16 8:51 ` Juraj Linkeš
2024-09-16 12:48 ` Thomas Monjalon
2024-09-17 15:10 ` Juraj Linkeš
2024-09-18 7:38 ` [PATCH v19 0/5] DTS API docs generation Juraj Linkeš
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='CAOb5WZaqFxTEKaoUVdGp5Vqs6-bR=1DAre+YvsBozrZZYUDn0A@mail.gmail.com' \
--to=juraj.linkes@pantheon.tech \
--cc=Honnappa.Nagarahalli@arm.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).