Loading drivers/block/rsxx/dma.c +27 −8 Original line number Diff line number Diff line Loading @@ -381,15 +381,13 @@ static void dma_engine_stalled(unsigned long data) } } static void rsxx_issue_dmas(struct work_struct *work) static void rsxx_issue_dmas(struct rsxx_dma_ctrl *ctrl) { struct rsxx_dma_ctrl *ctrl; struct rsxx_dma *dma; int tag; int cmds_pending = 0; struct hw_cmd *hw_cmd_buf; ctrl = container_of(work, struct rsxx_dma_ctrl, issue_dma_work); hw_cmd_buf = ctrl->cmd.buf; if (unlikely(ctrl->card->halt) || Loading Loading @@ -469,9 +467,8 @@ static void rsxx_issue_dmas(struct work_struct *work) } } static void rsxx_dma_done(struct work_struct *work) static void rsxx_dma_done(struct rsxx_dma_ctrl *ctrl) { struct rsxx_dma_ctrl *ctrl; struct rsxx_dma *dma; unsigned long flags; u16 count; Loading @@ -479,7 +476,6 @@ static void rsxx_dma_done(struct work_struct *work) u8 tag; struct hw_status *hw_st_buf; ctrl = container_of(work, struct rsxx_dma_ctrl, dma_done_work); hw_st_buf = ctrl->status.buf; if (unlikely(ctrl->card->halt) || Loading Loading @@ -555,6 +551,28 @@ static void rsxx_dma_done(struct work_struct *work) spin_unlock_bh(&ctrl->queue_lock); } static void rsxx_schedule_issue(struct work_struct *work) { struct rsxx_dma_ctrl *ctrl; ctrl = container_of(work, struct rsxx_dma_ctrl, issue_dma_work); mutex_lock(&ctrl->work_lock); rsxx_issue_dmas(ctrl); mutex_unlock(&ctrl->work_lock); } static void rsxx_schedule_done(struct work_struct *work) { struct rsxx_dma_ctrl *ctrl; ctrl = container_of(work, struct rsxx_dma_ctrl, dma_done_work); mutex_lock(&ctrl->work_lock); rsxx_dma_done(ctrl); mutex_unlock(&ctrl->work_lock); } static int rsxx_queue_discard(struct rsxx_cardinfo *card, struct list_head *q, unsigned int laddr, Loading Loading @@ -789,6 +807,7 @@ static int rsxx_dma_ctrl_init(struct pci_dev *dev, spin_lock_init(&ctrl->trackers->lock); spin_lock_init(&ctrl->queue_lock); mutex_init(&ctrl->work_lock); INIT_LIST_HEAD(&ctrl->queue); setup_timer(&ctrl->activity_timer, dma_engine_stalled, Loading @@ -802,8 +821,8 @@ static int rsxx_dma_ctrl_init(struct pci_dev *dev, if (!ctrl->done_wq) return -ENOMEM; INIT_WORK(&ctrl->issue_dma_work, rsxx_issue_dmas); INIT_WORK(&ctrl->dma_done_work, rsxx_dma_done); INIT_WORK(&ctrl->issue_dma_work, rsxx_schedule_issue); INIT_WORK(&ctrl->dma_done_work, rsxx_schedule_done); st = rsxx_hw_buffers_init(dev, ctrl); if (st) Loading drivers/block/rsxx/rsxx_priv.h +1 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ struct rsxx_dma_ctrl { struct timer_list activity_timer; struct dma_tracker_list *trackers; struct rsxx_dma_stats stats; struct mutex work_lock; }; struct rsxx_cardinfo { Loading Loading
drivers/block/rsxx/dma.c +27 −8 Original line number Diff line number Diff line Loading @@ -381,15 +381,13 @@ static void dma_engine_stalled(unsigned long data) } } static void rsxx_issue_dmas(struct work_struct *work) static void rsxx_issue_dmas(struct rsxx_dma_ctrl *ctrl) { struct rsxx_dma_ctrl *ctrl; struct rsxx_dma *dma; int tag; int cmds_pending = 0; struct hw_cmd *hw_cmd_buf; ctrl = container_of(work, struct rsxx_dma_ctrl, issue_dma_work); hw_cmd_buf = ctrl->cmd.buf; if (unlikely(ctrl->card->halt) || Loading Loading @@ -469,9 +467,8 @@ static void rsxx_issue_dmas(struct work_struct *work) } } static void rsxx_dma_done(struct work_struct *work) static void rsxx_dma_done(struct rsxx_dma_ctrl *ctrl) { struct rsxx_dma_ctrl *ctrl; struct rsxx_dma *dma; unsigned long flags; u16 count; Loading @@ -479,7 +476,6 @@ static void rsxx_dma_done(struct work_struct *work) u8 tag; struct hw_status *hw_st_buf; ctrl = container_of(work, struct rsxx_dma_ctrl, dma_done_work); hw_st_buf = ctrl->status.buf; if (unlikely(ctrl->card->halt) || Loading Loading @@ -555,6 +551,28 @@ static void rsxx_dma_done(struct work_struct *work) spin_unlock_bh(&ctrl->queue_lock); } static void rsxx_schedule_issue(struct work_struct *work) { struct rsxx_dma_ctrl *ctrl; ctrl = container_of(work, struct rsxx_dma_ctrl, issue_dma_work); mutex_lock(&ctrl->work_lock); rsxx_issue_dmas(ctrl); mutex_unlock(&ctrl->work_lock); } static void rsxx_schedule_done(struct work_struct *work) { struct rsxx_dma_ctrl *ctrl; ctrl = container_of(work, struct rsxx_dma_ctrl, dma_done_work); mutex_lock(&ctrl->work_lock); rsxx_dma_done(ctrl); mutex_unlock(&ctrl->work_lock); } static int rsxx_queue_discard(struct rsxx_cardinfo *card, struct list_head *q, unsigned int laddr, Loading Loading @@ -789,6 +807,7 @@ static int rsxx_dma_ctrl_init(struct pci_dev *dev, spin_lock_init(&ctrl->trackers->lock); spin_lock_init(&ctrl->queue_lock); mutex_init(&ctrl->work_lock); INIT_LIST_HEAD(&ctrl->queue); setup_timer(&ctrl->activity_timer, dma_engine_stalled, Loading @@ -802,8 +821,8 @@ static int rsxx_dma_ctrl_init(struct pci_dev *dev, if (!ctrl->done_wq) return -ENOMEM; INIT_WORK(&ctrl->issue_dma_work, rsxx_issue_dmas); INIT_WORK(&ctrl->dma_done_work, rsxx_dma_done); INIT_WORK(&ctrl->issue_dma_work, rsxx_schedule_issue); INIT_WORK(&ctrl->dma_done_work, rsxx_schedule_done); st = rsxx_hw_buffers_init(dev, ctrl); if (st) Loading
drivers/block/rsxx/rsxx_priv.h +1 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ struct rsxx_dma_ctrl { struct timer_list activity_timer; struct dma_tracker_list *trackers; struct rsxx_dma_stats stats; struct mutex work_lock; }; struct rsxx_cardinfo { Loading