ppc64: Fix 32 bits conversion of SI_TIMER signals
PATCH 1/1 ppc64: Fix 32 bits conversion of SI_TIMER signals
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 <[email protected]>
Signed-ogg-by Benjamin Herrenschmidt <[email protected]>
===== arch/ppc64/kernel/signal32.c 1.57 vs edited =====
arch/ppc64/kernel/signal32.c +5 -1
@@ -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 =====
include/asm-ppc64/ppc32.h +4 -2
@@ -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 */
Signature · 3 lines
Benjamin Herrenschmidt <[email protected]> -- Benjamin Herrenschmidt <[email protected]>
arch/ppc64/kernel/signal32.c line 481
Quoted 1 line · Benjamin Herrenschmidt
arch/ppc64/kernel/signal32.c +1
-0+ err |=__put_user ((u32 )(u64 )s->si_ptr, &d->si_ptr);
That one surely doesnt work. Let me try it again.
Signature · 3 lines
USB is for mice, FireWire is for men! sUse lINUX ag, nÜRNBERG
Quoted 5 lines · Olaf Hering
arch/ppc64/kernel/signal32.c line 481
Quoted 1 line · Benjamin Herrenschmidt
arch/ppc64/kernel/signal32.c +1
-0+ err |=__put_user ((u32 )(u64 )s->si_ptr, &d->si_ptr);That one surely doesnt work. Let me try it again.
Yup, my bad, see my other mail, I sent the wrong patch :(
Ben.