Message ID | 20240102015808.132373-27-richard.henderson@linaro.org |
---|---|
State | New |
Headers | show |
Series | linux-user: Improve host and guest page size handling | expand |
On 2/1/24 02:58, Richard Henderson wrote: > 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> > --- > docs/about/deprecated.rst | 7 +++++++ > docs/user/main.rst | 3 --- > bsd-user/main.c | 9 +++++---- > linux-user/main.c | 11 ++++++----- > 4 files changed, 18 insertions(+), 12 deletions(-) Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
On Tue, Jan 02, 2024 at 12:58:01PM +1100, Richard Henderson wrote: > 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> > --- > docs/about/deprecated.rst | 7 +++++++ > docs/user/main.rst | 3 --- > bsd-user/main.c | 9 +++++---- > linux-user/main.c | 11 ++++++----- > 4 files changed, 18 insertions(+), 12 deletions(-) [...] > diff --git a/linux-user/main.c b/linux-user/main.c > index 5f217cc2a8..9ba4dc5872 100644 > --- a/linux-user/main.c > +++ b/linux-user/main.c > @@ -332,10 +332,11 @@ static void handle_arg_ld_prefix(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"); > + unsigned size, want = qemu_real_host_page_size(); > + > + if (qemu_strtoui(arg, NULL, 10, &size) || size != want) { > + error_report("Deprecated page size option cannot " > + "change host page size (%u)", want); > exit(EXIT_FAILURE); I wonder if this should rather be a warning for one release? [...]
diff --git a/docs/about/deprecated.rst b/docs/about/deprecated.rst index 2e15040246..a499583a62 100644 --- a/docs/about/deprecated.rst +++ b/docs/about/deprecated.rst @@ -95,6 +95,13 @@ Use ``-accel tcg,one-insn-per-tb=on`` instead. User-mode emulator command line arguments ----------------------------------------- +``-p`` (since 8.2) +'''''''''''''''''' + +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. + ``-singlestep`` (since 8.1) ''''''''''''''''''''''''''' diff --git a/docs/user/main.rst b/docs/user/main.rst index f478635396..3a07be1278 100644 --- a/docs/user/main.rst +++ b/docs/user/main.rst @@ -87,9 +87,6 @@ Debug options: Activate logging of the specified items (use '-d help' for a list of log items) -``-p pagesize`` - Act as if the host page size was 'pagesize' bytes - ``-g port`` Wait gdb connection to port diff --git a/bsd-user/main.c b/bsd-user/main.c index e6014f517e..ba159d2984 100644 --- a/bsd-user/main.c +++ b/bsd-user/main.c @@ -365,10 +365,11 @@ int main(int argc, char **argv) } else if (!strcmp(r, "L")) { interp_prefix = argv[optind++]; } 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"); + unsigned size, want = qemu_real_host_page_size(); + + if (qemu_strtoui(arg, NULL, 10, &size) || size != want) { + error_report("Deprecated page size option cannot " + "change host page size (%u)", want); exit(1); } } else if (!strcmp(r, "g")) { diff --git a/linux-user/main.c b/linux-user/main.c index 5f217cc2a8..9ba4dc5872 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -332,10 +332,11 @@ static void handle_arg_ld_prefix(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"); + unsigned size, want = qemu_real_host_page_size(); + + if (qemu_strtoui(arg, NULL, 10, &size) || size != want) { + error_report("Deprecated page size option cannot " + "change host page size (%u)", want); exit(EXIT_FAILURE); } } @@ -496,7 +497,7 @@ static const struct qemu_argument arg_table[] = { {"D", "QEMU_LOG_FILENAME", true, handle_arg_log_filename, "logfile", "write logs to 'logfile' (default stderr)"}, {"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", "QEMU_ONE_INSN_PER_TB", false, handle_arg_one_insn_per_tb, "", "run with one guest instruction per emulated TB"},