mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
[NET]: Move hardware header operations out of netdevice.
Since hardware header operations are part of the protocol class not the device instance, make them into a separate object and save memory. Signed-off-by: Stephen Hemminger <[email protected]> Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
parent
b95cce3576
commit
3b04ddde02
65 changed files with 481 additions and 475 deletions
|
|
@ -314,6 +314,12 @@ int unregister_vlan_device(struct net_device *dev)
|
|||
*/
|
||||
static struct lock_class_key vlan_netdev_xmit_lock_key;
|
||||
|
||||
static const struct header_ops vlan_header_ops = {
|
||||
.create = vlan_dev_hard_header,
|
||||
.rebuild = vlan_dev_rebuild_header,
|
||||
.parse = eth_header_parse,
|
||||
};
|
||||
|
||||
static int vlan_dev_init(struct net_device *dev)
|
||||
{
|
||||
struct net_device *real_dev = VLAN_DEV_INFO(dev)->real_dev;
|
||||
|
|
@ -331,18 +337,14 @@ static int vlan_dev_init(struct net_device *dev)
|
|||
memcpy(dev->broadcast, real_dev->broadcast, dev->addr_len);
|
||||
|
||||
if (real_dev->features & NETIF_F_HW_VLAN_TX) {
|
||||
dev->hard_header = real_dev->hard_header;
|
||||
dev->header_ops = real_dev->header_ops;
|
||||
dev->hard_header_len = real_dev->hard_header_len;
|
||||
dev->hard_start_xmit = vlan_dev_hwaccel_hard_start_xmit;
|
||||
dev->rebuild_header = real_dev->rebuild_header;
|
||||
} else {
|
||||
dev->hard_header = vlan_dev_hard_header;
|
||||
dev->header_ops = &vlan_header_ops;
|
||||
dev->hard_header_len = real_dev->hard_header_len + VLAN_HLEN;
|
||||
dev->hard_start_xmit = vlan_dev_hard_start_xmit;
|
||||
dev->rebuild_header = vlan_dev_rebuild_header;
|
||||
}
|
||||
dev->hard_header_parse = real_dev->hard_header_parse;
|
||||
dev->hard_header_cache = NULL;
|
||||
|
||||
lockdep_set_class(&dev->_xmit_lock, &vlan_netdev_xmit_lock_key);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -53,8 +53,8 @@ int vlan_dev_rebuild_header(struct sk_buff *skb);
|
|||
int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev,
|
||||
struct packet_type *ptype, struct net_device *orig_dev);
|
||||
int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev,
|
||||
unsigned short type, void *daddr, void *saddr,
|
||||
unsigned len);
|
||||
unsigned short type, const void *daddr,
|
||||
const void *saddr, unsigned len);
|
||||
int vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev);
|
||||
int vlan_dev_hwaccel_hard_start_xmit(struct sk_buff *skb, struct net_device *dev);
|
||||
int vlan_dev_change_mtu(struct net_device *dev, int new_mtu);
|
||||
|
|
|
|||
|
|
@ -343,8 +343,8 @@ static inline unsigned short vlan_dev_get_egress_qos_mask(struct net_device* dev
|
|||
* physical devices.
|
||||
*/
|
||||
int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev,
|
||||
unsigned short type, void *daddr, void *saddr,
|
||||
unsigned len)
|
||||
unsigned short type,
|
||||
const void *daddr, const void *saddr, unsigned len)
|
||||
{
|
||||
struct vlan_hdr *vhdr;
|
||||
unsigned short veth_TCI = 0;
|
||||
|
|
|
|||
Loading…
Reference in a new issue