Messages in this thread |  | | From | Eric Curtin <> | Date | Sun, 22 Jan 2023 12:16:28 +0000 | Subject | Re: [PATCH] soc: apple: rtkit: Export non-devm init/free functions |
| |
On Sat, 21 Jan 2023 at 07:48, Asahi Lina <lina@asahilina.net> wrote: > > While we normally encourage devm usage by drivers, some consumers (and > in particular the upcoming Rust abstractions) might want to manually > manage memory. Export the raw functions to make this possible. > > Signed-off-by: Asahi Lina <lina@asahilina.net> > ---
Signed-off-by: Eric Curtin <ecurtin@redhat.com>
Is mise le meas/Regards,
Eric Curtin
> drivers/soc/apple/rtkit.c | 15 ++++++++++----- > include/linux/soc/apple/rtkit.h | 19 +++++++++++++++++++ > 2 files changed, 29 insertions(+), 5 deletions(-) > > diff --git a/drivers/soc/apple/rtkit.c b/drivers/soc/apple/rtkit.c > index fa3cda831d2b..bb33f3cd4efd 100644 > --- a/drivers/soc/apple/rtkit.c > +++ b/drivers/soc/apple/rtkit.c > @@ -686,7 +686,7 @@ static int apple_rtkit_request_mbox_chan(struct apple_rtkit *rtk) > return mbox_start_channel(rtk->mbox_chan); > } > > -static struct apple_rtkit *apple_rtkit_init(struct device *dev, void *cookie, > +struct apple_rtkit *apple_rtkit_init(struct device *dev, void *cookie, > const char *mbox_name, int mbox_idx, > const struct apple_rtkit_ops *ops) > { > @@ -739,6 +739,7 @@ static struct apple_rtkit *apple_rtkit_init(struct device *dev, void *cookie, > kfree(rtk); > return ERR_PTR(ret); > } > +EXPORT_SYMBOL_GPL(apple_rtkit_init); > > static int apple_rtkit_wait_for_completion(struct completion *c) > { > @@ -922,10 +923,8 @@ int apple_rtkit_wake(struct apple_rtkit *rtk) > } > EXPORT_SYMBOL_GPL(apple_rtkit_wake); > > -static void apple_rtkit_free(void *data) > +void apple_rtkit_free(struct apple_rtkit *rtk) > { > - struct apple_rtkit *rtk = data; > - > mbox_free_channel(rtk->mbox_chan); > destroy_workqueue(rtk->wq); > > @@ -936,6 +935,12 @@ static void apple_rtkit_free(void *data) > kfree(rtk->syslog_msg_buffer); > kfree(rtk); > } > +EXPORT_SYMBOL_GPL(apple_rtkit_free); > + > +static void apple_rtkit_free_wrapper(void *data) > +{ > + apple_rtkit_free(data); > +} > > struct apple_rtkit *devm_apple_rtkit_init(struct device *dev, void *cookie, > const char *mbox_name, int mbox_idx, > @@ -948,7 +953,7 @@ struct apple_rtkit *devm_apple_rtkit_init(struct device *dev, void *cookie, > if (IS_ERR(rtk)) > return rtk; > > - ret = devm_add_action_or_reset(dev, apple_rtkit_free, rtk); > + ret = devm_add_action_or_reset(dev, apple_rtkit_free_wrapper, rtk); > if (ret) > return ERR_PTR(ret); > > diff --git a/include/linux/soc/apple/rtkit.h b/include/linux/soc/apple/rtkit.h > index 2d837aa7b91f..62bfa37b5adb 100644 > --- a/include/linux/soc/apple/rtkit.h > +++ b/include/linux/soc/apple/rtkit.h > @@ -77,6 +77,25 @@ struct apple_rtkit *devm_apple_rtkit_init(struct device *dev, void *cookie, > const char *mbox_name, int mbox_idx, > const struct apple_rtkit_ops *ops); > > +/* > + * Non-devm version of devm_apple_rtkit_init. Must be freed with > + * apple_rtkit_free. > + * > + * @dev: Pointer to the device node this coprocessor is assocated with > + * @cookie: opaque cookie passed to all functions defined in rtkit_ops > + * @mbox_name: mailbox name used to communicate with the co-processor > + * @mbox_idx: mailbox index to be used if mbox_name is NULL > + * @ops: pointer to rtkit_ops to be used for this co-processor > + */ > +struct apple_rtkit *apple_rtkit_init(struct device *dev, void *cookie, > + const char *mbox_name, int mbox_idx, > + const struct apple_rtkit_ops *ops); > + > +/* > + * Free an instance of apple_rtkit. > + */ > +void apple_rtkit_free(struct apple_rtkit *rtk); > + > /* > * Reinitialize internal structures. Must only be called with the co-processor > * is held in reset. > -- > 2.35.1 > >
|  |