static void sdma_put(struct sdma_state *);
 static void sdma_set_state(struct sdma_engine *, enum sdma_states);
 static void sdma_start_hw_clean_up(struct sdma_engine *);
-static void sdma_start_sw_clean_up(struct sdma_engine *);
 static void sdma_sw_clean_up_task(unsigned long);
 static void sdma_sendctrl(struct sdma_engine *, unsigned);
 static void init_sdma_regs(struct sdma_engine *, u32, uint);
        sdma_process_event(sde, sdma_event_e15_hw_halt_done);
 }
 
-static void sdma_start_err_halt_wait(struct sdma_engine *sde)
-{
-       schedule_work(&sde->err_halt_worker);
-}
-
-
 static void sdma_err_progress_check_schedule(struct sdma_engine *sde)
 {
        if (!is_bx(sde->dd) && HFI1_CAP_IS_KSET(SDMA_AHG)) {
        tasklet_hi_schedule(&sde->sdma_hw_clean_up_task);
 }
 
-static void sdma_start_sw_clean_up(struct sdma_engine *sde)
-{
-       tasklet_hi_schedule(&sde->sdma_sw_clean_up_task);
-}
-
 static void sdma_set_state(struct sdma_engine *sde,
        enum sdma_states next_state)
 {
                case sdma_event_e50_hw_cleaned:
                        break;
                case sdma_event_e60_hw_halted:
-                       sdma_start_err_halt_wait(sde);
+                       schedule_work(&sde->err_halt_worker);
                        break;
                case sdma_event_e70_go_idle:
                        ss->go_s99_running = 0;
                        break;
                case sdma_event_e60_hw_halted:
                        sdma_set_state(sde, sdma_state_s50_hw_halt_wait);
-                       sdma_start_err_halt_wait(sde);
+                       schedule_work(&sde->err_halt_worker);
                        break;
                case sdma_event_e70_go_idle:
                        break;
                switch (event) {
                case sdma_event_e00_go_hw_down:
                        sdma_set_state(sde, sdma_state_s00_hw_down);
-                       sdma_start_sw_clean_up(sde);
+                       tasklet_hi_schedule(&sde->sdma_sw_clean_up_task);
                        break;
                case sdma_event_e10_go_hw_start:
                        break;
                switch (event) {
                case sdma_event_e00_go_hw_down:
                        sdma_set_state(sde, sdma_state_s00_hw_down);
-                       sdma_start_sw_clean_up(sde);
+                       tasklet_hi_schedule(&sde->sdma_sw_clean_up_task);
                        break;
                case sdma_event_e10_go_hw_start:
                        break;
                case sdma_event_e15_hw_halt_done:
                        sdma_set_state(sde, sdma_state_s30_sw_clean_up_wait);
-                       sdma_start_sw_clean_up(sde);
+                       tasklet_hi_schedule(&sde->sdma_sw_clean_up_task);
                        break;
                case sdma_event_e25_hw_clean_up_done:
                        break;
                case sdma_event_e50_hw_cleaned:
                        break;
                case sdma_event_e60_hw_halted:
-                       sdma_start_err_halt_wait(sde);
+                       schedule_work(&sde->err_halt_worker);
                        break;
                case sdma_event_e70_go_idle:
                        ss->go_s99_running = 0;
                switch (event) {
                case sdma_event_e00_go_hw_down:
                        sdma_set_state(sde, sdma_state_s00_hw_down);
-                       sdma_start_sw_clean_up(sde);
+                       tasklet_hi_schedule(&sde->sdma_sw_clean_up_task);
                        break;
                case sdma_event_e10_go_hw_start:
                        break;
                case sdma_event_e15_hw_halt_done:
                        sdma_set_state(sde, sdma_state_s30_sw_clean_up_wait);
-                       sdma_start_sw_clean_up(sde);
+                       tasklet_hi_schedule(&sde->sdma_sw_clean_up_task);
                        break;
                case sdma_event_e25_hw_clean_up_done:
                        break;
                case sdma_event_e50_hw_cleaned:
                        break;
                case sdma_event_e60_hw_halted:
-                       sdma_start_err_halt_wait(sde);
+                       schedule_work(&sde->err_halt_worker);
                        break;
                case sdma_event_e70_go_idle:
                        ss->go_s99_running = 0;
                switch (event) {
                case sdma_event_e00_go_hw_down:
                        sdma_set_state(sde, sdma_state_s00_hw_down);
-                       sdma_start_sw_clean_up(sde);
+                       tasklet_hi_schedule(&sde->sdma_sw_clean_up_task);
                        break;
                case sdma_event_e10_go_hw_start:
                        break;
                        break;
                case sdma_event_e81_hw_frozen:
                        sdma_set_state(sde, sdma_state_s82_freeze_sw_clean);
-                       sdma_start_sw_clean_up(sde);
+                       tasklet_hi_schedule(&sde->sdma_sw_clean_up_task);
                        break;
                case sdma_event_e82_hw_unfreeze:
                        break;
                switch (event) {
                case sdma_event_e00_go_hw_down:
                        sdma_set_state(sde, sdma_state_s00_hw_down);
-                       sdma_start_sw_clean_up(sde);
+                       tasklet_hi_schedule(&sde->sdma_sw_clean_up_task);
                        break;
                case sdma_event_e10_go_hw_start:
                        break;
                switch (event) {
                case sdma_event_e00_go_hw_down:
                        sdma_set_state(sde, sdma_state_s00_hw_down);
-                       sdma_start_sw_clean_up(sde);
+                       tasklet_hi_schedule(&sde->sdma_sw_clean_up_task);
                        break;
                case sdma_event_e10_go_hw_start:
                        break;
                        * progress check
                        */
                        sdma_set_state(sde, sdma_state_s50_hw_halt_wait);
-                       sdma_start_err_halt_wait(sde);
+                       schedule_work(&sde->err_halt_worker);
                        break;
                case sdma_event_e70_go_idle:
                        sdma_set_state(sde, sdma_state_s60_idle_halt_wait);