diff options
author | Maarten Lankhorst <m.b.lankhorst@gmail.com> | 2012-09-21 09:30:39 +0200 |
---|---|---|
committer | Maarten Lankhorst <m.b.lankhorst@gmail.com> | 2012-09-21 09:30:39 +0200 |
commit | dc8f8044c0f9ec4e6a1482e9b9ccb8c2492d0056 (patch) | |
tree | ef80a6d597cdcdc478d7280bd8fb92726e714cf9 | |
parent | dc9c43326aa7cbc6a684de66951b64d9a9b958f9 (diff) |
Remove code
-rw-r--r-- | optimus.pdf | bin | 223527 -> 100353 bytes | |||
-rw-r--r-- | optimus.tex | 74 |
2 files changed, 4 insertions, 70 deletions
diff --git a/optimus.pdf b/optimus.pdf Binary files differindex 1df0d59..747f59c 100644 --- a/optimus.pdf +++ b/optimus.pdf diff --git a/optimus.tex b/optimus.tex index 199ad15..b4ce14a 100644 --- a/optimus.tex +++ b/optimus.tex @@ -14,7 +14,7 @@ \title{Optimus and cross-device synchronization support} \subtitle{Why is it still not done?} \author{Maarten Lankhorst} -\institute{Canonical Ltd} +%\institute{Canonical Ltd} %\logo{\includegraphics[width=1.5cm]{imgs/ensib.jpg}} \AtBeginSection[]{ @@ -124,23 +124,9 @@ extendedchars=true} \begin{itemize} \item Work in progress, not even the name is finalized. \item Dumbest possible primitive for synchronization - \item Calls added: - \begin{itemize} - \item fence\textunderscore put, fence\textunderscore get - \item fence\textunderscore signal - \item fence\textunderscore wait(\textunderscore timeout) - \item fence\textunderscore (add/remove)\textunderscore callback - \item fence\textunderscore is\textunderscore signaled - \item fence\textunderscore enable\textunderscore sw\textunderscore signaling - \end{itemize} - - \item Implementers need to implement a few ops: - \begin{itemize} - \item enable\textunderscore signaling - \item signaled - \item release - \end{itemize} - \item .. and call fence\textunderscore signal on completion + \item Signaled upon completion, software and hardware waiters can be waiting on completion. + \item Hardware fences might unblock other hardware. + \item Object might have a single exclusive or multiple shared fences. \end{itemize} \end{block} \end{frame} @@ -160,58 +146,6 @@ extendedchars=true} \end{block} \end{frame} - \begin{frame}[fragile] - \begin{block}{Reservation single object reservation usage (WIP!)} - \begin{lstlisting}[basicstyle=\ttfamily\tiny] - struct reservation_object *obj; - - // Returns: 0 on success - // -EBUSY if no_wait_unreserved = true and object was already reserved - // -ERESTARTSYS if interruptible = true and a signal was queued. - // -EAGAIN if ticket != NULL and we have to restart reservation. - // -EDEADLK if you try to reserve the object with the same ticket twice - ret = object_reserve(obj, interruptible, no_wait_unreserved, ticket := NULL); - if (!ret) { - ret = party_with_object(obj); - object_unreserve(obj, NULL); - } - return ret; - \end{lstlisting} - \end{block} - \begin{block}{WARNING!!} - \begin{itemize} - \item You will deadlock if you already hold a reservation\textunderscore object and try to call object\textunderscore reserve with no\textunderscore wait\textunderscore unreserved=false. - Lockdep will catch this situation. - \end{itemize} - \end{block} - \end{frame} - - \begin{frame}[fragile] - \begin{block}{Reservation multi object reservation usage (WIP!)} - \begin{lstlisting}[basicstyle=\ttfamily\tiny] -retry: - reservation_ticket_init(&t); - for (...; obj; ...) { - ret = object_reserve(obj, interruptible, true, &t); - if (ret) { - for_each_continue_reverse(obj) - object_unreserve(obj, &t); - reservation_ticket_fini(&t); - if (ret != -EAGAIN) - return ret; - object_wait_unreserved(obj_with_eagain_ret); - goto retry; - } - } - ret = party_with_all_objects(...); - for (...; obj; ...) { - object_unreserve(obj, &t); - reservation_ticket_fini(&t); - return ret; - \end{lstlisting} - \end{block} - \end{frame} - \begin{frame} \begin{block}{Fence api rules} \begin{itemize} |