]> Pileus Git - ~andy/linux/commit
x86/ioapic: Check attr against the previous setting when programmed more than once
authorLiu Ping Fan <kernelfans@gmail.com>
Fri, 23 Aug 2013 08:58:47 +0000 (16:58 +0800)
committerIngo Molnar <mingo@kernel.org>
Mon, 26 Aug 2013 10:58:00 +0000 (12:58 +0200)
commit25aa2957973d361081ac6c8b6e5a0d9d7a83fef6
treead77338c9f70a2dd2f4c731e71e1a4cd12c29fee
parent17405453f4ad0220721a29978692081be6392b8f
x86/ioapic: Check attr against the previous setting when programmed more than once

When programming ioapic pinX more than once, current code
does not check whether the later attr (trigger & polarity) is the
same as the former or not.

This causes broken semantics which can be observed in a qemu q35
machine, where ioapic's ioredtbl[x] can never be set as low-active,
even if the hpet driver registered it.

And hpet driver may share a high-level active IRQ line with other
devices. So in qemu, when hpet-dev asserts low-level as kernel
expects, the kernel has no response.

With this patch, we can observe an ioredtbl[x] set as low-active
for hpet.

Fix it by reporting -EBUSY to the caller, when attr is different.

Signed-off-by: Liu Ping Fan <pingfank@linux.vnet.ibm.com>
Cc: Kevin Hao <haokexin@gmail.com>
Cc: Len Brown <len.brown@intel.com>
Cc: Yinghai Lu <yinghai@kernel.org>
Link: http://lkml.kernel.org/r/1377248327-19633-1-git-send-email-pingfank@linux.vnet.ibm.com
[ Made small readability edits to both the changelog and the code. ]
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/kernel/acpi/boot.c
arch/x86/kernel/apic/io_apic.c