Hi David, Dean and I both looked at the patch from Lukas, yes it looks good and I will add a comment and tag there.
Otherwise, I'm not sure how the patch could have been breaking docs given our process. Can you please sanity check my process below? Maybe I am making a silly mistake with validating the docs build. For the next dts branch, when I'm adding new patches, for each patch: 1. Apply patchseries 2. Run normal checks (checkpatches.sh, check-git-log.sh, dts-check-format.sh) 3. Perform a doc build like below: meson setup my-doc-build ninja -C my-doc-build doc Then, It quickly does a doc build, and (although I don't always look unless I'm making a docs change) it is possible to navigate into the build dir docs dir, and open up the html docs files. 4. Then at the end I push my local branch with the new patches added to the remote next-dts repo. So, is my above docs check sufficient, or am I missing a part of the process? On Tue, Jan 20, 2026 at 4:13 AM David Marchand <[email protected]> wrote: > Hello dts guys, > > On Fri, 7 Nov 2025 at 22:50, Dean Marx <[email protected]> wrote: > > > > Add start tx_first method to testpmd shell, which sends > > a specified number of burst packets prior to starting > > packet forwarding. > > > > Signed-off-by: Dean Marx <[email protected]> > > Reviewed-by: Luca Vizzarro <[email protected]> > > --- > > dts/api/testpmd/__init__.py | 21 +++++++++++++++++++++ > > 1 file changed, 21 insertions(+) > > > > diff --git a/dts/api/testpmd/__init__.py b/dts/api/testpmd/__init__.py > > index aadb7f4e70..6d70927660 100644 > > --- a/dts/api/testpmd/__init__.py > > +++ b/dts/api/testpmd/__init__.py > > @@ -204,6 +204,27 @@ def start(self, verify: bool = True) -> None: > > self._logger.debug(f"Failed to start packet forwarding: > \n{start_cmd_output}") > > raise InteractiveCommandExecutionError("Testpmd failed > to start packet forwarding.") > > > > + @_requires_started_ports > > + def start_tx_first(self, burst_num: int, verify: bool = True) -> > None: > > + """Start packet forwarding after sending specified number of > bursts of packets. > > + > > + Args: > > + burst_num: Number of packets to send before stopping > transmission. > > + verify: If :data:`True` , a second start command will be > sent in an attempt to verify > > + packet forwarding started as expected. > > + > > + Raises: > > + InteractiveCommandExecutionError: If `verify` is > :data:`True` and forwarding fails to > > + start or ports fail to come up. > > + """ > > + self.send_command(f"start tx_first {burst_num if burst_num is > not None else ""}") > > + if verify: > > + # If forwarding was already started, sending "start" again > should tell us > > + start_cmd_output = self.send_command("start") > > + if "Packet forwarding already started" not in > start_cmd_output: > > + self._logger.debug(f"Failed to start packet forwarding: > \n{start_cmd_output}") > > + raise InteractiveCommandExecutionError("Testpmd failed > to start packet forwarding.") > > + > > def stop(self, verify: bool = True) -> str: > > """Stop packet forwarding. > > > > I can see (uncaught) warnings in GHA when generating the documentation. > I don't know if this is something new, or if it was like this from the > start. > > Please have a look. > > 2026-01-20T08:16:58.5130393Z [250/252] Generating dts_api_html with a > custom command > 2026-01-20T08:16:58.5131324Z WARNING: autodoc: failed to import module > 'testpmd' from module 'api'; the following exception was raised: > 2026-01-20T08:16:58.5132132Z Traceback (most recent call last): > 2026-01-20T08:16:58.5132676Z File > "/usr/lib/python3/dist-packages/sphinx/ext/autodoc/importer.py", line > 70, in import_module > 2026-01-20T08:16:58.5133175Z return importlib.import_module(modname) > 2026-01-20T08:16:58.5133807Z File > "/usr/lib/python3.10/importlib/__init__.py", line 126, in > import_module > 2026-01-20T08:16:58.5134351Z return > _bootstrap._gcd_import(name[level:], package, level) > 2026-01-20T08:16:58.5134771Z File "<frozen importlib._bootstrap>", > line 1050, in _gcd_import > 2026-01-20T08:16:58.5135202Z File "<frozen importlib._bootstrap>", > line 1027, in _find_and_load > 2026-01-20T08:16:58.5135997Z File "<frozen importlib._bootstrap>", > line 1006, in _find_and_load_unlocked > 2026-01-20T08:16:58.5136465Z File "<frozen importlib._bootstrap>", > line 688, in _load_unlocked > 2026-01-20T08:16:58.5136900Z File "<frozen > importlib._bootstrap_external>", line 879, in exec_module > 2026-01-20T08:16:58.5137348Z File "<frozen > importlib._bootstrap_external>", line 1017, in get_code > 2026-01-20T08:16:58.5137795Z File "<frozen > importlib._bootstrap_external>", line 947, in source_to_code > 2026-01-20T08:16:58.5138259Z File "<frozen importlib._bootstrap>", > line 241, in _call_with_frames_removed > 2026-01-20T08:16:58.5138733Z File > "/home/runner/work/dpdk/dpdk/dts/api/testpmd/__init__.py", line 230 > 2026-01-20T08:16:58.5139388Z self.send_command(f"start tx_first > {burst_num if burst_num is not None else ""}") > 2026-01-20T08:16:58.5139819Z > ^ > 2026-01-20T08:16:58.5140133Z SyntaxError: f-string: expecting '}' > 2026-01-20T08:16:58.5140317Z > > ... > > > https://github.com/DPDK/dpdk/actions/runs/21163780224/job/60863594703#step:19:9587 > > > > -- > David Marchand > >

