2005-01-13 22:04:06

by Blaisorblade

[permalink] [raw]
Subject: [patch 04/11] uml: refuse to run without skas if no tt mode in


From: Paolo 'Blaisorblade' Giarrusso <[email protected]>

Return an early error message when no TT support is compiled in and no SKAS
support is detected.

Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[email protected]>
---

linux-2.6.11-paolo/arch/um/kernel/process.c | 35 ++++++++++++++++++++--------
linux-2.6.11-paolo/arch/um/kernel/um_arch.c | 10 +++++++-
2 files changed, 35 insertions(+), 10 deletions(-)

diff -puN arch/um/kernel/um_arch.c~uml-refuse-to-run-without-skas-if-no-tt-mode-in arch/um/kernel/um_arch.c
--- linux-2.6.11/arch/um/kernel/um_arch.c~uml-refuse-to-run-without-skas-if-no-tt-mode-in 2005-01-13 21:25:17.601847632 +0100
+++ linux-2.6.11-paolo/arch/um/kernel/um_arch.c 2005-01-13 21:25:17.605847024 +0100
@@ -198,7 +198,7 @@ __uml_setup("ncpus=", uml_ncpus_setup,
);
#endif

-int force_tt = 0;
+static int force_tt = 0;

#if defined(CONFIG_MODE_TT) && defined(CONFIG_MODE_SKAS)
#define DEFAULT_TT 0
@@ -319,6 +319,14 @@ int linux_main(int argc, char **argv)
if(have_root == 0) add_arg(saved_command_line, DEFAULT_COMMAND_LINE);

mode_tt = force_tt ? 1 : !can_do_skas();
+#ifndef CONFIG_MODE_TT
+ if (mode_tt) {
+ /*Since CONFIG_MODE_TT is #undef'ed, force_tt cannot be 1. So,
+ * can_do_skas() returned 0, and the message is correct. */
+ printf("Support for TT mode is disabled, and no SKAS support is present on the host.\n");
+ exit(1);
+ }
+#endif
uml_start = CHOOSE_MODE_PROC(set_task_sizes_tt, set_task_sizes_skas, 0,
&host_task_size, &task_size);

diff -puN arch/um/kernel/process.c~uml-refuse-to-run-without-skas-if-no-tt-mode-in arch/um/kernel/process.c
--- linux-2.6.11/arch/um/kernel/process.c~uml-refuse-to-run-without-skas-if-no-tt-mode-in 2005-01-13 21:25:17.602847480 +0100
+++ linux-2.6.11-paolo/arch/um/kernel/process.c 2005-01-13 21:25:17.605847024 +0100
@@ -375,9 +375,9 @@ void forward_pending_sigio(int target)
kill(target, SIGIO);
}

-int can_do_skas(void)
-{
#ifdef UML_CONFIG_MODE_SKAS
+static inline int check_skas3_ptrace_support(void)
+{
struct ptrace_faultinfo fi;
void *stack;
int pid, n, ret = 1;
@@ -386,29 +386,46 @@ int can_do_skas(void)
pid = start_ptraced_child(&stack);

n = ptrace(PTRACE_FAULTINFO, pid, 0, &fi);
- if(n < 0){
+ if (n < 0) {
if(errno == EIO)
printf("not found\n");
- else printf("No (unexpected errno - %d)\n", errno);
+ else {
+ perror("not found");
+ }
ret = 0;
+ } else {
+ printf("found\n");
}
- else printf("found\n");

init_registers(pid);
stop_ptraced_child(pid, stack, 1, 1);

+ return(ret);
+}
+
+int can_do_skas(void)
+{
+ int ret = 1;
+
printf("Checking for /proc/mm...");
- if(os_access("/proc/mm", OS_ACC_W_OK) < 0){
+ if (os_access("/proc/mm", OS_ACC_W_OK) < 0) {
printf("not found\n");
ret = 0;
+ goto out;
+ } else {
+ printf("found\n");
}
- else printf("found\n");

- return(ret);
+ ret = check_skas3_ptrace_support();
+out:
+ return ret;
+}
#else
+int can_do_skas(void)
+{
return(0);
-#endif
}
+#endif

/*
* Overrides for Emacs so that we follow Linus's tabbing style.
_


2005-01-14 17:03:54

by Jeff Dike

[permalink] [raw]
Subject: Re: [patch 04/11] uml: refuse to run without skas if no tt mode in

Is it my imagination, or did you put the definition of can_do_skas under
#ifdef UML_CONFIG_MODE_SKAS and failed to do the same for the call?

Jeff

2005-01-14 20:06:29

by Blaisorblade

[permalink] [raw]
Subject: Re: [patch 04/11] uml: refuse to run without skas if no tt mode in

On Friday 14 January 2005 20:24, Jeff Dike wrote:
> Is it my imagination, or did you put the definition of can_do_skas under
> #ifdef UML_CONFIG_MODE_SKAS and failed to do the same for the call?

Look at the end:

#else
+int can_do_skas(void)
+{
return(0);
-#endif
}
+#endif

This dummy call could be inlined / moved, anyway this is not performance
critical - it's anyway nicer to have such null defines in headers. I'll clean
it up.

While checking your statement, I also discovered that here:

int mode_tt = DEFAULT_TT;
(where DEFAULT_TT is a macro depending on CONFIG options, which is always 0
except if SKAS mode is disabled)

is ignored, because of the subsequent:

mode_tt = force_tt ? 1 : !can_do_skas();

So we can probably get rid of DEFAULT_TT. I'll do this in the future.
--
Paolo Giarrusso, aka Blaisorblade
Linux registered user n. 292729
http://www.user-mode-linux.org/~blaisorblade

2005-01-14 22:45:25

by Jeff Dike

[permalink] [raw]
Subject: Re: [patch 04/11] uml: refuse to run without skas if no tt mode in

[email protected] said:
> Look at the end:

Oops, missed that. Sorry.

Jeff