hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/remoteproc/stm32_rproc.c
....@@ -231,11 +231,13 @@
231231 while (of_phandle_iterator_next(&it) == 0) {
232232 rmem = of_reserved_mem_lookup(it.node);
233233 if (!rmem) {
234
+ of_node_put(it.node);
234235 dev_err(dev, "unable to acquire memory-region\n");
235236 return -EINVAL;
236237 }
237238
238239 if (stm32_rproc_pa_to_da(rproc, rmem->base, &da) < 0) {
240
+ of_node_put(it.node);
239241 dev_err(dev, "memory region not valid %pa\n",
240242 &rmem->base);
241243 return -EINVAL;
....@@ -262,8 +264,10 @@
262264 it.node->name);
263265 }
264266
265
- if (!mem)
267
+ if (!mem) {
268
+ of_node_put(it.node);
266269 return -ENOMEM;
270
+ }
267271
268272 rproc_add_carveout(rproc, mem);
269273 index++;
....@@ -297,8 +301,16 @@
297301 struct stm32_mbox *mb = container_of(work, struct stm32_mbox, vq_work);
298302 struct rproc *rproc = dev_get_drvdata(mb->client.dev);
299303
304
+ mutex_lock(&rproc->lock);
305
+
306
+ if (rproc->state != RPROC_RUNNING)
307
+ goto unlock_mutex;
308
+
300309 if (rproc_vq_interrupt(rproc, mb->vq_id) == IRQ_NONE)
301310 dev_dbg(&rproc->dev, "no message found in vq%d\n", mb->vq_id);
311
+
312
+unlock_mutex:
313
+ mutex_unlock(&rproc->lock);
302314 }
303315
304316 static void stm32_rproc_mb_callback(struct mbox_client *cl, void *data)