From: Andrew Lunn <andrew@lunn.ch>
To: Joe Porthouse <jporthouse@toptech.com>
Cc: ecos-discuss@ecos.sourceware.org
Subject: Re: [ECOS] DSR stops running after heavy interrupts.
Date: Thu, 06 Apr 2006 21:19:00 -0000 [thread overview]
Message-ID: <20060406211847.GH12221@lunn.ch> (raw)
In-Reply-To: <MDAEMON-F200604061708.AA084954md50000037649@toptech.com>
On Thu, Apr 06, 2006 at 05:08:45PM -0400, Joe Porthouse wrote:
> Stefan, thanks. I'm glad to know I'm not the only one experiencing this
> problem.
>
> I have made a little more progress.
>
> I still can't explain the issues with the code listed in my first message
> with the code checking the return value from the ISR, but I believe it is
> somehow working correctly. I still believe there may be a problem with R4
> being checked instead of R0. I did verify that the memory was the same as
> my code window, as well as the flash image.
>
> This is what I did find.
>
> DSR calls are being added to the table... thousands of them... just not
> getting serviced. The all calls that lead to "call_pending_DSRs" seem to
> originate from the unlock_inner() routine getting called. This routine
> stops getting called when the problem occurs. (you can see the logic below)
>
>
> inline void Cyg_Scheduler::unlock()
> {
> // This is an inline wrapper for the real scheduler unlock function in
> // Cyg_Scheduler::unlock_inner().
>
> // Only do anything if the lock is about to go zero, otherwise we simply
>
> // decrement and return. As with lock() we do not need any special code
> // to decrement the lock counter.
>
> CYG_INSTRUMENT_SCHED(UNLOCK,get_sched_lock(),0);
>
> HAL_REORDER_BARRIER();
>
> cyg_ucount32 __lock = get_sched_lock() - 1;
>
> if( __lock == 0 )
> unlock_inner(0);
> else
> set_sched_lock(__lock);
>
> HAL_REORDER_BARRIER();
> }
>
> Upon examination the __lock value is "6" when unlock() is called at the end
> of the ISR, thus unlock_inner never gets called. If I get the variable
> location in the get_sched_lock() back to 1, my DSR calls resume.
> Mmmmmmm....
>
> So somehow locks are being done without unlocks. I am at a loss to figure
> out how this is occurring since I do not make lock calls in any of my code.
> Could interrupt preemption somehow be occurring? Does the
> hal_disable/enable interrupt calls mess with the lock?
>
> Any good ideas on how to track this down?
Kernel instrumentation.
CYG_INSTRUMENT_SCHED(UNLOCK,get_sched_lock(),0);
locks and unlocks are logged. See if you can find a case of a lock
without an unlock.
Andrew
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
next prev parent reply other threads:[~2006-04-06 21:19 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-04-05 21:09 Joe Porthouse
2006-04-06 6:49 ` Andrew Lunn
2006-04-06 9:02 ` Stefan Sommerfeld
2006-04-06 21:09 ` Joe Porthouse
2006-04-06 21:19 ` Andrew Lunn [this message]
2006-04-08 4:18 ` [ECOS] DSR stops running after heavy interrupts. Bug found? Joe Porthouse
2006-04-09 12:33 ` Andrew Lunn
2006-04-10 4:50 ` [ECOS] " Sergei Organov
2006-04-10 9:36 ` Nick Garnett
2006-04-10 10:44 ` Sergei Organov
2006-04-10 10:59 ` Nick Garnett
2006-04-10 11:15 ` Sergei Organov
2006-04-10 13:20 ` Joe Porthouse
2006-04-10 16:41 ` [ECOS] Re: DSR stops running after heavy interrupts. Spurious Interrupt! Joe Porthouse
2006-04-10 17:20 ` Nick Garnett
2006-04-10 17:44 ` Andrew Lunn
2006-04-10 20:49 ` Joe Porthouse
2006-04-11 4:07 ` Sergei Organov
2006-04-11 8:31 ` Nick Garnett
2006-04-11 4:15 ` Sergei Organov
2006-04-11 8:43 ` Nick Garnett
2006-04-13 7:58 ` [ECOS] How to use the ARM directive DCB in Vectors.S Birahim Larou Fall
2006-04-13 13:28 ` Andrew Lunn
2006-04-13 13:32 ` Birahim Larou Fall
2006-04-21 7:40 ` [ECOS] " Daniel Néri
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=20060406211847.GH12221@lunn.ch \
--to=andrew@lunn.ch \
--cc=ecos-discuss@ecos.sourceware.org \
--cc=jporthouse@toptech.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).