Commit 17eed249 authored by David S. Miller's avatar David S. Miller

Merge branch 'upstream-net26' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6

parents 4ad96d39 318a94d6
This diff is collapsed.
...@@ -940,7 +940,7 @@ irqreturn_t arcnet_interrupt(int irq, void *dev_id) ...@@ -940,7 +940,7 @@ irqreturn_t arcnet_interrupt(int irq, void *dev_id)
/* is the RECON info empty or old? */ /* is the RECON info empty or old? */
if (!lp->first_recon || !lp->last_recon || if (!lp->first_recon || !lp->last_recon ||
jiffies - lp->last_recon > HZ * 10) { time_after(jiffies, lp->last_recon + HZ * 10)) {
if (lp->network_down) if (lp->network_down)
BUGMSG(D_NORMAL, "reconfiguration detected: cabling restored?\n"); BUGMSG(D_NORMAL, "reconfiguration detected: cabling restored?\n");
lp->first_recon = lp->last_recon = jiffies; lp->first_recon = lp->last_recon = jiffies;
...@@ -974,7 +974,8 @@ irqreturn_t arcnet_interrupt(int irq, void *dev_id) ...@@ -974,7 +974,8 @@ irqreturn_t arcnet_interrupt(int irq, void *dev_id)
lp->num_recons = 1; lp->num_recons = 1;
} }
} }
} else if (lp->network_down && jiffies - lp->last_recon > HZ * 10) { } else if (lp->network_down &&
time_after(jiffies, lp->last_recon + HZ * 10)) {
if (lp->network_down) if (lp->network_down)
BUGMSG(D_NORMAL, "cabling restored?\n"); BUGMSG(D_NORMAL, "cabling restored?\n");
lp->first_recon = lp->last_recon = 0; lp->first_recon = lp->last_recon = 0;
......
This diff is collapsed.
################################################################################ ################################################################################
# #
# Intel PRO/1000 Linux driver # Intel PRO/1000 Linux driver
# Copyright(c) 1999 - 2007 Intel Corporation. # Copyright(c) 1999 - 2008 Intel Corporation.
# #
# This program is free software; you can redistribute it and/or modify it # This program is free software; you can redistribute it and/or modify it
# under the terms and conditions of the GNU General Public License, # under the terms and conditions of the GNU General Public License,
......
This diff is collapsed.
/******************************************************************************* /*******************************************************************************
Intel PRO/1000 Linux driver Intel PRO/1000 Linux driver
Copyright(c) 1999 - 2007 Intel Corporation. Copyright(c) 1999 - 2008 Intel Corporation.
This program is free software; you can redistribute it and/or modify it This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License, under the terms and conditions of the GNU General Public License,
...@@ -61,7 +61,7 @@ struct e1000_info; ...@@ -61,7 +61,7 @@ struct e1000_info;
ndev_printk(KERN_NOTICE , netdev, format, ## arg) ndev_printk(KERN_NOTICE , netdev, format, ## arg)
/* TX/RX descriptor defines */ /* Tx/Rx descriptor defines */
#define E1000_DEFAULT_TXD 256 #define E1000_DEFAULT_TXD 256
#define E1000_MAX_TXD 4096 #define E1000_MAX_TXD 4096
#define E1000_MIN_TXD 80 #define E1000_MIN_TXD 80
...@@ -114,13 +114,13 @@ struct e1000_buffer { ...@@ -114,13 +114,13 @@ struct e1000_buffer {
dma_addr_t dma; dma_addr_t dma;
struct sk_buff *skb; struct sk_buff *skb;
union { union {
/* TX */ /* Tx */
struct { struct {
unsigned long time_stamp; unsigned long time_stamp;
u16 length; u16 length;
u16 next_to_watch; u16 next_to_watch;
}; };
/* RX */ /* Rx */
/* arrays of page information for packet split */ /* arrays of page information for packet split */
struct e1000_ps_page *ps_pages; struct e1000_ps_page *ps_pages;
}; };
...@@ -177,7 +177,7 @@ struct e1000_adapter { ...@@ -177,7 +177,7 @@ struct e1000_adapter {
u16 rx_itr; u16 rx_itr;
/* /*
* TX * Tx
*/ */
struct e1000_ring *tx_ring /* One per active queue */ struct e1000_ring *tx_ring /* One per active queue */
____cacheline_aligned_in_smp; ____cacheline_aligned_in_smp;
...@@ -199,7 +199,7 @@ struct e1000_adapter { ...@@ -199,7 +199,7 @@ struct e1000_adapter {
unsigned int total_rx_bytes; unsigned int total_rx_bytes;
unsigned int total_rx_packets; unsigned int total_rx_packets;
/* TX stats */ /* Tx stats */
u64 tpt_old; u64 tpt_old;
u64 colc_old; u64 colc_old;
u64 gotcl_old; u64 gotcl_old;
...@@ -211,7 +211,7 @@ struct e1000_adapter { ...@@ -211,7 +211,7 @@ struct e1000_adapter {
u32 tx_dma_failed; u32 tx_dma_failed;
/* /*
* RX * Rx
*/ */
bool (*clean_rx) (struct e1000_adapter *adapter, bool (*clean_rx) (struct e1000_adapter *adapter,
int *work_done, int work_to_do) int *work_done, int work_to_do)
...@@ -223,7 +223,7 @@ struct e1000_adapter { ...@@ -223,7 +223,7 @@ struct e1000_adapter {
u32 rx_int_delay; u32 rx_int_delay;
u32 rx_abs_int_delay; u32 rx_abs_int_delay;
/* RX stats */ /* Rx stats */
u64 hw_csum_err; u64 hw_csum_err;
u64 hw_csum_good; u64 hw_csum_good;
u64 rx_hdr_split; u64 rx_hdr_split;
...@@ -234,6 +234,8 @@ struct e1000_adapter { ...@@ -234,6 +234,8 @@ struct e1000_adapter {
unsigned int rx_ps_pages; unsigned int rx_ps_pages;
u16 rx_ps_bsize0; u16 rx_ps_bsize0;
u32 max_frame_size;
u32 min_frame_size;
/* OS defined structs */ /* OS defined structs */
struct net_device *netdev; struct net_device *netdev;
...@@ -258,7 +260,7 @@ struct e1000_adapter { ...@@ -258,7 +260,7 @@ struct e1000_adapter {
u32 wol; u32 wol;
u32 pba; u32 pba;
u8 fc_autoneg; bool fc_autoneg;
unsigned long led_status; unsigned long led_status;
...@@ -305,6 +307,7 @@ struct e1000_info { ...@@ -305,6 +307,7 @@ struct e1000_info {
#define FLAG_MSI_ENABLED (1 << 27) #define FLAG_MSI_ENABLED (1 << 27)
#define FLAG_RX_CSUM_ENABLED (1 << 28) #define FLAG_RX_CSUM_ENABLED (1 << 28)
#define FLAG_TSO_FORCE (1 << 29) #define FLAG_TSO_FORCE (1 << 29)
#define FLAG_RX_RESTART_NOW (1 << 30)
#define E1000_RX_DESC_PS(R, i) \ #define E1000_RX_DESC_PS(R, i) \
(&(((union e1000_rx_desc_packet_split *)((R).desc))[i])) (&(((union e1000_rx_desc_packet_split *)((R).desc))[i]))
...@@ -387,9 +390,11 @@ extern s32 e1000e_copper_link_setup_igp(struct e1000_hw *hw); ...@@ -387,9 +390,11 @@ extern s32 e1000e_copper_link_setup_igp(struct e1000_hw *hw);
extern s32 e1000e_setup_link(struct e1000_hw *hw); extern s32 e1000e_setup_link(struct e1000_hw *hw);
extern void e1000e_clear_vfta(struct e1000_hw *hw); extern void e1000e_clear_vfta(struct e1000_hw *hw);
extern void e1000e_init_rx_addrs(struct e1000_hw *hw, u16 rar_count); extern void e1000e_init_rx_addrs(struct e1000_hw *hw, u16 rar_count);
extern void e1000e_mc_addr_list_update_generic(struct e1000_hw *hw, extern void e1000e_update_mc_addr_list_generic(struct e1000_hw *hw,
u8 *mc_addr_list, u32 mc_addr_count, u8 *mc_addr_list,
u32 rar_used_count, u32 rar_count); u32 mc_addr_count,
u32 rar_used_count,
u32 rar_count);
extern void e1000e_rar_set(struct e1000_hw *hw, u8 *addr, u32 index); extern void e1000e_rar_set(struct e1000_hw *hw, u8 *addr, u32 index);
extern s32 e1000e_set_fc_watermarks(struct e1000_hw *hw); extern s32 e1000e_set_fc_watermarks(struct e1000_hw *hw);
extern void e1000e_set_pcie_no_snoop(struct e1000_hw *hw, u32 no_snoop); extern void e1000e_set_pcie_no_snoop(struct e1000_hw *hw, u32 no_snoop);
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/******************************************************************************* /*******************************************************************************
Intel PRO/1000 Linux driver Intel PRO/1000 Linux driver
Copyright(c) 1999 - 2007 Intel Corporation. Copyright(c) 1999 - 2008 Intel Corporation.
This program is free software; you can redistribute it and/or modify it This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License, under the terms and conditions of the GNU General Public License,
...@@ -30,7 +30,8 @@ ...@@ -30,7 +30,8 @@
#include "e1000.h" #include "e1000.h"
/* This is the only thing that needs to be changed to adjust the /*
* This is the only thing that needs to be changed to adjust the
* maximum number of ports that the driver can manage. * maximum number of ports that the driver can manage.
*/ */
...@@ -46,7 +47,8 @@ module_param(copybreak, uint, 0644); ...@@ -46,7 +47,8 @@ module_param(copybreak, uint, 0644);
MODULE_PARM_DESC(copybreak, MODULE_PARM_DESC(copybreak,
"Maximum size of packet that is copied to a new buffer on receive"); "Maximum size of packet that is copied to a new buffer on receive");
/* All parameters are treated the same, as an integer array of values. /*
* All parameters are treated the same, as an integer array of values.
* This macro just reduces the need to repeat the same declaration code * This macro just reduces the need to repeat the same declaration code
* over and over (plus this helps to avoid typo bugs). * over and over (plus this helps to avoid typo bugs).
*/ */
...@@ -60,8 +62,9 @@ MODULE_PARM_DESC(copybreak, ...@@ -60,8 +62,9 @@ MODULE_PARM_DESC(copybreak,
MODULE_PARM_DESC(X, desc); MODULE_PARM_DESC(X, desc);
/* Transmit Interrupt Delay in units of 1.024 microseconds /*
* Tx interrupt delay needs to typically be set to something non zero * Transmit Interrupt Delay in units of 1.024 microseconds
* Tx interrupt delay needs to typically be set to something non zero
* *
* Valid Range: 0-65535 * Valid Range: 0-65535
*/ */
...@@ -70,7 +73,8 @@ E1000_PARAM(TxIntDelay, "Transmit Interrupt Delay"); ...@@ -70,7 +73,8 @@ E1000_PARAM(TxIntDelay, "Transmit Interrupt Delay");
#define MAX_TXDELAY 0xFFFF #define MAX_TXDELAY 0xFFFF
#define MIN_TXDELAY 0 #define MIN_TXDELAY 0
/* Transmit Absolute Interrupt Delay in units of 1.024 microseconds /*
* Transmit Absolute Interrupt Delay in units of 1.024 microseconds
* *
* Valid Range: 0-65535 * Valid Range: 0-65535
*/ */
...@@ -79,8 +83,9 @@ E1000_PARAM(TxAbsIntDelay, "Transmit Absolute Interrupt Delay"); ...@@ -79,8 +83,9 @@ E1000_PARAM(TxAbsIntDelay, "Transmit Absolute Interrupt Delay");
#define MAX_TXABSDELAY 0xFFFF #define MAX_TXABSDELAY 0xFFFF
#define MIN_TXABSDELAY 0 #define MIN_TXABSDELAY 0
/* Receive Interrupt Delay in units of 1.024 microseconds /*
* hardware will likely hang if you set this to anything but zero. * Receive Interrupt Delay in units of 1.024 microseconds
* hardware will likely hang if you set this to anything but zero.
* *
* Valid Range: 0-65535 * Valid Range: 0-65535
*/ */
...@@ -89,7 +94,8 @@ E1000_PARAM(RxIntDelay, "Receive Interrupt Delay"); ...@@ -89,7 +94,8 @@ E1000_PARAM(RxIntDelay, "Receive Interrupt Delay");
#define MAX_RXDELAY 0xFFFF #define MAX_RXDELAY 0xFFFF
#define MIN_RXDELAY 0 #define MIN_RXDELAY 0
/* Receive Absolute Interrupt Delay in units of 1.024 microseconds /*
* Receive Absolute Interrupt Delay in units of 1.024 microseconds
* *
* Valid Range: 0-65535 * Valid Range: 0-65535
*/ */
...@@ -98,7 +104,8 @@ E1000_PARAM(RxAbsIntDelay, "Receive Absolute Interrupt Delay"); ...@@ -98,7 +104,8 @@ E1000_PARAM(RxAbsIntDelay, "Receive Absolute Interrupt Delay");
#define MAX_RXABSDELAY 0xFFFF #define MAX_RXABSDELAY 0xFFFF
#define MIN_RXABSDELAY 0 #define MIN_RXABSDELAY 0
/* Interrupt Throttle Rate (interrupts/sec) /*
* Interrupt Throttle Rate (interrupts/sec)
* *
* Valid Range: 100-100000 (0=off, 1=dynamic, 3=dynamic conservative) * Valid Range: 100-100000 (0=off, 1=dynamic, 3=dynamic conservative)
*/ */
...@@ -107,7 +114,8 @@ E1000_PARAM(InterruptThrottleRate, "Interrupt Throttling Rate"); ...@@ -107,7 +114,8 @@ E1000_PARAM(InterruptThrottleRate, "Interrupt Throttling Rate");
#define MAX_ITR 100000 #define MAX_ITR 100000
#define MIN_ITR 100 #define MIN_ITR 100
/* Enable Smart Power Down of the PHY /*
* Enable Smart Power Down of the PHY
* *
* Valid Range: 0, 1 * Valid Range: 0, 1
* *
...@@ -115,7 +123,8 @@ E1000_PARAM(InterruptThrottleRate, "Interrupt Throttling Rate"); ...@@ -115,7 +123,8 @@ E1000_PARAM(InterruptThrottleRate, "Interrupt Throttling Rate");
*/ */
E1000_PARAM(SmartPowerDownEnable, "Enable PHY smart power down"); E1000_PARAM(SmartPowerDownEnable, "Enable PHY smart power down");
/* Enable Kumeran Lock Loss workaround /*
* Enable Kumeran Lock Loss workaround
* *
* Valid Range: 0, 1 * Valid Range: 0, 1
* *
......
This diff is collapsed.
...@@ -421,7 +421,7 @@ struct ehea_fw_handle_entry { ...@@ -421,7 +421,7 @@ struct ehea_fw_handle_entry {
struct ehea_fw_handle_array { struct ehea_fw_handle_array {
struct ehea_fw_handle_entry *arr; struct ehea_fw_handle_entry *arr;
int num_entries; int num_entries;
struct semaphore lock; struct mutex lock;
}; };
struct ehea_bcmc_reg_entry { struct ehea_bcmc_reg_entry {
...@@ -434,7 +434,7 @@ struct ehea_bcmc_reg_entry { ...@@ -434,7 +434,7 @@ struct ehea_bcmc_reg_entry {
struct ehea_bcmc_reg_array { struct ehea_bcmc_reg_array {
struct ehea_bcmc_reg_entry *arr; struct ehea_bcmc_reg_entry *arr;
int num_entries; int num_entries;
struct semaphore lock; struct mutex lock;
}; };
#define EHEA_PORT_UP 1 #define EHEA_PORT_UP 1
...@@ -452,7 +452,7 @@ struct ehea_port { ...@@ -452,7 +452,7 @@ struct ehea_port {
struct vlan_group *vgrp; struct vlan_group *vgrp;
struct ehea_eq *qp_eq; struct ehea_eq *qp_eq;
struct work_struct reset_task; struct work_struct reset_task;
struct semaphore port_lock; struct mutex port_lock;
char int_aff_name[EHEA_IRQ_NAME_SIZE]; char int_aff_name[EHEA_IRQ_NAME_SIZE];
int allmulti; /* Indicates IFF_ALLMULTI state */ int allmulti; /* Indicates IFF_ALLMULTI state */
int promisc; /* Indicates IFF_PROMISC state */ int promisc; /* Indicates IFF_PROMISC state */
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include <linux/notifier.h> #include <linux/notifier.h>
#include <linux/reboot.h> #include <linux/reboot.h>
#include <asm/kexec.h> #include <asm/kexec.h>
#include <linux/mutex.h>
#include <net/ip.h> #include <net/ip.h>
...@@ -99,7 +100,7 @@ static int port_name_cnt; ...@@ -99,7 +100,7 @@ static int port_name_cnt;
static LIST_HEAD(adapter_list); static LIST_HEAD(adapter_list);
u64 ehea_driver_flags; u64 ehea_driver_flags;
struct work_struct ehea_rereg_mr_task; struct work_struct ehea_rereg_mr_task;
struct semaphore dlpar_mem_lock; static DEFINE_MUTEX(dlpar_mem_lock);
struct ehea_fw_handle_array ehea_fw_handles; struct ehea_fw_handle_array ehea_fw_handles;
struct ehea_bcmc_reg_array ehea_bcmc_regs; struct ehea_bcmc_reg_array ehea_bcmc_regs;
...@@ -1758,7 +1759,7 @@ static int ehea_set_mac_addr(struct net_device *dev, void *sa) ...@@ -1758,7 +1759,7 @@ static int ehea_set_mac_addr(struct net_device *dev, void *sa)
memcpy(dev->dev_addr, mac_addr->sa_data, dev->addr_len); memcpy(dev->dev_addr, mac_addr->sa_data, dev->addr_len);
down(&ehea_bcmc_regs.lock); mutex_lock(&ehea_bcmc_regs.lock);
/* Deregister old MAC in pHYP */ /* Deregister old MAC in pHYP */
ret = ehea_broadcast_reg_helper(port, H_DEREG_BCMC); ret = ehea_broadcast_reg_helper(port, H_DEREG_BCMC);
...@@ -1776,7 +1777,7 @@ static int ehea_set_mac_addr(struct net_device *dev, void *sa) ...@@ -1776,7 +1777,7 @@ static int ehea_set_mac_addr(struct net_device *dev, void *sa)
out_upregs: out_upregs:
ehea_update_bcmc_registrations(); ehea_update_bcmc_registrations();
up(&ehea_bcmc_regs.lock); mutex_unlock(&ehea_bcmc_regs.lock);
out_free: out_free:
kfree(cb0); kfree(cb0);
out: out:
...@@ -1938,7 +1939,7 @@ static void ehea_set_multicast_list(struct net_device *dev) ...@@ -1938,7 +1939,7 @@ static void ehea_set_multicast_list(struct net_device *dev)
} }
ehea_promiscuous(dev, 0); ehea_promiscuous(dev, 0);
down(&ehea_bcmc_regs.lock); mutex_lock(&ehea_bcmc_regs.lock);
if (dev->flags & IFF_ALLMULTI) { if (dev->flags & IFF_ALLMULTI) {
ehea_allmulti(dev, 1); ehea_allmulti(dev, 1);
...@@ -1969,7 +1970,7 @@ static void ehea_set_multicast_list(struct net_device *dev) ...@@ -1969,7 +1970,7 @@ static void ehea_set_multicast_list(struct net_device *dev)
} }
out: out:
ehea_update_bcmc_registrations(); ehea_update_bcmc_registrations();
up(&ehea_bcmc_regs.lock); mutex_unlock(&ehea_bcmc_regs.lock);
return; return;
} }
...@@ -2452,7 +2453,7 @@ static int ehea_up(struct net_device *dev) ...@@ -2452,7 +2453,7 @@ static int ehea_up(struct net_device *dev)
if (port->state == EHEA_PORT_UP) if (port->state == EHEA_PORT_UP)
return 0; return 0;
down(&ehea_fw_handles.lock); mutex_lock(&ehea_fw_handles.lock);
ret = ehea_port_res_setup(port, port->num_def_qps, ret = ehea_port_res_setup(port, port->num_def_qps,
port->num_add_tx_qps); port->num_add_tx_qps);
...@@ -2490,7 +2491,7 @@ static int ehea_up(struct net_device *dev) ...@@ -2490,7 +2491,7 @@ static int ehea_up(struct net_device *dev)
} }
} }
down(&ehea_bcmc_regs.lock); mutex_lock(&ehea_bcmc_regs.lock);
ret = ehea_broadcast_reg_helper(port, H_REG_BCMC); ret = ehea_broadcast_reg_helper(port, H_REG_BCMC);
if (ret) { if (ret) {
...@@ -2513,10 +2514,10 @@ static int ehea_up(struct net_device *dev) ...@@ -2513,10 +2514,10 @@ static int ehea_up(struct net_device *dev)
ehea_info("Failed starting %s. ret=%i", dev->name, ret); ehea_info("Failed starting %s. ret=%i", dev->name, ret);
ehea_update_bcmc_registrations(); ehea_update_bcmc_registrations();
up(&ehea_bcmc_regs.lock); mutex_unlock(&ehea_bcmc_regs.lock);
ehea_update_firmware_handles(); ehea_update_firmware_handles();
up(&ehea_fw_handles.lock); mutex_unlock(&ehea_fw_handles.lock);
return ret; return ret;
} }
...@@ -2542,7 +2543,7 @@ static int ehea_open(struct net_device *dev) ...@@ -2542,7 +2543,7 @@ static int ehea_open(struct net_device *dev)
int ret; int ret;
struct ehea_port *port = netdev_priv(dev); struct ehea_port *port = netdev_priv(dev);
down(&port->port_lock); mutex_lock(&port->port_lock);
if (netif_msg_ifup(port)) if (netif_msg_ifup(port))
ehea_info("enabling port %s", dev->name); ehea_info("enabling port %s", dev->name);
...@@ -2553,7 +2554,7 @@ static int ehea_open(struct net_device *dev) ...@@ -2553,7 +2554,7 @@ static int ehea_open(struct net_device *dev)
netif_start_queue(dev); netif_start_queue(dev);
} }
up(&port->port_lock); mutex_unlock(&port->port_lock);
return ret; return ret;
} }
...@@ -2566,18 +2567,18 @@ static int ehea_down(struct net_device *dev) ...@@ -2566,18 +2567,18 @@ static int ehea_down(struct net_device *dev)
if (port->state == EHEA_PORT_DOWN) if (port->state == EHEA_PORT_DOWN)
return 0; return 0;
down(&ehea_bcmc_regs.lock); mutex_lock(&ehea_fw_handles.lock);
mutex_lock(&ehea_bcmc_regs.lock);
ehea_drop_multicast_list(dev); ehea_drop_multicast_list(dev);
ehea_broadcast_reg_helper(port, H_DEREG_BCMC); ehea_broadcast_reg_helper(port, H_DEREG_BCMC);
ehea_free_interrupts(dev); ehea_free_interrupts(dev);
down(&ehea_fw_handles.lock);
port->state = EHEA_PORT_DOWN; port->state = EHEA_PORT_DOWN;
ehea_update_bcmc_registrations(); ehea_update_bcmc_registrations();
up(&ehea_bcmc_regs.lock); mutex_unlock(&ehea_bcmc_regs.lock);
ret = ehea_clean_all_portres(port); ret = ehea_clean_all_portres(port);
if (ret) if (ret)
...@@ -2585,7 +2586,7 @@ static int ehea_down(struct net_device *dev) ...@@ -2585,7 +2586,7 @@ static int ehea_down(struct net_device *dev)
dev->name, ret); dev->name, ret);
ehea_update_firmware_handles(); ehea_update_firmware_handles();
up(&ehea_fw_handles.lock); mutex_unlock(&ehea_fw_handles.lock);
return ret; return ret;
} }
...@@ -2599,11 +2600,11 @@ static int ehea_stop(struct net_device *dev) ...@@ -2599,11 +2600,11 @@ static int ehea_stop(struct net_device *dev)
ehea_info("disabling port %s", dev->name); ehea_info("disabling port %s", dev->name);
flush_scheduled_work(); flush_scheduled_work();
down(&port->port_lock); mutex_lock(&port->port_lock);
netif_stop_queue(dev); netif_stop_queue(dev);
port_napi_disable(port); port_napi_disable(port);
ret = ehea_down(dev); ret = ehea_down(dev);
up(&port->port_lock); mutex_unlock(&port->port_lock);
return ret; return ret;
} }
...@@ -2801,7 +2802,7 @@ static void ehea_reset_port(struct work_struct *work) ...@@ -2801,7 +2802,7 @@ static void ehea_reset_port(struct work_struct *work)
struct net_device *dev = port->netdev; struct net_device *dev = port->netdev;
port->resets++; port->resets++;
down(&port->port_lock); mutex_lock(&port->port_lock);
netif_stop_queue(dev); netif_stop_queue(dev);
port_napi_disable(port); port_napi_disable(port);
...@@ -2821,7 +2822,7 @@ static void ehea_reset_port(struct work_struct *work) ...@@ -2821,7 +2822,7 @@ static void ehea_reset_port(struct work_struct *work)
netif_wake_queue(dev); netif_wake_queue(dev);
out: out:
up(&port->port_lock); mutex_unlock(&port->port_lock);
return; return;
} }
...@@ -2830,7 +2831,7 @@ static void ehea_rereg_mrs(struct work_struct *work) ...@@ -2830,7 +2831,7 @@ static void ehea_rereg_mrs(struct work_struct *work)
int ret, i; int ret, i;
struct ehea_adapter *adapter; struct ehea_adapter *adapter;
down(&dlpar_mem_lock); mutex_lock(&dlpar_mem_lock);
ehea_info("LPAR memory enlarged - re-initializing driver"); ehea_info("LPAR memory enlarged - re-initializing driver");
list_for_each_entry(adapter, &adapter_list, list) list_for_each_entry(adapter, &adapter_list, list)
...@@ -2838,21 +2839,23 @@ static void ehea_rereg_mrs(struct work_struct *work) ...@@ -2838,21 +2839,23 @@ static void ehea_rereg_mrs(struct work_struct *work)
/* Shutdown all ports */ /* Shutdown all ports */
for (i = 0; i < EHEA_MAX_PORTS; i++) { for (i = 0; i < EHEA_MAX_PORTS; i++) {
struct ehea_port *port = adapter->port[i]; struct ehea_port *port = adapter->port[i];
struct net_device *dev;
if (port) { if (!port)
struct net_device *dev = port->netdev; continue;
if (dev->flags & IFF_UP) { dev = port->netdev;
down(&port->port_lock);
netif_stop_queue(dev); if (dev->flags & IFF_UP) {
ret = ehea_stop_qps(dev); mutex_lock(&port->port_lock);
if (ret) { netif_stop_queue(dev);
up(&port->port_lock); ret = ehea_stop_qps(dev);
goto out; if (ret) {
} mutex_unlock(&port->port_lock);
port_napi_disable(port); goto out;
up(&port->port_lock);
} }
port_napi_disable(port);
mutex_unlock(&port->port_lock);
} }
} }
...@@ -2892,17 +2895,17 @@ static void ehea_rereg_mrs(struct work_struct *work) ...@@ -2892,17 +2895,17 @@ static void ehea_rereg_mrs(struct work_struct *work)
struct net_device *dev = port->netdev; struct net_device *dev = port->netdev;
if (dev->flags & IFF_UP) { if (dev->flags & IFF_UP) {
down(&port->port_lock); mutex_lock(&port->port_lock);
port_napi_enable(port); port_napi_enable(port);
ret = ehea_restart_qps(dev); ret = ehea_restart_qps(dev);
if (!ret) if (!ret)
netif_wake_queue(dev); netif_wake_queue(dev);
up(&port->port_lock); mutex_unlock(&port->port_lock);
} }
} }
} }
} }
up(&dlpar_mem_lock); mutex_unlock(&dlpar_mem_lock);
ehea_info("re-initializing driver complete"); ehea_info("re-initializing driver complete");
out: out:
return; return;
...@@ -3063,7 +3066,7 @@ struct ehea_port *ehea_setup_single_port(struct ehea_adapter *adapter, ...@@ -3063,7 +3066,7 @@ struct ehea_port *ehea_setup_single_port(struct ehea_adapter *adapter,
port = netdev_priv(dev); port = netdev_priv(dev);
sema_init(&port->port_lock, 1); mutex_init(&port->port_lock);
port->state = EHEA_PORT_DOWN; port->state = EHEA_PORT_DOWN;
port->sig_comp_iv = sq_entries / 10; port->sig_comp_iv = sq_entries / 10;
...@@ -3342,7 +3345,7 @@ static int __devinit ehea_probe_adapter(struct of_device *dev, ...@@ -3342,7 +3345,7 @@ static int __devinit ehea_probe_adapter(struct of_device *dev,
ehea_error("Invalid ibmebus device probed"); ehea_error("Invalid ibmebus device probed");
return -EINVAL; return -EINVAL;
} }
down(&ehea_fw_handles.lock); mutex_lock(&ehea_fw_handles.lock);
adapter = kzalloc(sizeof(*adapter), GFP_KERNEL); adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
if (!adapter) { if (!adapter) {
...@@ -3426,7 +3429,7 @@ static int __devinit ehea_probe_adapter(struct of_device *dev, ...@@ -3426,7 +3429,7 @@ static int __devinit ehea_probe_adapter(struct of_device *dev,
out: out:
ehea_update_firmware_handles(); ehea_update_firmware_handles();
up(&ehea_fw_handles.lock); mutex_unlock(&ehea_fw_handles.lock);
return ret; return ret;
} }
...@@ -3445,7 +3448,7 @@ static int __devexit ehea_remove(struct of_device *dev) ...@@ -3445,7 +3448,7 @@ static int __devexit ehea_remove(struct of_device *dev)
flush_scheduled_work(); flush_scheduled_work();
down(&ehea_fw_handles.lock); mutex_lock(&ehea_fw_handles.lock);
ibmebus_free_irq(adapter->neq->attr.ist1, adapter); ibmebus_free_irq(adapter->neq->attr.ist1, adapter);
tasklet_kill(&adapter->neq_tasklet); tasklet_kill(&adapter->neq_tasklet);
...@@ -3456,7 +3459,7 @@ static int __devexit ehea_remove(struct of_device *dev) ...@@ -3456,7 +3459,7 @@ static int __devexit ehea_remove(struct of_device *dev)
kfree(adapter); kfree(adapter);
ehea_update_firmware_handles(); ehea_update_firmware_handles();
up(&ehea_fw_handles.lock); mutex_unlock(&ehea_fw_handles.lock);
return 0; return 0;
} }
...@@ -3543,9 +3546,8 @@ int __init ehea_module_init(void) ...@@ -3543,9 +3546,8 @@ int __init ehea_module_init(void)
memset(&ehea_fw_handles, 0, sizeof(ehea_fw_handles)); memset(&ehea_fw_handles, 0, sizeof(ehea_fw_handles));
memset(&ehea_bcmc_regs, 0, sizeof(ehea_bcmc_regs)); memset(&ehea_bcmc_regs, 0, sizeof(ehea_bcmc_regs));
sema_init(&dlpar_mem_lock, 1); mutex_init(&ehea_fw_handles.lock);
sema_init(&ehea_fw_handles.lock, 1); mutex_init(&ehea_bcmc_regs.lock);
sema_init(&ehea_bcmc_regs.lock, 1);
ret = check_module_parm(); ret = check_module_parm();
if (ret) if (ret)
......
...@@ -367,7 +367,7 @@ static int __ixgbe_notify_dca(struct device *dev, void *data) ...@@ -367,7 +367,7 @@ static int __ixgbe_notify_dca(struct device *dev, void *data)
/* Always use CB2 mode, difference is masked /* Always use CB2 mode, difference is masked
* in the CB driver. */ * in the CB driver. */
IXGBE_WRITE_REG(&adapter->hw, IXGBE_DCA_CTRL, 2); IXGBE_WRITE_REG(&adapter->hw, IXGBE_DCA_CTRL, 2);
if (dca_add_requester(dev) == IXGBE_SUCCESS) { if (dca_add_requester(dev) == 0) {
ixgbe_setup_dca(adapter); ixgbe_setup_dca(adapter);
break; break;
} }
...@@ -381,7 +381,7 @@ static int __ixgbe_notify_dca(struct device *dev, void *data) ...@@ -381,7 +381,7 @@ static int __ixgbe_notify_dca(struct device *dev, void *data)
break; break;
} }
return IXGBE_SUCCESS; return 0;
} }
#endif /* CONFIG_DCA */ #endif /* CONFIG_DCA */
...@@ -3605,7 +3605,7 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev, ...@@ -3605,7 +3605,7 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
goto err_register; goto err_register;
#ifdef CONFIG_DCA #ifdef CONFIG_DCA
if (dca_add_requester(&pdev->dev) == IXGBE_SUCCESS) { if (dca_add_requester(&pdev->dev) == 0) {
adapter->flags |= IXGBE_FLAG_DCA_ENABLED; adapter->flags |= IXGBE_FLAG_DCA_ENABLED;
/* always use CB2 mode, difference is masked /* always use CB2 mode, difference is masked
* in the CB driver */ * in the CB driver */
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
#define XL_DEBUG 0 #define XL_DEBUG 0
#include <linux/jiffies.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/errno.h> #include <linux/errno.h>
...@@ -408,7 +409,7 @@ static int xl_hw_reset(struct net_device *dev) ...@@ -408,7 +409,7 @@ static int xl_hw_reset(struct net_device *dev)
t=jiffies; t=jiffies;
while (readw(xl_mmio + MMIO_INTSTATUS) & INTSTAT_CMD_IN_PROGRESS) { while (readw(xl_mmio + MMIO_INTSTATUS) & INTSTAT_CMD_IN_PROGRESS) {
schedule(); schedule();
if(jiffies-t > 40*HZ) { if (time_after(jiffies, t + 40 * HZ)) {
printk(KERN_ERR "%s: 3COM 3C359 Velocity XL card not responding to global reset.\n", dev->name); printk(KERN_ERR "%s: 3COM 3C359 Velocity XL card not responding to global reset.\n", dev->name);
return -ENODEV; return -ENODEV;
} }
...@@ -519,7 +520,7 @@ static int xl_hw_reset(struct net_device *dev) ...@@ -519,7 +520,7 @@ static int xl_hw_reset(struct net_device *dev)
t=jiffies; t=jiffies;
while ( !(readw(xl_mmio + MMIO_INTSTATUS_AUTO) & INTSTAT_SRB) ) { while ( !(readw(xl_mmio + MMIO_INTSTATUS_AUTO) & INTSTAT_SRB) ) {
schedule(); schedule();
if(jiffies-t > 15*HZ) { if (time_after(jiffies, t + 15 * HZ)) {
printk(KERN_ERR "3COM 3C359 Velocity XL card not responding.\n"); printk(KERN_ERR "3COM 3C359 Velocity XL card not responding.\n");
return -ENODEV; return -ENODEV;
} }
...@@ -790,7 +791,7 @@ static int xl_open_hw(struct net_device *dev) ...@@ -790,7 +791,7 @@ static int xl_open_hw(struct net_device *dev)
t=jiffies; t=jiffies;
while (! (readw(xl_mmio + MMIO_INTSTATUS) & INTSTAT_SRB)) { while (! (readw(xl_mmio + MMIO_INTSTATUS) & INTSTAT_SRB)) {
schedule(); schedule();
if(jiffies-t > 40*HZ) { if (time_after(jiffies, t + 40 * HZ)) {
printk(KERN_ERR "3COM 3C359 Velocity XL card not responding.\n"); printk(KERN_ERR "3COM 3C359 Velocity XL card not responding.\n");
break ; break ;
} }
...@@ -1003,7 +1004,7 @@ static void xl_reset(struct net_device *dev) ...@@ -1003,7 +1004,7 @@ static void xl_reset(struct net_device *dev)
t=jiffies; t=jiffies;
while (readw(xl_mmio + MMIO_INTSTATUS) & INTSTAT_CMD_IN_PROGRESS) { while (readw(xl_mmio + MMIO_INTSTATUS) & INTSTAT_CMD_IN_PROGRESS) {
if(jiffies-t > 40*HZ) { if (time_after(jiffies, t + 40 * HZ)) {
printk(KERN_ERR "3COM 3C359 Velocity XL card not responding.\n"); printk(KERN_ERR "3COM 3C359 Velocity XL card not responding.\n");
break ; break ;
} }
...@@ -1270,7 +1271,7 @@ static int xl_close(struct net_device *dev) ...@@ -1270,7 +1271,7 @@ static int xl_close(struct net_device *dev)
t=jiffies; t=jiffies;
while (readw(xl_mmio + MMIO_INTSTATUS) & INTSTAT_CMD_IN_PROGRESS) { while (readw(xl_mmio + MMIO_INTSTATUS) & INTSTAT_CMD_IN_PROGRESS) {
schedule(); schedule();
if(jiffies-t > 10*HZ) { if (time_after(jiffies, t + 10 * HZ)) {
printk(KERN_ERR "%s: 3COM 3C359 Velocity XL-DNSTALL not responding.\n", dev->name); printk(KERN_ERR "%s: 3COM 3C359 Velocity XL-DNSTALL not responding.\n", dev->name);
break ; break ;
} }
...@@ -1279,7 +1280,7 @@ static int xl_close(struct net_device *dev) ...@@ -1279,7 +1280,7 @@ static int xl_close(struct net_device *dev)
t=jiffies; t=jiffies;
while (readw(xl_mmio + MMIO_INTSTATUS) & INTSTAT_CMD_IN_PROGRESS) { while (readw(xl_mmio + MMIO_INTSTATUS) & INTSTAT_CMD_IN_PROGRESS) {
schedule(); schedule();
if(jiffies-t > 10*HZ) { if (time_after(jiffies, t + 10 * HZ)) {
printk(KERN_ERR "%s: 3COM 3C359 Velocity XL-DNDISABLE not responding.\n", dev->name); printk(KERN_ERR "%s: 3COM 3C359 Velocity XL-DNDISABLE not responding.\n", dev->name);
break ; break ;
} }
...@@ -1288,7 +1289,7 @@ static int xl_close(struct net_device *dev) ...@@ -1288,7 +1289,7 @@ static int xl_close(struct net_device *dev)
t=jiffies; t=jiffies;
while (readw(xl_mmio + MMIO_INTSTATUS) & INTSTAT_CMD_IN_PROGRESS) { while (readw(xl_mmio + MMIO_INTSTATUS) & INTSTAT_CMD_IN_PROGRESS) {
schedule(); schedule();
if(jiffies-t > 10*HZ) { if (time_after(jiffies, t + 10 * HZ)) {
printk(KERN_ERR "%s: 3COM 3C359 Velocity XL-UPSTALL not responding.\n", dev->name); printk(KERN_ERR "%s: 3COM 3C359 Velocity XL-UPSTALL not responding.\n", dev->name);
break ; break ;
} }
...@@ -1305,7 +1306,7 @@ static int xl_close(struct net_device *dev) ...@@ -1305,7 +1306,7 @@ static int xl_close(struct net_device *dev)
t=jiffies; t=jiffies;
while (!(readw(xl_mmio + MMIO_INTSTATUS) & INTSTAT_SRB)) { while (!(readw(xl_mmio + MMIO_INTSTATUS) & INTSTAT_SRB)) {
schedule(); schedule();
if(jiffies-t > 10*HZ) { if (time_after(jiffies, t + 10 * HZ)) {
printk(KERN_ERR "%s: 3COM 3C359 Velocity XL-CLOSENIC not responding.\n", dev->name); printk(KERN_ERR "%s: 3COM 3C359 Velocity XL-CLOSENIC not responding.\n", dev->name);
break ; break ;
} }
...@@ -1334,7 +1335,7 @@ static int xl_close(struct net_device *dev) ...@@ -1334,7 +1335,7 @@ static int xl_close(struct net_device *dev)
t=jiffies; t=jiffies;
while (readw(xl_mmio + MMIO_INTSTATUS) & INTSTAT_CMD_IN_PROGRESS) { while (readw(xl_mmio + MMIO_INTSTATUS) & INTSTAT_CMD_IN_PROGRESS) {
schedule(); schedule();
if(jiffies-t > 10*HZ) { if (time_after(jiffies, t + 10 * HZ)) {
printk(KERN_ERR "%s: 3COM 3C359 Velocity XL-UPRESET not responding.\n", dev->name); printk(KERN_ERR "%s: 3COM 3C359 Velocity XL-UPRESET not responding.\n", dev->name);
break ; break ;
} }
...@@ -1343,7 +1344,7 @@ static int xl_close(struct net_device *dev) ...@@ -1343,7 +1344,7 @@ static int xl_close(struct net_device *dev)
t=jiffies; t=jiffies;
while (readw(xl_mmio + MMIO_INTSTATUS) & INTSTAT_CMD_IN_PROGRESS) { while (readw(xl_mmio + MMIO_INTSTATUS) & INTSTAT_CMD_IN_PROGRESS) {
schedule(); schedule();
if(jiffies-t > 10*HZ) { if (time_after(jiffies, t + 10 * HZ)) {
printk(KERN_ERR "%s: 3COM 3C359 Velocity XL-DNRESET not responding.\n", dev->name); printk(KERN_ERR "%s: 3COM 3C359 Velocity XL-DNRESET not responding.\n", dev->name);
break ; break ;
} }
......
This diff is collapsed.
...@@ -283,8 +283,8 @@ struct arcnet_local { ...@@ -283,8 +283,8 @@ struct arcnet_local {
int next_buf, first_free_buf; int next_buf, first_free_buf;
/* network "reconfiguration" handling */ /* network "reconfiguration" handling */
time_t first_recon, /* time of "first" RECON message to count */ unsigned long first_recon; /* time of "first" RECON message to count */
last_recon; /* time of most recent RECON */ unsigned long last_recon; /* time of most recent RECON */
int num_recons; /* number of RECONs between first and last. */ int num_recons; /* number of RECONs between first and last. */
bool network_down; /* do we think the network is down? */ bool network_down; /* do we think the network is down? */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment