|
@@ -2083,12 +2083,45 @@ jme_tx_timeout(struct net_device *netdev)
|
|
|
jme_reset_link(jme);
|
|
|
}
|
|
|
|
|
|
+static inline void jme_pause_rx(struct jme_adapter *jme)
|
|
|
+{
|
|
|
+ atomic_dec(&jme->link_changing);
|
|
|
+
|
|
|
+ jme_set_rx_pcc(jme, PCC_OFF);
|
|
|
+ if (test_bit(JME_FLAG_POLL, &jme->flags)) {
|
|
|
+ JME_NAPI_DISABLE(jme);
|
|
|
+ } else {
|
|
|
+ tasklet_disable(&jme->rxclean_task);
|
|
|
+ tasklet_disable(&jme->rxempty_task);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static inline void jme_resume_rx(struct jme_adapter *jme)
|
|
|
+{
|
|
|
+ struct dynpcc_info *dpi = &(jme->dpi);
|
|
|
+
|
|
|
+ if (test_bit(JME_FLAG_POLL, &jme->flags)) {
|
|
|
+ JME_NAPI_ENABLE(jme);
|
|
|
+ } else {
|
|
|
+ tasklet_hi_enable(&jme->rxclean_task);
|
|
|
+ tasklet_hi_enable(&jme->rxempty_task);
|
|
|
+ }
|
|
|
+ dpi->cur = PCC_P1;
|
|
|
+ dpi->attempt = PCC_P1;
|
|
|
+ dpi->cnt = 0;
|
|
|
+ jme_set_rx_pcc(jme, PCC_P1);
|
|
|
+
|
|
|
+ atomic_inc(&jme->link_changing);
|
|
|
+}
|
|
|
+
|
|
|
static void
|
|
|
jme_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
|
|
|
{
|
|
|
struct jme_adapter *jme = netdev_priv(netdev);
|
|
|
|
|
|
+ jme_pause_rx(jme);
|
|
|
jme->vlgrp = grp;
|
|
|
+ jme_resume_rx(jme);
|
|
|
}
|
|
|
|
|
|
static void
|