Blocks runtime in the kernel

Justin Hibbits <[email protected]>
Newsgroups gmane.os.freebsd.architechture
Message-ID <[email protected]>
Most probably know I've been working on the IfAPI conversion of all
network drivers in order to hide the contents of `struct ifnet`.  I'm
pretty much done with the development, and it's all in review.
However, there's one bit that I've thought is very clunky since I added
it, the if_foreach() iterator function, which iterates over all
interfaces in the current VNET, and calls a callback to operate on each
interface.  I've noticed that oftentimes I end up with a 2 line
callback, which just calls if_foreach_addr_type(), so I end up with
just trivial callback functions, which seems like a waste.

All that backstory to say, would it be beneficial to anyone else to
add a (very basic) blocks runtime to the kernel for doing things like
this?  The rough change to the IfAPI becomes:

int if_foreach_b(int (^)(if_t));

__block int foo = 0;

if_foreach_b(^(if_t ifp) {
  if (if_getlinkstate(ifp) == LINK_STATE_UP)
    foo++;
});

The same could be done for other *_foreach KPIs as well, if this proves
out.  I think I could have something working in the next several days.

The only technical snag I see with this would be other compilers.  I'm
not sure if GCC still supports blocks, it did at one point.

What do you think?

- Justin
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.