diff options
Diffstat (limited to 'drivers/net/qlge')
-rw-r--r-- | drivers/net/qlge/qlge_main.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c index e6210563abd4..c30e0fe55a31 100644 --- a/drivers/net/qlge/qlge_main.c +++ b/drivers/net/qlge/qlge_main.c | |||
@@ -2385,6 +2385,20 @@ static void qlge_vlan_rx_kill_vid(struct net_device *ndev, u16 vid) | |||
2385 | 2385 | ||
2386 | } | 2386 | } |
2387 | 2387 | ||
2388 | static void qlge_restore_vlan(struct ql_adapter *qdev) | ||
2389 | { | ||
2390 | qlge_vlan_rx_register(qdev->ndev, qdev->vlgrp); | ||
2391 | |||
2392 | if (qdev->vlgrp) { | ||
2393 | u16 vid; | ||
2394 | for (vid = 0; vid < VLAN_N_VID; vid++) { | ||
2395 | if (!vlan_group_get_device(qdev->vlgrp, vid)) | ||
2396 | continue; | ||
2397 | qlge_vlan_rx_add_vid(qdev->ndev, vid); | ||
2398 | } | ||
2399 | } | ||
2400 | } | ||
2401 | |||
2388 | /* MSI-X Multiple Vector Interrupt Handler for inbound completions. */ | 2402 | /* MSI-X Multiple Vector Interrupt Handler for inbound completions. */ |
2389 | static irqreturn_t qlge_msix_rx_isr(int irq, void *dev_id) | 2403 | static irqreturn_t qlge_msix_rx_isr(int irq, void *dev_id) |
2390 | { | 2404 | { |
@@ -3960,6 +3974,9 @@ static int ql_adapter_up(struct ql_adapter *qdev) | |||
3960 | clear_bit(QL_PROMISCUOUS, &qdev->flags); | 3974 | clear_bit(QL_PROMISCUOUS, &qdev->flags); |
3961 | qlge_set_multicast_list(qdev->ndev); | 3975 | qlge_set_multicast_list(qdev->ndev); |
3962 | 3976 | ||
3977 | /* Restore vlan setting. */ | ||
3978 | qlge_restore_vlan(qdev); | ||
3979 | |||
3963 | ql_enable_interrupts(qdev); | 3980 | ql_enable_interrupts(qdev); |
3964 | ql_enable_all_completion_interrupts(qdev); | 3981 | ql_enable_all_completion_interrupts(qdev); |
3965 | netif_tx_start_all_queues(qdev->ndev); | 3982 | netif_tx_start_all_queues(qdev->ndev); |