9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
From: Dan Cross <crossd@gmail.com>
To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net>
Subject: Re: [9fans] Missing interrupts in 9pxeload?
Date: Fri,  5 Jun 2009 16:49:32 -0400	[thread overview]
Message-ID: <aa7e41150906051349u1a7b5661pf6eb19f940bcf1db@mail.gmail.com> (raw)
In-Reply-To: <a670439cab10dcc08e8db1ab3e3b5ac2@quanstro.net>

On Fri, Jun 5, 2009 at 2:28 PM, erik quanstrom<quanstro@quanstro.net> wrote:
>> I am attempting to PXE boot it from my file/auth/boot/cpu server (the
>> aforementioned machine that is having some problems).  The machine
>> DHCP's fine, and will load 9pxeload via TFTP, but then hangs.  I
>> started playing around with 9pxeload to see what was going on,
>> including updating the driver in /sys/src/boot/pc using Erik's latest
>> from his directory on sources, but still no go.  I finally traced
>> through the code far enough to see that it is getting stuck in the
>> wait() routine in ether.c; that is defined in l.s, and just calls

(Argh; it looks like I cut a line out of my original message.  Mea
culpa; the function I referred to in l.s is the idle() routine).

>> 'HLT' and 'RET'.  Ie, do nothing until you receipt of an interrupt and
>> return.  However, no interrupts ever arrive; modifying wait() to
>> comment out the call to idle() and then printing m->ticks every
>> million or so iterations through the loop shows that m->ticks doesn't
>> change.  It's as if all interrupts somehow got turned off prior to the
>> call to wait().  Has anyone else seen this?  Could there be something
>> somewhere that's disabling interrupts that I should look into?  Could
>> things be being routed weirdly on an Atom processor?
>
> how are you verifying that this machine isn't getting any
> interrupts?  the wait loop will loop if an interrupt is rx'd
> unless ring->owner != owner or it times out.

I verified by modifying wait() and performing several experiments.
For instance, manually inspecting (via a print() statement) the value
of, e.g., m->ticks and noting that it doesn't change.  Since it is
incremented in clockintr(), I'd expect it to if the machine was
servicing clock interrupts, but it stays as either '2' or '3'
depending on what else happens on the machine before it gets into
wait() (e.g., what debugging statements I add)..  Further, the call to
idle() never returns, no matter what happens that *should* be
generating an interrupt: entering key strokes on the keyboard, mouse
clicks, sending packets directly to the Ethernet interface by mucking
with the arp tables on a different machine and running ping from there
or sending to the broadcast address, etc.  If nothing else, I'd expect
clock interrupts to disrupt the HLT and thus make idle() return.  But
none of that happens.

If I comment out the call to idle() (which is how I see that m->ticks
never changes) then wait() just loops forever.

>  are you saying that wait doesn't even timeout?

That's exactly what I'm saying.

> or do you mean that it's not getting any ethernet interrupts?

It ain't getting any interrupts period: none from the ethernet, and
not even from the clock.  Of it if is, they're doing really strange
things that I cannot understand.  Or my understanding of these things
is even worse than I thought that it was.

> what irq is being enabled by ether8269.c?

According to the status messages, IRQ 11.

I should note that the machine can successfully boot (and run) OpenBSD
via PXE (by first loading the OpenBSD PXE loader and then loading and
booting an OpenBSD miniroot), so I don't think it's a hardware
problem.  That the clock doesn't seem to be interrupting at all and
that I pulled a new RTL8169 driver out of your directory on sources
and wedged it into 9pxeload with the same results makes me think that
it's not an ethernet driver issue.  I suspect that either the
interrupt vector is being incorrectly set or corrupted, or that
interrupts are somehow being disabled and never re-enabled.  The
latter doesn't seem particularly likely to me.

        - Dan C.



  reply	other threads:[~2009-06-05 20:49 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-04 20:38 Dan Cross
2009-06-05 18:28 ` erik quanstrom
2009-06-05 20:49   ` Dan Cross [this message]
2009-06-05 21:30     ` balaji
2009-06-05 22:18       ` Dan Cross
2009-06-06  2:18         ` erik quanstrom
2009-06-06  6:57           ` Dan Cross
2009-06-06 15:00             ` erik quanstrom
2009-06-06  2:19     ` erik quanstrom

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=aa7e41150906051349u1a7b5661pf6eb19f940bcf1db@mail.gmail.com \
    --to=crossd@gmail.com \
    --cc=9fans@9fans.net \
    /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).