History log of /fuchsia/zircon/kernel/object/fifo_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


# 8c31a408 20-Jun-2018 George Kulakowski <kulakowski@google.com>

[dispatchers][peers] Centralize the on_zero_handles peer resetting

Instead of requiring all overloads do it, just do it and call a
different function.

Test: All the recently introduced peer lifetime tests pass.

Change-Id: Ib6be480de0fdd4668a35354fc3cd9fdc963bb87a


# 9dd5b5f5 24-May-2018 Adam Barth <abarth@chromium.org>

[syscalls] Update parameter types and names

This CL updates the parameter types and names for a number of syscalls
to match the Zircon System API rubric. There's more work to do to make
all the syscalls conform to the rubric, but this change is a start.

Change-Id: I218ac5e7e0cbd80a8c69fef7891ad40b78b6b407


# ca4d934e 22-May-2018 Greg Bonik <gbonik@google.com>

[fifo] zx_fifo_read/write bytes->elems migration, part 5

Remove the _old compat shims

ZX-1951 #done

Change-Id: Icece05ec5d47d2eb0a73e7fcba4dbed45e866d4f


# 74b0d7e1 16-Apr-2018 Greg Bonik <gbonik@google.com>

[fifo] zx_fifo_read/write bytes->entries migration, part 3

Change signatures of zx_fifo_read/write to take the number of elements
plus the element size instead of a single byte size parameter and update
the docs.

Also mark _old shims as deprecated.

ZX-1951 #comment

Change-Id: I1ad71df760e609e9540e7c332fae156d18341023


# f26929e9 27-Feb-2018 George Kulakowski <kulakowski@google.com>

[dispatchers] Deduplicate peered user_signal() implementations

Change-Id: I0cb3e07848e92ccee4eb87fa885e7c64a883d71c


# 7bb07a8d 19-Mar-2018 Tim Detwiler <tjdetwiler@google.com>

[fifo] Return ZX_ERR_PEER_CLOSED from zx_fifo_read.

I was seeing zx_fifo_read return ZX_ERR_SHOULD_WAIT instead of
ZX_ERR_PEER_CLOSED.

Change-Id: I287097db75fad64a9910f6b2d695659977a6402e


# 42dd84fa 27-Feb-2018 George Kulakowski <kulakowski@google.com>

[dispatcher] Small cleanups

1. Make the holder RefPtr const.

2. Rename the other_ ptr to peer_ to be consistent with peer_koid_ and
PeeredDispatcher.

3. Share the peer_ ptr directly in the PeeredDispatcher.

Change-Id: I8176cb0daa9ff2a5253de9626de6c8f4c2532781


# 76b6979b 27-Feb-2018 George Kulakowski <kulakowski@google.com>

[dispatcher][peers] Share the implementation of peered get_related_koid()

Change-Id: I3c507e08b2a058e38d5d374434801c3dbfbaa3a8


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

[fifo] Use only the shared locked in fifo dispatchers

Change-Id: I91f5e3039e403e1e2728d4fc11f8e13a407a79b5


# 7dfa5a1c 05-Dec-2017 George Kulakowski <kulakowski@google.com>

[dispatchers] Introduce peered dispatchers

Currently, several zircon dispatchers refer to their peers. These
include channels, sockets, fifos, and event pairs. These objects refer
both to their internal data as well as their signal state bits, as
well as their peers.

For a concrete example, consider zx_channel_write(h0, ...) on a
channel with endpoints h0 and h1. This of course modifies the message
packet buffer associated with h0. But it may also cause h1 to go from
unreadable to readable, so the signal state bits need to be updated.

Currently, this is accomplished by having separate data and signal
locks in the dispatchers, and taking them in a certain order. For the
channel write example, this is

1. h0 data lock
2. h1 data lock
a. h1 signal lock
b. h0 signal lock

where the indentation signifies scope (i.e. signal locks are taken
while holding signal locks.

For most other dispatcher kinds, the data and signal locks were
straightforwardly collapsed. The same approach (just having 1 lock and
not otherwise modifying locking call sites) does not work for peered
objects because of deadlock. The next easiest thing (dropping one
side's lock before taking the other) breaks the atomicity of the data
and signal updates.

Thus we introduce a method to share one lock between both ends of a
channel. The locking pattern for channel write changes to

1. h data lock
a. h1 signal lock
b. h0 signal lock

Subsequent CLs can then remove the per-peered-type signal locks, and
make it simply

1. h lock

When benchmarked, this approach reduced the zircon_benchmarks for
peered objects by reasonable amounts. For example, the
Channel/Write/64 bench went from about 650ns to 580ns on my NUC.

Change-Id: Ifb05ff75501cb2cea1bf0a506b6f647e788b47f3


# 709f0e57 04-Oct-2017 George Kulakowski <kulakowski@google.com>

[user_ptr] Enforce IN/OUT/INOUT semantics

Change-Id: I54e92ed999c1965114aa80aeffe8d0fc16184b40


# d363aa54 04-Oct-2017 George Kulakowski <kulakowski@google.com>

[dispatcher][state_tracker] Move the state tracker into the dispatcher

Note that all access to the old StateTracker functionality is still
mediated by the has_state_tracker function. This is used to e.g. allow
only certain objects to be user signalled.

Change-Id: If9d0413eb131c6e7d70ea19c1ed928f7bf566cc8


# 6b31b5af 25-Sep-2017 George Kulakowski <kulakowski@google.com>

[fifo] Make FifoDispatcher operations take user_ptr

Change-Id: I0a6d87b5945a7d09ec61191b9310b74382a31a5a


# a9982a74 21-Sep-2017 George Kulakowski <kulakowski@google.com>

[fifo] Remove generic read/write behavior in fifos

These now only read to or write from a user_ptr. The pluggable
behavior is no longer needed.

Change-Id: Ib79b8ae416aaafbdf838f0bf7c5a1582af2ebba0


# 98c147a7 21-Sep-2017 George Kulakowski <kulakowski@google.com>

[fifo] Remove unused FifoDispatcher methods

I believe these were intended for hypervisor use. But that now uses
ports for event delivery.

Change-Id: I78f185648f75030cb04a08e5f2121ceb79c2253a


# 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