public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: "Cohen, Eugene" <eugene@hp.com>
Cc: Alexei Fedorov <Alexei.Fedorov@arm.com>,
	 "Andrew Fish (afish@apple.com)" <afish@apple.com>,
	"edk2-devel@lists.01.org" <edk2-devel@ml01.01.org>,
	Heyi Guo <heyi.guo@linaro.org>,
	Leif Lindholm <leif.lindholm@linaro.org>
Subject: Re: [PATCH] ArmPkg: Fix double GIC EIOR write per interrupt
Date: Mon, 8 Aug 2016 15:42:26 +0200	[thread overview]
Message-ID: <CAKv+Gu9PUp1xonLChsNuYhvYv4eQZOG6V79Fk8L78tfYznvB-g@mail.gmail.com> (raw)
In-Reply-To: <AT5PR84MB02915038C61D127E086D9A4EB41B0@AT5PR84MB0291.NAMPRD84.PROD.OUTLOOK.COM>

On 8 August 2016 at 15:22, Cohen, Eugene <eugene@hp.com> wrote:
> Guys, sorry to join so late, something about timezones...  Let me try to provide some context and history.
>
>> > it does change the contract we have with registered interrupt handlers
>>
>> Looks like it does not:
>> From edk2\EmbeddedPkg\Include\Protocol\HardwareInterrupt.h:
>>
>> " Abstraction for hardware based interrupt routine
>>
>>   ...The driver implementing
>>   this protocol is responsible for clearing the pending interrupt in the
>>   interrupt routing hardware. The HARDWARE_INTERRUPT_HANDLER is
>> responsible
>>   for clearing interrupt sources from individual devices."
>
> I think you are reading more deeply into this verbiage than was intended.  From a separation-of-concerns perspective one driver is concerned with writing to the hardware that generates the interrupt (handler) and another is concerned with writing to the hardware for the interrupt controller to signal the end of interrupt.  So all this is saying is that "the code that touches the interrupt controller is implemented in the driver that publishes this protocol".  It does not say how this code is activated, only who is responsible for poking the register.
>
> The historical expectation is that the handler driver calls the EOI interface in the protocol.  (If it was the opposite then this interface wouldn't even exist since the interrupt controller driver could just do it implicitly.)  You're next question will probably be why it was designed this way - for that we'll have to ask Andrew Fish (added).
>
> I did a little digging and see that the PC-AT chipset implemented an 8259 interrupt protocol (IntelFrameworkPkg\Include\Protocol\Legacy8259.h) that is quite similar to HwInterrupt.  Notice the explicit EndOfInterrupt interface here and how it's used by the timer driver at PcAtChipsetPkg\8254TimerDxe\Timer.c(88).
>
> Given this I asked that you keep the EndOfInterrupt in the handler driver(s) and remove the auto-EOI in the interrupt controller driver, at least for cases where a driver handled the interrupt.
>
> Feel free to clarify the text in the protocol header to align with this - the current wording is not very clear.
>

Thanks for the context. I did some archaeology of my own, and it turns
out that this code was introduced by Andrew in git commit
1bfda055dfbc52678 (svn #11293) more than 5 years ago.

In any case, it appears we are in agreement that it is in fact
incorrect (and deviates from the other implementations) to signal EOI
in the GIC driver, and so I suppose Alexei's patch is good (and we
only need to clarify the comment that he quoted in this thread).

My primary concern was that we change the contract with existing
handlers, but if there was a contract to begin with, we were already
violating it, and so any out of tree breakage is not really our
problem :-)

Thanks all,
Ard.


  reply	other threads:[~2016-08-08 13:42 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-05 16:59 [PATCH] ArmPkg: Fix double GIC EIOR write per interrupt evan.lloyd
2016-08-06  8:24 ` Ard Biesheuvel
2016-08-08 10:25   ` Alexei Fedorov
2016-08-08 10:32     ` Ard Biesheuvel
2016-08-08 10:40       ` Alexei Fedorov
2016-08-08 10:44         ` Ard Biesheuvel
2016-08-08 10:48           ` Alexei Fedorov
2016-08-08 10:49             ` Ard Biesheuvel
2016-08-08 10:56               ` Alexei Fedorov
2016-08-08 10:58                 ` Ard Biesheuvel
2016-08-08 11:06                   ` Alexei Fedorov
2016-08-08 11:08                     ` Ard Biesheuvel
2016-08-08 11:51                       ` Ard Biesheuvel
2016-08-08 13:22                         ` Cohen, Eugene
2016-08-08 13:42                           ` Ard Biesheuvel [this message]
2016-08-08 13:50                             ` Ard Biesheuvel
2016-08-10 17:38                               ` Evan Lloyd
2016-08-10 19:34                                 ` Cohen, Eugene
2016-08-10 20:31                                   ` Evan Lloyd
2016-08-10 21:06                                     ` Cohen, Eugene

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-list 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=CAKv+Gu9PUp1xonLChsNuYhvYv4eQZOG6V79Fk8L78tfYznvB-g@mail.gmail.com \
    --to=devel@edk2.groups.io \
    /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