linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Francois Romieu <romieu@fr.zoreil.com>
To: Pascal CHAPPERON <pascal.chapperon@wanadoo.fr>
Cc: Juha Laiho <Juha.Laiho@iki.fi>,
	Andrew Hutchings <info@a-wing.co.uk>,
	linux-kernel@vger.kernel.org, vinay kumar <b4uvin@yahoo.co.in>,
	jgarzik@pobox.com
Subject: Re: sis190
Date: Fri, 1 Jul 2005 01:37:32 +0200	[thread overview]
Message-ID: <20050630233732.GA16886@electric-eye.fr.zoreil.com> (raw)
In-Reply-To: <20935204.1119789594907.JavaMail.www@wwinf0901>

Pascal CHAPPERON <pascal.chapperon@wanadoo.fr> :
[...]
> 1) sis190 freezes the box when kernel PREEMPT is enabled :
> 
> I made many tries, but i could not solve it;
> - it does not occur while receiving huge files.
> - it does not occur when only a few packets are
>   transmitted (remote connection, ls, find)
> - it occurs only while transmiting huge files AND
>   trying to do someting else (open a new term,...)
> - I could transfer a huge file (700MB) several times
>   as i was at the console (and i could switch to another
> console to perform find, ls,... during the transfer).

Are you saying that PREEMPT and X are both needed to freeze the box ?

If so, could you try preempt + console + rsync (+ dd from disk) ?

> I managed the system so the sis190 had its own IRQ, but it
> made no difference.
> 
> As i suspected nvidia driver, i switched to nv driver : no result.

Please keep binary modules out of the loop until the things are stable.
I do not want to try and diagnose a bug in a system wherein such an amount
of unknown code was loaded (even if it was unloaded later).

> It seems to me that a task inside the sis190_tx_interrupt() is 
> not protected against preemption (and it is probably the same
> on a SMP not prempted).
> 
> I tried to play with spinlocks, but with no result :
> @@ -621,6 +621,7 @@ static irqreturn_t sis190_interrupt(int
>         void __iomem *ioaddr = tp->mmio_addr;
>         int handled = 0;
>         int boguscnt;
> +       unsigned long flags;
> 
>         for (boguscnt = max_interrupt_work; boguscnt > 0; boguscnt--) {
>                 u32 status = SIS_R32(IntrStatus);
> @@ -651,9 +652,9 @@ static irqreturn_t sis190_interrupt(int
>                         sis190_rx_interrupt(dev, tp, ioaddr);
> 
>                 if (status & TxQ0Int) {
> -                       spin_lock(&tp->lock);
> +                       spin_lock_irqsave(&tp->lock, flags);
>                         sis190_tx_interrupt(dev, tp, ioaddr);
> -                       spin_unlock(&tp->lock);
> +                       spin_unlock_irqrestore(&tp->lock, flags);

Afaik the irq handler is already protected against reentrancy (see
kernel/irq.c::__do_IRQ) and softirq (see arch/xxx/kernel/irq.c::irq_exit).
So this change should not make a difference.

[...]
> @@ -581,6 +581,7 @@ static void sis190_tx_interrupt(struct n
>                                 struct sis190_private *tp, void __iomem *ioaddr)
>  {
>         unsigned int tx_left, dirty_tx = tp->dirty_tx;
> +       unsigned long flags;
> 
>         for (tx_left = tp->cur_tx - dirty_tx; tx_left > 0; tx_left--) {
>                 unsigned int entry = dirty_tx % NUM_TX_DESC;
> @@ -604,10 +605,12 @@ static void sis190_tx_interrupt(struct n
>                 dirty_tx++;
>         }
> 
> +       spin_lock_irqsave(&tp->lock, flags);
>         if (tp->dirty_tx != dirty_tx) {
>                 tp->dirty_tx = dirty_tx;
>                 netif_wake_queue(dev);
>         }
> +       spin_unlock_irqrestore(&tp->lock, flags);
>  }

The irqsave/restore should not be needed for the same reason as above.

> In fact, i don't know where are the critical sections...

In the Tx path the critical section is related to netif_{start/stop}_queue.

> 2) sis190 freezes the box when the link partner is
> a r8169 forced in 10 full autoneg off (preempted or not
> preempted kernel) :

The r8169 driver will not necessarily do what you would expect when you
autoneg it off and it faces an unstable driver. I'll send an update for it.

Any TX timeout message on the console ? Freeze == sysrq has no effect
and keyboard leds do not blink any more ?

There is an updated version at 
http://www.zoreil.com/~romieu/sis190/20050630-2.6.13-rc1-sis190-test.patch

It would be nice to know how it behaves wrt preempt (no need to experiment
with the media management), especially if you can describe the freeze more
specifically.

--
Ueimor

  reply	other threads:[~2005-06-30 23:40 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-06-26 12:39 sis190 Pascal CHAPPERON
2005-06-30 23:37 ` Francois Romieu [this message]
  -- strict thread matches above, loose matches on Subject: below --
2005-07-10 13:23 sis190 Pascal CHAPPERON
2005-07-09 13:25 sis190 Pascal CHAPPERON
2005-07-09 20:57 ` sis190 Francois Romieu
2005-07-06 15:58 sis190 Pascal CHAPPERON
2005-07-06 21:29 ` sis190 Francois Romieu
2005-07-02 10:52 sis190 Pascal CHAPPERON
2005-07-02 11:33 ` sis190 Francois Romieu
2005-07-04 23:30 ` sis190 Francois Romieu
2005-06-19 10:17 sis190 Pascal CHAPPERON
2005-06-21 23:02 ` sis190 Francois Romieu
2005-06-17 11:14 sis190 Pascal CHAPPERON
2005-06-17 18:22 ` sis190 Francois Romieu
2005-06-15 15:22 sis190 Pascal CHAPPERON
2005-06-16 22:34 ` sis190 Francois Romieu
2005-06-14 14:14 sis190 Pascal CHAPPERON
2005-06-14 20:04 ` sis190 Francois Romieu
2005-06-13  8:19 sis190 Pascal CHAPPERON
2005-06-13 21:39 ` sis190 Francois Romieu
2005-06-11  9:39 sis190 Pascal CHAPPERON
2005-06-11 10:56 ` sis190 Francois Romieu
2005-06-07 22:37 sis5513.c patch Andrew Hutchings
2005-06-07 22:57 ` Francois Romieu
2005-06-07 23:20   ` Andrew Hutchings
2005-06-08 22:51     ` sis190 (was: Re: sis5513.c patch) Francois Romieu
2005-06-09  4:54       ` sis190 Andrew Hutchings
2005-06-09 12:02       ` sis190 Andrew Hutchings
2005-06-09 21:18         ` sis190 Francois Romieu
2005-06-10 13:55           ` sis190 Andrew Hutchings
2005-06-10 23:41             ` sis190 Francois Romieu

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=20050630233732.GA16886@electric-eye.fr.zoreil.com \
    --to=romieu@fr.zoreil.com \
    --cc=Juha.Laiho@iki.fi \
    --cc=b4uvin@yahoo.co.in \
    --cc=info@a-wing.co.uk \
    --cc=jgarzik@pobox.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pascal.chapperon@wanadoo.fr \
    /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;
as well as URLs for NNTP newsgroup(s).