qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] pc: Clean up PIC-to-APIC IRQ path


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH] pc: Clean up PIC-to-APIC IRQ path
Date: Sat, 03 Sep 2011 14:53:31 -0500
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110516 Lightning/1.0b2 Thunderbird/3.1.10

On 08/31/2011 11:59 AM, Blue Swirl wrote:
On Wed, Aug 31, 2011 at 8:28 AM, Avi Kivity<address@hidden>  wrote:
On 08/30/2011 10:19 PM, Blue Swirl wrote:


  We need some kind of two phase restore. In the first phase all state is
  restored; since some of that state drivers outputs that are input to
other
  devices, they may experience an edge, and we need to supress that.  In
the
  second phase edge detection is unsupressed and the device goes live.

No. Devices may not perform any externally visible activities (like
toggle a qemu_irq) during or after load because 1) qemu_irq is
stateless and 2) since the receiving end is also freshly loaded, both
states are already in synch without any calls or toggling.

That makes it impossible to migrate level-triggered irq lines.  Or at least,
the receiver has to remember the state, instead of (or in addition to) the
sender.

Both ends probably need to remember the state. That should work
without any multiphase restores and transient suppressors.

It might be also possible to introduce stateful signal lines which
save and restore their state, then the receiving end could check what
is the current level. However, if you consider that the devices may be
restored in random order, if the IRQ line device happens to be
restored later, the receiver would still get wrong information. Adding
priorities could solve this, but I think stateless IRQs are the only
sane way.

We shouldn't really use the term IRQ as it's confusing. I like the term "pin" better because that describes what we're really talking about.

qemu_irq is designed oddly today because is represents something that is intrinsically state (whether a pin is high or low) with an edge notification with the assumption that the state is held somewhere else (which is usually true).

Modelling stateful pins is useful though for doing something like introspecting pin levels, supporting live migration, etc.

The way this works in QOM right now is that the Pin object has a level state that can be queried but it also has the ability to register for notifications on level change.

The edge change signal isn't registered until realize. This means that you can connect all of the device models, restore all of the pin states, and then realize the device model all at once. At the point of realize, all of the devices have the right pin levels so each device can add their edge change signals and read the incoming pins and respond accordingly.

Regards,

Anthony Liguori






reply via email to

[Prev in Thread] Current Thread [Next in Thread]