diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/qlge/qlge_main.c | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c index d316e508d06e..16c056a62fc1 100644 --- a/drivers/net/qlge/qlge_main.c +++ b/drivers/net/qlge/qlge_main.c | |||
@@ -418,10 +418,6 @@ int ql_get_routing_reg(struct ql_adapter *qdev, u32 index, u32 *value) | |||
418 | { | 418 | { |
419 | int status = 0; | 419 | int status = 0; |
420 | 420 | ||
421 | status = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK); | ||
422 | if (status) | ||
423 | goto exit; | ||
424 | |||
425 | status = ql_wait_reg_rdy(qdev, RT_IDX, RT_IDX_MW, 0); | 421 | status = ql_wait_reg_rdy(qdev, RT_IDX, RT_IDX_MW, 0); |
426 | if (status) | 422 | if (status) |
427 | goto exit; | 423 | goto exit; |
@@ -433,7 +429,6 @@ int ql_get_routing_reg(struct ql_adapter *qdev, u32 index, u32 *value) | |||
433 | goto exit; | 429 | goto exit; |
434 | *value = ql_read32(qdev, RT_DATA); | 430 | *value = ql_read32(qdev, RT_DATA); |
435 | exit: | 431 | exit: |
436 | ql_sem_unlock(qdev, SEM_RT_IDX_MASK); | ||
437 | return status; | 432 | return status; |
438 | } | 433 | } |
439 | 434 | ||
@@ -445,13 +440,9 @@ exit: | |||
445 | static int ql_set_routing_reg(struct ql_adapter *qdev, u32 index, u32 mask, | 440 | static int ql_set_routing_reg(struct ql_adapter *qdev, u32 index, u32 mask, |
446 | int enable) | 441 | int enable) |
447 | { | 442 | { |
448 | int status; | 443 | int status = -EINVAL; /* Return error if no mask match. */ |
449 | u32 value = 0; | 444 | u32 value = 0; |
450 | 445 | ||
451 | status = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK); | ||
452 | if (status) | ||
453 | return status; | ||
454 | |||
455 | QPRINTK(qdev, IFUP, DEBUG, | 446 | QPRINTK(qdev, IFUP, DEBUG, |
456 | "%s %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s mask %s the routing reg.\n", | 447 | "%s %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s mask %s the routing reg.\n", |
457 | (enable ? "Adding" : "Removing"), | 448 | (enable ? "Adding" : "Removing"), |
@@ -547,7 +538,6 @@ static int ql_set_routing_reg(struct ql_adapter *qdev, u32 index, u32 mask, | |||
547 | ql_write32(qdev, RT_DATA, enable ? mask : 0); | 538 | ql_write32(qdev, RT_DATA, enable ? mask : 0); |
548 | } | 539 | } |
549 | exit: | 540 | exit: |
550 | ql_sem_unlock(qdev, SEM_RT_IDX_MASK); | ||
551 | return status; | 541 | return status; |
552 | } | 542 | } |
553 | 543 | ||
@@ -2916,13 +2906,17 @@ static int ql_route_initialize(struct ql_adapter *qdev) | |||
2916 | int status = 0; | 2906 | int status = 0; |
2917 | int i; | 2907 | int i; |
2918 | 2908 | ||
2909 | status = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK); | ||
2910 | if (status) | ||
2911 | return status; | ||
2912 | |||
2919 | /* Clear all the entries in the routing table. */ | 2913 | /* Clear all the entries in the routing table. */ |
2920 | for (i = 0; i < 16; i++) { | 2914 | for (i = 0; i < 16; i++) { |
2921 | status = ql_set_routing_reg(qdev, i, 0, 0); | 2915 | status = ql_set_routing_reg(qdev, i, 0, 0); |
2922 | if (status) { | 2916 | if (status) { |
2923 | QPRINTK(qdev, IFUP, ERR, | 2917 | QPRINTK(qdev, IFUP, ERR, |
2924 | "Failed to init routing register for CAM packets.\n"); | 2918 | "Failed to init routing register for CAM packets.\n"); |
2925 | return status; | 2919 | goto exit; |
2926 | } | 2920 | } |
2927 | } | 2921 | } |
2928 | 2922 | ||
@@ -2930,13 +2924,13 @@ static int ql_route_initialize(struct ql_adapter *qdev) | |||
2930 | if (status) { | 2924 | if (status) { |
2931 | QPRINTK(qdev, IFUP, ERR, | 2925 | QPRINTK(qdev, IFUP, ERR, |
2932 | "Failed to init routing register for error packets.\n"); | 2926 | "Failed to init routing register for error packets.\n"); |
2933 | return status; | 2927 | goto exit; |
2934 | } | 2928 | } |
2935 | status = ql_set_routing_reg(qdev, RT_IDX_BCAST_SLOT, RT_IDX_BCAST, 1); | 2929 | status = ql_set_routing_reg(qdev, RT_IDX_BCAST_SLOT, RT_IDX_BCAST, 1); |
2936 | if (status) { | 2930 | if (status) { |
2937 | QPRINTK(qdev, IFUP, ERR, | 2931 | QPRINTK(qdev, IFUP, ERR, |
2938 | "Failed to init routing register for broadcast packets.\n"); | 2932 | "Failed to init routing register for broadcast packets.\n"); |
2939 | return status; | 2933 | goto exit; |
2940 | } | 2934 | } |
2941 | /* If we have more than one inbound queue, then turn on RSS in the | 2935 | /* If we have more than one inbound queue, then turn on RSS in the |
2942 | * routing block. | 2936 | * routing block. |
@@ -2947,17 +2941,17 @@ static int ql_route_initialize(struct ql_adapter *qdev) | |||
2947 | if (status) { | 2941 | if (status) { |
2948 | QPRINTK(qdev, IFUP, ERR, | 2942 | QPRINTK(qdev, IFUP, ERR, |
2949 | "Failed to init routing register for MATCH RSS packets.\n"); | 2943 | "Failed to init routing register for MATCH RSS packets.\n"); |
2950 | return status; | 2944 | goto exit; |
2951 | } | 2945 | } |
2952 | } | 2946 | } |
2953 | 2947 | ||
2954 | status = ql_set_routing_reg(qdev, RT_IDX_CAM_HIT_SLOT, | 2948 | status = ql_set_routing_reg(qdev, RT_IDX_CAM_HIT_SLOT, |
2955 | RT_IDX_CAM_HIT, 1); | 2949 | RT_IDX_CAM_HIT, 1); |
2956 | if (status) { | 2950 | if (status) |
2957 | QPRINTK(qdev, IFUP, ERR, | 2951 | QPRINTK(qdev, IFUP, ERR, |
2958 | "Failed to init routing register for CAM packets.\n"); | 2952 | "Failed to init routing register for CAM packets.\n"); |
2959 | return status; | 2953 | exit: |
2960 | } | 2954 | ql_sem_unlock(qdev, SEM_RT_IDX_MASK); |
2961 | return status; | 2955 | return status; |
2962 | } | 2956 | } |
2963 | 2957 | ||
@@ -3518,6 +3512,7 @@ static void qlge_set_multicast_list(struct net_device *ndev) | |||
3518 | } | 3512 | } |
3519 | exit: | 3513 | exit: |
3520 | spin_unlock(&qdev->hw_lock); | 3514 | spin_unlock(&qdev->hw_lock); |
3515 | ql_sem_unlock(qdev, SEM_RT_IDX_MASK); | ||
3521 | } | 3516 | } |
3522 | 3517 | ||
3523 | static int qlge_set_mac_address(struct net_device *ndev, void *p) | 3518 | static int qlge_set_mac_address(struct net_device *ndev, void *p) |