On Fri, Apr 17, 2020 at 08:49:25AM -0500, Suman Anna wrote: > On 4/15/20 3:48 PM, Mathieu Poirier wrote: > > Make the rproc_ops allocation a function on its own in an effort > > to clean up function rproc_alloc(). > > > > Signed-off-by: Mathieu Poirier <mathieu.poirier@xxxxxxxxxx> > > Reviewed-by: Alex Elder <elder@xxxxxxxxxx> > > --- > > drivers/remoteproc/remoteproc_core.c | 32 +++++++++++++++++----------- > > 1 file changed, 20 insertions(+), 12 deletions(-) > > > > diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c > > index 0bfa6998705d..a5a0ceb86b3f 100644 > > --- a/drivers/remoteproc/remoteproc_core.c > > +++ b/drivers/remoteproc/remoteproc_core.c > > @@ -2001,6 +2001,25 @@ static int rproc_alloc_firmware(struct rproc *rproc, > > return 0; > > } > > +static int rproc_alloc_ops(struct rproc *rproc, const struct rproc_ops *ops) > > +{ > > + rproc->ops = kmemdup(ops, sizeof(*ops), GFP_KERNEL); > > + if (!rproc->ops) > > + return -ENOMEM; > > + > > + /* Default to ELF loader if no load function is specified */ > > + if (!rproc->ops->load) { > > + rproc->ops->load = rproc_elf_load_segments; > > + rproc->ops->parse_fw = rproc_elf_load_rsc_table; > > + rproc->ops->find_loaded_rsc_table = > > + rproc_elf_find_loaded_rsc_table; > > + rproc->ops->sanity_check = rproc_elf_sanity_check; > > So, the conditional check on sanity check is dropped and the callback > switched here without the changelog reflecting anything why. You should just > rebase this patch on top of Clement's patch [1] that removes the conditional > flag, and also usage from the remoteproc platform drivers. That's a rebase that went very wrong... Thanks for pointing it out, Mathieu > > regards > Suman > > [1] https://patchwork.kernel.org/patch/11462013/ > > > > + rproc->ops->get_boot_addr = rproc_elf_get_boot_addr; > > + } > > + > > + return 0; > > +} > > + > > /** > > * rproc_alloc() - allocate a remote processor handle > > * @dev: the underlying device > > @@ -2040,8 +2059,7 @@ struct rproc *rproc_alloc(struct device *dev, const char *name, > > if (rproc_alloc_firmware(rproc, name, firmware)) > > goto free_rproc; > > - rproc->ops = kmemdup(ops, sizeof(*ops), GFP_KERNEL); > > - if (!rproc->ops) > > + if (rproc_alloc_ops(rproc, ops)) > > goto free_firmware; > > rproc->name = name; > > @@ -2068,16 +2086,6 @@ struct rproc *rproc_alloc(struct device *dev, const char *name, > > atomic_set(&rproc->power, 0); > > - /* Default to ELF loader if no load function is specified */ > > - if (!rproc->ops->load) { > > - rproc->ops->load = rproc_elf_load_segments; > > - rproc->ops->parse_fw = rproc_elf_load_rsc_table; > > - rproc->ops->find_loaded_rsc_table = rproc_elf_find_loaded_rsc_table; > > - if (!rproc->ops->sanity_check) > > - rproc->ops->sanity_check = rproc_elf32_sanity_check; > > - rproc->ops->get_boot_addr = rproc_elf_get_boot_addr; > > - } > > - > > mutex_init(&rproc->lock); > > INIT_LIST_HEAD(&rproc->carveouts); > > >