Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: sunrpc: fix rdma dependencies e1000: Fix PCI enable to honor the need_ioport flag sgi-xp: link XPNET's net_device_ops to its net_device structure pcnet_cs: Fix misuse of the equality operator. hso: add new device id's dca: redesign locks to fix deadlocks cassini/sungem: limit reaches -1, but 0 tested net: variables reach -1, but 0 tested qlge: bugfix: Add missing netif_napi_del call. qlge: bugfix: Add flash offset for second port. qlge: bugfix: Fix endian issue when reading flash. udp: increments sk_drops in __udp_queue_rcv_skb() net: Fix userland breakage wrt. linux/if_tunnel.h net: packet socket packet_lookup_frame fix
This commit is contained in:
commit
25431e900d
|
@ -28,7 +28,7 @@
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/dca.h>
|
#include <linux/dca.h>
|
||||||
|
|
||||||
#define DCA_VERSION "1.4"
|
#define DCA_VERSION "1.8"
|
||||||
|
|
||||||
MODULE_VERSION(DCA_VERSION);
|
MODULE_VERSION(DCA_VERSION);
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
@ -60,16 +60,17 @@ int dca_add_requester(struct device *dev)
|
||||||
{
|
{
|
||||||
struct dca_provider *dca;
|
struct dca_provider *dca;
|
||||||
int err, slot = -ENODEV;
|
int err, slot = -ENODEV;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
spin_lock(&dca_lock);
|
spin_lock_irqsave(&dca_lock, flags);
|
||||||
|
|
||||||
/* check if the requester has not been added already */
|
/* check if the requester has not been added already */
|
||||||
dca = dca_find_provider_by_dev(dev);
|
dca = dca_find_provider_by_dev(dev);
|
||||||
if (dca) {
|
if (dca) {
|
||||||
spin_unlock(&dca_lock);
|
spin_unlock_irqrestore(&dca_lock, flags);
|
||||||
return -EEXIST;
|
return -EEXIST;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,19 +79,21 @@ int dca_add_requester(struct device *dev)
|
||||||
if (slot >= 0)
|
if (slot >= 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (slot < 0) {
|
|
||||||
spin_unlock(&dca_lock);
|
spin_unlock_irqrestore(&dca_lock, flags);
|
||||||
|
|
||||||
|
if (slot < 0)
|
||||||
return slot;
|
return slot;
|
||||||
}
|
|
||||||
|
|
||||||
err = dca_sysfs_add_req(dca, dev, slot);
|
err = dca_sysfs_add_req(dca, dev, slot);
|
||||||
if (err) {
|
if (err) {
|
||||||
dca->ops->remove_requester(dca, dev);
|
spin_lock_irqsave(&dca_lock, flags);
|
||||||
spin_unlock(&dca_lock);
|
if (dca == dca_find_provider_by_dev(dev))
|
||||||
|
dca->ops->remove_requester(dca, dev);
|
||||||
|
spin_unlock_irqrestore(&dca_lock, flags);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_unlock(&dca_lock);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(dca_add_requester);
|
EXPORT_SYMBOL_GPL(dca_add_requester);
|
||||||
|
@ -103,25 +106,25 @@ int dca_remove_requester(struct device *dev)
|
||||||
{
|
{
|
||||||
struct dca_provider *dca;
|
struct dca_provider *dca;
|
||||||
int slot;
|
int slot;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
spin_lock(&dca_lock);
|
spin_lock_irqsave(&dca_lock, flags);
|
||||||
dca = dca_find_provider_by_dev(dev);
|
dca = dca_find_provider_by_dev(dev);
|
||||||
if (!dca) {
|
if (!dca) {
|
||||||
spin_unlock(&dca_lock);
|
spin_unlock_irqrestore(&dca_lock, flags);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
slot = dca->ops->remove_requester(dca, dev);
|
slot = dca->ops->remove_requester(dca, dev);
|
||||||
if (slot < 0) {
|
spin_unlock_irqrestore(&dca_lock, flags);
|
||||||
spin_unlock(&dca_lock);
|
|
||||||
|
if (slot < 0)
|
||||||
return slot;
|
return slot;
|
||||||
}
|
|
||||||
|
|
||||||
dca_sysfs_remove_req(dca, slot);
|
dca_sysfs_remove_req(dca, slot);
|
||||||
|
|
||||||
spin_unlock(&dca_lock);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(dca_remove_requester);
|
EXPORT_SYMBOL_GPL(dca_remove_requester);
|
||||||
|
@ -135,17 +138,18 @@ u8 dca_common_get_tag(struct device *dev, int cpu)
|
||||||
{
|
{
|
||||||
struct dca_provider *dca;
|
struct dca_provider *dca;
|
||||||
u8 tag;
|
u8 tag;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
spin_lock(&dca_lock);
|
spin_lock_irqsave(&dca_lock, flags);
|
||||||
|
|
||||||
dca = dca_find_provider_by_dev(dev);
|
dca = dca_find_provider_by_dev(dev);
|
||||||
if (!dca) {
|
if (!dca) {
|
||||||
spin_unlock(&dca_lock);
|
spin_unlock_irqrestore(&dca_lock, flags);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
tag = dca->ops->get_tag(dca, dev, cpu);
|
tag = dca->ops->get_tag(dca, dev, cpu);
|
||||||
|
|
||||||
spin_unlock(&dca_lock);
|
spin_unlock_irqrestore(&dca_lock, flags);
|
||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,11 +221,16 @@ static BLOCKING_NOTIFIER_HEAD(dca_provider_chain);
|
||||||
int register_dca_provider(struct dca_provider *dca, struct device *dev)
|
int register_dca_provider(struct dca_provider *dca, struct device *dev)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
err = dca_sysfs_add_provider(dca, dev);
|
err = dca_sysfs_add_provider(dca, dev);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&dca_lock, flags);
|
||||||
list_add(&dca->node, &dca_providers);
|
list_add(&dca->node, &dca_providers);
|
||||||
|
spin_unlock_irqrestore(&dca_lock, flags);
|
||||||
|
|
||||||
blocking_notifier_call_chain(&dca_provider_chain,
|
blocking_notifier_call_chain(&dca_provider_chain,
|
||||||
DCA_PROVIDER_ADD, NULL);
|
DCA_PROVIDER_ADD, NULL);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -234,9 +243,15 @@ EXPORT_SYMBOL_GPL(register_dca_provider);
|
||||||
*/
|
*/
|
||||||
void unregister_dca_provider(struct dca_provider *dca)
|
void unregister_dca_provider(struct dca_provider *dca)
|
||||||
{
|
{
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
blocking_notifier_call_chain(&dca_provider_chain,
|
blocking_notifier_call_chain(&dca_provider_chain,
|
||||||
DCA_PROVIDER_REMOVE, NULL);
|
DCA_PROVIDER_REMOVE, NULL);
|
||||||
|
|
||||||
|
spin_lock_irqsave(&dca_lock, flags);
|
||||||
list_del(&dca->node);
|
list_del(&dca->node);
|
||||||
|
spin_unlock_irqrestore(&dca_lock, flags);
|
||||||
|
|
||||||
dca_sysfs_remove_provider(dca);
|
dca_sysfs_remove_provider(dca);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(unregister_dca_provider);
|
EXPORT_SYMBOL_GPL(unregister_dca_provider);
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* License. See the file "COPYING" in the main directory of this archive
|
* License. See the file "COPYING" in the main directory of this archive
|
||||||
* for more details.
|
* for more details.
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999-2008 Silicon Graphics, Inc. All rights reserved.
|
* Copyright (C) 1999-2009 Silicon Graphics, Inc. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -551,6 +551,7 @@ xpnet_init(void)
|
||||||
|
|
||||||
netif_carrier_off(xpnet_device);
|
netif_carrier_off(xpnet_device);
|
||||||
|
|
||||||
|
xpnet_device->netdev_ops = &xpnet_netdev_ops;
|
||||||
xpnet_device->mtu = XPNET_DEF_MTU;
|
xpnet_device->mtu = XPNET_DEF_MTU;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -806,7 +806,7 @@ static int cas_reset_mii_phy(struct cas *cp)
|
||||||
|
|
||||||
cas_phy_write(cp, MII_BMCR, BMCR_RESET);
|
cas_phy_write(cp, MII_BMCR, BMCR_RESET);
|
||||||
udelay(100);
|
udelay(100);
|
||||||
while (limit--) {
|
while (--limit) {
|
||||||
val = cas_phy_read(cp, MII_BMCR);
|
val = cas_phy_read(cp, MII_BMCR);
|
||||||
if ((val & BMCR_RESET) == 0)
|
if ((val & BMCR_RESET) == 0)
|
||||||
break;
|
break;
|
||||||
|
@ -979,7 +979,7 @@ static void cas_phy_init(struct cas *cp)
|
||||||
writel(val, cp->regs + REG_PCS_MII_CTRL);
|
writel(val, cp->regs + REG_PCS_MII_CTRL);
|
||||||
|
|
||||||
limit = STOP_TRIES;
|
limit = STOP_TRIES;
|
||||||
while (limit-- > 0) {
|
while (--limit > 0) {
|
||||||
udelay(10);
|
udelay(10);
|
||||||
if ((readl(cp->regs + REG_PCS_MII_CTRL) &
|
if ((readl(cp->regs + REG_PCS_MII_CTRL) &
|
||||||
PCS_MII_RESET) == 0)
|
PCS_MII_RESET) == 0)
|
||||||
|
|
|
@ -940,7 +940,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
|
||||||
err = pci_enable_device(pdev);
|
err = pci_enable_device(pdev);
|
||||||
} else {
|
} else {
|
||||||
bars = pci_select_bars(pdev, IORESOURCE_MEM);
|
bars = pci_select_bars(pdev, IORESOURCE_MEM);
|
||||||
err = pci_enable_device(pdev);
|
err = pci_enable_device_mem(pdev);
|
||||||
}
|
}
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
|
@ -60,7 +60,7 @@ int emac_mii_reset_phy(struct mii_phy *phy)
|
||||||
|
|
||||||
udelay(300);
|
udelay(300);
|
||||||
|
|
||||||
while (limit--) {
|
while (--limit) {
|
||||||
val = phy_read(phy, MII_BMCR);
|
val = phy_read(phy, MII_BMCR);
|
||||||
if (val >= 0 && (val & BMCR_RESET) == 0)
|
if (val >= 0 && (val & BMCR_RESET) == 0)
|
||||||
break;
|
break;
|
||||||
|
@ -84,7 +84,7 @@ int emac_mii_reset_gpcs(struct mii_phy *phy)
|
||||||
|
|
||||||
udelay(300);
|
udelay(300);
|
||||||
|
|
||||||
while (limit--) {
|
while (--limit) {
|
||||||
val = gpcs_phy_read(phy, MII_BMCR);
|
val = gpcs_phy_read(phy, MII_BMCR);
|
||||||
if (val >= 0 && (val & BMCR_RESET) == 0)
|
if (val >= 0 && (val & BMCR_RESET) == 0)
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -586,7 +586,7 @@ static int pcnet_config(struct pcmcia_device *link)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((link->conf.ConfigBase == 0x03c0)
|
if ((link->conf.ConfigBase == 0x03c0)
|
||||||
&& (link->manf_id == 0x149) && (link->card_id = 0xc1ab)) {
|
&& (link->manf_id == 0x149) && (link->card_id == 0xc1ab)) {
|
||||||
printk(KERN_INFO "pcnet_cs: this is an AX88190 card!\n");
|
printk(KERN_INFO "pcnet_cs: this is an AX88190 card!\n");
|
||||||
printk(KERN_INFO "pcnet_cs: use axnet_cs instead.\n");
|
printk(KERN_INFO "pcnet_cs: use axnet_cs instead.\n");
|
||||||
goto failed;
|
goto failed;
|
||||||
|
|
|
@ -787,12 +787,12 @@ struct mbox_params {
|
||||||
|
|
||||||
struct flash_params {
|
struct flash_params {
|
||||||
u8 dev_id_str[4];
|
u8 dev_id_str[4];
|
||||||
u16 size;
|
__le16 size;
|
||||||
u16 csum;
|
__le16 csum;
|
||||||
u16 ver;
|
__le16 ver;
|
||||||
u16 sub_dev_id;
|
__le16 sub_dev_id;
|
||||||
u8 mac_addr[6];
|
u8 mac_addr[6];
|
||||||
u16 res;
|
__le16 res;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -641,7 +641,7 @@ static void ql_enable_all_completion_interrupts(struct ql_adapter *qdev)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ql_read_flash_word(struct ql_adapter *qdev, int offset, u32 *data)
|
static int ql_read_flash_word(struct ql_adapter *qdev, int offset, __le32 *data)
|
||||||
{
|
{
|
||||||
int status = 0;
|
int status = 0;
|
||||||
/* wait for reg to come ready */
|
/* wait for reg to come ready */
|
||||||
|
@ -656,8 +656,11 @@ static int ql_read_flash_word(struct ql_adapter *qdev, int offset, u32 *data)
|
||||||
FLASH_ADDR, FLASH_ADDR_RDY, FLASH_ADDR_ERR);
|
FLASH_ADDR, FLASH_ADDR_RDY, FLASH_ADDR_ERR);
|
||||||
if (status)
|
if (status)
|
||||||
goto exit;
|
goto exit;
|
||||||
/* get the data */
|
/* This data is stored on flash as an array of
|
||||||
*data = ql_read32(qdev, FLASH_DATA);
|
* __le32. Since ql_read32() returns cpu endian
|
||||||
|
* we need to swap it back.
|
||||||
|
*/
|
||||||
|
*data = cpu_to_le32(ql_read32(qdev, FLASH_DATA));
|
||||||
exit:
|
exit:
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
@ -666,13 +669,20 @@ static int ql_get_flash_params(struct ql_adapter *qdev)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int status;
|
int status;
|
||||||
u32 *p = (u32 *)&qdev->flash;
|
__le32 *p = (__le32 *)&qdev->flash;
|
||||||
|
u32 offset = 0;
|
||||||
|
|
||||||
|
/* Second function's parameters follow the first
|
||||||
|
* function's.
|
||||||
|
*/
|
||||||
|
if (qdev->func)
|
||||||
|
offset = sizeof(qdev->flash) / sizeof(u32);
|
||||||
|
|
||||||
if (ql_sem_spinlock(qdev, SEM_FLASH_MASK))
|
if (ql_sem_spinlock(qdev, SEM_FLASH_MASK))
|
||||||
return -ETIMEDOUT;
|
return -ETIMEDOUT;
|
||||||
|
|
||||||
for (i = 0; i < sizeof(qdev->flash) / sizeof(u32); i++, p++) {
|
for (i = 0; i < sizeof(qdev->flash) / sizeof(u32); i++, p++) {
|
||||||
status = ql_read_flash_word(qdev, i, p);
|
status = ql_read_flash_word(qdev, i+offset, p);
|
||||||
if (status) {
|
if (status) {
|
||||||
QPRINTK(qdev, IFUP, ERR, "Error reading flash.\n");
|
QPRINTK(qdev, IFUP, ERR, "Error reading flash.\n");
|
||||||
goto exit;
|
goto exit;
|
||||||
|
@ -3826,7 +3836,7 @@ static int qlge_suspend(struct pci_dev *pdev, pm_message_t state)
|
||||||
{
|
{
|
||||||
struct net_device *ndev = pci_get_drvdata(pdev);
|
struct net_device *ndev = pci_get_drvdata(pdev);
|
||||||
struct ql_adapter *qdev = netdev_priv(ndev);
|
struct ql_adapter *qdev = netdev_priv(ndev);
|
||||||
int err;
|
int err, i;
|
||||||
|
|
||||||
netif_device_detach(ndev);
|
netif_device_detach(ndev);
|
||||||
|
|
||||||
|
@ -3836,6 +3846,9 @@ static int qlge_suspend(struct pci_dev *pdev, pm_message_t state)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (i = qdev->rss_ring_first_cq_id; i < qdev->rx_ring_count; i++)
|
||||||
|
netif_napi_del(&qdev->rx_ring[i].napi);
|
||||||
|
|
||||||
err = pci_save_state(pdev);
|
err = pci_save_state(pdev);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
|
@ -220,9 +220,9 @@ static void smc911x_reset(struct net_device *dev)
|
||||||
|
|
||||||
/* make sure EEPROM has finished loading before setting GPIO_CFG */
|
/* make sure EEPROM has finished loading before setting GPIO_CFG */
|
||||||
timeout=1000;
|
timeout=1000;
|
||||||
while ( timeout-- && (SMC_GET_E2P_CMD(lp) & E2P_CMD_EPC_BUSY_)) {
|
while (--timeout && (SMC_GET_E2P_CMD(lp) & E2P_CMD_EPC_BUSY_))
|
||||||
udelay(10);
|
udelay(10);
|
||||||
}
|
|
||||||
if (timeout == 0){
|
if (timeout == 0){
|
||||||
PRINTK("%s: smc911x_reset timeout waiting for EEPROM busy\n", dev->name);
|
PRINTK("%s: smc911x_reset timeout waiting for EEPROM busy\n", dev->name);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -498,7 +498,7 @@ static void smsc9420_check_mac_address(struct net_device *dev)
|
||||||
static void smsc9420_stop_tx(struct smsc9420_pdata *pd)
|
static void smsc9420_stop_tx(struct smsc9420_pdata *pd)
|
||||||
{
|
{
|
||||||
u32 dmac_control, mac_cr, dma_intr_ena;
|
u32 dmac_control, mac_cr, dma_intr_ena;
|
||||||
int timeOut = 1000;
|
int timeout = 1000;
|
||||||
|
|
||||||
/* disable TX DMAC */
|
/* disable TX DMAC */
|
||||||
dmac_control = smsc9420_reg_read(pd, DMAC_CONTROL);
|
dmac_control = smsc9420_reg_read(pd, DMAC_CONTROL);
|
||||||
|
@ -506,13 +506,13 @@ static void smsc9420_stop_tx(struct smsc9420_pdata *pd)
|
||||||
smsc9420_reg_write(pd, DMAC_CONTROL, dmac_control);
|
smsc9420_reg_write(pd, DMAC_CONTROL, dmac_control);
|
||||||
|
|
||||||
/* Wait max 10ms for transmit process to stop */
|
/* Wait max 10ms for transmit process to stop */
|
||||||
while (timeOut--) {
|
while (--timeout) {
|
||||||
if (smsc9420_reg_read(pd, DMAC_STATUS) & DMAC_STS_TS_)
|
if (smsc9420_reg_read(pd, DMAC_STATUS) & DMAC_STS_TS_)
|
||||||
break;
|
break;
|
||||||
udelay(10);
|
udelay(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!timeOut)
|
if (!timeout)
|
||||||
smsc_warn(IFDOWN, "TX DMAC failed to stop");
|
smsc_warn(IFDOWN, "TX DMAC failed to stop");
|
||||||
|
|
||||||
/* ACK Tx DMAC stop bit */
|
/* ACK Tx DMAC stop bit */
|
||||||
|
@ -596,7 +596,7 @@ static void smsc9420_free_rx_ring(struct smsc9420_pdata *pd)
|
||||||
|
|
||||||
static void smsc9420_stop_rx(struct smsc9420_pdata *pd)
|
static void smsc9420_stop_rx(struct smsc9420_pdata *pd)
|
||||||
{
|
{
|
||||||
int timeOut = 1000;
|
int timeout = 1000;
|
||||||
u32 mac_cr, dmac_control, dma_intr_ena;
|
u32 mac_cr, dmac_control, dma_intr_ena;
|
||||||
|
|
||||||
/* mask RX DMAC interrupts */
|
/* mask RX DMAC interrupts */
|
||||||
|
@ -617,13 +617,13 @@ static void smsc9420_stop_rx(struct smsc9420_pdata *pd)
|
||||||
smsc9420_pci_flush_write(pd);
|
smsc9420_pci_flush_write(pd);
|
||||||
|
|
||||||
/* wait up to 10ms for receive to stop */
|
/* wait up to 10ms for receive to stop */
|
||||||
while (timeOut--) {
|
while (--timeout) {
|
||||||
if (smsc9420_reg_read(pd, DMAC_STATUS) & DMAC_STS_RS_)
|
if (smsc9420_reg_read(pd, DMAC_STATUS) & DMAC_STS_RS_)
|
||||||
break;
|
break;
|
||||||
udelay(10);
|
udelay(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!timeOut)
|
if (!timeout)
|
||||||
smsc_warn(IFDOWN, "RX DMAC did not stop! timeout.");
|
smsc_warn(IFDOWN, "RX DMAC did not stop! timeout.");
|
||||||
|
|
||||||
/* ACK the Rx DMAC stop bit */
|
/* ACK the Rx DMAC stop bit */
|
||||||
|
|
|
@ -148,7 +148,7 @@ static u16 __phy_read(struct gem *gp, int phy_addr, int reg)
|
||||||
cmd |= (MIF_FRAME_TAMSB);
|
cmd |= (MIF_FRAME_TAMSB);
|
||||||
writel(cmd, gp->regs + MIF_FRAME);
|
writel(cmd, gp->regs + MIF_FRAME);
|
||||||
|
|
||||||
while (limit--) {
|
while (--limit) {
|
||||||
cmd = readl(gp->regs + MIF_FRAME);
|
cmd = readl(gp->regs + MIF_FRAME);
|
||||||
if (cmd & MIF_FRAME_TALSB)
|
if (cmd & MIF_FRAME_TALSB)
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -79,7 +79,7 @@ static int reset_one_mii_phy(struct mii_phy* phy, int phy_id)
|
||||||
|
|
||||||
udelay(100);
|
udelay(100);
|
||||||
|
|
||||||
while (limit--) {
|
while (--limit) {
|
||||||
val = __phy_read(phy, phy_id, MII_BMCR);
|
val = __phy_read(phy, phy_id, MII_BMCR);
|
||||||
if ((val & BMCR_RESET) == 0)
|
if ((val & BMCR_RESET) == 0)
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -227,7 +227,7 @@ static int qe_init(struct sunqe *qep, int from_irq)
|
||||||
if (!(sbus_readb(mregs + MREGS_PHYCONFIG) & MREGS_PHYCONFIG_LTESTDIS)) {
|
if (!(sbus_readb(mregs + MREGS_PHYCONFIG) & MREGS_PHYCONFIG_LTESTDIS)) {
|
||||||
int tries = 50;
|
int tries = 50;
|
||||||
|
|
||||||
while (tries--) {
|
while (--tries) {
|
||||||
u8 tmp;
|
u8 tmp;
|
||||||
|
|
||||||
mdelay(5);
|
mdelay(5);
|
||||||
|
|
|
@ -1237,7 +1237,7 @@ static void tsi108_init_phy(struct net_device *dev)
|
||||||
spin_lock_irqsave(&phy_lock, flags);
|
spin_lock_irqsave(&phy_lock, flags);
|
||||||
|
|
||||||
tsi108_write_mii(data, MII_BMCR, BMCR_RESET);
|
tsi108_write_mii(data, MII_BMCR, BMCR_RESET);
|
||||||
while (i--){
|
while (--i) {
|
||||||
if(!(tsi108_read_mii(data, MII_BMCR) & BMCR_RESET))
|
if(!(tsi108_read_mii(data, MII_BMCR) & BMCR_RESET))
|
||||||
break;
|
break;
|
||||||
udelay(10);
|
udelay(10);
|
||||||
|
|
|
@ -392,7 +392,7 @@ static void de_rx (struct de_private *de)
|
||||||
unsigned drop = 0;
|
unsigned drop = 0;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
while (rx_work--) {
|
while (--rx_work) {
|
||||||
u32 status, len;
|
u32 status, len;
|
||||||
dma_addr_t mapping;
|
dma_addr_t mapping;
|
||||||
struct sk_buff *skb, *copy_skb;
|
struct sk_buff *skb, *copy_skb;
|
||||||
|
|
|
@ -455,6 +455,7 @@ static const struct usb_device_id hso_ids[] = {
|
||||||
{icon321_port_device(0x0af0, 0xd033)}, /* Icon-322 */
|
{icon321_port_device(0x0af0, 0xd033)}, /* Icon-322 */
|
||||||
{USB_DEVICE(0x0af0, 0x7301)}, /* GE40x */
|
{USB_DEVICE(0x0af0, 0x7301)}, /* GE40x */
|
||||||
{USB_DEVICE(0x0af0, 0x7361)}, /* GE40x */
|
{USB_DEVICE(0x0af0, 0x7361)}, /* GE40x */
|
||||||
|
{USB_DEVICE(0x0af0, 0x7381)}, /* GE40x */
|
||||||
{USB_DEVICE(0x0af0, 0x7401)}, /* GI 0401 */
|
{USB_DEVICE(0x0af0, 0x7401)}, /* GI 0401 */
|
||||||
{USB_DEVICE(0x0af0, 0x7501)}, /* GTM 382 */
|
{USB_DEVICE(0x0af0, 0x7501)}, /* GTM 382 */
|
||||||
{USB_DEVICE(0x0af0, 0x7601)}, /* GE40x */
|
{USB_DEVICE(0x0af0, 0x7601)}, /* GE40x */
|
||||||
|
@ -462,7 +463,8 @@ static const struct usb_device_id hso_ids[] = {
|
||||||
{USB_DEVICE(0x0af0, 0x7801)},
|
{USB_DEVICE(0x0af0, 0x7801)},
|
||||||
{USB_DEVICE(0x0af0, 0x7901)},
|
{USB_DEVICE(0x0af0, 0x7901)},
|
||||||
{USB_DEVICE(0x0af0, 0x7361)},
|
{USB_DEVICE(0x0af0, 0x7361)},
|
||||||
{icon321_port_device(0x0af0, 0xd051)},
|
{USB_DEVICE(0x0af0, 0xd057)},
|
||||||
|
{USB_DEVICE(0x0af0, 0xd055)},
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(usb, hso_ids);
|
MODULE_DEVICE_TABLE(usb, hso_ids);
|
||||||
|
|
|
@ -90,7 +90,6 @@ header-y += if_ppp.h
|
||||||
header-y += if_slip.h
|
header-y += if_slip.h
|
||||||
header-y += if_strip.h
|
header-y += if_strip.h
|
||||||
header-y += if_tun.h
|
header-y += if_tun.h
|
||||||
header-y += if_tunnel.h
|
|
||||||
header-y += in_route.h
|
header-y += in_route.h
|
||||||
header-y += ioctl.h
|
header-y += ioctl.h
|
||||||
header-y += ip6_tunnel.h
|
header-y += ip6_tunnel.h
|
||||||
|
@ -236,6 +235,7 @@ unifdef-y += if_phonet.h
|
||||||
unifdef-y += if_pppol2tp.h
|
unifdef-y += if_pppol2tp.h
|
||||||
unifdef-y += if_pppox.h
|
unifdef-y += if_pppox.h
|
||||||
unifdef-y += if_tr.h
|
unifdef-y += if_tr.h
|
||||||
|
unifdef-y += if_tunnel.h
|
||||||
unifdef-y += if_vlan.h
|
unifdef-y += if_vlan.h
|
||||||
unifdef-y += igmp.h
|
unifdef-y += igmp.h
|
||||||
unifdef-y += inet_diag.h
|
unifdef-y += inet_diag.h
|
||||||
|
|
|
@ -2,7 +2,10 @@
|
||||||
#define _IF_TUNNEL_H_
|
#define _IF_TUNNEL_H_
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
|
#ifdef __KERNEL__
|
||||||
#include <linux/ip.h>
|
#include <linux/ip.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#define SIOCGETTUNNEL (SIOCDEVPRIVATE + 0)
|
#define SIOCGETTUNNEL (SIOCDEVPRIVATE + 0)
|
||||||
#define SIOCADDTUNNEL (SIOCDEVPRIVATE + 1)
|
#define SIOCADDTUNNEL (SIOCDEVPRIVATE + 1)
|
||||||
|
|
|
@ -1015,9 +1015,11 @@ static int __udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
|
||||||
|
|
||||||
if ((rc = sock_queue_rcv_skb(sk, skb)) < 0) {
|
if ((rc = sock_queue_rcv_skb(sk, skb)) < 0) {
|
||||||
/* Note that an ENOMEM error is charged twice */
|
/* Note that an ENOMEM error is charged twice */
|
||||||
if (rc == -ENOMEM)
|
if (rc == -ENOMEM) {
|
||||||
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
|
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
|
||||||
is_udplite);
|
is_udplite);
|
||||||
|
atomic_inc(&sk->sk_drops);
|
||||||
|
}
|
||||||
goto drop;
|
goto drop;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -222,13 +222,13 @@ static void *packet_lookup_frame(struct packet_sock *po, unsigned int position,
|
||||||
h.raw = po->pg_vec[pg_vec_pos] + (frame_offset * po->frame_size);
|
h.raw = po->pg_vec[pg_vec_pos] + (frame_offset * po->frame_size);
|
||||||
switch (po->tp_version) {
|
switch (po->tp_version) {
|
||||||
case TPACKET_V1:
|
case TPACKET_V1:
|
||||||
if (status != h.h1->tp_status ? TP_STATUS_USER :
|
if (status != (h.h1->tp_status ? TP_STATUS_USER :
|
||||||
TP_STATUS_KERNEL)
|
TP_STATUS_KERNEL))
|
||||||
return NULL;
|
return NULL;
|
||||||
break;
|
break;
|
||||||
case TPACKET_V2:
|
case TPACKET_V2:
|
||||||
if (status != h.h2->tp_status ? TP_STATUS_USER :
|
if (status != (h.h2->tp_status ? TP_STATUS_USER :
|
||||||
TP_STATUS_KERNEL)
|
TP_STATUS_KERNEL))
|
||||||
return NULL;
|
return NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ config SUNRPC_GSS
|
||||||
|
|
||||||
config SUNRPC_XPRT_RDMA
|
config SUNRPC_XPRT_RDMA
|
||||||
tristate
|
tristate
|
||||||
depends on SUNRPC && INFINIBAND && EXPERIMENTAL
|
depends on SUNRPC && INFINIBAND && INFINIBAND_ADDR_TRANS && EXPERIMENTAL
|
||||||
default SUNRPC && INFINIBAND
|
default SUNRPC && INFINIBAND
|
||||||
help
|
help
|
||||||
This option allows the NFS client and server to support
|
This option allows the NFS client and server to support
|
||||||
|
|
Loading…
Reference in New Issue