X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Flightrec%2Fmem.c;h=b5caa78366b29705840cefdf1d98781d6a6ca176;hb=24dbf9837114da33ef34234b099d658bbf95107a;hp=c0186da16ce96206e6da7f48524941816440199a;hpb=14a530af588848d3606e1f6ac3d18e3eb1b5ca3c;p=pcsx_rearmed.git diff --git a/libpcsxcore/lightrec/mem.c b/libpcsxcore/lightrec/mem.c index c0186da1..b5caa783 100644 --- a/libpcsxcore/lightrec/mem.c +++ b/libpcsxcore/lightrec/mem.c @@ -3,7 +3,9 @@ * Copyright (C) 2022 Paul Cercueil */ +#ifndef _GNU_SOURCE #define _GNU_SOURCE +#endif #include #include #include @@ -31,8 +33,6 @@ #define MFD_HUGETLB 0x0004 #endif -void *code_buffer; - static const uintptr_t supported_io_bases[] = { 0x0, 0x10000000, @@ -55,8 +55,12 @@ static void * mmap_huge(void *addr, size_t length, int prot, int flags, if (map == MAP_FAILED) { map = mmap(addr, length, prot, flags, fd, offset); - if (map != MAP_FAILED) + if (map != MAP_FAILED) { printf("Regular mmap to address 0x%lx succeeded\n", (uintptr_t) addr); +#ifdef MADV_HUGEPAGE + madvise(map, length, MADV_HUGEPAGE); +#endif + } } return map; @@ -93,7 +97,7 @@ static int lightrec_mmap_ram(bool hugetlb) for (j = 0; j < 4; j++) { map = mmap_huge((void *)(base + j * 0x200000), 0x200000, PROT_READ | PROT_WRITE, - MAP_SHARED | MAP_FIXED, memfd, 0); + MAP_SHARED | MAP_FIXED_NOREPLACE, memfd, 0); if (map == MAP_FAILED) break; } @@ -142,7 +146,7 @@ int lightrec_init_mmap(void) map = mmap((void *)(base + 0x1f000000), 0x10000, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_FIXED_NOREPLACE | MAP_ANONYMOUS, 0, 0); + MAP_PRIVATE | MAP_FIXED_NOREPLACE | MAP_ANONYMOUS, -1, 0); if (map == MAP_FAILED) { err = -EINVAL; fprintf(stderr, "Unable to mmap parallel port\n"); @@ -153,7 +157,7 @@ int lightrec_init_mmap(void) map = mmap_huge((void *)(base + 0x1fc00000), 0x200000, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_FIXED_NOREPLACE | MAP_ANONYMOUS, 0, 0); + MAP_PRIVATE | MAP_FIXED_NOREPLACE | MAP_ANONYMOUS, -1, 0); if (map == MAP_FAILED) { err = -EINVAL; fprintf(stderr, "Unable to mmap BIOS\n"); @@ -176,7 +180,7 @@ int lightrec_init_mmap(void) map = mmap_huge((void *)(base + 0x800000), CODE_BUFFER_SIZE, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED_NOREPLACE | MAP_ANONYMOUS, - 0, 0); + -1, 0); if (map == MAP_FAILED) { err = -EINVAL; fprintf(stderr, "Unable to mmap code buffer\n");