qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 6/8] spapr: move interrupt allocator to xics


From: Alexey Kardashevskiy
Subject: Re: [Qemu-devel] [PATCH 6/8] spapr: move interrupt allocator to xics
Date: Mon, 14 Apr 2014 17:41:00 +1000
User-agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0

On 04/14/2014 05:34 PM, Alexander Graf wrote:
> 
> On 11.04.14 18:30, Alexey Kardashevskiy wrote:
>> On 04/12/2014 02:15 AM, Alexander Graf wrote:
>>> On 11.04.14 18:01, Alexey Kardashevskiy wrote:
>>>> On 04/12/2014 01:38 AM, Alexander Graf wrote:
>>>>> On 11.04.14 17:27, Alexey Kardashevskiy wrote:
>>>>>> On 04/12/2014 12:58 AM, Alexander Graf wrote:
>>>>>>> On 11.04.14 16:50, Alexey Kardashevskiy wrote:
>>>>>>>> On 04/11/2014 11:58 PM, Alexander Graf wrote:
>>>>>>>>> On 11.04.2014, at 14:38, Alexey Kardashevskiy <address@hidden> wrote:
>>>>>>>>>
>>>>>>>>>> On 04/11/2014 07:24 PM, Alexander Graf wrote:
>>>>>>>>>>> On 10.04.14 16:43, Alexey Kardashevskiy wrote:
>>>>>>>>>>>> On 04/10/2014 11:26 PM, Alexander Graf wrote:
>>>>>>>>>>>>> On 10.04.14 15:24, Alexey Kardashevskiy wrote:
>>>>>>>>>>>>>> On 04/10/2014 10:51 PM, Alexander Graf wrote:
>>>>>>>>>>>>>>> On 14.03.14 05:18, Alexey Kardashevskiy wrote:
>>>>>>>>>>>>>>>> The current allocator returns IRQ numbers from a pool and
>>>>>>>>>>>>>>>> does not
>>>>>>>>>>>>>>>> support IRQs reuse in any form as it did not keep track of
>>>>>>>>>>>>>>>> what it
>>>>>>>>>>>>>>>> previously returned, it only had the last returned IRQ.
>>>>>>>>>>>>>>>> However migration may change interrupts for devices
>>>>>>>>>>>>>>>> depending on
>>>>>>>>>>>>>>>> their order in the command line.
>>>>>>>>>>>>>>> Wtf? Nonono, this sounds very bogus and wrong. Migration
>>>>>>>>>>>>>>> shouldn't
>>>>>>>>>>>>>>> change
>>>>>>>>>>>>>>> anything.
>>>>>>>>>>>>>> I put wrong commit message. By change I meant that the default
>>>>>>>>>>>>>> state
>>>>>>>>>>>>>> before
>>>>>>>>>>>>>> the destination guest started accepting migration is different
>>>>>>>>>>>>>> from
>>>>>>>>>>>>>> what
>>>>>>>>>>>>>> the destination guest became after migration finished. And
>>>>>>>>>>>>>> migration
>>>>>>>>>>>>>> cannot
>>>>>>>>>>>>>> avoid changing this default state.
>>>>>>>>>>>>> Ok, why is the IRQ configuration different?
>>>>>>>>>>>> Because QEMU creates devices in the order as in the command line,
>>>>>>>>>>>> and
>>>>>>>>>>>> libvirt changes this order - the XML used to create the guest and
>>>>>>>>>>>> the
>>>>>>>>>>>> XML
>>>>>>>>>>>> which is sends during migration are different. libvirt thinks it
>>>>>>>>>>>> is ok
>>>>>>>>>>>> while it keeps @reg property for (for example) spapr-vscsi devices
>>>>>>>>>>>> but it
>>>>>>>>>>>> is not because since the order is different, devices call IRQ
>>>>>>>>>>>> allocator in
>>>>>>>>>>>> different order and get different IRQs.
>>>>>>>>>>> So your patch migrates the current IRQ configuration, but once you
>>>>>>>>>>> restart
>>>>>>>>>>> the virtual machine on the destination host it will have different
>>>>>>>>>>> IRQ
>>>>>>>>>>> numbering again, right?
>>>>>>>>>> No, why? IRQs are assigned at init time from realize() callbacks
>>>>>>>>>> (and
>>>>>>>>>> survive reset) or as a part of ibm,change-msi rtas call which
>>>>>>>>>> happens in
>>>>>>>>>> the same order as it only depends on pci addresses and we do not
>>>>>>>>>> change
>>>>>>>>>> this either.
>>>>>>>>> Ok, let me rephrase. If I shut the machine down because I'm doing
>>>>>>>>> on-disk hibernate and then boot it back up, will the guest find the
>>>>>>>>> same
>>>>>>>>> configuration?
>>>>>>>> I do not understand what you mean by this. Hibernation by the guest OS
>>>>>>>> itself or by QEMU? If this involves QEMU exit and QEMU start - then
>>>>>>>> yes,
>>>>>>> by the guest OS. The host will only see a genuine "shutdown" event. The
>>>>>>> guest OS will expect the machine to look *the exact same* as before the
>>>>>>> shutdown.
>>>>>> Ok. So. I have to implement "irq" property everywhere (PHB is missing
>>>>>> INTA/B/C/D now) and check if they did not change during migration via
>>>>>> those
>>>>> Hrm. Not sure. Maybe it'd make sense to join next week's call on platform
>>>>> device creation. The problem seems pretty closely related.
>>>> What are those platform devices and what are you going to discuss exactly?
>>> Devices that don't have a unified interrupt routing scheme like PCI where
>>> you just link lines A/B/C/D to your controller and you're good to go.
>> Ah. VIO in my case.
>>
>>
>>
>>>>>> VMSTATE.*EQUAL. Correct?
>>>>> Why would you need this? I think we already said a couple dozen times
>>>>> that
>>>>> configuration matching is a bigger problem, no?
>>>> For debug! It is not needed in general, yes.
>>>>
>>>>
>>>>>> If so (more or less), I still would like to keep patches 1..7.
>>>>>> In fact, the first one is independent and we need it anyway.
>>>>>> Yes/no?
>>>>> Why?
>>>> IOMMUs do not migrate correctly - they only have a class have and
>>>> instance_id and this instance_it depends on command line arguments order.
>>>> The #1 patch makes it classname + liobn.
>>> Why do we need a bus for that?
>>
>> For BusClass::get_dev_path callback to get an unique name.
> 
> Juan, I don't think it makes a lot of sense to require a new fake bus just
> to give us a consistent migration view of things.
> 
> Do you have any ideas how to migration busless devices? We could just
> detect that case and give them numbering based on their occurence in the
> global QOM hierarchy, no?


The mentioned instance_id is that occurrence number which totally depends
on the device order in the command line. And I have to not to depend on that.


> Andreas, maybe you have an idea here as well :).
> 
> 
> Alex
> 


-- 
Alexey



reply via email to

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