return event;
 }
 
-static void sdei_event_destroy(struct sdei_event *event)
+static void sdei_event_destroy_llocked(struct sdei_event *event)
 {
        lockdep_assert_held(&sdei_events_lock);
+       lockdep_assert_held(&sdei_list_lock);
 
-       spin_lock(&sdei_list_lock);
        list_del(&event->list);
-       spin_unlock(&sdei_list_lock);
 
        if (event->type == SDEI_EVENT_TYPE_SHARED)
                kfree(event->registered);
        kfree(event);
 }
 
+static void sdei_event_destroy(struct sdei_event *event)
+{
+       spin_lock(&sdei_list_lock);
+       sdei_event_destroy_llocked(event);
+       spin_unlock(&sdei_list_lock);
+}
+
 static int sdei_api_get_version(u64 *version)
 {
        return invoke_sdei_fn(SDEI_1_0_FN_SDEI_VERSION, 0, 0, 0, 0, 0, version);
 }
 EXPORT_SYMBOL(sdei_event_register);
 
-static int sdei_reregister_event(struct sdei_event *event)
+static int sdei_reregister_event_llocked(struct sdei_event *event)
 {
        int err;
 
        lockdep_assert_held(&sdei_events_lock);
+       lockdep_assert_held(&sdei_list_lock);
 
        err = _sdei_event_register(event);
        if (err) {
                pr_err("Failed to re-register event %u\n", event->event_num);
-               sdei_event_destroy(event);
+               sdei_event_destroy_llocked(event);
                return err;
        }
 
                        continue;
 
                if (event->reregister) {
-                       err = sdei_reregister_event(event);
+                       err = sdei_reregister_event_llocked(event);
                        if (err)
                                break;
                }