diff for duplicates of <200710150928.56916.arnd@arndb.de> diff --git a/a/1.txt b/N1/1.txt index 8b91fdc..8bbb39a 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -9,30 +9,24 @@ Looks good, except for two micro-optimization: Acked-by: Arnd Bergmann <arnd@arndb.de> -> @@ -1361,7 +1356,14 @@ sys_nanosleep(struct timespec __user *rqtp, struct= - timespec __user *rmtp) -> =A0=A0=A0=A0=A0=A0=A0=A0if (!timespec_valid(&tu)) -> =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0return -EINVAL; -> =A0 -> -=A0=A0=A0=A0=A0=A0=A0return hrtimer_nanosleep(&tu, rmtp, HRTIMER_MODE_RE= -L, CLOCK_MONOTONIC); -> +=A0=A0=A0=A0=A0=A0=A0ret =3D hrtimer_nanosleep(&tu, &rmt, HRTIMER_MODE_R= -EL, CLOCK_MONOTONIC); +> @@ -1361,7 +1356,14 @@ sys_nanosleep(struct timespec __user *rqtp, struct timespec __user *rmtp) +> if (!timespec_valid(&tu)) +> return -EINVAL; +> +> - return hrtimer_nanosleep(&tu, rmtp, HRTIMER_MODE_REL, CLOCK_MONOTONIC); +> + ret = hrtimer_nanosleep(&tu, &rmt, HRTIMER_MODE_REL, CLOCK_MONOTONIC); > + -> +=A0=A0=A0=A0=A0=A0=A0if (ret && rmtp) { -> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0if (copy_to_user(rmtp, &rmt= -, sizeof(*rmtp))) -> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0ret= -urn -EFAULT; -> +=A0=A0=A0=A0=A0=A0=A0} +> + if (ret && rmtp) { +> + if (copy_to_user(rmtp, &rmt, sizeof(*rmtp))) +> + return -EFAULT; +> + } > + -> +=A0=A0=A0=A0=A0=A0=A0return ret; -> =A0} -> =A0 +> + return ret; +> } +> -If it's common to call sys_nanosleep with a NULL rmtp argument, we could sa= -ve a -few cycles using=20 +If it's common to call sys_nanosleep with a NULL rmtp argument, we could save a +few cycles using return hrtimer_nanosleep(&tu, rmtp ? &rmp : NULL, HRTIMER_MODE_REL, CLOCK_MONOTONIC); @@ -41,33 +35,25 @@ few cycles using=20 > index 57efe04..cce8c75 100644 > --- a/kernel/posix-timers.c > +++ b/kernel/posix-timers.c -> @@ -980,9 +980,19 @@ sys_clock_getres(const clockid_t which_clock, struct= - timespec __user *tp) -> =A0static int common_nsleep(const clockid_t which_clock, int flags, -> =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 = -struct timespec *tsave, struct timespec __user *rmtp) -> =A0{ -> -=A0=A0=A0=A0=A0=A0=A0return hrtimer_nanosleep(tsave, rmtp, flags & TIMER= -_ABSTIME ? -> +=A0=A0=A0=A0=A0=A0=A0struct timespec rmt; -> +=A0=A0=A0=A0=A0=A0=A0int ret; +> @@ -980,9 +980,19 @@ sys_clock_getres(const clockid_t which_clock, struct timespec __user *tp) +> static int common_nsleep(const clockid_t which_clock, int flags, +> struct timespec *tsave, struct timespec __user *rmtp) +> { +> - return hrtimer_nanosleep(tsave, rmtp, flags & TIMER_ABSTIME ? +> + struct timespec rmt; +> + int ret; > + -> +=A0=A0=A0=A0=A0=A0=A0ret =3D hrtimer_nanosleep(tsave, &rmt, flags & TIME= -R_ABSTIME ? -> =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= -=A0=A0=A0=A0=A0=A0=A0=A0 HRTIMER_MODE_ABS : HRTIMER_MODE_REL, -> =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= -=A0=A0=A0=A0=A0=A0=A0=A0 which_clock); +> + ret = hrtimer_nanosleep(tsave, &rmt, flags & TIMER_ABSTIME ? +> HRTIMER_MODE_ABS : HRTIMER_MODE_REL, +> which_clock); > + -> +=A0=A0=A0=A0=A0=A0=A0if (ret && rmtp) { -> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0if (copy_to_user(rmtp, &rmt= -, sizeof(*rmtp))) -> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0ret= -urn -EFAULT; -> +=A0=A0=A0=A0=A0=A0=A0} +> + if (ret && rmtp) { +> + if (copy_to_user(rmtp, &rmt, sizeof(*rmtp))) +> + return -EFAULT; +> + } > + -> +=A0=A0=A0=A0=A0=A0=A0return ret; -> =A0} +> + return ret; +> } I think it would be better here to propagate the move to a kernel *rmtp down to sys_clock_nanosleep so we get the same optimization in diff --git a/a/content_digest b/N1/content_digest index 11f0f50..e98a1a3 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -5,9 +5,9 @@ "Subject\0Re: [PATCH] Rework hrtimer_nanosleep to make sys_compat_nanosleep easier\0" "Date\0Mon, 15 Oct 2007 09:28:55 +0200\0" "To\0linuxppc-dev@ozlabs.org\0" - "Cc\0Thomas Gleixner <tglx@linutronix.de>" + "Cc\0Anton Blanchard <anton@samba.org>" + Thomas Gleixner <tglx@linutronix.de> mingo@elte.hu - Anton Blanchard <anton@samba.org> " linux-kernel@vger.kernel.org\0" "\00:1\0" "b\0" @@ -22,30 +22,24 @@ "\n" "Acked-by: Arnd Bergmann <arnd@arndb.de>\n" "\n" - "> @@ -1361,7 +1356,14 @@ sys_nanosleep(struct timespec __user *rqtp, struct=\n" - " timespec __user *rmtp)\n" - "> =A0=A0=A0=A0=A0=A0=A0=A0if (!timespec_valid(&tu))\n" - "> =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0return -EINVAL;\n" - "> =A0\n" - "> -=A0=A0=A0=A0=A0=A0=A0return hrtimer_nanosleep(&tu, rmtp, HRTIMER_MODE_RE=\n" - "L, CLOCK_MONOTONIC);\n" - "> +=A0=A0=A0=A0=A0=A0=A0ret =3D hrtimer_nanosleep(&tu, &rmt, HRTIMER_MODE_R=\n" - "EL, CLOCK_MONOTONIC);\n" + "> @@ -1361,7 +1356,14 @@ sys_nanosleep(struct timespec __user *rqtp, struct timespec __user *rmtp)\n" + "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (!timespec_valid(&tu))\n" + "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return -EINVAL;\n" + "> \302\240\n" + "> -\302\240\302\240\302\240\302\240\302\240\302\240\302\240return hrtimer_nanosleep(&tu, rmtp, HRTIMER_MODE_REL, CLOCK_MONOTONIC);\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240ret = hrtimer_nanosleep(&tu, &rmt, HRTIMER_MODE_REL, CLOCK_MONOTONIC);\n" "> +\n" - "> +=A0=A0=A0=A0=A0=A0=A0if (ret && rmtp) {\n" - "> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0if (copy_to_user(rmtp, &rmt=\n" - ", sizeof(*rmtp)))\n" - "> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0ret=\n" - "urn -EFAULT;\n" - "> +=A0=A0=A0=A0=A0=A0=A0}\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (ret && rmtp) {\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (copy_to_user(rmtp, &rmt, sizeof(*rmtp)))\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return -EFAULT;\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240}\n" "> +\n" - "> +=A0=A0=A0=A0=A0=A0=A0return ret;\n" - "> =A0}\n" - "> =A0\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240return ret;\n" + "> \302\240}\n" + "> \302\240\n" "\n" - "If it's common to call sys_nanosleep with a NULL rmtp argument, we could sa=\n" - "ve a\n" - "few cycles using=20\n" + "If it's common to call sys_nanosleep with a NULL rmtp argument, we could save a\n" + "few cycles using \n" "\n" "\treturn hrtimer_nanosleep(&tu, rmtp ? &rmp : NULL, HRTIMER_MODE_REL,\n" "\t\t\t\t\t\t\t\t CLOCK_MONOTONIC);\n" @@ -54,33 +48,25 @@ "> index 57efe04..cce8c75 100644\n" "> --- a/kernel/posix-timers.c\n" "> +++ b/kernel/posix-timers.c\n" - "> @@ -980,9 +980,19 @@ sys_clock_getres(const clockid_t which_clock, struct=\n" - " timespec __user *tp)\n" - "> =A0static int common_nsleep(const clockid_t which_clock, int flags,\n" - "> =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 =\n" - "struct timespec *tsave, struct timespec __user *rmtp)\n" - "> =A0{\n" - "> -=A0=A0=A0=A0=A0=A0=A0return hrtimer_nanosleep(tsave, rmtp, flags & TIMER=\n" - "_ABSTIME ?\n" - "> +=A0=A0=A0=A0=A0=A0=A0struct timespec rmt;\n" - "> +=A0=A0=A0=A0=A0=A0=A0int ret;\n" + "> @@ -980,9 +980,19 @@ sys_clock_getres(const clockid_t which_clock, struct timespec __user *tp)\n" + "> \302\240static int common_nsleep(const clockid_t which_clock, int flags,\n" + "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 struct timespec *tsave, struct timespec __user *rmtp)\n" + "> \302\240{\n" + "> -\302\240\302\240\302\240\302\240\302\240\302\240\302\240return hrtimer_nanosleep(tsave, rmtp, flags & TIMER_ABSTIME ?\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct timespec rmt;\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240int ret;\n" "> +\n" - "> +=A0=A0=A0=A0=A0=A0=A0ret =3D hrtimer_nanosleep(tsave, &rmt, flags & TIME=\n" - "R_ABSTIME ?\n" - "> =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=\n" - "=A0=A0=A0=A0=A0=A0=A0=A0 HRTIMER_MODE_ABS : HRTIMER_MODE_REL,\n" - "> =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=\n" - "=A0=A0=A0=A0=A0=A0=A0=A0 which_clock);\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240ret = hrtimer_nanosleep(tsave, &rmt, flags & TIMER_ABSTIME ?\n" + "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 HRTIMER_MODE_ABS : HRTIMER_MODE_REL,\n" + "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 which_clock);\n" "> +\n" - "> +=A0=A0=A0=A0=A0=A0=A0if (ret && rmtp) {\n" - "> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0if (copy_to_user(rmtp, &rmt=\n" - ", sizeof(*rmtp)))\n" - "> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0ret=\n" - "urn -EFAULT;\n" - "> +=A0=A0=A0=A0=A0=A0=A0}\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (ret && rmtp) {\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (copy_to_user(rmtp, &rmt, sizeof(*rmtp)))\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return -EFAULT;\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240}\n" "> +\n" - "> +=A0=A0=A0=A0=A0=A0=A0return ret;\n" - "> =A0}\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240return ret;\n" + "> \302\240}\n" "\n" "I think it would be better here to propagate the move to a kernel *rmtp\n" "down to sys_clock_nanosleep so we get the same optimization in\n" @@ -89,4 +75,4 @@ "\n" "\tArnd <><" -b61c99eb9022bf5ba90ac892d0d402ecd4c9c6f0832cc701df0cf22793ca740a +e400ae9cf7dd4f24df3e5222fbacdb0dc4f9e847f5ac5dac628502d05431add0
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.