Skip to content

Commit 55549f3

Browse files
committed
Avoid dynamic memory allocation for channel lock in USB driver. Thanks ddv2005.
1 parent 202a779 commit 55549f3

File tree

4 files changed

+6
-8
lines changed

4 files changed

+6
-8
lines changed

drivers/usb/host/dwc_otg/dwc_otg_hcd.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -822,6 +822,7 @@ static void dwc_otg_hcd_free(dwc_otg_hcd_t * dwc_otg_hcd)
822822
} else if (dwc_otg_hcd->status_buf != NULL) {
823823
DWC_FREE(dwc_otg_hcd->status_buf);
824824
}
825+
DWC_SPINLOCK_FREE(dwc_otg_hcd->channel_lock);
825826
DWC_SPINLOCK_FREE(dwc_otg_hcd->lock);
826827
/* Set core_if's lock pointer to NULL */
827828
dwc_otg_hcd->core_if->lock = NULL;
@@ -848,6 +849,7 @@ int dwc_otg_hcd_init(dwc_otg_hcd_t * hcd, dwc_otg_core_if_t * core_if)
848849
dwc_hc_t *channel;
849850

850851
hcd->lock = DWC_SPINLOCK_ALLOC();
852+
hcd->channel_lock = DWC_SPINLOCK_ALLOC();
851853
DWC_DEBUGPL(DBG_HCDV, "init of HCD %p given core_if %p\n",
852854
hcd, core_if);
853855
if (!hcd->lock) {
@@ -1248,7 +1250,7 @@ dwc_otg_transaction_type_e dwc_otg_hcd_select_transactions(dwc_otg_hcd_t * hcd)
12481250
dwc_otg_qh_t *qh;
12491251
int num_channels;
12501252
dwc_irqflags_t flags;
1251-
dwc_spinlock_t *channel_lock = DWC_SPINLOCK_ALLOC();
1253+
dwc_spinlock_t *channel_lock = hcd->channel_lock;
12521254
dwc_otg_transaction_type_e ret_val = DWC_OTG_TRANSACTION_NONE;
12531255

12541256
#ifdef DEBUG_SOF
@@ -1348,8 +1350,6 @@ dwc_otg_transaction_type_e dwc_otg_hcd_select_transactions(dwc_otg_hcd_t * hcd)
13481350
#ifdef DEBUG_HOST_CHANNELS
13491351
last_sel_trans_num_avail_hc_at_end = hcd->available_host_channels;
13501352
#endif /* DEBUG_HOST_CHANNELS */
1351-
1352-
DWC_SPINLOCK_FREE(channel_lock);
13531353
return ret_val;
13541354
}
13551355

drivers/usb/host/dwc_otg/dwc_otg_hcd.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -548,7 +548,7 @@ struct dwc_otg_hcd {
548548

549549
/* */
550550
dwc_spinlock_t *lock;
551-
551+
dwc_spinlock_t *channel_lock;
552552
/**
553553
* Private data that could be used by OS wrapper.
554554
*/

drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ void dump_frame_list(dwc_otg_hcd_t * hcd)
276276
static void release_channel_ddma(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh)
277277
{
278278
dwc_irqflags_t flags;
279-
dwc_spinlock_t *channel_lock = DWC_SPINLOCK_ALLOC();
279+
dwc_spinlock_t *channel_lock = hcd->channel_lock;
280280

281281
dwc_hc_t *hc = qh->channel;
282282
if (dwc_qh_is_non_per(qh)) {
@@ -306,7 +306,6 @@ static void release_channel_ddma(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh)
306306
dwc_memset(qh->desc_list, 0x00,
307307
sizeof(dwc_otg_host_dma_desc_t) * max_desc_num(qh));
308308
}
309-
DWC_SPINLOCK_FREE(channel_lock);
310309
}
311310

312311
/**

drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -922,7 +922,7 @@ static void release_channel(dwc_otg_hcd_t * hcd,
922922
dwc_otg_transaction_type_e tr_type;
923923
int free_qtd;
924924
dwc_irqflags_t flags;
925-
dwc_spinlock_t *channel_lock = DWC_SPINLOCK_ALLOC();
925+
dwc_spinlock_t *channel_lock = hcd->channel_lock;
926926

927927
DWC_DEBUGPL(DBG_HCDV, " %s: channel %d, halt_status %d, xfer_len %d\n",
928928
__func__, hc->hc_num, halt_status, hc->xfer_len);
@@ -1009,7 +1009,6 @@ static void release_channel(dwc_otg_hcd_t * hcd,
10091009
if (tr_type != DWC_OTG_TRANSACTION_NONE) {
10101010
dwc_otg_hcd_queue_transactions(hcd, tr_type);
10111011
}
1012-
DWC_SPINLOCK_FREE(channel_lock);
10131012
}
10141013

10151014
/**

0 commit comments

Comments
 (0)