hugetlb: fix warnings in cleanup()
PATCH v2 1/1 hugetlb: fix warnings in cleanup()
Adding two functions [save|restore]_nr_hugepages() to the hugetlb library, and meanwhile initialize the 'orig_hugepages' to '-1', then we can make use of that to avoid those warnings on a system without huge page supporting.
WARNING:
safe_file_ops.c:283: WARN: Failed to open FILE '/proc/sys/vm/nr_hugepages' for writing at mem.c:853: ENOENT
Also, including "mem.h" in hugetlb lib to get rid of compile warnings.
--- testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c | 7 ++----- testcases/kernel/mem/hugetlb/hugemmap/hugemmap02.c | 7 ++----- testcases/kernel/mem/hugetlb/hugemmap/hugemmap04.c | 7 ++----- testcases/kernel/mem/hugetlb/hugemmap/hugemmap05.c | 3 +-- testcases/kernel/mem/hugetlb/hugemmap/hugemmap06.c | 6 ++---- testcases/kernel/mem/hugetlb/hugeshmat/hugeshmat01.c | 7 ++----- testcases/kernel/mem/hugetlb/hugeshmat/hugeshmat02.c | 7 ++----- testcases/kernel/mem/hugetlb/hugeshmat/hugeshmat03.c | 7 ++----- testcases/kernel/mem/hugetlb/hugeshmat/hugeshmat04.c | 6 ++---- testcases/kernel/mem/hugetlb/hugeshmat/hugeshmat05.c | 6 ++---- testcases/kernel/mem/hugetlb/hugeshmctl/hugeshmctl01.c | 6 ++---- testcases/kernel/mem/hugetlb/hugeshmctl/hugeshmctl02.c | 6 ++---- testcases/kernel/mem/hugetlb/hugeshmctl/hugeshmctl03.c | 6 ++---- testcases/kernel/mem/hugetlb/hugeshmdt/hugeshmdt01.c | 6 ++---- testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget01.c | 6 ++---- testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget02.c | 6 ++---- testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget03.c | 6 ++---- testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget05.c | 6 ++---- testcases/kernel/mem/hugetlb/lib/Makefile | 1 + testcases/kernel/mem/hugetlb/lib/hugetlb.c | 14 ++++++++++++++ testcases/kernel/mem/hugetlb/lib/hugetlb.h | 8 +++++--- 21 files changed, 55 insertions(+), 79 deletions(-)
testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c +2 -5
@@ -37,8 +37,6 @@#include <sys/mount.h> #include <limits.h> #include <sys/param.h> - -#include "mem.h" #include "hugetlb.h" static struct tst_option options[] = {
@@ -91,8 +89,7 @@ static void test_hugemmap(void)void setup (void ) { -check_hugepage (); - orig_hugepages =get_sys_tune ("nr_hugepages" ); +save_nr_hugepages ();if (!Hopt) Hopt =tst_get_tmpdir ();
@@ -108,7 +105,7 @@ void setup(void)void cleanup (void ) {unlink (TEMPFILE ); -set_sys_tune ("nr_hugepages" , orig_hugepages,0 ); +restore_nr_hugepages ();umount (Hopt); }
testcases/kernel/mem/hugetlb/hugemmap/hugemmap02.c +2 -5
@@ -39,8 +39,6 @@#include <sys/mount.h> #include <limits.h> #include <sys/param.h> - -#include "mem.h" #include "hugetlb.h" #define LOW_ADDR 0x80000000
@@ -137,8 +135,7 @@ static void test_hugemmap(void)static void setup (void ) { -check_hugepage (); - orig_hugepages =get_sys_tune ("nr_hugepages" ); +save_nr_hugepages ();if (!Hopt) Hopt =tst_get_tmpdir ();
@@ -154,7 +151,7 @@ static void setup(void)static void cleanup (void ) {unlink (TEMPFILE ); -set_sys_tune ("nr_hugepages" , orig_hugepages,0 ); +restore_nr_hugepages ();umount (Hopt); }
testcases/kernel/mem/hugetlb/hugemmap/hugemmap04.c +2 -5
@@ -38,8 +38,6 @@#include <stdio.h> #include <limits.h> #include <sys/param.h> - -#include "mem.h" #include "hugetlb.h" static struct tst_option options[] = {
@@ -108,8 +106,7 @@ static void test_hugemmap(void)void setup (void ) { -check_hugepage (); - orig_hugepages =get_sys_tune ("nr_hugepages" ); +save_nr_hugepages ();if (!Hopt) Hopt =tst_get_tmpdir ();
@@ -125,7 +122,7 @@ void setup(void)void cleanup (void ) {unlink (TEMPFILE ); -set_sys_tune ("nr_hugepages" , orig_hugepages,0 ); +restore_nr_hugepages ();umount (Hopt); }
testcases/kernel/mem/hugetlb/hugemmap/hugemmap05.c +1 -2
@@ -29,7 +29,6 @@#include <string.h> #include <unistd.h> #include <stdio.h> -#include "mem.h" #include "hugetlb.h" #include "tst_safe_sysv_ipc.h" #include "tst_test.h"
@@ -206,8 +205,8 @@ static void cleanup(void)static void setup (void ) { - hugepagesize =SAFE_READ_MEMINFO ("Hugepagesize:" ) *1024 ;check_hugepage (); + hugepagesize =SAFE_READ_MEMINFO ("Hugepagesize:" ) *1024 ;init_sys_sz_paths ();if (opt_sysfs) {
testcases/kernel/mem/hugetlb/hugemmap/hugemmap06.c +2 -4
@@ -35,7 +35,6 @@#define _GNU_SOURCE#include <pthread.h> #include <stdio.h> -#include "mem.h" #include "hugetlb.h" #include "lapi/mmap.h"
@@ -52,10 +51,9 @@ struct mp {static void setup (void ) { -check_hugepage (); +save_nr_hugepages (); hpage_size =SAFE_READ_MEMINFO ("Hugepagesize:" ) *1024 ; - orig_hugepages =get_sys_tune ("nr_hugepages" ); hugepages = (ARSZ +1 ) *LOOP ;
@@ -67,7 +65,7 @@ static void setup(void)static void cleanup (void ) { -set_sys_tune ("nr_hugepages" , orig_hugepages,0 ); +restore_nr_hugepages (); }static void *thr (void *arg)
testcases/kernel/mem/hugetlb/hugeshmat/hugeshmat01.c +2 -5
@@ -39,8 +39,6 @@#include <limits.h> #include "hugetlb.h" -#include "mem.h" -#include "hugetlb.h" #define CASE0 10/* values to write into the shared */ #define CASE1 20/* memory location. */
@@ -169,11 +167,10 @@ static void setup(void) {long hpage_size; -check_hugepage (); +save_nr_hugepages ();if (nr_opt) hugepages =SAFE_STRTOL (nr_opt,0 ,LONG_MAX ); - orig_hugepages =get_sys_tune ("nr_hugepages" );set_sys_tune ("nr_hugepages" , hugepages,1 ); hpage_size =SAFE_READ_MEMINFO ("Hugepagesize:" ) *1024 ;
@@ -190,7 +187,7 @@ static void setup(void)static void cleanup (void ) {rm_shm (shm_id_1); -set_sys_tune ("nr_hugepages" , orig_hugepages,0 ); +restore_nr_hugepages (); }static struct tst_test test = {
testcases/kernel/mem/hugetlb/hugeshmat/hugeshmat02.c +2 -5
@@ -37,8 +37,6 @@#include <pwd.h> #include <limits.h> #include "hugetlb.h" -#include "mem.h" -#include "hugetlb.h" #if __WORDSIZE ==64 #define NADDR 0x10000000eef/* a 64bit non alligned address value */
@@ -93,11 +91,10 @@ void setup(void) {long hpage_size; -check_hugepage (); +save_nr_hugepages ();if (nr_opt) hugepages =SAFE_STRTOL (nr_opt,0 ,LONG_MAX ); - orig_hugepages =get_sys_tune ("nr_hugepages" );set_sys_tune ("nr_hugepages" , hugepages,1 ); hpage_size =SAFE_READ_MEMINFO ("Hugepagesize:" ) *1024 ;
@@ -116,7 +113,7 @@ void setup(void)void cleanup (void ) {rm_shm (shm_id_2); -set_sys_tune ("nr_hugepages" , orig_hugepages,0 ); +restore_nr_hugepages (); }static struct tst_test test = {
testcases/kernel/mem/hugetlb/hugeshmat/hugeshmat03.c +2 -5
@@ -43,8 +43,6 @@#include <limits.h> #include "hugetlb.h" -#include "mem.h" -#include "hugetlb.h" static size_t shm_size;static int shm_id_1 =-1 ;
@@ -89,11 +87,10 @@ static void setup(void) {long hpage_size; -check_hugepage (); +save_nr_hugepages ();if (nr_opt) hugepages =SAFE_STRTOL (nr_opt,0 ,LONG_MAX ); - orig_hugepages =get_sys_tune ("nr_hugepages" );set_sys_tune ("nr_hugepages" , hugepages,1 ); hpage_size =SAFE_READ_MEMINFO ("Hugepagesize:" ) *1024 ;
@@ -111,7 +108,7 @@ static void setup(void)static void cleanup (void ) {rm_shm (shm_id_1); -set_sys_tune ("nr_hugepages" , orig_hugepages,0 ); +restore_nr_hugepages (); }static struct tst_test test = {
testcases/kernel/mem/hugetlb/hugeshmat/hugeshmat04.c +2 -4
@@ -30,7 +30,6 @@* test must be run at root */ -#include "mem.h" #include "hugetlb.h" #define SIZE (1024 * 1024 * 1024)
@@ -86,7 +85,7 @@ static void setup(void) {long mem_total, hpage_size; -check_hugepage (); +save_nr_hugepages (); mem_total =SAFE_READ_MEMINFO ("MemTotal:" );SAFE_FILE_SCANF (PATH_SHMMAX ,"%ld" , &orig_shmmax);SAFE_FILE_PRINTF (PATH_SHMMAX ,"%ld" , (long )SIZE );
@@ -98,7 +97,6 @@ static void setup(void)if (new_shmmax <SIZE )tst_brk (TCONF ,"shmmax too low, have: %ld" , new_shmmax); - orig_hugepages =get_sys_tune ("nr_hugepages" ); hpage_size =SAFE_READ_MEMINFO ("Hugepagesize:" ) *1024 ; hugepages = (orig_hugepages * hpage_size +SIZE ) / hpage_size;
@@ -107,7 +105,7 @@ static void setup(void)static void cleanup (void ) { -set_sys_tune ("nr_hugepages" , orig_hugepages,0 ); +restore_nr_hugepages ();SAFE_FILE_PRINTF (PATH_SHMMAX ,"%ld" , orig_shmmax); }
testcases/kernel/mem/hugetlb/hugeshmat/hugeshmat05.c +2 -4
@@ -36,7 +36,6 @@* */ -#include "mem.h" #include "hugetlb.h" static long page_size;
@@ -47,8 +46,7 @@ static long hugepages;void setup (void ) { -check_hugepage (); - orig_hugepages =get_sys_tune ("nr_hugepages" ); +save_nr_hugepages (); page_size =getpagesize (); hpage_size =SAFE_READ_MEMINFO ("Hugepagesize:" ) *1024 ;
@@ -58,7 +56,7 @@ void setup(void)void cleanup (void ) { -set_sys_tune ("nr_hugepages" , orig_hugepages,0 ); +restore_nr_hugepages (); }void shm_test (int size)
testcases/kernel/mem/hugetlb/hugeshmctl/hugeshmctl01.c +2 -4
@@ -42,7 +42,6 @@*/ #include <limits.h> -#include "mem.h" #include "hugetlb.h" #define FIRST 0
@@ -360,11 +359,10 @@ void setup(void) {long hpage_size; -check_hugepage (); +save_nr_hugepages ();if (nr_opt) hugepages =SAFE_STRTOL (nr_opt,0 ,LONG_MAX ); - orig_hugepages =get_sys_tune ("nr_hugepages" );set_sys_tune ("nr_hugepages" , hugepages,1 ); hpage_size =SAFE_READ_MEMINFO ("Hugepagesize:" ) *1024 ;
@@ -376,7 +374,7 @@ void setup(void)void cleanup (void ) {rm_shm (shm_id_1); -set_sys_tune ("nr_hugepages" , orig_hugepages,0 ); +restore_nr_hugepages (); }static struct tst_test test = {
testcases/kernel/mem/hugetlb/hugeshmctl/hugeshmctl02.c +2 -4
@@ -35,7 +35,6 @@#include <pwd.h> #include <limits.h> -#include "mem.h" #include "hugetlb.h" static size_t shm_size;
@@ -93,11 +92,10 @@ static void setup(void) {long hpage_size; -check_hugepage (); +save_nr_hugepages ();if (nr_opt) hugepages =SAFE_STRTOL (nr_opt,0 ,LONG_MAX ); - orig_hugepages =get_sys_tune ("nr_hugepages" );set_sys_tune ("nr_hugepages" , hugepages,1 ); hpage_size =SAFE_READ_MEMINFO ("Hugepagesize:" ) *1024 ;
@@ -121,7 +119,7 @@ static void cleanup(void) {rm_shm (shm_id_1);rm_shm (shm_id_2); -set_sys_tune ("nr_hugepages" , orig_hugepages,0 ); +restore_nr_hugepages (); }static struct tst_test test = {
testcases/kernel/mem/hugetlb/hugeshmctl/hugeshmctl03.c +2 -4
@@ -45,7 +45,6 @@#include <sys/types.h> #include <sys/wait.h> #include <limits.h> -#include "mem.h" #include "hugetlb.h" static size_t shm_size;
@@ -118,11 +117,10 @@ void setup(void) {long hpage_size; -check_hugepage (); +save_nr_hugepages ();if (nr_opt) hugepages =SAFE_STRTOL (nr_opt,0 ,LONG_MAX ); - orig_hugepages =get_sys_tune ("nr_hugepages" );set_sys_tune ("nr_hugepages" , hugepages,1 ); hpage_size =SAFE_READ_MEMINFO ("Hugepagesize:" ) *1024 ;
@@ -141,7 +139,7 @@ void setup(void)void cleanup (void ) {rm_shm (shm_id_1); -set_sys_tune ("nr_hugepages" , orig_hugepages,0 ); +restore_nr_hugepages (); }static struct tst_test test = {
testcases/kernel/mem/hugetlb/hugeshmdt/hugeshmdt01.c +2 -4
@@ -42,7 +42,6 @@#include <setjmp.h> #include <limits.h> #include "hugetlb.h" -#include "mem.h" #include "hugetlb.h" static size_t shm_size;
@@ -133,11 +132,10 @@ void setup(void) {long hpage_size; -check_hugepage (); +save_nr_hugepages ();if (nr_opt) hugepages =SAFE_STRTOL (nr_opt,0 ,LONG_MAX ); - orig_hugepages =get_sys_tune ("nr_hugepages" );set_sys_tune ("nr_hugepages" , hugepages,1 ); hpage_size =SAFE_READ_MEMINFO ("Hugepagesize:" ) *1024 ;
@@ -163,7 +161,7 @@ void setup(void)void cleanup (void ) {rm_shm (shm_id_1); -set_sys_tune ("nr_hugepages" , orig_hugepages,0 ); +restore_nr_hugepages (); }static struct tst_test test = {
testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget01.c +2 -4
@@ -25,7 +25,6 @@#include <limits.h> #include "hugetlb.h" -#include "mem.h" #include "hugetlb.h" static size_t shm_size;
@@ -68,11 +67,10 @@ static void setup(void) {long hpage_size; -check_hugepage (); +save_nr_hugepages ();if (nr_opt) hugepages =SAFE_STRTOL (nr_opt,0 ,LONG_MAX ); - orig_hugepages =get_sys_tune ("nr_hugepages" );set_sys_tune ("nr_hugepages" , hugepages,1 ); hpage_size =SAFE_READ_MEMINFO ("Hugepagesize:" ) *1024 ;
@@ -89,7 +87,7 @@ static void setup(void)static void cleanup (void ) {rm_shm (shm_id_1); -set_sys_tune ("nr_hugepages" , orig_hugepages,0 ); +restore_nr_hugepages (); }static struct tst_test test = {
testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget02.c +2 -4
@@ -24,7 +24,6 @@#include <limits.h> #include "hugetlb.h" -#include "mem.h" #include "hugetlb.h" static size_t shm_size;
@@ -86,11 +85,10 @@ void setup(void) {long hpage_size; -check_hugepage (); +save_nr_hugepages ();if (nr_opt) hugepages =SAFE_STRTOL (nr_opt,0 ,LONG_MAX ); - orig_hugepages =get_sys_tune ("nr_hugepages" );set_sys_tune ("nr_hugepages" , hugepages,1 ); hpage_size =SAFE_READ_MEMINFO ("Hugepagesize:" ) *1024 ;
@@ -107,7 +105,7 @@ void setup(void)void cleanup (void ) {rm_shm (shm_id_1); -set_sys_tune ("nr_hugepages" , orig_hugepages,0 ); +restore_nr_hugepages (); }static struct tst_test test = {
testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget03.c +2 -4
@@ -24,7 +24,6 @@#include <limits.h> #include "hugetlb.h" -#include "mem.h" #include "hugetlb.h" /*
@@ -65,11 +64,10 @@ static void setup(void) {long hpage_size; -check_hugepage (); +save_nr_hugepages ();if (nr_opt) hugepages =SAFE_STRTOL (nr_opt,0 ,LONG_MAX ); - orig_hugepages =get_sys_tune ("nr_hugepages" );SAFE_FILE_SCANF (PATH_SHMMNI ,"%ld" , &orig_shmmni);set_sys_tune ("nr_hugepages" , hugepages,1 );
@@ -107,7 +105,7 @@ static void cleanup(void)rm_shm (shm_id_arr[i]);FILE_PRINTF (PATH_SHMMNI ,"%ld" , orig_shmmni); -set_sys_tune ("nr_hugepages" , orig_hugepages,0 ); +restore_nr_hugepages (); }static struct tst_test test = {
testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget05.c +2 -4
@@ -26,7 +26,6 @@#include <sys/wait.h> #include <limits.h> #include "hugetlb.h" -#include "mem.h" #include "hugetlb.h" static size_t shm_size;
@@ -79,11 +78,10 @@ void setup(void) {long hpage_size; -check_hugepage (); +save_nr_hugepages ();if (nr_opt) hugepages =SAFE_STRTOL (nr_opt,0 ,LONG_MAX ); - orig_hugepages =get_sys_tune ("nr_hugepages" );set_sys_tune ("nr_hugepages" , hugepages,1 ); hpage_size =SAFE_READ_MEMINFO ("Hugepagesize:" ) *1024 ;
@@ -102,7 +100,7 @@ void setup(void)void cleanup (void ) {rm_shm (shm_id_1); -set_sys_tune ("nr_hugepages" , orig_hugepages,0 ); +restore_nr_hugepages (); }static struct tst_test test = {
testcases/kernel/mem/hugetlb/lib/Makefile +1 -0
@@ -19,6 +19,7 @@ top_srcdir ?= ../../../../.. include $(top_srcdir)/include/mk/env_pre.mk +include $(top_srcdir)/testcases/kernel/mem/include/libmem.mk LIB := libhugetlb.a
testcases/kernel/mem/hugetlb/lib/hugetlb.c +14 -0
@@ -40,12 +40,26 @@#include <pwd.h> #include "hugetlb.h" +long orig_hugepages =-1 ; +void check_hugepage (void ) {if (access (PATH_HUGEPAGES ,F_OK ))tst_brk (TCONF ,"Huge page is not supported." ); } +void save_nr_hugepages (void ) +{ +check_hugepage (); + orig_hugepages =get_sys_tune ("nr_hugepages" ); +} + +void restore_nr_hugepages (void ) +{ +if (orig_hugepages !=-1 ) +set_sys_tune ("nr_hugepages" , orig_hugepages,0 ); +} +/* * getipckey() - generates and returns a message key used by the "get" * calls to create an IPC resource.
testcases/kernel/mem/hugetlb/lib/hugetlb.h +5 -3
@@ -31,6 +31,7 @@#include <sys/wait.h> #include "tst_test.h" #include "old_tmpdir.h" +#include "mem.h" #define SHM_RD 0400#define SHM_WR 0200
@@ -49,14 +50,15 @@key_t shmkey;/* an IPC key generated by ftok() */ -void check_hugepage (void ); -int getipckey (void );int getuserid (char *user);void rm_shm (int shm_id);char *nr_opt;char *Hopt; -long orig_hugepages; +extern long orig_hugepages; +void check_hugepage (void ); +void save_nr_hugepages (void ); +void restore_nr_hugepages (void );#endif /* hugetlb.h */
Signature · 1 line
2.9.3
PATCH v2 1/1 hugetlb: fix warnings in cleanup()
Hi Li,
Quoted 11 lines · Li Wang
Adding two functions [save|restore]_nr_hugepages() to the hugetlb library, and meanwhile initialize the '
orig_hugepages' to '-1', then we can make use of that to avoid those warnings on a system without huge page supporting.WARNING:
safe_file_ops.c:283: WARN: Failed to open FILE '/proc/sys/vm/nr_hugepages' for writing at mem.c:853: ENOENTAlso, including "
mem.h" in hugetlb lib to get rid of compile warnings.
Thanks for cc'ing me on the patch. It conflicts with a couple of patches I have in flight. I am happy to rebase on top if this one is ready for merging.
One of the patches in the series, moves check_hugepage() from hugetlb/lib/hugetlb.c into lib/mem.c[0] so that the hugepage check can be added to thp tests.
Thanks,
Punit
[0] http://lists.linux.it/pipermail/ltp/2017-November/006415.html
[...]
PATCH v2 1/1 hugetlb: fix warnings in cleanup()
In reply to Li WangHi!
testcases/kernel/mem/hugetlb/lib/hugetlb.c line 55
Quoted 5 lines
testcases/kernel/mem/hugetlb/lib/hugetlb.c +5
-0+void save_nr_hugepages (void ) +{ +check_hugepage (); + orig_hugepages =get_sys_tune ("nr_hugepages" ); +}
I've changed this function to return the orig_hugepages instead of void so that we can use it in the testcases when needed. Since I find this a bit cleaner solution than having the library internal variable exported in header file. Pushed, thanks a lot.
Signature · 2 lines
Cyril Hrubis [email protected]