.. | .. |
---|
231 | 231 | while (of_phandle_iterator_next(&it) == 0) { |
---|
232 | 232 | rmem = of_reserved_mem_lookup(it.node); |
---|
233 | 233 | if (!rmem) { |
---|
| 234 | + of_node_put(it.node); |
---|
234 | 235 | dev_err(dev, "unable to acquire memory-region\n"); |
---|
235 | 236 | return -EINVAL; |
---|
236 | 237 | } |
---|
237 | 238 | |
---|
238 | 239 | if (stm32_rproc_pa_to_da(rproc, rmem->base, &da) < 0) { |
---|
| 240 | + of_node_put(it.node); |
---|
239 | 241 | dev_err(dev, "memory region not valid %pa\n", |
---|
240 | 242 | &rmem->base); |
---|
241 | 243 | return -EINVAL; |
---|
.. | .. |
---|
262 | 264 | it.node->name); |
---|
263 | 265 | } |
---|
264 | 266 | |
---|
265 | | - if (!mem) |
---|
| 267 | + if (!mem) { |
---|
| 268 | + of_node_put(it.node); |
---|
266 | 269 | return -ENOMEM; |
---|
| 270 | + } |
---|
267 | 271 | |
---|
268 | 272 | rproc_add_carveout(rproc, mem); |
---|
269 | 273 | index++; |
---|
.. | .. |
---|
297 | 301 | struct stm32_mbox *mb = container_of(work, struct stm32_mbox, vq_work); |
---|
298 | 302 | struct rproc *rproc = dev_get_drvdata(mb->client.dev); |
---|
299 | 303 | |
---|
| 304 | + mutex_lock(&rproc->lock); |
---|
| 305 | + |
---|
| 306 | + if (rproc->state != RPROC_RUNNING) |
---|
| 307 | + goto unlock_mutex; |
---|
| 308 | + |
---|
300 | 309 | if (rproc_vq_interrupt(rproc, mb->vq_id) == IRQ_NONE) |
---|
301 | 310 | dev_dbg(&rproc->dev, "no message found in vq%d\n", mb->vq_id); |
---|
| 311 | + |
---|
| 312 | +unlock_mutex: |
---|
| 313 | + mutex_unlock(&rproc->lock); |
---|
302 | 314 | } |
---|
303 | 315 | |
---|
304 | 316 | static void stm32_rproc_mb_callback(struct mbox_client *cl, void *data) |
---|