Re: [PATCH v4 12/15] drivers/firmware/sdei: Remove _sdei_event_register()
From: James Morse <james.morse@arm.com>
Date: 2020-09-18 16:16:38
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(-)
quoted hunk ↗ jump to hunk
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@arm.com> Thanks, James _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel