[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-trivial] [PATCH 1/1] arm: virt: change GPIO trigger interrupt
From: |
Wei Huang |
Subject: |
Re: [Qemu-trivial] [PATCH 1/1] arm: virt: change GPIO trigger interrupt to pulse |
Date: |
Fri, 29 Jan 2016 08:50:34 -0600 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0 |
On 01/29/2016 08:46 AM, Shannon Zhao wrote:
>
>
> On 2016/1/29 22:35, Wei Huang wrote:
>>
>>
>> On 01/29/2016 04:10 AM, Shannon Zhao wrote:
>>> Hi,
>>>
>>> This makes ACPI work well but makes DT not work. The reason is
>>> systemd or
>>> acpid open /dev/input/event0 failed. So the interrupt could be
>>> injected and
>>> could see under /proc/interrupts but guest doesn't have any action. I'll
>>> investigate why it opens failed later.
>>
>> That is interesting. Could you try it with the following? This reverses
>> the order to down-up and worked on ACPI case.
>>
> Yeah, that's very weird.
>
>> qemu_set_irq(qdev_get_gpio_in(pl061_dev, 3), 0);
>> qemu_set_irq(qdev_get_gpio_in(pl061_dev, 3), 1);
>>
> I'll try this tomorrow. But even if this works, it's still weird.
To reproduce this case, do the following steps using current upstream
qemu: create vm => reboot vm (succeed) => reboot or shutdown vm (fail).
Apparently the last interrupt wasn't received correctly.
-Wei
>
>> Thanks,
>> -Wei
>>
>>>
>>> 2016年1月29日星期五,Wei Huang <address@hidden> 写道:
>>>
>>>> When QEMU is hook'ed up with libvirt/virsh, the first ACPI reboot
>>>> request will succeed; but the following shutdown/reboot requests
>>>> fail to trigger VMs to react. Notice that in mach-virt machine
>>>> model GPIO is defined as edge-triggered and active-high in ACPI.
>>>> This patch changes the behavior of powerdown notifier from PULLUP
>>>> to PULSE. It solves the problem described above (i.e. reboot
>>>> continues to work).
>>>>
>>>> Signed-off-by: Wei Huang <address@hidden <javascript:;>>
>>>> ---
>>>> hw/arm/virt.c | 2 +-
>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
>>>> index 05f9087..b5468a9 100644
>>>> --- a/hw/arm/virt.c
>>>> +++ b/hw/arm/virt.c
>>>> @@ -546,7 +546,7 @@ static DeviceState *pl061_dev;
>>>> static void virt_powerdown_req(Notifier *n, void *opaque)
>>>> {
>>>> /* use gpio Pin 3 for power button event */
>>>> - qemu_set_irq(qdev_get_gpio_in(pl061_dev, 3), 1);
>>>> + qemu_irq_pulse(qdev_get_gpio_in(pl061_dev, 3));
>>>> }
>>>>
>>>> static Notifier virt_system_powerdown_notifier = {
>>>> --
>>>> 1.8.3.1
>>>>
>>>>
>>>
>