https://bugzilla.kernel.org/show_bug.cgi?id=68291
--- Comment #23 from Mathias Nyman <[email protected]> --- (In reply to Ashok Raj from comment #22) > looking at the dsl for GPIO below, the IRQ number is 0x31... why would linux > allocate 0x10 instead? > > Interrupt (ResourceConsumer, Level, ActiveLow, Shared, > ,, ) > { > 0x00000031, > } This is the interrupt resource the gpio controller uses, this is not the issue in this case. the GPIO controller works as an interrupt controller, the gpio controller is connected to only one interrupt, and driver only listens to that one (0x31). but the driver provides lots of interrupts to the system, one for each gpio line if needed. So when interrupt 0x31 is called the gpio interrupt handler checks which pin was asserted and calls the handler for that specific interrupt. For example when sd card detection is connected to GPIO pin 38, the sd card driver asks the gpio driver what interrupt that corresponds to by calling gpio_to_irq(). gpio_to_irq() in the gpio driver maps gpio 38 to a irq descriptor by finding a free interrupt descriptor from a global bitmap of all descriptor. Once a free one is found it is returned to SD card driver. for example descriptor 40 SD card driver registers a handler for irq 40. When a sd card is inserted gpio line 38 is set high, the gpio controller fires an interrupt on (0x31), gpio driver interrupt handler is called, it checks which gpio was asserted (was line 38, it finds which interrupts gpio 38 is mapped to (40) and calls the interrupt handler for 40 (the interrupt handler registered by SD card) Issue here is that on x86 the ioapic used to be the only one providing interrupts (well, int these ranges atleast I think) so ioapic code assumes that if a intrrupt descriptor is occupied in the global bitmap it belongs to an ioapic, and it accesses data that is only valid for ioapics which causes failures. In this specific case we collide on interrupt descriptor 16. And it turns out the graphic driver does not even need interrupt. So this needs to be fixed in two places: 1. make sure io_apic code does not access data in interrupt descriptors that belong to other "interrupt controllers", eg gpio than io_apic. 2. fix graphics driver / bios to not request the not needed irq 16 (graphics driver use msi interrupts) -Mathias -- You are receiving this mail because: You are watching the assignee of the bug. ------------------------------------------------------------------------------ Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. Written by three acclaimed leaders in the field, this first edition is now available. Download your free book today! http://p.sf.net/sfu/13534_NeoTech _______________________________________________ acpi-bugzilla mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/acpi-bugzilla
