diff options
| author | sakumisu <[email protected]> | 2025-11-28 11:41:26 +0800 |
|---|---|---|
| committer | sakumisu <[email protected]> | 2025-11-28 11:45:20 +0800 |
| commit | 3e28c528a4c1302b9e8352c9eadb2d176865344b (patch) | |
| tree | 84bb1d7f4b2d9749d203f51ea0b64fdb892528e5 | |
| parent | e10b44f64e33ed5817caaf3a0779a5b55050dd12 (diff) | |
update(class/hub): remove hport sources safely
Signed-off-by: sakumisu <[email protected]>
| -rw-r--r-- | class/hub/usbh_hub.c | 11 | ||||
| -rw-r--r-- | core/usbh_core.h | 2 |
2 files changed, 12 insertions, 1 deletions
diff --git a/class/hub/usbh_hub.c b/class/hub/usbh_hub.c index c261c97f..f134fca2 100644 --- a/class/hub/usbh_hub.c +++ b/class/hub/usbh_hub.c @@ -688,7 +688,9 @@ static void usbh_hub_thread(CONFIG_USB_OSAL_THREAD_SET_ARGV) if (ret < 0) { continue; } + usb_osal_mutex_take(bus->mutex); usbh_hub_events(hub); + usb_osal_mutex_give(bus->mutex); } } @@ -718,6 +720,12 @@ int usbh_hub_initialize(struct usbh_bus *bus) return -1; } + bus->mutex = usb_osal_mutex_create(); + if (bus->mutex == NULL) { + USB_LOG_ERR("Failed to create bus mutex\r\n"); + return -1; + } + snprintf(thread_name, 32, "usbh_hub%u", bus->busid); bus->hub_thread = usb_osal_thread_create(thread_name, CONFIG_USBHOST_PSC_STACKSIZE, CONFIG_USBHOST_PSC_PRIO, usbh_hub_thread, bus); if (bus->hub_thread == NULL) { @@ -732,6 +740,7 @@ int usbh_hub_deinitialize(struct usbh_bus *bus) struct usbh_hubport *hport; struct usbh_hub *hub; + usb_osal_mutex_take(bus->mutex); hub = &bus->hcd.roothub; for (uint8_t port = 0; port < hub->nports; port++) { hport = &hub->child[port]; @@ -744,6 +753,8 @@ int usbh_hub_deinitialize(struct usbh_bus *bus) usb_osal_thread_delete(bus->hub_thread); usb_osal_mq_delete(bus->hub_mq); + usb_osal_mutex_give(bus->mutex); + usb_osal_mutex_delete(bus->mutex); return 0; } diff --git a/core/usbh_core.h b/core/usbh_core.h index 633fe44e..153c8a36 100644 --- a/core/usbh_core.h +++ b/core/usbh_core.h @@ -201,7 +201,7 @@ struct usbh_bus { struct usbh_devaddr_map devgen; usb_osal_thread_t hub_thread; usb_osal_mq_t hub_mq; - + usb_osal_mutex_t mutex; void (*event_handler)(uint8_t busid, uint8_t hub_index, uint8_t hub_port, uint8_t intf, uint8_t event); }; |
