On Sat, Dec 17, 2022 at 11:48 AM Richard Henderson <
richard.hender...@linaro.org> wrote:

> Make bsd-user match linux-user in not marking host pages
> as reserved.  This isn't especially effective anyway, as
> it doesn't take into account any heap memory that qemu
> may allocate after startup.
>
> Cc: Warner Losh <i...@bsdimp.com>
> Signed-off-by: Richard Henderson <richard.hender...@linaro.org>
> ---
>
> I started to simply fix up this code to match my user-only interval-tree
> patch set, as L1_MAP_ADDR_SPACE_BITS gets removed from translate-all.c,
> but then I decided to remove it all.
>

I think this is fine. We already do a translation for addresses so marking
this as 'reserved'
doesn't help that much. We need to map memory into a contiguous
guess-address-space,
but the underlying host memory needn't be contiguous at all.

I've not yet tested this, but would like to. What's your timeline on
getting this done?

Warner


> r~
>
> ---
>  accel/tcg/translate-all.c | 65 ---------------------------------------
>  1 file changed, 65 deletions(-)
>
> diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
> index b964ea44d7..48e9d70b4e 100644
> --- a/accel/tcg/translate-all.c
> +++ b/accel/tcg/translate-all.c
> @@ -354,71 +354,6 @@ void page_init(void)
>  {
>      page_size_init();
>      page_table_config_init();
> -
> -#if defined(CONFIG_BSD) && defined(CONFIG_USER_ONLY)
> -    {
> -#ifdef HAVE_KINFO_GETVMMAP
> -        struct kinfo_vmentry *freep;
> -        int i, cnt;
> -
> -        freep = kinfo_getvmmap(getpid(), &cnt);
> -        if (freep) {
> -            mmap_lock();
> -            for (i = 0; i < cnt; i++) {
> -                unsigned long startaddr, endaddr;
> -
> -                startaddr = freep[i].kve_start;
> -                endaddr = freep[i].kve_end;
> -                if (h2g_valid(startaddr)) {
> -                    startaddr = h2g(startaddr) & TARGET_PAGE_MASK;
> -
> -                    if (h2g_valid(endaddr)) {
> -                        endaddr = h2g(endaddr);
> -                        page_set_flags(startaddr, endaddr, PAGE_RESERVED);
> -                    } else {
> -#if TARGET_ABI_BITS <= L1_MAP_ADDR_SPACE_BITS
> -                        endaddr = ~0ul;
> -                        page_set_flags(startaddr, endaddr, PAGE_RESERVED);
> -#endif
> -                    }
> -                }
> -            }
> -            free(freep);
> -            mmap_unlock();
> -        }
> -#else
> -        FILE *f;
> -
> -        last_brk = (unsigned long)sbrk(0);
> -
> -        f = fopen("/compat/linux/proc/self/maps", "r");
> -        if (f) {
> -            mmap_lock();
> -
> -            do {
> -                unsigned long startaddr, endaddr;
> -                int n;
> -
> -                n = fscanf(f, "%lx-%lx %*[^\n]\n", &startaddr, &endaddr);
> -
> -                if (n == 2 && h2g_valid(startaddr)) {
> -                    startaddr = h2g(startaddr) & TARGET_PAGE_MASK;
> -
> -                    if (h2g_valid(endaddr)) {
> -                        endaddr = h2g(endaddr);
> -                    } else {
> -                        endaddr = ~0ul;
> -                    }
> -                    page_set_flags(startaddr, endaddr, PAGE_RESERVED);
> -                }
> -            } while (!feof(f));
> -
> -            fclose(f);
> -            mmap_unlock();
> -        }
> -#endif
> -    }
> -#endif
>  }
>
>  PageDesc *page_find_alloc(tb_page_addr_t index, bool alloc)
> --
> 2.34.1
>
>

Reply via email to