public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* tick-common.c hack for s390 needed
@ 2008-03-18  9:31 Heiko Carstens
  2008-03-19  4:12 ` Arnd Bergmann
  2008-03-19  5:45 ` Christoph Hellwig
  0 siblings, 2 replies; 13+ messages in thread
From: Heiko Carstens @ 2008-03-18  9:31 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar; +Cc: linux-kernel, Martin Schwidefsky

Hi Thomas, Ingo,

I'm converting s390 from s390's NO_IDLE_HZ to GENERIC_CLOCKEVENTS and
therefore to the generic NO_HZ implementation.
One of the problems that need a patch for this is kernel/time/tick-common.c
which relies on the irq stuff present in include/linux/irq.h.
In particular s390 doesn't have something like irq_set_affinity which
causes this build error:

  CC      kernel/time/tick-common.o
kernel/time/tick-common.c: In function 'tick_periodic':
kernel/time/tick-common.c:70: error: implicit declaration of function 'get_irq_regs'
kernel/time/tick-common.c:70: error: invalid type argument of '->' (have 'int')
kernel/time/tick-common.c: In function 'tick_setup_device':
kernel/time/tick-common.c:171: error: implicit declaration of function 'irq_set_affinity'
kernel/time/tick-common.c: In function 'tick_check_new_device':
kernel/time/tick-common.c:216: error: implicit declaration of function 'irq_can_set_affinity'

Actually there's a huge #ifndef CONFIG_S390 in linux/irq.h ;)

To make the code work the patch below is necessary. It's ok since all
clock event devices on s390 are per cpu. However I think this patch is
ugly at best. Any ideas how to fix this in a better and more generic way?

---
 kernel/time/tick-common.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

Index: linux-2.6/kernel/time/tick-common.c
===================================================================
--- linux-2.6.orig/kernel/time/tick-common.c
+++ linux-2.6/kernel/time/tick-common.c
@@ -19,6 +19,7 @@
 #include <linux/profile.h>
 #include <linux/sched.h>
 #include <linux/tick.h>
+#include <asm/irq_regs.h>
 
 #include "tick-internal.h"
 
@@ -167,9 +168,10 @@ static void tick_setup_device(struct tic
 	 * When the device is not per cpu, pin the interrupt to the
 	 * current cpu:
 	 */
+#ifndef CONFIG_S390
 	if (!cpus_equal(newdev->cpumask, cpumask))
 		irq_set_affinity(newdev->irq, cpumask);
-
+#endif
 	/*
 	 * When global broadcasting is active, check if the current
 	 * device is registered as a placeholder for broadcast mode.
@@ -213,9 +215,10 @@ static int tick_check_new_device(struct 
 		 * If the cpu affinity of the device interrupt can not
 		 * be set, ignore it.
 		 */
+#ifndef CONFIG_S390
 		if (!irq_can_set_affinity(newdev->irq))
 			goto out_bc;
-
+#endif
 		/*
 		 * If we have a cpu local device already, do not replace it
 		 * by a non cpu local device

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2008-04-01 11:29 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-18  9:31 tick-common.c hack for s390 needed Heiko Carstens
2008-03-19  4:12 ` Arnd Bergmann
2008-03-19  5:45 ` Christoph Hellwig
2008-03-21 10:15   ` Ingo Molnar
2008-03-21 13:25     ` Heiko Carstens
2008-03-21 14:45       ` Thomas Gleixner
2008-03-22 20:32         ` Heiko Carstens
2008-03-23 22:34           ` Russell King
2008-03-24 10:14             ` Heiko Carstens
2008-03-25 19:09             ` Thomas Gleixner
2008-03-25 19:30               ` Russell King
2008-04-01 11:02               ` Heiko Carstens
2008-04-01 11:24                 ` Thomas Gleixner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox