changeset 102:8e8aa342078b

Close the series on the slides and backup some wip on the abstract type nightmare in e1000
author Louis Opter <louis@lse.epita.fr>
date Thu, 28 Feb 2013 23:30:59 -0800
parents 315f4f9697c6
children d9af98faac8a
files com_add_slides_for_the_fosdem_presentation.patch maintainers_fix_indentation_in_use_rathaxes.patch rathaxes_trying_to_fix_the_abstract_type_nightmare_in_e1000.patch series
diffstat 4 files changed, 781 insertions(+), 656 deletions(-) [+]
line wrap: on
line diff
--- a/com_add_slides_for_the_fosdem_presentation.patch	Thu Jan 31 19:35:47 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,655 +0,0 @@
-# HG changeset patch
-# Parent 9883e23afecaf44cf67a1f956d8bb8a912c6fe23
-com: add slides for the Fosdem 2013 presentation
-
-diff --git a/com/images/twitter-bird-dark-bgs.pdf b/com/images/twitter-bird-dark-bgs.pdf
-new file mode 100644
-index 0000000000000000000000000000000000000000..1d3b305deabc2ca218a4a01ee164d1e9b404d90f
-GIT binary patch
-literal 6170
-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
-
-diff --git a/com/images/twitter-bird-light-bgs.pdf b/com/images/twitter-bird-light-bgs.pdf
-new file mode 100644
-index 0000000000000000000000000000000000000000..e2536c220c07922151b4d572827366dac2f8416a
-GIT binary patch
-literal 12645
-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
-P!NCg#(9ub&$N>Hy7Ppsw
-
-diff --git a/com/slides/2013_fosdem/2013_fosdem.tex b/com/slides/2013_fosdem/2013_fosdem.tex
-new file mode 100644
---- /dev/null
-+++ b/com/slides/2013_fosdem/2013_fosdem.tex
-@@ -0,0 +1,176 @@
-+\documentclass[xcolor={usenames,svgnames}]{beamer}
-+
-+\usepackage{rtxslides}
-+\usepackage[american]{babel}
-+\usepackage{tikz}
-+\usetikzlibrary{shapes,fit}
-+
-+\selectbiblanguage{american}
-+
-+\title{A DSL for driver development, why \& how?}
-+\date{Fosdem 2013}
-+\author{Louis Opter \\ \texttt{www.rathaxes.org}}
-+
-+\definecolor{lightred}{RGB}{147,36,33}
-+\tikzset{componentarrow/.style={->, >=stealth, color=rathaxesred, ultra thick}}
-+
-+\newcommand{\cemph}[1]{{\itshape{\textcolor{rathaxesred}{#1}}}}
-+
-+\newcommand{\tred}[1]{\textcolor{rathaxesred}{#1}}
-+
-+\tikzset{warrow/.style={->, >=stealth, color=white, ultra thick}}
-+
-+\tikzset{graybox/.style={draw,rectangle,rounded corners=3pt,very thick,densely dashed,color=gray!75,text=white}}
-+\tikzset{redbox/.style={draw,rectangle,rounded corners=5pt,ultra thick,color=rathaxesred,text=white}}
-+\tikzset{redcontainer/.style={draw,rectangle,rounded corners=5pt,ultra thick,color=rathaxesred,text=white,minimum height=3.5cm,minimum width=2.5cm}}
-+
-+\begin{document}
-+
-+\begin{frame}
-+\titlepage
-+\end{frame}
-+
-+\begin{frame}{About us}
-+\Large{
-+\begin{itemize}
-+\item<1-> Three guys, limited experience;
-+\item<2-> Lionel's idea back in 2007;
-+\item<3-> Experimentations, POC in 2009;
-+\item<4-> A side project for us since 2010.
-+\end{itemize}
-+}
-+\end{frame}
-+
-+\begin{frame}{Why?}
-+\Large{
-+\pause
-+\begin{itemize}
-+\item Learn;
-+\item Biggest part of OSes code base;
-+\item Dominant cause of crashes;
-+\item Complexity/Skills required;
-+\pause
-+\item \emph{Understanding Modern Device Drivers} \cite{kadavasplos12}.
-+\end{itemize}
-+\pause
-+
-+\begin{center}
-+How can this be solved/improved?
-+\end{center}
-+}
-+\end{frame}
-+
-+\begin{frame}{ToC}
-+\Large{
-+\begin{enumerate}
-+\item “State of the art”;
-+\item Quick dive into \rtx;
-+\item Wrap-up \& next steps.
-+\end{enumerate}
-+}
-+\end{frame}
-+
-+\begin{frame}
-+\begin{center}
-+\LARGE{
-+\emph{``State of the art''}
-+}
-+\end{center}
-+\end{frame}
-+
-+\begin{frame}{RAD Tools}
-+\Large{
-+Jungo's WinDriver: \url{http://youtu.be/-o6M1ljZMQk}
-+}
-+\end{frame}
-+
-+\begin{frame}{Static Analysis}
-+\Large{
-+\only<1>{
-+\begin{itemize}
-+\item Static Driver Verifier (Windows specific);
-+\item Safe Drive (Linux) \cite{safedrive};
-+\item SymDrive \cite{symdrive}.
-+\end{itemize}
-+}
-+\only<2>{
-+\begin{itemize}
-+\item Cover topics we don't cover \cemph{yet};
-+\item Doesn't solve code re-usability;
-+\item SymDrive is very interesting.
-+\end{itemize}
-+}
-+}
-+\end{frame}
-+
-+\begin{frame}{Interface Description Languages (IDL)}
-+\only<1>{
-+\Large{
-+\begin{itemize}
-+\item Devil \cite{Reveillere:these2001};
-+\item Hail (similar to Devil).
-+\end{itemize}
-+}
-+}
-+\only<2>{
-+\large{
-+\begin{itemize}
-+\item Describe interfaces to access the registers with constraints;
-+\item No notion of bus (Devil);
-+\item Don't describe the algorithms to access the registers.
-+\end{itemize}
-+}
-+}
-+\only<3>{
-+\Large{
-+\begin{itemize}
-+\item Only solve one part of the problematic;
-+\item \rtx\ started from Devil.
-+\end{itemize}
-+}
-+}
-+\end{frame}
-+
-+\begin{frame}{Domain Specific Languages (DSL)}
-+\Large{
-+\begin{itemize}
-+\item Termite \cite{Ryzhyk_CKSH_09};
-+\item \rtx.
-+\end{itemize}
-+}
-+\end{frame}
-+
-+\begin{frame}
-+\begin{center}
-+\LARGE{
-+\emph{Quick dive in our WIP}
-+}
-+\end{center}
-+\end{frame}
-+
-+\begin{frame}
-+\begin{center}
-+\LARGE{
-+\emph{Wrap-up}
-+}
-+\end{center}
-+\end{frame}
-+
-+\begin{frame}{Questions?}
-+\begin{center}
-+\Huge{Thanks}
-+
-+\end{center}
-+\vspace{2em}
-+\begin{itemize}
-+\item \Large{\url{http://www.rathaxes.org/}}
-+\item \Large{\texttt{\#rathaxes} on IRC (\texttt{chat.freenode.net})}
-+\item \Large{\twitter}
-+\end{itemize}
-+\end{frame}
-+
-+\begin{frame}{Bibliography}
-+\rtxbibliography
-+\end{frame}
-+
-+\end{document}
-diff --git a/com/slides/2013_fosdem/CMakeLists.txt b/com/slides/2013_fosdem/CMakeLists.txt
-new file mode 100644
---- /dev/null
-+++ b/com/slides/2013_fosdem/CMakeLists.txt
-@@ -0,0 +1,6 @@
-+RATHAXES_COPY_LATEX_CLASSES()
-+
-+ADD_LATEX_DOCUMENT(2013_fosdem.tex
-+                   BIBFILES
-+                   ../../../doc/bibliography.bib
-+                   DEFAULT_PDF MANGLE_TARGET_NAMES)
-diff --git a/com/slides/CMakeLists.txt b/com/slides/CMakeLists.txt
---- a/com/slides/CMakeLists.txt
-+++ b/com/slides/CMakeLists.txt
-@@ -1,3 +1,4 @@
- ADD_SUBDIRECTORY(2011_lse)
- ADD_SUBDIRECTORY(2011_lsm)
- ADD_SUBDIRECTORY(2012_lsm)
-+ADD_SUBDIRECTORY(2013_fosdem)
-diff --git a/doc/bibliography.bib b/doc/bibliography.bib
---- a/doc/bibliography.bib
-+++ b/doc/bibliography.bib
-@@ -69,3 +69,59 @@
-     month           = feb,
-     note            = "\url{http://www.gnu.org/licenses/lgpl-2.1.html}"
- }
-+
-+@InProceedings{kadavasplos12,
-+   author           = "{Asim Kadav and Michael M. Swift}",
-+   title            = "{U}nderstanding {M}odern {D}evice {D}rivers", 
-+   booktitle        = {ASPLOS},
-+   address          = {London, UK},
-+   month            = {March 3-7},
-+   year             = {2012},
-+   note             = "\url{http://pages.cs.wisc.edu/~kadav/study/}"
-+}
-+
-+@manual{SDV,
-+    title           = "{S}tatic {D}river {V}erifier",
-+    organization    = "{M}icrosoft / {M}icrosoft {R}easearch",
-+    note            = "\url{http://msdn.microsoft.com/en-us/library/windows/hardware/ff552808.aspx}"
-+}
-+
-+@InProceedings{safedrive,
-+    author          = "{Feng Zhou, Jeremy Condit, Zachary Anderson, and Ilya Bagrak; Rob Ennals; Matthew Harren, George Necula, and Eric Brewer}",
-+    title           = "SafeDrive: Safe and Recoverable Extensions Using Language-Based Techniques",
-+    booktitle       = "OSDI '06",
-+    address         = {Seattle, WA},
-+    month           = {November 6-8},
-+    year            = {2006},
-+    note            = "\url{http://ivy.cs.berkeley.edu/safedrive/}"
-+}
-+
-+@InProceedings{symdrive,
-+    author          = "{Matthew J. Renzelmann, Asim Kadav, and Michael M. Swift}",
-+    title           = "SymDrive: Testing Drivers without Devices",
-+    booktitle       = "OSDI '12",
-+    address         = {Hollywood, CA},
-+    month           = {October 8-10},
-+    year            = {2012},
-+    note            = "\url{http://research.cs.wisc.edu/sonar/projects/symdrive/index.shtml}"
-+}
-+
-+@phdthesis{Reveillere:these2001,
-+    author          = {R\'eveill\`ere, L.},
-+    title           = {Approche langage au d\'eveloppement de pilotes de p\'eriph\'eriques robustes},
-+    school          = {Universit{\'e} de Rennes~1, France},
-+    year            = {2001},
-+    type            = {Th\`{e}se de doctorat},
-+    month           = {December},
-+    note            = {\url{http://www.labri.fr/perso/reveille/publications/papers/reveillere-thesis.pdf}}
-+}
-+
-+@inproceedings{Ryzhyk_CKSH_09,
-+   title            = {Automatic Device Driver Synthesis with {Termite}},
-+   booktitle        = {Proceedings of the 22\textsuperscript{nd} ACM Symposium on Operating Systems Principles},
-+   author           = {Leonid Ryzhyk and Peter Chubb and Ihor Kuz and Le Sueur, Etienne and Gernot Heiser},
-+   year             = {2009},
-+   month            = {Oct},
-+   address          = {Big Sky, MT, USA},
-+   note             = {\url{http://ssrg.nicta.com.au/publications/papers/Ryzhyk_CKSH_09.pdf}}
-+}
-diff --git a/maintainers/latex/rathaxes.sty b/maintainers/latex/rathaxes.sty
---- a/maintainers/latex/rathaxes.sty
-+++ b/maintainers/latex/rathaxes.sty
-@@ -9,6 +9,7 @@
- \RequirePackage{libertine}
- \RequirePackage{inconsolata}
- \RequirePackage{tabularx}
-+\RequirePackage{natbib}
- \RequirePackage[fixlanguage]{babelbib}
- \expandafter\RequirePackage[\@rtxlanguage]{babel}
- 
-diff --git a/maintainers/latex/rtxslides.sty b/maintainers/latex/rtxslides.sty
---- a/maintainers/latex/rtxslides.sty
-+++ b/maintainers/latex/rtxslides.sty
-@@ -6,19 +6,31 @@
- \RequirePackage{inconsolata}
- \RequirePackage[utf8]{inputenc}
- \RequirePackage[T1]{fontenc}
-+\RequirePackage[fixlanguage]{babelbib}
- 
- \newcommand{\rtx}{Rathaxes}
-+% Useful in tikz:
-+\newcommand{\bgcolor}{black}
-+\newcommand{\fgcolor}{white}
-+\newcommand{\twitter}{\raisebox{-0.3ex}{\includegraphics[height=1em]{twitter-bird-dark-bgs}} \href{https://twitter.com/rathaxes}{@rathaxes}}
- 
- \definecolor{rathaxesred}{RGB}{190,36,31}
- \setbeamercolor{normal text}{fg=white,bg=black}
- \setbeamercolor{structure}{fg=rathaxesred}
- 
--\DeclareOption{reverse}{\setbeamercolor{normal text}{fg=black,bg=white}}
-+\DeclareOption{reverse}{
-+\setbeamercolor{normal text}{fg=black,bg=white}
-+\renewcommand{\bgcolor}{white}
-+\renewcommand{\fgcolor}{black}
-+\renewcommand{\twitter}{\raisebox{-0.3ex}{\includegraphics[height=1em]{twitter-bird-light-bgs}} \href{https://twitter.com/rathaxes}{@rathaxes}}
-+}
- \ProcessOptions\relax
- 
- \setbeamerfont{abstract}{family=\rmfamily,shape=\itshape}
- 
- \useoutertheme{infolines}
-+\setbeamertemplate{navigation symbols}{}
-+\setbeamertemplate{bibliography item}[text]
- 
- \addtobeamertemplate{title page}{%
- \begin{center}%
-@@ -27,3 +39,10 @@
- \end{center}}{}
- 
- \graphicspath{{@RATHAXES_SOURCE_DIR@/com/images/}}
-+
-+\newcommand{\rtxbibliography}{%
-+\bibliographystyle{abbrv}
-+\scriptsize{
-+\bibliography{@RATHAXES_SOURCE_DIR@/doc/bibliography}
-+}
-+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/maintainers_fix_indentation_in_use_rathaxes.patch	Thu Feb 28 23:30:59 2013 -0800
@@ -0,0 +1,20 @@
+# HG changeset patch
+# Parent 73e1430ceb46483e9a1225b1414d53dfed9accbf
+maintainers: fix identation in UseRathaxes.cmake
+
+diff --git a/maintainers/CMakeScripts/UseRathaxes.cmake b/maintainers/CMakeScripts/UseRathaxes.cmake
+--- a/maintainers/CMakeScripts/UseRathaxes.cmake
++++ b/maintainers/CMakeScripts/UseRathaxes.cmake
+@@ -221,9 +221,9 @@
+ 
+         ADD_CUSTOM_TARGET("${NAME}" ALL DEPENDS "${KERNEL_OBJECT_NAME}")
+ 
+-ELSE (${SYSTEM} MATCHES "Linux")
+-	MESSAGE(STATUS "Don't know how to build kernel modules for ${SYSTEM} (yet)")
+-ENDIF (${SYSTEM} MATCHES "Linux")
++    ELSE (${SYSTEM} MATCHES "Linux")
++            MESSAGE(STATUS "Don't know how to build kernel modules for ${SYSTEM} (yet)")
++    ENDIF (${SYSTEM} MATCHES "Linux")
+ ENDFUNCTION(ADD_RATHAXES_LKM NAME RATHAXES_SOURCE)
+ 
+ # Like FIND_PACKAGE but also search in the Rathaxes directories. Usage:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rathaxes_trying_to_fix_the_abstract_type_nightmare_in_e1000.patch	Thu Feb 28 23:30:59 2013 -0800
@@ -0,0 +1,759 @@
+# HG changeset patch
+# Parent 21cb4b0b59ebfc3350ded6f9cea2b44203437ab2
+diff --git a/rathaxes/samples/e1000/device.blt b/rathaxes/samples/e1000/device.blt
+--- a/rathaxes/samples/e1000/device.blt
++++ b/rathaxes/samples/e1000/device.blt
+@@ -18,7 +18,7 @@
+ 
+         map
+         {
+-            data:   ${self}->data;
++            k_device: ((struct device *)${self});
+         }
+     }
+ }
+diff --git a/rathaxes/samples/e1000/device.rti b/rathaxes/samples/e1000/device.rti
+--- a/rathaxes/samples/e1000/device.rti
++++ b/rathaxes/samples/e1000/device.rti
+@@ -5,6 +5,6 @@
+         decl        data_types();
+         chunk       LKM::includes();
+         method      init();
+-        attribute   Builtin::symbol data;
++        attribute   Builtin::symbol k_device;
+     }
+ }
+diff --git a/rathaxes/samples/e1000/e1000.blt b/rathaxes/samples/e1000/e1000.blt
+--- a/rathaxes/samples/e1000/e1000.blt
++++ b/rathaxes/samples/e1000/e1000.blt
+@@ -249,7 +249,6 @@
+         {
+             int                         bars;
+             unsigned char /* __iomem */ *ioaddr;
+-            int                         irq;
+ 
+             ${e1000::RxRing}    rx_ring;
+             ${e1000::TxRing}    tx_ring;
+@@ -267,14 +266,12 @@
+ 
+         chunk   Ethernet::adapter_init_context(Ethernet::Device rtx_ether_ctx,
+                                                Builtin::number bars,
+-                                               Builtin::symbol ioaddr,
+-                                               Builtin::number irq)
++                                               Builtin::symbol ioaddr)
+         {
+             {
+                 ${e1000::Context} *hw_ctx = &${rtx_ether_ctx}->hw_ctx;
+                 hw_ctx->bars = ${bars};
+                 hw_ctx->ioaddr = ${ioaddr};
+-                hw_ctx->irq = ${irq};
+             }
+         }
+ 
+@@ -606,68 +603,6 @@
+         }
+     }
+ 
+-    template sequence   e1000::setup_interrupt_handler(Ethernet::Device rtx_ether_ctx)
+-    {
+-        chunk   LKM::includes()
+-        {
+-            #include <linux/interrupt.h>
+-        }
+-
+-        chunk   LKM::prototypes()
+-        {
+-            static int e1000_setup_interrupt_handler(${Ethernet::Device} *);
+-        }
+-
+-        chunk   LKM::code()
+-        {
+-            static int e1000_setup_interrupt_handler(${Ethernet::Device} *rtx_ether_ctx)
+-            {
+-                int error;
+-
+-                error = request_irq(rtx_ether_ctx->hw_ctx.irq,
+-                        rtx_ethernet_interrupt_handler,
+-                        IRQF_SHARED,
+-                        ${config.name},
+-                        rtx_ether_ctx);
+-
+-                if (error)
+-                    ${Log::info("cannot register the interrupt handler")};
+-
+-                return error;
+-            }
+-        }
+-
+-        chunk   ::CALL()
+-        {
+-                int error = e1000_setup_interrupt_handler(${rtx_ether_ctx});
+-                if (error)
+-                {
+-                        return error;
+-                }
+-        }
+-    }
+-
+-    template sequence   free_interrupt_handler(Ethernet::Device rtx_ether_ctx)
+-    {
+-        chunk   prototypes()
+-        {
+-            static void e1000_free_interrupt_handler(${Ethernet::Device} *rtx_ether_ctx);
+-        }
+-
+-        chunk code()
+-        {
+-            static void e1000_free_interrupt_handler(${Ethernet::Device} *rtx_ether_ctx)
+-            {
+-                free_irq(rtx_ether_ctx->hw_ctx.irq, rtx_ether_ctx);
+-            }
+-        }
+-
+-        chunk ::CALL()
+-        {
+-            e1000_free_interrupt_handler(${rtx_ether_ctx});
+-        }
+-    }
+-
+     template sequence   activate_device_interruption(Ethernet::Device rtx_ether_ctx)
+     {
+         chunk  ::CALL()
+@@ -816,12 +751,10 @@
+              * Allocate the skbuffs, map them for DMA, and write their address
+              * in the corresponding descriptor.
+              */
+-            ${Ethernet::AbstractDevice} *rtx_ether_dev = ${rtx_ether_ctx.net_device};
+-            ${cast local.rtx_ether_dev as Ethernet::AbstractDevice};
+             for (i = 0; i != ${config.rx_ring_size}; ++i)
+             {
+-                hw_ctx->rx_ring.skbuffs[i].skbuff = (${Socket::AbstractSKBuff}*)  netdev_alloc_skb(
+-                        &${rtx_ether_dev.netdev},
++                hw_ctx->rx_ring.skbuffs[i].skbuff = (${Socket::AbstractSKBuff}*)netdev_alloc_skb(
++                        ${rtx_ether_ctx.net_device},
+                         ${config.rx_buffer_len});
+                 if (!hw_ctx->rx_ring.skbuffs[i].skbuff)
+                 {
+@@ -830,7 +763,7 @@
+                 }
+                 hw_ctx->rx_ring.skbuffs[i].dma_handle = dma_map_single(
+                         &${rtx_ether_ctx.device},
+-                        &hw_ctx->rx_ring.skbuffs[i].skbuff->data,
++                        (struct sk_buff *)hw_ctx->rx_ring.skbuffs[i].skbuff, /* XXX leaking cast */
+                         ${config.rx_buffer_len},
+                         DMA_FROM_DEVICE);
+                 int dma_error = dma_mapping_error(&${rtx_ether_ctx.device},
+@@ -933,7 +866,8 @@
+                         ${config.rx_buffer_len},
+                         DMA_FROM_DEVICE);
+         err_skbuffs_map:
+-                dev_kfree_skb(&hw_ctx->rx_ring.skbuffs[i].skbuff->data);
++                /* XXX leaking cast: */
++                dev_kfree_skb((struct sk_buff *)hw_ctx->rx_ring.skbuffs[i].skbuff);
+             }
+ 
+             dma_free_coherent(&${rtx_ether_ctx.device}, hw_ctx->rx_ring.size,
+@@ -1042,9 +976,9 @@
+ 
+             ${Log::info("xmit: skbuff details:")};
+             /*
+-             * skb is not expand on the bound C variable (should be rtx_skbuff),
+-             * which is funny because it works for the sequence template call
+-             * right after.
++             * skb does not expand on the bound C variable (should be
++             * rtx_skbuff), which is funny because it works for the
++             * sequence template call right after.
+              */
+             /*
+              * XXX: doesn't work (I tried to pass self explicitely too):
+@@ -1077,8 +1011,8 @@
+ 
+             /* 2. Map the data */
+ 
+-            /* XXX: ${local.skb.map_to(local.devp)}; */
+-            if (rtx_socket_skbuff_map(&skb, &${devp.data}, DMA_TO_DEVICE))
++            /* XXX: ${local.skb.map_to(devp.k_device)}; */
++            if (rtx_socket_skbuff_map(&skb, ${devp.k_device}, DMA_TO_DEVICE))
+             {
+                 ${Log::info("xmit: can't DMA map a SKbuff")};
+                 goto err_skb_map_to;
+@@ -1097,7 +1031,7 @@
+         err_offload:
+         err_skb_map_to:
+             /* XXX: ${local.skb.unmap_to_and_free(local.dev)}; */
+-            rtx_socket_skbuff_unmap_and_free(&skb, &${devp.data}, DMA_TO_DEVICE);
++            rtx_socket_skbuff_unmap_and_free(&skb, &${devp.k_device}, DMA_TO_DEVICE);
+             return NETDEV_TX_OK;
+         }
+     }
+diff --git a/rathaxes/samples/e1000/e1000.rti b/rathaxes/samples/e1000/e1000.rti
+--- a/rathaxes/samples/e1000/e1000.rti
++++ b/rathaxes/samples/e1000/e1000.rti
+@@ -13,8 +13,7 @@
+         /* Callbacks/Hooks which should probably be in the front-end: */
+         chunk       Ethernet::adapter_init_context(Ethernet::Device,
+                                                    Builtin::number,
+-                                                   Builtin::symbol,
+-                                                   Builtin::number);
++                                                   Builtin::symbol);
+         chunk       Ethernet::adapter_reset(Ethernet::Device);
+         chunk       Ethernet::adapter_load_mac_address(Ethernet::Device);
+     }
+@@ -85,21 +84,6 @@
+         provided chunk  ::CALL();
+     }
+ 
+-    provided sequence   setup_interrupt_handler(Ethernet::Device)
+-    {
+-        provided chunk  LKM::includes(); // works without this one
+-        provided chunk  LKM::prototypes();
+-        provided chunk  LKM::code();
+-        provided chunk  ::CALL();
+-    }
+-
+-    provided sequence   free_interrupt_handler(Ethernet::Device)
+-    {
+-        provided chunk  LKM::prototypes();
+-        provided chunk  LKM::code();
+-        provided chunk  ::CALL();
+-    }
+-
+     provided sequence   activate_device_interruption(Ethernet::Device)
+     {
+         provided chunk  ::CALL();
+diff --git a/rathaxes/samples/e1000/ethernet.blt b/rathaxes/samples/e1000/ethernet.blt
+--- a/rathaxes/samples/e1000/ethernet.blt
++++ b/rathaxes/samples/e1000/ethernet.blt
+@@ -1,4 +1,4 @@
+-with Ethernet, PCI, LKM, Log
++with Ethernet, PCI, LKM, Log, Builtin
+ {
+     template type   Ethernet::ProtocolId()
+     {
+@@ -51,7 +51,7 @@
+     {
+         decl  data_types()
+         {
+-            struct net_device ndev;
++            struct net_device   data;
+         }
+ 
+         chunk LKM::includes()
+@@ -59,9 +59,15 @@
+             #include <linux/netdevice.h>
+         }
+ 
++        method  init(Builtin::symbol dev)
++        {
++            ${self} = (${Ethernet::AbstractDevice} *)${dev};
++        }
++
+         map
+         {
+-            netdev:   ${self}->ndev;
++            k_net_dev: ((struct net_device *)${self});
++            rtx_ether_ctx: netdev_priv((struct net_device *)${self});
+         }
+     }
+ 
+@@ -88,29 +94,43 @@
+             #include <linux/etherdevice.h>
+         }
+ 
+-        method init(Ethernet::AbstractDevice net_dev, PCI::AbstractDevice pci_dev)
++        /* XXX: if the first arg is not called rtx_net_dev, it breaks. */
++        method init(Ethernet::AbstractDevice rtx_net_dev, PCI::AbstractDevice pci_dev)
+         {
+-            ${self} = netdev_priv(&${net_dev.netdev});
++            ${self} = ${rtx_net_dev.rtx_ether_ctx}; 
+             /*
+              * We can use -> because we know that ${self} will be always a
+              * pointer, but the ambiguity sucks.
+              */
+             ${self}->pci_dev = ${pci_dev};
+-            ${self}->net_dev = ${net_dev};
++            ${self}->net_dev = ${rtx_net_dev};
+         }
+ 
+         map
+         {
+-            device: ${self}->pci_dev->data.dev;
++            /*
++             * XXX: I'd like to be able to do things like:
++             * device: ${self.pci_dev.k_pci_dev}->dev;
++             *
++             * Btw, should this be ${PCI::AbstractDevice} instead of directly
++             * struct pci_dev?
++             */
++            device: ((struct pci_dev *)(${self})->pci_dev)->dev;
+             pci_device: ${self}->pci_dev;
+             net_device: ${self}->net_dev;
+-            perm_addr: ${self}->net_dev->ndev.perm_addr;
+-            dev_addr: ${self}->net_dev->ndev.dev_addr;
++            perm_addr: ((struct net_device *)(${self})->net_dev)->perm_addr;
++            dev_addr: ((struct net_device *)(${self})->net_dev)->dev_addr;
++            irq: ((struct pci_dev *)(${self})->pci_dev)->irq;
+         }
+     }
+ 
+     template sequence   Ethernet::open(Ethernet::Device dev)
+     {
++        chunk   LKM::includes()
++        {
++            #include <linux/interrupt.h>
++        }
++
+         chunk LKM::prototypes()
+         {
+             static int  rtx_ethernet_open(struct net_device *);
+@@ -120,12 +140,40 @@
+         {
+             static int  rtx_ethernet_open(struct net_device *dev)
+             {
+-                ${Ethernet::Device} *rtx_ether_ctx = netdev_priv(dev);
++                /*
++                 * XXX The casts are here because the compiler doesn't resolve
++                 * "enclosed" type (e.g: local.var.enclosed) correctly.
++                 */
++                ${Ethernet::AbstractDevice} *rtx_net_dev;
++                ${cast local.rtx_net_dev as Ethernet::AbstractDevice};
++                { /* XXX: I end up with a placeholder if I don't open a scope */
++                    ${local.rtx_net_dev.init(local.dev)};
++                }
+ 
++                ${Ethernet::Device} *rtx_ether_ctx = ${local.rtx_net_dev.rtx_ether_ctx};
+                 ${cast local.rtx_ether_ctx as Ethernet::Device};
++
++                int error;
++                {
++                    ${Log::info("installing the interrupt handler")};
++                }
++                error = request_irq(${local.rtx_ether_ctx.irq},
++                                    rtx_ethernet_interrupt_handler,
++                                    IRQF_SHARED,
++                                    ${config.name},
++                                    ${local.rtx_net_dev.k_net_dev});
++                if (error)
++                {
++                    ${Log::info("Cannot register the interrupt handler")};
++                    goto error;
++                }
++
+                 ${pointcut ::IMPLEMENTATION(local.rtx_ether_ctx)};
+ 
+                 return 0;
++
++            error:
++                return error;
+             }
+         }
+     }
+@@ -162,11 +210,23 @@
+         {
+             static int  rtx_ethernet_close(struct net_device *dev)
+             {
+-                ${Ethernet::Device} *rtx_ether_ctx = netdev_priv(dev);
++                ${Ethernet::AbstractDevice} *rtx_net_dev;
++                ${cast local.rtx_net_dev as Ethernet::AbstractDevice};
++                { /* XXX: I end up with a placeholder if I don't open a scope */
++                    ${local.rtx_net_dev.init(local.dev)};
++                }
+ 
++                ${Ethernet::Device} *rtx_ether_ctx = ${local.rtx_net_dev.rtx_ether_ctx};
+                 ${cast local.rtx_ether_ctx as Ethernet::Device};
++
++                /* TODO: change this pointcut into a pointcut/adapter/callback: */
+                 ${pointcut ::IMPLEMENTATION(local.rtx_ether_ctx)};
+ 
++                free_irq(${local.rtx_ether_ctx.irq}, ${local.rtx_net_dev.k_net_dev});
++                {
++                    ${Log::info("interrupt handler free'ed")};
++                }
++
+                 return 0;
+             }
+         }
+@@ -187,9 +247,13 @@
+         {
+             static enum irqreturn   rtx_ethernet_interrupt_handler(int irq, void *dev_id)
+             {
+-                ${Ethernet::Device} *rtx_ether_ctx = dev_id;
++                ${Ethernet::AbstractDevice} *rtx_net_dev = dev_id;
++                ${cast local.rtx_net_dev as Ethernet::AbstractDevice};
+ 
++                ${Ethernet::Device} *rtx_ether_ctx;
+                 ${cast local.rtx_ether_ctx as Ethernet::Device};
++                rtx_ether_ctx = ${local.rtx_net_dev.rtx_ether_ctx};
++
+                 ${pointcut ::IMPLEMENTATION(local.rtx_ether_ctx)};
+ 
+                 return IRQ_NONE;
+@@ -219,23 +283,26 @@
+          */
+         chunk PCI::pci_probe_hook(PCI::Device rtx_pci_dev)
+         {
++            ${Ethernet::AbstractDevice} *rtx_net_dev;
+             ${Ethernet::Device} *rtx_ether_ctx;
+-            ${Ethernet::AbstractDevice} *net_dev;
+-            ${cast local.net_dev as Ethernet::AbstractDevice};
++            ${cast local.rtx_net_dev as Ethernet::AbstractDevice};
+ 
+-            net_dev = (${Ethernet::AbstractDevice}*) alloc_etherdev(sizeof(*rtx_ether_ctx));
+-            if (!net_dev)
++            /* Cast the result back into our "transparent wrapper" type */
++            rtx_net_dev = (${Ethernet::AbstractDevice}*)alloc_etherdev(sizeof(*rtx_ether_ctx));
++            if (!rtx_net_dev)
+             {
+                 ${Log::info("cannot allocate the ethernet device context")};
+                 error = -ENOMEM;
+                 goto fail;
+             }
+-            SET_NETDEV_DEV(&${local.net_dev.netdev}, ${rtx_pci_dev.device});
+-            strlcpy(${local.net_dev.netdev}.name, ${config.ifname}, sizeof(${local.net_dev.netdev}.name));
+-            ${local.net_dev.netdev}.irq = ${rtx_pci_dev.irq};
+-            ${local.net_dev.netdev}.netdev_ops = &rtx_ether_ops;
++            SET_NETDEV_DEV(${local.rtx_net_dev.k_net_dev}, ${rtx_pci_dev.device});
++            strlcpy(${local.rtx_net_dev.k_net_dev}->name,
++                    ${config.ifname},
++                    sizeof(${local.rtx_net_dev.k_net_dev}->name));
++            ${local.rtx_net_dev.k_net_dev}->irq = ${rtx_pci_dev.irq};
++            ${local.rtx_net_dev.k_net_dev}->netdev_ops = &rtx_ether_ops;
+ 
+-            error = register_netdev(&${local.net_dev.netdev});
++            error = register_netdev(${local.rtx_net_dev.k_net_dev});
+             if (error)
+             {
+                 ${Log::info("cannot register the driver in the net subsystem")};
+@@ -247,14 +314,11 @@
+              * XXX: the cast is here because the compiler resolve the
+              * type of rtx_pci_dev.pci_device to the type of
+              * rtx_pci_dev instead of the type of rtx_pci_dev.pci_device.
+-             *
+-             * Also, I'm getting placeholder in the generated code if
+-             * I don't open a scope here.
+              */
+-            {
+-                ${PCI::AbstractDevice} *rtx_pdev = ${rtx_pci_dev.pci_device};
+-                ${cast local.rtx_pdev as PCI::AbstractDevice};
+-                ${local.rtx_ether_ctx.init(local.net_dev, local.rtx_pdev)};
++            ${PCI::AbstractDevice} *workaround = ${rtx_pci_dev.pci_device};
++            ${cast local.workaround as PCI::AbstractDevice};
++            { /* XXX: I end up with a placeholder if I don't open a scope */
++                ${local.rtx_ether_ctx.init(local.rtx_net_dev, local.workaround)};
+             }
+ 
+             /* Register ourselves in the parent context: */
+@@ -267,19 +331,16 @@
+              */
+             int bars = ${rtx_pci_dev.bars};
+             unsigned char /* __iomem */ *ioaddr = ${rtx_pci_dev.ioaddr};
+-            int irq = ${rtx_pci_dev.irq};
+             ${cast local.bars as Builtin::number};
+-            ${cast local.irq as Builtin::number};
+             ${cast local.rtx_ether_ctx as Ethernet::Device};
+             ${pointcut Ethernet::adapter_init_context(local.rtx_ether_ctx,
+                                                       local.bars,
+-                                                      local.ioaddr,
+-                                                      local.irq)};
++                                                      local.ioaddr)};
+             ${pointcut Ethernet::adapter_reset(local.rtx_ether_ctx)};
+             ${pointcut Ethernet::adapter_load_mac_address(local.rtx_ether_ctx)};
+             memcpy(${local.rtx_ether_ctx.perm_addr},
+                    ${local.rtx_ether_ctx.dev_addr},
+-                   ${local.net_dev.netdev}.addr_len);
++                   ${local.rtx_net_dev.k_net_dev}->addr_len);
+         }
+ 
+         /* This chunk should be removed (see #26) */
+@@ -296,15 +357,15 @@
+          */
+         chunk   PCI::pci_remove_hook(PCI::Device rtx_pci_dev)
+         {
+-            ${Ethernet::Device} *rtx_ether_ctx = ${rtx_pci_dev.context};
+-            ${Ethernet::AbstractDevice} *rtx_ether_dev = (${Ethernet::AbstractDevice}*) ${local.rtx_ether_ctx.net_device};
+-
++            ${Ethernet::Device} *rtx_ether_ctx = ${rtx_pci_dev.rtx_drv_context};
++            ${cast local.rtx_ether_ctx as Ethernet::Device}; /* XXX */
+             BUG_ON(!rtx_ether_ctx);
+ 
+-            ${cast local.rtx_ether_ctx as Ethernet::Device};
+-            ${cast local.rtx_ether_dev as Ethernet::AbstractDevice};
+-            unregister_netdev(&${local.rtx_ether_dev.netdev});
+-            free_netdev(&${local.rtx_ether_dev.netdev});
++            ${Ethernet::AbstractDevice} *rtx_net_dev = ${local.rtx_ether_ctx.net_device};
++            ${cast local.rtx_net_dev as Ethernet::AbstractDevice}; /* XXX */
++
++            unregister_netdev(${local.rtx_net_dev.k_net_dev});
++            free_netdev(${local.rtx_net_dev.k_net_dev});
+         }
+ 
+         /* This chunk should be removed (see #26) */
+diff --git a/rathaxes/samples/e1000/ethernet.rti b/rathaxes/samples/e1000/ethernet.rti
+--- a/rathaxes/samples/e1000/ethernet.rti
++++ b/rathaxes/samples/e1000/ethernet.rti
+@@ -16,8 +16,15 @@
+     provided type   AbstractDevice
+     {
+         chunk       LKM::includes();
++        method      init(Builtin::symbol);
+         decl        data_types();
+-        attribute   Builtin::symbol netdev;
++
++        attribute   Builtin::symbol k_net_dev;
++        /*
++         * XXX: should be a Ethernet::Device, but that causes a circular
++         * dependency.
++         */
++        attribute   Builtin::symbol rtx_ether_ctx;
+     }
+ 
+     provided type   Device
+@@ -34,12 +41,14 @@
+          * I'd like to use better names here, but I'd like to understand the
+          * difference between the two first:
+          */
+-        attribute   Builtin::symbol             perm_addr;
+-        attribute   Builtin::symbol             dev_addr;
++        attribute   Builtin::symbol perm_addr;
++        attribute   Builtin::symbol dev_addr;
++        attribute   Builtin::symbol irq;
+     }
+ 
+     required sequence   open(Ethernet::Device)
+     {
++        provided chunk  LKM::includes();
+         provided chunk  LKM::prototypes();
+         provided chunk  LKM::code();
+     }
+@@ -69,8 +78,7 @@
+ 
+         provided pointcut   Ethernet::adapter_init_context(Ethernet::Device,
+                                                            Builtin::number,
+-                                                           Builtin::symbol,
+-                                                           Builtin::number);
++                                                           Builtin::symbol);
+         provided pointcut   Ethernet::adapter_reset(Ethernet::Device);
+         provided pointcut   Ethernet::adapter_load_mac_address(Ethernet::Device);
+     }
+diff --git a/rathaxes/samples/e1000/lkm.rtx b/rathaxes/samples/e1000/lkm.rtx
+--- a/rathaxes/samples/e1000/lkm.rtx
++++ b/rathaxes/samples/e1000/lkm.rtx
+@@ -4,13 +4,6 @@
+     {
+         Log::info("opening the device");
+ 
+-        /*
+-         * Maybe e1000::create_device should be called from here, to be
+-         * more coherent.
+-         */
+-
+-        e1000::setup_interrupt_handler(dev);
+-        Log::info("interrupt handler installed");
+ 
+         e1000::set_up_device(dev);
+         Log::info("device activated");
+@@ -32,9 +25,6 @@
+          */
+         e1000::free_rx_tx(dev);
+         Log::info("free'ed up rx/tx resources");
+-
+-        e1000::free_interrupt_handler(dev);
+-        Log::info("interrupt handler free'ed");
+     }
+ 
+     Ethernet::interrupt_handler(Ethernet::Device dev)
+diff --git a/rathaxes/samples/e1000/pci.blt b/rathaxes/samples/e1000/pci.blt
+--- a/rathaxes/samples/e1000/pci.blt
++++ b/rathaxes/samples/e1000/pci.blt
+@@ -16,15 +16,15 @@
+         {
+         }
+ 
+-        method  set_context(Builtin::symbol ctx)
++        method  set_rtx_context(Builtin::symbol ctx)
+         {
+-            pci_set_drvdata(&${self}->data, ${ctx});
++            pci_set_drvdata(${self.k_pci_dev}, ${ctx});
+         }
+ 
+         map
+         {
+-            data: ${self}->data;
+-            drv_data: pci_get_drvdata(&${self}->data);
++            k_pci_dev: ((struct pci_dev *)${self});
++            rtx_pci_ctx: pci_get_drvdata((struct pci_dev *)${self});
+         }
+     }
+ 
+@@ -52,13 +52,13 @@
+                 int error;
+                 ${PCI::AbstractDevice}  *enable_pdev = self->pdev;
+                 ${cast local.enable_pdev as PCI::AbstractDevice};
+-                error = pci_enable_device(&${local.enable_pdev.data});
++                error = pci_enable_device(${local.enable_pdev.k_pci_dev});
+                 if (error)
+                     return error;
+-                error = pci_request_selected_regions(&${local.enable_pdev.data}, self->bars, ${config.name});
++                error = pci_request_selected_regions(${local.enable_pdev.k_pci_dev}, self->bars, ${config.name});
+                 if (error)
+                     return error;
+-                pci_set_master(&${local.enable_pdev.data});
++                pci_set_master(${local.enable_pdev.k_pci_dev});
+                 return 0;
+             }
+ 
+@@ -68,8 +68,8 @@
+                 ${cast local.disable_pdev as PCI::AbstractDevice};
+                 if (self->ioaddr)
+                     iounmap(self->ioaddr);
+-                pci_release_selected_regions(&${local.disable_pdev.data}, self->bars);
+-                pci_disable_device(&${local.disable_pdev.data});
++                pci_release_selected_regions(${local.disable_pdev.k_pci_dev}, self->bars);
++                pci_disable_device(${local.disable_pdev.k_pci_dev});
+             }
+         }
+ 
+@@ -78,7 +78,7 @@
+             ${PCI::AbstractDevice} * workaround = (${PCI::AbstractDevice}*)pdev;
+             ${cast local.workaround as PCI::AbstractDevice};
+             ${self}->pdev = ${pdev};
+-            ${self}->bars = pci_select_bars(&${local.workaround.data}, IORESOURCE_MEM);
++            ${self}->bars = pci_select_bars(${local.workaround.k_pci_dev}, IORESOURCE_MEM);
+             ${self}->ioaddr = NULL;
+             ${self}->context = NULL;
+         }
+@@ -97,18 +97,18 @@
+         {
+             ${PCI::AbstractDevice} *select_ioaddr_pdev = ${self}->pdev;
+             ${cast local.select_ioaddr_pdev as PCI::AbstractDevice};
+-            ${self}->ioaddr = pci_ioremap_bar(&${local.select_ioaddr_pdev.data}, ${bar});
++            ${self}->ioaddr = pci_ioremap_bar(${local.select_ioaddr_pdev.k_pci_dev}, ${bar});
+         }
+ 
+-        method  set_context(Builtin::symbol ctx)
++        method  set_rtx_drv_context(Builtin::symbol ctx)
+         {
+             ${self}->context = ctx;
+         }
+ 
+         map
+         {
+-            context: ${self}->context;
+-            device: &${self}->pdev->data.dev;
++            rtx_drv_context: ${self}->context;
++            device: &((struct pci_dev *)(${self})->pdev->dev);
+             pci_device: ${self}->pdev;
+             irq: ${self}->pdev->data.irq;
+             bars: ${self}->bars;
+@@ -151,7 +151,7 @@
+                     ${local.rtx_pci_dev.init(local.rtx_pdev)};
+                 }
+ 
+-                /* ${local.pdev.set_context(local.rtx_pci_dev)}; */
++                /* ${local.pdev.set_rtx_context(local.rtx_pci_dev)}; */
+                 pci_set_drvdata(pdev, rtx_pci_dev);
+ 
+                 /* ${local.rtx_pci_dev.enable()}; */
+@@ -184,7 +184,7 @@
+                 return 0;
+ 
+             fail:
+-                /* ${local.pdev.set_context(NULL)}; */
++                /* ${local.pdev.set_rtx_drv_context(NULL)}; */
+                 pci_set_drvdata(pdev, NULL);
+                 kfree(rtx_pci_dev);
+                 return error;
+@@ -210,7 +210,7 @@
+             {
+                 ${PCI::AbstractDevice}  *rtx_pdev = (${PCI::AbstractDevice}*)pdev;
+                 ${cast local.rtx_pdev as PCI::AbstractDevice};
+-                ${PCI::Device} *rtx_pci_dev = ${rtx_pdev.drv_data};
++                ${PCI::Device} *rtx_pci_dev = ${rtx_pdev.rtx_pci_ctx};
+ 
+                 BUG_ON(!rtx_pci_dev);
+ 
+diff --git a/rathaxes/samples/e1000/pci.rti b/rathaxes/samples/e1000/pci.rti
+--- a/rathaxes/samples/e1000/pci.rti
++++ b/rathaxes/samples/e1000/pci.rti
+@@ -10,10 +10,15 @@
+ 
+         chunk       LKM::includes();
+         method      init(PCI::AbstractDevice);
+-        method      set_context(Builtin::symbol);
++        /*
++         * XXX: the argument should be a PCI::Device but that causes a circular
++         * dependency:
++         */
++        method      set_rtx_context(Builtin::symbol);
+ 
+-        attribute   Builtin::symbol data;
+-        attribute   Builtin::symbol drv_data;
++        attribute   Builtin::symbol k_pci_dev;
++        /* XXX: should be PCI::Device (see above point) */
++        attribute   Builtin::symbol rtx_pci_ctx;
+     }
+ 
+     provided type   PCI::Device
+@@ -27,9 +32,9 @@
+         method      enable();
+         method      disable();
+         method      select_ioaddr(Builtin::number);
+-        method      set_context(Builtin::symbol);
++        method      set_rtx_drv_context(Builtin::symbol);
+ 
+-        attribute   Builtin::symbol         context;
++        attribute   Builtin::symbol         rtx_drv_context;
+         attribute   Device::AbstractDevice  device;
+         attribute   PCI::AbstractDevice     pci_device;
+         attribute   Builtin::symbol         ioaddr;
+diff --git a/rathaxes/samples/e1000/socket.blt b/rathaxes/samples/e1000/socket.blt
+--- a/rathaxes/samples/e1000/socket.blt
++++ b/rathaxes/samples/e1000/socket.blt
+@@ -14,7 +14,7 @@
+ 
+         map
+         {
+-            data: ${self}->data;
++            k_sk_buff: ((struct sk_buff *)${self});
+         }
+     }
+ 
+@@ -131,22 +131,22 @@
+ 
+         method   map_to(Device::AbstractDevice dev)
+         {
+-            rtx_socket_skbuff_map(${self}, &${dev.data}, DMA_TO_DEVICE);
++            rtx_socket_skbuff_map(${self}, ${dev.k_device}, DMA_TO_DEVICE);
+         }
+ 
+         method   map_from(Device::AbstractDevice dev)
+         {
+-            rtx_socket_skbuff_map(${self}, &${dev.data}, DMA_FROM_DEVICE);
++            rtx_socket_skbuff_map(${self}, ${dev.k_device}, DMA_FROM_DEVICE);
+         }
+ 
+         method   unmap_to_and_free(Device::AbstractDevice dev)
+         {
+-            rtx_socket_skbuff_unmap_and_free(${self}, &${dev.data}, DMA_TO_DEVICE);
++            rtx_socket_skbuff_unmap_and_free(${self}, ${dev.k_device}, DMA_TO_DEVICE);
+         }
+ 
+         method   unmap_from_and_free(Device::AbstractDevice dev)
+         {
+-            rtx_socket_skbuff_unmap_and_free(${self}, &${dev.data}, DMA_FROM_DEVICE);
++            rtx_socket_skbuff_unmap_and_free(${self}, ${dev.k_device}, DMA_FROM_DEVICE);
+         }
+ 
+         map
+diff --git a/rathaxes/samples/e1000/socket.rti b/rathaxes/samples/e1000/socket.rti
+--- a/rathaxes/samples/e1000/socket.rti
++++ b/rathaxes/samples/e1000/socket.rti
+@@ -5,7 +5,7 @@
+     {
+         chunk       LKM::includes();
+         decl        data_types();
+-        attribute   Builtin::symbol data;
++        attribute   Builtin::symbol k_sk_buff;
+     }
+ 
+     provided type   SKBuff
--- a/series	Thu Jan 31 19:35:47 2013 +0100
+++ b/series	Thu Feb 28 23:30:59 2013 -0800
@@ -1,1 +1,2 @@
-com_add_slides_for_the_fosdem_presentation.patch
+maintainers_fix_indentation_in_use_rathaxes.patch
+rathaxes_trying_to_fix_the_abstract_type_nightmare_in_e1000.patch