Gregory, thank you!<br/><br/>I am still trying to understand existing userland address envrionment in NuttX kernel mode, I saw the following regions defined in "arch/Kconfig":&nbsp; <br/><br/>config ARCH_TEXT_VBASE<br/>config ARCH_DATA_VBASE<br/>config ARCH_HEAP_VBASE<br/>config ARCH_SHM_VBASE<br/>config ARCH_KMAP_VBASE<br/>config ARCH_STACK_VBASE<br/>config ARCH_PGPOOL_VBASE<br/><br/>I can understand most of above, except the "ARCH_KMAP_VBASE" thing. But it doesn't look like relating to UIO though. <br/><br/>Regards,<br/>yf<br/> <br/>Original<br/><br/>From:"Gregory Nutt"&lt; spudan...@gmail.com &gt;;<br/>Date:2024/3/29 10:37<br/>To:"dev"&lt; dev@nuttx.apache.org &gt;;<br/>Subject:Re: userspace IO support<br/><br/><br/>On 3/28/2024 8:23 PM, Gregory Nutt wrote:<br/>&gt; ...<br/>&gt;<br/>&gt; On all platforms that I am aware of, the virtual address of the <br/>&gt; framebuffer is just a configurable constant.&nbsp; This makes sense if the <br/>&gt; framebuffer is in a fixed virtual address in every process. The kernel <br/>&gt; can manage the virtual address space anyway that it likes.&nbsp; A fixed <br/>&gt; virtual position for the framebuffer is a reasonable decision.&nbsp;&nbsp; More <br/>&gt; logic is need to manage the virtual address space to handle things <br/>&gt; like pthread stacks, heap, shared libraries, framebuffers, etc.&nbsp; The <br/>&gt; logic and virtual memory layout in Linux is quite complex even though <br/>&gt; all of these are at fixed virtual addresses in every process.<br/><br/>pthread stacks have some particular complexities.&nbsp; First, their virtual <br/>address be aligned to a large value.&nbsp; Old versions of Linux that I <br/>worked with in the past aligned the pthread virtual addresses to 2 <br/>MByte.&nbsp; This permits TLS to work by simply ANDing an address (vs <br/>performing a system call).<br/><br/>Right now, pthread stacks are malloc'ed and, as a result, cannot exploit <br/>this fast TLS access.<br/><br/>Old versions of Linux supported an array of pthread stacks (hence, <br/>limiting the number of pthreads to something like 200). Each stack was <br/>2MByte of virtual address.&nbsp; All fixed, constant virtual addresses.<br/><br/>