Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
Linus Torvalds [Thu, 26 Oct 2006 14:44:41 +0000 (07:44 -0700)]
* master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6:
  [SPARC64]: Fix memory corruption in pci_4u_free_consistent().
  [SPARC64]: Fix central/FHC bus handling on Ex000 systems.

drivers/net/e100.c
drivers/net/e1000/e1000_ethtool.c
drivers/net/e1000/e1000_hw.h
drivers/net/e1000/e1000_main.c
net/bridge/br_sysfs_br.c
net/ipv4/tcp_cubic.c
net/ipv4/tcp_htcp.c

index a3a08a5..19ab344 100644 (file)
@@ -2719,7 +2719,10 @@ static int e100_suspend(struct pci_dev *pdev, pm_message_t state)
        struct net_device *netdev = pci_get_drvdata(pdev);
        struct nic *nic = netdev_priv(netdev);
 
-       netif_poll_disable(nic->netdev);
+#ifdef CONFIG_E100_NAPI
+       if (netif_running(netdev))
+               netif_poll_disable(nic->netdev);
+#endif
        del_timer_sync(&nic->watchdog);
        netif_carrier_off(nic->netdev);
 
@@ -2763,7 +2766,10 @@ static void e100_shutdown(struct pci_dev *pdev)
        struct net_device *netdev = pci_get_drvdata(pdev);
        struct nic *nic = netdev_priv(netdev);
 
-       netif_poll_disable(nic->netdev);
+#ifdef CONFIG_E100_NAPI
+       if (netif_running(netdev))
+               netif_poll_disable(nic->netdev);
+#endif
        del_timer_sync(&nic->watchdog);
        netif_carrier_off(nic->netdev);
 
index 773821e..c564adb 100644 (file)
@@ -461,7 +461,8 @@ e1000_get_regs(struct net_device *netdev,
        regs_buff[24] = (uint32_t)phy_data;  /* phy local receiver status */
        regs_buff[25] = regs_buff[24];  /* phy remote receiver status */
        if (hw->mac_type >= e1000_82540 &&
-          hw->media_type == e1000_media_type_copper) {
+           hw->mac_type < e1000_82571 &&
+           hw->media_type == e1000_media_type_copper) {
                regs_buff[26] = E1000_READ_REG(hw, MANC);
        }
 }
@@ -1690,6 +1691,7 @@ static int e1000_wol_exclusion(struct e1000_adapter *adapter, struct ethtool_wol
        int retval = 1; /* fail by default */
 
        switch (hw->device_id) {
+       case E1000_DEV_ID_82542:
        case E1000_DEV_ID_82543GC_FIBER:
        case E1000_DEV_ID_82543GC_COPPER:
        case E1000_DEV_ID_82544EI_FIBER:
index 112447f..449a603 100644 (file)
@@ -1961,9 +1961,9 @@ struct e1000_hw {
 #define E1000_RXDCTL_GRAN    0x01000000 /* RXDCTL Granularity */
 
 /* Transmit Descriptor Control */
-#define E1000_TXDCTL_PTHRESH 0x000000FF /* TXDCTL Prefetch Threshold */
-#define E1000_TXDCTL_HTHRESH 0x0000FF00 /* TXDCTL Host Threshold */
-#define E1000_TXDCTL_WTHRESH 0x00FF0000 /* TXDCTL Writeback Threshold */
+#define E1000_TXDCTL_PTHRESH 0x0000003F /* TXDCTL Prefetch Threshold */
+#define E1000_TXDCTL_HTHRESH 0x00003F00 /* TXDCTL Host Threshold */
+#define E1000_TXDCTL_WTHRESH 0x003F0000 /* TXDCTL Writeback Threshold */
 #define E1000_TXDCTL_GRAN    0x01000000 /* TXDCTL Granularity */
 #define E1000_TXDCTL_LWTHRESH 0xFE000000 /* TXDCTL Low Threshold */
 #define E1000_TXDCTL_FULL_TX_DESC_WB 0x01010000 /* GRAN=1, WTHRESH=1 */
index fa84983..8d04752 100644 (file)
@@ -35,7 +35,7 @@ static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
 #else
 #define DRIVERNAPI "-NAPI"
 #endif
-#define DRV_VERSION "7.2.9-k2"DRIVERNAPI
+#define DRV_VERSION "7.2.9-k4"DRIVERNAPI
 char e1000_driver_version[] = DRV_VERSION;
 static char e1000_copyright[] = "Copyright (c) 1999-2006 Intel Corporation.";
 
@@ -699,7 +699,10 @@ e1000_reset(struct e1000_adapter *adapter)
                                    phy_data);
        }
 
-       if ((adapter->en_mng_pt) && (adapter->hw.mac_type < e1000_82571)) {
+       if ((adapter->en_mng_pt) &&
+           (adapter->hw.mac_type >= e1000_82540) &&
+           (adapter->hw.mac_type < e1000_82571) &&
+           (adapter->hw.media_type == e1000_media_type_copper)) {
                manc = E1000_READ_REG(&adapter->hw, MANC);
                manc |= (E1000_MANC_ARP_EN | E1000_MANC_EN_MNG2HOST);
                E1000_WRITE_REG(&adapter->hw, MANC, manc);
@@ -1076,8 +1079,9 @@ e1000_remove(struct pci_dev *pdev)
 
        flush_scheduled_work();
 
-       if (adapter->hw.mac_type < e1000_82571 &&
-          adapter->hw.media_type == e1000_media_type_copper) {
+       if (adapter->hw.mac_type >= e1000_82540 &&
+           adapter->hw.mac_type < e1000_82571 &&
+           adapter->hw.media_type == e1000_media_type_copper) {
                manc = E1000_READ_REG(&adapter->hw, MANC);
                if (manc & E1000_MANC_SMBUS_EN) {
                        manc |= E1000_MANC_ARP_EN;
@@ -1804,9 +1808,11 @@ e1000_setup_rctl(struct e1000_adapter *adapter)
         * followed by the page buffers.  Therefore, skb->data is
         * sized to hold the largest protocol header.
         */
+       /* allocations using alloc_page take too long for regular MTU
+        * so only enable packet split for jumbo frames */
        pages = PAGE_USE_COUNT(adapter->netdev->mtu);
-       if ((adapter->hw.mac_type > e1000_82547_rev_2) && (pages <= 3) &&
-           PAGE_SIZE <= 16384)
+       if ((adapter->hw.mac_type >= e1000_82571) && (pages <= 3) &&
+           PAGE_SIZE <= 16384 && (rctl & E1000_RCTL_LPE))
                adapter->rx_ps_pages = pages;
        else
                adapter->rx_ps_pages = 0;
@@ -2986,6 +2992,11 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
                return NETDEV_TX_OK;
        }
 
+       /* 82571 and newer doesn't need the workaround that limited descriptor
+        * length to 4kB */
+       if (adapter->hw.mac_type >= e1000_82571)
+               max_per_txd = 8192;
+
 #ifdef NETIF_F_TSO
        mss = skb_shinfo(skb)->gso_size;
        /* The controller does a simple calculation to
@@ -3775,9 +3786,6 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter,
 
                length = le16_to_cpu(rx_desc->length);
 
-               /* adjust length to remove Ethernet CRC */
-               length -= 4;
-
                if (unlikely(!(status & E1000_RXD_STAT_EOP))) {
                        /* All receives must fit into a single buffer */
                        E1000_DBG("%s: Receive packet consumed multiple"
@@ -3805,6 +3813,10 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter,
                        }
                }
 
+               /* adjust length to remove Ethernet CRC, this must be
+                * done after the TBI_ACCEPT workaround above */
+               length -= 4;
+
                /* code added for copybreak, this should improve
                 * performance for small packets with large amounts
                 * of reassembly being done in the stack */
@@ -4773,8 +4785,9 @@ e1000_suspend(struct pci_dev *pdev, pm_message_t state)
                pci_enable_wake(pdev, PCI_D3cold, 0);
        }
 
-       if (adapter->hw.mac_type < e1000_82571 &&
-          adapter->hw.media_type == e1000_media_type_copper) {
+       if (adapter->hw.mac_type >= e1000_82540 &&
+           adapter->hw.mac_type < e1000_82571 &&
+           adapter->hw.media_type == e1000_media_type_copper) {
                manc = E1000_READ_REG(&adapter->hw, MANC);
                if (manc & E1000_MANC_SMBUS_EN) {
                        manc |= E1000_MANC_ARP_EN;
@@ -4825,8 +4838,9 @@ e1000_resume(struct pci_dev *pdev)
 
        netif_device_attach(netdev);
 
-       if (adapter->hw.mac_type < e1000_82571 &&
-          adapter->hw.media_type == e1000_media_type_copper) {
+       if (adapter->hw.mac_type >= e1000_82540 &&
+           adapter->hw.mac_type < e1000_82571 &&
+           adapter->hw.media_type == e1000_media_type_copper) {
                manc = E1000_READ_REG(&adapter->hw, MANC);
                manc &= ~(E1000_MANC_ARP_EN);
                E1000_WRITE_REG(&adapter->hw, MANC, manc);
@@ -4944,6 +4958,7 @@ static void e1000_io_resume(struct pci_dev *pdev)
        netif_device_attach(netdev);
 
        if (adapter->hw.mac_type >= e1000_82540 &&
+           adapter->hw.mac_type < e1000_82571 &&
            adapter->hw.media_type == e1000_media_type_copper) {
                manc = E1000_READ_REG(&adapter->hw, MANC);
                manc &= ~(E1000_MANC_ARP_EN);
index 96bcb2f..de9d1a9 100644 (file)
@@ -376,7 +376,7 @@ int br_sysfs_addbr(struct net_device *dev)
 
        err = sysfs_create_bin_file(brobj, &bridge_forward);
        if (err) {
-               pr_info("%s: can't create attribue file %s/%s\n",
+               pr_info("%s: can't create attribute file %s/%s\n",
                        __FUNCTION__, dev->name, bridge_forward.attr.name);
                goto out2;
        }
index a60ef38..6ad1848 100644 (file)
@@ -190,7 +190,7 @@ static inline void bictcp_update(struct bictcp *ca, u32 cwnd)
          */
 
        /* change the unit from HZ to bictcp_HZ */
-        t = ((tcp_time_stamp + ca->delay_min - ca->epoch_start)
+        t = ((tcp_time_stamp + (ca->delay_min>>3) - ca->epoch_start)
             << BICTCP_HZ) / HZ;
 
         if (t < ca->bic_K)             /* t - K */
@@ -259,7 +259,7 @@ static inline void measure_delay(struct sock *sk)
            (s32)(tcp_time_stamp - ca->epoch_start) < HZ)
                return;
 
-       delay = tcp_time_stamp - tp->rx_opt.rcv_tsecr;
+       delay = (tcp_time_stamp - tp->rx_opt.rcv_tsecr)<<3;
        if (delay == 0)
                delay = 1;
 
@@ -366,7 +366,7 @@ static int __init cubictcp_register(void)
 
        beta_scale = 8*(BICTCP_BETA_SCALE+beta)/ 3 / (BICTCP_BETA_SCALE - beta);
 
-       cube_rtt_scale = (bic_scale << 3) / 10; /* 1024*c/rtt */
+       cube_rtt_scale = (bic_scale * 10);      /* 1024*c/rtt */
 
        /* calculate the "K" for (wmax-cwnd) = c/rtt * K^3
         *  so K = cubic_root( (wmax-cwnd)*rtt/c )
index 682e7d5..283be3c 100644 (file)
@@ -23,7 +23,7 @@ module_param(use_bandwidth_switch, int, 0644);
 MODULE_PARM_DESC(use_bandwidth_switch, "turn on/off bandwidth switcher");
 
 struct htcp {
-       u16     alpha;          /* Fixed point arith, << 7 */
+       u32     alpha;          /* Fixed point arith, << 7 */
        u8      beta;           /* Fixed point arith, << 7 */
        u8      modeswitch;     /* Delay modeswitch until we had at least one congestion event */
        u32     last_cong;      /* Time since last congestion event end */