1*eb8d395fSMaíra Canal // SPDX-License-Identifier: GPL-2.0+ 2*eb8d395fSMaíra Canal /* Copyright (C) 2024 Raspberry Pi */ 3*eb8d395fSMaíra Canal 4*eb8d395fSMaíra Canal #include <linux/fs.h> 5*eb8d395fSMaíra Canal #include <linux/mount.h> 6*eb8d395fSMaíra Canal 7*eb8d395fSMaíra Canal #include "v3d_drv.h" 8*eb8d395fSMaíra Canal 9*eb8d395fSMaíra Canal void v3d_gemfs_init(struct v3d_dev *v3d) 10*eb8d395fSMaíra Canal { 11*eb8d395fSMaíra Canal char huge_opt[] = "huge=within_size"; 12*eb8d395fSMaíra Canal struct file_system_type *type; 13*eb8d395fSMaíra Canal struct vfsmount *gemfs; 14*eb8d395fSMaíra Canal 15*eb8d395fSMaíra Canal /* 16*eb8d395fSMaíra Canal * By creating our own shmemfs mountpoint, we can pass in 17*eb8d395fSMaíra Canal * mount flags that better match our usecase. However, we 18*eb8d395fSMaíra Canal * only do so on platforms which benefit from it. 19*eb8d395fSMaíra Canal */ 20*eb8d395fSMaíra Canal if (!IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) 21*eb8d395fSMaíra Canal goto err; 22*eb8d395fSMaíra Canal 23*eb8d395fSMaíra Canal type = get_fs_type("tmpfs"); 24*eb8d395fSMaíra Canal if (!type) 25*eb8d395fSMaíra Canal goto err; 26*eb8d395fSMaíra Canal 27*eb8d395fSMaíra Canal gemfs = vfs_kern_mount(type, SB_KERNMOUNT, type->name, huge_opt); 28*eb8d395fSMaíra Canal if (IS_ERR(gemfs)) 29*eb8d395fSMaíra Canal goto err; 30*eb8d395fSMaíra Canal 31*eb8d395fSMaíra Canal v3d->gemfs = gemfs; 32*eb8d395fSMaíra Canal drm_info(&v3d->drm, "Using Transparent Hugepages\n"); 33*eb8d395fSMaíra Canal 34*eb8d395fSMaíra Canal return; 35*eb8d395fSMaíra Canal 36*eb8d395fSMaíra Canal err: 37*eb8d395fSMaíra Canal v3d->gemfs = NULL; 38*eb8d395fSMaíra Canal drm_notice(&v3d->drm, 39*eb8d395fSMaíra Canal "Transparent Hugepage support is recommended for optimal performance on this platform!\n"); 40*eb8d395fSMaíra Canal } 41*eb8d395fSMaíra Canal 42*eb8d395fSMaíra Canal void v3d_gemfs_fini(struct v3d_dev *v3d) 43*eb8d395fSMaíra Canal { 44*eb8d395fSMaíra Canal if (v3d->gemfs) 45*eb8d395fSMaíra Canal kern_unmount(v3d->gemfs); 46*eb8d395fSMaíra Canal } 47