net/mlx5: revert setting bonding representor to first PF
[dpdk.git] / usertools / dpdk-hugepages.py
index 4b6401d..4fdb199 100755 (executable)
@@ -29,7 +29,7 @@ def get_memsize(arg):
     '''Convert memory size with suffix to kB'''
     match = re.match(r'(\d+)([' + BINARY_PREFIX + r']?)$', arg.upper())
     if match is None:
-        sys.exit('{} is not a valid page size'.format(arg))
+        sys.exit('{} is not a valid size'.format(arg))
     num = float(match.group(1))
     suffix = match.group(2)
     if suffix == "":
@@ -43,6 +43,13 @@ def is_numa():
     return os.path.exists('/sys/devices/system/node')
 
 
+def get_valid_page_sizes(path):
+    '''Extract valid hugepage sizes'''
+    dir = os.path.dirname(path)
+    pg_sizes = (d.split("-")[1] for d in os.listdir(dir))
+    return " ".join(pg_sizes)
+
+
 def get_hugepages(path):
     '''Read number of reserved pages'''
     with open(path + '/nr_hugepages') as nr_hugepages:
@@ -50,18 +57,21 @@ def get_hugepages(path):
     return 0
 
 
-def set_hugepages(path, pages):
+def set_hugepages(path, reqpages):
     '''Write the number of reserved huge pages'''
     filename = path + '/nr_hugepages'
     try:
         with open(filename, 'w') as nr_hugepages:
-            nr_hugepages.write('{}\n'.format(pages))
+            nr_hugepages.write('{}\n'.format(reqpages))
     except PermissionError:
         sys.exit('Permission denied: need to be root!')
     except FileNotFoundError:
-        filename = os.path.basename(path)
-        size = filename[10:]
-        sys.exit('{} is not a valid system huge page size'.format(size))
+        sys.exit("Invalid page size. Valid page sizes: {}".format(
+                 get_valid_page_sizes(path)))
+    gotpages = get_hugepages(path)
+    if gotpages != reqpages:
+        sys.exit('Unable to set pages ({} instead of {} in {}).'.format(
+                 gotpages, reqpages, filename))
 
 
 def show_numa_pages():
@@ -246,6 +256,8 @@ To a complete setup of with 2 Gigabyte of 1G huge pages:
         pagesize_kb = get_memsize(args.pagesize)
     else:
         pagesize_kb = default_pagesize()
+    if not pagesize_kb:
+        sys.exit("Invalid page size: {}kB".format(pagesize_kb))
 
     if args.clear:
         clear_pages()