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