<div dir="ltr">Sounds good, thanks (although it'll be harder to use from non-C programs).<div><br></div><div>Do you have a good idea how to stream information as a response to ioctl?</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Mar 30, 2015 at 3:31 PM, Gilboa Davara <span dir="ltr"><<a href="mailto:gilboad@gmail.com" target="_blank">gilboad@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Thu, Mar 26, 2015 at 11:36 PM, Elazar Leibovich <<a href="mailto:elazarl@gmail.com">elazarl@gmail.com</a>> wrote:<br>
> Hi,<br>
><br>
> I'm writing a kernel module, and I want to expose some debug<br>
> information about it.<br>
><br>
> The debug information is often of the form of request-response.<br>
><br>
> For example:<br>
><br>
> - Hey module, what's up with data at 0xffffe8ff0040c000?<br>
> - Cached, populated two hours ago.<br>
><br>
> - Hey module, please invalidate data at 0xffffe8ff0002cb00<br>
> - Sure thing.<br>
><br>
> - Hey module, please record all accesses to 0xffffe8ff0006bbf0.<br>
> - OK, ask me again for stats-5<br>
> ...<br>
> - Hey module, what's in stats-5?<br>
> - So far, 41 accesses by 22 users.<br>
><br>
> Now, the question is, what is a good design to expose this information.<br>
><br>
> I think that the most reasonable way to interact with userspace is<br>
> through a debugfs file.<br>
<br>
</span>In my view, I usually prefer using ioctl-over-character device with<br>
*strongly* defined API / structures. Looking at the examples, your API<br>
should be fairly simple:<br>
typedef struct _debug_request_<br>
{<br>
    request_t request_type;<br>
    void *request_pointer;<br>
    answer_t answer_type;<br>
    union answer_data {<br>
          int __out error_code;<br>
          int   __out next_answer_time;<br>
          struct access_info {<br>
                 int __out access_count;<br>
                 int __out user_count;<br>
          };<br>
    };<br>
} debug_request_t;<br>
<br>
If you make sure you copy_from/to_user this structure in-and-out of<br>
user-space, you get fairly robust interface in a fairly short and easy<br>
to debug code.<br>
(E.g. compared to having to parse user-supplied text string in kernel<br>
mode or using debugfs [partial read/write, etc]).<br>
<span class="HOEnZb"><font color="#888888"><br>
- Gilboa<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
_______________________________________________<br>
Linux-il mailing list<br>
<a href="mailto:Linux-il@cs.huji.ac.il">Linux-il@cs.huji.ac.il</a><br>
<a href="http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il" target="_blank">http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il</a><br>
</div></div></blockquote></div><br></div>