Message ID | cover.1723050310.git.jerome.forissier@linaro.org |
---|---|
Headers | show |
Series | Introduce the lwIP network stack | expand |
On Wed, Aug 07, 2024 at 07:11:44PM +0200, Jerome Forissier wrote: > This is a rework of a patch series by Maxim Uvarov: "net/lwip: add lwip > library for the network stack" [1]. The goal is to introduce the lwIP TCP/IP > stack [2] [3] as an alternative to the current implementation in net/, > selectable with Kconfig, and ultimately keep only lwIP if possible. Some > reasons for doing so are: > - Make the support of HTTPS in the wget command easier. Javier T. and > Raymond M. (CC'd) have some additional lwIP and Mbed TLS patches to do > so. With that it becomes possible to fetch and launch a distro installer > such as Debian etc. using a secure, authenticated connection directly > from the U-Boot shell. Several use cases: > * Authentication: prevent MITM attack (third party replacing the > binary with a different one) > * Confidentiality: prevent third parties from grabbing a copy of the > image as it is being downloaded > * Allow connection to servers that do not support plain HTTP anymore > (this is becoming more and more common on the Internet these days) > - Possibly benefit from additional features implemented in lwIP > - Less code to maintain in U-Boot > > Prior to applying this series, the lwIP stack needs to be added as a > Git subtree with the following command: > > $ git subtree add --squash --prefix lib/lwip/lwip https://git.savannah.gnu.org/git/lwip.git STABLE-2_2_0_RELEASE For v9, I think it would be good to do a CI run with NET_LWIP default and seeing what fails from that too. There's a few problems still leading to a lot of failures, in that case. Thanks.
On 8/7/24 22:44, Tom Rini wrote: > On Wed, Aug 07, 2024 at 07:11:44PM +0200, Jerome Forissier wrote: > >> This is a rework of a patch series by Maxim Uvarov: "net/lwip: add lwip >> library for the network stack" [1]. The goal is to introduce the lwIP TCP/IP >> stack [2] [3] as an alternative to the current implementation in net/, >> selectable with Kconfig, and ultimately keep only lwIP if possible. Some >> reasons for doing so are: >> - Make the support of HTTPS in the wget command easier. Javier T. and >> Raymond M. (CC'd) have some additional lwIP and Mbed TLS patches to do >> so. With that it becomes possible to fetch and launch a distro installer >> such as Debian etc. using a secure, authenticated connection directly >> from the U-Boot shell. Several use cases: >> * Authentication: prevent MITM attack (third party replacing the >> binary with a different one) >> * Confidentiality: prevent third parties from grabbing a copy of the >> image as it is being downloaded >> * Allow connection to servers that do not support plain HTTP anymore >> (this is becoming more and more common on the Internet these days) >> - Possibly benefit from additional features implemented in lwIP >> - Less code to maintain in U-Boot >> >> Prior to applying this series, the lwIP stack needs to be added as a >> Git subtree with the following command: >> >> $ git subtree add --squash --prefix lib/lwip/lwip https://git.savannah.gnu.org/git/lwip.git STABLE-2_2_0_RELEASE > > For v9, I think it would be good to do a CI run with NET_LWIP default > and seeing what fails from that too. There's a few problems still > leading to a lot of failures, in that case. Thanks. I pushed my branch to GitHub [1] and there's a failure in the tools_only_macOS job [2]. Any idea what is going on? I tried twice and it failed twice :-/ Om my Linux machine, "make tools-only_config tools-only" works fine. [1] https://github.com/u-boot/u-boot/pull/635 [2] https://dev.azure.com/u-boot/u-boot/_build/results?buildId=9105&view=results Thanks,
On Thu, Aug 08, 2024 at 06:41:02PM +0200, Jerome Forissier wrote: > > > On 8/7/24 22:44, Tom Rini wrote: > > On Wed, Aug 07, 2024 at 07:11:44PM +0200, Jerome Forissier wrote: > > > >> This is a rework of a patch series by Maxim Uvarov: "net/lwip: add lwip > >> library for the network stack" [1]. The goal is to introduce the lwIP TCP/IP > >> stack [2] [3] as an alternative to the current implementation in net/, > >> selectable with Kconfig, and ultimately keep only lwIP if possible. Some > >> reasons for doing so are: > >> - Make the support of HTTPS in the wget command easier. Javier T. and > >> Raymond M. (CC'd) have some additional lwIP and Mbed TLS patches to do > >> so. With that it becomes possible to fetch and launch a distro installer > >> such as Debian etc. using a secure, authenticated connection directly > >> from the U-Boot shell. Several use cases: > >> * Authentication: prevent MITM attack (third party replacing the > >> binary with a different one) > >> * Confidentiality: prevent third parties from grabbing a copy of the > >> image as it is being downloaded > >> * Allow connection to servers that do not support plain HTTP anymore > >> (this is becoming more and more common on the Internet these days) > >> - Possibly benefit from additional features implemented in lwIP > >> - Less code to maintain in U-Boot > >> > >> Prior to applying this series, the lwIP stack needs to be added as a > >> Git subtree with the following command: > >> > >> $ git subtree add --squash --prefix lib/lwip/lwip https://git.savannah.gnu.org/git/lwip.git STABLE-2_2_0_RELEASE > > > > For v9, I think it would be good to do a CI run with NET_LWIP default > > and seeing what fails from that too. There's a few problems still > > leading to a lot of failures, in that case. Thanks. > > I pushed my branch to GitHub [1] and there's a failure in the > tools_only_macOS job [2]. Any idea what is going on? I tried twice and > it failed twice :-/ > Om my Linux machine, "make tools-only_config tools-only" works > fine. > > [1] https://github.com/u-boot/u-boot/pull/635 > [2] https://dev.azure.com/u-boot/u-boot/_build/results?buildId=9105&view=results Alright so from [2] going to the job and then downloading the raw log (it's huge, firefox gets mad for me), scrolling down until it's not the git clone we see: 2024-08-08T14:36:30.0865130Z HOSTCC scripts/basic/fixdep 2024-08-08T14:36:30.8641660Z HOSTCC scripts/kconfig/conf.o 2024-08-08T14:36:30.9645180Z LEX scripts/kconfig/zconf.lex.c 2024-08-08T14:36:31.0545650Z YACC scripts/kconfig/zconf.tab.c 2024-08-08T14:36:33.2374910Z HOSTCC scripts/kconfig/zconf.tab.o 2024-08-08T14:36:34.9997050Z HOSTLD scripts/kconfig/conf 2024-08-08T14:36:36.5552790Z generated_defconfig:7:warning: unexpected data: # CONFIG_SANDBOX_ SDL is not set 2024-08-08T14:36:36.5666380Z generated_defconfig:12:warning: unexpected data: # CONFIG_BOOTSTD _FULL is not set 2024-08-08T14:36:36.5724560Z generated_defconfig:13:warning: unexpected data: # CONFIG_BOOTMET H_CROS is not set 2024-08-08T14:36:36.5742720Z generated_defconfig:14:warning: unexpected data: # CONFIG_BOOTMET H_VBE is not set 2024-08-08T14:36:36.5752700Z generated_defconfig:17:warning: unexpected data: # CONFIG_CMD_BOO TD is not set 2024-08-08T14:36:36.5772400Z generated_defconfig:18:warning: unexpected data: # CONFIG_CMD_BOO TM is not set 2024-08-08T14:36:36.5788060Z generated_defconfig:19:warning: unexpected data: # CONFIG_CMD_BOO TI is not set 2024-08-08T14:36:36.5792360Z generated_defconfig:20:warning: unexpected data: # CONFIG_CMD_ELF is not set 2024-08-08T14:36:36.5828400Z generated_defconfig:21:warning: unexpected data: # CONFIG_CMD_EXTENSION is not set 2024-08-08T14:36:36.5840470Z generated_defconfig:22:warning: unexpected data: # CONFIG_CMD_DAT E is not set 2024-08-08T14:36:36.5938540Z generated_defconfig:26:warning: unexpected data: # CONFIG_ACPIGEN is not set 2024-08-08T14:36:36.5974000Z generated_defconfig:35:warning: unexpected data: # CONFIG_VIRTIO_MMIO is not set 2024-08-08T14:36:36.5985430Z generated_defconfig:36:warning: unexpected data: # CONFIG_VIRTIO_PCI is not set 2024-08-08T14:36:36.6045140Z generated_defconfig:37:warning: unexpected data: # CONFIG_VIRTIO_SANDBOX is not set 2024-08-08T14:36:36.6053060Z generated_defconfig:38:warning: unexpected data: # CONFIG_GENERATE_ACPI_TABLE is not set 2024-08-08T14:36:36.6068760Z generated_defconfig:39:warning: unexpected data: # CONFIG_EFI_LOADER is not set 2024-08-08T14:36:36.6088140Z # 2024-08-08T14:36:36.6121560Z # configuration written to .config 2024-08-08T14:36:36.6130190Z # 2024-08-08T14:36:42.5830900Z scripts/kconfig/conf --syncconfig Kconfig 2024-08-08T14:36:43.9105630Z .config:284:warning: symbol value '' invalid for AVB_BUF_ADDR 2024-08-08T14:36:43.9121120Z .config:285:warning: symbol value '' invalid for AVB_BUF_SIZE 2024-08-08T14:36:43.9142940Z * 2024-08-08T14:36:43.9172380Z * Restart config... 2024-08-08T14:36:43.9257450Z * 2024-08-08T14:36:43.9288610Z * 2024-08-08T14:36:43.9332910Z * Security support 2024-08-08T14:36:43.9366750Z * 2024-08-08T14:36:43.9399770Z Build Android Verified Boot operations (AVB_VERIFY) [Y/n/?] y 2024-08-08T15:35:07.9280210Z ##[error]The Operation will be canceled. The next steps may not contain expected logs. And indeed, most of that is "normal" if we look at a current build for tools-only on macOS. We're being hit by the fact that the host CC isn't gcc and is llvm and https://github.com/llvm/llvm-project/issues/78778 applies, I believe. Now how do we work around this? Hum... If you go an change "# CONFIG_FOO is not set" to CONFIG_FOO=n in configs/tools-only_defconfig, I assume your build moves on? This is valid syntax and fixing a more generic issue we have on macOS today.
On 8/8/24 19:24, Tom Rini wrote: > On Thu, Aug 08, 2024 at 06:41:02PM +0200, Jerome Forissier wrote: >> >> >> On 8/7/24 22:44, Tom Rini wrote: >>> On Wed, Aug 07, 2024 at 07:11:44PM +0200, Jerome Forissier wrote: >>> >>>> This is a rework of a patch series by Maxim Uvarov: "net/lwip: add lwip >>>> library for the network stack" [1]. The goal is to introduce the lwIP TCP/IP >>>> stack [2] [3] as an alternative to the current implementation in net/, >>>> selectable with Kconfig, and ultimately keep only lwIP if possible. Some >>>> reasons for doing so are: >>>> - Make the support of HTTPS in the wget command easier. Javier T. and >>>> Raymond M. (CC'd) have some additional lwIP and Mbed TLS patches to do >>>> so. With that it becomes possible to fetch and launch a distro installer >>>> such as Debian etc. using a secure, authenticated connection directly >>>> from the U-Boot shell. Several use cases: >>>> * Authentication: prevent MITM attack (third party replacing the >>>> binary with a different one) >>>> * Confidentiality: prevent third parties from grabbing a copy of the >>>> image as it is being downloaded >>>> * Allow connection to servers that do not support plain HTTP anymore >>>> (this is becoming more and more common on the Internet these days) >>>> - Possibly benefit from additional features implemented in lwIP >>>> - Less code to maintain in U-Boot >>>> >>>> Prior to applying this series, the lwIP stack needs to be added as a >>>> Git subtree with the following command: >>>> >>>> $ git subtree add --squash --prefix lib/lwip/lwip https://git.savannah.gnu.org/git/lwip.git STABLE-2_2_0_RELEASE >>> >>> For v9, I think it would be good to do a CI run with NET_LWIP default >>> and seeing what fails from that too. There's a few problems still >>> leading to a lot of failures, in that case. Thanks. >> >> I pushed my branch to GitHub [1] and there's a failure in the >> tools_only_macOS job [2]. Any idea what is going on? I tried twice and >> it failed twice :-/ >> Om my Linux machine, "make tools-only_config tools-only" works >> fine. >> >> [1] https://github.com/u-boot/u-boot/pull/635 >> [2] https://dev.azure.com/u-boot/u-boot/_build/results?buildId=9105&view=results > > Alright so from [2] going to the job and then downloading the raw log (it's > huge, firefox gets mad for me), scrolling down until it's not the git clone we > see: > 2024-08-08T14:36:30.0865130Z HOSTCC scripts/basic/fixdep > 2024-08-08T14:36:30.8641660Z HOSTCC scripts/kconfig/conf.o > 2024-08-08T14:36:30.9645180Z LEX scripts/kconfig/zconf.lex.c > 2024-08-08T14:36:31.0545650Z YACC scripts/kconfig/zconf.tab.c > 2024-08-08T14:36:33.2374910Z HOSTCC scripts/kconfig/zconf.tab.o > 2024-08-08T14:36:34.9997050Z HOSTLD scripts/kconfig/conf > 2024-08-08T14:36:36.5552790Z generated_defconfig:7:warning: unexpected data: # CONFIG_SANDBOX_ > SDL is not set > 2024-08-08T14:36:36.5666380Z generated_defconfig:12:warning: unexpected data: # CONFIG_BOOTSTD > _FULL is not set > 2024-08-08T14:36:36.5724560Z generated_defconfig:13:warning: unexpected data: # CONFIG_BOOTMET > H_CROS is not set > 2024-08-08T14:36:36.5742720Z generated_defconfig:14:warning: unexpected data: # CONFIG_BOOTMET > H_VBE is not set > 2024-08-08T14:36:36.5752700Z generated_defconfig:17:warning: unexpected data: # CONFIG_CMD_BOO > TD is not set > 2024-08-08T14:36:36.5772400Z generated_defconfig:18:warning: unexpected data: # CONFIG_CMD_BOO > TM is not set > 2024-08-08T14:36:36.5788060Z generated_defconfig:19:warning: unexpected data: # CONFIG_CMD_BOO > TI is not set > 2024-08-08T14:36:36.5792360Z generated_defconfig:20:warning: unexpected data: # CONFIG_CMD_ELF > is not set > 2024-08-08T14:36:36.5828400Z generated_defconfig:21:warning: unexpected data: # CONFIG_CMD_EXTENSION is not set > 2024-08-08T14:36:36.5840470Z generated_defconfig:22:warning: unexpected data: # CONFIG_CMD_DAT > E is not set > 2024-08-08T14:36:36.5938540Z generated_defconfig:26:warning: unexpected data: # CONFIG_ACPIGEN > is not set > 2024-08-08T14:36:36.5974000Z generated_defconfig:35:warning: unexpected data: # CONFIG_VIRTIO_MMIO is not set > 2024-08-08T14:36:36.5985430Z generated_defconfig:36:warning: unexpected data: # CONFIG_VIRTIO_PCI is not set > 2024-08-08T14:36:36.6045140Z generated_defconfig:37:warning: unexpected data: # CONFIG_VIRTIO_SANDBOX is not set > 2024-08-08T14:36:36.6053060Z generated_defconfig:38:warning: unexpected data: # CONFIG_GENERATE_ACPI_TABLE is not set > 2024-08-08T14:36:36.6068760Z generated_defconfig:39:warning: unexpected data: # CONFIG_EFI_LOADER is not set > 2024-08-08T14:36:36.6088140Z # > 2024-08-08T14:36:36.6121560Z # configuration written to .config > 2024-08-08T14:36:36.6130190Z # > 2024-08-08T14:36:42.5830900Z scripts/kconfig/conf --syncconfig Kconfig > 2024-08-08T14:36:43.9105630Z .config:284:warning: symbol value '' invalid for AVB_BUF_ADDR > 2024-08-08T14:36:43.9121120Z .config:285:warning: symbol value '' invalid for AVB_BUF_SIZE > 2024-08-08T14:36:43.9142940Z * > 2024-08-08T14:36:43.9172380Z * Restart config... > 2024-08-08T14:36:43.9257450Z * > 2024-08-08T14:36:43.9288610Z * > 2024-08-08T14:36:43.9332910Z * Security support > 2024-08-08T14:36:43.9366750Z * > 2024-08-08T14:36:43.9399770Z Build Android Verified Boot operations (AVB_VERIFY) [Y/n/?] y > 2024-08-08T15:35:07.9280210Z ##[error]The Operation will be canceled. The next steps may not contain expected logs. > > And indeed, most of that is "normal" if we look at a current build for > tools-only on macOS. We're being hit by the fact that the host CC isn't > gcc and is llvm and https://github.com/llvm/llvm-project/issues/78778 > applies, I believe. Now how do we work around this? Hum... That's an "interesting" bug... > If you go an change "# CONFIG_FOO is not set" to CONFIG_FOO=n in > configs/tools-only_defconfig, I assume your build moves on? Yep, it does. > This is > valid syntax and fixing a more generic issue we have on macOS today. I am adding a new patch to v9: "configs: use syntax CONFIG_FOO=n in tools-only_defconfig". It means one extra step when syncing the defconfigs though... It is just a simple sed command but perhaps you have a better idea? Thanks again for testing and for your help,
On Fri, Aug 09, 2024 at 03:19:02PM +0200, Jerome Forissier wrote: > > > On 8/8/24 19:24, Tom Rini wrote: > > On Thu, Aug 08, 2024 at 06:41:02PM +0200, Jerome Forissier wrote: > >> > >> > >> On 8/7/24 22:44, Tom Rini wrote: > >>> On Wed, Aug 07, 2024 at 07:11:44PM +0200, Jerome Forissier wrote: > >>> > >>>> This is a rework of a patch series by Maxim Uvarov: "net/lwip: add lwip > >>>> library for the network stack" [1]. The goal is to introduce the lwIP TCP/IP > >>>> stack [2] [3] as an alternative to the current implementation in net/, > >>>> selectable with Kconfig, and ultimately keep only lwIP if possible. Some > >>>> reasons for doing so are: > >>>> - Make the support of HTTPS in the wget command easier. Javier T. and > >>>> Raymond M. (CC'd) have some additional lwIP and Mbed TLS patches to do > >>>> so. With that it becomes possible to fetch and launch a distro installer > >>>> such as Debian etc. using a secure, authenticated connection directly > >>>> from the U-Boot shell. Several use cases: > >>>> * Authentication: prevent MITM attack (third party replacing the > >>>> binary with a different one) > >>>> * Confidentiality: prevent third parties from grabbing a copy of the > >>>> image as it is being downloaded > >>>> * Allow connection to servers that do not support plain HTTP anymore > >>>> (this is becoming more and more common on the Internet these days) > >>>> - Possibly benefit from additional features implemented in lwIP > >>>> - Less code to maintain in U-Boot > >>>> > >>>> Prior to applying this series, the lwIP stack needs to be added as a > >>>> Git subtree with the following command: > >>>> > >>>> $ git subtree add --squash --prefix lib/lwip/lwip https://git.savannah.gnu.org/git/lwip.git STABLE-2_2_0_RELEASE > >>> > >>> For v9, I think it would be good to do a CI run with NET_LWIP default > >>> and seeing what fails from that too. There's a few problems still > >>> leading to a lot of failures, in that case. Thanks. > >> > >> I pushed my branch to GitHub [1] and there's a failure in the > >> tools_only_macOS job [2]. Any idea what is going on? I tried twice and > >> it failed twice :-/ > >> Om my Linux machine, "make tools-only_config tools-only" works > >> fine. > >> > >> [1] https://github.com/u-boot/u-boot/pull/635 > >> [2] https://dev.azure.com/u-boot/u-boot/_build/results?buildId=9105&view=results > > > > Alright so from [2] going to the job and then downloading the raw log (it's > > huge, firefox gets mad for me), scrolling down until it's not the git clone we > > see: > > 2024-08-08T14:36:30.0865130Z HOSTCC scripts/basic/fixdep > > 2024-08-08T14:36:30.8641660Z HOSTCC scripts/kconfig/conf.o > > 2024-08-08T14:36:30.9645180Z LEX scripts/kconfig/zconf.lex.c > > 2024-08-08T14:36:31.0545650Z YACC scripts/kconfig/zconf.tab.c > > 2024-08-08T14:36:33.2374910Z HOSTCC scripts/kconfig/zconf.tab.o > > 2024-08-08T14:36:34.9997050Z HOSTLD scripts/kconfig/conf > > 2024-08-08T14:36:36.5552790Z generated_defconfig:7:warning: unexpected data: # CONFIG_SANDBOX_ > > SDL is not set > > 2024-08-08T14:36:36.5666380Z generated_defconfig:12:warning: unexpected data: # CONFIG_BOOTSTD > > _FULL is not set > > 2024-08-08T14:36:36.5724560Z generated_defconfig:13:warning: unexpected data: # CONFIG_BOOTMET > > H_CROS is not set > > 2024-08-08T14:36:36.5742720Z generated_defconfig:14:warning: unexpected data: # CONFIG_BOOTMET > > H_VBE is not set > > 2024-08-08T14:36:36.5752700Z generated_defconfig:17:warning: unexpected data: # CONFIG_CMD_BOO > > TD is not set > > 2024-08-08T14:36:36.5772400Z generated_defconfig:18:warning: unexpected data: # CONFIG_CMD_BOO > > TM is not set > > 2024-08-08T14:36:36.5788060Z generated_defconfig:19:warning: unexpected data: # CONFIG_CMD_BOO > > TI is not set > > 2024-08-08T14:36:36.5792360Z generated_defconfig:20:warning: unexpected data: # CONFIG_CMD_ELF > > is not set > > 2024-08-08T14:36:36.5828400Z generated_defconfig:21:warning: unexpected data: # CONFIG_CMD_EXTENSION is not set > > 2024-08-08T14:36:36.5840470Z generated_defconfig:22:warning: unexpected data: # CONFIG_CMD_DAT > > E is not set > > 2024-08-08T14:36:36.5938540Z generated_defconfig:26:warning: unexpected data: # CONFIG_ACPIGEN > > is not set > > 2024-08-08T14:36:36.5974000Z generated_defconfig:35:warning: unexpected data: # CONFIG_VIRTIO_MMIO is not set > > 2024-08-08T14:36:36.5985430Z generated_defconfig:36:warning: unexpected data: # CONFIG_VIRTIO_PCI is not set > > 2024-08-08T14:36:36.6045140Z generated_defconfig:37:warning: unexpected data: # CONFIG_VIRTIO_SANDBOX is not set > > 2024-08-08T14:36:36.6053060Z generated_defconfig:38:warning: unexpected data: # CONFIG_GENERATE_ACPI_TABLE is not set > > 2024-08-08T14:36:36.6068760Z generated_defconfig:39:warning: unexpected data: # CONFIG_EFI_LOADER is not set > > 2024-08-08T14:36:36.6088140Z # > > 2024-08-08T14:36:36.6121560Z # configuration written to .config > > 2024-08-08T14:36:36.6130190Z # > > 2024-08-08T14:36:42.5830900Z scripts/kconfig/conf --syncconfig Kconfig > > 2024-08-08T14:36:43.9105630Z .config:284:warning: symbol value '' invalid for AVB_BUF_ADDR > > 2024-08-08T14:36:43.9121120Z .config:285:warning: symbol value '' invalid for AVB_BUF_SIZE > > 2024-08-08T14:36:43.9142940Z * > > 2024-08-08T14:36:43.9172380Z * Restart config... > > 2024-08-08T14:36:43.9257450Z * > > 2024-08-08T14:36:43.9288610Z * > > 2024-08-08T14:36:43.9332910Z * Security support > > 2024-08-08T14:36:43.9366750Z * > > 2024-08-08T14:36:43.9399770Z Build Android Verified Boot operations (AVB_VERIFY) [Y/n/?] y > > 2024-08-08T15:35:07.9280210Z ##[error]The Operation will be canceled. The next steps may not contain expected logs. > > > > And indeed, most of that is "normal" if we look at a current build for > > tools-only on macOS. We're being hit by the fact that the host CC isn't > > gcc and is llvm and https://github.com/llvm/llvm-project/issues/78778 > > applies, I believe. Now how do we work around this? Hum... > > That's an "interesting" bug... > > > If you go an change "# CONFIG_FOO is not set" to CONFIG_FOO=n in > > configs/tools-only_defconfig, I assume your build moves on? > > Yep, it does. OK, good. > > This is > > valid syntax and fixing a more generic issue we have on macOS today. > > I am adding a new patch to v9: "configs: use syntax CONFIG_FOO=n in > tools-only_defconfig". It means one extra step when syncing the > defconfigs though... It is just a simple sed command but perhaps you > have a better idea? This should be fine, there's already a number of configs I have to un-sync when I do a re-sync. > Thanks again for testing and for your help, You're welcome. Tom
On 8/7/24 22:44, Tom Rini wrote: > On Wed, Aug 07, 2024 at 07:11:44PM +0200, Jerome Forissier wrote: > >> This is a rework of a patch series by Maxim Uvarov: "net/lwip: add lwip >> library for the network stack" [1]. The goal is to introduce the lwIP TCP/IP >> stack [2] [3] as an alternative to the current implementation in net/, >> selectable with Kconfig, and ultimately keep only lwIP if possible. Some >> reasons for doing so are: >> - Make the support of HTTPS in the wget command easier. Javier T. and >> Raymond M. (CC'd) have some additional lwIP and Mbed TLS patches to do >> so. With that it becomes possible to fetch and launch a distro installer >> such as Debian etc. using a secure, authenticated connection directly >> from the U-Boot shell. Several use cases: >> * Authentication: prevent MITM attack (third party replacing the >> binary with a different one) >> * Confidentiality: prevent third parties from grabbing a copy of the >> image as it is being downloaded >> * Allow connection to servers that do not support plain HTTP anymore >> (this is becoming more and more common on the Internet these days) >> - Possibly benefit from additional features implemented in lwIP >> - Less code to maintain in U-Boot >> >> Prior to applying this series, the lwIP stack needs to be added as a >> Git subtree with the following command: >> >> $ git subtree add --squash --prefix lib/lwip/lwip https://git.savannah.gnu.org/git/lwip.git STABLE-2_2_0_RELEASE > > For v9, I think it would be good to do a CI run with NET_LWIP default > and seeing what fails from that too. There's a few problems still > leading to a lot of failures, in that case. Thanks. > See here: https://github.com/u-boot/u-boot/pull/635 I fixed a number of issues, see the commit descriptions. As for the remaining ones: - There is no http server in the CI so the wget test I added fails - tftp is super slow in QEMU (~145 KiB/s) which causes timeouts. This is for two reasons: (1) the tftp windowsize option is not supported in lwIP (while the legacy NET does support it) so the sender waits for an ACK before sending a new packet; and (2) the latency is very high due to memcpy() being incredibly slow in QEMU (I am mainly referring to the memcpy() call in tftp_write() in net/lwip/tftp.c). I measured ~20-60 ms to copy a few hundred bytes (!) and if CONFIG_USE_ARCH_MEMCPY is enabled it is slightly better but not much (~15 ms). Also it seems the QEMU networking emulation is fragmenting the UDP packets because with CONFIG_TFTP_BLOCKSIZE=1468 the tftp_write() function never receives 1468 bytes but only a few hundreds at a time (max 544 bytes). - The r2dplus_* tests fail for reasons I don't understand. Thanks,
On Fri, Aug 16, 2024 at 06:21:24PM +0200, Jerome Forissier wrote: > > > On 8/7/24 22:44, Tom Rini wrote: > > On Wed, Aug 07, 2024 at 07:11:44PM +0200, Jerome Forissier wrote: > > > >> This is a rework of a patch series by Maxim Uvarov: "net/lwip: add lwip > >> library for the network stack" [1]. The goal is to introduce the lwIP TCP/IP > >> stack [2] [3] as an alternative to the current implementation in net/, > >> selectable with Kconfig, and ultimately keep only lwIP if possible. Some > >> reasons for doing so are: > >> - Make the support of HTTPS in the wget command easier. Javier T. and > >> Raymond M. (CC'd) have some additional lwIP and Mbed TLS patches to do > >> so. With that it becomes possible to fetch and launch a distro installer > >> such as Debian etc. using a secure, authenticated connection directly > >> from the U-Boot shell. Several use cases: > >> * Authentication: prevent MITM attack (third party replacing the > >> binary with a different one) > >> * Confidentiality: prevent third parties from grabbing a copy of the > >> image as it is being downloaded > >> * Allow connection to servers that do not support plain HTTP anymore > >> (this is becoming more and more common on the Internet these days) > >> - Possibly benefit from additional features implemented in lwIP > >> - Less code to maintain in U-Boot > >> > >> Prior to applying this series, the lwIP stack needs to be added as a > >> Git subtree with the following command: > >> > >> $ git subtree add --squash --prefix lib/lwip/lwip https://git.savannah.gnu.org/git/lwip.git STABLE-2_2_0_RELEASE > > > > For v9, I think it would be good to do a CI run with NET_LWIP default > > and seeing what fails from that too. There's a few problems still > > leading to a lot of failures, in that case. Thanks. > > > > See here: https://github.com/u-boot/u-boot/pull/635 > > I fixed a number of issues, see the commit descriptions. As for the > remaining ones: > - There is no http server in the CI so the wget test I added fails Ah yes. So the test needs some enable-me type flag, like other tests that require external configuration. > - tftp is super slow in QEMU (~145 KiB/s) which causes timeouts. This is > for two reasons: (1) the tftp windowsize option is not supported in lwIP > (while the legacy NET does support it) so the sender waits for an ACK > before sending a new packet; and (2) the latency is very high due to > memcpy() being incredibly slow in QEMU (I am mainly referring to the > memcpy() call in tftp_write() in net/lwip/tftp.c). I measured ~20-60 ms > to copy a few hundred bytes (!) and if CONFIG_USE_ARCH_MEMCPY is enabled > it is slightly better but not much (~15 ms). Also it seems the QEMU > networking emulation is fragmenting the UDP packets because with > CONFIG_TFTP_BLOCKSIZE=1468 the tftp_write() function never receives > 1468 bytes but only a few hundreds at a time (max 544 bytes). I thought you fixed that? Or was that only for on real hardware? But also, some of those numbers sound unusually terrible to me. We can get some bad luck with the free instances, but, still. Are you sure there's nothing else going on? > - The r2dplus_* tests fail for reasons I don't understand. Consistently, too?
On 8/16/24 20:40, Tom Rini wrote: > On Fri, Aug 16, 2024 at 06:21:24PM +0200, Jerome Forissier wrote: >> >> >> On 8/7/24 22:44, Tom Rini wrote: >>> On Wed, Aug 07, 2024 at 07:11:44PM +0200, Jerome Forissier wrote: >>> >>>> This is a rework of a patch series by Maxim Uvarov: "net/lwip: add lwip >>>> library for the network stack" [1]. The goal is to introduce the lwIP TCP/IP >>>> stack [2] [3] as an alternative to the current implementation in net/, >>>> selectable with Kconfig, and ultimately keep only lwIP if possible. Some >>>> reasons for doing so are: >>>> - Make the support of HTTPS in the wget command easier. Javier T. and >>>> Raymond M. (CC'd) have some additional lwIP and Mbed TLS patches to do >>>> so. With that it becomes possible to fetch and launch a distro installer >>>> such as Debian etc. using a secure, authenticated connection directly >>>> from the U-Boot shell. Several use cases: >>>> * Authentication: prevent MITM attack (third party replacing the >>>> binary with a different one) >>>> * Confidentiality: prevent third parties from grabbing a copy of the >>>> image as it is being downloaded >>>> * Allow connection to servers that do not support plain HTTP anymore >>>> (this is becoming more and more common on the Internet these days) >>>> - Possibly benefit from additional features implemented in lwIP >>>> - Less code to maintain in U-Boot >>>> >>>> Prior to applying this series, the lwIP stack needs to be added as a >>>> Git subtree with the following command: >>>> >>>> $ git subtree add --squash --prefix lib/lwip/lwip https://git.savannah.gnu.org/git/lwip.git STABLE-2_2_0_RELEASE >>> >>> For v9, I think it would be good to do a CI run with NET_LWIP default >>> and seeing what fails from that too. There's a few problems still >>> leading to a lot of failures, in that case. Thanks. >>> >> >> See here: https://github.com/u-boot/u-boot/pull/635 >> >> I fixed a number of issues, see the commit descriptions. As for the >> remaining ones: >> - There is no http server in the CI so the wget test I added fails > > Ah yes. So the test needs some enable-me type flag, like other tests > that require external configuration. Can you please suggest how to do that? >> - tftp is super slow in QEMU (~145 KiB/s) which causes timeouts. This is >> for two reasons: (1) the tftp windowsize option is not supported in lwIP >> (while the legacy NET does support it) so the sender waits for an ACK >> before sending a new packet; and (2) the latency is very high due to >> memcpy() being incredibly slow in QEMU (I am mainly referring to the >> memcpy() call in tftp_write() in net/lwip/tftp.c). I measured ~20-60 ms >> to copy a few hundred bytes (!) and if CONFIG_USE_ARCH_MEMCPY is enabled >> it is slightly better but not much (~15 ms). Also it seems the QEMU >> networking emulation is fragmenting the UDP packets because with >> CONFIG_TFTP_BLOCKSIZE=1468 the tftp_write() function never receives >> 1468 bytes but only a few hundreds at a time (max 544 bytes). > > I thought you fixed that? Or was that only for on real hardware? It works OK on real hardware... > But also, some of those numbers sound unusually terrible to me. We can > get some bad luck with the free instances, but, still. Are you sure > there's nothing else going on? ...and yes that's absolutely terrible. In fact I found something curious. With the following patch applied to provide a memcpy() speed test: diff --git a/cmd/test.c b/cmd/test.c index b4c3eabf9f6..35b8d62af61 100644 --- a/cmd/test.c +++ b/cmd/test.c @@ -7,6 +7,8 @@ #include <command.h> #include <fs.h> #include <log.h> +#include <stdlib.h> +#include <time.h> #include <vsprintf.h> #define OP_INVALID 0 @@ -215,3 +217,49 @@ U_BOOT_CMD( "do nothing, successfully", NULL ); + +static int do_mtest(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + ulong t0, delta; + void *src, *dst; + long sz; + + if (argc < 2) { + printf("Usage: %s <size_in_bytes> [dst [src]]\n", argv[0]); + return 1; + } + sz = simple_strtol(argv[1], NULL, 10); + if (sz < 0) { + printf("%s: %s: invalid argument\n", argv[0], argv[1]); + return 1; + } + if (argc > 2) { + dst = (void *)hextoul(argv[2], NULL); + if (argc > 3) { + src = (void *)hextoul(argv[3], NULL); + } else { + src = malloc(sz); + } + } else { + dst = malloc(sz); + src = malloc(sz); + } + if (!src || !dst) { + printf("%s: out of memory or NULL address\n", argv[0]); + return 1; + } + printf("%ld bytes from 0x%p to 0x%p: ", sz, src, dst); + t0 = get_timer(0); + memcpy(dst, src, sz); + delta = get_timer(t0); + printf("%ld ms\n", delta); + + return 0; +} + +U_BOOT_CMD( + mtest, CONFIG_SYS_MAXARGS, 0, do_mtest, + "memcpy() speed test", + NULL +); I can see that there are ranges of memory that are very slow to *write* to (and the loadaddr used by the tftp test happens to fall in that range): $ make qemu_arm64_defconfig $ make -j$(nproc) CROSS_COMPILE="ccache aarch64-linux-gnu-" $ qemu-system-aarch64 -M virt -nographic -cpu cortex-a57 -bios u-boot.bin U-Boot 2024.10-rc1-00195-g35ce7016c9cb-dirty (Aug 19 2024 - 16:42:15 +0200) [...] => mtest Usage: mtest <size_in_bytes> [dst [src]] => mtest 1000 1000 bytes from 0x00000000466baed0 to 0x00000000466baae0: 0 ms => mtest 1000 0x2000000 0x00000000466baed0 1000 bytes from 0x00000000466baed0 to 0x0000000002000000: 22 ms => mtest 1000 0x00000000466baed0 0x2000000 1000 bytes from 0x0000000002000000 to 0x00000000466baed0: 0 ms => >> - The r2dplus_* tests fail for reasons I don't understand. > > Consistently, too? Yes. Thanks,
On Mon, Aug 19, 2024 at 04:53:51PM +0200, Jerome Forissier wrote: > > > On 8/16/24 20:40, Tom Rini wrote: > > On Fri, Aug 16, 2024 at 06:21:24PM +0200, Jerome Forissier wrote: > >> > >> > >> On 8/7/24 22:44, Tom Rini wrote: > >>> On Wed, Aug 07, 2024 at 07:11:44PM +0200, Jerome Forissier wrote: > >>> > >>>> This is a rework of a patch series by Maxim Uvarov: "net/lwip: add lwip > >>>> library for the network stack" [1]. The goal is to introduce the lwIP TCP/IP > >>>> stack [2] [3] as an alternative to the current implementation in net/, > >>>> selectable with Kconfig, and ultimately keep only lwIP if possible. Some > >>>> reasons for doing so are: > >>>> - Make the support of HTTPS in the wget command easier. Javier T. and > >>>> Raymond M. (CC'd) have some additional lwIP and Mbed TLS patches to do > >>>> so. With that it becomes possible to fetch and launch a distro installer > >>>> such as Debian etc. using a secure, authenticated connection directly > >>>> from the U-Boot shell. Several use cases: > >>>> * Authentication: prevent MITM attack (third party replacing the > >>>> binary with a different one) > >>>> * Confidentiality: prevent third parties from grabbing a copy of the > >>>> image as it is being downloaded > >>>> * Allow connection to servers that do not support plain HTTP anymore > >>>> (this is becoming more and more common on the Internet these days) > >>>> - Possibly benefit from additional features implemented in lwIP > >>>> - Less code to maintain in U-Boot > >>>> > >>>> Prior to applying this series, the lwIP stack needs to be added as a > >>>> Git subtree with the following command: > >>>> > >>>> $ git subtree add --squash --prefix lib/lwip/lwip https://git.savannah.gnu.org/git/lwip.git STABLE-2_2_0_RELEASE > >>> > >>> For v9, I think it would be good to do a CI run with NET_LWIP default > >>> and seeing what fails from that too. There's a few problems still > >>> leading to a lot of failures, in that case. Thanks. > >>> > >> > >> See here: https://github.com/u-boot/u-boot/pull/635 > >> > >> I fixed a number of issues, see the commit descriptions. As for the > >> remaining ones: > >> - There is no http server in the CI so the wget test I added fails > > > > Ah yes. So the test needs some enable-me type flag, like other tests > > that require external configuration. > > Can you please suggest how to do that? Well test/py/tests/test_net_boot.py for example. > >> - tftp is super slow in QEMU (~145 KiB/s) which causes timeouts. This is > >> for two reasons: (1) the tftp windowsize option is not supported in lwIP > >> (while the legacy NET does support it) so the sender waits for an ACK > >> before sending a new packet; and (2) the latency is very high due to > >> memcpy() being incredibly slow in QEMU (I am mainly referring to the > >> memcpy() call in tftp_write() in net/lwip/tftp.c). I measured ~20-60 ms > >> to copy a few hundred bytes (!) and if CONFIG_USE_ARCH_MEMCPY is enabled > >> it is slightly better but not much (~15 ms). Also it seems the QEMU > >> networking emulation is fragmenting the UDP packets because with > >> CONFIG_TFTP_BLOCKSIZE=1468 the tftp_write() function never receives > >> 1468 bytes but only a few hundreds at a time (max 544 bytes). > > > > I thought you fixed that? Or was that only for on real hardware? > > It works OK on real hardware... It should be fast enough here too. > > But also, some of those numbers sound unusually terrible to me. We can > > get some bad luck with the free instances, but, still. Are you sure > > there's nothing else going on? > > ...and yes that's absolutely terrible. In fact I found something curious. > With the following patch applied to provide a memcpy() speed test: > > diff --git a/cmd/test.c b/cmd/test.c > index b4c3eabf9f6..35b8d62af61 100644 > --- a/cmd/test.c > +++ b/cmd/test.c > @@ -7,6 +7,8 @@ > #include <command.h> > #include <fs.h> > #include <log.h> > +#include <stdlib.h> > +#include <time.h> > #include <vsprintf.h> > > #define OP_INVALID 0 > @@ -215,3 +217,49 @@ U_BOOT_CMD( > "do nothing, successfully", > NULL > ); > + > +static int do_mtest(struct cmd_tbl *cmdtp, int flag, int argc, > + char *const argv[]) > +{ > + ulong t0, delta; > + void *src, *dst; > + long sz; > + > + if (argc < 2) { > + printf("Usage: %s <size_in_bytes> [dst [src]]\n", argv[0]); > + return 1; > + } > + sz = simple_strtol(argv[1], NULL, 10); > + if (sz < 0) { > + printf("%s: %s: invalid argument\n", argv[0], argv[1]); > + return 1; > + } > + if (argc > 2) { > + dst = (void *)hextoul(argv[2], NULL); > + if (argc > 3) { > + src = (void *)hextoul(argv[3], NULL); > + } else { > + src = malloc(sz); > + } > + } else { > + dst = malloc(sz); > + src = malloc(sz); > + } > + if (!src || !dst) { > + printf("%s: out of memory or NULL address\n", argv[0]); > + return 1; > + } > + printf("%ld bytes from 0x%p to 0x%p: ", sz, src, dst); > + t0 = get_timer(0); > + memcpy(dst, src, sz); > + delta = get_timer(t0); > + printf("%ld ms\n", delta); > + > + return 0; > +} > + > +U_BOOT_CMD( > + mtest, CONFIG_SYS_MAXARGS, 0, do_mtest, > + "memcpy() speed test", > + NULL > +); > > I can see that there are ranges of memory that are very slow to *write* > to (and the loadaddr used by the tftp test happens to fall in that > range): > > $ make qemu_arm64_defconfig > $ make -j$(nproc) CROSS_COMPILE="ccache aarch64-linux-gnu-" > $ qemu-system-aarch64 -M virt -nographic -cpu cortex-a57 -bios u-boot.bin > > U-Boot 2024.10-rc1-00195-g35ce7016c9cb-dirty (Aug 19 2024 - 16:42:15 +0200) > [...] > => mtest > Usage: mtest <size_in_bytes> [dst [src]] > => mtest 1000 > 1000 bytes from 0x00000000466baed0 to 0x00000000466baae0: 0 ms > => mtest 1000 0x2000000 0x00000000466baed0 > 1000 bytes from 0x00000000466baed0 to 0x0000000002000000: 22 ms > => mtest 1000 0x00000000466baed0 0x2000000 > 1000 bytes from 0x0000000002000000 to 0x00000000466baed0: 0 ms > => This is all very strange. Can you investigate a bit please?
On 8/20/24 00:08, Tom Rini wrote: > On Mon, Aug 19, 2024 at 04:53:51PM +0200, Jerome Forissier wrote: >> >> >> On 8/16/24 20:40, Tom Rini wrote: >>> On Fri, Aug 16, 2024 at 06:21:24PM +0200, Jerome Forissier wrote: >>>> >>>> >>>> On 8/7/24 22:44, Tom Rini wrote: >>>>> On Wed, Aug 07, 2024 at 07:11:44PM +0200, Jerome Forissier wrote: >>>>> >>>>>> This is a rework of a patch series by Maxim Uvarov: "net/lwip: add lwip >>>>>> library for the network stack" [1]. The goal is to introduce the lwIP TCP/IP >>>>>> stack [2] [3] as an alternative to the current implementation in net/, >>>>>> selectable with Kconfig, and ultimately keep only lwIP if possible. Some >>>>>> reasons for doing so are: >>>>>> - Make the support of HTTPS in the wget command easier. Javier T. and >>>>>> Raymond M. (CC'd) have some additional lwIP and Mbed TLS patches to do >>>>>> so. With that it becomes possible to fetch and launch a distro installer >>>>>> such as Debian etc. using a secure, authenticated connection directly >>>>>> from the U-Boot shell. Several use cases: >>>>>> * Authentication: prevent MITM attack (third party replacing the >>>>>> binary with a different one) >>>>>> * Confidentiality: prevent third parties from grabbing a copy of the >>>>>> image as it is being downloaded >>>>>> * Allow connection to servers that do not support plain HTTP anymore >>>>>> (this is becoming more and more common on the Internet these days) >>>>>> - Possibly benefit from additional features implemented in lwIP >>>>>> - Less code to maintain in U-Boot >>>>>> >>>>>> Prior to applying this series, the lwIP stack needs to be added as a >>>>>> Git subtree with the following command: >>>>>> >>>>>> $ git subtree add --squash --prefix lib/lwip/lwip https://git.savannah.gnu.org/git/lwip.git STABLE-2_2_0_RELEASE >>>>> >>>>> For v9, I think it would be good to do a CI run with NET_LWIP default >>>>> and seeing what fails from that too. There's a few problems still >>>>> leading to a lot of failures, in that case. Thanks. >>>>> >>>> >>>> See here: https://github.com/u-boot/u-boot/pull/635 >>>> >>>> I fixed a number of issues, see the commit descriptions. As for the >>>> remaining ones: >>>> - There is no http server in the CI so the wget test I added fails >>> >>> Ah yes. So the test needs some enable-me type flag, like other tests >>> that require external configuration. >> >> Can you please suggest how to do that? > > Well test/py/tests/test_net_boot.py for example. Thanks. I'm adding a skip variable for v9. >>>> - tftp is super slow in QEMU (~145 KiB/s) which causes timeouts. This is >>>> for two reasons: (1) the tftp windowsize option is not supported in lwIP >>>> (while the legacy NET does support it) so the sender waits for an ACK >>>> before sending a new packet; and (2) the latency is very high due to >>>> memcpy() being incredibly slow in QEMU (I am mainly referring to the >>>> memcpy() call in tftp_write() in net/lwip/tftp.c). I measured ~20-60 ms >>>> to copy a few hundred bytes (!) and if CONFIG_USE_ARCH_MEMCPY is enabled >>>> it is slightly better but not much (~15 ms). Also it seems the QEMU >>>> networking emulation is fragmenting the UDP packets because with >>>> CONFIG_TFTP_BLOCKSIZE=1468 the tftp_write() function never receives >>>> 1468 bytes but only a few hundreds at a time (max 544 bytes). >>> >>> I thought you fixed that? Or was that only for on real hardware? >> >> It works OK on real hardware... > > It should be fast enough here too. > >>> But also, some of those numbers sound unusually terrible to me. We can >>> get some bad luck with the free instances, but, still. Are you sure >>> there's nothing else going on? >> >> ...and yes that's absolutely terrible. In fact I found something curious. >> With the following patch applied to provide a memcpy() speed test: >> >> diff --git a/cmd/test.c b/cmd/test.c >> index b4c3eabf9f6..35b8d62af61 100644 >> --- a/cmd/test.c >> +++ b/cmd/test.c >> @@ -7,6 +7,8 @@ >> #include <command.h> >> #include <fs.h> >> #include <log.h> >> +#include <stdlib.h> >> +#include <time.h> >> #include <vsprintf.h> >> >> #define OP_INVALID 0 >> @@ -215,3 +217,49 @@ U_BOOT_CMD( >> "do nothing, successfully", >> NULL >> ); >> + >> +static int do_mtest(struct cmd_tbl *cmdtp, int flag, int argc, >> + char *const argv[]) >> +{ >> + ulong t0, delta; >> + void *src, *dst; >> + long sz; >> + >> + if (argc < 2) { >> + printf("Usage: %s <size_in_bytes> [dst [src]]\n", argv[0]); >> + return 1; >> + } >> + sz = simple_strtol(argv[1], NULL, 10); >> + if (sz < 0) { >> + printf("%s: %s: invalid argument\n", argv[0], argv[1]); >> + return 1; >> + } >> + if (argc > 2) { >> + dst = (void *)hextoul(argv[2], NULL); >> + if (argc > 3) { >> + src = (void *)hextoul(argv[3], NULL); >> + } else { >> + src = malloc(sz); >> + } >> + } else { >> + dst = malloc(sz); >> + src = malloc(sz); >> + } >> + if (!src || !dst) { >> + printf("%s: out of memory or NULL address\n", argv[0]); >> + return 1; >> + } >> + printf("%ld bytes from 0x%p to 0x%p: ", sz, src, dst); >> + t0 = get_timer(0); >> + memcpy(dst, src, sz); >> + delta = get_timer(t0); >> + printf("%ld ms\n", delta); >> + >> + return 0; >> +} >> + >> +U_BOOT_CMD( >> + mtest, CONFIG_SYS_MAXARGS, 0, do_mtest, >> + "memcpy() speed test", >> + NULL >> +); >> >> I can see that there are ranges of memory that are very slow to *write* >> to (and the loadaddr used by the tftp test happens to fall in that >> range): >> >> $ make qemu_arm64_defconfig >> $ make -j$(nproc) CROSS_COMPILE="ccache aarch64-linux-gnu-" >> $ qemu-system-aarch64 -M virt -nographic -cpu cortex-a57 -bios u-boot.bin >> >> U-Boot 2024.10-rc1-00195-g35ce7016c9cb-dirty (Aug 19 2024 - 16:42:15 +0200) >> [...] >> => mtest >> Usage: mtest <size_in_bytes> [dst [src]] >> => mtest 1000 >> 1000 bytes from 0x00000000466baed0 to 0x00000000466baae0: 0 ms >> => mtest 1000 0x2000000 0x00000000466baed0 >> 1000 bytes from 0x00000000466baed0 to 0x0000000002000000: 22 ms >> => mtest 1000 0x00000000466baed0 0x2000000 >> 1000 bytes from 0x0000000002000000 to 0x00000000466baed0: 0 ms >> => > > This is all very strange. Can you investigate a bit please? OK, so this was actually a red herring :-/ For some reason I kept using address 2000000 for my tests and it happens to be memory-mapped I/O for the flash storage in QEMU. That's why it is so slow, but we don't care. The qemu_arm64 failure in CI was actually caused by DHCP not setting ${serverip} so TFTP would fail afterwards. This is fixed in v9. Fixed also are the r2dplus_i82557c and r2dplus_rtl8139 failures which were caused by calling free_pkt() with a length of zero, as well as the "dm_pci_phys_to_bus: invalid physical address" error on r2dplus_tulip (eth_init_rings() was called too late). I am now runnig CI again. It should hopefully be all green. Stay tuned for v9 ;) Thanks,