u32 cmd, struct controlvm_message_header *msg_hdr,
           int response, bool need_response)
 {
-       bool notified = false;
        struct controlvm_message_header *pmsg_hdr = NULL;
 
        down(¬ifier_lock);
                case CONTROLVM_BUS_CREATE:
                        if (busdev_notifiers.bus_create) {
                                (*busdev_notifiers.bus_create) (bus_info);
-                               notified = true;
+                               goto out_unlock;
                        }
                        break;
                case CONTROLVM_BUS_DESTROY:
                        if (busdev_notifiers.bus_destroy) {
                                (*busdev_notifiers.bus_destroy) (bus_info);
-                               notified = true;
+                               goto out_unlock;
                        }
                        break;
                }
        }
 
 out_respond_and_unlock:
-       if (notified)
-               /* The callback function just called above is responsible
-                * for calling the appropriate visorchipset_busdev_responders
-                * function, which will call bus_responder()
-                */
-               ;
-       else
-               /*
-                * Do not kfree(pmsg_hdr) as this is the failure path.
-                * The success path ('notified') will call the responder
-                * directly and kfree() there.
-                */
-               bus_responder(cmd, pmsg_hdr, response);
+       bus_responder(cmd, pmsg_hdr, response);
 
 out_unlock:
        up(¬ifier_lock);