[PATCH v4 12/15] drivers/firmware/sdei: Remove _sdei_event_register()
James Morse
james.morse at arm.com
Fri Sep 18 12:14:43 EDT 2020
Hi Gavin,
On 30/07/2020 02:45, Gavin Shan wrote:
> The function _sdei_event_register() is called by sdei_event_register()
> and sdei_device_thaw() as the following functional call chain shows.
> _sdei_event_register() covers the shared and private events, but
> sdei_device_thaw() only covers the shared events. So the logic to
> cover the private events in _sdei_event_register() isn't needed by
> sdei_device_thaw().
>
> Similarly, sdei_reregister_event_llocked() covers the shared and
> private events in the regard of reenablement. The logic to cover
> the private events isn't needed by sdei_device_thaw() either.
These were added for code-reuse instead of duplication, but from the diff-stat it looks
like it cut-in too high up and would have been simpler not to. (I remember cpuhp being a
nightmare)
> sdei_event_register sdei_device_thaw
> _sdei_event_register sdei_reregister_shared
> sdei_reregister_event_llocked
> _sdei_event_register
>
> This removes _sdei_event_register() and sdei_reregister_event_llocked().
> Their logic is moved to sdei_event_register() and sdei_reregister_shared().
> This shouldn't cause any logicial changes.
(logical)
> drivers/firmware/arm_sdei.c | 77 ++++++++++++++-----------------------
> 1 file changed, 28 insertions(+), 49 deletions(-)
> static int sdei_reregister_shared(void)
> {
> int err = 0;
> @@ -674,9 +638,24 @@ static int sdei_reregister_shared(void)
> continue;
>
> if (event->reregister) {
> - err = sdei_reregister_event_llocked(event);
> - if (err)
> + err = sdei_api_event_register(event->event_num,
> + sdei_entry_point, event->registered,
> + SDEI_EVENT_REGISTER_RM_ANY, 0);
> + if (err) {
> + sdei_event_destroy_llocked(event);
> + pr_err("Failed to re-register event %u\n",
> + event->event_num);
sdei_event_destroy_llocked() just free()'d event. You need to print the error first.
> break;
> + }
> + }
> +
> + if (event->reenable) {
> + err = sdei_api_event_enable(event->event_num);
> + if (err) {
> + pr_err("Failed to re-enable event %u\n",
> + event->event_num);
> + break;
> + }
> }
> }
> spin_unlock(&sdei_list_lock);
With the use-after-free fixed:
Reviewed-by: James Morse <james.morse at arm.com>
Thanks,
James
More information about the linux-arm-kernel
mailing list