diff options
Diffstat (limited to 'debian')
-rw-r--r-- | debian/patches/libdde_addr_fix.patch | 37 | ||||
-rw-r--r-- | debian/patches/libdde_addr_list.patch | 423 | ||||
-rw-r--r-- | debian/patches/libdde_devres.patch | 366 | ||||
-rw-r--r-- | debian/patches/libdde_dma_head.patch | 93 | ||||
-rw-r--r-- | debian/patches/libdde_ethoc.patch | 25 | ||||
-rw-r--r-- | debian/patches/libdde_ethtool.patch | 98 | ||||
-rw-r--r-- | debian/patches/libdde_group_addr.patch | 429 | ||||
-rw-r--r-- | debian/patches/libdde_mdio.patch | 359 | ||||
-rw-r--r-- | debian/patches/libdde_netdev_tx_t.patch | 66 | ||||
-rw-r--r-- | debian/patches/libdde_pci-needs_freset.patch | 39 | ||||
-rw-r--r-- | debian/patches/libdde_pci_ids.h.patch | 515 | ||||
-rw-r--r-- | debian/patches/libdde_phy.patch | 60 | ||||
-rw-r--r-- | debian/patches/libdde_pr_cont.patch | 26 | ||||
-rw-r--r-- | debian/patches/libdde_rcu.patch | 816 | ||||
-rw-r--r-- | debian/patches/libdde_rculist.patch | 12 | ||||
-rw-r--r-- | debian/patches/libdde_rx_queue.patch | 70 | ||||
-rw-r--r-- | debian/patches/libdde_trans_start.patch | 138 | ||||
-rw-r--r-- | debian/patches/libdde_ucast_list.patch | 488 | ||||
-rw-r--r-- | debian/patches/libdde_workqueue.patch | 55 | ||||
-rw-r--r-- | debian/patches/series | 44 |
20 files changed, 10 insertions, 4149 deletions
diff --git a/debian/patches/libdde_addr_fix.patch b/debian/patches/libdde_addr_fix.patch deleted file mode 100644 index 8ea9a7de..00000000 --- a/debian/patches/libdde_addr_fix.patch +++ /dev/null @@ -1,37 +0,0 @@ -commit 0c27922e4933ceb86644f4a9b1af212ffe5aad75 -Author: Eric Dumazet <eric.dumazet@gmail.com> -Date: Mon Jun 8 03:49:24 2009 +0000 - - net: dev_addr_init() fix - - commit f001fde5eadd915f4858d22ed70d7040f48767cf - (net: introduce a list of device addresses dev_addr_list (v6)) - added one regression Vegard Nossum found in its testings. - - With kmemcheck help, Vegard found some uninitialized memory - was read and reported to user, potentialy leaking kernel data. - ( thread can be found on http://lkml.org/lkml/2009/5/30/177 ) - - dev_addr_init() incorrectly uses sizeof() operator. We were - initializing one byte instead of MAX_ADDR_LEN bytes. - - Reported-by: Vegard Nossum <vegard.nossum@gmail.com> - Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> - Acked-by: Jiri Pirko <jpirko@redhat.com> - Signed-off-by: David S. Miller <davem@davemloft.net> - -diff --git a/net/core/dev.c b/net/core/dev.c -index 4913089..81b392e 100644 ---- a/libdde-linux26/lib/src/net/core/dev.c -+++ b/libdde-linux26/lib/src/net/core/dev.c -@@ -3577,8 +3577,8 @@ static int dev_addr_init(struct net_device *dev) - /* rtnl_mutex must be held here */ - - INIT_LIST_HEAD(&dev->dev_addr_list); -- memset(addr, 0, sizeof(*addr)); -- err = __hw_addr_add(&dev->dev_addr_list, NULL, addr, sizeof(*addr), -+ memset(addr, 0, sizeof(addr)); -+ err = __hw_addr_add(&dev->dev_addr_list, NULL, addr, sizeof(addr), - NETDEV_HW_ADDR_T_LAN); - if (!err) { - /* diff --git a/debian/patches/libdde_addr_list.patch b/debian/patches/libdde_addr_list.patch deleted file mode 100644 index ccca7a1a..00000000 --- a/debian/patches/libdde_addr_list.patch +++ /dev/null @@ -1,423 +0,0 @@ -commit f001fde5eadd915f4858d22ed70d7040f48767cf -Author: Jiri Pirko <jpirko@redhat.com> -Date: Tue May 5 02:48:28 2009 +0000 - - net: introduce a list of device addresses dev_addr_list (v6) - - v5 -> v6 (current): - -removed so far unused static functions - -corrected dev_addr_del_multiple to call del instead of add - - v4 -> v5: - -added device address type (suggested by davem) - -removed refcounting (better to have simplier code then safe potentially few - bytes) - - v3 -> v4: - -changed kzalloc to kmalloc in __hw_addr_add_ii() - -ASSERT_RTNL() avoided in dev_addr_flush() and dev_addr_init() - - v2 -> v3: - -removed unnecessary rcu read locking - -moved dev_addr_flush() calling to ensure no null dereference of dev_addr - - v1 -> v2: - -added forgotten ASSERT_RTNL to dev_addr_init and dev_addr_flush - -removed unnecessary rcu_read locking in dev_addr_init - -use compare_ether_addr_64bits instead of compare_ether_addr - -use L1_CACHE_BYTES as size for allocating struct netdev_hw_addr - -use call_rcu instead of rcu_synchronize - -moved is_etherdev_addr into __KERNEL__ ifdef - - This patch introduces a new list in struct net_device and brings a set of - functions to handle the work with device address list. The list is a replacement - for the original dev_addr field and because in some situations there is need to - carry several device addresses with the net device. To be backward compatible, - dev_addr is made to point to the first member of the list so original drivers - sees no difference. - - Signed-off-by: Jiri Pirko <jpirko@redhat.com> - Signed-off-by: David S. Miller <davem@davemloft.net> - -Index: hurd-debian/libdde-linux26/contrib/include/linux/etherdevice.h -=================================================================== ---- hurd-debian.orig/libdde-linux26/contrib/include/linux/etherdevice.h 2012-04-16 00:26:43.000000000 +0000 -+++ hurd-debian/libdde-linux26/contrib/include/linux/etherdevice.h 2012-04-16 00:34:43.000000000 +0000 -@@ -182,6 +182,33 @@ - return compare_ether_addr(addr1, addr2); - #endif - } -+ -+/** -+ * is_etherdev_addr - Tell if given Ethernet address belongs to the device. -+ * @dev: Pointer to a device structure -+ * @addr: Pointer to a six-byte array containing the Ethernet address -+ * -+ * Compare passed address with all addresses of the device. Return true if the -+ * address if one of the device addresses. -+ * -+ * Note that this function calls compare_ether_addr_64bits() so take care of -+ * the right padding. -+ */ -+static inline bool is_etherdev_addr(const struct net_device *dev, -+ const u8 addr[6 + 2]) -+{ -+ struct netdev_hw_addr *ha; -+ int res = 1; -+ -+ rcu_read_lock(); -+ for_each_dev_addr(dev, ha) { -+ res = compare_ether_addr_64bits(addr, ha->addr); -+ if (!res) -+ break; -+ } -+ rcu_read_unlock(); -+ return !res; -+} - #endif /* __KERNEL__ */ - - #endif /* _LINUX_ETHERDEVICE_H */ -Index: hurd-debian/libdde-linux26/contrib/include/linux/netdevice.h -=================================================================== ---- hurd-debian.orig/libdde-linux26/contrib/include/linux/netdevice.h 2012-04-16 00:33:34.000000000 +0000 -+++ hurd-debian/libdde-linux26/contrib/include/linux/netdevice.h 2012-04-16 00:34:43.000000000 +0000 -@@ -211,6 +211,16 @@ - #define dmi_users da_users - #define dmi_gusers da_gusers - -+struct netdev_hw_addr { -+ struct list_head list; -+ unsigned char addr[MAX_ADDR_LEN]; -+ unsigned char type; -+#define NETDEV_HW_ADDR_T_LAN 1 -+#define NETDEV_HW_ADDR_T_SAN 2 -+#define NETDEV_HW_ADDR_T_SLAVE 3 -+ struct rcu_head rcu_head; -+}; -+ - struct hh_cache - { - struct hh_cache *hh_next; /* Next entry */ -@@ -757,8 +767,11 @@ - */ - 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 *dev_addr; /* hw address, (before bcast -+ because most packets are -+ unicast) */ -+ -+ struct list_head dev_addr_list; /* list of device hw addresses */ - - unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ - -@@ -1768,6 +1781,13 @@ - spin_unlock_bh(&dev->addr_list_lock); - } - -+/* -+ * dev_addr_list walker. Should be used only for read access. Call with -+ * rcu_read_lock held. -+ */ -+#define for_each_dev_addr(dev, ha) \ -+ list_for_each_entry_rcu(ha, &dev->dev_addr_list, list) -+ - /* These functions live elsewhere (drivers/net/net_init.c, but related) */ - - extern void ether_setup(struct net_device *dev); -@@ -1780,6 +1800,19 @@ - alloc_netdev_mq(sizeof_priv, name, setup, 1) - extern int register_netdev(struct net_device *dev); - extern void unregister_netdev(struct net_device *dev); -+ -+/* Functions used for device addresses handling */ -+extern int dev_addr_add(struct net_device *dev, unsigned char *addr, -+ unsigned char addr_type); -+extern int dev_addr_del(struct net_device *dev, unsigned char *addr, -+ unsigned char addr_type); -+extern int dev_addr_add_multiple(struct net_device *to_dev, -+ struct net_device *from_dev, -+ unsigned char addr_type); -+extern int dev_addr_del_multiple(struct net_device *to_dev, -+ struct net_device *from_dev, -+ unsigned char addr_type); -+ - /* Functions used for secondary unicast and multicast support */ - extern void dev_set_rx_mode(struct net_device *dev); - extern void __dev_set_rx_mode(struct net_device *dev); -Index: hurd-debian/libdde-linux26/lib/src/net/core/dev.c -=================================================================== ---- hurd-debian.orig/libdde-linux26/lib/src/net/core/dev.c 2012-04-16 00:26:43.000000000 +0000 -+++ hurd-debian/libdde-linux26/lib/src/net/core/dev.c 2012-04-16 00:34:43.000000000 +0000 -@@ -3397,6 +3397,252 @@ - netif_addr_unlock_bh(dev); - } - -+/* hw addresses list handling functions */ -+ -+static int __hw_addr_add(struct list_head *list, unsigned char *addr, -+ int addr_len, unsigned char addr_type) -+{ -+ struct netdev_hw_addr *ha; -+ int alloc_size; -+ -+ if (addr_len > MAX_ADDR_LEN) -+ return -EINVAL; -+ -+ alloc_size = sizeof(*ha); -+ if (alloc_size < L1_CACHE_BYTES) -+ alloc_size = L1_CACHE_BYTES; -+ ha = kmalloc(alloc_size, GFP_ATOMIC); -+ if (!ha) -+ return -ENOMEM; -+ memcpy(ha->addr, addr, addr_len); -+ ha->type = addr_type; -+ list_add_tail_rcu(&ha->list, list); -+ return 0; -+} -+ -+static void ha_rcu_free(struct rcu_head *head) -+{ -+ struct netdev_hw_addr *ha; -+ -+ ha = container_of(head, struct netdev_hw_addr, rcu_head); -+ kfree(ha); -+} -+ -+static int __hw_addr_del_ii(struct list_head *list, unsigned char *addr, -+ int addr_len, unsigned char addr_type, -+ int ignore_index) -+{ -+ struct netdev_hw_addr *ha; -+ int i = 0; -+ -+ list_for_each_entry(ha, list, list) { -+ if (i++ != ignore_index && -+ !memcmp(ha->addr, addr, addr_len) && -+ (ha->type == addr_type || !addr_type)) { -+ list_del_rcu(&ha->list); -+ call_rcu(&ha->rcu_head, ha_rcu_free); -+ return 0; -+ } -+ } -+ return -ENOENT; -+} -+ -+static int __hw_addr_add_multiple_ii(struct list_head *to_list, -+ struct list_head *from_list, -+ int addr_len, unsigned char addr_type, -+ int ignore_index) -+{ -+ int err; -+ struct netdev_hw_addr *ha, *ha2; -+ unsigned char type; -+ -+ list_for_each_entry(ha, from_list, list) { -+ type = addr_type ? addr_type : ha->type; -+ err = __hw_addr_add(to_list, ha->addr, addr_len, type); -+ if (err) -+ goto unroll; -+ } -+ return 0; -+ -+unroll: -+ list_for_each_entry(ha2, from_list, list) { -+ if (ha2 == ha) -+ break; -+ type = addr_type ? addr_type : ha2->type; -+ __hw_addr_del_ii(to_list, ha2->addr, addr_len, type, -+ ignore_index); -+ } -+ return err; -+} -+ -+static void __hw_addr_del_multiple_ii(struct list_head *to_list, -+ struct list_head *from_list, -+ int addr_len, unsigned char addr_type, -+ int ignore_index) -+{ -+ struct netdev_hw_addr *ha; -+ unsigned char type; -+ -+ list_for_each_entry(ha, from_list, list) { -+ type = addr_type ? addr_type : ha->type; -+ __hw_addr_del_ii(to_list, ha->addr, addr_len, addr_type, -+ ignore_index); -+ } -+} -+ -+static void __hw_addr_flush(struct list_head *list) -+{ -+ struct netdev_hw_addr *ha, *tmp; -+ -+ list_for_each_entry_safe(ha, tmp, list, list) { -+ list_del_rcu(&ha->list); -+ call_rcu(&ha->rcu_head, ha_rcu_free); -+ } -+} -+ -+/* Device addresses handling functions */ -+ -+static void dev_addr_flush(struct net_device *dev) -+{ -+ /* rtnl_mutex must be held here */ -+ -+ __hw_addr_flush(&dev->dev_addr_list); -+ dev->dev_addr = NULL; -+} -+ -+static int dev_addr_init(struct net_device *dev) -+{ -+ unsigned char addr[MAX_ADDR_LEN]; -+ struct netdev_hw_addr *ha; -+ int err; -+ -+ /* rtnl_mutex must be held here */ -+ -+ INIT_LIST_HEAD(&dev->dev_addr_list); -+ memset(addr, 0, sizeof(*addr)); -+ err = __hw_addr_add(&dev->dev_addr_list, addr, sizeof(*addr), -+ NETDEV_HW_ADDR_T_LAN); -+ if (!err) { -+ /* -+ * Get the first (previously created) address from the list -+ * and set dev_addr pointer to this location. -+ */ -+ ha = list_first_entry(&dev->dev_addr_list, -+ struct netdev_hw_addr, list); -+ dev->dev_addr = ha->addr; -+ } -+ return err; -+} -+ -+/** -+ * dev_addr_add - Add a device address -+ * @dev: device -+ * @addr: address to add -+ * @addr_type: address type -+ * -+ * Add a device address to the device or increase the reference count if -+ * it already exists. -+ * -+ * The caller must hold the rtnl_mutex. -+ */ -+int dev_addr_add(struct net_device *dev, unsigned char *addr, -+ unsigned char addr_type) -+{ -+ int err; -+ -+ ASSERT_RTNL(); -+ -+ err = __hw_addr_add(&dev->dev_addr_list, addr, dev->addr_len, -+ addr_type); -+ if (!err) -+ call_netdevice_notifiers(NETDEV_CHANGEADDR, dev); -+ return err; -+} -+EXPORT_SYMBOL(dev_addr_add); -+ -+/** -+ * dev_addr_del - Release a device address. -+ * @dev: device -+ * @addr: address to delete -+ * @addr_type: address type -+ * -+ * Release reference to a device address and remove it from the device -+ * if the reference count drops to zero. -+ * -+ * The caller must hold the rtnl_mutex. -+ */ -+int dev_addr_del(struct net_device *dev, unsigned char *addr, -+ unsigned char addr_type) -+{ -+ int err; -+ -+ ASSERT_RTNL(); -+ -+ err = __hw_addr_del_ii(&dev->dev_addr_list, addr, dev->addr_len, -+ addr_type, 0); -+ if (!err) -+ call_netdevice_notifiers(NETDEV_CHANGEADDR, dev); -+ return err; -+} -+EXPORT_SYMBOL(dev_addr_del); -+ -+/** -+ * dev_addr_add_multiple - Add device addresses from another device -+ * @to_dev: device to which addresses will be added -+ * @from_dev: device from which addresses will be added -+ * @addr_type: address type - 0 means type will be used from from_dev -+ * -+ * Add device addresses of the one device to another. -+ ** -+ * The caller must hold the rtnl_mutex. -+ */ -+int dev_addr_add_multiple(struct net_device *to_dev, -+ struct net_device *from_dev, -+ unsigned char addr_type) -+{ -+ int err; -+ -+ ASSERT_RTNL(); -+ -+ if (from_dev->addr_len != to_dev->addr_len) -+ return -EINVAL; -+ err = __hw_addr_add_multiple_ii(&to_dev->dev_addr_list, -+ &from_dev->dev_addr_list, -+ to_dev->addr_len, addr_type, 0); -+ if (!err) -+ call_netdevice_notifiers(NETDEV_CHANGEADDR, to_dev); -+ return err; -+} -+EXPORT_SYMBOL(dev_addr_add_multiple); -+ -+/** -+ * dev_addr_del_multiple - Delete device addresses by another device -+ * @to_dev: device where the addresses will be deleted -+ * @from_dev: device by which addresses the addresses will be deleted -+ * @addr_type: address type - 0 means type will used from from_dev -+ * -+ * Deletes addresses in to device by the list of addresses in from device. -+ * -+ * The caller must hold the rtnl_mutex. -+ */ -+int dev_addr_del_multiple(struct net_device *to_dev, -+ struct net_device *from_dev, -+ unsigned char addr_type) -+{ -+ ASSERT_RTNL(); -+ -+ if (from_dev->addr_len != to_dev->addr_len) -+ return -EINVAL; -+ __hw_addr_del_multiple_ii(&to_dev->dev_addr_list, -+ &from_dev->dev_addr_list, -+ to_dev->addr_len, addr_type, 0); -+ call_netdevice_notifiers(NETDEV_CHANGEADDR, to_dev); -+ return 0; -+} -+EXPORT_SYMBOL(dev_addr_del_multiple); -+ -+/* unicast and multicast addresses handling functions */ -+ - int __dev_addr_delete(struct dev_addr_list **list, int *count, - void *addr, int alen, int glbl) - { -@@ -4737,6 +4983,7 @@ - - dev->gso_max_size = GSO_MAX_SIZE; - -+ dev_addr_init(dev); - netdev_init_queues(dev); - - INIT_LIST_HEAD(&dev->napi_list); -@@ -4762,6 +5009,9 @@ - - kfree(dev->_tx); - -+ /* Flush device addresses */ -+ dev_addr_flush(dev); -+ - list_for_each_entry_safe(p, n, &dev->napi_list, dev_list) - netif_napi_del(p); - diff --git a/debian/patches/libdde_devres.patch b/debian/patches/libdde_devres.patch deleted file mode 100644 index 697fdbe8..00000000 --- a/debian/patches/libdde_devres.patch +++ /dev/null @@ -1,366 +0,0 @@ ---- /dev/null 2011-08-03 18:03:30.000000000 +0000 -+++ b/libdde-linux26/contrib/lib/devres.c 2012-04-15 23:14:01.000000000 +0000 -@@ -0,0 +1,351 @@ -+#include <linux/pci.h> -+#include <linux/io.h> -+#include <linux/module.h> -+ -+void devm_ioremap_release(struct device *dev, void *res) -+{ -+ iounmap(*(void __iomem **)res); -+} -+ -+static int devm_ioremap_match(struct device *dev, void *res, void *match_data) -+{ -+ return *(void **)res == match_data; -+} -+ -+/** -+ * devm_ioremap - Managed ioremap() -+ * @dev: Generic device to remap IO address for -+ * @offset: BUS offset to map -+ * @size: Size of map -+ * -+ * Managed ioremap(). Map is automatically unmapped on driver detach. -+ */ -+void __iomem *devm_ioremap(struct device *dev, resource_size_t offset, -+ unsigned long size) -+{ -+ void __iomem **ptr, *addr; -+ -+ ptr = devres_alloc(devm_ioremap_release, sizeof(*ptr), GFP_KERNEL); -+ if (!ptr) -+ return NULL; -+ -+ addr = ioremap(offset, size); -+ if (addr) { -+ *ptr = addr; -+ devres_add(dev, ptr); -+ } else -+ devres_free(ptr); -+ -+ return addr; -+} -+EXPORT_SYMBOL(devm_ioremap); -+ -+/** -+ * devm_ioremap_nocache - Managed ioremap_nocache() -+ * @dev: Generic device to remap IO address for -+ * @offset: BUS offset to map -+ * @size: Size of map -+ * -+ * Managed ioremap_nocache(). Map is automatically unmapped on driver -+ * detach. -+ */ -+void __iomem *devm_ioremap_nocache(struct device *dev, resource_size_t offset, -+ unsigned long size) -+{ -+ void __iomem **ptr, *addr; -+ -+ ptr = devres_alloc(devm_ioremap_release, sizeof(*ptr), GFP_KERNEL); -+ if (!ptr) -+ return NULL; -+ -+ addr = ioremap_nocache(offset, size); -+ if (addr) { -+ *ptr = addr; -+ devres_add(dev, ptr); -+ } else -+ devres_free(ptr); -+ -+ return addr; -+} -+EXPORT_SYMBOL(devm_ioremap_nocache); -+ -+/** -+ * devm_iounmap - Managed iounmap() -+ * @dev: Generic device to unmap for -+ * @addr: Address to unmap -+ * -+ * Managed iounmap(). @addr must have been mapped using devm_ioremap*(). -+ */ -+void devm_iounmap(struct device *dev, void __iomem *addr) -+{ -+ iounmap(addr); -+ WARN_ON(devres_destroy(dev, devm_ioremap_release, devm_ioremap_match, -+ (void *)addr)); -+} -+EXPORT_SYMBOL(devm_iounmap); -+ -+#ifdef CONFIG_HAS_IOPORT -+/* -+ * Generic iomap devres -+ */ -+static void devm_ioport_map_release(struct device *dev, void *res) -+{ -+ ioport_unmap(*(void __iomem **)res); -+} -+ -+static int devm_ioport_map_match(struct device *dev, void *res, -+ void *match_data) -+{ -+ return *(void **)res == match_data; -+} -+ -+/** -+ * devm_ioport_map - Managed ioport_map() -+ * @dev: Generic device to map ioport for -+ * @port: Port to map -+ * @nr: Number of ports to map -+ * -+ * Managed ioport_map(). Map is automatically unmapped on driver -+ * detach. -+ */ -+void __iomem * devm_ioport_map(struct device *dev, unsigned long port, -+ unsigned int nr) -+{ -+ void __iomem **ptr, *addr; -+ -+ ptr = devres_alloc(devm_ioport_map_release, sizeof(*ptr), GFP_KERNEL); -+ if (!ptr) -+ return NULL; -+ -+ addr = ioport_map(port, nr); -+ if (addr) { -+ *ptr = addr; -+ devres_add(dev, ptr); -+ } else -+ devres_free(ptr); -+ -+ return addr; -+} -+EXPORT_SYMBOL(devm_ioport_map); -+ -+/** -+ * devm_ioport_unmap - Managed ioport_unmap() -+ * @dev: Generic device to unmap for -+ * @addr: Address to unmap -+ * -+ * Managed ioport_unmap(). @addr must have been mapped using -+ * devm_ioport_map(). -+ */ -+void devm_ioport_unmap(struct device *dev, void __iomem *addr) -+{ -+ ioport_unmap(addr); -+ WARN_ON(devres_destroy(dev, devm_ioport_map_release, -+ devm_ioport_map_match, (void *)addr)); -+} -+EXPORT_SYMBOL(devm_ioport_unmap); -+ -+#ifdef CONFIG_PCI -+/* -+ * PCI iomap devres -+ */ -+#define PCIM_IOMAP_MAX PCI_ROM_RESOURCE -+ -+struct pcim_iomap_devres { -+ void __iomem *table[PCIM_IOMAP_MAX]; -+}; -+ -+static void pcim_iomap_release(struct device *gendev, void *res) -+{ -+ struct pci_dev *dev = container_of(gendev, struct pci_dev, dev); -+ struct pcim_iomap_devres *this = res; -+ int i; -+ -+ for (i = 0; i < PCIM_IOMAP_MAX; i++) -+ if (this->table[i]) -+ pci_iounmap(dev, this->table[i]); -+} -+ -+/** -+ * pcim_iomap_table - access iomap allocation table -+ * @pdev: PCI device to access iomap table for -+ * -+ * Access iomap allocation table for @dev. If iomap table doesn't -+ * exist and @pdev is managed, it will be allocated. All iomaps -+ * recorded in the iomap table are automatically unmapped on driver -+ * detach. -+ * -+ * This function might sleep when the table is first allocated but can -+ * be safely called without context and guaranteed to succed once -+ * allocated. -+ */ -+void __iomem * const * pcim_iomap_table(struct pci_dev *pdev) -+{ -+ struct pcim_iomap_devres *dr, *new_dr; -+ -+ dr = devres_find(&pdev->dev, pcim_iomap_release, NULL, NULL); -+ if (dr) -+ return dr->table; -+ -+ new_dr = devres_alloc(pcim_iomap_release, sizeof(*new_dr), GFP_KERNEL); -+ if (!new_dr) -+ return NULL; -+ dr = devres_get(&pdev->dev, new_dr, NULL, NULL); -+ return dr->table; -+} -+EXPORT_SYMBOL(pcim_iomap_table); -+ -+/** -+ * pcim_iomap - Managed pcim_iomap() -+ * @pdev: PCI device to iomap for -+ * @bar: BAR to iomap -+ * @maxlen: Maximum length of iomap -+ * -+ * Managed pci_iomap(). Map is automatically unmapped on driver -+ * detach. -+ */ -+void __iomem * pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen) -+{ -+ void __iomem **tbl; -+ -+ BUG_ON(bar >= PCIM_IOMAP_MAX); -+ -+ tbl = (void __iomem **)pcim_iomap_table(pdev); -+ if (!tbl || tbl[bar]) /* duplicate mappings not allowed */ -+ return NULL; -+ -+ tbl[bar] = pci_iomap(pdev, bar, maxlen); -+ return tbl[bar]; -+} -+EXPORT_SYMBOL(pcim_iomap); -+ -+/** -+ * pcim_iounmap - Managed pci_iounmap() -+ * @pdev: PCI device to iounmap for -+ * @addr: Address to unmap -+ * -+ * Managed pci_iounmap(). @addr must have been mapped using pcim_iomap(). -+ */ -+void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr) -+{ -+ void __iomem **tbl; -+ int i; -+ -+ pci_iounmap(pdev, addr); -+ -+ tbl = (void __iomem **)pcim_iomap_table(pdev); -+ BUG_ON(!tbl); -+ -+ for (i = 0; i < PCIM_IOMAP_MAX; i++) -+ if (tbl[i] == addr) { -+ tbl[i] = NULL; -+ return; -+ } -+ WARN_ON(1); -+} -+EXPORT_SYMBOL(pcim_iounmap); -+ -+/** -+ * pcim_iomap_regions - Request and iomap PCI BARs -+ * @pdev: PCI device to map IO resources for -+ * @mask: Mask of BARs to request and iomap -+ * @name: Name used when requesting regions -+ * -+ * Request and iomap regions specified by @mask. -+ */ -+int pcim_iomap_regions(struct pci_dev *pdev, u16 mask, const char *name) -+{ -+ void __iomem * const *iomap; -+ int i, rc; -+ -+ iomap = pcim_iomap_table(pdev); -+ if (!iomap) -+ return -ENOMEM; -+ -+ for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { -+ unsigned long len; -+ -+ if (!(mask & (1 << i))) -+ continue; -+ -+ rc = -EINVAL; -+ len = pci_resource_len(pdev, i); -+ if (!len) -+ goto err_inval; -+ -+ rc = pci_request_region(pdev, i, name); -+ if (rc) -+ goto err_inval; -+ -+ rc = -ENOMEM; -+ if (!pcim_iomap(pdev, i, 0)) -+ goto err_region; -+ } -+ -+ return 0; -+ -+ err_region: -+ pci_release_region(pdev, i); -+ err_inval: -+ while (--i >= 0) { -+ if (!(mask & (1 << i))) -+ continue; -+ pcim_iounmap(pdev, iomap[i]); -+ pci_release_region(pdev, i); -+ } -+ -+ return rc; -+} -+EXPORT_SYMBOL(pcim_iomap_regions); -+ -+/** -+ * pcim_iomap_regions_request_all - Request all BARs and iomap specified ones -+ * @pdev: PCI device to map IO resources for -+ * @mask: Mask of BARs to iomap -+ * @name: Name used when requesting regions -+ * -+ * Request all PCI BARs and iomap regions specified by @mask. -+ */ -+int pcim_iomap_regions_request_all(struct pci_dev *pdev, u16 mask, -+ const char *name) -+{ -+ int request_mask = ((1 << 6) - 1) & ~mask; -+ int rc; -+ -+ rc = pci_request_selected_regions(pdev, request_mask, name); -+ if (rc) -+ return rc; -+ -+ rc = pcim_iomap_regions(pdev, mask, name); -+ if (rc) -+ pci_release_selected_regions(pdev, request_mask); -+ return rc; -+} -+EXPORT_SYMBOL(pcim_iomap_regions_request_all); -+ -+/** -+ * pcim_iounmap_regions - Unmap and release PCI BARs -+ * @pdev: PCI device to map IO resources for -+ * @mask: Mask of BARs to unmap and release -+ * -+ * Unamp and release regions specified by @mask. -+ */ -+void pcim_iounmap_regions(struct pci_dev *pdev, u16 mask) -+{ -+ void __iomem * const *iomap; -+ int i; -+ -+ iomap = pcim_iomap_table(pdev); -+ if (!iomap) -+ return; -+ -+ for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { -+ if (!(mask & (1 << i))) -+ continue; -+ -+ pcim_iounmap(pdev, iomap[i]); -+ pci_release_region(pdev, i); -+ } -+} -+EXPORT_SYMBOL(pcim_iounmap_regions); -+#endif -+#endif -diff --git a/libdde-linux26/lib/src/Makefile b/libdde-linux26/lib/src/Makefile -index 358196b..f7a64da 100644 ---- a/libdde-linux26/lib/src/Makefile -+++ b/libdde-linux26/lib/src/Makefile -@@ -103,6 +103,7 @@ SRC_C_libdde-linux26.o.a += \ - lib/crc32.c \ - lib/ctype.c \ - lib/cpumask.c \ -+ lib/devres.c \ - lib/find_next_bit.c \ - lib/hexdump.c \ - lib/idr.c \ diff --git a/debian/patches/libdde_dma_head.patch b/debian/patches/libdde_dma_head.patch deleted file mode 100644 index d3bf0a6c..00000000 --- a/debian/patches/libdde_dma_head.patch +++ /dev/null @@ -1,93 +0,0 @@ -commit 042a53a9e437feaf2230dd2cadcecfae9c7bfe05 -Author: Eric Dumazet <eric.dumazet@gmail.com> -Date: Fri Jun 5 04:04:16 2009 +0000 - - net: skb_shared_info optimization - - skb_dma_unmap() is quite expensive for small packets, - because we use two different cache lines from skb_shared_info. - - One to access nr_frags, one to access dma_maps[0] - - Instead of dma_maps being an array of MAX_SKB_FRAGS + 1 elements, - let dma_head alone in a new dma_head field, close to nr_frags, - to reduce cache lines misses. - - Tested on my dev machine (bnx2 & tg3 adapters), nice speedup ! - - Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> - Signed-off-by: David S. Miller <davem@davemloft.net> - -Index: hurd-debian/libdde-linux26/contrib/include/linux/skbuff.h -=================================================================== ---- hurd-debian.orig/libdde-linux26/contrib/include/linux/skbuff.h 2012-04-16 00:26:40.000000000 +0000 -+++ hurd-debian/libdde-linux26/contrib/include/linux/skbuff.h 2012-04-16 00:34:56.000000000 +0000 -@@ -142,6 +142,9 @@ - atomic_t dataref; - unsigned short nr_frags; - unsigned short gso_size; -+#ifdef CONFIG_HAS_DMA -+ dma_addr_t dma_head; -+#endif - /* Warning: this field is not always filled in (UFO)! */ - unsigned short gso_segs; - unsigned short gso_type; -@@ -152,7 +155,7 @@ - struct sk_buff *frag_list; - skb_frag_t frags[MAX_SKB_FRAGS]; - #ifdef CONFIG_HAS_DMA -- dma_addr_t dma_maps[MAX_SKB_FRAGS + 1]; -+ dma_addr_t dma_maps[MAX_SKB_FRAGS]; - #endif - }; - -Index: hurd-debian/libdde-linux26/contrib/net/core/skb_dma_map.c -=================================================================== ---- hurd-debian.orig/libdde-linux26/contrib/net/core/skb_dma_map.c 2012-04-16 00:26:40.000000000 +0000 -+++ hurd-debian/libdde-linux26/contrib/net/core/skb_dma_map.c 2012-04-16 00:34:56.000000000 +0000 -@@ -20,7 +20,7 @@ - if (dma_mapping_error(dev, map)) - goto out_err; - -- sp->dma_maps[0] = map; -+ sp->dma_head = map; - for (i = 0; i < sp->nr_frags; i++) { - skb_frag_t *fp = &sp->frags[i]; - -@@ -28,7 +28,7 @@ - fp->size, dir); - if (dma_mapping_error(dev, map)) - goto unwind; -- sp->dma_maps[i + 1] = map; -+ sp->dma_maps[i] = map; - } - sp->num_dma_maps = i + 1; - -@@ -38,10 +38,10 @@ - while (--i >= 0) { - skb_frag_t *fp = &sp->frags[i]; - -- dma_unmap_page(dev, sp->dma_maps[i + 1], -+ dma_unmap_page(dev, sp->dma_maps[i], - fp->size, dir); - } -- dma_unmap_single(dev, sp->dma_maps[0], -+ dma_unmap_single(dev, sp->dma_head, - skb_headlen(skb), dir); - out_err: - return -ENOMEM; -@@ -54,12 +54,12 @@ - struct skb_shared_info *sp = skb_shinfo(skb); - int i; - -- dma_unmap_single(dev, sp->dma_maps[0], -+ dma_unmap_single(dev, sp->dma_head, - skb_headlen(skb), dir); - for (i = 0; i < sp->nr_frags; i++) { - skb_frag_t *fp = &sp->frags[i]; - -- dma_unmap_page(dev, sp->dma_maps[i + 1], -+ dma_unmap_page(dev, sp->dma_maps[i], - fp->size, dir); - } - } diff --git a/debian/patches/libdde_ethoc.patch b/debian/patches/libdde_ethoc.patch deleted file mode 100644 index aff12ad2..00000000 --- a/debian/patches/libdde_ethoc.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- /dev/null 2011-08-03 18:03:30.000000000 +0000 -+++ b/libdde-linux26/contrib/include/net/ethoc.h 2012-04-15 22:19:57.000000000 +0000 -@@ -0,0 +1,22 @@ -+/* -+ * linux/include/net/ethoc.h -+ * -+ * Copyright (C) 2008-2009 Avionic Design GmbH -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ * -+ * Written by Thierry Reding <thierry.reding@avionic-design.de> -+ */ -+ -+#ifndef LINUX_NET_ETHOC_H -+#define LINUX_NET_ETHOC_H 1 -+ -+struct ethoc_platform_data { -+ u8 hwaddr[IFHWADDRLEN]; -+ s8 phy_id; -+}; -+ -+#endif /* !LINUX_NET_ETHOC_H */ -+ diff --git a/debian/patches/libdde_ethtool.patch b/debian/patches/libdde_ethtool.patch deleted file mode 100644 index d6c232e0..00000000 --- a/debian/patches/libdde_ethtool.patch +++ /dev/null @@ -1,98 +0,0 @@ -diff --git a/libdde-linux26/contrib/include/linux/ethtool.h b/libdde-linux26/contrib/include/linux/ethtool.h -index 27c67a5..45f34dc 100644 ---- a/libdde-linux26/contrib/include/linux/ethtool.h -+++ b/libdde-linux26/contrib/include/linux/ethtool.h -@@ -25,11 +25,14 @@ struct ethtool_cmd { - __u8 phy_address; - __u8 transceiver; /* Which transceiver to use */ - __u8 autoneg; /* Enable or disable autonegotiation */ -+ __u8 mdio_support; - __u32 maxtxpkt; /* Tx pkts before generating tx int */ - __u32 maxrxpkt; /* Rx pkts before generating rx int */ - __u16 speed_hi; -- __u16 reserved2; -- __u32 reserved[3]; -+ __u8 eth_tp_mdix; -+ __u8 reserved2; -+ __u32 lp_advertising; /* Features the link partner advertises */ -+ __u32 reserved[2]; - }; - - static inline void ethtool_cmd_speed_set(struct ethtool_cmd *ep, -@@ -469,6 +472,13 @@ struct ethtool_ops { - #define ETHTOOL_SRXFH 0x0000002a /* Set RX flow hash configuration */ - #define ETHTOOL_GGRO 0x0000002b /* Get GRO enable (ethtool_value) */ - #define ETHTOOL_SGRO 0x0000002c /* Set GRO enable (ethtool_value) */ -+#define ETHTOOL_GRXRINGS 0x0000002d /* Get RX rings available for LB */ -+#define ETHTOOL_GRXCLSRLCNT 0x0000002e /* Get RX class rule count */ -+#define ETHTOOL_GRXCLSRULE 0x0000002f /* Get RX classification rule */ -+#define ETHTOOL_GRXCLSRLALL 0x00000030 /* Get all RX classification rule */ -+#define ETHTOOL_SRXCLSRLDEL 0x00000031 /* Delete RX classification rule */ -+#define ETHTOOL_SRXCLSRLINS 0x00000032 /* Insert RX classification rule */ -+#define ETHTOOL_FLASHDEV 0x00000033 /* Flash firmware to device */ - - /* compatibility with older code */ - #define SPARC_ETH_GSET ETHTOOL_GSET -@@ -491,6 +501,11 @@ struct ethtool_ops { - #define SUPPORTED_Pause (1 << 13) - #define SUPPORTED_Asym_Pause (1 << 14) - #define SUPPORTED_2500baseX_Full (1 << 15) -+#define SUPPORTED_Backplane (1 << 16) -+#define SUPPORTED_1000baseKX_Full (1 << 17) -+#define SUPPORTED_10000baseKX4_Full (1 << 18) -+#define SUPPORTED_10000baseKR_Full (1 << 19) -+#define SUPPORTED_10000baseR_FEC (1 << 20) - - /* Indicates what features are advertised by the interface. */ - #define ADVERTISED_10baseT_Half (1 << 0) -@@ -509,6 +524,11 @@ struct ethtool_ops { - #define ADVERTISED_Pause (1 << 13) - #define ADVERTISED_Asym_Pause (1 << 14) - #define ADVERTISED_2500baseX_Full (1 << 15) -+#define ADVERTISED_Backplane (1 << 16) -+#define ADVERTISED_1000baseKX_Full (1 << 17) -+#define ADVERTISED_10000baseKX4_Full (1 << 18) -+#define ADVERTISED_10000baseKR_Full (1 << 19) -+#define ADVERTISED_10000baseR_FEC (1 << 20) - - /* The following are all involved in forcing a particular link - * mode for the device for setting things. When getting the -@@ -533,6 +553,7 @@ struct ethtool_ops { - #define PORT_MII 0x02 - #define PORT_FIBRE 0x03 - #define PORT_BNC 0x04 -+#define PORT_OTHER 0xff - - /* Which transceiver to use. */ - #define XCVR_INTERNAL 0x00 -@@ -547,6 +568,11 @@ struct ethtool_ops { - #define AUTONEG_DISABLE 0x00 - #define AUTONEG_ENABLE 0x01 - -+/* Mode MDI or MDI-X */ -+#define ETH_TP_MDI_INVALID 0x00 -+#define ETH_TP_MDI 0x01 -+#define ETH_TP_MDI_X 0x02 -+ - /* Wake-On-Lan options. */ - #define WAKE_PHY (1 << 0) - #define WAKE_UCAST (1 << 1) -@@ -565,6 +591,11 @@ struct ethtool_ops { - #define UDP_V6_FLOW 0x06 - #define SCTP_V6_FLOW 0x07 - #define AH_ESP_V6_FLOW 0x08 -+#define AH_V4_FLOW 0x09 -+#define ESP_V4_FLOW 0x0a -+#define AH_V6_FLOW 0x0b -+#define ESP_V6_FLOW 0x0c -+#define IP_USER_FLOW 0x0d - - /* L3-L4 network traffic flow hash options */ - #define RXH_DEV_PORT (1 << 0) -@@ -577,5 +608,6 @@ struct ethtool_ops { - #define RXH_L4_B_2_3 (1 << 7) /* dst port in case of TCP/UDP/SCTP */ - #define RXH_DISCARD (1 << 31) - -+#define RX_CLS_FLOW_DISC 0xffffffffffffffffULL - - #endif /* _LINUX_ETHTOOL_H */ diff --git a/debian/patches/libdde_group_addr.patch b/debian/patches/libdde_group_addr.patch deleted file mode 100644 index dee2723a..00000000 --- a/debian/patches/libdde_group_addr.patch +++ /dev/null @@ -1,429 +0,0 @@ -commit 31278e71471399beaff9280737e52b47db4dc345 -Author: Jiri Pirko <jpirko@redhat.com> -Date: Wed Jun 17 01:12:19 2009 +0000 - - net: group address list and its count - - This patch is inspired by patch recently posted by Johannes Berg. Basically what - my patch does is to group list and a count of addresses into newly introduced - structure netdev_hw_addr_list. This brings us two benefits: - 1) struct net_device becames a bit nicer. - 2) in the future there will be a possibility to operate with lists independently - on netdevices (with exporting right functions). - I wanted to introduce this patch before I'll post a multicast lists conversion. - - Signed-off-by: Jiri Pirko <jpirko@redhat.com> - - drivers/net/bnx2.c | 4 +- - drivers/net/e1000/e1000_main.c | 4 +- - drivers/net/ixgbe/ixgbe_main.c | 6 +- - drivers/net/mv643xx_eth.c | 2 +- - drivers/net/niu.c | 4 +- - drivers/net/virtio_net.c | 10 ++-- - drivers/s390/net/qeth_l2_main.c | 2 +- - include/linux/netdevice.h | 17 +++-- - net/core/dev.c | 130 ++++++++++++++++++-------------------- - 9 files changed, 89 insertions(+), 90 deletions(-) - Signed-off-by: David S. Miller <davem@davemloft.net> - -Index: hurd-debian/libdde-linux26/contrib/include/linux/netdevice.h -=================================================================== ---- hurd-debian.orig/libdde-linux26/contrib/include/linux/netdevice.h 2012-04-16 00:34:46.000000000 +0000 -+++ hurd-debian/libdde-linux26/contrib/include/linux/netdevice.h 2012-04-16 00:34:51.000000000 +0000 -@@ -224,6 +224,11 @@ - struct rcu_head rcu_head; - }; - -+struct netdev_hw_addr_list { -+ struct list_head list; -+ int count; -+}; -+ - struct hh_cache - { - struct hh_cache *hh_next; /* Next entry */ -@@ -741,9 +746,8 @@ - unsigned char addr_len; /* hardware address length */ - unsigned short dev_id; /* for shared network cards */ - -- struct list_head uc_list; /* Secondary unicast mac -- addresses */ -- int uc_count; /* Number of installed ucasts */ -+ struct netdev_hw_addr_list uc; /* Secondary unicast -+ mac addresses */ - int uc_promisc; - spinlock_t addr_list_lock; - struct dev_addr_list *mc_list; /* Multicast mac addresses */ -@@ -775,7 +779,8 @@ - because most packets are - unicast) */ - -- struct list_head dev_addr_list; /* list of device hw addresses */ -+ struct netdev_hw_addr_list dev_addrs; /* list of device -+ hw addresses */ - - unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ - -@@ -1786,11 +1791,11 @@ - } - - /* -- * dev_addr_list walker. Should be used only for read access. Call with -+ * dev_addrs walker. Should be used only for read access. Call with - * rcu_read_lock held. - */ - #define for_each_dev_addr(dev, ha) \ -- list_for_each_entry_rcu(ha, &dev->dev_addr_list, list) -+ list_for_each_entry_rcu(ha, &dev->dev_addrs.list, list) - - /* These functions live elsewhere (drivers/net/net_init.c, but related) */ - -Index: hurd-debian/libdde-linux26/lib/src/net/core/dev.c -=================================================================== ---- hurd-debian.orig/libdde-linux26/lib/src/net/core/dev.c 2012-04-16 00:34:49.000000000 +0000 -+++ hurd-debian/libdde-linux26/lib/src/net/core/dev.c 2012-04-16 00:34:51.000000000 +0000 -@@ -3377,10 +3377,10 @@ - /* Unicast addresses changes may only happen under the rtnl, - * therefore calling __dev_set_promiscuity here is safe. - */ -- if (dev->uc_count > 0 && !dev->uc_promisc) { -+ if (dev->uc.count > 0 && !dev->uc_promisc) { - __dev_set_promiscuity(dev, 1); - dev->uc_promisc = 1; -- } else if (dev->uc_count == 0 && dev->uc_promisc) { -+ } else if (dev->uc.count == 0 && dev->uc_promisc) { - __dev_set_promiscuity(dev, -1); - dev->uc_promisc = 0; - } -@@ -3399,9 +3399,8 @@ - - /* hw addresses list handling functions */ - --static int __hw_addr_add(struct list_head *list, int *delta, -- unsigned char *addr, int addr_len, -- unsigned char addr_type) -+static int __hw_addr_add(struct netdev_hw_addr_list *list, unsigned char *addr, -+ int addr_len, unsigned char addr_type) - { - struct netdev_hw_addr *ha; - int alloc_size; -@@ -3409,7 +3408,7 @@ - if (addr_len > MAX_ADDR_LEN) - return -EINVAL; - -- list_for_each_entry(ha, list, list) { -+ list_for_each_entry(ha, &list->list, list) { - if (!memcmp(ha->addr, addr, addr_len) && - ha->type == addr_type) { - ha->refcount++; -@@ -3428,9 +3427,8 @@ - ha->type = addr_type; - ha->refcount = 1; - ha->synced = false; -- list_add_tail_rcu(&ha->list, list); -- if (delta) -- (*delta)++; -+ list_add_tail_rcu(&ha->list, &list->list); -+ list->count++; - return 0; - } - -@@ -3442,120 +3440,121 @@ - kfree(ha); - } - --static int __hw_addr_del(struct list_head *list, int *delta, -- unsigned char *addr, int addr_len, -- unsigned char addr_type) -+static int __hw_addr_del(struct netdev_hw_addr_list *list, unsigned char *addr, -+ int addr_len, unsigned char addr_type) - { - struct netdev_hw_addr *ha; - -- list_for_each_entry(ha, list, list) { -+ list_for_each_entry(ha, &list->list, list) { - if (!memcmp(ha->addr, addr, addr_len) && - (ha->type == addr_type || !addr_type)) { - if (--ha->refcount) - return 0; - list_del_rcu(&ha->list); - call_rcu(&ha->rcu_head, ha_rcu_free); -- if (delta) -- (*delta)--; -+ list->count--; - return 0; - } - } - return -ENOENT; - } - --static int __hw_addr_add_multiple(struct list_head *to_list, int *to_delta, -- struct list_head *from_list, int addr_len, -+static int __hw_addr_add_multiple(struct netdev_hw_addr_list *to_list, -+ struct netdev_hw_addr_list *from_list, -+ int addr_len, - unsigned char addr_type) - { - int err; - struct netdev_hw_addr *ha, *ha2; - unsigned char type; - -- list_for_each_entry(ha, from_list, list) { -+ list_for_each_entry(ha, &from_list->list, list) { - type = addr_type ? addr_type : ha->type; -- err = __hw_addr_add(to_list, to_delta, ha->addr, -- addr_len, type); -+ err = __hw_addr_add(to_list, ha->addr, addr_len, type); - if (err) - goto unroll; - } - return 0; - - unroll: -- list_for_each_entry(ha2, from_list, list) { -+ list_for_each_entry(ha2, &from_list->list, list) { - if (ha2 == ha) - break; - type = addr_type ? addr_type : ha2->type; -- __hw_addr_del(to_list, to_delta, ha2->addr, -- addr_len, type); -+ __hw_addr_del(to_list, ha2->addr, addr_len, type); - } - return err; - } - --static void __hw_addr_del_multiple(struct list_head *to_list, int *to_delta, -- struct list_head *from_list, int addr_len, -+static void __hw_addr_del_multiple(struct netdev_hw_addr_list *to_list, -+ struct netdev_hw_addr_list *from_list, -+ int addr_len, - unsigned char addr_type) - { - struct netdev_hw_addr *ha; - unsigned char type; - -- list_for_each_entry(ha, from_list, list) { -+ list_for_each_entry(ha, &from_list->list, list) { - type = addr_type ? addr_type : ha->type; -- __hw_addr_del(to_list, to_delta, ha->addr, -- addr_len, addr_type); -+ __hw_addr_del(to_list, ha->addr, addr_len, addr_type); - } - } - --static int __hw_addr_sync(struct list_head *to_list, int *to_delta, -- struct list_head *from_list, int *from_delta, -+static int __hw_addr_sync(struct netdev_hw_addr_list *to_list, -+ struct netdev_hw_addr_list *from_list, - int addr_len) - { - int err = 0; - struct netdev_hw_addr *ha, *tmp; - -- list_for_each_entry_safe(ha, tmp, from_list, list) { -+ list_for_each_entry_safe(ha, tmp, &from_list->list, list) { - if (!ha->synced) { -- err = __hw_addr_add(to_list, to_delta, ha->addr, -+ err = __hw_addr_add(to_list, ha->addr, - addr_len, ha->type); - if (err) - break; - ha->synced = true; - ha->refcount++; - } else if (ha->refcount == 1) { -- __hw_addr_del(to_list, to_delta, ha->addr, -- addr_len, ha->type); -- __hw_addr_del(from_list, from_delta, ha->addr, -- addr_len, ha->type); -+ __hw_addr_del(to_list, ha->addr, addr_len, ha->type); -+ __hw_addr_del(from_list, ha->addr, addr_len, ha->type); - } - } - return err; - } - --static void __hw_addr_unsync(struct list_head *to_list, int *to_delta, -- struct list_head *from_list, int *from_delta, -+static void __hw_addr_unsync(struct netdev_hw_addr_list *to_list, -+ struct netdev_hw_addr_list *from_list, - int addr_len) - { - struct netdev_hw_addr *ha, *tmp; - -- list_for_each_entry_safe(ha, tmp, from_list, list) { -+ list_for_each_entry_safe(ha, tmp, &from_list->list, list) { - if (ha->synced) { -- __hw_addr_del(to_list, to_delta, ha->addr, -+ __hw_addr_del(to_list, ha->addr, - addr_len, ha->type); - ha->synced = false; -- __hw_addr_del(from_list, from_delta, ha->addr, -+ __hw_addr_del(from_list, ha->addr, - addr_len, ha->type); - } - } - } - -- --static void __hw_addr_flush(struct list_head *list) -+static void __hw_addr_flush(struct netdev_hw_addr_list *list) - { - struct netdev_hw_addr *ha, *tmp; - -- list_for_each_entry_safe(ha, tmp, list, list) { -+ list_for_each_entry_safe(ha, tmp, &list->list, list) { - list_del_rcu(&ha->list); - call_rcu(&ha->rcu_head, ha_rcu_free); - } -+ list->count = 0; -+} -+ -+static void __hw_addr_init(struct netdev_hw_addr_list *list) -+{ -+ INIT_LIST_HEAD(&list->list); -+ list->count = 0; - } - - /* Device addresses handling functions */ -@@ -3564,7 +3563,7 @@ - { - /* rtnl_mutex must be held here */ - -- __hw_addr_flush(&dev->dev_addr_list); -+ __hw_addr_flush(&dev->dev_addrs); - dev->dev_addr = NULL; - } - -@@ -3576,16 +3575,16 @@ - - /* rtnl_mutex must be held here */ - -- INIT_LIST_HEAD(&dev->dev_addr_list); -+ __hw_addr_init(&dev->dev_addrs); - memset(addr, 0, sizeof(addr)); -- err = __hw_addr_add(&dev->dev_addr_list, NULL, addr, sizeof(addr), -+ err = __hw_addr_add(&dev->dev_addrs, addr, sizeof(addr), - NETDEV_HW_ADDR_T_LAN); - if (!err) { - /* - * Get the first (previously created) address from the list - * and set dev_addr pointer to this location. - */ -- ha = list_first_entry(&dev->dev_addr_list, -+ ha = list_first_entry(&dev->dev_addrs.list, - struct netdev_hw_addr, list); - dev->dev_addr = ha->addr; - } -@@ -3610,8 +3609,7 @@ - - ASSERT_RTNL(); - -- err = __hw_addr_add(&dev->dev_addr_list, NULL, addr, dev->addr_len, -- addr_type); -+ err = __hw_addr_add(&dev->dev_addrs, addr, dev->addr_len, addr_type); - if (!err) - call_netdevice_notifiers(NETDEV_CHANGEADDR, dev); - return err; -@@ -3641,11 +3639,12 @@ - * We can not remove the first address from the list because - * dev->dev_addr points to that. - */ -- ha = list_first_entry(&dev->dev_addr_list, struct netdev_hw_addr, list); -+ ha = list_first_entry(&dev->dev_addrs.list, -+ struct netdev_hw_addr, list); - if (ha->addr == dev->dev_addr && ha->refcount == 1) - return -ENOENT; - -- err = __hw_addr_del(&dev->dev_addr_list, NULL, addr, dev->addr_len, -+ err = __hw_addr_del(&dev->dev_addrs, addr, dev->addr_len, - addr_type); - if (!err) - call_netdevice_notifiers(NETDEV_CHANGEADDR, dev); -@@ -3673,8 +3672,7 @@ - - if (from_dev->addr_len != to_dev->addr_len) - return -EINVAL; -- err = __hw_addr_add_multiple(&to_dev->dev_addr_list, NULL, -- &from_dev->dev_addr_list, -+ err = __hw_addr_add_multiple(&to_dev->dev_addrs, &from_dev->dev_addrs, - to_dev->addr_len, addr_type); - if (!err) - call_netdevice_notifiers(NETDEV_CHANGEADDR, to_dev); -@@ -3700,15 +3698,14 @@ - - if (from_dev->addr_len != to_dev->addr_len) - return -EINVAL; -- __hw_addr_del_multiple(&to_dev->dev_addr_list, NULL, -- &from_dev->dev_addr_list, -+ __hw_addr_del_multiple(&to_dev->dev_addrs, &from_dev->dev_addrs, - to_dev->addr_len, addr_type); - call_netdevice_notifiers(NETDEV_CHANGEADDR, to_dev); - return 0; - } - EXPORT_SYMBOL(dev_addr_del_multiple); - --/* unicast and multicast addresses handling functions */ -+/* multicast addresses handling functions */ - - int __dev_addr_delete(struct dev_addr_list **list, int *count, - void *addr, int alen, int glbl) -@@ -3784,8 +3781,8 @@ - - ASSERT_RTNL(); - -- err = __hw_addr_del(&dev->uc_list, &dev->uc_count, addr, -- dev->addr_len, NETDEV_HW_ADDR_T_UNICAST); -+ err = __hw_addr_del(&dev->uc, addr, dev->addr_len, -+ NETDEV_HW_ADDR_T_UNICAST); - if (!err) - __dev_set_rx_mode(dev); - return err; -@@ -3808,8 +3805,8 @@ - - ASSERT_RTNL(); - -- err = __hw_addr_add(&dev->uc_list, &dev->uc_count, addr, -- dev->addr_len, NETDEV_HW_ADDR_T_UNICAST); -+ err = __hw_addr_add(&dev->uc, addr, dev->addr_len, -+ NETDEV_HW_ADDR_T_UNICAST); - if (!err) - __dev_set_rx_mode(dev); - return err; -@@ -3882,8 +3879,7 @@ - if (to->addr_len != from->addr_len) - return -EINVAL; - -- err = __hw_addr_sync(&to->uc_list, &to->uc_count, -- &from->uc_list, &from->uc_count, to->addr_len); -+ err = __hw_addr_sync(&to->uc, &from->uc, to->addr_len); - if (!err) - __dev_set_rx_mode(to); - return err; -@@ -3906,8 +3902,7 @@ - if (to->addr_len != from->addr_len) - return; - -- __hw_addr_unsync(&to->uc_list, &to->uc_count, -- &from->uc_list, &from->uc_count, to->addr_len); -+ __hw_addr_unsync(&to->uc, &from->uc, to->addr_len); - __dev_set_rx_mode(to); - } - EXPORT_SYMBOL(dev_unicast_unsync); -@@ -3916,15 +3911,14 @@ - { - /* rtnl_mutex must be held here */ - -- __hw_addr_flush(&dev->uc_list); -- dev->uc_count = 0; -+ __hw_addr_flush(&dev->uc); - } - - static void dev_unicast_init(struct net_device *dev) - { - /* rtnl_mutex must be held here */ - -- INIT_LIST_HEAD(&dev->uc_list); -+ __hw_addr_init(&dev->uc); - } - - diff --git a/debian/patches/libdde_mdio.patch b/debian/patches/libdde_mdio.patch deleted file mode 100644 index cf00e47a..00000000 --- a/debian/patches/libdde_mdio.patch +++ /dev/null @@ -1,359 +0,0 @@ ---- /dev/null 2011-08-03 18:03:30.000000000 +0000 -+++ b/libdde-linux26/contrib/include/linux/mdio.h 2012-04-15 22:16:31.000000000 +0000 -@@ -0,0 +1,356 @@ -+/* -+ * linux/mdio.h: definitions for MDIO (clause 45) transceivers -+ * Copyright 2006-2009 Solarflare Communications Inc. -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 as published -+ * by the Free Software Foundation, incorporated herein by reference. -+ */ -+ -+#ifndef __LINUX_MDIO_H__ -+#define __LINUX_MDIO_H__ -+ -+#include <linux/mii.h> -+ -+/* MDIO Manageable Devices (MMDs). */ -+#define MDIO_MMD_PMAPMD 1 /* Physical Medium Attachment/ -+ * Physical Medium Dependent */ -+#define MDIO_MMD_WIS 2 /* WAN Interface Sublayer */ -+#define MDIO_MMD_PCS 3 /* Physical Coding Sublayer */ -+#define MDIO_MMD_PHYXS 4 /* PHY Extender Sublayer */ -+#define MDIO_MMD_DTEXS 5 /* DTE Extender Sublayer */ -+#define MDIO_MMD_TC 6 /* Transmission Convergence */ -+#define MDIO_MMD_AN 7 /* Auto-Negotiation */ -+#define MDIO_MMD_C22EXT 29 /* Clause 22 extension */ -+#define MDIO_MMD_VEND1 30 /* Vendor specific 1 */ -+#define MDIO_MMD_VEND2 31 /* Vendor specific 2 */ -+ -+/* Generic MDIO registers. */ -+#define MDIO_CTRL1 MII_BMCR -+#define MDIO_STAT1 MII_BMSR -+#define MDIO_DEVID1 MII_PHYSID1 -+#define MDIO_DEVID2 MII_PHYSID2 -+#define MDIO_SPEED 4 /* Speed ability */ -+#define MDIO_DEVS1 5 /* Devices in package */ -+#define MDIO_DEVS2 6 -+#define MDIO_CTRL2 7 /* 10G control 2 */ -+#define MDIO_STAT2 8 /* 10G status 2 */ -+#define MDIO_PMA_TXDIS 9 /* 10G PMA/PMD transmit disable */ -+#define MDIO_PMA_RXDET 10 /* 10G PMA/PMD receive signal detect */ -+#define MDIO_PMA_EXTABLE 11 /* 10G PMA/PMD extended ability */ -+#define MDIO_PKGID1 14 /* Package identifier */ -+#define MDIO_PKGID2 15 -+#define MDIO_AN_ADVERTISE 16 /* AN advertising (base page) */ -+#define MDIO_AN_LPA 19 /* AN LP abilities (base page) */ -+#define MDIO_PHYXS_LNSTAT 24 /* PHY XGXS lane state */ -+ -+/* Media-dependent registers. */ -+#define MDIO_PMA_10GBT_SWAPPOL 130 /* 10GBASE-T pair swap & polarity */ -+#define MDIO_PMA_10GBT_TXPWR 131 /* 10GBASE-T TX power control */ -+#define MDIO_PMA_10GBT_SNR 133 /* 10GBASE-T SNR margin, lane A. -+ * Lanes B-D are numbered 134-136. */ -+#define MDIO_PMA_10GBR_FECABLE 170 /* 10GBASE-R FEC ability */ -+#define MDIO_PCS_10GBX_STAT1 24 /* 10GBASE-X PCS status 1 */ -+#define MDIO_PCS_10GBRT_STAT1 32 /* 10GBASE-R/-T PCS status 1 */ -+#define MDIO_PCS_10GBRT_STAT2 33 /* 10GBASE-R/-T PCS status 2 */ -+#define MDIO_AN_10GBT_CTRL 32 /* 10GBASE-T auto-negotiation control */ -+#define MDIO_AN_10GBT_STAT 33 /* 10GBASE-T auto-negotiation status */ -+ -+/* LASI (Link Alarm Status Interrupt) registers, defined by XENPAK MSA. */ -+#define MDIO_PMA_LASI_RXCTRL 0x9000 /* RX_ALARM control */ -+#define MDIO_PMA_LASI_TXCTRL 0x9001 /* TX_ALARM control */ -+#define MDIO_PMA_LASI_CTRL 0x9002 /* LASI control */ -+#define MDIO_PMA_LASI_RXSTAT 0x9003 /* RX_ALARM status */ -+#define MDIO_PMA_LASI_TXSTAT 0x9004 /* TX_ALARM status */ -+#define MDIO_PMA_LASI_STAT 0x9005 /* LASI status */ -+ -+/* Control register 1. */ -+/* Enable extended speed selection */ -+#define MDIO_CTRL1_SPEEDSELEXT (BMCR_SPEED1000 | BMCR_SPEED100) -+/* All speed selection bits */ -+#define MDIO_CTRL1_SPEEDSEL (MDIO_CTRL1_SPEEDSELEXT | 0x003c) -+#define MDIO_CTRL1_FULLDPLX BMCR_FULLDPLX -+#define MDIO_CTRL1_LPOWER BMCR_PDOWN -+#define MDIO_CTRL1_RESET BMCR_RESET -+#define MDIO_PMA_CTRL1_LOOPBACK 0x0001 -+#define MDIO_PMA_CTRL1_SPEED1000 BMCR_SPEED1000 -+#define MDIO_PMA_CTRL1_SPEED100 BMCR_SPEED100 -+#define MDIO_PCS_CTRL1_LOOPBACK BMCR_LOOPBACK -+#define MDIO_PHYXS_CTRL1_LOOPBACK BMCR_LOOPBACK -+#define MDIO_AN_CTRL1_RESTART BMCR_ANRESTART -+#define MDIO_AN_CTRL1_ENABLE BMCR_ANENABLE -+#define MDIO_AN_CTRL1_XNP 0x2000 /* Enable extended next page */ -+ -+/* 10 Gb/s */ -+#define MDIO_CTRL1_SPEED10G (MDIO_CTRL1_SPEEDSELEXT | 0x00) -+/* 10PASS-TS/2BASE-TL */ -+#define MDIO_CTRL1_SPEED10P2B (MDIO_CTRL1_SPEEDSELEXT | 0x04) -+ -+/* Status register 1. */ -+#define MDIO_STAT1_LPOWERABLE 0x0002 /* Low-power ability */ -+#define MDIO_STAT1_LSTATUS BMSR_LSTATUS -+#define MDIO_STAT1_FAULT 0x0080 /* Fault */ -+#define MDIO_AN_STAT1_LPABLE 0x0001 /* Link partner AN ability */ -+#define MDIO_AN_STAT1_ABLE BMSR_ANEGCAPABLE -+#define MDIO_AN_STAT1_RFAULT BMSR_RFAULT -+#define MDIO_AN_STAT1_COMPLETE BMSR_ANEGCOMPLETE -+#define MDIO_AN_STAT1_PAGE 0x0040 /* Page received */ -+#define MDIO_AN_STAT1_XNP 0x0080 /* Extended next page status */ -+ -+/* Speed register. */ -+#define MDIO_SPEED_10G 0x0001 /* 10G capable */ -+#define MDIO_PMA_SPEED_2B 0x0002 /* 2BASE-TL capable */ -+#define MDIO_PMA_SPEED_10P 0x0004 /* 10PASS-TS capable */ -+#define MDIO_PMA_SPEED_1000 0x0010 /* 1000M capable */ -+#define MDIO_PMA_SPEED_100 0x0020 /* 100M capable */ -+#define MDIO_PMA_SPEED_10 0x0040 /* 10M capable */ -+#define MDIO_PCS_SPEED_10P2B 0x0002 /* 10PASS-TS/2BASE-TL capable */ -+ -+/* Device present registers. */ -+#define MDIO_DEVS_PRESENT(devad) (1 << (devad)) -+#define MDIO_DEVS_PMAPMD MDIO_DEVS_PRESENT(MDIO_MMD_PMAPMD) -+#define MDIO_DEVS_WIS MDIO_DEVS_PRESENT(MDIO_MMD_WIS) -+#define MDIO_DEVS_PCS MDIO_DEVS_PRESENT(MDIO_MMD_PCS) -+#define MDIO_DEVS_PHYXS MDIO_DEVS_PRESENT(MDIO_MMD_PHYXS) -+#define MDIO_DEVS_DTEXS MDIO_DEVS_PRESENT(MDIO_MMD_DTEXS) -+#define MDIO_DEVS_TC MDIO_DEVS_PRESENT(MDIO_MMD_TC) -+#define MDIO_DEVS_AN MDIO_DEVS_PRESENT(MDIO_MMD_AN) -+#define MDIO_DEVS_C22EXT MDIO_DEVS_PRESENT(MDIO_MMD_C22EXT) -+ -+/* Control register 2. */ -+#define MDIO_PMA_CTRL2_TYPE 0x000f /* PMA/PMD type selection */ -+#define MDIO_PMA_CTRL2_10GBCX4 0x0000 /* 10GBASE-CX4 type */ -+#define MDIO_PMA_CTRL2_10GBEW 0x0001 /* 10GBASE-EW type */ -+#define MDIO_PMA_CTRL2_10GBLW 0x0002 /* 10GBASE-LW type */ -+#define MDIO_PMA_CTRL2_10GBSW 0x0003 /* 10GBASE-SW type */ -+#define MDIO_PMA_CTRL2_10GBLX4 0x0004 /* 10GBASE-LX4 type */ -+#define MDIO_PMA_CTRL2_10GBER 0x0005 /* 10GBASE-ER type */ -+#define MDIO_PMA_CTRL2_10GBLR 0x0006 /* 10GBASE-LR type */ -+#define MDIO_PMA_CTRL2_10GBSR 0x0007 /* 10GBASE-SR type */ -+#define MDIO_PMA_CTRL2_10GBLRM 0x0008 /* 10GBASE-LRM type */ -+#define MDIO_PMA_CTRL2_10GBT 0x0009 /* 10GBASE-T type */ -+#define MDIO_PMA_CTRL2_10GBKX4 0x000a /* 10GBASE-KX4 type */ -+#define MDIO_PMA_CTRL2_10GBKR 0x000b /* 10GBASE-KR type */ -+#define MDIO_PMA_CTRL2_1000BT 0x000c /* 1000BASE-T type */ -+#define MDIO_PMA_CTRL2_1000BKX 0x000d /* 1000BASE-KX type */ -+#define MDIO_PMA_CTRL2_100BTX 0x000e /* 100BASE-TX type */ -+#define MDIO_PMA_CTRL2_10BT 0x000f /* 10BASE-T type */ -+#define MDIO_PCS_CTRL2_TYPE 0x0003 /* PCS type selection */ -+#define MDIO_PCS_CTRL2_10GBR 0x0000 /* 10GBASE-R type */ -+#define MDIO_PCS_CTRL2_10GBX 0x0001 /* 10GBASE-X type */ -+#define MDIO_PCS_CTRL2_10GBW 0x0002 /* 10GBASE-W type */ -+#define MDIO_PCS_CTRL2_10GBT 0x0003 /* 10GBASE-T type */ -+ -+/* Status register 2. */ -+#define MDIO_STAT2_RXFAULT 0x0400 /* Receive fault */ -+#define MDIO_STAT2_TXFAULT 0x0800 /* Transmit fault */ -+#define MDIO_STAT2_DEVPRST 0xc000 /* Device present */ -+#define MDIO_STAT2_DEVPRST_VAL 0x8000 /* Device present value */ -+#define MDIO_PMA_STAT2_LBABLE 0x0001 /* PMA loopback ability */ -+#define MDIO_PMA_STAT2_10GBEW 0x0002 /* 10GBASE-EW ability */ -+#define MDIO_PMA_STAT2_10GBLW 0x0004 /* 10GBASE-LW ability */ -+#define MDIO_PMA_STAT2_10GBSW 0x0008 /* 10GBASE-SW ability */ -+#define MDIO_PMA_STAT2_10GBLX4 0x0010 /* 10GBASE-LX4 ability */ -+#define MDIO_PMA_STAT2_10GBER 0x0020 /* 10GBASE-ER ability */ -+#define MDIO_PMA_STAT2_10GBLR 0x0040 /* 10GBASE-LR ability */ -+#define MDIO_PMA_STAT2_10GBSR 0x0080 /* 10GBASE-SR ability */ -+#define MDIO_PMD_STAT2_TXDISAB 0x0100 /* PMD TX disable ability */ -+#define MDIO_PMA_STAT2_EXTABLE 0x0200 /* Extended abilities */ -+#define MDIO_PMA_STAT2_RXFLTABLE 0x1000 /* Receive fault ability */ -+#define MDIO_PMA_STAT2_TXFLTABLE 0x2000 /* Transmit fault ability */ -+#define MDIO_PCS_STAT2_10GBR 0x0001 /* 10GBASE-R capable */ -+#define MDIO_PCS_STAT2_10GBX 0x0002 /* 10GBASE-X capable */ -+#define MDIO_PCS_STAT2_10GBW 0x0004 /* 10GBASE-W capable */ -+#define MDIO_PCS_STAT2_RXFLTABLE 0x1000 /* Receive fault ability */ -+#define MDIO_PCS_STAT2_TXFLTABLE 0x2000 /* Transmit fault ability */ -+ -+/* Transmit disable register. */ -+#define MDIO_PMD_TXDIS_GLOBAL 0x0001 /* Global PMD TX disable */ -+#define MDIO_PMD_TXDIS_0 0x0002 /* PMD TX disable 0 */ -+#define MDIO_PMD_TXDIS_1 0x0004 /* PMD TX disable 1 */ -+#define MDIO_PMD_TXDIS_2 0x0008 /* PMD TX disable 2 */ -+#define MDIO_PMD_TXDIS_3 0x0010 /* PMD TX disable 3 */ -+ -+/* Receive signal detect register. */ -+#define MDIO_PMD_RXDET_GLOBAL 0x0001 /* Global PMD RX signal detect */ -+#define MDIO_PMD_RXDET_0 0x0002 /* PMD RX signal detect 0 */ -+#define MDIO_PMD_RXDET_1 0x0004 /* PMD RX signal detect 1 */ -+#define MDIO_PMD_RXDET_2 0x0008 /* PMD RX signal detect 2 */ -+#define MDIO_PMD_RXDET_3 0x0010 /* PMD RX signal detect 3 */ -+ -+/* Extended abilities register. */ -+#define MDIO_PMA_EXTABLE_10GCX4 0x0001 /* 10GBASE-CX4 ability */ -+#define MDIO_PMA_EXTABLE_10GBLRM 0x0002 /* 10GBASE-LRM ability */ -+#define MDIO_PMA_EXTABLE_10GBT 0x0004 /* 10GBASE-T ability */ -+#define MDIO_PMA_EXTABLE_10GBKX4 0x0008 /* 10GBASE-KX4 ability */ -+#define MDIO_PMA_EXTABLE_10GBKR 0x0010 /* 10GBASE-KR ability */ -+#define MDIO_PMA_EXTABLE_1000BT 0x0020 /* 1000BASE-T ability */ -+#define MDIO_PMA_EXTABLE_1000BKX 0x0040 /* 1000BASE-KX ability */ -+#define MDIO_PMA_EXTABLE_100BTX 0x0080 /* 100BASE-TX ability */ -+#define MDIO_PMA_EXTABLE_10BT 0x0100 /* 10BASE-T ability */ -+ -+/* PHY XGXS lane state register. */ -+#define MDIO_PHYXS_LNSTAT_SYNC0 0x0001 -+#define MDIO_PHYXS_LNSTAT_SYNC1 0x0002 -+#define MDIO_PHYXS_LNSTAT_SYNC2 0x0004 -+#define MDIO_PHYXS_LNSTAT_SYNC3 0x0008 -+#define MDIO_PHYXS_LNSTAT_ALIGN 0x1000 -+ -+/* PMA 10GBASE-T pair swap & polarity */ -+#define MDIO_PMA_10GBT_SWAPPOL_ABNX 0x0001 /* Pair A/B uncrossed */ -+#define MDIO_PMA_10GBT_SWAPPOL_CDNX 0x0002 /* Pair C/D uncrossed */ -+#define MDIO_PMA_10GBT_SWAPPOL_AREV 0x0100 /* Pair A polarity reversed */ -+#define MDIO_PMA_10GBT_SWAPPOL_BREV 0x0200 /* Pair B polarity reversed */ -+#define MDIO_PMA_10GBT_SWAPPOL_CREV 0x0400 /* Pair C polarity reversed */ -+#define MDIO_PMA_10GBT_SWAPPOL_DREV 0x0800 /* Pair D polarity reversed */ -+ -+/* PMA 10GBASE-T TX power register. */ -+#define MDIO_PMA_10GBT_TXPWR_SHORT 0x0001 /* Short-reach mode */ -+ -+/* PMA 10GBASE-T SNR registers. */ -+/* Value is SNR margin in dB, clamped to range [-127, 127], plus 0x8000. */ -+#define MDIO_PMA_10GBT_SNR_BIAS 0x8000 -+#define MDIO_PMA_10GBT_SNR_MAX 127 -+ -+/* PMA 10GBASE-R FEC ability register. */ -+#define MDIO_PMA_10GBR_FECABLE_ABLE 0x0001 /* FEC ability */ -+#define MDIO_PMA_10GBR_FECABLE_ERRABLE 0x0002 /* FEC error indic. ability */ -+ -+/* PCS 10GBASE-R/-T status register 1. */ -+#define MDIO_PCS_10GBRT_STAT1_BLKLK 0x0001 /* Block lock attained */ -+ -+/* PCS 10GBASE-R/-T status register 2. */ -+#define MDIO_PCS_10GBRT_STAT2_ERR 0x00ff -+#define MDIO_PCS_10GBRT_STAT2_BER 0x3f00 -+ -+/* AN 10GBASE-T control register. */ -+#define MDIO_AN_10GBT_CTRL_ADV10G 0x1000 /* Advertise 10GBASE-T */ -+ -+/* AN 10GBASE-T status register. */ -+#define MDIO_AN_10GBT_STAT_LPTRR 0x0200 /* LP training reset req. */ -+#define MDIO_AN_10GBT_STAT_LPLTABLE 0x0400 /* LP loop timing ability */ -+#define MDIO_AN_10GBT_STAT_LP10G 0x0800 /* LP is 10GBT capable */ -+#define MDIO_AN_10GBT_STAT_REMOK 0x1000 /* Remote OK */ -+#define MDIO_AN_10GBT_STAT_LOCOK 0x2000 /* Local OK */ -+#define MDIO_AN_10GBT_STAT_MS 0x4000 /* Master/slave config */ -+#define MDIO_AN_10GBT_STAT_MSFLT 0x8000 /* Master/slave config fault */ -+ -+/* LASI RX_ALARM control/status registers. */ -+#define MDIO_PMA_LASI_RX_PHYXSLFLT 0x0001 /* PHY XS RX local fault */ -+#define MDIO_PMA_LASI_RX_PCSLFLT 0x0008 /* PCS RX local fault */ -+#define MDIO_PMA_LASI_RX_PMALFLT 0x0010 /* PMA/PMD RX local fault */ -+#define MDIO_PMA_LASI_RX_OPTICPOWERFLT 0x0020 /* RX optical power fault */ -+#define MDIO_PMA_LASI_RX_WISLFLT 0x0200 /* WIS local fault */ -+ -+/* LASI TX_ALARM control/status registers. */ -+#define MDIO_PMA_LASI_TX_PHYXSLFLT 0x0001 /* PHY XS TX local fault */ -+#define MDIO_PMA_LASI_TX_PCSLFLT 0x0008 /* PCS TX local fault */ -+#define MDIO_PMA_LASI_TX_PMALFLT 0x0010 /* PMA/PMD TX local fault */ -+#define MDIO_PMA_LASI_TX_LASERPOWERFLT 0x0080 /* Laser output power fault */ -+#define MDIO_PMA_LASI_TX_LASERTEMPFLT 0x0100 /* Laser temperature fault */ -+#define MDIO_PMA_LASI_TX_LASERBICURRFLT 0x0200 /* Laser bias current fault */ -+ -+/* LASI control/status registers. */ -+#define MDIO_PMA_LASI_LSALARM 0x0001 /* LS_ALARM enable/status */ -+#define MDIO_PMA_LASI_TXALARM 0x0002 /* TX_ALARM enable/status */ -+#define MDIO_PMA_LASI_RXALARM 0x0004 /* RX_ALARM enable/status */ -+ -+/* Mapping between MDIO PRTAD/DEVAD and mii_ioctl_data::phy_id */ -+ -+#define MDIO_PHY_ID_C45 0x8000 -+#define MDIO_PHY_ID_PRTAD 0x03e0 -+#define MDIO_PHY_ID_DEVAD 0x001f -+#define MDIO_PHY_ID_C45_MASK \ -+ (MDIO_PHY_ID_C45 | MDIO_PHY_ID_PRTAD | MDIO_PHY_ID_DEVAD) -+ -+static inline __u16 mdio_phy_id_c45(int prtad, int devad) -+{ -+ return MDIO_PHY_ID_C45 | (prtad << 5) | devad; -+} -+ -+static inline bool mdio_phy_id_is_c45(int phy_id) -+{ -+ return (phy_id & MDIO_PHY_ID_C45) && !(phy_id & ~MDIO_PHY_ID_C45_MASK); -+} -+ -+static inline __u16 mdio_phy_id_prtad(int phy_id) -+{ -+ return (phy_id & MDIO_PHY_ID_PRTAD) >> 5; -+} -+ -+static inline __u16 mdio_phy_id_devad(int phy_id) -+{ -+ return phy_id & MDIO_PHY_ID_DEVAD; -+} -+ -+#define MDIO_SUPPORTS_C22 1 -+#define MDIO_SUPPORTS_C45 2 -+ -+#ifdef __KERNEL__ -+ -+/** -+ * struct mdio_if_info - Ethernet controller MDIO interface -+ * @prtad: PRTAD of the PHY (%MDIO_PRTAD_NONE if not present/unknown) -+ * @mmds: Mask of MMDs expected to be present in the PHY. This must be -+ * non-zero unless @prtad = %MDIO_PRTAD_NONE. -+ * @mode_support: MDIO modes supported. If %MDIO_SUPPORTS_C22 is set then -+ * MII register access will be passed through with @devad = -+ * %MDIO_DEVAD_NONE. If %MDIO_EMULATE_C22 is set then access to -+ * commonly used clause 22 registers will be translated into -+ * clause 45 registers. -+ * @dev: Net device structure -+ * @mdio_read: Register read function; returns value or negative error code -+ * @mdio_write: Register write function; returns 0 or negative error code -+ */ -+struct mdio_if_info { -+ int prtad; -+ u32 mmds; -+ unsigned mode_support; -+ -+ struct net_device *dev; -+ int (*mdio_read)(struct net_device *dev, int prtad, int devad, -+ u16 addr); -+ int (*mdio_write)(struct net_device *dev, int prtad, int devad, -+ u16 addr, u16 val); -+}; -+ -+#define MDIO_PRTAD_NONE (-1) -+#define MDIO_DEVAD_NONE (-1) -+#define MDIO_EMULATE_C22 4 -+ -+struct ethtool_cmd; -+struct ethtool_pauseparam; -+extern int mdio45_probe(struct mdio_if_info *mdio, int prtad); -+extern int mdio_set_flag(const struct mdio_if_info *mdio, -+ int prtad, int devad, u16 addr, int mask, -+ bool sense); -+extern int mdio45_links_ok(const struct mdio_if_info *mdio, u32 mmds); -+extern int mdio45_nway_restart(const struct mdio_if_info *mdio); -+extern void mdio45_ethtool_gset_npage(const struct mdio_if_info *mdio, -+ struct ethtool_cmd *ecmd, -+ u32 npage_adv, u32 npage_lpa); -+extern void -+mdio45_ethtool_spauseparam_an(const struct mdio_if_info *mdio, -+ const struct ethtool_pauseparam *ecmd); -+ -+/** -+ * mdio45_ethtool_gset - get settings for ETHTOOL_GSET -+ * @mdio: MDIO interface -+ * @ecmd: Ethtool request structure -+ * -+ * Since the CSRs for auto-negotiation using next pages are not fully -+ * standardised, this function does not attempt to decode them. Use -+ * mdio45_ethtool_gset_npage() to specify advertisement bits from next -+ * pages. -+ */ -+static inline void mdio45_ethtool_gset(const struct mdio_if_info *mdio, -+ struct ethtool_cmd *ecmd) -+{ -+ mdio45_ethtool_gset_npage(mdio, ecmd, 0, 0); -+} -+ -+extern int mdio_mii_ioctl(const struct mdio_if_info *mdio, -+ struct mii_ioctl_data *mii_data, int cmd); -+ -+#endif /* __KERNEL__ */ -+#endif /* __LINUX_MDIO_H__ */ diff --git a/debian/patches/libdde_netdev_tx_t.patch b/debian/patches/libdde_netdev_tx_t.patch deleted file mode 100644 index 897f899f..00000000 --- a/debian/patches/libdde_netdev_tx_t.patch +++ /dev/null @@ -1,66 +0,0 @@ -commit dc1f8bf68b311b1537cb65893430b6796118498a -Author: Stephen Hemminger <shemminger@vyatta.com> -Date: Mon Aug 31 19:50:40 2009 +0000 - - netdev: change transmit to limited range type - - The transmit function should only return one of three possible values, - some drivers got confused and returned errno's or other values. - This changes the definition so that this can be caught at compile time. - - Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> - Signed-off-by: David S. Miller <davem@davemloft.net> - -diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h -index 60d3aac..376a2e1 100644 ---- a/libdde-linux26/contrib/include/linux/netdevice.h -+++ b/libdde-linux26/contrib/include/linux/netdevice.h -@@ -79,17 +79,19 @@ struct wireless_dev; - #define net_xmit_eval(e) ((e) == NET_XMIT_CN? 0 : (e)) - #define net_xmit_errno(e) ((e) != NET_XMIT_CN ? -ENOBUFS : 0) - -+/* Driver transmit return codes */ -+enum netdev_tx { -+ NETDEV_TX_OK = 0, /* driver took care of packet */ -+ NETDEV_TX_BUSY, /* driver tx path was busy*/ -+ NETDEV_TX_LOCKED = -1, /* driver tx lock was already taken */ -+}; -+typedef enum netdev_tx netdev_tx_t; -+ - #endif - - #define MAX_ADDR_LEN 32 /* Largest hardware address length */ - --/* Driver transmit return codes */ --#define NETDEV_TX_OK 0 /* driver took care of packet */ --#define NETDEV_TX_BUSY 1 /* driver tx path was busy*/ --#define NETDEV_TX_LOCKED -1 /* driver tx lock was already taken */ -- - #ifdef __KERNEL__ -- - /* - * Compute the worst case header length according to the protocols - * used. -@@ -507,9 +509,11 @@ struct netdev_queue { - * This function is called when network device transistions to the down - * state. - * -- * int (*ndo_start_xmit)(struct sk_buff *skb, struct net_device *dev); -+ * netdev_tx_t (*ndo_start_xmit)(struct sk_buff *skb, -+ * struct net_device *dev); - * Called when a packet needs to be transmitted. -- * Must return NETDEV_TX_OK , NETDEV_TX_BUSY, or NETDEV_TX_LOCKED, -+ * Must return NETDEV_TX_OK , NETDEV_TX_BUSY. -+ * (can also return NETDEV_TX_LOCKED iff NETIF_F_LLTX) - * Required can not be NULL. - * - * u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb); -@@ -580,7 +584,7 @@ struct net_device_ops { - void (*ndo_uninit)(struct net_device *dev); - int (*ndo_open)(struct net_device *dev); - int (*ndo_stop)(struct net_device *dev); -- int (*ndo_start_xmit) (struct sk_buff *skb, -+ netdev_tx_t (*ndo_start_xmit) (struct sk_buff *skb, - struct net_device *dev); - u16 (*ndo_select_queue)(struct net_device *dev, - struct sk_buff *skb); diff --git a/debian/patches/libdde_pci-needs_freset.patch b/debian/patches/libdde_pci-needs_freset.patch deleted file mode 100644 index b3029fcb..00000000 --- a/debian/patches/libdde_pci-needs_freset.patch +++ /dev/null @@ -1,39 +0,0 @@ -commit 260d703adc5f275e3ba7ddff6e2e0217bc613b35 -Author: Mike Mason <mmlnx@us.ibm.com> -Date: Thu Jul 30 15:33:21 2009 -0700 - - PCI: support for PCI Express fundamental reset - - This is the first of three patches that implement a bit field that PCI - Express device drivers can use to indicate they need a fundamental reset - during error recovery. - - By default, the EEH framework on powerpc does what's known as a "hot - reset" during recovery of a PCI Express device. We've found a case - where the device needs a "fundamental reset" to recover properly. The - current PCI error recovery and EEH frameworks do not support this - distinction. - - The attached patch (courtesy of Richard Lary) adds a bit field to - pci_dev that indicates whether the device requires a fundamental reset - during recovery. - - These patches supersede the previously submitted patch that implemented - a fundamental reset bit field. - - Signed-off-by: Mike Mason <mmlnx@us.ibm.com> - Signed-off-by: Richard Lary <rlary@us.ibm.com> - Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org> - -Index: hurd-debian/libdde-linux26/contrib/include/linux/pci.h -=================================================================== ---- hurd-debian.orig/libdde-linux26/contrib/include/linux/pci.h 2012-04-16 00:26:44.000000000 +0000 -+++ hurd-debian/libdde-linux26/contrib/include/linux/pci.h 2012-04-16 00:34:37.000000000 +0000 -@@ -256,6 +256,7 @@ - unsigned int ari_enabled:1; /* ARI forwarding */ - unsigned int is_managed:1; - unsigned int is_pcie:1; -+ unsigned int needs_freset:1; /* Dev requires fundamental reset */ - unsigned int state_saved:1; - pci_dev_flags_t dev_flags; - atomic_t enable_cnt; /* pci_enable_device has been called */ diff --git a/debian/patches/libdde_pci_ids.h.patch b/debian/patches/libdde_pci_ids.h.patch deleted file mode 100644 index 801c38be..00000000 --- a/debian/patches/libdde_pci_ids.h.patch +++ /dev/null @@ -1,515 +0,0 @@ ---- a/libdde-linux26/contrib/include/linux/pci_ids.h 2012-04-15 20:31:32.000000000 +0000 -+++ b/libdde-linux26/contrib/include/linux/pci_ids.h 2012-03-17 10:14:52.000000000 +0000 -@@ -2,6 +2,9 @@ - * PCI Class, Vendor and Device IDs - * - * Please keep sorted. -+ * -+ * Do not add new entries to this file unless the definitions -+ * are shared between multiple drivers. - */ - - /* Device classes and subclasses */ -@@ -104,6 +107,7 @@ - #define PCI_CLASS_SERIAL_USB_UHCI 0x0c0300 - #define PCI_CLASS_SERIAL_USB_OHCI 0x0c0310 - #define PCI_CLASS_SERIAL_USB_EHCI 0x0c0320 -+#define PCI_CLASS_SERIAL_USB_XHCI 0x0c0330 - #define PCI_CLASS_SERIAL_FIBER 0x0c04 - #define PCI_CLASS_SERIAL_SMBUS 0x0c05 - -@@ -389,6 +393,9 @@ - #define PCI_DEVICE_ID_VLSI_82C147 0x0105 - #define PCI_DEVICE_ID_VLSI_VAS96011 0x0702 - -+/* AMD RD890 Chipset */ -+#define PCI_DEVICE_ID_RD890_IOMMU 0x5a23 -+ - #define PCI_VENDOR_ID_ADL 0x1005 - #define PCI_DEVICE_ID_ADL_2301 0x2301 - -@@ -478,6 +485,9 @@ - #define PCI_DEVICE_ID_IBM_ICOM_V2_ONE_PORT_RVX_ONE_PORT_MDM_PCIE 0x0361 - #define PCI_DEVICE_ID_IBM_ICOM_FOUR_PORT_MODEL 0x252 - -+#define PCI_SUBVENDOR_ID_IBM 0x1014 -+#define PCI_SUBDEVICE_ID_IBM_SATURN_SERIAL_ONE_PORT 0x03d4 -+ - #define PCI_VENDOR_ID_UNISYS 0x1018 - #define PCI_DEVICE_ID_UNISYS_DMA_DIRECTOR 0x001C - -@@ -526,6 +536,7 @@ - #define PCI_DEVICE_ID_AMD_OPUS_7443 0x7443 - #define PCI_DEVICE_ID_AMD_VIPER_7443 0x7443 - #define PCI_DEVICE_ID_AMD_OPUS_7445 0x7445 -+#define PCI_DEVICE_ID_AMD_8111_PCI 0x7460 - #define PCI_DEVICE_ID_AMD_8111_LPC 0x7468 - #define PCI_DEVICE_ID_AMD_8111_IDE 0x7469 - #define PCI_DEVICE_ID_AMD_8111_SMBUS2 0x746a -@@ -535,6 +546,8 @@ - #define PCI_DEVICE_ID_AMD_8131_BRIDGE 0x7450 - #define PCI_DEVICE_ID_AMD_8131_APIC 0x7451 - #define PCI_DEVICE_ID_AMD_8132_BRIDGE 0x7458 -+#define PCI_DEVICE_ID_AMD_HUDSON2_SMBUS 0x780b -+#define PCI_DEVICE_ID_AMD_CS5535_IDE 0x208F - #define PCI_DEVICE_ID_AMD_CS5536_ISA 0x2090 - #define PCI_DEVICE_ID_AMD_CS5536_FLASH 0x2091 - #define PCI_DEVICE_ID_AMD_CS5536_AUDIO 0x2093 -@@ -543,9 +556,10 @@ - #define PCI_DEVICE_ID_AMD_CS5536_UDC 0x2096 - #define PCI_DEVICE_ID_AMD_CS5536_UOC 0x2097 - #define PCI_DEVICE_ID_AMD_CS5536_IDE 0x209A -- - #define PCI_DEVICE_ID_AMD_LX_VIDEO 0x2081 - #define PCI_DEVICE_ID_AMD_LX_AES 0x2082 -+#define PCI_DEVICE_ID_AMD_HUDSON2_IDE 0x780c -+#define PCI_DEVICE_ID_AMD_HUDSON2_SATA_IDE 0x7800 - - #define PCI_VENDOR_ID_TRIDENT 0x1023 - #define PCI_DEVICE_ID_TRIDENT_4DWAVE_DX 0x2000 -@@ -591,6 +605,8 @@ - #define PCI_DEVICE_ID_MATROX_G550 0x2527 - #define PCI_DEVICE_ID_MATROX_VIA 0x4536 - -+#define PCI_VENDOR_ID_MOBILITY_ELECTRONICS 0x14f2 -+ - #define PCI_VENDOR_ID_CT 0x102c - #define PCI_DEVICE_ID_CT_69000 0x00c0 - #define PCI_DEVICE_ID_CT_65545 0x00d8 -@@ -766,6 +782,7 @@ - #define PCI_DEVICE_ID_TI_X515 0x8036 - #define PCI_DEVICE_ID_TI_XX12 0x8039 - #define PCI_DEVICE_ID_TI_XX12_FM 0x803b -+#define PCI_DEVICE_ID_TI_XIO2000A 0x8231 - #define PCI_DEVICE_ID_TI_1130 0xac12 - #define PCI_DEVICE_ID_TI_1031 0xac13 - #define PCI_DEVICE_ID_TI_1131 0xac15 -@@ -834,6 +851,8 @@ - #define PCI_DEVICE_ID_PROMISE_20276 0x5275 - #define PCI_DEVICE_ID_PROMISE_20277 0x7275 - -+#define PCI_VENDOR_ID_FOXCONN 0x105b -+ - #define PCI_VENDOR_ID_UMC 0x1060 - #define PCI_DEVICE_ID_UMC_UM8673F 0x0101 - #define PCI_DEVICE_ID_UMC_UM8886BF 0x673a -@@ -873,6 +892,7 @@ - #define PCI_DEVICE_ID_APPLE_SH_SUNGEM 0x0051 - #define PCI_DEVICE_ID_APPLE_U3L_AGP 0x0058 - #define PCI_DEVICE_ID_APPLE_U3H_AGP 0x0059 -+#define PCI_DEVICE_ID_APPLE_U4_PCIE 0x005b - #define PCI_DEVICE_ID_APPLE_IPID2_AGP 0x0066 - #define PCI_DEVICE_ID_APPLE_IPID2_ATA 0x0069 - #define PCI_DEVICE_ID_APPLE_IPID2_FW 0x006a -@@ -941,6 +961,32 @@ - #define PCI_DEVICE_ID_SUN_TOMATILLO 0xa801 - #define PCI_DEVICE_ID_SUN_CASSINI 0xabba - -+#define PCI_VENDOR_ID_NI 0x1093 -+#define PCI_DEVICE_ID_NI_PCI2322 0xd130 -+#define PCI_DEVICE_ID_NI_PCI2324 0xd140 -+#define PCI_DEVICE_ID_NI_PCI2328 0xd150 -+#define PCI_DEVICE_ID_NI_PXI8422_2322 0xd190 -+#define PCI_DEVICE_ID_NI_PXI8422_2324 0xd1a0 -+#define PCI_DEVICE_ID_NI_PXI8420_2322 0xd1d0 -+#define PCI_DEVICE_ID_NI_PXI8420_2324 0xd1e0 -+#define PCI_DEVICE_ID_NI_PXI8420_2328 0xd1f0 -+#define PCI_DEVICE_ID_NI_PXI8420_23216 0xd1f1 -+#define PCI_DEVICE_ID_NI_PCI2322I 0xd250 -+#define PCI_DEVICE_ID_NI_PCI2324I 0xd270 -+#define PCI_DEVICE_ID_NI_PCI23216 0xd2b0 -+#define PCI_DEVICE_ID_NI_PXI8430_2322 0x7080 -+#define PCI_DEVICE_ID_NI_PCI8430_2322 0x70db -+#define PCI_DEVICE_ID_NI_PXI8430_2324 0x70dd -+#define PCI_DEVICE_ID_NI_PCI8430_2324 0x70df -+#define PCI_DEVICE_ID_NI_PXI8430_2328 0x70e2 -+#define PCI_DEVICE_ID_NI_PCI8430_2328 0x70e4 -+#define PCI_DEVICE_ID_NI_PXI8430_23216 0x70e6 -+#define PCI_DEVICE_ID_NI_PCI8430_23216 0x70e7 -+#define PCI_DEVICE_ID_NI_PXI8432_2322 0x70e8 -+#define PCI_DEVICE_ID_NI_PCI8432_2322 0x70ea -+#define PCI_DEVICE_ID_NI_PXI8432_2324 0x70ec -+#define PCI_DEVICE_ID_NI_PCI8432_2324 0x70ee -+ - #define PCI_VENDOR_ID_CMD 0x1095 - #define PCI_DEVICE_ID_CMD_643 0x0643 - #define PCI_DEVICE_ID_CMD_646 0x0646 -@@ -976,6 +1022,7 @@ - #define PCI_DEVICE_ID_PLX_PCI200SYN 0x3196 - #define PCI_DEVICE_ID_PLX_9030 0x9030 - #define PCI_DEVICE_ID_PLX_9050 0x9050 -+#define PCI_DEVICE_ID_PLX_9056 0x9056 - #define PCI_DEVICE_ID_PLX_9080 0x9080 - #define PCI_DEVICE_ID_PLX_GTEK_SERIAL2 0xa001 - -@@ -1037,8 +1084,6 @@ - #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SMBUS 0x0034 - #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE 0x0035 - #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA 0x0036 --#define PCI_DEVICE_ID_NVIDIA_NVENET_10 0x0037 --#define PCI_DEVICE_ID_NVIDIA_NVENET_11 0x0038 - #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2 0x003e - #define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800_ULTRA 0x0040 - #define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800 0x0041 -@@ -1049,21 +1094,16 @@ - #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE 0x0053 - #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA 0x0054 - #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2 0x0055 --#define PCI_DEVICE_ID_NVIDIA_NVENET_8 0x0056 --#define PCI_DEVICE_ID_NVIDIA_NVENET_9 0x0057 - #define PCI_DEVICE_ID_NVIDIA_CK804_AUDIO 0x0059 - #define PCI_DEVICE_ID_NVIDIA_CK804_PCIE 0x005d - #define PCI_DEVICE_ID_NVIDIA_NFORCE2_SMBUS 0x0064 - #define PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE 0x0065 --#define PCI_DEVICE_ID_NVIDIA_NVENET_2 0x0066 - #define PCI_DEVICE_ID_NVIDIA_MCP2_MODEM 0x0069 - #define PCI_DEVICE_ID_NVIDIA_MCP2_AUDIO 0x006a - #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SMBUS 0x0084 - #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE 0x0085 --#define PCI_DEVICE_ID_NVIDIA_NVENET_4 0x0086 - #define PCI_DEVICE_ID_NVIDIA_MCP2S_MODEM 0x0089 - #define PCI_DEVICE_ID_NVIDIA_CK8_AUDIO 0x008a --#define PCI_DEVICE_ID_NVIDIA_NVENET_5 0x008c - #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA 0x008e - #define PCI_DEVICE_ID_NVIDIA_GEFORCE_7800_GT 0x0090 - #define PCI_DEVICE_ID_NVIDIA_GEFORCE_7800_GTX 0x0091 -@@ -1079,15 +1119,12 @@ - #define PCI_DEVICE_ID_NVIDIA_NFORCE3 0x00d1 - #define PCI_DEVICE_ID_NVIDIA_NFORCE3_SMBUS 0x00d4 - #define PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE 0x00d5 --#define PCI_DEVICE_ID_NVIDIA_NVENET_3 0x00d6 - #define PCI_DEVICE_ID_NVIDIA_MCP3_MODEM 0x00d9 - #define PCI_DEVICE_ID_NVIDIA_MCP3_AUDIO 0x00da --#define PCI_DEVICE_ID_NVIDIA_NVENET_7 0x00df - #define PCI_DEVICE_ID_NVIDIA_NFORCE3S 0x00e1 - #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA 0x00e3 - #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SMBUS 0x00e4 - #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE 0x00e5 --#define PCI_DEVICE_ID_NVIDIA_NVENET_6 0x00e6 - #define PCI_DEVICE_ID_NVIDIA_CK8S_AUDIO 0x00ea - #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2 0x00ee - #define PCIE_DEVICE_ID_NVIDIA_GEFORCE_6800_ALT1 0x00f0 -@@ -1147,7 +1184,6 @@ - #define PCI_DEVICE_ID_NVIDIA_NFORCE_SMBUS 0x01b4 - #define PCI_DEVICE_ID_NVIDIA_NFORCE_IDE 0x01bc - #define PCI_DEVICE_ID_NVIDIA_MCP1_MODEM 0x01c1 --#define PCI_DEVICE_ID_NVIDIA_NVENET_1 0x01c3 - #define PCI_DEVICE_ID_NVIDIA_NFORCE2 0x01e0 - #define PCI_DEVICE_ID_NVIDIA_GEFORCE3 0x0200 - #define PCI_DEVICE_ID_NVIDIA_GEFORCE3_1 0x0201 -@@ -1170,8 +1206,6 @@ - #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE 0x036E - #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA 0x037E - #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2 0x037F --#define PCI_DEVICE_ID_NVIDIA_NVENET_12 0x0268 --#define PCI_DEVICE_ID_NVIDIA_NVENET_13 0x0269 - #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800 0x0280 - #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800_8X 0x0281 - #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800SE 0x0282 -@@ -1218,42 +1252,22 @@ - #define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5700_2 0x0348 - #define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_GO1000 0x034C - #define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_1100 0x034E --#define PCI_DEVICE_ID_NVIDIA_NVENET_14 0x0372 - #define PCI_DEVICE_ID_NVIDIA_NVENET_15 0x0373 --#define PCI_DEVICE_ID_NVIDIA_NVENET_16 0x03E5 --#define PCI_DEVICE_ID_NVIDIA_NVENET_17 0x03E6 - #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA 0x03E7 - #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SMBUS 0x03EB - #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE 0x03EC --#define PCI_DEVICE_ID_NVIDIA_NVENET_18 0x03EE --#define PCI_DEVICE_ID_NVIDIA_NVENET_19 0x03EF - #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2 0x03F6 - #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3 0x03F7 - #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_SMBUS 0x0446 - #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE 0x0448 --#define PCI_DEVICE_ID_NVIDIA_NVENET_20 0x0450 --#define PCI_DEVICE_ID_NVIDIA_NVENET_21 0x0451 --#define PCI_DEVICE_ID_NVIDIA_NVENET_22 0x0452 --#define PCI_DEVICE_ID_NVIDIA_NVENET_23 0x0453 --#define PCI_DEVICE_ID_NVIDIA_NVENET_24 0x054C --#define PCI_DEVICE_ID_NVIDIA_NVENET_25 0x054D --#define PCI_DEVICE_ID_NVIDIA_NVENET_26 0x054E --#define PCI_DEVICE_ID_NVIDIA_NVENET_27 0x054F --#define PCI_DEVICE_ID_NVIDIA_NVENET_28 0x07DC --#define PCI_DEVICE_ID_NVIDIA_NVENET_29 0x07DD --#define PCI_DEVICE_ID_NVIDIA_NVENET_30 0x07DE --#define PCI_DEVICE_ID_NVIDIA_NVENET_31 0x07DF -+#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_SMBUS 0x0542 - #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE 0x0560 - #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE 0x056C -+#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP78S_SMBUS 0x0752 - #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE 0x0759 --#define PCI_DEVICE_ID_NVIDIA_NVENET_32 0x0760 --#define PCI_DEVICE_ID_NVIDIA_NVENET_33 0x0761 --#define PCI_DEVICE_ID_NVIDIA_NVENET_34 0x0762 --#define PCI_DEVICE_ID_NVIDIA_NVENET_35 0x0763 --#define PCI_DEVICE_ID_NVIDIA_NVENET_36 0x0AB0 --#define PCI_DEVICE_ID_NVIDIA_NVENET_37 0x0AB1 --#define PCI_DEVICE_ID_NVIDIA_NVENET_38 0x0AB2 --#define PCI_DEVICE_ID_NVIDIA_NVENET_39 0x0AB3 -+#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_SMBUS 0x07D8 -+#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP79_SMBUS 0x0AA2 -+#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA 0x0D85 - - #define PCI_VENDOR_ID_IMS 0x10e0 - #define PCI_DEVICE_ID_IMS_TT128 0x9128 -@@ -1281,6 +1295,13 @@ - - #define PCI_VENDOR_ID_CREATIVE 0x1102 /* duplicate: ECTIVA */ - #define PCI_DEVICE_ID_CREATIVE_EMU10K1 0x0002 -+#define PCI_DEVICE_ID_CREATIVE_20K1 0x0005 -+#define PCI_DEVICE_ID_CREATIVE_20K2 0x000b -+#define PCI_SUBDEVICE_ID_CREATIVE_SB0760 0x0024 -+#define PCI_SUBDEVICE_ID_CREATIVE_SB08801 0x0041 -+#define PCI_SUBDEVICE_ID_CREATIVE_SB08802 0x0042 -+#define PCI_SUBDEVICE_ID_CREATIVE_SB08803 0x0043 -+#define PCI_SUBDEVICE_ID_CREATIVE_HENDRIX 0x6000 - - #define PCI_VENDOR_ID_ECTIVA 0x1102 /* duplicate: CREATIVE */ - #define PCI_DEVICE_ID_ECTIVA_EV1938 0x8938 -@@ -1373,7 +1394,7 @@ - #define PCI_DEVICE_ID_VIA_82C598_1 0x8598 - #define PCI_DEVICE_ID_VIA_838X_1 0xB188 - #define PCI_DEVICE_ID_VIA_83_87XX_1 0xB198 --#define PCI_DEVICE_ID_VIA_C409_IDE 0XC409 -+#define PCI_DEVICE_ID_VIA_VX855_IDE 0xC409 - #define PCI_DEVICE_ID_VIA_ANON 0xFFFF - - #define PCI_VENDOR_ID_SIEMENS 0x110A -@@ -1473,6 +1494,7 @@ - #define PCI_DEVICE_ID_SERVERWORKS_HT1000IDE 0x0214 - #define PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2 0x0217 - #define PCI_DEVICE_ID_SERVERWORKS_CSB6LPC 0x0227 -+#define PCI_DEVICE_ID_SERVERWORKS_HT1100LD 0x0408 - - #define PCI_VENDOR_ID_SBE 0x1176 - #define PCI_DEVICE_ID_SBE_WANXL100 0x0301 -@@ -1516,6 +1538,8 @@ - #define PCI_DEVICE_ID_ARTOP_ATP860R 0x0007 - #define PCI_DEVICE_ID_ARTOP_ATP865 0x0008 - #define PCI_DEVICE_ID_ARTOP_ATP865R 0x0009 -+#define PCI_DEVICE_ID_ARTOP_ATP867A 0x000A -+#define PCI_DEVICE_ID_ARTOP_ATP867B 0x000B - #define PCI_DEVICE_ID_ARTOP_AEC7610 0x8002 - #define PCI_DEVICE_ID_ARTOP_AEC7612UW 0x8010 - #define PCI_DEVICE_ID_ARTOP_AEC7612U 0x8020 -@@ -1813,6 +1837,10 @@ - #define PCI_SUBDEVICE_ID_HYPERCOPE_METRO 0x0107 - #define PCI_SUBDEVICE_ID_HYPERCOPE_CHAMP2 0x0108 - -+#define PCI_VENDOR_ID_DIGIGRAM 0x1369 -+#define PCI_SUBDEVICE_ID_DIGIGRAM_LX6464ES_SERIAL_SUBSYSTEM 0xc001 -+#define PCI_SUBDEVICE_ID_DIGIGRAM_LX6464ES_CAE_SERIAL_SUBSYSTEM 0xc002 -+ - #define PCI_VENDOR_ID_KAWASAKI 0x136b - #define PCI_DEVICE_ID_MCHIP_KL5A72002 0xff01 - -@@ -1880,6 +1908,8 @@ - #define PCI_SUBDEVICE_ID_CCD_SWYX4S 0xB540 - #define PCI_SUBDEVICE_ID_CCD_JH4S20 0xB550 - #define PCI_SUBDEVICE_ID_CCD_IOB8ST_1 0xB552 -+#define PCI_SUBDEVICE_ID_CCD_JHSE1 0xB553 -+#define PCI_SUBDEVICE_ID_CCD_JH8S 0xB55B - #define PCI_SUBDEVICE_ID_CCD_BN4S 0xB560 - #define PCI_SUBDEVICE_ID_CCD_BN8S 0xB562 - #define PCI_SUBDEVICE_ID_CCD_BNE1 0xB563 -@@ -1932,6 +1962,8 @@ - #define PCI_DEVICE_ID_LAVA_DSERIAL 0x0100 /* 2x 16550 */ - #define PCI_DEVICE_ID_LAVA_QUATRO_A 0x0101 /* 2x 16550, half of 4 port */ - #define PCI_DEVICE_ID_LAVA_QUATRO_B 0x0102 /* 2x 16550, half of 4 port */ -+#define PCI_DEVICE_ID_LAVA_QUATTRO_A 0x0120 /* 2x 16550A, half of 4 port */ -+#define PCI_DEVICE_ID_LAVA_QUATTRO_B 0x0121 /* 2x 16550A, half of 4 port */ - #define PCI_DEVICE_ID_LAVA_OCTO_A 0x0180 /* 4x 16550A, half of 8 port */ - #define PCI_DEVICE_ID_LAVA_OCTO_B 0x0181 /* 4x 16550A, half of 8 port */ - #define PCI_DEVICE_ID_LAVA_PORT_PLUS 0x0200 /* 2x 16650 */ -@@ -1962,15 +1994,21 @@ - #define PCI_DEVICE_ID_OXSEMI_PCIe952_1_U 0xC118 - #define PCI_DEVICE_ID_OXSEMI_PCIe952_1_GU 0xC11C - #define PCI_DEVICE_ID_OXSEMI_16PCI954 0x9501 -+#define PCI_DEVICE_ID_OXSEMI_C950 0x950B - #define PCI_DEVICE_ID_OXSEMI_16PCI95N 0x9511 - #define PCI_DEVICE_ID_OXSEMI_16PCI954PP 0x9513 - #define PCI_DEVICE_ID_OXSEMI_16PCI952 0x9521 - #define PCI_DEVICE_ID_OXSEMI_16PCI952PP 0x9523 -+#define PCI_SUBDEVICE_ID_OXSEMI_C950 0x0001 - - #define PCI_VENDOR_ID_CHELSIO 0x1425 - - #define PCI_VENDOR_ID_SAMSUNG 0x144d - -+#define PCI_VENDOR_ID_GIGABYTE 0x1458 -+ -+#define PCI_VENDOR_ID_AMBIT 0x1468 -+ - #define PCI_VENDOR_ID_MYRICOM 0x14c1 - - #define PCI_VENDOR_ID_TITAN 0x14D2 -@@ -1998,6 +2036,7 @@ - #define PCI_DEVICE_ID_AFAVLAB_P030 0x2182 - #define PCI_SUBDEVICE_ID_AFAVLAB_P061 0x2150 - -+#define PCI_VENDOR_ID_BCM_GVC 0x14a4 - #define PCI_VENDOR_ID_BROADCOM 0x14e4 - #define PCI_DEVICE_ID_TIGON3_5752 0x1600 - #define PCI_DEVICE_ID_TIGON3_5752M 0x1601 -@@ -2047,7 +2086,6 @@ - #define PCI_DEVICE_ID_TIGON3_5787M 0x1693 - #define PCI_DEVICE_ID_TIGON3_5782 0x1696 - #define PCI_DEVICE_ID_TIGON3_5784 0x1698 --#define PCI_DEVICE_ID_TIGON3_5785 0x1699 - #define PCI_DEVICE_ID_TIGON3_5786 0x169a - #define PCI_DEVICE_ID_TIGON3_5787 0x169b - #define PCI_DEVICE_ID_TIGON3_5788 0x169c -@@ -2077,6 +2115,7 @@ - #define PCI_VENDOR_ID_MAINPINE 0x1522 - #define PCI_DEVICE_ID_MAINPINE_PBRIDGE 0x0100 - #define PCI_VENDOR_ID_ENE 0x1524 -+#define PCI_DEVICE_ID_ENE_CB710_FLASH 0x0510 - #define PCI_DEVICE_ID_ENE_CB712_SD 0x0550 - #define PCI_DEVICE_ID_ENE_CB712_SD_2 0x0551 - #define PCI_DEVICE_ID_ENE_CB714_SD 0x0750 -@@ -2112,6 +2151,8 @@ - #define PCI_DEVICE_ID_MELLANOX_SINAI_OLD 0x5e8c - #define PCI_DEVICE_ID_MELLANOX_SINAI 0x6274 - -+#define PCI_VENDOR_ID_DFI 0x15bd -+ - #define PCI_VENDOR_ID_QUICKNET 0x15e2 - #define PCI_DEVICE_ID_QUICKNET_XJ 0x0500 - -@@ -2131,6 +2172,10 @@ - #define PCI_DEVICE_ID_ADDIDATA_APCI7420_3 0x700D - #define PCI_DEVICE_ID_ADDIDATA_APCI7300_3 0x700E - #define PCI_DEVICE_ID_ADDIDATA_APCI7800_3 0x700F -+#define PCI_DEVICE_ID_ADDIDATA_APCIe7300 0x7010 -+#define PCI_DEVICE_ID_ADDIDATA_APCIe7420 0x7011 -+#define PCI_DEVICE_ID_ADDIDATA_APCIe7500 0x7012 -+#define PCI_DEVICE_ID_ADDIDATA_APCIe7800 0x7013 - - #define PCI_VENDOR_ID_PDC 0x15e9 - -@@ -2215,10 +2260,20 @@ - - #define PCI_VENDOR_ID_TOPSPIN 0x1867 - -+#define PCI_VENDOR_ID_SILAN 0x1904 -+ - #define PCI_VENDOR_ID_TDI 0x192E - #define PCI_DEVICE_ID_TDI_EHCI 0x0101 - - #define PCI_VENDOR_ID_FREESCALE 0x1957 -+#define PCI_DEVICE_ID_MPC8315E 0x00b4 -+#define PCI_DEVICE_ID_MPC8315 0x00b5 -+#define PCI_DEVICE_ID_MPC8314E 0x00b6 -+#define PCI_DEVICE_ID_MPC8314 0x00b7 -+#define PCI_DEVICE_ID_MPC8378E 0x00c4 -+#define PCI_DEVICE_ID_MPC8378 0x00c5 -+#define PCI_DEVICE_ID_MPC8377E 0x00c6 -+#define PCI_DEVICE_ID_MPC8377 0x00c7 - #define PCI_DEVICE_ID_MPC8548E 0x0012 - #define PCI_DEVICE_ID_MPC8548 0x0013 - #define PCI_DEVICE_ID_MPC8543E 0x0014 -@@ -2226,6 +2281,8 @@ - #define PCI_DEVICE_ID_MPC8547E 0x0018 - #define PCI_DEVICE_ID_MPC8545E 0x0019 - #define PCI_DEVICE_ID_MPC8545 0x001a -+#define PCI_DEVICE_ID_MPC8569E 0x0061 -+#define PCI_DEVICE_ID_MPC8569 0x0060 - #define PCI_DEVICE_ID_MPC8568E 0x0020 - #define PCI_DEVICE_ID_MPC8568 0x0021 - #define PCI_DEVICE_ID_MPC8567E 0x0022 -@@ -2238,6 +2295,22 @@ - #define PCI_DEVICE_ID_MPC8572 0x0041 - #define PCI_DEVICE_ID_MPC8536E 0x0050 - #define PCI_DEVICE_ID_MPC8536 0x0051 -+#define PCI_DEVICE_ID_P2020E 0x0070 -+#define PCI_DEVICE_ID_P2020 0x0071 -+#define PCI_DEVICE_ID_P2010E 0x0078 -+#define PCI_DEVICE_ID_P2010 0x0079 -+#define PCI_DEVICE_ID_P1020E 0x0100 -+#define PCI_DEVICE_ID_P1020 0x0101 -+#define PCI_DEVICE_ID_P1011E 0x0108 -+#define PCI_DEVICE_ID_P1011 0x0109 -+#define PCI_DEVICE_ID_P1022E 0x0110 -+#define PCI_DEVICE_ID_P1022 0x0111 -+#define PCI_DEVICE_ID_P1013E 0x0118 -+#define PCI_DEVICE_ID_P1013 0x0119 -+#define PCI_DEVICE_ID_P4080E 0x0400 -+#define PCI_DEVICE_ID_P4080 0x0401 -+#define PCI_DEVICE_ID_P4040E 0x0408 -+#define PCI_DEVICE_ID_P4040 0x0409 - #define PCI_DEVICE_ID_MPC8641 0x7010 - #define PCI_DEVICE_ID_MPC8641D 0x7011 - #define PCI_DEVICE_ID_MPC8610 0x7018 -@@ -2251,6 +2324,7 @@ - #define PCI_VENDOR_ID_JMICRON 0x197B - #define PCI_DEVICE_ID_JMICRON_JMB360 0x2360 - #define PCI_DEVICE_ID_JMICRON_JMB361 0x2361 -+#define PCI_DEVICE_ID_JMICRON_JMB362 0x2362 - #define PCI_DEVICE_ID_JMICRON_JMB363 0x2363 - #define PCI_DEVICE_ID_JMICRON_JMB365 0x2365 - #define PCI_DEVICE_ID_JMICRON_JMB366 0x2366 -@@ -2263,6 +2337,10 @@ - #define PCI_DEVICE_ID_KORENIX_JETCARDF0 0x1600 - #define PCI_DEVICE_ID_KORENIX_JETCARDF1 0x16ff - -+#define PCI_VENDOR_ID_QMI 0x1a32 -+ -+#define PCI_VENDOR_ID_AZWAVE 0x1a3b -+ - #define PCI_VENDOR_ID_TEKRAM 0x1de1 - #define PCI_DEVICE_ID_TEKRAM_DC290 0xdc29 - -@@ -2342,6 +2420,9 @@ - #define PCI_DEVICE_ID_INTEL_82840_HB 0x1a21 - #define PCI_DEVICE_ID_INTEL_82845_HB 0x1a30 - #define PCI_DEVICE_ID_INTEL_IOAT 0x1a38 -+#define PCI_DEVICE_ID_INTEL_CPT_SMBUS 0x1c22 -+#define PCI_DEVICE_ID_INTEL_CPT_LPC1 0x1c42 -+#define PCI_DEVICE_ID_INTEL_CPT_LPC2 0x1c43 - #define PCI_DEVICE_ID_INTEL_82801AA_0 0x2410 - #define PCI_DEVICE_ID_INTEL_82801AA_1 0x2411 - #define PCI_DEVICE_ID_INTEL_82801AA_3 0x2413 -@@ -2373,6 +2454,7 @@ - #define PCI_DEVICE_ID_INTEL_82801CA_12 0x248c - #define PCI_DEVICE_ID_INTEL_82801DB_0 0x24c0 - #define PCI_DEVICE_ID_INTEL_82801DB_1 0x24c1 -+#define PCI_DEVICE_ID_INTEL_82801DB_2 0x24c2 - #define PCI_DEVICE_ID_INTEL_82801DB_3 0x24c3 - #define PCI_DEVICE_ID_INTEL_82801DB_5 0x24c5 - #define PCI_DEVICE_ID_INTEL_82801DB_6 0x24c6 -@@ -2463,6 +2545,8 @@ - #define PCI_DEVICE_ID_INTEL_IOAT_TBG3 0x3433 - #define PCI_DEVICE_ID_INTEL_82830_HB 0x3575 - #define PCI_DEVICE_ID_INTEL_82830_CGC 0x3577 -+#define PCI_DEVICE_ID_INTEL_82854_HB 0x358c -+#define PCI_DEVICE_ID_INTEL_82854_IG 0x358e - #define PCI_DEVICE_ID_INTEL_82855GM_HB 0x3580 - #define PCI_DEVICE_ID_INTEL_82855GM_IG 0x3582 - #define PCI_DEVICE_ID_INTEL_E7520_MCH 0x3590 -@@ -2476,6 +2560,16 @@ - #define PCI_DEVICE_ID_INTEL_E7525_MCH 0x359e - #define PCI_DEVICE_ID_INTEL_IOAT_CNB 0x360b - #define PCI_DEVICE_ID_INTEL_FBD_CNB 0x360c -+#define PCI_DEVICE_ID_INTEL_IOAT_JSF0 0x3710 -+#define PCI_DEVICE_ID_INTEL_IOAT_JSF1 0x3711 -+#define PCI_DEVICE_ID_INTEL_IOAT_JSF2 0x3712 -+#define PCI_DEVICE_ID_INTEL_IOAT_JSF3 0x3713 -+#define PCI_DEVICE_ID_INTEL_IOAT_JSF4 0x3714 -+#define PCI_DEVICE_ID_INTEL_IOAT_JSF5 0x3715 -+#define PCI_DEVICE_ID_INTEL_IOAT_JSF6 0x3716 -+#define PCI_DEVICE_ID_INTEL_IOAT_JSF7 0x3717 -+#define PCI_DEVICE_ID_INTEL_IOAT_JSF8 0x3718 -+#define PCI_DEVICE_ID_INTEL_IOAT_JSF9 0x3719 - #define PCI_DEVICE_ID_INTEL_ICH10_0 0x3a14 - #define PCI_DEVICE_ID_INTEL_ICH10_1 0x3a16 - #define PCI_DEVICE_ID_INTEL_ICH10_2 0x3a18 -@@ -2606,6 +2700,7 @@ - #define PCI_DEVICE_ID_NETMOS_9835 0x9835 - #define PCI_DEVICE_ID_NETMOS_9845 0x9845 - #define PCI_DEVICE_ID_NETMOS_9855 0x9855 -+#define PCI_DEVICE_ID_NETMOS_9901 0x9901 - - #define PCI_VENDOR_ID_3COM_2 0xa727 - diff --git a/debian/patches/libdde_phy.patch b/debian/patches/libdde_phy.patch deleted file mode 100644 index 5d992c09..00000000 --- a/debian/patches/libdde_phy.patch +++ /dev/null @@ -1,60 +0,0 @@ ---- a/libdde-linux26/contrib/include/linux/phy.h 2012-04-15 20:31:32.000000000 +0000 -+++ b/libdde-linux26/contrib/include/linux/phy.h 2012-03-17 10:14:52.000000000 +0000 -@@ -79,7 +79,7 @@ - * Need to be a little smaller than phydev->dev.bus_id to leave room - * for the ":%02x" - */ --#define MII_BUS_ID_SIZE (BUS_ID_SIZE - 3) -+#define MII_BUS_ID_SIZE (20 - 3) - - /* - * The Bus class for PHYs. Devices which provide access to -@@ -315,8 +315,7 @@ - - /* Interrupt and Polling infrastructure */ - struct work_struct phy_queue; -- struct work_struct state_queue; -- struct timer_list phy_timer; -+ struct delayed_work state_queue; - atomic_t irq_disable; - - struct mutex lock; -@@ -389,6 +388,12 @@ - /* Enables or disables interrupts */ - int (*config_intr)(struct phy_device *phydev); - -+ /* -+ * Checks if the PHY generated an interrupt. -+ * For multi-PHY devices with shared PHY interrupt pin -+ */ -+ int (*did_interrupt)(struct phy_device *phydev); -+ - /* Clears up any memory if needed */ - void (*remove)(struct phy_device *phydev); - -@@ -402,7 +407,7 @@ - /* A Structure for boards to register fixups with the PHY Lib */ - struct phy_fixup { - struct list_head list; -- char bus_id[BUS_ID_SIZE]; -+ char bus_id[20]; - u32 phy_uid; - u32 phy_uid_mask; - int (*run)(struct phy_device *phydev); -@@ -439,10 +444,16 @@ - - int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id); - struct phy_device* get_phy_device(struct mii_bus *bus, int addr); -+int phy_device_register(struct phy_device *phy); - int phy_clear_interrupt(struct phy_device *phydev); - int phy_config_interrupt(struct phy_device *phydev, u32 interrupts); -+int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, -+ u32 flags, phy_interface_t interface); - struct phy_device * phy_attach(struct net_device *dev, - const char *bus_id, u32 flags, phy_interface_t interface); -+int phy_connect_direct(struct net_device *dev, struct phy_device *phydev, -+ void (*handler)(struct net_device *), u32 flags, -+ phy_interface_t interface); - struct phy_device * phy_connect(struct net_device *dev, const char *bus_id, - void (*handler)(struct net_device *), u32 flags, - phy_interface_t interface); diff --git a/debian/patches/libdde_pr_cont.patch b/debian/patches/libdde_pr_cont.patch deleted file mode 100644 index 90c5ed81..00000000 --- a/debian/patches/libdde_pr_cont.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/libdde-linux26/include/linux/kernel.h b/libdde-linux26/include/linux/kernel.h -index 573ed07..6354939 100644 ---- a/libdde-linux26/include/linux/kernel.h -+++ b/libdde-linux26/include/linux/kernel.h -@@ -363,6 +363,8 @@ static inline char *pack_hex_byte(char *buf, u8 byte) - printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__) - #define pr_info(fmt, ...) \ - printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__) -+#define pr_cont(fmt, ...) \ -+ printk(KERN_CONT fmt, ##__VA_ARGS__) - - #if defined(DEBUG) - #ifndef DDE_LINUX -diff --git a/libdde-linux26/contrib/include/linux/kernel.h b/libdde-linux26/contrib/include/linux/kernel.h -index 7fa3718..0bded10 100644 ---- a/libdde-linux26/contrib/include/linux/kernel.h -+++ b/libdde-linux26/contrib/include/linux/kernel.h -@@ -353,6 +353,8 @@ static inline char *pack_hex_byte(char *buf, u8 byte) - printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__) - #define pr_info(fmt, ...) \ - printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__) -+#define pr_cont(fmt, ...) \ -+ printk(KERN_CONT fmt, ##__VA_ARGS__) - - /* If you are writing a driver, please use dev_dbg instead */ - #if defined(DEBUG) diff --git a/debian/patches/libdde_rcu.patch b/debian/patches/libdde_rcu.patch deleted file mode 100644 index 03245335..00000000 --- a/debian/patches/libdde_rcu.patch +++ /dev/null @@ -1,816 +0,0 @@ ---- /dev/null 2011-08-03 18:03:30.000000000 +0000 -+++ b/libdde-linux26/contrib/kernel/rcuclassic.c 2012-04-15 23:40:54.000000000 +0000 -@@ -0,0 +1,788 @@ -+/* -+ * Read-Copy Update mechanism for mutual exclusion -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * Copyright IBM Corporation, 2001 -+ * -+ * Authors: Dipankar Sarma <dipankar@in.ibm.com> -+ * Manfred Spraul <manfred@colorfullife.com> -+ * -+ * Based on the original work by Paul McKenney <paulmck@us.ibm.com> -+ * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. -+ * Papers: -+ * http://www.rdrop.com/users/paulmck/paper/rclockpdcsproof.pdf -+ * http://lse.sourceforge.net/locking/rclock_OLS.2001.05.01c.sc.pdf (OLS2001) -+ * -+ * For detailed explanation of Read-Copy Update mechanism see - -+ * Documentation/RCU -+ * -+ */ -+#include <linux/types.h> -+#include <linux/kernel.h> -+#include <linux/init.h> -+#include <linux/spinlock.h> -+#include <linux/smp.h> -+#include <linux/rcupdate.h> -+#include <linux/interrupt.h> -+#include <linux/sched.h> -+#include <asm/atomic.h> -+#include <linux/bitops.h> -+#include <linux/module.h> -+#include <linux/completion.h> -+#include <linux/moduleparam.h> -+#include <linux/percpu.h> -+#include <linux/notifier.h> -+#include <linux/cpu.h> -+#include <linux/mutex.h> -+#include <linux/time.h> -+ -+#ifdef CONFIG_DEBUG_LOCK_ALLOC -+static struct lock_class_key rcu_lock_key; -+struct lockdep_map rcu_lock_map = -+ STATIC_LOCKDEP_MAP_INIT("rcu_read_lock", &rcu_lock_key); -+EXPORT_SYMBOL_GPL(rcu_lock_map); -+#endif -+ -+ -+/* Definition for rcupdate control block. */ -+static struct rcu_ctrlblk rcu_ctrlblk = { -+ .cur = -300, -+ .completed = -300, -+ .pending = -300, -+ .lock = __SPIN_LOCK_UNLOCKED(&rcu_ctrlblk.lock), -+ .cpumask = CPU_BITS_NONE, -+}; -+static struct rcu_ctrlblk rcu_bh_ctrlblk = { -+ .cur = -300, -+ .completed = -300, -+ .pending = -300, -+ .lock = __SPIN_LOCK_UNLOCKED(&rcu_bh_ctrlblk.lock), -+ .cpumask = CPU_BITS_NONE, -+}; -+ -+DEFINE_PER_CPU(struct rcu_data, rcu_data) = { 0L }; -+DEFINE_PER_CPU(struct rcu_data, rcu_bh_data) = { 0L }; -+ -+static int blimit = 10; -+static int qhimark = 10000; -+static int qlowmark = 100; -+ -+#ifdef CONFIG_SMP -+static void force_quiescent_state(struct rcu_data *rdp, -+ struct rcu_ctrlblk *rcp) -+{ -+ int cpu; -+ unsigned long flags; -+ -+ set_need_resched(); -+ spin_lock_irqsave(&rcp->lock, flags); -+ if (unlikely(!rcp->signaled)) { -+ rcp->signaled = 1; -+ /* -+ * Don't send IPI to itself. With irqs disabled, -+ * rdp->cpu is the current cpu. -+ * -+ * cpu_online_mask is updated by the _cpu_down() -+ * using __stop_machine(). Since we're in irqs disabled -+ * section, __stop_machine() is not exectuting, hence -+ * the cpu_online_mask is stable. -+ * -+ * However, a cpu might have been offlined _just_ before -+ * we disabled irqs while entering here. -+ * And rcu subsystem might not yet have handled the CPU_DEAD -+ * notification, leading to the offlined cpu's bit -+ * being set in the rcp->cpumask. -+ * -+ * Hence cpumask = (rcp->cpumask & cpu_online_mask) to prevent -+ * sending smp_reschedule() to an offlined CPU. -+ */ -+ for_each_cpu_and(cpu, -+ to_cpumask(rcp->cpumask), cpu_online_mask) { -+ if (cpu != rdp->cpu) -+ smp_send_reschedule(cpu); -+ } -+ } -+ spin_unlock_irqrestore(&rcp->lock, flags); -+} -+#else -+static inline void force_quiescent_state(struct rcu_data *rdp, -+ struct rcu_ctrlblk *rcp) -+{ -+ set_need_resched(); -+} -+#endif -+ -+static void __call_rcu(struct rcu_head *head, struct rcu_ctrlblk *rcp, -+ struct rcu_data *rdp) -+{ -+ long batch; -+ -+ head->next = NULL; -+ smp_mb(); /* Read of rcu->cur must happen after any change by caller. */ -+ -+ /* -+ * Determine the batch number of this callback. -+ * -+ * Using ACCESS_ONCE to avoid the following error when gcc eliminates -+ * local variable "batch" and emits codes like this: -+ * 1) rdp->batch = rcp->cur + 1 # gets old value -+ * ...... -+ * 2)rcu_batch_after(rcp->cur + 1, rdp->batch) # gets new value -+ * then [*nxttail[0], *nxttail[1]) may contain callbacks -+ * that batch# = rdp->batch, see the comment of struct rcu_data. -+ */ -+ batch = ACCESS_ONCE(rcp->cur) + 1; -+ -+ if (rdp->nxtlist && rcu_batch_after(batch, rdp->batch)) { -+ /* process callbacks */ -+ rdp->nxttail[0] = rdp->nxttail[1]; -+ rdp->nxttail[1] = rdp->nxttail[2]; -+ if (rcu_batch_after(batch - 1, rdp->batch)) -+ rdp->nxttail[0] = rdp->nxttail[2]; -+ } -+ -+ rdp->batch = batch; -+ *rdp->nxttail[2] = head; -+ rdp->nxttail[2] = &head->next; -+ -+ if (unlikely(++rdp->qlen > qhimark)) { -+ rdp->blimit = INT_MAX; -+ force_quiescent_state(rdp, &rcu_ctrlblk); -+ } -+} -+ -+#ifdef CONFIG_RCU_CPU_STALL_DETECTOR -+ -+static void record_gp_stall_check_time(struct rcu_ctrlblk *rcp) -+{ -+ rcp->gp_start = jiffies; -+ rcp->jiffies_stall = jiffies + RCU_SECONDS_TILL_STALL_CHECK; -+} -+ -+static void print_other_cpu_stall(struct rcu_ctrlblk *rcp) -+{ -+ int cpu; -+ long delta; -+ unsigned long flags; -+ -+ /* Only let one CPU complain about others per time interval. */ -+ -+ spin_lock_irqsave(&rcp->lock, flags); -+ delta = jiffies - rcp->jiffies_stall; -+ if (delta < 2 || rcp->cur != rcp->completed) { -+ spin_unlock_irqrestore(&rcp->lock, flags); -+ return; -+ } -+ rcp->jiffies_stall = jiffies + RCU_SECONDS_TILL_STALL_RECHECK; -+ spin_unlock_irqrestore(&rcp->lock, flags); -+ -+ /* OK, time to rat on our buddy... */ -+ -+ printk(KERN_ERR "INFO: RCU detected CPU stalls:"); -+ for_each_possible_cpu(cpu) { -+ if (cpumask_test_cpu(cpu, to_cpumask(rcp->cpumask))) -+ printk(" %d", cpu); -+ } -+ printk(" (detected by %d, t=%ld jiffies)\n", -+ smp_processor_id(), (long)(jiffies - rcp->gp_start)); -+} -+ -+static void print_cpu_stall(struct rcu_ctrlblk *rcp) -+{ -+ unsigned long flags; -+ -+ printk(KERN_ERR "INFO: RCU detected CPU %d stall (t=%lu/%lu jiffies)\n", -+ smp_processor_id(), jiffies, -+ jiffies - rcp->gp_start); -+ dump_stack(); -+ spin_lock_irqsave(&rcp->lock, flags); -+ if ((long)(jiffies - rcp->jiffies_stall) >= 0) -+ rcp->jiffies_stall = -+ jiffies + RCU_SECONDS_TILL_STALL_RECHECK; -+ spin_unlock_irqrestore(&rcp->lock, flags); -+ set_need_resched(); /* kick ourselves to get things going. */ -+} -+ -+static void check_cpu_stall(struct rcu_ctrlblk *rcp) -+{ -+ long delta; -+ -+ delta = jiffies - rcp->jiffies_stall; -+ if (cpumask_test_cpu(smp_processor_id(), to_cpumask(rcp->cpumask)) && -+ delta >= 0) { -+ -+ /* We haven't checked in, so go dump stack. */ -+ print_cpu_stall(rcp); -+ -+ } else if (rcp->cur != rcp->completed && delta >= 2) { -+ -+ /* They had two seconds to dump stack, so complain. */ -+ print_other_cpu_stall(rcp); -+ } -+} -+ -+#else /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ -+ -+static void record_gp_stall_check_time(struct rcu_ctrlblk *rcp) -+{ -+} -+ -+static inline void check_cpu_stall(struct rcu_ctrlblk *rcp) -+{ -+} -+ -+#endif /* #else #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ -+ -+/** -+ * call_rcu - Queue an RCU callback for invocation after a grace period. -+ * @head: structure to be used for queueing the RCU updates. -+ * @func: actual update function to be invoked after the grace period -+ * -+ * The update function will be invoked some time after a full grace -+ * period elapses, in other words after all currently executing RCU -+ * read-side critical sections have completed. RCU read-side critical -+ * sections are delimited by rcu_read_lock() and rcu_read_unlock(), -+ * and may be nested. -+ */ -+void call_rcu(struct rcu_head *head, -+ void (*func)(struct rcu_head *rcu)) -+{ -+ unsigned long flags; -+ -+ head->func = func; -+ local_irq_save(flags); -+ __call_rcu(head, &rcu_ctrlblk, &__get_cpu_var(rcu_data)); -+ local_irq_restore(flags); -+} -+EXPORT_SYMBOL_GPL(call_rcu); -+ -+/** -+ * call_rcu_bh - Queue an RCU for invocation after a quicker grace period. -+ * @head: structure to be used for queueing the RCU updates. -+ * @func: actual update function to be invoked after the grace period -+ * -+ * The update function will be invoked some time after a full grace -+ * period elapses, in other words after all currently executing RCU -+ * read-side critical sections have completed. call_rcu_bh() assumes -+ * that the read-side critical sections end on completion of a softirq -+ * handler. This means that read-side critical sections in process -+ * context must not be interrupted by softirqs. This interface is to be -+ * used when most of the read-side critical sections are in softirq context. -+ * RCU read-side critical sections are delimited by rcu_read_lock() and -+ * rcu_read_unlock(), * if in interrupt context or rcu_read_lock_bh() -+ * and rcu_read_unlock_bh(), if in process context. These may be nested. -+ */ -+void call_rcu_bh(struct rcu_head *head, -+ void (*func)(struct rcu_head *rcu)) -+{ -+ unsigned long flags; -+ -+ head->func = func; -+ local_irq_save(flags); -+ __call_rcu(head, &rcu_bh_ctrlblk, &__get_cpu_var(rcu_bh_data)); -+ local_irq_restore(flags); -+} -+EXPORT_SYMBOL_GPL(call_rcu_bh); -+ -+/* -+ * Return the number of RCU batches processed thus far. Useful -+ * for debug and statistics. -+ */ -+long rcu_batches_completed(void) -+{ -+ return rcu_ctrlblk.completed; -+} -+EXPORT_SYMBOL_GPL(rcu_batches_completed); -+ -+/* -+ * Return the number of RCU batches processed thus far. Useful -+ * for debug and statistics. -+ */ -+long rcu_batches_completed_bh(void) -+{ -+ return rcu_bh_ctrlblk.completed; -+} -+EXPORT_SYMBOL_GPL(rcu_batches_completed_bh); -+ -+/* Raises the softirq for processing rcu_callbacks. */ -+static inline void raise_rcu_softirq(void) -+{ -+ raise_softirq(RCU_SOFTIRQ); -+} -+ -+/* -+ * Invoke the completed RCU callbacks. They are expected to be in -+ * a per-cpu list. -+ */ -+static void rcu_do_batch(struct rcu_data *rdp) -+{ -+ unsigned long flags; -+ struct rcu_head *next, *list; -+ int count = 0; -+ -+ list = rdp->donelist; -+ while (list) { -+ next = list->next; -+ prefetch(next); -+ list->func(list); -+ list = next; -+ if (++count >= rdp->blimit) -+ break; -+ } -+ rdp->donelist = list; -+ -+ local_irq_save(flags); -+ rdp->qlen -= count; -+ local_irq_restore(flags); -+ if (rdp->blimit == INT_MAX && rdp->qlen <= qlowmark) -+ rdp->blimit = blimit; -+ -+ if (!rdp->donelist) -+ rdp->donetail = &rdp->donelist; -+ else -+ raise_rcu_softirq(); -+} -+ -+/* -+ * Grace period handling: -+ * The grace period handling consists out of two steps: -+ * - A new grace period is started. -+ * This is done by rcu_start_batch. The start is not broadcasted to -+ * all cpus, they must pick this up by comparing rcp->cur with -+ * rdp->quiescbatch. All cpus are recorded in the -+ * rcu_ctrlblk.cpumask bitmap. -+ * - All cpus must go through a quiescent state. -+ * Since the start of the grace period is not broadcasted, at least two -+ * calls to rcu_check_quiescent_state are required: -+ * The first call just notices that a new grace period is running. The -+ * following calls check if there was a quiescent state since the beginning -+ * of the grace period. If so, it updates rcu_ctrlblk.cpumask. If -+ * the bitmap is empty, then the grace period is completed. -+ * rcu_check_quiescent_state calls rcu_start_batch(0) to start the next grace -+ * period (if necessary). -+ */ -+ -+/* -+ * Register a new batch of callbacks, and start it up if there is currently no -+ * active batch and the batch to be registered has not already occurred. -+ * Caller must hold rcu_ctrlblk.lock. -+ */ -+static void rcu_start_batch(struct rcu_ctrlblk *rcp) -+{ -+ if (rcp->cur != rcp->pending && -+ rcp->completed == rcp->cur) { -+ rcp->cur++; -+ record_gp_stall_check_time(rcp); -+ -+ /* -+ * Accessing nohz_cpu_mask before incrementing rcp->cur needs a -+ * Barrier Otherwise it can cause tickless idle CPUs to be -+ * included in rcp->cpumask, which will extend graceperiods -+ * unnecessarily. -+ */ -+ smp_mb(); -+ cpumask_andnot(to_cpumask(rcp->cpumask), -+ cpu_online_mask, nohz_cpu_mask); -+ -+ rcp->signaled = 0; -+ } -+} -+ -+/* -+ * cpu went through a quiescent state since the beginning of the grace period. -+ * Clear it from the cpu mask and complete the grace period if it was the last -+ * cpu. Start another grace period if someone has further entries pending -+ */ -+static void cpu_quiet(int cpu, struct rcu_ctrlblk *rcp) -+{ -+ cpumask_clear_cpu(cpu, to_cpumask(rcp->cpumask)); -+ if (cpumask_empty(to_cpumask(rcp->cpumask))) { -+ /* batch completed ! */ -+ rcp->completed = rcp->cur; -+ rcu_start_batch(rcp); -+ } -+} -+ -+/* -+ * Check if the cpu has gone through a quiescent state (say context -+ * switch). If so and if it already hasn't done so in this RCU -+ * quiescent cycle, then indicate that it has done so. -+ */ -+static void rcu_check_quiescent_state(struct rcu_ctrlblk *rcp, -+ struct rcu_data *rdp) -+{ -+ unsigned long flags; -+ -+ if (rdp->quiescbatch != rcp->cur) { -+ /* start new grace period: */ -+ rdp->qs_pending = 1; -+ rdp->passed_quiesc = 0; -+ rdp->quiescbatch = rcp->cur; -+ return; -+ } -+ -+ /* Grace period already completed for this cpu? -+ * qs_pending is checked instead of the actual bitmap to avoid -+ * cacheline trashing. -+ */ -+ if (!rdp->qs_pending) -+ return; -+ -+ /* -+ * Was there a quiescent state since the beginning of the grace -+ * period? If no, then exit and wait for the next call. -+ */ -+ if (!rdp->passed_quiesc) -+ return; -+ rdp->qs_pending = 0; -+ -+ spin_lock_irqsave(&rcp->lock, flags); -+ /* -+ * rdp->quiescbatch/rcp->cur and the cpu bitmap can come out of sync -+ * during cpu startup. Ignore the quiescent state. -+ */ -+ if (likely(rdp->quiescbatch == rcp->cur)) -+ cpu_quiet(rdp->cpu, rcp); -+ -+ spin_unlock_irqrestore(&rcp->lock, flags); -+} -+ -+ -+#ifdef CONFIG_HOTPLUG_CPU -+ -+/* warning! helper for rcu_offline_cpu. do not use elsewhere without reviewing -+ * locking requirements, the list it's pulling from has to belong to a cpu -+ * which is dead and hence not processing interrupts. -+ */ -+static void rcu_move_batch(struct rcu_data *this_rdp, struct rcu_head *list, -+ struct rcu_head **tail, long batch) -+{ -+ unsigned long flags; -+ -+ if (list) { -+ local_irq_save(flags); -+ this_rdp->batch = batch; -+ *this_rdp->nxttail[2] = list; -+ this_rdp->nxttail[2] = tail; -+ local_irq_restore(flags); -+ } -+} -+ -+static void __rcu_offline_cpu(struct rcu_data *this_rdp, -+ struct rcu_ctrlblk *rcp, struct rcu_data *rdp) -+{ -+ unsigned long flags; -+ -+ /* -+ * if the cpu going offline owns the grace period -+ * we can block indefinitely waiting for it, so flush -+ * it here -+ */ -+ spin_lock_irqsave(&rcp->lock, flags); -+ if (rcp->cur != rcp->completed) -+ cpu_quiet(rdp->cpu, rcp); -+ rcu_move_batch(this_rdp, rdp->donelist, rdp->donetail, rcp->cur + 1); -+ rcu_move_batch(this_rdp, rdp->nxtlist, rdp->nxttail[2], rcp->cur + 1); -+ spin_unlock(&rcp->lock); -+ -+ this_rdp->qlen += rdp->qlen; -+ local_irq_restore(flags); -+} -+ -+static void rcu_offline_cpu(int cpu) -+{ -+ struct rcu_data *this_rdp = &get_cpu_var(rcu_data); -+ struct rcu_data *this_bh_rdp = &get_cpu_var(rcu_bh_data); -+ -+ __rcu_offline_cpu(this_rdp, &rcu_ctrlblk, -+ &per_cpu(rcu_data, cpu)); -+ __rcu_offline_cpu(this_bh_rdp, &rcu_bh_ctrlblk, -+ &per_cpu(rcu_bh_data, cpu)); -+ put_cpu_var(rcu_data); -+ put_cpu_var(rcu_bh_data); -+} -+ -+#else -+ -+static void rcu_offline_cpu(int cpu) -+{ -+} -+ -+#endif -+ -+/* -+ * This does the RCU processing work from softirq context. -+ */ -+static void __rcu_process_callbacks(struct rcu_ctrlblk *rcp, -+ struct rcu_data *rdp) -+{ -+ unsigned long flags; -+ long completed_snap; -+ -+ if (rdp->nxtlist) { -+ local_irq_save(flags); -+ completed_snap = ACCESS_ONCE(rcp->completed); -+ -+ /* -+ * move the other grace-period-completed entries to -+ * [rdp->nxtlist, *rdp->nxttail[0]) temporarily -+ */ -+ if (!rcu_batch_before(completed_snap, rdp->batch)) -+ rdp->nxttail[0] = rdp->nxttail[1] = rdp->nxttail[2]; -+ else if (!rcu_batch_before(completed_snap, rdp->batch - 1)) -+ rdp->nxttail[0] = rdp->nxttail[1]; -+ -+ /* -+ * the grace period for entries in -+ * [rdp->nxtlist, *rdp->nxttail[0]) has completed and -+ * move these entries to donelist -+ */ -+ if (rdp->nxttail[0] != &rdp->nxtlist) { -+ *rdp->donetail = rdp->nxtlist; -+ rdp->donetail = rdp->nxttail[0]; -+ rdp->nxtlist = *rdp->nxttail[0]; -+ *rdp->donetail = NULL; -+ -+ if (rdp->nxttail[1] == rdp->nxttail[0]) -+ rdp->nxttail[1] = &rdp->nxtlist; -+ if (rdp->nxttail[2] == rdp->nxttail[0]) -+ rdp->nxttail[2] = &rdp->nxtlist; -+ rdp->nxttail[0] = &rdp->nxtlist; -+ } -+ -+ local_irq_restore(flags); -+ -+ if (rcu_batch_after(rdp->batch, rcp->pending)) { -+ unsigned long flags2; -+ -+ /* and start it/schedule start if it's a new batch */ -+ spin_lock_irqsave(&rcp->lock, flags2); -+ if (rcu_batch_after(rdp->batch, rcp->pending)) { -+ rcp->pending = rdp->batch; -+ rcu_start_batch(rcp); -+ } -+ spin_unlock_irqrestore(&rcp->lock, flags2); -+ } -+ } -+ -+ rcu_check_quiescent_state(rcp, rdp); -+ if (rdp->donelist) -+ rcu_do_batch(rdp); -+} -+ -+static void rcu_process_callbacks(struct softirq_action *unused) -+{ -+ /* -+ * Memory references from any prior RCU read-side critical sections -+ * executed by the interrupted code must be see before any RCU -+ * grace-period manupulations below. -+ */ -+ -+ smp_mb(); /* See above block comment. */ -+ -+ __rcu_process_callbacks(&rcu_ctrlblk, &__get_cpu_var(rcu_data)); -+ __rcu_process_callbacks(&rcu_bh_ctrlblk, &__get_cpu_var(rcu_bh_data)); -+ -+ /* -+ * Memory references from any later RCU read-side critical sections -+ * executed by the interrupted code must be see after any RCU -+ * grace-period manupulations above. -+ */ -+ -+ smp_mb(); /* See above block comment. */ -+} -+ -+static int __rcu_pending(struct rcu_ctrlblk *rcp, struct rcu_data *rdp) -+{ -+ /* Check for CPU stalls, if enabled. */ -+ check_cpu_stall(rcp); -+ -+ if (rdp->nxtlist) { -+ long completed_snap = ACCESS_ONCE(rcp->completed); -+ -+ /* -+ * This cpu has pending rcu entries and the grace period -+ * for them has completed. -+ */ -+ if (!rcu_batch_before(completed_snap, rdp->batch)) -+ return 1; -+ if (!rcu_batch_before(completed_snap, rdp->batch - 1) && -+ rdp->nxttail[0] != rdp->nxttail[1]) -+ return 1; -+ if (rdp->nxttail[0] != &rdp->nxtlist) -+ return 1; -+ -+ /* -+ * This cpu has pending rcu entries and the new batch -+ * for then hasn't been started nor scheduled start -+ */ -+ if (rcu_batch_after(rdp->batch, rcp->pending)) -+ return 1; -+ } -+ -+ /* This cpu has finished callbacks to invoke */ -+ if (rdp->donelist) -+ return 1; -+ -+ /* The rcu core waits for a quiescent state from the cpu */ -+ if (rdp->quiescbatch != rcp->cur || rdp->qs_pending) -+ return 1; -+ -+ /* nothing to do */ -+ return 0; -+} -+ -+/* -+ * Check to see if there is any immediate RCU-related work to be done -+ * by the current CPU, returning 1 if so. This function is part of the -+ * RCU implementation; it is -not- an exported member of the RCU API. -+ */ -+int rcu_pending(int cpu) -+{ -+ return __rcu_pending(&rcu_ctrlblk, &per_cpu(rcu_data, cpu)) || -+ __rcu_pending(&rcu_bh_ctrlblk, &per_cpu(rcu_bh_data, cpu)); -+} -+ -+/* -+ * Check to see if any future RCU-related work will need to be done -+ * by the current CPU, even if none need be done immediately, returning -+ * 1 if so. This function is part of the RCU implementation; it is -not- -+ * an exported member of the RCU API. -+ */ -+int rcu_needs_cpu(int cpu) -+{ -+ struct rcu_data *rdp = &per_cpu(rcu_data, cpu); -+ struct rcu_data *rdp_bh = &per_cpu(rcu_bh_data, cpu); -+ -+ return !!rdp->nxtlist || !!rdp_bh->nxtlist || rcu_pending(cpu); -+} -+ -+/* -+ * Top-level function driving RCU grace-period detection, normally -+ * invoked from the scheduler-clock interrupt. This function simply -+ * increments counters that are read only from softirq by this same -+ * CPU, so there are no memory barriers required. -+ */ -+void rcu_check_callbacks(int cpu, int user) -+{ -+ if (user || -+ (idle_cpu(cpu) && rcu_scheduler_active && -+ !in_softirq() && hardirq_count() <= (1 << HARDIRQ_SHIFT))) { -+ -+ /* -+ * Get here if this CPU took its interrupt from user -+ * mode or from the idle loop, and if this is not a -+ * nested interrupt. In this case, the CPU is in -+ * a quiescent state, so count it. -+ * -+ * Also do a memory barrier. This is needed to handle -+ * the case where writes from a preempt-disable section -+ * of code get reordered into schedule() by this CPU's -+ * write buffer. The memory barrier makes sure that -+ * the rcu_qsctr_inc() and rcu_bh_qsctr_inc() are see -+ * by other CPUs to happen after any such write. -+ */ -+ -+ smp_mb(); /* See above block comment. */ -+ rcu_qsctr_inc(cpu); -+ rcu_bh_qsctr_inc(cpu); -+ -+ } else if (!in_softirq()) { -+ -+ /* -+ * Get here if this CPU did not take its interrupt from -+ * softirq, in other words, if it is not interrupting -+ * a rcu_bh read-side critical section. This is an _bh -+ * critical section, so count it. The memory barrier -+ * is needed for the same reason as is the above one. -+ */ -+ -+ smp_mb(); /* See above block comment. */ -+ rcu_bh_qsctr_inc(cpu); -+ } -+ raise_rcu_softirq(); -+} -+ -+static void __cpuinit rcu_init_percpu_data(int cpu, struct rcu_ctrlblk *rcp, -+ struct rcu_data *rdp) -+{ -+ unsigned long flags; -+ -+ spin_lock_irqsave(&rcp->lock, flags); -+ memset(rdp, 0, sizeof(*rdp)); -+ rdp->nxttail[0] = rdp->nxttail[1] = rdp->nxttail[2] = &rdp->nxtlist; -+ rdp->donetail = &rdp->donelist; -+ rdp->quiescbatch = rcp->completed; -+ rdp->qs_pending = 0; -+ rdp->cpu = cpu; -+ rdp->blimit = blimit; -+ spin_unlock_irqrestore(&rcp->lock, flags); -+} -+ -+static void __cpuinit rcu_online_cpu(int cpu) -+{ -+ struct rcu_data *rdp = &per_cpu(rcu_data, cpu); -+ struct rcu_data *bh_rdp = &per_cpu(rcu_bh_data, cpu); -+ -+ rcu_init_percpu_data(cpu, &rcu_ctrlblk, rdp); -+ rcu_init_percpu_data(cpu, &rcu_bh_ctrlblk, bh_rdp); -+ open_softirq(RCU_SOFTIRQ, rcu_process_callbacks); -+} -+ -+static int __cpuinit rcu_cpu_notify(struct notifier_block *self, -+ unsigned long action, void *hcpu) -+{ -+ long cpu = (long)hcpu; -+ -+ switch (action) { -+ case CPU_UP_PREPARE: -+ case CPU_UP_PREPARE_FROZEN: -+ rcu_online_cpu(cpu); -+ break; -+ case CPU_DEAD: -+ case CPU_DEAD_FROZEN: -+ rcu_offline_cpu(cpu); -+ break; -+ default: -+ break; -+ } -+ return NOTIFY_OK; -+} -+ -+static struct notifier_block __cpuinitdata rcu_nb = { -+ .notifier_call = rcu_cpu_notify, -+}; -+ -+/* -+ * Initializes rcu mechanism. Assumed to be called early. -+ * That is before local timer(SMP) or jiffie timer (uniproc) is setup. -+ * Note that rcu_qsctr and friends are implicitly -+ * initialized due to the choice of ``0'' for RCU_CTR_INVALID. -+ */ -+void __init __rcu_init(void) -+{ -+#ifdef CONFIG_RCU_CPU_STALL_DETECTOR -+ printk(KERN_INFO "RCU-based detection of stalled CPUs is enabled.\n"); -+#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ -+ rcu_cpu_notify(&rcu_nb, CPU_UP_PREPARE, -+ (void *)(long)smp_processor_id()); -+ /* Register notifier for non-boot CPUs */ -+ register_cpu_notifier(&rcu_nb); -+} -+ -+module_param(blimit, int, 0); -+module_param(qhimark, int, 0); -+module_param(qlowmark, int, 0); -diff --git a/libdde-linux26/contrib/kernel/rcupdate.c b/libdde-linux26/contrib/kernel/rcupdate.c -index cae8a05..c6bfa1a 100644 ---- a/libdde-linux26/contrib/kernel/rcupdate.c -+++ b/libdde-linux26/contrib/kernel/rcupdate.c -@@ -180,6 +180,7 @@ void __init rcu_init(void) - { - __rcu_init(); - } -+core_initcall(rcu_init); - - void rcu_scheduler_starting(void) - { -diff --git a/libdde-linux26/lib/src/Makefile b/libdde-linux26/lib/src/Makefile -index 358196b..450c4e6 100644 ---- a/libdde-linux26/lib/src/Makefile -+++ b/libdde-linux26/lib/src/Makefile -@@ -89,6 +89,8 @@ SRC_C_libdde-linux26.o.a += \ - kernel/kthread.c \ - kernel/mutex.c \ - kernel/notifier.c \ -+ kernel/rcupdate.c \ -+ kernel/rcuclassic.c \ - kernel/resource.c \ - kernel/rwsem.c \ - kernel/sched.c \ diff --git a/debian/patches/libdde_rculist.patch b/debian/patches/libdde_rculist.patch deleted file mode 100644 index 3c273a18..00000000 --- a/debian/patches/libdde_rculist.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/libdde-linux26/contrib/include/linux/netdevice.h b/libdde-linux26/contrib/include/linux/netdevice.h -index 6593667..bb4fca1 100644 ---- a/libdde-linux26/contrib/include/linux/netdevice.h -+++ b/libdde-linux26/contrib/include/linux/netdevice.h -@@ -37,6 +37,7 @@ - #include <asm/byteorder.h> - - #include <linux/device.h> -+#include <linux/rculist.h> - #include <linux/percpu.h> - #include <linux/dmaengine.h> - #include <linux/workqueue.h> diff --git a/debian/patches/libdde_rx_queue.patch b/debian/patches/libdde_rx_queue.patch deleted file mode 100644 index 6d880232..00000000 --- a/debian/patches/libdde_rx_queue.patch +++ /dev/null @@ -1,70 +0,0 @@ -commit d5a9e24afb4ab38110ebb777588ea0bd0eacbd0a -Author: David S. Miller <davem@davemloft.net> -Date: Tue Jan 27 16:22:11 2009 -0800 - - net: Allow RX queue selection to seed TX queue hashing. - - The idea is that drivers which implement multiqueue RX - pre-seed the SKB by recording the RX queue selected by - the hardware. - - If such a seed is found on TX, we'll use that to select - the outgoing TX queue. - - This helps get more consistent load balancing on router - and firewall loads. - - Signed-off-by: David S. Miller <davem@davemloft.net> - -Index: hurd-debian/libdde-linux26/contrib/include/linux/skbuff.h -=================================================================== ---- hurd-debian.orig/libdde-linux26/contrib/include/linux/skbuff.h 2012-04-16 00:34:56.000000000 +0000 -+++ hurd-debian/libdde-linux26/contrib/include/linux/skbuff.h 2012-04-16 00:35:11.000000000 +0000 -@@ -1903,6 +1903,21 @@ - to->queue_mapping = from->queue_mapping; - } - -+static inline void skb_record_rx_queue(struct sk_buff *skb, u16 rx_queue) -+{ -+ skb->queue_mapping = rx_queue + 1; -+} -+ -+static inline u16 skb_get_rx_queue(struct sk_buff *skb) -+{ -+ return skb->queue_mapping - 1; -+} -+ -+static inline bool skb_rx_queue_recorded(struct sk_buff *skb) -+{ -+ return (skb->queue_mapping != 0); -+} -+ - #ifdef CONFIG_XFRM - static inline struct sec_path *skb_sec_path(struct sk_buff *skb) - { -Index: hurd-debian/libdde-linux26/lib/src/net/core/dev.c -=================================================================== ---- hurd-debian.orig/libdde-linux26/lib/src/net/core/dev.c 2012-04-16 00:34:51.000000000 +0000 -+++ hurd-debian/libdde-linux26/lib/src/net/core/dev.c 2012-04-16 00:35:11.000000000 +0000 -@@ -1731,6 +1731,13 @@ - simple_tx_hashrnd_initialized = 1; - } - -+ if (skb_rx_queue_recorded(skb)) { -+ u32 val = skb_get_rx_queue(skb); -+ -+ hash = jhash_1word(val, simple_tx_hashrnd); -+ goto out; -+ } -+ - switch (skb->protocol) { - case htons(ETH_P_IP): - if (!(ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET))) -@@ -1768,6 +1775,7 @@ - - hash = jhash_3words(addr1, addr2, ports, simple_tx_hashrnd); - -+out: - return (u16) (((u64) hash * dev->real_num_tx_queues) >> 32); - } - diff --git a/debian/patches/libdde_trans_start.patch b/debian/patches/libdde_trans_start.patch deleted file mode 100644 index 9b0330a7..00000000 --- a/debian/patches/libdde_trans_start.patch +++ /dev/null @@ -1,138 +0,0 @@ -commit 9d21493b4beb8f918ba248032fefa393074a5e2b -Author: Eric Dumazet <dada1@cosmosbay.com> -Date: Sun May 17 20:55:16 2009 -0700 - - net: tx scalability works : trans_start - - struct net_device trans_start field is a hot spot on SMP and high performance - devices, particularly multi queues ones, because every transmitter dirties - it. Is main use is tx watchdog and bonding alive checks. - - But as most devices dont use NETIF_F_LLTX, we have to lock - a netdev_queue before calling their ndo_start_xmit(). So it makes - sense to move trans_start from net_device to netdev_queue. Its update - will occur on a already present (and in exclusive state) cache line, for - free. - - We can do this transition smoothly. An old driver continue to - update dev->trans_start, while an updated one updates txq->trans_start. - - Further patches could also put tx_bytes/tx_packets counters in - netdev_queue to avoid dirtying dev->stats (vlan device comes to mind) - - Signed-off-by: Eric Dumazet <dada1@cosmosbay.com> - Signed-off-by: David S. Miller <davem@davemloft.net> - -Index: hurd-debian/libdde-linux26/contrib/include/linux/netdevice.h -=================================================================== ---- hurd-debian.orig/libdde-linux26/contrib/include/linux/netdevice.h 2012-04-16 00:34:54.000000000 +0000 -+++ hurd-debian/libdde-linux26/contrib/include/linux/netdevice.h 2012-04-16 00:35:04.000000000 +0000 -@@ -462,6 +462,10 @@ - spinlock_t _xmit_lock; - int xmit_lock_owner; - struct Qdisc *qdisc_sleeping; -+ /* -+ * please use this field instead of dev->trans_start -+ */ -+ unsigned long trans_start; - } ____cacheline_aligned_in_smp; - - -@@ -801,6 +805,11 @@ - * One part is mostly used on xmit path (device) - */ - /* These may be needed for future network-power-down code. */ -+ -+ /* -+ * trans_start here is expensive for high speed devices on SMP, -+ * please use netdev_queue->trans_start instead. -+ */ - unsigned long trans_start; /* Time (in jiffies) of last Tx */ - - int watchdog_timeo; /* used by dev_watchdog() */ -@@ -1477,6 +1486,8 @@ - return !test_bit(__LINK_STATE_NOCARRIER, &dev->state); - } - -+extern unsigned long dev_trans_start(struct net_device *dev); -+ - extern void __netdev_watchdog_up(struct net_device *dev); - - extern void netif_carrier_on(struct net_device *dev); -Index: hurd-debian/libdde-linux26/lib/src/net/sched/sch_generic.c -=================================================================== ---- hurd-debian.orig/libdde-linux26/lib/src/net/sched/sch_generic.c 2012-04-16 00:26:38.000000000 +0000 -+++ hurd-debian/libdde-linux26/lib/src/net/sched/sch_generic.c 2012-04-16 00:35:04.000000000 +0000 -@@ -200,6 +200,21 @@ - clear_bit(__QDISC_STATE_RUNNING, &q->state); - } - -+unsigned long dev_trans_start(struct net_device *dev) -+{ -+ unsigned long val, res = dev->trans_start; -+ unsigned int i; -+ -+ for (i = 0; i < dev->num_tx_queues; i++) { -+ val = netdev_get_tx_queue(dev, i)->trans_start; -+ if (val && time_after(val, res)) -+ res = val; -+ } -+ dev->trans_start = res; -+ return res; -+} -+EXPORT_SYMBOL(dev_trans_start); -+ - static void dev_watchdog(unsigned long arg) - { - struct net_device *dev = (struct net_device *)arg; -@@ -209,25 +224,30 @@ - if (netif_device_present(dev) && - netif_running(dev) && - netif_carrier_ok(dev)) { -- int some_queue_stopped = 0; -+ int some_queue_timedout = 0; - unsigned int i; -+ unsigned long trans_start; - - for (i = 0; i < dev->num_tx_queues; i++) { - struct netdev_queue *txq; - - txq = netdev_get_tx_queue(dev, i); -- if (netif_tx_queue_stopped(txq)) { -- some_queue_stopped = 1; -+ /* -+ * old device drivers set dev->trans_start -+ */ -+ trans_start = txq->trans_start ? : dev->trans_start; -+ if (netif_tx_queue_stopped(txq) && -+ time_after(jiffies, (trans_start + -+ dev->watchdog_timeo))) { -+ some_queue_timedout = 1; - break; - } - } - -- if (some_queue_stopped && -- time_after(jiffies, (dev->trans_start + -- dev->watchdog_timeo))) { -+ if (some_queue_timedout) { - char drivername[64]; -- WARN_ONCE(1, KERN_INFO "NETDEV WATCHDOG: %s (%s): transmit timed out\n", -- dev->name, netdev_drivername(dev, drivername, 64)); -+ WARN_ONCE(1, KERN_INFO "NETDEV WATCHDOG: %s (%s): transmit queue %u timed out\n", -+ dev->name, netdev_drivername(dev, drivername, 64), i); - dev->netdev_ops->ndo_tx_timeout(dev); - } - if (!mod_timer(&dev->watchdog_timer, -@@ -612,8 +632,10 @@ - clear_bit(__QDISC_STATE_DEACTIVATED, &new_qdisc->state); - - rcu_assign_pointer(dev_queue->qdisc, new_qdisc); -- if (need_watchdog_p && new_qdisc != &noqueue_qdisc) -+ if (need_watchdog_p && new_qdisc != &noqueue_qdisc) { -+ dev_queue->trans_start = 0; - *need_watchdog_p = 1; -+ } - } - - void dev_activate(struct net_device *dev) diff --git a/debian/patches/libdde_ucast_list.patch b/debian/patches/libdde_ucast_list.patch deleted file mode 100644 index 85a30735..00000000 --- a/debian/patches/libdde_ucast_list.patch +++ /dev/null @@ -1,488 +0,0 @@ -commit ccffad25b5136958d4769ed6de5e87992dd9c65c -Author: Jiri Pirko <jpirko@redhat.com> -Date: Fri May 22 23:22:17 2009 +0000 - - net: convert unicast addr list - - This patch converts unicast address list to standard list_head using - previously introduced struct netdev_hw_addr. It also relaxes the - locking. Original spinlock (still used for multicast addresses) is not - needed and is no longer used for a protection of this list. All - reading and writing takes place under rtnl (with no changes). - - I also removed a possibility to specify the length of the address - while adding or deleting unicast address. It's always dev->addr_len. - - The convertion touched especially e1000 and ixgbe codes when the - change is not so trivial. - - Signed-off-by: Jiri Pirko <jpirko@redhat.com> - - drivers/net/bnx2.c | 13 +-- - drivers/net/e1000/e1000_main.c | 24 +++-- - drivers/net/ixgbe/ixgbe_common.c | 14 ++-- - drivers/net/ixgbe/ixgbe_common.h | 4 +- - drivers/net/ixgbe/ixgbe_main.c | 6 +- - drivers/net/ixgbe/ixgbe_type.h | 4 +- - drivers/net/macvlan.c | 11 +- - drivers/net/mv643xx_eth.c | 11 +- - drivers/net/niu.c | 7 +- - drivers/net/virtio_net.c | 7 +- - drivers/s390/net/qeth_l2_main.c | 6 +- - drivers/scsi/fcoe/fcoe.c | 16 ++-- - include/linux/netdevice.h | 18 ++-- - net/8021q/vlan.c | 4 +- - net/8021q/vlan_dev.c | 10 +- - net/core/dev.c | 195 +++++++++++++++++++++++++++----------- - net/dsa/slave.c | 10 +- - net/packet/af_packet.c | 4 +- - 18 files changed, 227 insertions(+), 137 deletions(-) - Signed-off-by: David S. Miller <davem@davemloft.net> - -Index: hurd-debian/libdde-linux26/contrib/include/linux/netdevice.h -=================================================================== ---- hurd-debian.orig/libdde-linux26/contrib/include/linux/netdevice.h 2012-04-16 00:34:43.000000000 +0000 -+++ hurd-debian/libdde-linux26/contrib/include/linux/netdevice.h 2012-04-16 00:34:46.000000000 +0000 -@@ -215,9 +215,12 @@ - struct list_head list; - unsigned char addr[MAX_ADDR_LEN]; - unsigned char type; --#define NETDEV_HW_ADDR_T_LAN 1 --#define NETDEV_HW_ADDR_T_SAN 2 --#define NETDEV_HW_ADDR_T_SLAVE 3 -+#define NETDEV_HW_ADDR_T_LAN 1 -+#define NETDEV_HW_ADDR_T_SAN 2 -+#define NETDEV_HW_ADDR_T_SLAVE 3 -+#define NETDEV_HW_ADDR_T_UNICAST 4 -+ int refcount; -+ bool synced; - struct rcu_head rcu_head; - }; - -@@ -738,10 +741,11 @@ - unsigned char addr_len; /* hardware address length */ - unsigned short dev_id; /* for shared network cards */ - -- spinlock_t addr_list_lock; -- struct dev_addr_list *uc_list; /* Secondary unicast mac addresses */ -+ struct list_head uc_list; /* Secondary unicast mac -+ addresses */ - int uc_count; /* Number of installed ucasts */ - int uc_promisc; -+ spinlock_t addr_list_lock; - struct dev_addr_list *mc_list; /* Multicast mac addresses */ - int mc_count; /* Number of installed mcasts */ - unsigned int promiscuity; -@@ -1816,8 +1820,8 @@ - /* Functions used for secondary unicast and multicast support */ - extern void dev_set_rx_mode(struct net_device *dev); - extern void __dev_set_rx_mode(struct net_device *dev); --extern int dev_unicast_delete(struct net_device *dev, void *addr, int alen); --extern int dev_unicast_add(struct net_device *dev, void *addr, int alen); -+extern int dev_unicast_delete(struct net_device *dev, void *addr); -+extern int dev_unicast_add(struct net_device *dev, void *addr); - extern int dev_unicast_sync(struct net_device *to, struct net_device *from); - extern void dev_unicast_unsync(struct net_device *to, struct net_device *from); - extern int dev_mc_delete(struct net_device *dev, void *addr, int alen, int all); -Index: hurd-debian/libdde-linux26/lib/src/net/core/dev.c -=================================================================== ---- hurd-debian.orig/libdde-linux26/lib/src/net/core/dev.c 2012-04-16 00:34:43.000000000 +0000 -+++ hurd-debian/libdde-linux26/lib/src/net/core/dev.c 2012-04-16 00:34:46.000000000 +0000 -@@ -3399,8 +3399,9 @@ - - /* hw addresses list handling functions */ - --static int __hw_addr_add(struct list_head *list, unsigned char *addr, -- int addr_len, unsigned char addr_type) -+static int __hw_addr_add(struct list_head *list, int *delta, -+ unsigned char *addr, int addr_len, -+ unsigned char addr_type) - { - struct netdev_hw_addr *ha; - int alloc_size; -@@ -3408,6 +3409,15 @@ - if (addr_len > MAX_ADDR_LEN) - return -EINVAL; - -+ list_for_each_entry(ha, list, list) { -+ if (!memcmp(ha->addr, addr, addr_len) && -+ ha->type == addr_type) { -+ ha->refcount++; -+ return 0; -+ } -+ } -+ -+ - alloc_size = sizeof(*ha); - if (alloc_size < L1_CACHE_BYTES) - alloc_size = L1_CACHE_BYTES; -@@ -3416,7 +3426,11 @@ - return -ENOMEM; - memcpy(ha->addr, addr, addr_len); - ha->type = addr_type; -+ ha->refcount = 1; -+ ha->synced = false; - list_add_tail_rcu(&ha->list, list); -+ if (delta) -+ (*delta)++; - return 0; - } - -@@ -3428,29 +3442,30 @@ - kfree(ha); - } - --static int __hw_addr_del_ii(struct list_head *list, unsigned char *addr, -- int addr_len, unsigned char addr_type, -- int ignore_index) -+static int __hw_addr_del(struct list_head *list, int *delta, -+ unsigned char *addr, int addr_len, -+ unsigned char addr_type) - { - struct netdev_hw_addr *ha; -- int i = 0; - - list_for_each_entry(ha, list, list) { -- if (i++ != ignore_index && -- !memcmp(ha->addr, addr, addr_len) && -+ if (!memcmp(ha->addr, addr, addr_len) && - (ha->type == addr_type || !addr_type)) { -+ if (--ha->refcount) -+ return 0; - list_del_rcu(&ha->list); - call_rcu(&ha->rcu_head, ha_rcu_free); -+ if (delta) -+ (*delta)--; - return 0; - } - } - return -ENOENT; - } - --static int __hw_addr_add_multiple_ii(struct list_head *to_list, -- struct list_head *from_list, -- int addr_len, unsigned char addr_type, -- int ignore_index) -+static int __hw_addr_add_multiple(struct list_head *to_list, int *to_delta, -+ struct list_head *from_list, int addr_len, -+ unsigned char addr_type) - { - int err; - struct netdev_hw_addr *ha, *ha2; -@@ -3458,7 +3473,8 @@ - - list_for_each_entry(ha, from_list, list) { - type = addr_type ? addr_type : ha->type; -- err = __hw_addr_add(to_list, ha->addr, addr_len, type); -+ err = __hw_addr_add(to_list, to_delta, ha->addr, -+ addr_len, type); - if (err) - goto unroll; - } -@@ -3469,27 +3485,69 @@ - if (ha2 == ha) - break; - type = addr_type ? addr_type : ha2->type; -- __hw_addr_del_ii(to_list, ha2->addr, addr_len, type, -- ignore_index); -+ __hw_addr_del(to_list, to_delta, ha2->addr, -+ addr_len, type); - } - return err; - } - --static void __hw_addr_del_multiple_ii(struct list_head *to_list, -- struct list_head *from_list, -- int addr_len, unsigned char addr_type, -- int ignore_index) -+static void __hw_addr_del_multiple(struct list_head *to_list, int *to_delta, -+ struct list_head *from_list, int addr_len, -+ unsigned char addr_type) - { - struct netdev_hw_addr *ha; - unsigned char type; - - list_for_each_entry(ha, from_list, list) { - type = addr_type ? addr_type : ha->type; -- __hw_addr_del_ii(to_list, ha->addr, addr_len, addr_type, -- ignore_index); -+ __hw_addr_del(to_list, to_delta, ha->addr, -+ addr_len, addr_type); - } - } - -+static int __hw_addr_sync(struct list_head *to_list, int *to_delta, -+ struct list_head *from_list, int *from_delta, -+ int addr_len) -+{ -+ int err = 0; -+ struct netdev_hw_addr *ha, *tmp; -+ -+ list_for_each_entry_safe(ha, tmp, from_list, list) { -+ if (!ha->synced) { -+ err = __hw_addr_add(to_list, to_delta, ha->addr, -+ addr_len, ha->type); -+ if (err) -+ break; -+ ha->synced = true; -+ ha->refcount++; -+ } else if (ha->refcount == 1) { -+ __hw_addr_del(to_list, to_delta, ha->addr, -+ addr_len, ha->type); -+ __hw_addr_del(from_list, from_delta, ha->addr, -+ addr_len, ha->type); -+ } -+ } -+ return err; -+} -+ -+static void __hw_addr_unsync(struct list_head *to_list, int *to_delta, -+ struct list_head *from_list, int *from_delta, -+ int addr_len) -+{ -+ struct netdev_hw_addr *ha, *tmp; -+ -+ list_for_each_entry_safe(ha, tmp, from_list, list) { -+ if (ha->synced) { -+ __hw_addr_del(to_list, to_delta, ha->addr, -+ addr_len, ha->type); -+ ha->synced = false; -+ __hw_addr_del(from_list, from_delta, ha->addr, -+ addr_len, ha->type); -+ } -+ } -+} -+ -+ - static void __hw_addr_flush(struct list_head *list) - { - struct netdev_hw_addr *ha, *tmp; -@@ -3520,7 +3578,7 @@ - - INIT_LIST_HEAD(&dev->dev_addr_list); - memset(addr, 0, sizeof(*addr)); -- err = __hw_addr_add(&dev->dev_addr_list, addr, sizeof(*addr), -+ err = __hw_addr_add(&dev->dev_addr_list, NULL, addr, sizeof(*addr), - NETDEV_HW_ADDR_T_LAN); - if (!err) { - /* -@@ -3552,7 +3610,7 @@ - - ASSERT_RTNL(); - -- err = __hw_addr_add(&dev->dev_addr_list, addr, dev->addr_len, -+ err = __hw_addr_add(&dev->dev_addr_list, NULL, addr, dev->addr_len, - addr_type); - if (!err) - call_netdevice_notifiers(NETDEV_CHANGEADDR, dev); -@@ -3575,11 +3633,20 @@ - unsigned char addr_type) - { - int err; -+ struct netdev_hw_addr *ha; - - ASSERT_RTNL(); - -- err = __hw_addr_del_ii(&dev->dev_addr_list, addr, dev->addr_len, -- addr_type, 0); -+ /* -+ * We can not remove the first address from the list because -+ * dev->dev_addr points to that. -+ */ -+ ha = list_first_entry(&dev->dev_addr_list, struct netdev_hw_addr, list); -+ if (ha->addr == dev->dev_addr && ha->refcount == 1) -+ return -ENOENT; -+ -+ err = __hw_addr_del(&dev->dev_addr_list, NULL, addr, dev->addr_len, -+ addr_type); - if (!err) - call_netdevice_notifiers(NETDEV_CHANGEADDR, dev); - return err; -@@ -3606,9 +3673,9 @@ - - if (from_dev->addr_len != to_dev->addr_len) - return -EINVAL; -- err = __hw_addr_add_multiple_ii(&to_dev->dev_addr_list, -- &from_dev->dev_addr_list, -- to_dev->addr_len, addr_type, 0); -+ err = __hw_addr_add_multiple(&to_dev->dev_addr_list, NULL, -+ &from_dev->dev_addr_list, -+ to_dev->addr_len, addr_type); - if (!err) - call_netdevice_notifiers(NETDEV_CHANGEADDR, to_dev); - return err; -@@ -3633,9 +3700,9 @@ - - if (from_dev->addr_len != to_dev->addr_len) - return -EINVAL; -- __hw_addr_del_multiple_ii(&to_dev->dev_addr_list, -- &from_dev->dev_addr_list, -- to_dev->addr_len, addr_type, 0); -+ __hw_addr_del_multiple(&to_dev->dev_addr_list, NULL, -+ &from_dev->dev_addr_list, -+ to_dev->addr_len, addr_type); - call_netdevice_notifiers(NETDEV_CHANGEADDR, to_dev); - return 0; - } -@@ -3705,24 +3772,22 @@ - * dev_unicast_delete - Release secondary unicast address. - * @dev: device - * @addr: address to delete -- * @alen: length of @addr - * - * Release reference to a secondary unicast address and remove it - * from the device if the reference count drops to zero. - * - * The caller must hold the rtnl_mutex. - */ --int dev_unicast_delete(struct net_device *dev, void *addr, int alen) -+int dev_unicast_delete(struct net_device *dev, void *addr) - { - int err; - - ASSERT_RTNL(); - -- netif_addr_lock_bh(dev); -- err = __dev_addr_delete(&dev->uc_list, &dev->uc_count, addr, alen, 0); -+ err = __hw_addr_del(&dev->uc_list, &dev->uc_count, addr, -+ dev->addr_len, NETDEV_HW_ADDR_T_UNICAST); - if (!err) - __dev_set_rx_mode(dev); -- netif_addr_unlock_bh(dev); - return err; - } - EXPORT_SYMBOL(dev_unicast_delete); -@@ -3731,24 +3796,22 @@ - * dev_unicast_add - add a secondary unicast address - * @dev: device - * @addr: address to add -- * @alen: length of @addr - * - * Add a secondary unicast address to the device or increase - * the reference count if it already exists. - * - * The caller must hold the rtnl_mutex. - */ --int dev_unicast_add(struct net_device *dev, void *addr, int alen) -+int dev_unicast_add(struct net_device *dev, void *addr) - { - int err; - - ASSERT_RTNL(); - -- netif_addr_lock_bh(dev); -- err = __dev_addr_add(&dev->uc_list, &dev->uc_count, addr, alen, 0); -+ err = __hw_addr_add(&dev->uc_list, &dev->uc_count, addr, -+ dev->addr_len, NETDEV_HW_ADDR_T_UNICAST); - if (!err) - __dev_set_rx_mode(dev); -- netif_addr_unlock_bh(dev); - return err; - } - EXPORT_SYMBOL(dev_unicast_add); -@@ -3805,8 +3868,7 @@ - * @from: source device - * - * Add newly added addresses to the destination device and release -- * addresses that have no users left. The source device must be -- * locked by netif_addr_lock_bh. -+ * addresses that have no users left. - * - * This function is intended to be called from the dev->set_rx_mode - * function of layered software devices. -@@ -3815,12 +3877,15 @@ - { - int err = 0; - -- netif_addr_lock_bh(to); -- err = __dev_addr_sync(&to->uc_list, &to->uc_count, -- &from->uc_list, &from->uc_count); -+ ASSERT_RTNL(); -+ -+ if (to->addr_len != from->addr_len) -+ return -EINVAL; -+ -+ err = __hw_addr_sync(&to->uc_list, &to->uc_count, -+ &from->uc_list, &from->uc_count, to->addr_len); - if (!err) - __dev_set_rx_mode(to); -- netif_addr_unlock_bh(to); - return err; - } - EXPORT_SYMBOL(dev_unicast_sync); -@@ -3836,18 +3901,33 @@ - */ - void dev_unicast_unsync(struct net_device *to, struct net_device *from) - { -- netif_addr_lock_bh(from); -- netif_addr_lock(to); -+ ASSERT_RTNL(); - -- __dev_addr_unsync(&to->uc_list, &to->uc_count, -- &from->uc_list, &from->uc_count); -- __dev_set_rx_mode(to); -+ if (to->addr_len != from->addr_len) -+ return; - -- netif_addr_unlock(to); -- netif_addr_unlock_bh(from); -+ __hw_addr_unsync(&to->uc_list, &to->uc_count, -+ &from->uc_list, &from->uc_count, to->addr_len); -+ __dev_set_rx_mode(to); - } - EXPORT_SYMBOL(dev_unicast_unsync); - -+static void dev_unicast_flush(struct net_device *dev) -+{ -+ /* rtnl_mutex must be held here */ -+ -+ __hw_addr_flush(&dev->uc_list); -+ dev->uc_count = 0; -+} -+ -+static void dev_unicast_init(struct net_device *dev) -+{ -+ /* rtnl_mutex must be held here */ -+ -+ INIT_LIST_HEAD(&dev->uc_list); -+} -+ -+ - static void __dev_addr_discard(struct dev_addr_list **list) - { - struct dev_addr_list *tmp; -@@ -3866,9 +3946,6 @@ - { - netif_addr_lock_bh(dev); - -- __dev_addr_discard(&dev->uc_list); -- dev->uc_count = 0; -- - __dev_addr_discard(&dev->mc_list); - dev->mc_count = 0; - -@@ -4459,6 +4536,7 @@ - /* - * Flush the unicast and multicast chains - */ -+ dev_unicast_flush(dev); - dev_addr_discard(dev); - - if (dev->netdev_ops->ndo_uninit) -@@ -4975,6 +5053,8 @@ - dev = (struct net_device *) - (((long)p + NETDEV_ALIGN_CONST) & ~NETDEV_ALIGN_CONST); - dev->padded = (char *)dev - (char *)p; -+ dev_unicast_init(dev); -+ - dev_net_set(dev, &init_net); - - dev->_tx = tx; -@@ -5173,6 +5253,7 @@ - /* - * Flush the unicast and multicast chains - */ -+ dev_unicast_flush(dev); - dev_addr_discard(dev); - - netdev_unregister_kobject(dev); diff --git a/debian/patches/libdde_workqueue.patch b/debian/patches/libdde_workqueue.patch deleted file mode 100644 index 35082e45..00000000 --- a/debian/patches/libdde_workqueue.patch +++ /dev/null @@ -1,55 +0,0 @@ -diff --git a/libdde-linux26/contrib/include/linux/workqueue.h b/libdde-linux26/contrib/include/linux/workqueue.h -index 3cd51e5..cf24c20 100644 ---- a/libdde-linux26/contrib/include/linux/workqueue.h -+++ b/libdde-linux26/contrib/include/linux/workqueue.h -@@ -41,6 +41,11 @@ struct delayed_work { - struct timer_list timer; - }; - -+static inline struct delayed_work *to_delayed_work(struct work_struct *work) -+{ -+ return container_of(work, struct delayed_work, work); -+} -+ - struct execute_work { - struct work_struct work; - }; -@@ -89,7 +94,7 @@ struct execute_work { - /* - * initialize all of a work item in one go - * -- * NOTE! No point in using "atomic_long_set()": useing a direct -+ * NOTE! No point in using "atomic_long_set()": using a direct - * assignment of the work data initializer allows the compiler - * to generate better code. - */ -@@ -202,6 +207,7 @@ - - extern void flush_workqueue(struct workqueue_struct *wq); - extern void flush_scheduled_work(void); -+extern void flush_delayed_work(struct delayed_work *work); - - extern int schedule_work(struct work_struct *work); - extern int schedule_work_on(int cpu, struct work_struct *work); -@@ -233,6 +239,21 @@ - if (ret) - work_clear_pending(&work->work); - return ret; -+} -+ -+/* -+ * Like above, but uses del_timer() instead of del_timer_sync(). This means, -+ * if it returns 0 the timer function may be running and the queueing is in -+ * progress. -+ */ -+static inline int __cancel_delayed_work(struct delayed_work *work) -+{ -+ int ret; -+ -+ ret = del_timer(&work->timer); -+ if (ret) -+ work_clear_pending(&work->work); -+ return ret; - } - - extern int cancel_delayed_work_sync(struct delayed_work *work); diff --git a/debian/patches/series b/debian/patches/series index 829913bf..f245822c 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,42 +1,25 @@ -mach-defpager-dl.patch -libexec.patch - diskfs_no_inherit_dir_group.patch +init_try_runsystem.gnu.patch makedev.diff +rc.patch startup-usr-support.patch tmp_exec_startup.patch uptime_w_path_fix.patch stat_round.patch - external.patch - console_ignore_bdf_err.patch posix-sigcodes.patch random-default-fast.patch - - -libdde_netdev_tx_t.patch -libdde_pci-needs_freset.patch -libdde_addr_list.patch -libdde_ucast_list.patch -libdde_addr_fix.patch -libdde_group_addr.patch -libdde_rculist.patch -libdde_dma_head.patch -libdde_mdio.patch -libdde_ethoc.patch -libdde_phy.patch -libdde_pci_ids.h.patch -libdde_ethtool.patch -libdde_workqueue.patch -libdde_trans_start.patch -libdde_devres.patch -libdde_pr_cont.patch -libdde_rx_queue.patch -libdde_rcu.patch +libexec.patch +run.patch mount.patch -format +MAKEDEV-apm.patch +term-for-tcl.patch +newRPC.patch +dl_origin.patch +mach-defpager-dl.patch +format #trans-crash-add-verbose.patch @@ -78,10 +61,3 @@ introspection0012-fixup_libintrospection.patch ihash-as-cache0001-libihash-add-hurd_ihash_value_valid.patch ihash-as-cache0002-libihash-optimize-lookup-or-insert-operations.patch ihash-as-cache0003-libihash-prefer-performance-degradation-over-failure.patch -dl_origin.patch -init_try_runsystem.gnu.patch -newRPC.patch -rc.patch -run.patch -term-for-tcl.patch -MAKEDEV-apm.patch |