public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] minimal alpha pt_regs fixes
@ 2006-10-07 13:17 Al Viro
  2006-10-07 15:08 ` Jeff Garzik
  0 siblings, 1 reply; 6+ messages in thread
From: Al Viro @ 2006-10-07 13:17 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: linux-kernel


Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
----
6a50792270fe3fdcc835484ccf3de569b1d8162d
diff --git a/arch/alpha/kernel/irq.c b/arch/alpha/kernel/irq.c
index 729c475..dba4e70 100644
--- a/arch/alpha/kernel/irq.c
+++ b/arch/alpha/kernel/irq.c
@@ -129,6 +129,7 @@ #define MAX_ILLEGAL_IRQS 16
 void
 handle_irq(int irq, struct pt_regs * regs)
 {	
+	struct pt_regs *old_regs;
 	/* 
 	 * We ack quickly, we don't want the irq controller
 	 * thinking we're snobs just because some other CPU has
@@ -149,6 +150,7 @@ handle_irq(int irq, struct pt_regs * reg
 		return;
 	}
 
+	old_regs = set_irq_regs(regs);
 	irq_enter();
 	/*
 	 * __do_IRQ() must be called with IPL_MAX. Note that we do not
@@ -157,6 +159,7 @@ handle_irq(int irq, struct pt_regs * reg
 	 * at IPL 0.
 	 */
 	local_irq_disable();
-	__do_IRQ(irq, regs);
+	__do_IRQ(irq);
 	irq_exit();
+	set_irq_regs(old_regs);
 }
diff --git a/arch/alpha/kernel/proto.h b/arch/alpha/kernel/proto.h
index 21f7128..408bda2 100644
--- a/arch/alpha/kernel/proto.h
+++ b/arch/alpha/kernel/proto.h
@@ -133,7 +133,7 @@ extern void smp_percpu_timer_interrupt(s
 /* extern void reset_for_srm(void); */
 
 /* time.c */
-extern irqreturn_t timer_interrupt(int irq, void *dev, struct pt_regs * regs);
+extern irqreturn_t timer_interrupt(int irq, void *dev);
 extern void common_init_rtc(void);
 extern unsigned long est_cycle_freq;
 
diff --git a/arch/alpha/kernel/smp.c b/arch/alpha/kernel/smp.c
index 4dc273e..596780e 100644
--- a/arch/alpha/kernel/smp.c
+++ b/arch/alpha/kernel/smp.c
@@ -515,12 +515,15 @@ smp_cpus_done(unsigned int max_cpus)
 void
 smp_percpu_timer_interrupt(struct pt_regs *regs)
 {
+	struct pt_regs *old_regs;
 	int cpu = smp_processor_id();
 	unsigned long user = user_mode(regs);
 	struct cpuinfo_alpha *data = &cpu_data[cpu];
 
+	old_regs = set_irq_regs(regs);
+
 	/* Record kernel PC.  */
-	profile_tick(CPU_PROFILING, regs);
+	profile_tick(CPU_PROFILING);
 
 	if (!--data->prof_counter) {
 		/* We need to make like a normal interrupt -- otherwise
@@ -534,6 +537,7 @@ smp_percpu_timer_interrupt(struct pt_reg
 
 		irq_exit();
 	}
+	set_irq_regs(old_regs);
 }
 
 int __init
diff --git a/arch/alpha/kernel/time.c b/arch/alpha/kernel/time.c
index 581ddcc..cf06665 100644
--- a/arch/alpha/kernel/time.c
+++ b/arch/alpha/kernel/time.c
@@ -104,7 +104,7 @@ unsigned long long sched_clock(void)
  * timer_interrupt() needs to keep up the real-time clock,
  * as well as call the "do_timer()" routine every clocktick
  */
-irqreturn_t timer_interrupt(int irq, void *dev, struct pt_regs * regs)
+irqreturn_t timer_interrupt(int irq, void *dev)
 {
 	unsigned long delta;
 	__u32 now;
@@ -112,7 +112,7 @@ irqreturn_t timer_interrupt(int irq, voi
 
 #ifndef CONFIG_SMP
 	/* Not SMP, do kernel PC profiling here.  */
-	profile_tick(CPU_PROFILING, regs);
+	profile_tick(CPU_PROFILING);
 #endif
 
 	write_seqlock(&xtime_lock);
@@ -132,7 +132,7 @@ #endif
 	while (nticks > 0) {
 		do_timer(1);
 #ifndef CONFIG_SMP
-		update_process_times(user_mode(regs));
+		update_process_times(user_mode(get_irq_regs()));
 #endif
 		nticks--;
 	}
diff --git a/include/asm-alpha/irq_regs.h b/include/asm-alpha/irq_regs.h
new file mode 100644
index 0000000..3dd9c0b
--- /dev/null
+++ b/include/asm-alpha/irq_regs.h
@@ -0,0 +1 @@
+#include <asm-generic/irq_regs.h>

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

* Re: [PATCH] minimal alpha pt_regs fixes
  2006-10-07 13:17 [PATCH] minimal alpha pt_regs fixes Al Viro
@ 2006-10-07 15:08 ` Jeff Garzik
  2006-10-07 15:14   ` Al Viro
                     ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Jeff Garzik @ 2006-10-07 15:08 UTC (permalink / raw)
  To: Al Viro, Linus Torvalds, Andrew Morton; +Cc: linux-kernel

Al Viro wrote:
> diff --git a/include/asm-alpha/irq_regs.h b/include/asm-alpha/irq_regs.h
> new file mode 100644
> index 0000000..3dd9c0b
> --- /dev/null
> +++ b/include/asm-alpha/irq_regs.h
> @@ -0,0 +1 @@
> +#include <asm-generic/irq_regs.h>


ACK, of course, but I wonder if we can do something about these 1-line 
header files.

Would it be reasonable to encourage developers to do something like

	#ifdef ARCH_HAVE_FEATURE_FOO
	#include <asm/foo.h>
	#else
	#include <asm-generic/foo.h>
	#endif

to avoid these 1-line headers?

	Jeff



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

* Re: [PATCH] minimal alpha pt_regs fixes
  2006-10-07 15:08 ` Jeff Garzik
@ 2006-10-07 15:14   ` Al Viro
  2006-10-07 17:49   ` Linus Torvalds
  2006-10-07 18:27   ` Sam Ravnborg
  2 siblings, 0 replies; 6+ messages in thread
From: Al Viro @ 2006-10-07 15:14 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Linus Torvalds, Andrew Morton, linux-kernel

On Sat, Oct 07, 2006 at 11:08:39AM -0400, Jeff Garzik wrote:
> Al Viro wrote:
> >diff --git a/include/asm-alpha/irq_regs.h b/include/asm-alpha/irq_regs.h
> >new file mode 100644
> >index 0000000..3dd9c0b
> >--- /dev/null
> >+++ b/include/asm-alpha/irq_regs.h
> >@@ -0,0 +1 @@
> >+#include <asm-generic/irq_regs.h>
> 
> 
> ACK, of course, but I wonder if we can do something about these 1-line 
> header files.
> 
> Would it be reasonable to encourage developers to do something like
> 
> 	#ifdef ARCH_HAVE_FEATURE_FOO
> 	#include <asm/foo.h>
> 	#else
> 	#include <asm-generic/foo.h>
> 	#endif

In something like linux/irq_regs.h?  Might make sense...

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

* Re: [PATCH] minimal alpha pt_regs fixes
  2006-10-07 15:08 ` Jeff Garzik
  2006-10-07 15:14   ` Al Viro
@ 2006-10-07 17:49   ` Linus Torvalds
  2006-10-07 18:27   ` Sam Ravnborg
  2 siblings, 0 replies; 6+ messages in thread
From: Linus Torvalds @ 2006-10-07 17:49 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Al Viro, Andrew Morton, linux-kernel



On Sat, 7 Oct 2006, Jeff Garzik wrote:
> 
> ACK, of course, but I wonder if we can do something about these 1-line header
> files.
> 
> Would it be reasonable to encourage developers to do something like
> 
> 	#ifdef ARCH_HAVE_FEATURE_FOO
> 	#include <asm/foo.h>
> 	#else
> 	#include <asm-generic/foo.h>
> 	#endif
> 
> to avoid these 1-line headers?

I actually think that _unconditional_ simple code is much nicer than 
conditional one.

With the current setup, we have a number of one-line trivial headers 
(which actually could be symlinks - the only downside of that is that 
regular "patch" doesn't really know about them, even if git does, and can 
handle them, including the "extended git patch" format). They are 
unconditional, so following them never implies having to grep for 
different architectures doing different things.

I personally absolutely detest the "ARCH_HAVE_FEATURE_FOO" kind of thing 
that makes different architectures behave differently. I'd much rather 
have a few small and simple files that all look the same and are totally 
obvious, except for the odd architecture that actually caused the 
arch-split in the first place.

(Also, if the files really _are_ entirely identical, at least it won't add 
any overhead at all to git - they'll all use the same backing store)

		Linus

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

* Re: [PATCH] minimal alpha pt_regs fixes
  2006-10-07 15:08 ` Jeff Garzik
  2006-10-07 15:14   ` Al Viro
  2006-10-07 17:49   ` Linus Torvalds
@ 2006-10-07 18:27   ` Sam Ravnborg
  2006-10-07 23:35     ` Kyle Moffett
  2 siblings, 1 reply; 6+ messages in thread
From: Sam Ravnborg @ 2006-10-07 18:27 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Al Viro, Linus Torvalds, Andrew Morton, linux-kernel

On Sat, Oct 07, 2006 at 11:08:39AM -0400, Jeff Garzik wrote:
> Al Viro wrote:
> >diff --git a/include/asm-alpha/irq_regs.h b/include/asm-alpha/irq_regs.h
> >new file mode 100644
> >index 0000000..3dd9c0b
> >--- /dev/null
> >+++ b/include/asm-alpha/irq_regs.h
> >@@ -0,0 +1 @@
> >+#include <asm-generic/irq_regs.h>
> 
> 
> ACK, of course, but I wonder if we can do something about these 1-line 
> header files.

It would be even more simple and future proof if we could in
some way do it so "#include <foo/bar.h>" would pick up bar.h from
asm-$(ARCH) if it exists and otherwise pick up asm-generic/bar.h.

Then we could include the generic one in asm-generic and
all architectures would include it except those that provide their
own variant. The asm-$(ARCH) specific files would need a way to include
the asm-generic version.

I have no idea handy for how to actually implment this but wanted
just to share the idea.
The trade-off is that if it gets too iplicit then suddenly users will
loose overview of how it works.

	Sam

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

* Re: [PATCH] minimal alpha pt_regs fixes
  2006-10-07 18:27   ` Sam Ravnborg
@ 2006-10-07 23:35     ` Kyle Moffett
  0 siblings, 0 replies; 6+ messages in thread
From: Kyle Moffett @ 2006-10-07 23:35 UTC (permalink / raw)
  To: Sam Ravnborg
  Cc: Jeff Garzik, Al Viro, Linus Torvalds, Andrew Morton, linux-kernel

On Oct 07, 2006, at 14:27:08, Sam Ravnborg wrote:
> It would be even more simple and future proof if we could in some  
> way do it so "#include <foo/bar.h>" would pick up bar.h from asm-$ 
> (ARCH) if it exists and otherwise pick up asm-generic/bar.h.
>
> Then we could include the generic one in asm-generic and all  
> architectures would include it except those that provide their own  
> variant. The asm-$(ARCH) specific files would need a way to include  
> the asm-generic version.
>
> I have no idea handy for how to actually implement this but wanted  
> just to share the idea. The trade-off is that if it gets too  
> implicit then suddenly users will loose overview of how it works.

Well if we changed the include dir to look like this:

   include/linux/bar.h
   include/asm/foo.h
   include/asm-powerpc/asm/foo.h
   include/asm-frv/asm/foo.h doesn't exist, defaults to generic version.

Then I suppose you could carefully order the -I directives like this:

   gcc [...] -Iinclude/asm-$(ARCH) -Iinclude [...]

The problem with that is if you only want to partially override asm/ 
foo.h, and include it from your arch-specific version.  I guess to  
solve that you could also do this:

   include/linux/bar.h
   include/asm-generic/asm/foo.h
   include/asm-powerpc/asm/foo.h
   include/asm-frv/asm/foo.h doesn't exist, defaults to generic version.

And:

   gcc [...] -Iinclude/asm-$(ARCH) -Iinclude/asm-generic -Iinclude [...]

Then you it would be possible to selectively override any headers you  
wanted too.  It also gets rid of that nasty symlink problem.  The  
only remaining trick would be teaching "headers_check" and  
"headers_install" about it.

Cheers,
Kyle Moffett


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

end of thread, other threads:[~2006-10-07 23:36 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-10-07 13:17 [PATCH] minimal alpha pt_regs fixes Al Viro
2006-10-07 15:08 ` Jeff Garzik
2006-10-07 15:14   ` Al Viro
2006-10-07 17:49   ` Linus Torvalds
2006-10-07 18:27   ` Sam Ravnborg
2006-10-07 23:35     ` Kyle Moffett

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