if (!service->ref_count) {
                VCHIQ_STATE_T *state = service->state;
 
-               BUG_ON(service->srvstate != VCHIQ_SRVSTATE_FREE);
+               WARN_ON(service->srvstate != VCHIQ_SRVSTATE_FREE);
                state->services[service->localport] = NULL;
        } else {
                service = NULL;
                        return VCHIQ_ERROR;
                }
 
-               BUG_ON((flags & (QMFLAGS_NO_MUTEX_LOCK |
-                                QMFLAGS_NO_MUTEX_UNLOCK)) != 0);
+               WARN_ON((flags & (QMFLAGS_NO_MUTEX_LOCK |
+                                 QMFLAGS_NO_MUTEX_UNLOCK)) != 0);
 
                if (service->closing) {
                        /* The service has been closed */
                        header, size, VCHIQ_MSG_SRCPORT(msgid),
                        VCHIQ_MSG_DSTPORT(msgid));
 
-               BUG_ON((flags & (QMFLAGS_NO_MUTEX_LOCK |
-                                QMFLAGS_NO_MUTEX_UNLOCK)) != 0);
+               WARN_ON((flags & (QMFLAGS_NO_MUTEX_LOCK |
+                                 QMFLAGS_NO_MUTEX_UNLOCK)) != 0);
 
                callback_result =
                        copy_message_data(copy_callback, context,
        if (current == service->state->slot_handler_thread) {
                status = vchiq_close_service_internal(service,
                        0/*!close_recvd*/);
-               BUG_ON(status == VCHIQ_RETRY);
+               WARN_ON(status == VCHIQ_RETRY);
        } else {
        /* Mark the service for termination by the slot handler */
                request_poll(service->state, service, VCHIQ_POLL_TERMINATE);
 
                status = vchiq_close_service_internal(service,
                        0/*!close_recvd*/);
-               BUG_ON(status == VCHIQ_RETRY);
+               WARN_ON(status == VCHIQ_RETRY);
        } else {
                /* Mark the service for removal by the slot handler */
                request_poll(service->state, service, VCHIQ_POLL_REMOVE);