Hello, Applied, thanks!
Samuel (trailing spaces are really just for codestyle, it's only important when submitting code to upstream) Mike Kelly, le dim. 30 août 2026 22:35:36 +0100, a ecrit: > The previous solution (Patch1) for running Hurd on i440fx Qemu machine > was: > > https://lists.gnu.org/archive/html/bug-hurd/2026-05/msg00000.html > > Patch1, whilst functional, introduced an unnecessary overhead for > machines using a disc controller with 64 bit PCI bus address > capability. This new patch (Patch2) obsoletes Patch1 although there is > no problem with them both being installed simultaneously. In such a > case the new code in Patch2 simply won't be triggered as there would > never be a need to 'bounce'. > > Patch2 copies the relevant code from the NetBSD x86 arch into the rump > dma-map implementation. A pair of DMA tags are created with the main > PCI bus and are then available to be tagged to each PCI device as it > is discovered. There is one for 32 bit DMA and one for 64 bit. When > the i440fx disk controller is discovered it specifies the 32 bit tag > for use with any DMA operation. The tag maintains a bounce threshold > which if exceeded by any physical memory address triggers use of a > bounce buffer (which is within the 32 bit space) to effect the DMA > transfer. This is all handled by the device meaning that there is no > requirement to allocate user buffers in particular memory regions. > > Patch2 means that use of the q35 machine behaves as before Patch1 with > no performance penalty. Additionally, Patch2 means that there is no > performance loss when an i440fx user buffer is used that is already > within the 32 bit physical address space. > > The only part of Patch2 that is architecture specific relates to the > memory synchronisation code within the NetBSD x86 arch. There are a > few functions implemented in assembly which I've copied into an arch > specific directory within the rump source tree. The function > bus_dmamap_sync() is also arch specific but I have not moved that out > into a seperate arch area. I can if required but wanted to minimise > the patch complexity. I have at least made the code inclusion > conditional on the arch via #ifdef and an #error in the event of some > other arch being compiled. > > I get lots of trailing space warns when merging Patch2 into git. I've > used quilt to generate the patch, committed that to git and then used > git format-patch. I don't know if these space warnings are an issue or > not. > > I have tested this on hurd-amd64 and hurd-i386 (with PAE). > > Mike. > -- Samuel "...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and the Ugly)." (By Matt Welsh)
