[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 2/2] hpet: inverse polarity when pin above ISA_N
From: |
liu ping fan |
Subject: |
Re: [Qemu-devel] [PATCH 2/2] hpet: inverse polarity when pin above ISA_NUM_IRQS |
Date: |
Mon, 26 Aug 2013 10:49:47 +0800 |
On Sun, Aug 25, 2013 at 2:44 PM, Paolo Bonzini <address@hidden> wrote:
> Il 25/08/2013 04:16, Liu Ping Fan ha scritto:
>> According to hpet spec, hpet irq is high active. But according to
>> ICH spec, there is inversion before the input of ioapic. So the OS
>> will expect low active on this IRQ line.(And this is observed on
>> bare metal).
>>
>> We fold the emulation of this inversion inside the hpet logic.
>>
>> Signed-off-by: Liu Ping Fan <address@hidden>
>> ---
>> kernel has a bug with ioapic, refer to
>> https://lkml.org/lkml/2013/8/23/98
>> With all these patch, linux-2.6/Documentation/timers/hpet_example.c can work
>> on qemu
>
> Can you explain "in qemu q35 machine ioapic's ioredtbl[x] can never be
> set as low-active, even if the hpet driver registered it"?
>
>From kernel side, in drivers/char/hpet.c
hpet_timer_set_irq()
gsi = acpi_register_gsi(NULL, irq, ACPI_LEVEL_SENSITIVE,
ACPI_ACTIVE_LOW);
So we expect the ioredtbl[x] will be set as low-active polarity, but
on q35, I found this did not happen. Scene: a former call to
io_apic_setup_irq_pin_once(), then the later one(hpet, which decided
to share this pin with other device) will not actually program the
pin. Here, notice the name xx_once(), but it ignored the second
request without a check.
Regards,
Pingfan
> Paolo