diff -urN linux.old/include/asm-mips/cpu-info.h linux.dev/include/asm-mips/cpu-info.h --- linux.old/include/asm-mips/cpu-info.h 2006-06-18 03:49:35.000000000 +0200 +++ linux.dev/include/asm-mips/cpu-info.h 2006-08-27 21:02:04.000000000 +0200 @@ -63,7 +63,6 @@ * Capability and feature descriptor structure for MIPS CPU */ unsigned long options; - unsigned long ases; unsigned int processor_id; unsigned int fpu_id; unsigned int cputype; @@ -84,6 +83,7 @@ int tc_id; /* Thread Context number */ #endif /* CONFIG_MIPS_MT */ void *data; /* Additional data */ + unsigned long ases; } __attribute__((aligned(SMP_CACHE_BYTES))); extern struct cpuinfo_mips cpu_data[]; diff -urN linux.old/include/linux/netdevice.h linux.dev/include/linux/netdevice.h --- linux.old/include/linux/netdevice.h 2006-06-18 03:49:35.000000000 +0200 +++ linux.dev/include/linux/netdevice.h 2006-08-27 21:02:04.000000000 +0200 @@ -266,8 +266,6 @@ * the interface. */ char name[IFNAMSIZ]; - /* device name hash chain */ - struct hlist_node name_hlist; /* * I/O specific fields @@ -295,22 +293,6 @@ /* ------- Fields preinitialized in Space.c finish here ------- */ - /* Net device features */ - unsigned long features; -#define NETIF_F_SG 1 /* Scatter/gather IO. */ -#define NETIF_F_IP_CSUM 2 /* Can checksum only TCP/UDP over IPv4. */ -#define NETIF_F_NO_CSUM 4 /* Does not require checksum. F.e. loopack. */ -#define NETIF_F_HW_CSUM 8 /* Can checksum all the packets. */ -#define NETIF_F_HIGHDMA 32 /* Can DMA to high memory. */ -#define NETIF_F_FRAGLIST 64 /* Scatter/gather IO. */ -#define NETIF_F_HW_VLAN_TX 128 /* Transmit VLAN hw acceleration */ -#define NETIF_F_HW_VLAN_RX 256 /* Receive VLAN hw acceleration */ -#define NETIF_F_HW_VLAN_FILTER 512 /* Receive filtering on VLAN */ -#define NETIF_F_VLAN_CHALLENGED 1024 /* Device cannot handle VLAN packets */ -#define NETIF_F_TSO 2048 /* Can offload TCP/IP segmentation */ -#define NETIF_F_LLTX 4096 /* LockLess TX */ -#define NETIF_F_UFO 8192 /* Can offload UDP Large Send*/ - struct net_device *next_sched; /* Interface index. Unique device identifier */ @@ -324,8 +306,6 @@ /* List of functions to handle Wireless Extensions (instead of ioctl). * See for details. Jean II */ const struct iw_handler_def * wireless_handlers; - /* Instance data managed by the core of Wireless Extensions. */ - struct iw_public_data * wireless_data; struct ethtool_ops *ethtool_ops; @@ -335,33 +315,37 @@ * will (read: may be cleaned up at will). */ + /* These may be needed for future network-power-down code. */ + unsigned long trans_start; /* Time (in jiffies) of last Tx */ + unsigned long last_rx; /* Time of last Rx */ - unsigned int flags; /* interface flags (a la BSD) */ + unsigned short flags; /* interface flags (a la BSD) */ unsigned short gflags; unsigned short priv_flags; /* Like 'flags' but invisible to userspace. */ - unsigned short padded; /* How much padding added by alloc_netdev() */ - - unsigned char operstate; /* RFC2863 operstate */ - unsigned char link_mode; /* mapping policy to operstate */ + unsigned short __useless_padding; unsigned mtu; /* interface MTU value */ unsigned short type; /* interface hardware type */ unsigned short hard_header_len; /* hardware hdr length */ + void *priv; /* pointer to private data */ struct net_device *master; /* Pointer to master device of a group, * which this device is member of. */ /* Interface address info. */ - unsigned char perm_addr[MAX_ADDR_LEN]; /* permanent hw address */ + unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ + unsigned char dev_addr[MAX_ADDR_LEN]; /* hw address, (before bcast + because most packets are unicast) */ unsigned char addr_len; /* hardware address length */ - unsigned short dev_id; /* for shared network cards */ struct dev_mc_list *mc_list; /* Multicast mac addresses */ int mc_count; /* Number of installed mcasts */ int promiscuity; int allmulti; + int watchdog_timeo; /* used by dev_watchdog() */ + struct timer_list watchdog_timer; /* Protocol specific pointers */ @@ -378,29 +362,17 @@ struct list_head poll_list ____cacheline_aligned_in_smp; /* Link to poll list */ - int (*poll) (struct net_device *dev, int *quota); int quota; int weight; - unsigned long last_rx; /* Time of last Rx */ /* Interface address info used in eth_type_trans() */ - unsigned char dev_addr[MAX_ADDR_LEN]; /* hw address, (before bcast - because most packets are unicast) */ - - unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ - -/* - * Cache line mostly used on queue transmit path (qdisc) - */ - /* device queue lock */ - spinlock_t queue_lock ____cacheline_aligned_in_smp; struct Qdisc *qdisc; struct Qdisc *qdisc_sleeping; + struct Qdisc *qdisc_ingress; struct list_head qdisc_list; unsigned long tx_queue_len; /* Max frames per queue allowed */ /* ingress path synchronizer */ spinlock_t ingress_lock; - struct Qdisc *qdisc_ingress; /* * One part is mostly used on xmit path (device) @@ -411,16 +383,13 @@ if nobody entered there. */ int xmit_lock_owner; - void *priv; /* pointer to private data */ - int (*hard_start_xmit) (struct sk_buff *skb, - struct net_device *dev); - /* These may be needed for future network-power-down code. */ - unsigned long trans_start; /* Time (in jiffies) of last Tx */ - - int watchdog_timeo; /* used by dev_watchdog() */ - struct timer_list watchdog_timer; /* + * Cache line mostly used on queue transmit path (qdisc) + */ + /* device queue lock */ + spinlock_t queue_lock ____cacheline_aligned_in_smp; +/* * refcnt is a very hot point, so align it on SMP */ /* Number of references to this device */ @@ -428,6 +397,8 @@ /* delayed register/unregister */ struct list_head todo_list; + /* device name hash chain */ + struct hlist_node name_hlist; /* device index hash chain */ struct hlist_node index_hlist; @@ -439,6 +410,22 @@ NETREG_RELEASED, /* called free_netdev */ } reg_state; + /* Net device features */ + unsigned int features; +#define NETIF_F_SG 1 /* Scatter/gather IO. */ +#define NETIF_F_IP_CSUM 2 /* Can checksum only TCP/UDP over IPv4. */ +#define NETIF_F_NO_CSUM 4 /* Does not require checksum. F.e. loopack. */ +#define NETIF_F_HW_CSUM 8 /* Can checksum all the packets. */ +#define NETIF_F_HIGHDMA 32 /* Can DMA to high memory. */ +#define NETIF_F_FRAGLIST 64 /* Scatter/gather IO. */ +#define NETIF_F_HW_VLAN_TX 128 /* Transmit VLAN hw acceleration */ +#define NETIF_F_HW_VLAN_RX 256 /* Receive VLAN hw acceleration */ +#define NETIF_F_HW_VLAN_FILTER 512 /* Receive filtering on VLAN */ +#define NETIF_F_VLAN_CHALLENGED 1024 /* Device cannot handle VLAN packets */ +#define NETIF_F_TSO 2048 /* Can offload TCP/IP segmentation */ +#define NETIF_F_LLTX 4096 /* LockLess TX */ +#define NETIF_F_UFO 8192 /* Can offload UDP Large Send*/ + /* Called after device is detached from network. */ void (*uninit)(struct net_device *dev); /* Called after last user reference disappears. */ @@ -447,7 +434,10 @@ /* Pointers to interface service routines. */ int (*open)(struct net_device *dev); int (*stop)(struct net_device *dev); + int (*hard_start_xmit) (struct sk_buff *skb, + struct net_device *dev); #define HAVE_NETDEV_POLL + int (*poll) (struct net_device *dev, int *quota); int (*hard_header) (struct sk_buff *skb, struct net_device *dev, unsigned short type, @@ -490,6 +480,7 @@ int (*neigh_setup)(struct net_device *dev, struct neigh_parms *); #ifdef CONFIG_NETPOLL struct netpoll_info *npinfo; + int netpoll_rx; #endif #ifdef CONFIG_NET_POLL_CONTROLLER void (*poll_controller)(struct net_device *dev); @@ -507,6 +498,17 @@ struct class_device class_dev; /* space for optional statistics and wireless sysfs groups */ struct attribute_group *sysfs_groups[3]; + + unsigned char operstate; /* RFC2863 operstate */ + unsigned char link_mode; /* mapping policy to operstate */ + unsigned short dev_id; /* for shared network cards */ + + /* Instance data managed by the core of Wireless Extensions. */ + struct iw_public_data * wireless_data; + + unsigned char perm_addr[MAX_ADDR_LEN]; /* permanent hw address */ + + unsigned short padded; /* How much padding added by alloc_netdev() */ }; #define NETDEV_ALIGN 32 @@ -587,9 +589,10 @@ struct softnet_data { - struct net_device *output_queue; + int useless_padding[3]; struct sk_buff_head input_pkt_queue; struct list_head poll_list; + struct net_device *output_queue; struct sk_buff *completion_queue; struct net_device backlog_dev; /* Sorry. 8) */ diff -urN linux.old/include/linux/timer.h linux.dev/include/linux/timer.h --- linux.old/include/linux/timer.h 2006-06-18 03:49:35.000000000 +0200 +++ linux.dev/include/linux/timer.h 2006-08-27 21:02:04.000000000 +0200 @@ -12,6 +12,9 @@ struct list_head entry; unsigned long expires; + spinlock_t lock; + unsigned long magic; + void (*function)(unsigned long); unsigned long data; diff -urN linux.old/kernel/timer.c linux.dev/kernel/timer.c --- linux.old/kernel/timer.c 2006-06-18 03:49:35.000000000 +0200 +++ linux.dev/kernel/timer.c 2006-08-27 21:02:04.000000000 +0200 @@ -147,6 +147,7 @@ { timer->entry.next = NULL; timer->base = per_cpu(tvec_bases, raw_smp_processor_id()); + spin_lock_init(&timer->lock); } EXPORT_SYMBOL(init_timer);