aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ehea
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ehea')
-rw-r--r--drivers/net/ehea/ehea.h2
-rw-r--r--drivers/net/ehea/ehea_main.c44
2 files changed, 24 insertions, 22 deletions
diff --git a/drivers/net/ehea/ehea.h b/drivers/net/ehea/ehea.h
index b5c8eb96bd26..26acd05c80b5 100644
--- a/drivers/net/ehea/ehea.h
+++ b/drivers/net/ehea/ehea.h
@@ -452,7 +452,7 @@ struct ehea_port {
452 struct vlan_group *vgrp; 452 struct vlan_group *vgrp;
453 struct ehea_eq *qp_eq; 453 struct ehea_eq *qp_eq;
454 struct work_struct reset_task; 454 struct work_struct reset_task;
455 struct semaphore port_lock; 455 struct mutex port_lock;
456 char int_aff_name[EHEA_IRQ_NAME_SIZE]; 456 char int_aff_name[EHEA_IRQ_NAME_SIZE];
457 int allmulti; /* Indicates IFF_ALLMULTI state */ 457 int allmulti; /* Indicates IFF_ALLMULTI state */
458 int promisc; /* Indicates IFF_PROMISC state */ 458 int promisc; /* Indicates IFF_PROMISC state */
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c
index 73dd6f9dfbbe..0c1c360a85ca 100644
--- a/drivers/net/ehea/ehea_main.c
+++ b/drivers/net/ehea/ehea_main.c
@@ -2543,7 +2543,7 @@ static int ehea_open(struct net_device *dev)
2543 int ret; 2543 int ret;
2544 struct ehea_port *port = netdev_priv(dev); 2544 struct ehea_port *port = netdev_priv(dev);
2545 2545
2546 down(&port->port_lock); 2546 mutex_lock(&port->port_lock);
2547 2547
2548 if (netif_msg_ifup(port)) 2548 if (netif_msg_ifup(port))
2549 ehea_info("enabling port %s", dev->name); 2549 ehea_info("enabling port %s", dev->name);
@@ -2554,7 +2554,7 @@ static int ehea_open(struct net_device *dev)
2554 netif_start_queue(dev); 2554 netif_start_queue(dev);
2555 } 2555 }
2556 2556
2557 up(&port->port_lock); 2557 mutex_unlock(&port->port_lock);
2558 2558
2559 return ret; 2559 return ret;
2560} 2560}
@@ -2600,11 +2600,11 @@ static int ehea_stop(struct net_device *dev)
2600 ehea_info("disabling port %s", dev->name); 2600 ehea_info("disabling port %s", dev->name);
2601 2601
2602 flush_scheduled_work(); 2602 flush_scheduled_work();
2603 down(&port->port_lock); 2603 mutex_lock(&port->port_lock);
2604 netif_stop_queue(dev); 2604 netif_stop_queue(dev);
2605 port_napi_disable(port); 2605 port_napi_disable(port);
2606 ret = ehea_down(dev); 2606 ret = ehea_down(dev);
2607 up(&port->port_lock); 2607 mutex_unlock(&port->port_lock);
2608 return ret; 2608 return ret;
2609} 2609}
2610 2610
@@ -2802,7 +2802,7 @@ static void ehea_reset_port(struct work_struct *work)
2802 struct net_device *dev = port->netdev; 2802 struct net_device *dev = port->netdev;
2803 2803
2804 port->resets++; 2804 port->resets++;
2805 down(&port->port_lock); 2805 mutex_lock(&port->port_lock);
2806 netif_stop_queue(dev); 2806 netif_stop_queue(dev);
2807 2807
2808 port_napi_disable(port); 2808 port_napi_disable(port);
@@ -2822,7 +2822,7 @@ static void ehea_reset_port(struct work_struct *work)
2822 2822
2823 netif_wake_queue(dev); 2823 netif_wake_queue(dev);
2824out: 2824out:
2825 up(&port->port_lock); 2825 mutex_unlock(&port->port_lock);
2826 return; 2826 return;
2827} 2827}
2828 2828
@@ -2839,21 +2839,23 @@ static void ehea_rereg_mrs(struct work_struct *work)
2839 /* Shutdown all ports */ 2839 /* Shutdown all ports */
2840 for (i = 0; i < EHEA_MAX_PORTS; i++) { 2840 for (i = 0; i < EHEA_MAX_PORTS; i++) {
2841 struct ehea_port *port = adapter->port[i]; 2841 struct ehea_port *port = adapter->port[i];
2842 struct net_device *dev;
2842 2843
2843 if (port) { 2844 if (!port)
2844 struct net_device *dev = port->netdev; 2845 continue;
2845 2846
2846 if (dev->flags & IFF_UP) { 2847 dev = port->netdev;
2847 down(&port->port_lock); 2848
2848 netif_stop_queue(dev); 2849 if (dev->flags & IFF_UP) {
2849 ret = ehea_stop_qps(dev); 2850 mutex_lock(&port->port_lock);
2850 if (ret) { 2851 netif_stop_queue(dev);
2851 up(&port->port_lock); 2852 ret = ehea_stop_qps(dev);
2852 goto out; 2853 if (ret) {
2853 } 2854 mutex_unlock(&port->port_lock);
2854 port_napi_disable(port); 2855 goto out;
2855 up(&port->port_lock);
2856 } 2856 }
2857 port_napi_disable(port);
2858 mutex_unlock(&port->port_lock);
2857 } 2859 }
2858 } 2860 }
2859 2861
@@ -2893,12 +2895,12 @@ static void ehea_rereg_mrs(struct work_struct *work)
2893 struct net_device *dev = port->netdev; 2895 struct net_device *dev = port->netdev;
2894 2896
2895 if (dev->flags & IFF_UP) { 2897 if (dev->flags & IFF_UP) {
2896 down(&port->port_lock); 2898 mutex_lock(&port->port_lock);
2897 port_napi_enable(port); 2899 port_napi_enable(port);
2898 ret = ehea_restart_qps(dev); 2900 ret = ehea_restart_qps(dev);
2899 if (!ret) 2901 if (!ret)
2900 netif_wake_queue(dev); 2902 netif_wake_queue(dev);
2901 up(&port->port_lock); 2903 mutex_unlock(&port->port_lock);
2902 } 2904 }
2903 } 2905 }
2904 } 2906 }
@@ -3064,7 +3066,7 @@ struct ehea_port *ehea_setup_single_port(struct ehea_adapter *adapter,
3064 3066
3065 port = netdev_priv(dev); 3067 port = netdev_priv(dev);
3066 3068
3067 sema_init(&port->port_lock, 1); 3069 mutex_init(&port->port_lock);
3068 port->state = EHEA_PORT_DOWN; 3070 port->state = EHEA_PORT_DOWN;
3069 port->sig_comp_iv = sq_entries / 10; 3071 port->sig_comp_iv = sq_entries / 10;
3070 3072