{
        lockdep_assert_held(&sdei_events_lock);
 
-       spin_lock(&sdei_list_lock);
-       event->reregister = false;
-       event->reenable = false;
-       spin_unlock(&sdei_list_lock);
-
        if (event->type == SDEI_EVENT_TYPE_SHARED)
                return sdei_api_event_unregister(event->event_num);
 
                        break;
                }
 
+               spin_lock(&sdei_list_lock);
+               event->reregister = false;
+               event->reenable = false;
+               spin_unlock(&sdei_list_lock);
+
                err = _sdei_event_unregister(event);
                if (err)
                        break;
 
        lockdep_assert_held(&sdei_events_lock);
 
-       spin_lock(&sdei_list_lock);
-       event->reregister = true;
-       spin_unlock(&sdei_list_lock);
-
        if (event->type == SDEI_EVENT_TYPE_SHARED)
                return sdei_api_event_register(event->event_num,
                                               sdei_entry_point,
                                               event->registered,
                                               SDEI_EVENT_REGISTER_RM_ANY, 0);
 
-
        err = sdei_do_cross_call(_local_event_register, event);
-       if (err) {
-               spin_lock(&sdei_list_lock);
-               event->reregister = false;
-               event->reenable = false;
-               spin_unlock(&sdei_list_lock);
-
+       if (err)
                sdei_do_cross_call(_local_event_unregister, event);
-       }
 
        return err;
 }
                        break;
                }
 
+               spin_lock(&sdei_list_lock);
+               event->reregister = true;
+               spin_unlock(&sdei_list_lock);
+
                err = _sdei_event_register(event);
                if (err) {
+                       spin_lock(&sdei_list_lock);
+                       event->reregister = false;
+                       event->reenable = false;
+                       spin_unlock(&sdei_list_lock);
+
                        sdei_event_destroy(event);
                        pr_warn("Failed to register event %u: %d\n", event_num,
                                err);