diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 23cbd27ce1..1f637bebd7 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1864,6 +1864,7 @@ virFileFindResourceFull; virFileFlock; virFileFreeACLs; virFileGetACLs; +virFileGetDefaultHugepage; virFileGetHugepageSize; virFileGetMountReverseSubtree; virFileGetMountSubtree; diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 42122dcd97..41ce0a978d 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -1914,16 +1914,12 @@ qemuGetDomainDefaultHugepath(const virDomainDef *def, virHugeTLBFSPtr hugetlbfs, size_t nhugetlbfs) { - size_t i; + virHugeTLBFSPtr p; - for (i = 0; i < nhugetlbfs; i++) - if (hugetlbfs[i].deflt) - break; + if (!(p = virFileGetDefaultHugepage(hugetlbfs, nhugetlbfs))) + p = &hugetlbfs[0]; - if (i == nhugetlbfs) - i = 0; - - return qemuGetDomainHugepagePath(def, &hugetlbfs[i]); + return qemuGetDomainHugepagePath(def, p); } diff --git a/src/util/virfile.c b/src/util/virfile.c index ec8d85929c..9f1a965acb 100644 --- a/src/util/virfile.c +++ b/src/util/virfile.c @@ -3735,6 +3735,31 @@ virFileFindHugeTLBFS(virHugeTLBFSPtr *ret_fs ATTRIBUTE_UNUSED, } #endif /* defined __linux__ */ +/** + * virFileGetDefaultHugepage: + * @fs: array of hugetlbfs mount points + * @nfs: number of items in @fs + * + * In the passed array of hugetlbfs mount points @fs find the + * default one. It's the one which has no '-o pagesize'. + * + * Returns: default hugepage, or + * NULL if none found + */ +virHugeTLBFSPtr +virFileGetDefaultHugepage(virHugeTLBFSPtr fs, + size_t nfs) +{ + size_t i; + + for (i = 0; i < nfs; i++) { + if (fs[i].deflt) + return &fs[i]; + } + + return NULL; +} + int virFileIsSharedFS(const char *path) { return virFileIsSharedFSType(path, diff --git a/src/util/virfile.h b/src/util/virfile.h index 3dedb7666a..df35a32bcc 100644 --- a/src/util/virfile.h +++ b/src/util/virfile.h @@ -334,6 +334,9 @@ int virFileGetHugepageSize(const char *path, int virFileFindHugeTLBFS(virHugeTLBFSPtr *ret_fs, size_t *ret_nfs); +virHugeTLBFSPtr virFileGetDefaultHugepage(virHugeTLBFSPtr fs, + size_t nfs); + int virFileSetupDev(const char *path, const char *mount_options);