[PATCH] ppc64: Fix 32 bits conversion of SI_TIMER signals

From: Benjamin Herrenschmidt
Date: Sat Sep 25 2004 - 18:48:01 EST


Hi !

The current 32 bits translation of the SI_TIMER is wrong on ppc64, causing
the tst-timer4 testcase of glibc to fail in 32 bits. This patch fixes it.

Signed-off-by: Olaf Hering <olh@xxxxxxx>
Signed-ogg-by: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx>

===== arch/ppc64/kernel/signal32.c 1.57 vs edited =====
--- 1.57/arch/ppc64/kernel/signal32.c 2004-09-14 10:23:15 +10:00
+++ edited/arch/ppc64/kernel/signal32.c 2004-09-26 09:37:48 +10:00
@@ -472,9 +472,13 @@
&d->si_addr);
break;
case __SI_POLL >> 16:
- case __SI_TIMER >> 16:
err |= __put_user(s->si_band, &d->si_band);
err |= __put_user(s->si_fd, &d->si_fd);
+ break;
+ case __SI_TIMER >> 16:
+ err |= __put_user(s->si_tid, &d->si_tid);
+ err |= __put_user(s->si_overrun, &d->si_overrun);
+ err |= __put_user((u32)(u64)s->si_ptr, &d->si_ptr);
break;
case __SI_RT >> 16: /* This is not generated by the kernel as of now. */
case __SI_MESGQ >> 16:
===== include/asm-ppc64/ppc32.h 1.16 vs edited =====
--- 1.16/include/asm-ppc64/ppc32.h 2004-09-17 16:58:38 +10:00
+++ edited/include/asm-ppc64/ppc32.h 2004-09-26 09:37:49 +10:00
@@ -32,8 +32,10 @@

/* POSIX.1b timers */
struct {
- unsigned int _timer1;
- unsigned int _timer2;
+ timer_t _tid; /* timer id */
+ int _overrun; /* overrun count */
+ compat_sigval_t _sigval; /* same as below */
+ int _sys_private; /* not to be passed to user */
} _timer;

/* POSIX.1b signals */
--
Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx>

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/