Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/compat/linux/common Better debugging.
details: https://anonhg.NetBSD.org/src/rev/947de98dd51c
branches: trunk
changeset: 768516:947de98dd51c
user: christos <christos%NetBSD.org@localhost>
date: Thu Aug 18 02:26:38 2011 +0000
description:
Better debugging.
diffstat:
sys/compat/linux/common/linux_sched.c | 98 +++++++++++++++++-----------------
1 files changed, 48 insertions(+), 50 deletions(-)
diffs (245 lines):
diff -r cc9d2a10a7f4 -r 947de98dd51c sys/compat/linux/common/linux_sched.c
--- a/sys/compat/linux/common/linux_sched.c Thu Aug 18 02:21:02 2011 +0000
+++ b/sys/compat/linux/common/linux_sched.c Thu Aug 18 02:26:38 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_sched.c,v 1.64 2011/06/05 08:42:59 dsl Exp $ */
+/* $NetBSD: linux_sched.c,v 1.65 2011/08/18 02:26:38 christos Exp $ */
/*-
* Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_sched.c,v 1.64 2011/06/05 08:42:59 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_sched.c,v 1.65 2011/08/18 02:26:38 christos Exp $");
#include <sys/param.h>
#include <sys/mount.h>
@@ -63,7 +63,14 @@
#include <compat/linux/common/linux_sched.h>
-static int linux_clone_nptl(struct lwp *, const struct linux_sys_clone_args *, register_t *);
+static int linux_clone_nptl(struct lwp *, const struct linux_sys_clone_args *,
+ register_t *);
+
+#if DEBUG_LINUX
+#define DPRINTF(x) uprintf x
+#else
+#define DPRINTF(x)
+#endif
static void
linux_child_return(void *arg)
@@ -72,18 +79,20 @@
struct proc *p = l->l_proc;
struct linux_emuldata *led = l->l_emuldata;
void *ctp = led->led_child_tidptr;
+ int error;
if (ctp) {
- if (copyout(&p->p_pid, ctp, sizeof(p->p_pid)) != 0)
+ if ((error = copyout(&p->p_pid, ctp, sizeof(p->p_pid))) != 0)
printf("%s: LINUX_CLONE_CHILD_SETTID "
- "failed (child_tidptr = %p, tid = %d)\n",
- __func__, ctp, p->p_pid);
+ "failed (child_tidptr = %p, tid = %d error =%d)\n",
+ __func__, ctp, p->p_pid, error);
}
child_return(arg);
}
int
-linux_sys_clone(struct lwp *l, const struct linux_sys_clone_args *uap, register_t *retval)
+linux_sys_clone(struct lwp *l, const struct linux_sys_clone_args *uap,
+ register_t *retval)
{
/* {
syscallarg(int) flags;
@@ -100,7 +109,7 @@
* We don't support the Linux CLONE_PID or CLONE_PTRACE flags.
*/
if (SCARG(uap, flags) & (LINUX_CLONE_PID|LINUX_CLONE_PTRACE))
- return (EINVAL);
+ return EINVAL;
/*
* Thread group implies shared signals. Shared signals
@@ -108,17 +117,16 @@
*/
if (SCARG(uap, flags) & LINUX_CLONE_THREAD
&& (SCARG(uap, flags) & LINUX_CLONE_SIGHAND) == 0)
- return (EINVAL);
+ return EINVAL;
if (SCARG(uap, flags) & LINUX_CLONE_SIGHAND
&& (SCARG(uap, flags) & LINUX_CLONE_VM) == 0)
- return (EINVAL);
+ return EINVAL;
/*
* The thread group flavor is implemented totally differently.
*/
- if (SCARG(uap, flags) & LINUX_CLONE_THREAD) {
+ if (SCARG(uap, flags) & LINUX_CLONE_THREAD)
return linux_clone_nptl(l, uap, retval);
- }
flags = 0;
if (SCARG(uap, flags) & LINUX_CLONE_VM)
@@ -134,7 +142,7 @@
sig = SCARG(uap, flags) & LINUX_CLONE_CSIGNAL;
if (sig < 0 || sig >= LINUX__NSIG)
- return (EINVAL);
+ return EINVAL;
sig = linux_to_native_signo[sig];
if (SCARG(uap, flags) & LINUX_CLONE_CHILD_SETTID) {
@@ -149,8 +157,10 @@
* that makes this adjustment is a noop.
*/
if ((error = fork1(l, flags, sig, SCARG(uap, stack), 0,
- linux_child_return, NULL, retval, &p)) != 0)
+ linux_child_return, NULL, retval, &p)) != 0) {
+ DPRINTF(("%s: fork1: error %d\n", __func__, error));
return error;
+ }
return 0;
}
@@ -183,7 +193,7 @@
tnprocs = atomic_inc_uint_nv(&nprocs);
if (__predict_false(tnprocs >= maxproc) ||
kauth_authorize_process(l->l_cred, KAUTH_PROCESS_FORK, p,
- KAUTH_ARG(tnprocs), NULL, NULL) != 0) {
+ KAUTH_ARG(tnprocs), NULL, NULL) != 0) {
atomic_dec_uint(&nprocs);
return EAGAIN;
}
@@ -195,9 +205,9 @@
}
error = lwp_create(l, p, uaddr, LWP_DETACHED | LWP_PIDLID,
- SCARG(uap, stack), 0, child_return, NULL, &l2,
- l->l_class);
+ SCARG(uap, stack), 0, child_return, NULL, &l2, l->l_class);
if (__predict_false(error)) {
+ DPRINTF(("%s: lwp_create error=%d\n", __func__, error));
atomic_dec_uint(&nprocs);
uvm_uarea_free(uaddr);
return error;
@@ -212,23 +222,25 @@
/* LINUX_CLONE_PARENT_SETTID: store child's TID in parent's memory */
if (flags & LINUX_CLONE_PARENT_SETTID) {
- if (copyout(&lid, parent_tidptr, sizeof(lid)) != 0)
+ if ((error = copyout(&lid, parent_tidptr, sizeof(lid))) != 0)
printf("%s: LINUX_CLONE_PARENT_SETTID "
- "failed (parent_tidptr = %p tid = %d)\n",
- __func__, parent_tidptr, lid);
+ "failed (parent_tidptr = %p tid = %d error=%d)\n",
+ __func__, parent_tidptr, lid, error);
}
/* LINUX_CLONE_CHILD_SETTID: store child's TID in child's memory */
if (flags & LINUX_CLONE_CHILD_SETTID) {
- if (copyout(&lid, child_tidptr, sizeof(lid)) != 0)
+ if ((error = copyout(&lid, child_tidptr, sizeof(lid))) != 0)
printf("%s: LINUX_CLONE_CHILD_SETTID "
- "failed (child_tidptr = %p, tid = %d)\n",
- __func__, child_tidptr, lid);
+ "failed (child_tidptr = %p, tid = %d error=%d)\n",
+ __func__, child_tidptr, lid, error);
}
if (flags & LINUX_CLONE_SETTLS) {
error = LINUX_LWP_SETPRIVATE(l2, tls);
if (error) {
+ DPRINTF(("%s: LINUX_LWP_SETPRIVATE %d\n", __func__,
+ error));
lwp_exit(l2);
return error;
}
@@ -366,10 +378,8 @@
KASSERT(prio <= SCHED_PRI_MAX);
KASSERT(linux_params != NULL);
-#ifdef DEBUG_LINUX
- printf("native2linux: native: policy %d, priority %d\n",
- native_policy, prio);
-#endif
+ DPRINTF(("%s: native: policy %d, priority %d\n",
+ __func__, native_policy, prio));
if (native_policy == SCHED_OTHER) {
linux_params->sched_priority = 0;
@@ -380,10 +390,8 @@
/ (SCHED_PRI_MAX - SCHED_PRI_MIN)
+ LINUX_SCHED_RTPRIO_MIN;
}
-#ifdef DEBUG_LINUX
- printf("native2linux: linux: policy %d, priority %d\n",
- -1, linux_params->sched_priority);
-#endif
+ DPRINTF(("%s: linux: policy %d, priority %d\n",
+ __func__, -1, linux_params->sched_priority));
}
return 0;
@@ -448,18 +456,14 @@
error = do_sched_getparam(0, SCARG(uap, pid), &policy, &sp);
if (error)
goto out;
-#ifdef DEBUG_LINUX
- printf("getparam: native: policy %d, priority %d\n",
- policy, sp.sched_priority);
-#endif
+ DPRINTF(("%s: native: policy %d, priority %d\n",
+ __func__, policy, sp.sched_priority));
error = sched_native2linux(policy, &sp, NULL, &lp);
if (error)
goto out;
-#ifdef DEBUG_LINUX
- printf("getparam: linux: policy %d, priority %d\n",
- policy, lp.sched_priority);
-#endif
+ DPRINTF(("%s: linux: policy %d, priority %d\n",
+ __func__, policy, lp.sched_priority));
error = copyout(&lp, SCARG(uap, sp), sizeof(lp));
if (error)
@@ -489,18 +493,14 @@
error = copyin(SCARG(uap, sp), &lp, sizeof(lp));
if (error)
goto out;
-#ifdef DEBUG_LINUX
- printf("setscheduler: linux: policy %d, priority %d\n",
- SCARG(uap, policy), lp.sched_priority);
-#endif
+ DPRINTF(("%s: linux: policy %d, priority %d\n",
+ __func__, SCARG(uap, policy), lp.sched_priority));
error = sched_linux2native(SCARG(uap, policy), &lp, &policy, &sp);
if (error)
goto out;
-#ifdef DEBUG_LINUX
- printf("setscheduler: native: policy %d, priority %d\n",
- policy, sp.sched_priority);
-#endif
+ DPRINTF(("%s: native: policy %d, priority %d\n",
+ __func__, policy, sp.sched_priority));
error = do_sched_setparam(0, SCARG(uap, pid), policy, &sp);
if (error)
@@ -692,8 +692,6 @@
}
/* Let's ignore it */
-#ifdef DEBUG_LINUX
- printf("linux_sys_sched_setaffinity\n");
-#endif
+ DPRINTF(("%s\n", __func__));
return 0;
}
Home |
Main Index |
Thread Index |
Old Index