From: Alistair Francis <alistair23@gmail.com>
To: LIU Zhiwei <zhiwei_liu@c-sky.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
"qemu-devel@nongnu.org Developers" <qemu-devel@nongnu.org>
Subject: Re: Question about edge-triggered interrupt
Date: Thu, 11 Mar 2021 15:45:41 -0500 [thread overview]
Message-ID: <CAKmqyKPXRLWWZnv51ApKwQurn-etQqLxW3or2pFgFH+zONpHjw@mail.gmail.com> (raw)
In-Reply-To: <50fb9541-095d-18e8-1145-662f594600b6@c-sky.com>
On Thu, Mar 11, 2021 at 11:21 AM LIU Zhiwei <zhiwei_liu@c-sky.com> wrote:
>
>
>
> On 2021/3/11 21:17, Peter Maydell wrote:
> > On Thu, 11 Mar 2021 at 12:59, LIU Zhiwei <zhiwei_liu@c-sky.com> wrote:
> >> From the specification, I find that software will not clean the pending bit on interrupt controller via a register write.
> >>
> >> "When a vectored interrupt is selected and serviced, the hardware will automatically clear the
> >>
> >> corresponding pending bit in edge-triggered mode. In this case, software does not need to clear
> >>
> >> pending bit at all in the service routine."
> >>
> >> Hardware can always select a pending interrupt as it is cycle-driven. But QEMU is event-driven.
> >> I don't know if there is a chance to select other pending interrupts after serving the selected interrupt.
> > Something must change that the hardware (and thus the model) can use to
> > determine that it needs to do something else. The interrupt controller
> > must be able to tell when the interrupt is "selected and serviced"
> > somehow.
> That's a case I can't understand.
>
> 1. An device causes an edge-triggered interrupt A.
> 2. The interrupt controller sample the interrupt A, and setting pending
> bit for A.
> 3. The interrupt controller select the interrupt A to CPU and clean
> the pending bit for A(according to the specification).
I'm not a CLIC expert but from what I can tell I think the interrupt
is only cleared after being read.
The key lines in the spec are:
"When a vectored interrupt is selected and serviced, the hardware will
automatically clear the corresponding pending bit in edge-triggered
mode."
and
"The xnxti CSR can be used by software to service the next horizontal
interrupt..."
The C-ABI code (https://github.com/riscv/riscv-fast-interrupt/blob/master/clic.adoc#81-c-abi-trampoline-code)
seems to say something similar
csrrsi a0, mnxti, MIE # Get highest current interrupt and enable
interrupts.
# Will return original interrupt if no
others appear. (6)
Does that sound right?
Alistair
> 4. CPU start to execute the A's service routine.
> 5. Another device causes interrupt B.
> 6. The interrupt controller sample the interrupt B, and setting pending
> bit for B.
> 7. As B's priority is lower than A, it can't preempt A's service routine.
> 8. A's service routine return.
> 9. No other interrupt comes after B.
>
> After the sequence, B is pending in interrupt controller, and has no
> chance to be selected by interrupt controller.
> A's service routine will neither write interrupt controller's register
> nor device's register.
>
> In my RTOS case, the interrupt A here is really a software interrupt.
> Just for clarity here.
>
> Thanks for sharing your ideas.
>
> Zhiwei
> >
> > thanks
> > -- PMM
>
>
next prev parent reply other threads:[~2021-03-11 20:48 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-11 2:57 Question about edge-triggered interrupt LIU Zhiwei
2021-03-11 9:33 ` Peter Maydell
2021-03-11 12:59 ` LIU Zhiwei
2021-03-11 13:17 ` Peter Maydell
2021-03-11 16:01 ` LIU Zhiwei
2021-03-11 16:07 ` Peter Maydell
2021-03-11 16:39 ` LIU Zhiwei
2021-03-11 16:50 ` Peter Maydell
2021-03-12 9:19 ` LIU Zhiwei
2021-03-12 10:05 ` Peter Maydell
2021-03-11 20:45 ` Alistair Francis [this message]
2021-03-12 9:06 ` LIU Zhiwei
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=CAKmqyKPXRLWWZnv51ApKwQurn-etQqLxW3or2pFgFH+zONpHjw@mail.gmail.com \
--to=alistair23@gmail.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=zhiwei_liu@c-sky.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 NNTP newsgroup(s).