Commit fdb0ac80618729e6b12121c66449b8532990eaf3
1 parent
6bfb09a100
Exists in
master
and in
4 other branches
async_tx: make async_tx_run_dependencies() easier to read
* Rename 'next' to 'dep' * Move the channel switch check inside the loop to simplify termination Acked-by: Ilya Yanok <yanok@emcraft.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Showing 1 changed file with 16 additions and 18 deletions Side-by-side Diff
crypto/async_tx/async_tx.c
... | ... | @@ -115,34 +115,32 @@ |
115 | 115 | * (start) dependent operations on their target channel |
116 | 116 | * @tx: transaction with dependencies |
117 | 117 | */ |
118 | -void | |
119 | -async_tx_run_dependencies(struct dma_async_tx_descriptor *tx) | |
118 | +void async_tx_run_dependencies(struct dma_async_tx_descriptor *tx) | |
120 | 119 | { |
121 | - struct dma_async_tx_descriptor *next = tx->next; | |
120 | + struct dma_async_tx_descriptor *dep = tx->next; | |
121 | + struct dma_async_tx_descriptor *dep_next; | |
122 | 122 | struct dma_chan *chan; |
123 | 123 | |
124 | - if (!next) | |
124 | + if (!dep) | |
125 | 125 | return; |
126 | 126 | |
127 | - tx->next = NULL; | |
128 | - chan = next->chan; | |
127 | + chan = dep->chan; | |
129 | 128 | |
130 | 129 | /* keep submitting up until a channel switch is detected |
131 | 130 | * in that case we will be called again as a result of |
132 | 131 | * processing the interrupt from async_tx_channel_switch |
133 | 132 | */ |
134 | - while (next && next->chan == chan) { | |
135 | - struct dma_async_tx_descriptor *_next; | |
133 | + for (; dep; dep = dep_next) { | |
134 | + spin_lock_bh(&dep->lock); | |
135 | + dep->parent = NULL; | |
136 | + dep_next = dep->next; | |
137 | + if (dep_next && dep_next->chan == chan) | |
138 | + dep->next = NULL; /* ->next will be submitted */ | |
139 | + else | |
140 | + dep_next = NULL; /* submit current dep and terminate */ | |
141 | + spin_unlock_bh(&dep->lock); | |
136 | 142 | |
137 | - spin_lock_bh(&next->lock); | |
138 | - next->parent = NULL; | |
139 | - _next = next->next; | |
140 | - if (_next && _next->chan == chan) | |
141 | - next->next = NULL; | |
142 | - spin_unlock_bh(&next->lock); | |
143 | - | |
144 | - next->tx_submit(next); | |
145 | - next = _next; | |
143 | + dep->tx_submit(dep); | |
146 | 144 | } |
147 | 145 | |
148 | 146 | chan->device->device_issue_pending(chan); |