diff options
author | Simon Wunderlich <siwu@hrz.tu-chemnitz.de> | 2010-01-02 11:30:48 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-03-03 16:42:36 -0800 |
commit | e70171957a3ac67fd62af0c66efe7b7749121899 (patch) | |
tree | ec02d2965afac6384ab0fd29607c4062f93bf134 /drivers/staging/batman-adv/soft-interface.h | |
parent | c4bf05d3960981a4291bcc9580f3d73eb4dcbe84 (diff) |
Staging: batman-adv: receive packets directly using skbs
This patch removes the (ugly and racy) packet receiving thread and the
kernel socket usage. Instead, packets are received directly by registering
the ethernet type and handling skbs instead of self-allocated buffers.
Some consequences and comments:
* we don't copy the payload data when forwarding/sending/receiving data
anymore. This should boost performance.
* packets from/to different interfaces can be (theoretically) processed
simultaneously. Only the big originator hash lock might be in the way.
* no more polling or sleeping/wakeup/scheduling issues when receiving
packets
* this might introduce new race conditions.
* aggregation and vis code still use packet buffers and are not (yet)
converted.
* all spinlocks were converted to irqsave/restore versions to solve
some lifelock issues when preempted. This might be overkill, some
of these locks might be reverted later.
* skb copies are only done if neccesary to avoid overhead
performance differences:
* we made some "benchmarks" with intel laptops.
* bandwidth on Gigabit Ethernet increased from ~500 MBit/s to ~920 MBit/s
* ping latency decresed from ~2ms to ~0.2 ms
I did some tests on my 9 node qemu environment and could confirm that
usual sending/receiving, forwarding, vis, batctl ping etc works.
Signed-off-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
Acked-by: Sven Eckelmann <sven.eckelmann@gmx.de>
Acked-by: Marek Lindner <lindner_marek@yahoo.de>
Acked-by: Linus Lüssing <linus.luessing@web.de>
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/batman-adv/soft-interface.h')
-rw-r--r-- | drivers/staging/batman-adv/soft-interface.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/staging/batman-adv/soft-interface.h b/drivers/staging/batman-adv/soft-interface.h index 515e276ef53..c0cad8134b2 100644 --- a/drivers/staging/batman-adv/soft-interface.h +++ b/drivers/staging/batman-adv/soft-interface.h @@ -28,6 +28,7 @@ struct net_device_stats *interface_stats(struct net_device *dev); int interface_set_mac_addr(struct net_device *dev, void *addr); int interface_change_mtu(struct net_device *dev, int new_mtu); int interface_tx(struct sk_buff *skb, struct net_device *dev); -void interface_rx(struct net_device *dev, void *packet, int packet_len); +void interface_rx(struct sk_buff *skb, int hdr_size); +int my_skb_push(struct sk_buff *skb, unsigned int len); extern unsigned char mainIfAddr[]; |