| .. | .. |
|---|
| 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) |
|---|