mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Ingo Oeser <ingo.oeser@informatik.tu-chemnitz.de>
To: george anzinger <george@mvista.com>
Cc: Keith Owens <kaos@ocs.com.au>, linux-kernel@vger.kernel.org
Subject: Re: 2.4.20 kernel/timer.c may incorrectly reenable interrupts
Date: Sat, 12 Apr 2003 10:55:46 +0200	[thread overview]
Message-ID: <20030412105546.H659@nightmaster.csn.tu-chemnitz.de> (raw)
In-Reply-To: <3E9731E2.9090606@mvista.com>; from george@mvista.com on Fri, Apr 11, 2003 at 02:21:38PM -0700

On Fri, Apr 11, 2003 at 02:21:38PM -0700, george anzinger wrote:
> Ingo Oeser wrote:
> > Maybe we could replace some cli/sti pairs with spinlocks? If it
> > takes more time to cli/sti than to run the whole code section
> > that will be protected by the spinlock, then it might be better
> > to use that instead and block in the IRQ dispatch code.
> 
> Not so fast there :)  The cli/sti is there to protect from "same cpu" 
> contention, i.e. this machine can come here on interrupt so don't 
> allow interrupts.  The spin lock is only good for the "other" cpus.
>
> On the other hand, a cli/sti will NOT protect from other machine 
> interrupts (baring the global cli which is not even in 2.5).

Because it isn't implemented this way? ;-)

If you have a per-CPU lock, which block in the arch-specific
IRQ-dispatch section, you can simulate cli/sti quite well.

I have more problems with the semantical difference of cli/sti
vs. spinlocks on nesting. A cli/sti will never block anything but
interrupts, a spinlock will block the caller on contention.

This should be measured. Unfortunately I don't have fast enough
hardware to notice a difference.

> The better thing to do, IMHO, is to move the work off the interrupt 
> path where only spin locks (and preemption locks) are required.
 
This is done incrementally already, so its only a matter of time.

> Another possibility is to make more use of the new read/write stuff 
> that is now being used for the xtime lock.  The idea here is that we 
> don't care if an interrupt (or the other machine) visits this data 
> while we are here as long as we know about it and can then redo what 
> we are doing.  This works very well for fetching a few words that need 
> to be fetch atomically WRT the lock.  If the fetch is not atomic (i.e. 
> was interrupted), just try again.

Not suitable for drivers. They must read the registers, set some
other registers and ACK the IRQ in the ISR. There is no way
around that. 

If the maximum latency between ISR and process context work is
small and definable by the drivers, people would offload more.

So if there would be a schedule_work_deadline() then this would
be nice. The routine called later in process context called will
be noticed, if the deadline is missed or not and can act
correctly.

This will simplify IDE (which needs those small timeouts and
could act like the stuff timed out, if the deadline is missed),
this will simplify the deadline-scheduler for IO and allow an
additional scheduling method for user space.

The scheduler changes would be one additional queue and it could
also be depth limited, since later deadlines can be added later.

We currently have timers, but they are not suitable for doing the
work only for triggering it and that's a source of complexity in
driver design.

> I haven't measured or heard of 
> measurements on this change, but I suspect that there is a significant 
> reduction in the time to do gettimeofday() because the cli/sti is not 
> on the read path any more.

I agree that these historical kind of code should be changed,
but modern drivers, which need to protect from IRQs of this
device happening while changing some registers could not do this.

They really need the spin_lock_irqsave() (which does the cli
implicitly).

Regards

Ingo Oeser

  reply	other threads:[~2003-04-12 13:50 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-04-11  6:47 Keith Owens
2003-04-11  7:15 ` george anzinger
2003-04-11  9:27   ` Ingo Oeser
2003-04-11 21:21     ` george anzinger
2003-04-12  8:55       ` Ingo Oeser [this message]
2003-04-14 21:49         ` george anzinger
2003-04-15 20:32           ` Ingo Oeser

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20030412105546.H659@nightmaster.csn.tu-chemnitz.de \
    --to=ingo.oeser@informatik.tu-chemnitz.de \
    --cc=george@mvista.com \
    --cc=kaos@ocs.com.au \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®