Don't lock the TX queue of a device in newer Linux kernels.

This bug was revealed by commit 5b88803. Regardless of the
NETIF_F_LLTX flag, we should not lock the TX queue of the device
ourselves with newer kernels, since we call the dev_queue_xmit()
function that locks the queue if needed.
linuxmodule/todevce: don't attempt to defer packet after dev_queue_xmit

After dev_queue_xmit, the packet has been consumed regardless of ret. If ret
were not zero, _q = p despite this fact and it will be Packet::kill'd by
ToDevice::cleanup.  We could skb_clone but that seems wasteful; instead,
drop.

We could also skb_get and then consume_skb on success except that there are
some network drivers (e.g. ppp_generic) that assume the skb it unshared and
will BUG otherwise.
Update LICENSE.
add CLICK_COLD #define for rarely used functions

Signed-off-by: Cliff Frey <cliff@meraki.com>
Mark many initialization-related functions as COLD

This was done by running
    sed -i -r -e 's/\b(configure\(.*\));/\1 CLICK_COLD;/' `find elements/ -name '*.hh'`
    sed -i -r -e 's/\b(initialize\(.*\));/\1 CLICK_COLD;/' `find elements/ -name '*.hh'`
    sed -i -r -e 's/\b(add_handlers\(.*\));/\1 CLICK_COLD;/' `find elements/ -name '*.hh'`
    sed -i -r -e 's/\b(cleanup\(.*\));/\1 CLICK_COLD;/' `find elements/ -name '*.hh'`
    sed -i -r -e 's/\b(read_param\(.*\));/\1 CLICK_COLD;/' `find elements/ -name '*.hh'`
    sed -i -r -e 's/\b(write_param\(.*\));/\1 CLICK_COLD;/' `find elements/ -name '*.hh'`
    sed -i -r -e 's/^( *[A-Z][a-zA-Z]+\(\));/\1 CLICK_COLD;/' `find elements/ -name '*.hh'`
    sed -i -r -e 's/^( *~[A-Z][a-zA-Z]+\(\));/\1 CLICK_COLD;/' `find elements/ -name '*.hh'`
    sed -i -r -e 's/\b([a-z_]*(write|read)_handler\(.*\));/\1 CLICK_COLD;/' `find elements/ -name '*.hh'`
and then manually fixing up directiplookup.hh

On some workloads at Meraki, we have seen bad performance caused by
instruction TLB misses.  This change drastically reduces the number of
instruction TLB misses on those workloads, leading to ~30% faster
performance (as measured on a powerpc 44x machine).

Signed-off-by: Cliff Frey <cliff@meraki.com>
test: add a simple performance test

I added this hoping for it to show that the CLICK_COLD change made a
noticable performance different on x86.  However, I could not get it to.
It may be that I need more unique click elements in order to put the
instruction TLB under more pressure.

Signed-off-by: Cliff Frey <cliff@meraki.com>
ethernet: add functionality for storing enet addrs in anno area

This roughly correspond to the get/set/store ipaddress elements.

Signed-off-by: Cliff Frey <cliff@meraki.com>
Uninitialized timestamp variable fix
Fix Args::read_or_set.

Signed-off-by: Eddie Kohler <ekohler@gmail.com>
Fix Args::read_or_set the right way.

And add a test.
Linuxmodule: Fixincludes works for Linux 3.5.

- Double asmlinkage considered stupid
- Give up on fixing notrace
- G++, why?
Merge pull request #68 from srcman/linuxmodule-patches

TX queue locking fix
Improve compilability on Linux 3.5.
Proclikefs: Make it work on 3.5.

And make it not work any more on <2.4.10.

Signed-off-by: Eddie Kohler <ekohler@gmail.com>
Merge pull request #73 from piotrjurkiewicz/master

Uninitialized timestamp variable in RandomSource
Merge pull request #72 from clifffrey/add-get-set-etheraddress

ethernet: add functionality for storing enet addrs in anno area
Merge pull request #71 from pallas/master

linuxmodule/todevce: don't attempt to defer packet after dev_queue_xmit
{Get,Store}EtherAddress: Clean up warnings.
Linuxmodule proclikefs: Use mutexes instead of spinlocks.

Mutexes are friendlier to kernels that use CONFIG_PREEMPT and
CONFIG_LOCKDEP.

Original versions of this and related commits to come were provided by
Kevin Paul Herbert at Meraki.

Signed-off-by: Eddie Kohler <ekohler@gmail.com>
Signed-off-by: Kevin Paul Herbert <kph@meraki.net>
Linuxmodule clickfs: Synchronize using mutexes, not spinlocks.

This allows handlers to be able to sleep, and is generally friendlier
as code can take spinlocks when holding a mutex, but not the other way
around. This also makes Click friendlier to kernels which use
CONFIG_PREEMPT and CONFIG_LOCKDEP.

A version of Kevin's commit.

Signed-off-by: Kevin Paul Herbert <kph@meraki.net>
Signed-off-by: Eddie Kohler <ekohler@gmail.com>