mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Alex Ivchenko <aivchenko@ueidaq.com>
To: root@chaos.analogic.com
Cc: torvalds@transmeta.com, linux-kernel@vger.kernel.org
Subject: PROBLEM SOLVED: 2.4.x SPINLOCKS behave differently then 2.2.x
Date: Wed, 18 Jul 2001 19:04:08 -0400	[thread overview]
Message-ID: <3B5615E8.B838D6BD@ueidaq.com> (raw)

Richard,

Linus Torvalds <torvalds@transmeta.com> wrote:
> 
> Richard B. Johnson <root@chaos.analogic.com> wrote:
> >    ticks = 1 * HZ;        /* For 1 second */
> >    while((ticks = interruptible_sleep_on_timeout(&wqhead, ticks)) > 0)
> >                  ;
> Don't do this.
>
> Imagine what happens if a signal comes in and wakes you up? The signal
> will continue to be pending, which will make your "sleep loop" be a busy
> loop as you can never go to sleep interruptibly with a pending signal.

Well, the problem was quite different compare to what I thought.

Our hardware requires that once you start talking to firmware you cannot let
anybody to interrupt you.
Thus, I lazily put in all "magic" handlers (read, write, ioctl):

my_ioctl() {
... do entry stuff
_fw_spinlock // = spin_lock_irqsave(...);

.. do my stuff (nobody could interrupt me)

_fw_spinunlock // = spin_lock_irqrestore(...);
}

Everything worked fine under 2.2.x (I knew that this was a shortcut!!!)
In 2.4.x I could not call wake_up_interruptible() while in spinlock 
(and it's clearly understandable).

Now it seems that I have to grab and release spinlock each time I talk to the board,
exactly as I did in NT:
     KeAcquireSpinLock(&Adapter->DeviceLock, &oldIrql);
     if (KeSynchronizeExecution(Adapter->InterruptObject, PdAdapterEnableInterrupt, &Context));
     KeReleaseSpinLock(&Adapter->DeviceLock, oldIrql);

What d'u think?

-- 
Regards,
Alex

--
Alex Ivchenko, Ph.D.
United Electronic Industries, Inc.
"The High-Performance Alternative (tm)"
--
10 Dexter Avenue
Watertown, Massachusetts 02472
Tel: (617) 924-1155 x 222 Fax: (617) 924-1441
http://www.ueidaq.com

             reply	other threads:[~2001-07-18 23:03 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-07-18 23:04 Alex Ivchenko [this message]
2001-07-19  0:59 ` Linus Torvalds
2001-07-19 11:41 ` Richard B. Johnson

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=3B5615E8.B838D6BD@ueidaq.com \
    --to=aivchenko@ueidaq.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=root@chaos.analogic.com \
    --cc=torvalds@transmeta.com \
    /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®