Преглед на файлове

*-user: Deprecate and disable -p pagesize

This option controls the host page size.  From the mis-usage in
our own testsuite, this is easily confused with guest page size.

The only thing that occurs when changing the host page size is
that stuff breaks, because one cannot actually change the host
page size.  Therefore reject all but the no-op setting as part
of the deprecation process.

Reviewed-by: Warner Losh <imp@bsdimp.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Acked-by: Helge Deller <deller@gmx.de>
Message-Id: <20240102015808.132373-27-richard.henderson@linaro.org>
Richard Henderson преди 1 година
родител
ревизия
01e449809b
променени са 4 файла, в които са добавени 22 реда и са изтрити 14 реда
  1. 6 5
      bsd-user/main.c
  2. 10 0
      docs/about/deprecated.rst
  3. 0 3
      docs/user/main.rst
  4. 6 6
      linux-user/main.c

+ 6 - 5
bsd-user/main.c

@@ -364,11 +364,12 @@ int main(int argc, char **argv)
         } else if (!strcmp(r, "L")) {
         } else if (!strcmp(r, "L")) {
             interp_prefix = argv[optind++];
             interp_prefix = argv[optind++];
         } else if (!strcmp(r, "p")) {
         } else if (!strcmp(r, "p")) {
-            qemu_host_page_size = atoi(argv[optind++]);
-            if (qemu_host_page_size == 0 ||
-                (qemu_host_page_size & (qemu_host_page_size - 1)) != 0) {
-                fprintf(stderr, "page size must be a power of two\n");
-                exit(1);
+            unsigned size, want = qemu_real_host_page_size();
+
+            r = argv[optind++];
+            if (qemu_strtoui(r, NULL, 10, &size) || size != want) {
+                warn_report("Deprecated page size option cannot "
+                            "change host page size (%u)", want);
             }
             }
         } else if (!strcmp(r, "g")) {
         } else if (!strcmp(r, "g")) {
             gdbstub = g_strdup(argv[optind++]);
             gdbstub = g_strdup(argv[optind++]);

+ 10 - 0
docs/about/deprecated.rst

@@ -63,6 +63,16 @@ as short-form boolean values, and passed to plugins as ``arg_name=on``.
 However, short-form booleans are deprecated and full explicit ``arg_name=on``
 However, short-form booleans are deprecated and full explicit ``arg_name=on``
 form is preferred.
 form is preferred.
 
 
+User-mode emulator command line arguments
+-----------------------------------------
+
+``-p`` (since 9.0)
+''''''''''''''''''
+
+The ``-p`` option pretends to control the host page size.  However,
+it is not possible to change the host page size, and using the
+option only causes failures.
+
 QEMU Machine Protocol (QMP) commands
 QEMU Machine Protocol (QMP) commands
 ------------------------------------
 ------------------------------------
 
 

+ 0 - 3
docs/user/main.rst

@@ -87,9 +87,6 @@ Debug options:
    Activate logging of the specified items (use '-d help' for a list of
    Activate logging of the specified items (use '-d help' for a list of
    log items)
    log items)
 
 
-``-p pagesize``
-   Act as if the host page size was 'pagesize' bytes
-
 ``-g port``
 ``-g port``
    Wait gdb connection to port
    Wait gdb connection to port
 
 

+ 6 - 6
linux-user/main.c

@@ -332,11 +332,11 @@ static void handle_arg_ld_prefix(const char *arg)
 
 
 static void handle_arg_pagesize(const char *arg)
 static void handle_arg_pagesize(const char *arg)
 {
 {
-    qemu_host_page_size = atoi(arg);
-    if (qemu_host_page_size == 0 ||
-        (qemu_host_page_size & (qemu_host_page_size - 1)) != 0) {
-        fprintf(stderr, "page size must be a power of two\n");
-        exit(EXIT_FAILURE);
+    unsigned size, want = qemu_real_host_page_size();
+
+    if (qemu_strtoui(arg, NULL, 10, &size) || size != want) {
+        warn_report("Deprecated page size option cannot "
+                    "change host page size (%u)", want);
     }
     }
 }
 }
 
 
@@ -496,7 +496,7 @@ static const struct qemu_argument arg_table[] = {
     {"D",          "QEMU_LOG_FILENAME", true, handle_arg_log_filename,
     {"D",          "QEMU_LOG_FILENAME", true, handle_arg_log_filename,
      "logfile",     "write logs to 'logfile' (default stderr)"},
      "logfile",     "write logs to 'logfile' (default stderr)"},
     {"p",          "QEMU_PAGESIZE",    true,  handle_arg_pagesize,
     {"p",          "QEMU_PAGESIZE",    true,  handle_arg_pagesize,
-     "pagesize",   "set the host page size to 'pagesize'"},
+     "pagesize",   "deprecated change to host page size"},
     {"one-insn-per-tb",
     {"one-insn-per-tb",
                    "QEMU_ONE_INSN_PER_TB",  false, handle_arg_one_insn_per_tb,
                    "QEMU_ONE_INSN_PER_TB",  false, handle_arg_one_insn_per_tb,
      "",           "run with one guest instruction per emulated TB"},
      "",           "run with one guest instruction per emulated TB"},