]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
tasklet: ignore disabled tasklet in tasklet_action v2
authorXiaotian Feng <xtfeng@gmail.com>
Fri, 9 Nov 2012 03:03:52 +0000 (14:03 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Fri, 9 Nov 2012 03:08:28 +0000 (14:08 +1100)
v2 changes:
  - clear TASKLET_STATE_HI bit in tasklet_schedule
  - remove tasklet_hi_enable() as it is exactly the same as tasklet_enable()

Signed-off-by: Xiaotian Feng <dannyfeng@tencent.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
drivers/net/ethernet/jme.c
include/linux/interrupt.h
kernel/softirq.c

index 92317e9c0f736821f605a4e3008b089b1ba9cb63..76a91f6c40cfda698ae8d17f8bd14fc7bb5e0e14 100644 (file)
@@ -1364,8 +1364,8 @@ err_out_free_rx_resources:
        jme_free_rx_resources(jme);
 out_enable_tasklet:
        tasklet_enable(&jme->txclean_task);
-       tasklet_hi_enable(&jme->rxclean_task);
-       tasklet_hi_enable(&jme->rxempty_task);
+       tasklet_enable(&jme->rxclean_task);
+       tasklet_enable(&jme->rxempty_task);
 out:
        atomic_inc(&jme->link_changing);
 }
@@ -1862,8 +1862,8 @@ jme_open(struct net_device *netdev)
 
        tasklet_enable(&jme->linkch_task);
        tasklet_enable(&jme->txclean_task);
-       tasklet_hi_enable(&jme->rxclean_task);
-       tasklet_hi_enable(&jme->rxempty_task);
+       tasklet_enable(&jme->rxclean_task);
+       tasklet_enable(&jme->rxempty_task);
 
        rc = jme_request_irq(jme);
        if (rc)
@@ -2375,8 +2375,8 @@ static inline void jme_resume_rx(struct jme_adapter *jme)
        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);
+               tasklet_enable(&jme->rxclean_task);
+               tasklet_enable(&jme->rxempty_task);
        }
        dpi->cur                = PCC_P1;
        dpi->attempt            = PCC_P1;
@@ -3276,8 +3276,8 @@ jme_suspend(struct device *dev)
        }
 
        tasklet_enable(&jme->txclean_task);
-       tasklet_hi_enable(&jme->rxclean_task);
-       tasklet_hi_enable(&jme->rxempty_task);
+       tasklet_enable(&jme->rxclean_task);
+       tasklet_enable(&jme->rxempty_task);
 
        jme_powersave_phy(jme);
 
index 7e5bb00a3a67e3d5371f4795f941abae3d530bbc..f6178ee2983a122ebc1cfe568e5a42452a37103d 100644 (file)
@@ -604,12 +604,6 @@ static inline void tasklet_enable(struct tasklet_struct *t)
        }
 }
 
-static inline void tasklet_hi_enable(struct tasklet_struct *t)
-{
-       smp_mb__before_atomic_dec();
-       atomic_dec(&t->count);
-}
-
 extern void tasklet_kill(struct tasklet_struct *t);
 extern void tasklet_kill_immediate(struct tasklet_struct *t, unsigned int cpu);
 extern void tasklet_init(struct tasklet_struct *t,
index cb62330f5dad01397975c37f60087c89c48c0696..b95202b51e0767b7a154c27a65578931146c9e22 100644 (file)
@@ -417,6 +417,7 @@ void __tasklet_schedule(struct tasklet_struct *t)
        *__this_cpu_read(tasklet_vec.tail) = t;
        __this_cpu_write(tasklet_vec.tail, &(t->next));
        raise_softirq_irqoff(TASKLET_SOFTIRQ);
+       clear_bit(TASKLET_STATE_HI, &t->state);
        local_irq_restore(flags);
 }