Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1750 commits) ixgbe: Allow Priority Flow Control settings to survive a device reset net: core: remove unneeded include in net/core/utils.c. e1000e: update version number e1000e: fix close interrupt race e1000e: fix loss of multicast packets e1000e: commonize tx cleanup routine to match e1000 & igb netfilter: fix nf_logger name in ebt_ulog. netfilter: fix warning in ebt_ulog init function. netfilter: fix warning about invalid const usage e1000: fix close race with interrupt e1000: cleanup clean_tx_irq routine so that it completely cleans ring e1000: fix tx hang detect logic and address dma mapping issues bridge: bad error handling when adding invalid ether address bonding: select current active slave when enslaving device for mode tlb and alb gianfar: reallocate skb when headroom is not enough for fcb Bump release date to 25Mar2009 and version to 0.22 r6040: Fix second PHY address qeth: fix wait_event_timeout handling qeth: check for completion of a running recovery qeth: unregister MAC addresses during recovery. ... Manually fixed up conflicts in: drivers/infiniband/hw/cxgb3/cxio_hal.h drivers/infiniband/hw/nes/nes_nic.c
This commit is contained in:
@@ -76,7 +76,6 @@ static irqreturn_t c2_interrupt(int irq, void *dev_id);
|
||||
static void c2_tx_timeout(struct net_device *netdev);
|
||||
static int c2_change_mtu(struct net_device *netdev, int new_mtu);
|
||||
static void c2_reset(struct c2_port *c2_port);
|
||||
static struct net_device_stats *c2_get_stats(struct net_device *netdev);
|
||||
|
||||
static struct pci_device_id c2_pci_table[] = {
|
||||
{ PCI_DEVICE(0x18b8, 0xb001) },
|
||||
@@ -349,7 +348,7 @@ static void c2_tx_clean(struct c2_port *c2_port)
|
||||
elem->hw_desc + C2_TXP_ADDR);
|
||||
__raw_writew((__force u16) cpu_to_be16(TXP_HTXD_DONE),
|
||||
elem->hw_desc + C2_TXP_FLAGS);
|
||||
c2_port->netstats.tx_dropped++;
|
||||
c2_port->netdev->stats.tx_dropped++;
|
||||
break;
|
||||
} else {
|
||||
__raw_writew(0,
|
||||
@@ -457,7 +456,7 @@ static void c2_rx_error(struct c2_port *c2_port, struct c2_element *elem)
|
||||
elem->hw_desc + C2_RXP_FLAGS);
|
||||
|
||||
pr_debug("packet dropped\n");
|
||||
c2_port->netstats.rx_dropped++;
|
||||
c2_port->netdev->stats.rx_dropped++;
|
||||
}
|
||||
|
||||
static void c2_rx_interrupt(struct net_device *netdev)
|
||||
@@ -532,8 +531,8 @@ static void c2_rx_interrupt(struct net_device *netdev)
|
||||
netif_rx(skb);
|
||||
|
||||
netdev->last_rx = jiffies;
|
||||
c2_port->netstats.rx_packets++;
|
||||
c2_port->netstats.rx_bytes += buflen;
|
||||
netdev->stats.rx_packets++;
|
||||
netdev->stats.rx_bytes += buflen;
|
||||
}
|
||||
|
||||
/* Save where we left off */
|
||||
@@ -797,8 +796,8 @@ static int c2_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
|
||||
__raw_writew((__force u16) cpu_to_be16(TXP_HTXD_READY),
|
||||
elem->hw_desc + C2_TXP_FLAGS);
|
||||
|
||||
c2_port->netstats.tx_packets++;
|
||||
c2_port->netstats.tx_bytes += maplen;
|
||||
netdev->stats.tx_packets++;
|
||||
netdev->stats.tx_bytes += maplen;
|
||||
|
||||
/* Loop thru additional data fragments and queue them */
|
||||
if (skb_shinfo(skb)->nr_frags) {
|
||||
@@ -823,8 +822,8 @@ static int c2_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
|
||||
__raw_writew((__force u16) cpu_to_be16(TXP_HTXD_READY),
|
||||
elem->hw_desc + C2_TXP_FLAGS);
|
||||
|
||||
c2_port->netstats.tx_packets++;
|
||||
c2_port->netstats.tx_bytes += maplen;
|
||||
netdev->stats.tx_packets++;
|
||||
netdev->stats.tx_bytes += maplen;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -845,13 +844,6 @@ static int c2_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
|
||||
static struct net_device_stats *c2_get_stats(struct net_device *netdev)
|
||||
{
|
||||
struct c2_port *c2_port = netdev_priv(netdev);
|
||||
|
||||
return &c2_port->netstats;
|
||||
}
|
||||
|
||||
static void c2_tx_timeout(struct net_device *netdev)
|
||||
{
|
||||
struct c2_port *c2_port = netdev_priv(netdev);
|
||||
@@ -880,6 +872,16 @@ static int c2_change_mtu(struct net_device *netdev, int new_mtu)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct net_device_ops c2_netdev = {
|
||||
.ndo_open = c2_up,
|
||||
.ndo_stop = c2_down,
|
||||
.ndo_start_xmit = c2_xmit_frame,
|
||||
.ndo_tx_timeout = c2_tx_timeout,
|
||||
.ndo_change_mtu = c2_change_mtu,
|
||||
.ndo_set_mac_address = eth_mac_addr,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
};
|
||||
|
||||
/* Initialize network device */
|
||||
static struct net_device *c2_devinit(struct c2_dev *c2dev,
|
||||
void __iomem * mmio_addr)
|
||||
@@ -894,12 +896,7 @@ static struct net_device *c2_devinit(struct c2_dev *c2dev,
|
||||
|
||||
SET_NETDEV_DEV(netdev, &c2dev->pcidev->dev);
|
||||
|
||||
netdev->open = c2_up;
|
||||
netdev->stop = c2_down;
|
||||
netdev->hard_start_xmit = c2_xmit_frame;
|
||||
netdev->get_stats = c2_get_stats;
|
||||
netdev->tx_timeout = c2_tx_timeout;
|
||||
netdev->change_mtu = c2_change_mtu;
|
||||
netdev->netdev_ops = &c2_netdev;
|
||||
netdev->watchdog_timeo = C2_TX_TIMEOUT;
|
||||
netdev->irq = c2dev->pcidev->irq;
|
||||
|
||||
|
@@ -369,8 +369,6 @@ struct c2_port {
|
||||
unsigned long mem_size;
|
||||
|
||||
u32 rx_buf_size;
|
||||
|
||||
struct net_device_stats netstats;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@@ -708,26 +708,27 @@ static int c2_pseudo_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
|
||||
|
||||
static int c2_pseudo_change_mtu(struct net_device *netdev, int new_mtu)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (new_mtu < ETH_ZLEN || new_mtu > ETH_JUMBO_MTU)
|
||||
return -EINVAL;
|
||||
|
||||
netdev->mtu = new_mtu;
|
||||
|
||||
/* TODO: Tell rnic about new rmda interface mtu */
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct net_device_ops c2_pseudo_netdev_ops = {
|
||||
.ndo_open = c2_pseudo_up,
|
||||
.ndo_stop = c2_pseudo_down,
|
||||
.ndo_start_xmit = c2_pseudo_xmit_frame,
|
||||
.ndo_change_mtu = c2_pseudo_change_mtu,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
};
|
||||
|
||||
static void setup(struct net_device *netdev)
|
||||
{
|
||||
netdev->open = c2_pseudo_up;
|
||||
netdev->stop = c2_pseudo_down;
|
||||
netdev->hard_start_xmit = c2_pseudo_xmit_frame;
|
||||
netdev->get_stats = NULL;
|
||||
netdev->tx_timeout = NULL;
|
||||
netdev->set_mac_address = NULL;
|
||||
netdev->change_mtu = c2_pseudo_change_mtu;
|
||||
netdev->netdev_ops = &c2_pseudo_netdev_ops;
|
||||
|
||||
netdev->watchdog_timeo = 0;
|
||||
netdev->type = ARPHRD_ETHER;
|
||||
netdev->mtu = 1500;
|
||||
@@ -735,7 +736,6 @@ static void setup(struct net_device *netdev)
|
||||
netdev->addr_len = ETH_ALEN;
|
||||
netdev->tx_queue_len = 0;
|
||||
netdev->flags |= IFF_NOARP;
|
||||
return;
|
||||
}
|
||||
|
||||
static struct net_device *c2_pseudo_netdev_init(struct c2_dev *c2dev)
|
||||
|
@@ -701,6 +701,9 @@ static int __cxio_tpt_op(struct cxio_rdev *rdev_p, u32 reset_tpt_entry,
|
||||
u32 stag_idx;
|
||||
u32 wptr;
|
||||
|
||||
if (rdev_p->flags)
|
||||
return -EIO;
|
||||
|
||||
stag_state = stag_state > 0;
|
||||
stag_idx = (*stag) >> 8;
|
||||
|
||||
|
@@ -111,6 +111,8 @@ struct cxio_rdev {
|
||||
struct gen_pool *rqt_pool;
|
||||
struct list_head entry;
|
||||
struct ch_embedded_info fw_info;
|
||||
u32 flags;
|
||||
#define CXIO_ERROR_FATAL 1
|
||||
};
|
||||
|
||||
static inline int cxio_num_stags(struct cxio_rdev *rdev_p)
|
||||
|
@@ -51,13 +51,15 @@ cxgb3_cpl_handler_func t3c_handlers[NUM_CPL_CMDS];
|
||||
|
||||
static void open_rnic_dev(struct t3cdev *);
|
||||
static void close_rnic_dev(struct t3cdev *);
|
||||
static void iwch_err_handler(struct t3cdev *, u32, u32);
|
||||
|
||||
struct cxgb3_client t3c_client = {
|
||||
.name = "iw_cxgb3",
|
||||
.add = open_rnic_dev,
|
||||
.remove = close_rnic_dev,
|
||||
.handlers = t3c_handlers,
|
||||
.redirect = iwch_ep_redirect
|
||||
.redirect = iwch_ep_redirect,
|
||||
.err_handler = iwch_err_handler
|
||||
};
|
||||
|
||||
static LIST_HEAD(dev_list);
|
||||
@@ -160,6 +162,17 @@ static void close_rnic_dev(struct t3cdev *tdev)
|
||||
mutex_unlock(&dev_mutex);
|
||||
}
|
||||
|
||||
static void iwch_err_handler(struct t3cdev *tdev, u32 status, u32 error)
|
||||
{
|
||||
struct cxio_rdev *rdev = tdev->ulp;
|
||||
|
||||
if (status == OFFLOAD_STATUS_DOWN)
|
||||
rdev->flags = CXIO_ERROR_FATAL;
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
static int __init iwch_init_module(void)
|
||||
{
|
||||
int err;
|
||||
|
@@ -2550,7 +2550,7 @@ static void nes_nic_napi_ce_handler(struct nes_device *nesdev, struct nes_hw_nic
|
||||
{
|
||||
struct nes_vnic *nesvnic = container_of(cq, struct nes_vnic, nic_cq);
|
||||
|
||||
netif_rx_schedule(&nesvnic->napi);
|
||||
napi_schedule(&nesvnic->napi);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -111,7 +111,7 @@ static int nes_netdev_poll(struct napi_struct *napi, int budget)
|
||||
nes_nic_ce_handler(nesdev, nescq);
|
||||
|
||||
if (nescq->cqes_pending == 0) {
|
||||
netif_rx_complete(napi);
|
||||
napi_complete(napi);
|
||||
/* clear out completed cqes and arm */
|
||||
nes_write32(nesdev->regs+NES_CQE_ALLOC, NES_CQE_ALLOC_NOTIFY_NEXT |
|
||||
nescq->cq_number | (nescq->cqe_allocs_pending << 16));
|
||||
@@ -1551,6 +1551,19 @@ static void nes_netdev_vlan_rx_register(struct net_device *netdev, struct vlan_g
|
||||
spin_unlock_irqrestore(&nesadapter->phy_lock, flags);
|
||||
}
|
||||
|
||||
static const struct net_device_ops nes_netdev_ops = {
|
||||
.ndo_open = nes_netdev_open,
|
||||
.ndo_stop = nes_netdev_stop,
|
||||
.ndo_start_xmit = nes_netdev_start_xmit,
|
||||
.ndo_get_stats = nes_netdev_get_stats,
|
||||
.ndo_tx_timeout = nes_netdev_tx_timeout,
|
||||
.ndo_set_mac_address = nes_netdev_set_mac_address,
|
||||
.ndo_set_multicast_list = nes_netdev_set_multicast_list,
|
||||
.ndo_change_mtu = nes_netdev_change_mtu,
|
||||
.ndo_set_mac_address = eth_mac_addr,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
.ndo_vlan_rx_register = nes_netdev_vlan_rx_register,
|
||||
};
|
||||
|
||||
/**
|
||||
* nes_netdev_init - initialize network device
|
||||
@@ -1559,7 +1572,7 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
|
||||
void __iomem *mmio_addr)
|
||||
{
|
||||
u64 u64temp;
|
||||
struct nes_vnic *nesvnic = NULL;
|
||||
struct nes_vnic *nesvnic;
|
||||
struct net_device *netdev;
|
||||
struct nic_qp_map *curr_qp_map;
|
||||
u32 u32temp;
|
||||
@@ -1571,22 +1584,12 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
|
||||
printk(KERN_ERR PFX "nesvnic etherdev alloc failed");
|
||||
return NULL;
|
||||
}
|
||||
nesvnic = netdev_priv(netdev);
|
||||
|
||||
nes_debug(NES_DBG_INIT, "netdev = %p, %s\n", netdev, netdev->name);
|
||||
|
||||
SET_NETDEV_DEV(netdev, &nesdev->pcidev->dev);
|
||||
|
||||
nesvnic = netdev_priv(netdev);
|
||||
memset(nesvnic, 0, sizeof(*nesvnic));
|
||||
|
||||
netdev->open = nes_netdev_open;
|
||||
netdev->stop = nes_netdev_stop;
|
||||
netdev->hard_start_xmit = nes_netdev_start_xmit;
|
||||
netdev->get_stats = nes_netdev_get_stats;
|
||||
netdev->tx_timeout = nes_netdev_tx_timeout;
|
||||
netdev->set_mac_address = nes_netdev_set_mac_address;
|
||||
netdev->set_multicast_list = nes_netdev_set_multicast_list;
|
||||
netdev->change_mtu = nes_netdev_change_mtu;
|
||||
netdev->watchdog_timeo = NES_TX_TIMEOUT;
|
||||
netdev->irq = nesdev->pcidev->irq;
|
||||
netdev->mtu = ETH_DATA_LEN;
|
||||
@@ -1594,11 +1597,13 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
|
||||
netdev->addr_len = ETH_ALEN;
|
||||
netdev->type = ARPHRD_ETHER;
|
||||
netdev->features = NETIF_F_HIGHDMA;
|
||||
netdev->netdev_ops = &nes_netdev_ops;
|
||||
netdev->ethtool_ops = &nes_ethtool_ops;
|
||||
netif_napi_add(netdev, &nesvnic->napi, nes_netdev_poll, 128);
|
||||
nes_debug(NES_DBG_INIT, "Enabling VLAN Insert/Delete.\n");
|
||||
netdev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
|
||||
netdev->vlan_rx_register = nes_netdev_vlan_rx_register;
|
||||
netdev->features |= NETIF_F_LLTX;
|
||||
|
||||
/* Fill in the port structure */
|
||||
nesvnic->netdev = netdev;
|
||||
|
Reference in New Issue
Block a user