From 800930b924c19a56b3a6e94ad351cd0715fb410d Mon Sep 17 00:00:00 2001 From: Florian Fainelli Date: Fri, 28 Feb 2014 20:30:08 +0000 Subject: brcm2708: update against latest rpi-3.10.y branch Update our copies of the brcm2708 patches to the latest rpi-3.10-y rebased against linux-3.10.y stable (3.10.32). This should hopefully make it easier for us in the future to leverage the raspberry/rpi-* branches. Signed-off-by: Florian Fainelli git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39770 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- ...ic-memory-allocation-for-channel-lock-in-.patch | 98 ++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 target/linux/brcm2708/patches-3.10/0030-Avoid-dynamic-memory-allocation-for-channel-lock-in-.patch (limited to 'target/linux/brcm2708/patches-3.10/0030-Avoid-dynamic-memory-allocation-for-channel-lock-in-.patch') diff --git a/target/linux/brcm2708/patches-3.10/0030-Avoid-dynamic-memory-allocation-for-channel-lock-in-.patch b/target/linux/brcm2708/patches-3.10/0030-Avoid-dynamic-memory-allocation-for-channel-lock-in-.patch new file mode 100644 index 0000000000..2aa67df4a9 --- /dev/null +++ b/target/linux/brcm2708/patches-3.10/0030-Avoid-dynamic-memory-allocation-for-channel-lock-in-.patch @@ -0,0 +1,98 @@ +From f56b0b76fdd4b17bd359536ae926c4cb04706e54 Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Sat, 8 Sep 2012 15:17:53 +0100 +Subject: [PATCH 030/174] Avoid dynamic memory allocation for channel lock in + USB driver. Thanks ddv2005. + +--- + drivers/usb/host/dwc_otg/dwc_otg_hcd.c | 6 +++--- + drivers/usb/host/dwc_otg/dwc_otg_hcd.h | 2 +- + drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c | 3 +-- + drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c | 3 +-- + 4 files changed, 6 insertions(+), 8 deletions(-) + +--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c ++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c +@@ -822,6 +822,7 @@ static void dwc_otg_hcd_free(dwc_otg_hcd + } else if (dwc_otg_hcd->status_buf != NULL) { + DWC_FREE(dwc_otg_hcd->status_buf); + } ++ DWC_SPINLOCK_FREE(dwc_otg_hcd->channel_lock); + DWC_SPINLOCK_FREE(dwc_otg_hcd->lock); + /* Set core_if's lock pointer to NULL */ + dwc_otg_hcd->core_if->lock = NULL; +@@ -848,6 +849,7 @@ int dwc_otg_hcd_init(dwc_otg_hcd_t * hcd + dwc_hc_t *channel; + + hcd->lock = DWC_SPINLOCK_ALLOC(); ++ hcd->channel_lock = DWC_SPINLOCK_ALLOC(); + DWC_DEBUGPL(DBG_HCDV, "init of HCD %p given core_if %p\n", + hcd, core_if); + if (!hcd->lock) { +@@ -1248,7 +1250,7 @@ dwc_otg_transaction_type_e dwc_otg_hcd_s + dwc_otg_qh_t *qh; + int num_channels; + dwc_irqflags_t flags; +- dwc_spinlock_t *channel_lock = DWC_SPINLOCK_ALLOC(); ++ dwc_spinlock_t *channel_lock = hcd->channel_lock; + dwc_otg_transaction_type_e ret_val = DWC_OTG_TRANSACTION_NONE; + + #ifdef DEBUG_SOF +@@ -1348,8 +1350,6 @@ dwc_otg_transaction_type_e dwc_otg_hcd_s + #ifdef DEBUG_HOST_CHANNELS + last_sel_trans_num_avail_hc_at_end = hcd->available_host_channels; + #endif /* DEBUG_HOST_CHANNELS */ +- +- DWC_SPINLOCK_FREE(channel_lock); + return ret_val; + } + +--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.h ++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.h +@@ -548,7 +548,7 @@ struct dwc_otg_hcd { + + /* */ + dwc_spinlock_t *lock; +- ++ dwc_spinlock_t *channel_lock; + /** + * Private data that could be used by OS wrapper. + */ +--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c ++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c +@@ -276,7 +276,7 @@ void dump_frame_list(dwc_otg_hcd_t * hcd + static void release_channel_ddma(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh) + { + dwc_irqflags_t flags; +- dwc_spinlock_t *channel_lock = DWC_SPINLOCK_ALLOC(); ++ dwc_spinlock_t *channel_lock = hcd->channel_lock; + + dwc_hc_t *hc = qh->channel; + if (dwc_qh_is_non_per(qh)) { +@@ -306,7 +306,6 @@ static void release_channel_ddma(dwc_otg + dwc_memset(qh->desc_list, 0x00, + sizeof(dwc_otg_host_dma_desc_t) * max_desc_num(qh)); + } +- DWC_SPINLOCK_FREE(channel_lock); + } + + /** +--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c ++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c +@@ -922,7 +922,7 @@ static void release_channel(dwc_otg_hcd_ + dwc_otg_transaction_type_e tr_type; + int free_qtd; + dwc_irqflags_t flags; +- dwc_spinlock_t *channel_lock = DWC_SPINLOCK_ALLOC(); ++ dwc_spinlock_t *channel_lock = hcd->channel_lock; + + DWC_DEBUGPL(DBG_HCDV, " %s: channel %d, halt_status %d, xfer_len %d\n", + __func__, hc->hc_num, halt_status, hc->xfer_len); +@@ -1009,7 +1009,6 @@ cleanup: + if (tr_type != DWC_OTG_TRANSACTION_NONE) { + dwc_otg_hcd_queue_transactions(hcd, tr_type); + } +- DWC_SPINLOCK_FREE(channel_lock); + } + + /** -- cgit v1.2.3