Re: [PATCH] FRV: do_gettimeofday() should no longer use tickadj

Ingo Molnar
2006-09-06T13:04:42Z

* David Howells <dhowells@redhat.com> wrote:

> Ingo Molnar <mingo@elte.hu> wrote:
>
> > btw., would be nice to convert it to genirq (and irqchips) too =B-) That
> > would solve the kind of disable_irq_lockdep() breakage that was reported
> > recently.
>
> I can think of reasons for not using that stuff also.
>
> (1) Passing "struct pt_regs *regs" around is a complete waste of
> resources on FRV. It's in GR28 at all times and can thus be
> accessed directly.

we'll get rid of that pt_regs thing centrally, from all drivers at once
- there's upstream buy-in for that already, and Thomas already generated
a test-patch for that a few months ago. But it's not a big issue right
now.

> (2) All the little operations functions cause unnecessary jumping,
> jumps that icache lookahead can't predict because they're
> register-indirect.

this shouldnt be a big issue either - we use indirect jumps all around
the kernel. CPUs are either smart enough to predict it, or they simply
dont have that high penalties. (and if they have high penalties but dont
optimize for it then genirq will be the last of their worries. The VFS
and the MM is full of function pointers.)

> (3) ACK'ing and controlling interrupts has to be done by groups.

please be more specific, how is this not possible via genirq?

> (4) No account is taken of interrupt priority.

hm, i'm not sure what you mean - could you be more specific?

> (5) The FRV CPU doesn't tell me which IRQ source fired. Much of the
> code I've got is stuff to try and work it out. I could just
> blindly poll all the sources attached to a particular interrupt
> level, but that seemssomehow less efficient.

but ... somehow the current FRV code does figure out which IRQ source
fired, right? How is that a hindrance for a genirq/irqchips based
design?

> BTW, have you looked at my patch to fix lockdep yet?

oops, i missed it - just acked it. (This problem too was a side-effect
of FRV having its own IRQ layer.)

Ingo