All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@web.de>
To: Blue Swirl <blauwirbel@gmail.com>
Cc: Lucas Meneghel Rodrigues <lmr@redhat.com>,
	Anthony Liguori <aliguori@us.ibm.com>,
	Marcelo Tosatti <mtosatti@redhat.com>,
	qemu-devel <qemu-devel@nongnu.org>, Avi Kivity <avi@redhat.com>,
	Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v2] pc: Fix and clean up PIC-to-APIC IRQ path
Date: Sat, 03 Sep 2011 20:14:14 +0200	[thread overview]
Message-ID: <4E626E76.5030504@web.de> (raw)
In-Reply-To: <CAAu8pHsk8m4B5KWg9VYWXeWov3ZvKsQN1LrU45zbn56qxatjYQ@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 3211 bytes --]

On 2011-09-03 13:37, Blue Swirl wrote:
> On Sat, Sep 3, 2011 at 11:17 AM, Jan Kiszka <jan.kiszka@web.de> wrote:
>> On 2011-09-03 10:58, Blue Swirl wrote:
>>> On Thu, Sep 1, 2011 at 9:08 AM, Jan Kiszka <jan.kiszka@siemens.com> wrote:
>>>> The master PIC is connected to the LINTIN0 of the APICs. As the APIC
>>>> currently does not track the state of that line, we have to ask the PIC
>>>> to reinject its IRQ after the CPU picked up an event from the APIC.
>>>>
>>>> This introduces pic_get_output to read the master PIC IRQ line state
>>>> without changing it. The APIC uses this function to decide if a PIC IRQ
>>>> should be reinjected on apic_update_irq. This reflects better how the
>>>> real hardware works.
>>>>
>>>> The patch fixes some failures of the kvm unit tests apic and eventinj by
>>>> allowing to enable the proper CPU IRQ deassertion when the guest masks
>>>> some pending IRQs at PIC level.
>>>>
>>>> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
>>>> ---
>>>>
>>>> Changes in v2:
>>>>  - Avoid adding pic_level to the APIC state, obtain PIC output via
>>>>   pic_get_level instead
>>>>  - Do not reassert PIC interrupt if APIC is not accepting it
>>>>  - Use apic_deliver_pic_intr for reassertion to ensure correct
>>>>   processing
>>>>
>>>> This is not as nice as the previous version /wrt the interaction of PIC
>>>> and APIC. But it avoids breaking the APIC vmstate for the sake of
>>>> internal changes, also keeping it compatible with the upcoming KVM
>>>> in-kernel APIC (that allows no easy pic_level state extraction). The
>>>> interconnection between PIC and APIC may look nicer in the future with
>>>> QOM. And in the end this just reflects the "beauty" of the x86
>>>> architecture.
>>>>
>>>>  hw/apic.c  |    4 ++++
>>>>  hw/i8259.c |   15 +++++++--------
>>>>  hw/pc.c    |    3 ---
>>>>  hw/pc.h    |    2 +-
>>>>  4 files changed, 12 insertions(+), 12 deletions(-)
>>>>
>>>> diff --git a/hw/apic.c b/hw/apic.c
>>>> index d8f56c8..8289eef 100644
>>>> --- a/hw/apic.c
>>>> +++ b/hw/apic.c
>>>> @@ -23,6 +23,7 @@
>>>>  #include "host-utils.h"
>>>>  #include "sysbus.h"
>>>>  #include "trace.h"
>>>> +#include "pc.h"
>>>>
>>>>  /* APIC Local Vector Table */
>>>>  #define APIC_LVT_TIMER   0
>>>> @@ -399,6 +400,9 @@ static void apic_update_irq(APICState *s)
>>>>     }
>>>>     if (apic_irq_pending(s) > 0) {
>>>>         cpu_interrupt(s->cpu_env, CPU_INTERRUPT_HARD);
>>>> +    } else if (apic_accept_pic_intr(&s->busdev.qdev) &&
>>>> +               pic_get_output(isa_pic)) {
>>>
>>> This is indeed ugly. Why doesn't APIC track PIC output?
>>
>> For the reasons explained above.
> 
> Breaking vmstate compatibility? Don't we have all kinds of
> compatibility stuff for this?

As I said, we do not have access to some pic_level equivalent with the
in-kernel APIC model. And I don't want to break vmstate compatibility
between user and kernel space models needlessly.

> 
> I'm not opposed to the patch as is, it's still a cleanup, but I wish
> this ugliness could be avoided.

It's primarily a bug fix now. And the ugliness level should drop again
when IRQ management will be reworked.

Jan


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 262 bytes --]

      reply	other threads:[~2011-09-03 18:14 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-27 14:16 [Qemu-devel] [PATCH] pc: Clean up PIC-to-APIC IRQ path Jan Kiszka
2011-08-28  7:10 ` Blue Swirl
2011-08-28  9:08   ` Jan Kiszka
2011-08-29 19:25 ` Anthony Liguori
2011-08-29 21:06   ` Jan Kiszka
2011-08-29 21:13     ` Avi Kivity
2011-08-29 21:18       ` Jan Kiszka
2011-08-30 19:19       ` Blue Swirl
2011-08-30 19:28         ` Jan Kiszka
2011-08-30 19:43           ` Blue Swirl
2011-08-31  8:25           ` Peter Maydell
2011-08-31 10:53             ` Jan Kiszka
2011-08-31 17:41               ` Blue Swirl
2011-08-31 18:17                 ` Jan Kiszka
2011-08-31 19:44                   ` Blue Swirl
2011-09-04 10:33                     ` Blue Swirl
2011-09-04 12:25                     ` Gleb Natapov
2011-09-03 19:54               ` Anthony Liguori
2011-09-04 12:13                 ` Jan Kiszka
2011-09-04 13:32                   ` Anthony Liguori
2011-09-04 13:36                     ` Jan Kiszka
2011-09-04 13:41                       ` Anthony Liguori
2011-09-04 13:49                         ` Jan Kiszka
2011-09-04 13:57                           ` Anthony Liguori
2011-09-04 14:37                             ` Anthony Liguori
2011-09-04 15:20                               ` Blue Swirl
2011-09-04 15:31                                 ` Anthony Liguori
2011-09-04 15:44                                   ` Blue Swirl
2011-09-05 10:44                             ` Edgar E. Iglesias
2011-09-04 14:12                         ` Avi Kivity
2011-09-04 14:43                           ` Anthony Liguori
2011-09-04 15:03                             ` Avi Kivity
2011-09-04 15:19                               ` Anthony Liguori
2011-09-04 15:34                                 ` Avi Kivity
2011-09-04 15:27                             ` Blue Swirl
2011-09-04 12:17               ` Avi Kivity
2011-09-04 12:37                 ` Jan Kiszka
2011-09-04 12:43                   ` Avi Kivity
2011-09-04 13:38                   ` Anthony Liguori
2011-09-04 13:42                     ` Jan Kiszka
2011-09-04 13:55                       ` Anthony Liguori
2011-09-04 13:35                 ` Anthony Liguori
2011-08-31  8:28         ` Avi Kivity
2011-08-31 16:59           ` Blue Swirl
2011-08-31 18:04             ` Edgar E. Iglesias
2011-08-31 18:28               ` Jan Kiszka
2011-09-01  5:58             ` Avi Kivity
2011-09-03 20:07               ` Anthony Liguori
2011-09-03 21:10                 ` Blue Swirl
2011-09-03 21:41                   ` Anthony Liguori
2011-09-04  9:27                     ` Blue Swirl
2011-09-03 19:53             ` Anthony Liguori
2011-09-03 21:01               ` Blue Swirl
2011-09-04 14:49                 ` Anthony Liguori
2011-09-05  8:38               ` Edgar E. Iglesias
2011-09-05  8:51                 ` Avi Kivity
2011-09-05  9:02                   ` Peter Maydell
2011-09-05  9:14                     ` Avi Kivity
2011-09-05  9:22                   ` Edgar E. Iglesias
2011-09-05  9:28                     ` Avi Kivity
2011-09-05 10:47                       ` Edgar E. Iglesias
2011-09-05 19:36                 ` Blue Swirl
2011-09-06  7:46                   ` Avi Kivity
2011-09-01  9:08 ` [Qemu-devel] [PATCH v2] pc: Fix and clean " Jan Kiszka
2011-09-03  8:58   ` Blue Swirl
2011-09-03 11:17     ` Jan Kiszka
2011-09-03 11:37       ` Blue Swirl
2011-09-03 18:14         ` Jan Kiszka [this message]

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=4E626E76.5030504@web.de \
    --to=jan.kiszka@web.de \
    --cc=aliguori@us.ibm.com \
    --cc=avi@redhat.com \
    --cc=blauwirbel@gmail.com \
    --cc=kraxel@redhat.com \
    --cc=lmr@redhat.com \
    --cc=mtosatti@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.