usb.patch

diff --git a/src/app/virtualbox/src/VBox/Devices/USB/USBProxyDevice.cpp b/src/app/virtualbox/src/VBox/Devices/USB/USBProxyDevice.cpp
index a51bc36..bed42e8 100644
--- a/src/app/virtualbox/src/VBox/Devices/USB/USBProxyDevice.cpp
+++ b/src/app/virtualbox/src/VBox/Devices/USB/USBProxyDevice.cpp
@@ -843,6 +843,7 @@ static DECLCALLBACK(int) usbProxyConstruct(PPDMUSBINS pUsbIns, int iInstance, PC
     /*
      * Select backend and open the device.
      */
+    return PDMUSB_SET_ERROR(pUsbIns, VERR_NOT_SUPPORTED, N_("USBProxy: not supported on Genode"));
     rc = VERR_NOT_FOUND;
     for (unsigned i = 0; i < RT_ELEMENTS(g_aUsbProxies); i++)
     {
diff --git a/src/app/virtualbox/src/VBox/Devices/USB/VUSBDevice.cpp b/src/app/virtualbox/src/VBox/Devices/USB/VUSBDevice.cpp
index 4790fcb..d649ad6 100644
--- a/src/app/virtualbox/src/VBox/Devices/USB/VUSBDevice.cpp
+++ b/src/app/virtualbox/src/VBox/Devices/USB/VUSBDevice.cpp
@@ -1134,7 +1143,7 @@ static DECLCALLBACK(int) vusbDevUrbIoThread(RTTHREAD hThread, void *pvUser)
             vusbUrbDoReapAsyncDev(pDev, RT_INDEFINITE_WAIT);
 
         /* Process any URBs waiting to be cancelled first. */
-        int rc = RTReqQueueProcess(pDev->hReqQueueSync, 0); /* Don't wait if there is nothing to do. */
+        int rc = RTReqQueueProcess(pDev->hReqQueueSync, pDev->enmState == VUSB_DEVICE_STATE_RESET ? 5 : 0); /* if in reset state (takes 10ms) sleep a bit - otherwise this thread consumes in this loop a lot of cpu time */
         Assert(RT_SUCCESS(rc) || rc == VERR_TIMEOUT); NOREF(rc);
     }
 
diff --git a/src/app/virtualbox/src/VBox/Devices/build/VBoxDD.cpp b/src/app/virtualbox/src/VBox/Devices/build/VBoxDD.cpp
index 3173a36..8105987 100644
--- a/src/app/virtualbox/src/VBox/Devices/build/VBoxDD.cpp
+++ b/src/app/virtualbox/src/VBox/Devices/build/VBoxDD.cpp
@@ -39,6 +39,7 @@ const void *g_apvVBoxDDDependencies[] =
     NULL,
 };
 
+#if 0
 
 /**
  * Register builtin devices.
@@ -329,6 +330,7 @@ extern "C" DECLEXPORT(int) VBoxDriversRegister(PCPDMDRVREGCB pCallbacks, uint32_
     return VINF_SUCCESS;
 }
 
+#endif /* if 0 */
 
 /**
  * Register builtin USB device.
diff --git a/src/app/virtualbox/src/VBox/Main/include/Matching.h b/src/app/virtualbox/src/VBox/Main/include/Matching.h
index 2f01f69..9b13e37 100644
--- a/src/app/virtualbox/src/VBox/Main/include/Matching.h
+++ b/src/app/virtualbox/src/VBox/Main/include/Matching.h
@@ -291,10 +291,12 @@ public:
         return mValueAny || mValue == aValue;
     }
 
+#if 0
     bool isMatch (const BOOL aValue) const
     {
         return isMatch (bool (aValue == TRUE));
     }
+#endif /* if 0 */
 
 private:
 
--- a/src/app/virtualbox/src/VBox/Main/src-server/MachineImpl.cpp
+++ b/src/app/virtualbox/src/VBox/Main/src-server/MachineImpl.cpp
@@ -13219,6 +13225,7 @@
 {
     LogFlowThisFunc(("\n"));
 
+    return S_OK;
 #ifdef VBOX_WITH_USB
     HRESULT rc = mUSBDeviceFilters->i_notifyProxy(true /* aInsertFilters */);
     AssertComRC(rc);
@@ -13246,6 +13253,7 @@
 {
     LogFlowThisFunc(("\n"));
 
+    return S_OK;
 #ifdef VBOX_WITH_USB
     HRESULT rc = mUSBDeviceFilters->i_notifyProxy(false /* aInsertFilters */);
     AssertComRC(rc);
--- a/src/app/virtualbox/src/VBox/Main/src-server/USBDeviceFiltersImpl.cpp
+++ b/src/app/virtualbox/src/VBox/Main/src-server/USBDeviceFiltersImpl.cpp
@@ -386,7 +386,7 @@
         ComAssertRet(pProxySvc, E_FAIL);
 
         ComAssertRet(pFilter->i_getId() == NULL, E_FAIL);
-        pFilter->i_getId() = pProxySvc->insertFilter(&pFilter->i_getData().mUSBFilter);
+//        pFilter->i_getId() = pProxySvc->insertFilter(&pFilter->i_getData().mUSBFilter);
     }
 
     alock.release();
@@ -452,7 +452,7 @@
         ComAssertRet(pProxySvc, E_FAIL);
 
         ComAssertRet(pFilter->i_getId() != NULL, E_FAIL);
-        pProxySvc->removeFilter(pFilter->i_getId());
+//        pProxySvc->removeFilter(pFilter->i_getId());
         pFilter->i_getId() = NULL;
     }
 
@@ -606,7 +606,7 @@
                 {
                     USBDeviceFilter *pFilter = *it;
                     Assert(pFilter->i_getId() != NULL);
-                    pProxySvc->removeFilter(pFilter->i_getId());
+//                    pProxySvc->removeFilter(pFilter->i_getId());
                     pFilter->i_getId() = NULL;
                 }
 
@@ -631,7 +631,7 @@
                     {
                         USBDeviceFilter *pFilter = *it; /* resolve ambiguity */
                         Assert(pFilter->i_getId() == NULL);
-                        pFilter->i_getId() = pProxySvc->insertFilter(&pFilter->i_getData().mUSBFilter);
+//                        pFilter->i_getId() = pProxySvc->insertFilter(&pFilter->i_getData().mUSBFilter);
                     }
                 }
                 ++it;
@@ -841,12 +841,12 @@
                 if (aFilter->i_getData().mData.fActive)
                 {
                     ComAssertRet(aFilter->i_getId() == NULL, E_FAIL);
-                    aFilter->i_getId() = pProxySvc->insertFilter(&aFilter->i_getData().mUSBFilter);
+//                    aFilter->i_getId() = pProxySvc->insertFilter(&aFilter->i_getData().mUSBFilter);
                 }
                 else
                 {
                     ComAssertRet(aFilter->i_getId() != NULL, E_FAIL);
-                    pProxySvc->removeFilter(aFilter->i_getId());
+//                    pProxySvc->removeFilter(aFilter->i_getId());
                     aFilter->i_getId() = NULL;
                 }
             }
@@ -857,10 +857,10 @@
             {
                 /* update the filter in the proxy */
                 ComAssertRet(aFilter->i_getId() != NULL, E_FAIL);
-                pProxySvc->removeFilter(aFilter->i_getId());
+//                pProxySvc->removeFilter(aFilter->i_getId());
                 if (aFilter->i_getData().mRemote.isMatch(false))
                 {
-                    aFilter->i_getId() = pProxySvc->insertFilter(&aFilter->i_getData().mUSBFilter);
+//                    aFilter->i_getId() = pProxySvc->insertFilter(&aFilter->i_getData().mUSBFilter);
                 }
             }
         }
@@ -1027,13 +1027,10 @@
     LogFlowThisFunc(("aInsertFilters=%RTbool\n", aInsertFilters));
 
     AutoCaller autoCaller(this);
-    AssertComRCReturn(autoCaller.rc(), false);
+    AssertComRCReturnRC(autoCaller.rc());
 
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    USBProxyService *pProxySvc = m->pHost->i_usbProxyService();
-    AssertReturn(pProxySvc, E_FAIL);
-
     DeviceFilterList::const_iterator it = m->llDeviceFilters->begin();
     while (it != m->llDeviceFilters->end())
     {
@@ -1044,10 +1041,13 @@
             && pFilter->i_getData().mRemote.isMatch(false) /* and if the filter is NOT remote */
            )
         {
+            USBProxyService *pProxySvc = m->pHost->i_usbProxyService();
+            AssertReturn(pProxySvc, E_FAIL);
+
             if (aInsertFilters)
             {
                 AssertReturn(pFilter->i_getId() == NULL, E_FAIL);
-                pFilter->i_getId() = pProxySvc->insertFilter(&pFilter->i_getData().mUSBFilter);
+//                pFilter->i_getId() = pProxySvc->insertFilter(&pFilter->i_getData().mUSBFilter);
             }
             else
             {
@@ -1056,7 +1056,7 @@
                  * process crash for example. So, don't assert that ID != NULL. */
                 if (pFilter->i_getId() != NULL)
                 {
-                    pProxySvc->removeFilter(pFilter->i_getId());
+//                    pProxySvc->removeFilter(pFilter->i_getId());
                     pFilter->i_getId() = NULL;
                 }
             }
--- a/src/VBox/Devices/USB/DrvVUSBRootHub.cpp
+++ b/src/app/virtualbox/src/VBox/Devices/USB/DrvVUSBRootHub.cpp
@@ -599,7 +614,8 @@
 
         uint64_t tsNext = vusbRhR3ProcessFrame(pThis, false /* fCallback */);
 
-        if (tsNext >= 250 * RT_NS_1US)
+        /* spinning as high priority thread is evil */
+        if (true) //tsNext >= 250 * RT_NS_1US)
         {
             rc = RTSemEventMultiWaitEx(pThis->hSemEventPeriodFrame, RTSEMWAIT_FLAGS_RELATIVE | RTSEMWAIT_FLAGS_NANOSECS | RTSEMWAIT_FLAGS_UNINTERRUPTIBLE,
                                        tsNext);
