History log of /fuchsia/zircon/kernel/object/interrupt_event_dispatcher.cpp
Revision Date Author Comments
# 36320886 19-Jul-2018 Corey Tabaka <eieio@google.com>

[kernel] Dispatchers and most kernel objects lockdep instrumented.

- Convert SoloDispatcher to a CRTP template type similar to
PeerDispatcher. This makes the lock classes for different solo
dispatchers distinct.
- Instrument the locks for all dispatchers.
- Instrument the locks for all kernel objects except those that
lock the thread_lock.

Bug: ZX-23
Test: k ut all and system/test/* pass + manual stress testing.

Change-Id: I8106c04911e47ea15ccce8e7abd5fbd62adfa6fe


# bf29bc81 02-May-2018 Brian Swetland <swetland@google.com>

[kernel][interrupts] cleanup, introduce VirtualInterruptDispatcher

Since we already use virtual dispatch for registering, unregistering,
masking, unmasking, and processing IRQs, let's introduce a separate
subclass for Virtual interrupts and remove is_virtual checks. Also
make the subclasses responsible for owning and managing their vectors
and so forth.

Change-Id: Ia323a39575571b2aad6248a12066860022cc0d64


# cca25b86 26-Apr-2018 Brijen Raval <braval@google.com>

[syscall][irq] Remove (disabled) old irq syscall implementations

Change-Id: I2f4a4f42e174dbab5ac4eb84255955fa805cd75d


# b05757ba 29-Mar-2018 Brijen Raval <braval@google.com>

[interrupts][syscalls] zx_irq_create/wait/trigger/destroy impl.

This syscall is currently disabled by default and gated behind the
building option ENABLE_NEW_IRQ_API

ZX-2024
Change-Id: I29bf0ff2f858182c380e48808cfeb008143e6e79


# fae163a8 21-Feb-2018 George Kulakowski <kulakowski@google.com>

[interrupts] Use only the common dispatcher lock in interrupt dispatchers

Change-Id: Id200ada6792ed35ddb53c1843d54fa3359bebf1e


# 9f95363b 05-Feb-2018 Mark Seaborn <mseaborn@google.com>

[kernel][interrupts] Replace "enum handler_return" type with void

Following recent changes for using preempt_disable, all of the
in-kernel interrupt handlers now always return INT_NO_RESCHEDULE. We
can therefore remove their return values. We can use "void" instead
of "enum handler_return".

The bulk changes are:

* Search-and-replace "enum handler_return" -> "void".
* Manually change "return INT_NO_RESCHEDULE;" -> "return;", or remove
when at the end of a function.
* Manually change "return foo();" -> "foo();" when return type is
void (just a cleanup -- the code compiles without this change).

The non-bulk changes include:

* Remove the definition of enum handler_return.
* Update the interrupt entry points: faults.cpp and exceptions_c.cpp.
* Update a few places where handler_return values were propagated,
such as "handler->handler()" calls, removing "ret =".

Note that platform_fiq() (changed here) is called from ARM assembly.

ZX-1490

Change-Id: I70b57c610ded0facb93c09ac8ffc81cf23a985fc


# 1e354201 25-Jan-2018 Mark Seaborn <mseaborn@google.com>

[kernel] Revert "[kernel][interrupts] Add assertion to every interrupt-handling function"

This reverts commit cae96aef07ff38db6e1ad7f05444758531c3e764.

That change caused a kernel assertion failure via the following path:

sys_mmap_device_io()
-> IoBitmap::SetIoBitmap()
-> mp_sync_exec()
-> mp_mbx_generic_irq()

ZX-1490

Change-Id: Ic2362d000be7b4e021c6942cc6d0f9550dd15649


# cae96aef 24-Jan-2018 Mark Seaborn <mseaborn@google.com>

[kernel][interrupts] Add assertion to every interrupt-handling function

This is in preparation for removing the "enum handler_return" type.
When we replace that with "void", there will be nothing in the
function signatures to mark out these functions that are only called
in interrupt-handling context.

To make up for that, add the assertion
"DEBUG_ASSERT(arch_in_int_handler())" at the start of every function
that currently returns a "handler_return".

ZX-1490

Change-Id: I30deda7192eed9f5a5276ec6259cce78277e87ea


# 92c2ca2f 23-Jan-2018 Mark Seaborn <mseaborn@google.com>

[kernel][interrupt] Remove the last remaining use of INT_RESCHEDULE

Convert InterruptEventDispatcher to make use of preempt_disable: Pass
reschedule=true to Signal() instead of returning INT_RESCHEDULE.

Testing: Pressing the power button on a NUC triggers an ACPI interrupt
that is handled via this code path. Disabling the poweroff() call in
dev/bus/acpi/powerbtn.c allows verifying that.

ZX-1490

Change-Id: I9e13b2a2900e79d3b59750bd8bee1f815acd3bda


# 038c9dc5 27-Dec-2017 Mike Voydanoff <voydanoff@google.com>

[syscalls][ddk] Interrupt syscall improvements:

It is now possible to wait for multiple interrupts on a single interrupt handle.
The zx_interrupt_bind() syscall is used to bind an interrupt vector to
an interrupt handle, allowing up to 62 interrupt vectors per handle.

The zx_interrupt_get_timestamp() syscall can now be used to retrieve a
timestamp for an interrupt.

Virtual interrupts are now supported. zx_interrupt_bind() can be used to
designate an interrupt slot as a virtual interrupt, and the virtual interrupt
can be signaled using the zx_interrupt_signal() syscall.

The zx_interrupt_complete() syscall has been removed.
Instead, zx_interrupt_wait() now handles unmasking the interrupt
at the right time depending on whether the interrupt is edge or level triggered.

Slot ZX_INTERRUPT_SLOT_USER is reserved as a virtual interrupt, and is typically
used with zx_interrupt_signal() to unblock interrupt threads so they can exit
at driver shutdown or to perform periodic work.

Currently PCI interrupt handles can only be bound to a single interrupt vector,
but it is possible to bind virtual interrupts to PCI interrupt handles.

ZX-1469 #done
ZX-1471 #done

Change-Id: I48c14183c1b9ecd437c8b1ce0d25326b7532e973


# 30cf5781 11-Dec-2017 Mike Voydanoff <voydanoff@google.com>

[kernel][interrupt] return error from register_int_handler()

register_int_handler() will return ZX_ERR_INVALID_ARGS instead of panicing
if the interrupt vector is invalid and will now also return ZX_ERR_ALREADY_BOUND
if the caller attempts to set a handler for an interrupt vector that already
has a handler.

This allows us to remove an unnecessary WAVL tree from InterruptEventDispatcher.

Also, zx_interrupt_create() will return an error if it attempts to bind to an
interrupt vector that is now being used by a kernel driver.

Add interrupt_has_handler() to determine if we have a handler for an interrupt vector
to use for this instead.

Also added a missing sanity check to PciInterruptDispatcher.

ZX-1369 #done

Change-Id: I107634c66b57cd5a7adfd6780d0afa24dfda449b


# 53412c6a 02-Oct-2017 Todd Eisenberger <teisenbe@google.com>

[syscall][interrupt] Let zx_interrupt_create set trigger mode

ZX-1182 #comment Prerequisite work

Change-Id: Iecd75a4e3f01e987c5f88d0769057f4fa5bba817


# 37da9f7e 02-Oct-2017 Todd Eisenberger <teisenbe@google.com>

[syscall][interrupt] Rename ZX_FLAG_REMAP_IRQ

Namespace it to become ZX_INTERRUPT_REMAP_IRQ.

Change-Id: If4e3e8737e8ffa2a4f836093fcdd5ce32484f245


# 4e80f4fc 20-Sep-2017 Mike Voydanoff <voydanoff@google.com>

[syscalls] return ZX_ERR_CANCELED from mx_interrupt_wait() after mx_interrupt_signal()

This allows us to terminate interrupt threads without having to
use an additional flag.

Change-Id: I95cced20e723914a9698916f8c17e4bf5e39c64f


# f3e2126c 12-Sep-2017 Roland McGrath <mcgrathr@google.com>

[zx] Magenta -> Zircon

The Great Renaming is here!

Change-Id: I3229bdeb2a3d0e40fb4db6fec8ca7d971fbffb94


# 59e644b1 07-Sep-2017 George Kulakowski <kulakowski@google.com>

[zircon][mxtl->fbl] Rename mxtl to fbl

Change-Id: Ie21b6498e1bfb0a7fa0315e40b9e5c3ee78646be


# 388a7f68 31-Aug-2017 Dave Bort <dbort@google.com>

[lib/magenta] Rename kernel/lib/magenta to kernel/object

TODO: Rename magenta.{cpp,h} and other instances of "magenta" in this
module.

For MG-1091 "Rename kernel/lib/magenta"

Change-Id: I2abc316f543798e00d3a4d1c2c83195da26e6836